Runs
Save, validate, compare, and manage validation pipeline runs. Each run captures agent scores, recommendations, and correlates issues via fingerprinting.
15 methods
client.runs.save()
Save a validation run with agent results and recommendations. Automatically correlates issues using SHA-256 fingerprinting.
ParametersSaveRunInput
projectrequiredstringProject name (1-200 chars).
workflowTyperequiredstringWorkflow type (e.g. 'ship', 'post-implementation').
agentsrequiredAgentInput[]Agent results (min 1).
recommendationsoptionalRecommendationInput[]Issues found.
timestampoptionalstringdate-timeISO 8601 timestamp. Defaults to now.
rawMarkdownoptionalstringRaw markdown report (max 100,000 chars).
summaryoptionalobjectRun summary.
definitionTypeoptionalstringDefinition type (e.g. 'agent', 'workflow', 'pipeline').
definitionNameoptionalstringDefinition name from the registry.
definitionVersionoptionalstringDefinition version (semver).
definitionHashoptionalstringSHA-256 hash of the definition content for provenance.
analysisRecordsoptionalAnalysisRecordInput[]Structured analysis data (e.g. tensions, four-cause decompositions, evidence claims).
analysisSummaryoptionalAnalysisSummaryInputAnalysis summary metadata for the run.
Return Fields
runrequiredRunSaved run with id, runNumber, timestamps.
agentsrequiredAgentSnapshot[]Saved agent results.
correlationrequiredCorrelationResultIssue correlation.
deduplicatedrequiredbooleanWhether idempotency deduplication occurred.
save(input: SaveRunInput): Promise<SaveRunResponse>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.save({
project: 'my-project',
workflowType: 'ship',
agents: [{
name: 'my-project',
decision: 'example-value',
}],
});
console.log(result.run);// Promise<SaveRunResponse>
{
run: Run;
agents: AgentSnapshot[];
correlation: CorrelationResult;
deduplicated: boolean;
}client.runs.validate()
Dry-run validation — preview what would happen without saving.
ParametersSaveRunInput
inputrequiredSaveRunInputSame schema as save().
Return Fields
wouldCreaterequirednumberNumber of issues that would be created.
wouldUpdaterequirednumberNumber of issues that would be updated.
wouldRegressrequirednumberNumber of issues that would regress.
validationErrorsrequiredstring[]Validation errors found.
previewrequiredCorrelationResultCorrelation preview.
validate(input: SaveRunInput): Promise<ValidateRunResponse>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.validate({ input: 'example-value' });
console.log(result.wouldCreate);// Promise<ValidateRunResponse>
{
wouldCreate: number;
wouldUpdate: number;
wouldRegress: number;
validationErrors: string[];
preview: CorrelationResult;
}client.runs.diff()
Compare two runs to see what changed — fixed, new, and unchanged issues.
ParametersRunDiffQuery
projectrequiredstringProject name.
baseRunrequirednumberBase run number.
compareRunrequirednumberCompare run number.
Return Fields
baseRunrequiredRunBase run.
compareRunrequiredRunCompare run.
fixedrequiredDiffIssueRef[]Issues fixed between runs.
newrequiredDiffIssueRef[]New issues in compare run.
unchangedrequiredDiffIssueRef[]Unchanged issues.
agentChangesrequiredAgentChange[]Agent score changes.
diff(query: RunDiffQuery): Promise<RunDiffResult>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.diff({
project: 'my-project',
baseRun: 85.5,
compareRun: 85.5,
});
console.log(result.baseRun);// Promise<RunDiffResult>
{
baseRun: Run;
compareRun: Run;
fixed: DiffIssueRef[];
new: DiffIssueRef[];
unchanged: DiffIssueRef[];
agentChanges: AgentChange[];
}client.runs.archive()
Archive old runs by date, run number, or keep-last policy.
ParametersArchiveRunsInput
projectrequiredstringProject name.
beforeRunNumberoptionalnumberArchive runs before this number.
beforeDateoptionalstringdate-timeArchive runs before this date.
keepLastoptionalnumberKeep this many recent runs.
reasonoptionalstringArchive reason (max 500 chars).
Return Fields
archivedrequirednumberNumber of runs archived.
archive(input: ArchiveRunsInput): Promise<ArchiveRunsResult>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.archive({ project: 'my-project' });
console.log(result.archived);// Promise<ArchiveRunsResult>
{
archived: number;
}client.runs.update()
Update a run by project name and run number.
ParametersUpdateRunByNumberInput
projectrequiredstringProject name.
runNumberrequirednumberRun number.
allGatesPassedoptionalbooleanUpdate gates passed status.
averageScoreoptionalnumber | nullUpdate average score.
rawMarkdownoptionalstring | nullUpdate raw markdown.
archivedAtoptionalstring | nulldate-timeArchive timestamp. Set to null to unarchive.
archiveReasonoptionalstring | nullReason for archiving.
agentsoptionalAgentUpdateInput[]Update agent metrics.
update(input: UpdateRunByNumberInput): Promise<Run>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.update({ project: 'my-project', runNumber: 85.5 });Promise<Run>client.runs.listByProject()
List runs for a project, newest first.
Parameters
projectIdrequiredstringProject ID or name.
workflowTypeoptionalstringFilter by workflow type.
limitoptionalnumberMax results (1-100).
Default:20listByProject(projectId: string, query?: ListRunsQuery): Promise<RunSummary[]>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.listByProject('my-project');Promise<RunSummary[]>client.runs.getLatest()
Get the latest run for a project, optionally filtered by workflow type.
Parameters
projectIdrequiredstringProject ID or name.
workflowTypeoptionalstringFilter by workflow type.
getLatest(projectId: string, workflowType?: string): Promise<Run>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.getLatest('my-project');Promise<Run>client.runs.getDetails()
Get full run details including agents and recommendations. Defaults to latest run.
Parameters
projectIdrequiredstringProject ID or name.
runNumberoptionalnumberRun number. Defaults to latest.
Return Fields
runrequiredRunRun metadata.
agentsrequiredAgentSnapshot[]Agent results.
recommendationsrequiredRecommendation[]Recommendations with correlation status.
getDetails(projectId: string, runNumber?: number): Promise<RunDetails>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.getDetails('my-project');
console.log(result.run);// Promise<RunDetails>
{
run: Run;
agents: AgentSnapshot[];
recommendations: Recommendation[];
}client.runs.get()
Get a run by its UUID.
Parameters
runIdrequiredstringuuidRun UUID.
get(runId: string): Promise<Run>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.get('550e8400-e29b-41d4-a716-446655440000');Promise<Run>client.runs.delete()
Delete a run by UUID. Sends run ID in X-Confirm-Delete header.
Parameters
runIdrequiredstringuuidRun UUID.
Return Fields
deletedrequiredbooleanAlways `true` on success.
delete(runId: string): Promise<DeleteResult>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.delete('550e8400-e29b-41d4-a716-446655440000');
console.log(result.deleted);// Promise<DeleteResult>
{
deleted: boolean;
}client.runs.updateById()
Update a run by its UUID (alternative to update() which uses project+runNumber).
ParametersUpdateRunInput
runIdrequiredstringuuidRun UUID.
allGatesPassedoptionalbooleanUpdate gates passed status.
averageScoreoptionalnumber | nullUpdate average score.
rawMarkdownoptionalstring | nullUpdate raw markdown.
updateById(runId: string, input: UpdateRunInput): Promise<Run>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.updateById({ runId: '550e8400-e29b-41d4-a716-446655440000' });Promise<Run>client.runs.getAnalysis()
Retrieve structured analysis data for a run. Returns records and summaries saved via analysisRecords and analysisSummary in save().
Parameters
runIdrequiredstringuuidRun UUID.
Return Fields
recordsrequiredAnalysisRecord[]Analysis records for this run.
summariesrequiredAnalysisSummary[]Analysis summaries for this run.
totalrequirednumberTotal record count.
getAnalysis(runId: string): Promise<RunAnalysis>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.getAnalysis('550e8400-e29b-41d4-a716-446655440000');
console.log(result.records);// Promise<RunAnalysis>
{
records: AnalysisRecord[];
summaries: AnalysisSummary[];
total: number;
}client.runs.getProjectAnalysis()
Get analysis summaries across all runs in a project.
Parameters
projectIdrequiredstringProject ID or name.
agentNameoptionalstringFilter by agent name.
agentTypeoptionalstringFilter by agent type (validator, analyst, explorer, forecaster).
decisionoptionalstringFilter by decision.
limitoptionalnumberMax results.
Default:50offsetoptionalnumberPagination offset.
Default:0Return Fields
datarequiredAnalysisSummary[]Analysis summaries.
totalrequirednumberTotal count.
getProjectAnalysis(projectId: string, query?: ProjectAnalysisQuery): Promise<ProjectAnalysisList>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.getProjectAnalysis('my-project');
console.log(result.data);// Promise<ProjectAnalysisList>
{
data: AnalysisSummary[];
total: number;
}client.runs.queryAnalysisRecords()
Query analysis records across all projects with flexible filters.
Parameters
projectoptionalstringFilter by project name.
agentTypeoptionalstringFilter by agent type.
recordTypeoptionalstringFilter by record type.
agentNameoptionalstringFilter by agent name.
limitoptionalnumberMax results.
Default:50offsetoptionalnumberPagination offset.
Default:0Return Fields
datarequiredAnalysisRecord[]Analysis records.
totalrequirednumberTotal count.
queryAnalysisRecords(query?: AnalysisRecordsQuery): Promise<AnalysisRecordsList>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.queryAnalysisRecords();
console.log(result.data);// Promise<AnalysisRecordsList>
{
data: AnalysisRecord[];
total: number;
}client.runs.getAgentRunsAnalysis()
Analysis summaries with run context for a specific agent across runs.
Parameters
agentNamerequiredstringAgent name.
queryrequiredAgentRunsAnalysisQueryQuery options (project, limit, ...).
getAgentRunsAnalysis(agentName, query)import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.runs.getAgentRunsAnalysis('code-validator', 'auth middleware');Promise<AgentRunsAnalysis>