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.
ParametersCreateUserIssueInput
projectrequiredstringProject name.
titlerequiredstringIssue title (1-500 chars).
priorityrequiredPriorityIssue priority.
criticalhighsuggestedbacklogseverityoptionalSeverityIssue severity.
criticalhighmediumlowinfocategoryoptionalstringIssue category (max 100 chars).
descriptionoptionalstringDetailed description (max 10,000 chars).
filePathoptionalstringFile path where issue was found.
lineNumberoptionalnumberLine number in file.
failureCodeoptionalstringFailure taxonomy code (e.g. STR-OMI/H).
agentoptionalstringAgent that found the issue.
typeoptionalIssueTypeIssue type.
featurebugrefactorconfigdocsinfrasecuritytestobservationdeficiencyambiguitycreate(input: CreateUserIssueInput): Promise<Issue>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',
});Promise<Issue>client.issues.search()
Search issues across projects with text matching and filters.
ParametersIssueSearchQuery
queryoptionalstringText search query.
projectsoptionalstring[]Filter by project names.
agentsoptionalstring[]Filter by agent names.
statusoptionalStatus | 'all'Filter by status.
priorityoptionalPriority | 'all'Filter by priority.
limitoptionalnumberMax results (1-100).
Default:50search(query: IssueSearchQuery): Promise<Issue[]>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.issues.search();Promise<Issue[]>client.issues.getByFingerprint()
Get an issue by its fingerprint hash and project.
Parameters
fingerprintrequiredstringIssue fingerprint hash.
projectrequiredstringProject name.
getByFingerprint(fingerprint: string, project: string): Promise<Issue>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.issues.getByFingerprint('a1b2c3d4e5f6g7h8', 'my-project');Promise<Issue>client.issues.updateStatusByFingerprint()
Update an issue's status by fingerprint and project.
ParametersUpdateIssueStatusInput
fingerprintrequiredstringIssue fingerprint hash.
projectrequiredstringProject name.
statusrequiredStatusNew status.
opencompleteddeferredwontfixmergedfalse-positiveobservationreasonoptionalstringReason for status change (max 500 chars).
Return Fields
idrequiredstringuuidIssue ID.
previousStatusrequiredStatusPrevious status.
newStatusrequiredStatusNew status.
updateStatusByFingerprint(fingerprint: string, project: string, input: UpdateIssueStatusInput): Promise<StatusUpdateResult>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);// Promise<StatusUpdateResult>
{
id: string;
previousStatus: Status;
newStatus: Status;
}client.issues.get()
Get an issue by UUID.
Parameters
issueIdrequiredstringuuidIssue UUID.
get(issueId: string): Promise<Issue>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');Promise<Issue>client.issues.getDetails()
Get full issue details including occurrences, notes, and status history.
Parameters
issueIdrequiredstringuuidIssue UUID.
Return Fields
issuerequiredIssueIssue data.
occurrencesrequiredOccurrence[]All occurrences across runs.
notesrequiredIssueNote[]User notes.
historyrequiredStatusHistory[]Status change history.
getDetails(issueId: string): Promise<IssueDetails>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);// Promise<IssueDetails>
{
issue: Issue;
occurrences: Occurrence[];
notes: IssueNote[];
history: StatusHistory[];
}client.issues.getHistory()
Get the status change history for an issue.
Parameters
issueIdrequiredstringuuidIssue UUID.
Return Fields
idrequiredstringuuidHistory entry ID.
oldStatusrequiredStatus | nullPrevious status (null for initial).
newStatusrequiredStatusNew status.
reasonrequiredstring | nullChange reason.
changedAtrequiredstringdate-timeChange timestamp.
getHistory(issueId: string): Promise<StatusHistory[]>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);// Promise<StatusHistory[]>
{
id: string;
oldStatus: Status | null;
newStatus: Status;
reason: string | null;
changedAt: string;
}client.issues.updateStatus()
Update an issue's status by UUID.
ParametersUpdateIssueStatusInput
issueIdrequiredstringuuidIssue UUID.
statusrequiredStatusNew status.
opencompleteddeferredwontfixmergedfalse-positiveobservationreasonoptionalstringReason for status change.
updateStatus(issueId: string, input: UpdateIssueStatusInput): Promise<Issue>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' });Promise<Issue>client.issues.update()
Update an issue's metadata fields.
ParametersUpdateIssueInput
issueIdrequiredstringuuidIssue UUID.
titleoptionalstringIssue title.
priorityoptionalPriorityIssue priority.
criticalhighsuggestedbacklogseverityoptionalSeverity | nullIssue severity.
categoryoptionalstring | nullIssue category.
filePathoptionalstring | nullFile path.
lineNumberoptionalnumber | nullLine number.
update(issueId: string, input: UpdateIssueInput): Promise<Issue>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' });Promise<Issue>client.issues.addNote()
Add a note to an issue.
ParametersCreateIssueNoteInput
issueIdrequiredstringuuidIssue UUID.
contentrequiredstringNote content (1-10,000 chars).
noteTypeoptionalNoteTypeNote type.
contextresolutionblockercreatedByoptionalstringAuthor name (max 200 chars).
Return Fields
idrequiredstringuuidNote ID.
contentrequiredstringNote content.
noteTyperequiredNoteTypeNote type.
createdAtrequiredstringdate-timeCreation timestamp.
addNote(issueId: string, input: CreateIssueNoteInput): Promise<IssueNote>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);// Promise<IssueNote>
{
id: string;
content: string;
noteType: NoteType;
createdAt: string;
}client.issues.restore()
Restore a soft-deleted issue.
Parameters
issueIdrequiredstringuuidIssue UUID.
restore(issueId: string): Promise<Issue>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');Promise<Issue>client.issues.undoLastChange()
Undo the last status change on an issue (within 24 hours).
Parameters
issueIdrequiredstringuuidIssue UUID.
undoLastChange(issueId: string): Promise<Issue>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');Promise<Issue>client.issues.bulkUpdateStatus()
Bulk update issue statuses across projects.
Parameters
updatesrequiredBulkStatusUpdateItem[]Array of status updates.
Return Fields
updatedrequirednumberNumber of issues successfully updated.
failedrequiredstring[]IDs of issues that failed to update.
bulkUpdateStatus(updates: BulkStatusUpdateItem[]): Promise<BulkStatusUpdateResult>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);// Promise<BulkStatusUpdateResult>
{
updated: number;
failed: string[];
}