RegistryDashboard

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.

Requires authentication
projectrequiredstring

Project name (1-200 chars).

workflowTyperequiredstring

Workflow type (e.g. 'ship', 'post-implementation').

agentsrequiredAgentInput[]

Agent results (min 1).

recommendationsoptionalRecommendationInput[]

Issues found.

timestampoptionalstringdate-time

ISO 8601 timestamp. Defaults to now.

rawMarkdownoptionalstring

Raw markdown report (max 100,000 chars).

summaryoptionalobject

Run summary.

definitionTypeoptionalstring

Definition type (e.g. 'agent', 'workflow', 'pipeline').

definitionNameoptionalstring

Definition name from the registry.

definitionVersionoptionalstring

Definition version (semver).

definitionHashoptionalstring

SHA-256 hash of the definition content for provenance.

analysisRecordsoptionalAnalysisRecordInput[]

Structured analysis data (e.g. tensions, four-cause decompositions, evidence claims).

analysisSummaryoptionalAnalysisSummaryInput

Analysis summary metadata for the run.

runrequiredRun

Saved run with id, runNumber, timestamps.

agentsrequiredAgentSnapshot[]

Saved agent results.

correlationrequiredCorrelationResult

Issue correlation.

deduplicatedrequiredboolean

Whether idempotency deduplication occurred.

save(input: SaveRunInput): Promise<SaveRunResponse>
typescript
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);
Response Type
// Promise<SaveRunResponse>
{
  run: Run;
  agents: AgentSnapshot[];
  correlation: CorrelationResult;
  deduplicated: boolean;
}

client.runs.validate()

Dry-run validation — preview what would happen without saving.

Requires authentication
inputrequiredSaveRunInput

Same schema as save().

wouldCreaterequirednumber

Number of issues that would be created.

wouldUpdaterequirednumber

Number of issues that would be updated.

wouldRegressrequirednumber

Number of issues that would regress.

validationErrorsrequiredstring[]

Validation errors found.

previewrequiredCorrelationResult

Correlation preview.

validate(input: SaveRunInput): Promise<ValidateRunResponse>
typescript
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);
Response Type
// 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.

Requires authentication
projectrequiredstring

Project name.

baseRunrequirednumber

Base run number.

compareRunrequirednumber

Compare run number.

baseRunrequiredRun

Base run.

compareRunrequiredRun

Compare run.

fixedrequiredDiffIssueRef[]

Issues fixed between runs.

newrequiredDiffIssueRef[]

New issues in compare run.

unchangedrequiredDiffIssueRef[]

Unchanged issues.

agentChangesrequiredAgentChange[]

Agent score changes.

diff(query: RunDiffQuery): Promise<RunDiffResult>
typescript
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);
Response Type
// 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.

Requires authentication
projectrequiredstring

Project name.

beforeRunNumberoptionalnumber

Archive runs before this number.

beforeDateoptionalstringdate-time

Archive runs before this date.

keepLastoptionalnumber

Keep this many recent runs.

reasonoptionalstring

Archive reason (max 500 chars).

archivedrequirednumber

Number of runs archived.

archive(input: ArchiveRunsInput): Promise<ArchiveRunsResult>
typescript
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);
Response Type
// Promise<ArchiveRunsResult>
{
  archived: number;
}

client.runs.update()

Update a run by project name and run number.

Requires authentication
projectrequiredstring

Project name.

runNumberrequirednumber

Run number.

allGatesPassedoptionalboolean

Update gates passed status.

averageScoreoptionalnumber | null

Update average score.

rawMarkdownoptionalstring | null

Update raw markdown.

archivedAtoptionalstring | nulldate-time

Archive timestamp. Set to null to unarchive.

archiveReasonoptionalstring | null

Reason for archiving.

agentsoptionalAgentUpdateInput[]

Update agent metrics.

update(input: UpdateRunByNumberInput): Promise<Run>
typescript
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 });
Response Type
Promise<Run>

client.runs.listByProject()

List runs for a project, newest first.

Requires authentication
projectIdrequiredstring

Project ID or name.

workflowTypeoptionalstring

Filter by workflow type.

limitoptionalnumber

Max results (1-100).

Default: 20
listByProject(projectId: string, query?: ListRunsQuery): Promise<RunSummary[]>
typescript
import { OpsClient } from '@uluops/ops-sdk';

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

const result = await client.runs.listByProject('my-project');
Response Type
Promise<RunSummary[]>

client.runs.getLatest()

Get the latest run for a project, optionally filtered by workflow type.

Requires authentication
projectIdrequiredstring

Project ID or name.

workflowTypeoptionalstring

Filter by workflow type.

getLatest(projectId: string, workflowType?: string): Promise<Run>
typescript
import { OpsClient } from '@uluops/ops-sdk';

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

const result = await client.runs.getLatest('my-project');
Response Type
Promise<Run>

client.runs.getDetails()

Get full run details including agents and recommendations. Defaults to latest run.

Requires authentication
projectIdrequiredstring

Project ID or name.

runNumberoptionalnumber

Run number. Defaults to latest.

runrequiredRun

Run metadata.

agentsrequiredAgentSnapshot[]

Agent results.

recommendationsrequiredRecommendation[]

Recommendations with correlation status.

getDetails(projectId: string, runNumber?: number): Promise<RunDetails>
typescript
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);
Response Type
// Promise<RunDetails>
{
  run: Run;
  agents: AgentSnapshot[];
  recommendations: Recommendation[];
}

client.runs.get()

Get a run by its UUID.

Requires authentication
runIdrequiredstringuuid

Run UUID.

get(runId: string): Promise<Run>
typescript
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');
Response Type
Promise<Run>

client.runs.delete()

Delete a run by UUID. Sends run ID in X-Confirm-Delete header.

Requires authentication
runIdrequiredstringuuid

Run UUID.

deletedrequiredboolean

Always `true` on success.

delete(runId: string): Promise<DeleteResult>
typescript
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);
Response Type
// Promise<DeleteResult>
{
  deleted: boolean;
}

client.runs.updateById()

Update a run by its UUID (alternative to update() which uses project+runNumber).

Requires authentication
runIdrequiredstringuuid

Run UUID.

allGatesPassedoptionalboolean

Update gates passed status.

averageScoreoptionalnumber | null

Update average score.

rawMarkdownoptionalstring | null

Update raw markdown.

updateById(runId: string, input: UpdateRunInput): Promise<Run>
typescript
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' });
Response Type
Promise<Run>

client.runs.getAnalysis()

Retrieve structured analysis data for a run. Returns records and summaries saved via analysisRecords and analysisSummary in save().

Requires authentication
runIdrequiredstringuuid

Run UUID.

recordsrequiredAnalysisRecord[]

Analysis records for this run.

summariesrequiredAnalysisSummary[]

Analysis summaries for this run.

totalrequirednumber

Total record count.

getAnalysis(runId: string): Promise<RunAnalysis>
typescript
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);
Response Type
// Promise<RunAnalysis>
{
  records: AnalysisRecord[];
  summaries: AnalysisSummary[];
  total: number;
}

client.runs.getProjectAnalysis()

Get analysis summaries across all runs in a project.

Requires authentication
projectIdrequiredstring

Project ID or name.

agentNameoptionalstring

Filter by agent name.

agentTypeoptionalstring

Filter by agent type (validator, analyst, explorer, forecaster).

decisionoptionalstring

Filter by decision.

limitoptionalnumber

Max results.

Default: 50
offsetoptionalnumber

Pagination offset.

Default: 0
datarequiredAnalysisSummary[]

Analysis summaries.

totalrequirednumber

Total count.

getProjectAnalysis(projectId: string, query?: ProjectAnalysisQuery): Promise<ProjectAnalysisList>
typescript
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);
Response Type
// Promise<ProjectAnalysisList>
{
  data: AnalysisSummary[];
  total: number;
}

client.runs.queryAnalysisRecords()

Query analysis records across all projects with flexible filters.

Requires authentication
projectoptionalstring

Filter by project name.

agentTypeoptionalstring

Filter by agent type.

recordTypeoptionalstring

Filter by record type.

agentNameoptionalstring

Filter by agent name.

limitoptionalnumber

Max results.

Default: 50
offsetoptionalnumber

Pagination offset.

Default: 0
datarequiredAnalysisRecord[]

Analysis records.

totalrequirednumber

Total count.

queryAnalysisRecords(query?: AnalysisRecordsQuery): Promise<AnalysisRecordsList>
typescript
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);
Response Type
// Promise<AnalysisRecordsList>
{
  data: AnalysisRecord[];
  total: number;
}

client.runs.getAgentRunsAnalysis()

Analysis summaries with run context for a specific agent across runs.

Requires authentication
agentNamerequiredstring

Agent name.

queryrequiredAgentRunsAnalysisQuery

Query options (project, limit, ...).

getAgentRunsAnalysis(agentName, query)
typescript
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');
Response Type
Promise<AgentRunsAnalysis>