RegistryDashboard

Issues

Create, search, update, and manage validation issues. Issues are correlated across runs using SHA-256 fingerprinting of title + agent + filePath + category.

13 methods

client.issues.create()

Create a user-reported issue outside of a validation run.

Requires authentication
projectrequiredstring

Project name.

titlerequiredstring

Issue title (1-500 chars).

priorityrequiredPriority

Issue priority.

criticalhighsuggestedbacklog
severityoptionalSeverity

Issue severity.

criticalhighmediumlowinfo
categoryoptionalstring

Issue category (max 100 chars).

descriptionoptionalstring

Detailed description (max 10,000 chars).

filePathoptionalstring

File path where issue was found.

lineNumberoptionalnumber

Line number in file.

failureCodeoptionalstring

Failure taxonomy code (e.g. STR-OMI/H).

agentoptionalstring

Agent that found the issue.

typeoptionalIssueType

Issue type.

featurebugrefactorconfigdocsinfrasecuritytestobservationdeficiencyambiguity
create(input: CreateUserIssueInput): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.create({
    project: 'my-project',
    title: 'Missing error handler in auth middleware',
    priority: 'critical',
  });
Response Type
Promise<Issue>

client.issues.getByFingerprint()

Get an issue by its fingerprint hash and project.

Requires authentication
fingerprintrequiredstring

Issue fingerprint hash.

projectrequiredstring

Project name.

getByFingerprint(fingerprint: string, project: string): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.getByFingerprint('a1b2c3d4e5f6g7h8', 'my-project');
Response Type
Promise<Issue>

client.issues.updateStatusByFingerprint()

Update an issue's status by fingerprint and project.

Requires authentication
fingerprintrequiredstring

Issue fingerprint hash.

projectrequiredstring

Project name.

statusrequiredStatus

New status.

opencompleteddeferredwontfixmergedfalse-positiveobservation
reasonoptionalstring

Reason for status change (max 500 chars).

idrequiredstringuuid

Issue ID.

previousStatusrequiredStatus

Previous status.

newStatusrequiredStatus

New status.

updateStatusByFingerprint(fingerprint: string, project: string, input: UpdateIssueStatusInput): Promise<StatusUpdateResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.updateStatusByFingerprint({
    fingerprint: 'a1b2c3d4e5f6g7h8',
    project: 'my-project',
    status: 'open',
  });

console.log(result.id);
Response Type
// Promise<StatusUpdateResult>
{
  id: string;
  previousStatus: Status;
  newStatus: Status;
}

client.issues.get()

Get an issue by UUID.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

get(issueId: string): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.get('550e8400-e29b-41d4-a716-446655440000');
Response Type
Promise<Issue>

client.issues.getDetails()

Get full issue details including occurrences, notes, and status history.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

issuerequiredIssue

Issue data.

occurrencesrequiredOccurrence[]

All occurrences across runs.

notesrequiredIssueNote[]

User notes.

historyrequiredStatusHistory[]

Status change history.

getDetails(issueId: string): Promise<IssueDetails>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.getDetails('550e8400-e29b-41d4-a716-446655440000');

console.log(result.issue);
Response Type
// Promise<IssueDetails>
{
  issue: Issue;
  occurrences: Occurrence[];
  notes: IssueNote[];
  history: StatusHistory[];
}

client.issues.getHistory()

Get the status change history for an issue.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

idrequiredstringuuid

History entry ID.

oldStatusrequiredStatus | null

Previous status (null for initial).

newStatusrequiredStatus

New status.

reasonrequiredstring | null

Change reason.

changedAtrequiredstringdate-time

Change timestamp.

getHistory(issueId: string): Promise<StatusHistory[]>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.getHistory('550e8400-e29b-41d4-a716-446655440000');

console.log(result.id);
Response Type
// Promise<StatusHistory[]>
{
  id: string;
  oldStatus: Status | null;
  newStatus: Status;
  reason: string | null;
  changedAt: string;
}

client.issues.updateStatus()

Update an issue's status by UUID.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

statusrequiredStatus

New status.

opencompleteddeferredwontfixmergedfalse-positiveobservation
reasonoptionalstring

Reason for status change.

updateStatus(issueId: string, input: UpdateIssueStatusInput): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.updateStatus({ issueId: '550e8400-e29b-41d4-a716-446655440000', status: 'open' });
Response Type
Promise<Issue>

client.issues.update()

Update an issue's metadata fields.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

titleoptionalstring

Issue title.

priorityoptionalPriority

Issue priority.

criticalhighsuggestedbacklog
severityoptionalSeverity | null

Issue severity.

categoryoptionalstring | null

Issue category.

filePathoptionalstring | null

File path.

lineNumberoptionalnumber | null

Line number.

update(issueId: string, input: UpdateIssueInput): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.update({ issueId: '550e8400-e29b-41d4-a716-446655440000' });
Response Type
Promise<Issue>

client.issues.addNote()

Add a note to an issue.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

contentrequiredstring

Note content (1-10,000 chars).

noteTypeoptionalNoteType

Note type.

contextresolutionblocker
createdByoptionalstring

Author name (max 200 chars).

idrequiredstringuuid

Note ID.

contentrequiredstring

Note content.

noteTyperequiredNoteType

Note type.

createdAtrequiredstringdate-time

Creation timestamp.

addNote(issueId: string, input: CreateIssueNoteInput): Promise<IssueNote>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.addNote({ issueId: '550e8400-e29b-41d4-a716-446655440000', content: 'name: example-agent\nversion: 1.0.0' });

console.log(result.id);
Response Type
// Promise<IssueNote>
{
  id: string;
  content: string;
  noteType: NoteType;
  createdAt: string;
}

client.issues.restore()

Restore a soft-deleted issue.

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

restore(issueId: string): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.restore('550e8400-e29b-41d4-a716-446655440000');
Response Type
Promise<Issue>

client.issues.undoLastChange()

Undo the last status change on an issue (within 24 hours).

Requires authentication
issueIdrequiredstringuuid

Issue UUID.

undoLastChange(issueId: string): Promise<Issue>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.undoLastChange('550e8400-e29b-41d4-a716-446655440000');
Response Type
Promise<Issue>

client.issues.bulkUpdateStatus()

Bulk update issue statuses across projects.

Requires authentication
updatesrequiredBulkStatusUpdateItem[]

Array of status updates.

updatedrequirednumber

Number of issues successfully updated.

failedrequiredstring[]

IDs of issues that failed to update.

bulkUpdateStatus(updates: BulkStatusUpdateItem[]): Promise<BulkStatusUpdateResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.issues.bulkUpdateStatus({
    updates: [{
        issueId: '550e8400-e29b-41d4-a716-446655440000',
        status: 'open',
      }],
  });

console.log(result.updated);
Response Type
// Promise<BulkStatusUpdateResult>
{
  updated: number;
  failed: string[];
}