@agentskit/harness 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -32
- package/CONTRIBUTING.md +60 -12
- package/MANIFESTO.md +23 -0
- package/README.md +199 -142
- package/dist/cli.js +796 -221
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +739 -121
- package/dist/index.js +1179 -303
- package/dist/index.js.map +1 -1
- package/docs/ADR-0025-portable-orchestration-controls.md +27 -0
- package/docs/ORGANIZATION.md +37 -0
- package/package.json +41 -34
- package/docs/ADR-0025-ci-dogfood.md +0 -22
- package/docs/ADR-0026-ci-evidence-artifact.md +0 -22
- package/docs/ADR-0027-portable-evidence.md +0 -19
- package/docs/ADR-0028-effective-metrics.md +0 -20
- package/docs/ADR-0029-honest-ci-preparation.md +0 -20
- package/docs/ADR-0030-agentskit-os-benchmark-bridge.md +0 -20
- package/docs/ADR-0031-real-provider-baseline.md +0 -18
- package/docs/ADR-0032-harness-equivalent-benchmark.md +0 -25
- package/docs/ADR-0033-portable-agent-gate.md +0 -25
- package/docs/ADR-0034-measurement-quality-gates.md +0 -25
- package/docs/ADR-0035-reproducible-benchmark-samples.md +0 -20
- package/docs/ADR-0036-comparable-baseline-samples.md +0 -20
- package/docs/ADR-0037-replicated-baseline-collection.md +0 -27
- package/docs/ADR-0038-end-to-end-benchmark-boundary.md +0 -28
- package/docs/ADR-0039-artifact-and-protocol-metrics.md +0 -39
- package/docs/ADR-0040-benchmark-corpus-surfaces.md +0 -32
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/profiles.ts","../src/hash.ts","../src/files.ts","../src/types.ts","../src/config.ts","../src/state-machine.ts","../src/events.ts","../src/plugins.ts","../src/context.ts","../src/runs.ts","../src/evidence.ts","../src/source.ts","../src/verification.ts","../src/adapters/doc-bridge.ts","../src/metrics.ts","../src/bundle.ts","../src/cli.ts"],"names":["index","resolve","isRecord","record","id","benchmark","dirname","join","existsSync","readFileSync","body","events","mkdirSync","sourceHash","saveRun","transition","relative","now","writeFileSync","digest","rate","readdirSync","sha256","surface","artifactAcceptanceRate","reviewMinutes","item","observation","rmSync","requireRun","sep","createHash"],"mappings":"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","file":"cli.js","sourcesContent":["import type { RunState } from './types.js'\n\nexport const STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const satisfies readonly RunState[]\n\nexport const LEGAL_TRANSITIONS = {\n CLARIFYING: ['PLANNED', 'BLOCKED', 'CANCELLED'],\n PLANNED: ['IMPLEMENTING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n IMPLEMENTING: ['VERIFYING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n VERIFYING: ['AWAITING_HUMAN_APPROVAL', 'BLOCKED', 'STALE', 'CANCELLED'],\n AWAITING_HUMAN_APPROVAL: ['AWAITING_AUTHORIZATION', 'COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n AWAITING_AUTHORIZATION: ['COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n COMPLETE: ['STALE', 'SUPERSEDED'],\n BLOCKED: ['SUPERSEDED'],\n STALE: ['SUPERSEDED', 'PLANNED'],\n CANCELLED: ['SUPERSEDED'],\n SUPERSEDED: [],\n} as const satisfies Readonly<Record<RunState, readonly RunState[]>>\n\nexport const REAL_CATEGORIES: ReadonlySet<string> = new Set(['endpoint', 'database', 'cli', 'mcp', 'ui'])\nexport const DECISIONS: ReadonlySet<string> = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n","export type HarnessErrorCode = 'HARNESS_ERROR' | 'INVALID_CONFIG' | 'INVALID_INPUT' | 'INVALID_STATE' | 'POLICY_BLOCKED' | 'CLARIFYING' | 'STALE' | 'WORKTREE_DIRTY' | 'ACTIVE_RUN' | 'NO_RUN' | 'HUMAN_APPROVAL_REQUIRED'\n\nexport class HarnessError extends Error {\n public readonly code: HarnessErrorCode\n\n public constructor(message: string, code: HarnessErrorCode = 'HARNESS_ERROR') {\n super(message)\n this.name = 'HarnessError'\n this.code = code\n }\n}\n\nexport const fail = (message: string, code: HarnessErrorCode = 'HARNESS_ERROR'): never => {\n throw new HarnessError(message, code)\n}\n","import { fail } from './errors.js'\n\ntype RawRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst record = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst id = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return value as string\n}\nconst parents = (value: unknown, label: string): string[] => value === undefined ? [] : Array.isArray(value) ? value.map((item, index) => id(item, `${label}[${index}]`)) : [id(value, label)]\n\nconst merge = (base: RawRecord, overlay: RawRecord): RawRecord => {\n const result: RawRecord = { ...base }\n for (const key of ['surfaces', 'budget', 'cleanup'] as const) {\n if (overlay[key] !== undefined) result[key] = { ...(isRecord(result[key]) ? result[key] : {}), ...record(overlay[key], `profile.${key}`) }\n }\n if (overlay['checkOverrides'] !== undefined) {\n if (!Array.isArray(overlay['checkOverrides'])) fail('profile.checkOverrides must be an array.', 'INVALID_CONFIG')\n const checks = Array.isArray(result['checks']) ? [...result['checks']] : []\n for (const [index, value] of (overlay['checkOverrides'] as unknown[]).entries()) {\n const override = record(value, `profile.checkOverrides[${index}]`)\n const checkId = id(override['id'], `profile.checkOverrides[${index}].id`)\n const checkIndex = checks.findIndex((check) => isRecord(check) && check['id'] === checkId)\n if (checkIndex < 0) fail(`profile.checkOverrides references unknown check: ${checkId}.`, 'INVALID_CONFIG')\n checks[checkIndex] = { ...(checks[checkIndex] as RawRecord), ...override }\n }\n result['checks'] = checks\n }\n return result\n}\n\nexport const resolveProfile = (root: RawRecord): RawRecord => {\n if (root['profiles'] === undefined) return root\n const profileMap = record(root['profiles'], 'profiles')\n const selected = id(root['profile'], 'profile')\n const visiting = new Set<string>()\n const visited = new Map<string, RawRecord>()\n const resolve = (name: string): RawRecord => {\n const cached = visited.get(name)\n if (cached) return cached\n if (visiting.has(name)) fail(`Profile inheritance cycle includes ${name}.`, 'INVALID_CONFIG')\n const definition = record(profileMap[name], `profiles.${name}`)\n visiting.add(name)\n let result: RawRecord = { ...root }\n for (const parent of parents(definition['extends'], `profiles.${name}.extends`)) result = merge(result, resolve(parent))\n result = merge(result, definition)\n visiting.delete(name); visited.set(name, result)\n return result\n }\n return resolve(selected)\n}\n","import { createHash } from 'node:crypto'\n\nexport const sha256 = (value: string | NodeJS.ArrayBufferView): string => createHash('sha256').update(value).digest('hex')\nexport const hashJson = (value: unknown): string => sha256(JSON.stringify(value))\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport type { LoadedConfig, VerificationRun } from './types.js'\n\nexport const readJson = (path: string): unknown => JSON.parse(readFileSync(path, 'utf8')) as unknown\nexport const writeJson = (path: string, value: unknown): void => {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nexport const pathInside = (root: string, candidate: string): boolean => {\n const rel = relative(resolve(root), resolve(candidate))\n return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !rel.startsWith(sep))\n}\n\nexport const latestPath = (stateDir: string): string => join(stateDir, 'latest.json')\nexport const runPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'run.json')\nexport const saveRun = (stateDir: string, run: VerificationRun): void => writeJson(runPath(stateDir, run.runId), run)\nexport const readRun = (stateDir: string, runId: string): VerificationRun => readJson(runPath(stateDir, runId)) as VerificationRun\n\nexport const loadLatestRun = (stateDir: string): VerificationRun | null => {\n if (!existsSync(latestPath(stateDir))) return null\n const pointer = readJson(latestPath(stateDir)) as { readonly runId: string }\n return readRun(stateDir, pointer.runId)\n}\n\nexport const setLatest = (stateDir: string, run: VerificationRun): void => writeJson(latestPath(stateDir), {\n runId: run.runId,\n path: relative(resolve(stateDir, '..', '..'), runPath(stateDir, run.runId)),\n updatedAt: new Date().toISOString(),\n})\n\nexport const cleanConfiguredArtifacts = (loaded: LoadedConfig): { readonly cleaned: readonly string[] } => {\n const roots = loaded.config.cleanup?.roots ?? []\n for (const root of roots) {\n const target = resolve(loaded.root, root)\n if (!pathInside(loaded.root, target)) fail(`Cleanup root escapes project root: ${root}`, 'INVALID_CONFIG')\n if (existsSync(target)) for (const entry of readdirSync(target)) rmSync(join(target, entry), { recursive: true, force: true })\n }\n return { cleaned: roots }\n}\n\nexport const fileContents = (path: string): string => readFileSync(path, 'utf8')\n","import type { ContextSnapshot } from './context.js'\n\nexport const SURFACE_NAMES = ['logic', 'endpoint', 'database', 'cli', 'mcp', 'ui', 'docs'] as const\nexport type SurfaceName = typeof SURFACE_NAMES[number]\n\nexport const CHECK_CATEGORIES = ['build', 'test', 'lint', ...SURFACE_NAMES, 'custom'] as const\nexport type CheckCategory = typeof CHECK_CATEGORIES[number]\n\nexport const RUN_STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const\nexport type RunState = typeof RUN_STATES[number]\n\nexport interface SurfaceRequirement {\n readonly required: boolean\n readonly reason?: string\n}\n\nexport interface ContractScope {\n readonly inScope: readonly string[]\n readonly outOfScope: readonly string[]\n}\n\nexport interface ContractOutcome {\n readonly id: string\n readonly statement: string\n readonly checks: readonly string[]\n}\n\nexport interface TaskContract {\n readonly intent: string\n readonly scope: ContractScope\n readonly ambiguities: readonly string[]\n readonly outcomes: readonly ContractOutcome[]\n}\n\nexport interface VerificationCheck {\n readonly id: string\n readonly category: CheckCategory\n readonly command: string\n readonly required: boolean\n readonly timeoutMs: number\n readonly execution?: 'real'\n readonly capabilities?: readonly string[]\n readonly evidence: 'structured'\n}\n\nexport interface TrackingConfig {\n readonly required: boolean\n readonly target?: string\n readonly reason?: string\n}\n\nexport interface BenchmarkBinding {\n readonly suiteId: string\n readonly taskId: string\n readonly mode: 'harness'\n}\n\nexport interface VerificationConfig {\n readonly schemaVersion: 1\n readonly project: string\n readonly root?: string\n readonly stateDir?: string\n readonly profile: string\n readonly contract: TaskContract\n readonly surfaces: Readonly<Record<SurfaceName, SurfaceRequirement>>\n readonly checks: readonly VerificationCheck[]\n readonly tracking: TrackingConfig\n readonly budget?: { readonly maxDurationMs?: number }\n readonly cleanup?: { readonly roots?: readonly string[] }\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface LoadedConfig {\n readonly absolute: string\n readonly root: string\n readonly stateDir: string\n readonly config: VerificationConfig\n readonly configHash: string\n}\n\nexport interface SourceSnapshot {\n readonly revision: string\n readonly status: string\n readonly statusHash: string\n}\n\nexport interface EvidenceArtifact {\n readonly type?: string\n readonly path: string\n readonly sha256: string\n readonly viewport?: { readonly width: number; readonly height: number } | string\n}\n\nexport interface StructuredEvidence {\n readonly status: string\n readonly criteria: readonly string[]\n readonly capability?: string\n readonly artifacts?: readonly EvidenceArtifact[]\n readonly [key: string]: unknown\n}\n\nexport interface CheckResult {\n readonly id: string\n readonly category: CheckCategory\n readonly status: 'pending' | 'passed' | 'failed'\n readonly exitCode?: number\n readonly durationMs?: number\n readonly evidence?: StructuredEvidence\n readonly failures?: readonly string[]\n}\n\nexport interface RunOutcome extends ContractOutcome {\n readonly status: 'pending' | 'passed' | 'failed'\n}\n\nexport interface EvidenceReference {\n readonly checkId: string\n readonly stdout: string\n readonly stderr: string\n}\n\nexport interface VerificationRun {\n readonly type: 'agentskit-harness-run'\n readonly schemaVersion: 1\n readonly runId: string\n readonly project: string\n readonly state: RunState\n readonly configHash: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly sourceStatusHash: string\n readonly baseline: SourceSnapshot\n /** A human-approved plan, retained for backwards compatibility with v1 runs. */\n readonly contractApproval?: { readonly actor: 'human'; readonly at: string; readonly contractHash: string }\n /** An automated preparation is never an approval and cannot complete a run. */\n readonly contractPreparation?: { readonly actor: 'ci'; readonly at: string; readonly contractHash: string }\n readonly checks: readonly CheckResult[]\n readonly outcomes: readonly RunOutcome[]\n readonly transitions: readonly StateTransition[]\n readonly evidenceReferences: readonly EvidenceReference[]\n readonly contextSnapshots: readonly ContextSnapshot[]\n readonly contextHash?: string\n readonly verificationDigest?: string\n readonly benchmark?: BenchmarkBinding\n readonly supersedes?: string\n readonly dirtyBaselineAuthorized?: boolean\n readonly metrics?: { readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly humanApproval?: { readonly actor: 'human'; readonly at: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n readonly authorization?: { readonly actor: 'human'; readonly at: string; readonly target: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n}\n\nexport interface RunReconciliation {\n readonly status: 'verified'\n readonly runId: string\n readonly state: RunState\n readonly eventCount: number\n readonly headHash?: string\n readonly verificationDigest?: string\n}\n\nexport interface StateTransition {\n readonly from: RunState | null\n readonly to: RunState\n readonly at: string\n readonly actor?: string\n readonly reason?: string\n}\n","import { dirname, resolve } from 'node:path'\nimport { REAL_CATEGORIES } from './constants.js'\nimport { resolveProfile } from './profiles.js'\nimport { fail } from './errors.js'\nimport { hashJson } from './hash.js'\nimport { pathInside, readJson } from './files.js'\nimport type { CheckCategory, ContractOutcome, LoadedConfig, SurfaceName, SurfaceRequirement, TaskContract, TrackingConfig, VerificationCheck, VerificationConfig } from './types.js'\nimport { CHECK_CATEGORIES, SURFACE_NAMES } from './types.js'\n\ninterface RawRecord { readonly [key: string]: unknown }\ninterface RawScope extends RawRecord { readonly inScope?: unknown; readonly outOfScope?: unknown }\ninterface RawContract extends RawRecord { readonly intent?: unknown; readonly scope?: unknown; readonly ambiguities?: unknown; readonly outcomes?: unknown }\ninterface RawCheck extends RawRecord { readonly id?: unknown; readonly category?: unknown; readonly command?: unknown; readonly required?: unknown; readonly timeoutMs?: unknown; readonly execution?: unknown; readonly capabilities?: unknown; readonly evidence?: unknown }\ninterface RawTracking extends RawRecord { readonly required?: unknown; readonly target?: unknown; readonly reason?: unknown }\ninterface RawConfig extends RawRecord { readonly schemaVersion?: unknown; readonly project?: unknown; readonly root?: unknown; readonly stateDir?: unknown; readonly profile?: unknown; readonly profiles?: unknown; readonly contract?: unknown; readonly checks?: unknown; readonly surfaces?: unknown; readonly tracking?: unknown; readonly budget?: unknown; readonly cleanup?: unknown }\ninterface RawBudget extends RawRecord { readonly maxDurationMs?: unknown }\ninterface RawCleanup extends RawRecord { readonly roots?: unknown }\ninterface RawBenchmark extends RawRecord { readonly suiteId?: unknown; readonly taskId?: unknown; readonly mode?: unknown }\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst stringValue = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} is required.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} is required.`, 'INVALID_CONFIG')\n return result\n}\nconst stringArray = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n const items: unknown[] = value as unknown[]\n if (!items.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => stringValue(item, label))\n}\nconst asRecord = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst surface = (value: unknown, name: SurfaceName): SurfaceRequirement => {\n if (typeof value === 'boolean') return value ? { required: true } : { required: false, reason: `${name} is not applicable.` }\n const record = asRecord(value, `surfaces.${name}`)\n if (typeof record['required'] !== 'boolean') fail(`surfaces.${name}.required must be boolean.`, 'INVALID_CONFIG')\n if (!record['required'] && typeof record['reason'] !== 'string') fail(`surfaces.${name}.reason is required when not applicable.`, 'INVALID_CONFIG')\n return { required: record['required'] as boolean, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}) }\n}\n\nconst parseCheck = (value: unknown, index: number): VerificationCheck => {\n const record = asRecord(value, `checks[${index}]`) as RawCheck\n const id = stringValue(record['id'], `checks[${index}].id`)\n const category = stringValue(record['category'], `checks[${index}].category`)\n if (!(CHECK_CATEGORIES as readonly string[]).includes(category)) fail(`checks[${index}].category is invalid.`, 'INVALID_CONFIG')\n const command = stringValue(record['command'], `checks[${index}].command`)\n if (REAL_CATEGORIES.has(category) && record['execution'] !== 'real') fail(`checks[${index}] must declare execution: real.`, 'INVALID_CONFIG')\n if (record['evidence'] !== 'structured') fail(`checks[${index}] must declare evidence: structured.`, 'INVALID_CONFIG')\n if (record['capabilities'] !== undefined && (!Array.isArray(record['capabilities']) || !record['capabilities'].every((item: unknown) => typeof item === 'string'))) fail(`checks[${index}].capabilities must be strings.`, 'INVALID_CONFIG')\n const capabilities = Array.isArray(record['capabilities']) ? record['capabilities'].filter((item): item is string => typeof item === 'string') : undefined\n if (category === 'ui' && !capabilities?.includes('real-browser')) fail(`checks[${index}] must declare real-browser.`, 'INVALID_CONFIG')\n if (category === 'ui' && !capabilities?.includes('screenshot')) fail(`checks[${index}] must declare screenshot.`, 'INVALID_CONFIG')\n if (record['required'] !== undefined && typeof record['required'] !== 'boolean') fail(`checks[${index}].required must be boolean.`, 'INVALID_CONFIG')\n if (record['timeoutMs'] !== undefined && (!Number.isInteger(record['timeoutMs']) || typeof record['timeoutMs'] !== 'number' || record['timeoutMs'] < 1)) fail(`checks[${index}].timeoutMs must be positive.`, 'INVALID_CONFIG')\n return { id, category: category as CheckCategory, command, required: record['required'] !== false, timeoutMs: typeof record['timeoutMs'] === 'number' ? record['timeoutMs'] : 120_000, ...(record['execution'] === 'real' ? { execution: 'real' } : {}), ...(capabilities ? { capabilities } : {}), evidence: 'structured' }\n}\n\nconst parseOutcome = (value: unknown, index: number, checks: readonly VerificationCheck[]): ContractOutcome => {\n const record = asRecord(value, `contract.outcomes[${index}]`)\n const id = stringValue(record['id'], `contract.outcomes[${index}].id`)\n const statement = stringValue(record['statement'], `contract.outcomes[${index}].statement`)\n const ids = stringArray(record['checks'], `contract.outcomes[${index}].checks`)\n if (ids.some((checkId) => !checks.some((check) => check.id === checkId))) fail(`contract.outcomes[${index}] references an unknown check.`, 'INVALID_CONFIG')\n return { id, statement, checks: [...new Set(ids)] }\n}\n\nexport const validateConfig = (rawValue: unknown): VerificationConfig => {\n const raw = resolveProfile(asRecord(rawValue, 'verification config')) as RawConfig\n if (raw['schemaVersion'] !== 1) fail('verification config schemaVersion must be 1.', 'INVALID_CONFIG')\n const project = stringValue(raw['project'], 'verification config project')\n const contractRaw = asRecord(raw['contract'], 'contract') as RawContract\n const rawChecks = raw['checks']\n const checks = Array.isArray(rawChecks) ? rawChecks.map(parseCheck) : fail('checks must be a non-empty array.', 'INVALID_CONFIG')\n if (!checks.length || new Set(checks.map((check) => check.id)).size !== checks.length) fail('check ids must be unique.', 'INVALID_CONFIG')\n const scopeRaw = asRecord(contractRaw['scope'], 'contract.scope') as RawScope\n const scope = { inScope: stringArray(scopeRaw['inScope'], 'contract.scope.inScope'), outOfScope: stringArray(scopeRaw['outOfScope'], 'contract.scope.outOfScope') }\n const ambiguities = stringArray(contractRaw['ambiguities'], 'contract.ambiguities')\n const rawOutcomes = contractRaw['outcomes']\n const outcomes = Array.isArray(rawOutcomes) ? rawOutcomes.map((outcome, index) => parseOutcome(outcome, index, checks)) : fail('contract.outcomes must be a non-empty array.', 'INVALID_CONFIG')\n if (!outcomes.length || new Set(outcomes.map((outcome) => outcome.id)).size !== outcomes.length) fail('outcome ids must be unique.', 'INVALID_CONFIG')\n const mapped = new Set(outcomes.flatMap((outcome) => outcome.checks))\n if (checks.some((check) => check.required && !mapped.has(check.id))) fail('every required check must map to an outcome.', 'INVALID_CONFIG')\n const rawSurfaces = isRecord(raw['surfaces']) ? raw['surfaces'] : undefined\n const surfaces = Object.fromEntries(SURFACE_NAMES.map((name) => [name, surface(rawSurfaces?.[name] ?? (name === 'logic'), name)])) as Record<SurfaceName, SurfaceRequirement>\n for (const name of SURFACE_NAMES) if (surfaces[name].required && !checks.some((check) => check.required && check.category === name)) fail(`required surface ${name} has no required check.`, 'INVALID_CONFIG')\n const trackingRaw = isRecord(raw['tracking']) ? raw['tracking'] as RawTracking : { required: false, reason: 'tracking is not configured for this run.' }\n if (trackingRaw['required'] === true && typeof trackingRaw['target'] !== 'string') fail('tracking.target is required when tracking is enabled.', 'INVALID_CONFIG')\n if (trackingRaw['required'] !== true && typeof trackingRaw['reason'] !== 'string') fail('tracking.reason is required when tracking is disabled.', 'INVALID_CONFIG')\n const budgetRaw = raw['budget'] === undefined ? undefined : asRecord(raw['budget'], 'budget') as RawBudget\n if (budgetRaw && budgetRaw['maxDurationMs'] !== undefined && (!Number.isInteger(budgetRaw['maxDurationMs']) || typeof budgetRaw['maxDurationMs'] !== 'number' || budgetRaw['maxDurationMs'] < 1)) fail('budget.maxDurationMs must be positive.', 'INVALID_CONFIG')\n const cleanupRaw = raw['cleanup'] === undefined ? undefined : asRecord(raw['cleanup'], 'cleanup') as RawCleanup\n const cleanup = cleanupRaw ? { roots: cleanupRaw['roots'] === undefined ? undefined : stringArray(cleanupRaw['roots'], 'cleanup.roots') } : undefined\n const benchmarkRaw = raw['benchmark'] === undefined ? undefined : asRecord(raw['benchmark'], 'benchmark') as RawBenchmark\n const benchmark = benchmarkRaw ? { suiteId: stringValue(benchmarkRaw['suiteId'], 'benchmark.suiteId'), taskId: stringValue(benchmarkRaw['taskId'], 'benchmark.taskId'), mode: benchmarkRaw['mode'] === 'harness' ? 'harness' as const : fail('benchmark.mode must be harness.', 'INVALID_CONFIG') } : undefined\n const contract: TaskContract = { intent: stringValue(contractRaw['intent'], 'contract.intent'), scope, ambiguities, outcomes }\n const tracking: TrackingConfig = { required: trackingRaw['required'] === true, ...(typeof trackingRaw['target'] === 'string' ? { target: trackingRaw['target'] } : {}), ...(typeof trackingRaw['reason'] === 'string' ? { reason: trackingRaw['reason'] } : {}) }\n return { schemaVersion: 1, project, ...(typeof raw['root'] === 'string' ? { root: raw['root'] } : {}), ...(typeof raw['stateDir'] === 'string' ? { stateDir: raw['stateDir'] } : {}), profile: typeof raw['profile'] === 'string' ? raw['profile'] : 'strict', contract, surfaces, checks, tracking, ...(budgetRaw ? { budget: { maxDurationMs: budgetRaw['maxDurationMs'] as number | undefined } } : {}), ...(cleanup ? { cleanup } : {}), ...(benchmark ? { benchmark } : {}) }\n}\n\nexport const loadConfig = (configPath = '.codex/verification.json'): LoadedConfig => {\n const absolute = resolve(configPath)\n const raw = readJson(absolute)\n const rawRecord = asRecord(raw, 'verification config')\n const root = resolve(dirname(absolute), typeof rawRecord['root'] === 'string' ? rawRecord['root'] : '.')\n const stateDir = resolve(root, typeof rawRecord['stateDir'] === 'string' ? rawRecord['stateDir'] : '.codex/verification')\n if (!pathInside(root, stateDir)) fail('stateDir must be inside the project root.', 'INVALID_CONFIG')\n const config = validateConfig(raw)\n return { absolute, root, stateDir, config, configHash: hashJson(config) }\n}\n","import { DECISIONS, LEGAL_TRANSITIONS, STATES } from './constants.js'\nimport { fail } from './errors.js'\nimport type { RunState, StateTransition, VerificationRun } from './types.js'\n\nexport const transition = (run: Pick<VerificationRun, 'state' | 'transitions'>, to: RunState, reason?: string, actor = 'harness'): Pick<VerificationRun, 'state' | 'transitions'> => {\n if (!STATES.includes(to)) fail(`Unknown state ${to}.`, 'INVALID_STATE')\n if (run.state !== to && !LEGAL_TRANSITIONS[run.state].some((state) => state === to)) fail(`Illegal transition ${run.state} -> ${to}.`, 'INVALID_STATE')\n const event: StateTransition = { from: run.state, to, at: new Date().toISOString(), actor, ...(reason ? { reason } : {}) }\n return { ...run, state: to, transitions: [...run.transitions, event] }\n}\n\nexport const assertHuman = (actor: string): void => {\n if (actor !== 'human') fail('This action requires --by human.', 'HUMAN_APPROVAL_REQUIRED')\n}\n\nexport const approvedDecision = (decision: string): boolean => {\n if (!DECISIONS.has(decision)) fail('Decision must be approved or rejected.', 'INVALID_INPUT')\n return ['approved', 'approve', 'yes', 'ok'].includes(decision)\n}\n","import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { fail } from './errors.js'\nimport { sha256 } from './hash.js'\nimport type { ContextQuery } from './context.js'\nimport type { RunState } from './types.js'\nimport type { DockerRuntimeEvidence } from './runtime.js'\n\nexport const HARNESS_EVENT_SCHEMA_VERSION = 1 as const\nexport const EVENT_LOG_GENESIS = 'GENESIS' as const\nexport const HARNESS_EVENT_TYPES = ['run.created', 'state.transitioned', 'context.attached', 'verification.completed', 'approval.recorded', 'authorization.recorded', 'session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'] as const\nexport type HarnessEventType = typeof HARNESS_EVENT_TYPES[number]\nconst SESSION_EVENT_TYPES = new Set<HarnessEventType>(['session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'])\n\nexport interface HarnessEventPayloads {\n readonly 'run.created': { readonly project: string; readonly baselineRevision: string; readonly baselineStatusHash: string }\n readonly 'state.transitioned': { readonly from: RunState | null; readonly to: RunState; readonly actor: string; readonly reason?: string; readonly transitionIndex: number }\n readonly 'context.attached': { readonly providerId: string; readonly sourceHash: string; readonly snapshotHash: string; readonly query: ContextQuery }\n readonly 'verification.completed': { readonly verificationDigest: string; readonly checkCount: number; readonly outcomeCount: number; readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly 'approval.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'authorization.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly target: string; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'session.started': { readonly adapterId: string; readonly adapterVersion: string; readonly capabilities: readonly string[] }\n readonly 'session.resumed': { readonly recovery: 'event-log' }\n readonly 'agent.turn.started': { readonly turnId: string; readonly inputHash: string }\n readonly 'policy.evaluated': { readonly actionId: string; readonly turnId: string; readonly toolId: string; readonly decision: 'allow' | 'block' | 'approve'; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly decision: 'approved' | 'rejected'; readonly actor: 'human'; readonly policyId: string; readonly reason: string }\n readonly 'tool.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string }\n readonly 'tool.execution.started': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly attempt: number }\n readonly 'tool.recovery.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly decision: 'retry' | 'abandon'; readonly actor: 'human'; readonly reason: string }\n readonly 'tool.blocked': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.completed': { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'tool.failed': { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'session.ended': { readonly status: 'completed' | 'failed' | 'cancelled' }\n}\n\nexport type HarnessEvent<K extends HarnessEventType = HarnessEventType> = K extends HarnessEventType ? {\n readonly schemaVersion: typeof HARNESS_EVENT_SCHEMA_VERSION\n readonly runId: string\n readonly sequence: number\n readonly at: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly previousHash?: string\n readonly eventHash?: string\n readonly sessionId?: string\n readonly type: K\n readonly payload: HarnessEventPayloads[K]\n } : never\n\nexport type HarnessEventInput<K extends HarnessEventType = HarnessEventType> = Omit<HarnessEvent<K>, 'schemaVersion' | 'sequence' | 'at'>\nexport type HarnessEventListener<K extends HarnessEventType> = (event: HarnessEvent<K>) => void\n\nexport interface EventStore {\n append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K>\n read(runId: string): readonly HarnessEvent[]\n verify(runId: string): EventLogVerification\n}\n\nexport interface EventLogVerification {\n readonly status: 'verified' | 'legacy'\n readonly eventCount: number\n readonly headHash?: string\n}\n\nexport interface EventLogLock {\n readonly pid: number\n readonly at: string\n}\n\nexport interface EventLogLockStatus {\n readonly status: 'locked' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nexport interface EventLogLockRecovery {\n readonly status: 'recovered' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nconst eventPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'events.ndjson')\nconst lockPath = (stateDir: string, runId: string): string => `${eventPath(stateDir, runId)}.lock`\nconst parseLock = (value: string): EventLogLock => {\n try {\n const record = JSON.parse(value) as Record<string, unknown>\n if (!Number.isInteger(record['pid']) || (record['pid'] as number) <= 0 || typeof record['at'] !== 'string' || !Number.isFinite(Date.parse(record['at']))) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n return { pid: record['pid'] as number, at: record['at'] as string }\n } catch (error) {\n if (error instanceof SyntaxError) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n throw error\n }\n}\nconst readLock = (stateDir: string, runId: string): EventLogLock | null => {\n const path = lockPath(stateDir, runId)\n return existsSync(path) ? parseLock(readFileSync(path, 'utf8')) : null\n}\nconst isEventType = (value: unknown): value is HarnessEventType => typeof value === 'string' && (HARNESS_EVENT_TYPES as readonly string[]).includes(value)\nconst digest = (value: string): boolean => /^[a-f0-9]{64}$/.test(value)\nconst eventBody = (event: HarnessEvent): Omit<HarnessEvent, 'eventHash'> => {\n const { eventHash: _eventHash, ...body } = event\n return body\n}\nconst eventDigest = (event: HarnessEvent): string => sha256(JSON.stringify(eventBody(event)))\n\nconst parseEvent = (value: unknown, expectedSequence: number): HarnessEvent => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event log contains a non-object record.', 'HARNESS_ERROR')\n const record = value as Record<string, unknown>\n if (record['schemaVersion'] !== HARNESS_EVENT_SCHEMA_VERSION || typeof record['runId'] !== 'string' || typeof record['sequence'] !== 'number' || record['sequence'] !== expectedSequence || typeof record['at'] !== 'string' || typeof record['sourceRevision'] !== 'string' || typeof record['configHash'] !== 'string' || !isEventType(record['type']) || typeof record['payload'] !== 'object' || record['payload'] === null || (record['sessionId'] !== undefined && (typeof record['sessionId'] !== 'string' || !record['sessionId'].trim())) || (SESSION_EVENT_TYPES.has(record['type']) && typeof record['sessionId'] !== 'string')) fail('Event log is invalid or out of order.', 'HARNESS_ERROR')\n const hasPreviousHash = record['previousHash'] !== undefined\n const hasEventHash = record['eventHash'] !== undefined\n if (hasPreviousHash !== hasEventHash || (hasPreviousHash && (typeof record['previousHash'] !== 'string' || (record['previousHash'] !== EVENT_LOG_GENESIS && !digest(record['previousHash'] as string)) || typeof record['eventHash'] !== 'string' || !digest(record['eventHash'] as string)))) fail('Event log integrity metadata is invalid.', 'HARNESS_ERROR')\n return record as unknown as HarnessEvent\n}\n\nconst validateChain = (events: readonly HarnessEvent[]): EventLogVerification => {\n const current = events.filter((event) => event.eventHash !== undefined)\n if (!current.length) return { status: 'legacy', eventCount: events.length }\n if (current.length !== events.length) fail('Event log mixes legacy and hashed records.', 'HARNESS_ERROR')\n let previous: string = EVENT_LOG_GENESIS\n for (const event of events) {\n const eventHash = event.eventHash ?? fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n if (event.previousHash !== previous || eventHash !== eventDigest(event)) fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n previous = eventHash\n }\n return { status: 'verified', eventCount: events.length, ...(events.length ? { headHash: previous } : {}) }\n}\n\nexport class FileEventStore implements EventStore {\n public constructor(private readonly stateDir: string) {}\n\n public append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K> {\n if (!event.runId.trim()) fail('Event runId is required.', 'INVALID_INPUT')\n if (!event.sourceRevision.trim() || !event.configHash.trim()) fail('Event sourceRevision and configHash are required.', 'INVALID_INPUT')\n if (!isEventType(event.type)) fail('Event type is invalid.', 'INVALID_INPUT')\n if (SESSION_EVENT_TYPES.has(event.type) && (!event.sessionId || !event.sessionId.trim())) fail('Session events require a sessionId.', 'INVALID_INPUT')\n if (event.sessionId !== undefined && !event.sessionId.trim()) fail('Event sessionId cannot be empty.', 'INVALID_INPUT')\n const path = eventPath(this.stateDir, event.runId)\n const lock = lockPath(this.stateDir, event.runId)\n mkdirSync(join(this.stateDir, 'runs', event.runId), { recursive: true })\n let lockFd: number\n try { lockFd = openSync(lock, 'wx'); writeSync(lockFd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() })) } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') fail('Event log is busy; retry the operation.', 'HARNESS_ERROR'); throw error }\n try {\n const events = this.readUnlocked(event.runId)\n const previous = events.at(-1)\n const body = { schemaVersion: HARNESS_EVENT_SCHEMA_VERSION, sequence: events.length + 1, at: new Date().toISOString(), runId: event.runId, sourceRevision: event.sourceRevision, configHash: event.configHash, ...(event.sessionId ? { sessionId: event.sessionId } : {}), ...(previous?.eventHash ? { previousHash: previous.eventHash } : events.length ? {} : { previousHash: EVENT_LOG_GENESIS }), type: event.type, payload: event.payload } as HarnessEvent<K>\n const record = (events.length && !previous?.eventHash ? body : { ...body, eventHash: eventDigest(body) }) as HarnessEvent<K>\n appendFileSync(path, `${JSON.stringify(record)}\\n`, 'utf8')\n return record\n } finally {\n closeSync(lockFd)\n unlinkSync(lock)\n }\n }\n\n private readUnlocked(runId: string): readonly HarnessEvent[] {\n const path = eventPath(this.stateDir, runId)\n if (!existsSync(path)) return []\n const events = readFileSync(path, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return parseEvent(JSON.parse(line) as unknown, index + 1) } catch (error) { if (error instanceof SyntaxError) fail('Event log contains invalid JSON.', 'HARNESS_ERROR'); throw error }\n })\n validateChain(events)\n return events\n }\n\n public read(runId: string): readonly HarnessEvent[] {\n if (existsSync(lockPath(this.stateDir, runId))) fail('Event log is busy; retry the operation.', 'HARNESS_ERROR')\n return this.readUnlocked(runId)\n }\n\n public verify(runId: string): EventLogVerification {\n return validateChain(this.read(runId))\n }\n}\n\nexport const inspectEventLogLock = (stateDir: string, runId: string): EventLogLockStatus => {\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n return lock ? { status: 'locked', path, lock } : { status: 'unlocked', path }\n}\n\nexport const recoverEventLogLock = ({ stateDir, runId, actor, maxAgeMs = 300_000 }: { readonly stateDir: string; readonly runId: string; readonly actor: string; readonly maxAgeMs?: number }): EventLogLockRecovery => {\n if (actor !== 'human') fail('Event log lock recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n if (!lock) return { status: 'unlocked', path }\n const ageMs = Date.now() - Date.parse(lock.at)\n if (ageMs < maxAgeMs) fail('Event log lock is not old enough to recover.', 'HARNESS_ERROR')\n try { process.kill(lock.pid, 0) } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ESRCH') fail('Event log lock owner cannot be proven dead.', 'HARNESS_ERROR')\n unlinkSync(path)\n return { status: 'recovered', path, lock }\n }\n return fail('Event log lock owner is still alive.', 'HARNESS_ERROR')\n}\n","import { fail } from './errors.js'\nimport type { HarnessEvent, HarnessEventListener, HarnessEventType } from './events.js'\n\nexport const HARNESS_PLUGIN_API_VERSION = 1 as const\nexport type Disposer = () => void\n\nexport interface PluginSlot<T> { readonly id: string }\nexport const createPluginSlot = <T>(id: string): PluginSlot<T> => {\n if (!id.trim()) fail('Plugin slot id is required.', 'INVALID_INPUT')\n return { id }\n}\n\nexport interface HarnessPluginContext {\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n register<T>(slot: PluginSlot<T>, id: string, value: T): Disposer\n effect(disposer: Disposer): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n}\n\nexport interface HarnessPlugin {\n readonly id: string\n readonly version: string\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n readonly requires?: readonly string[]\n readonly apply: (context: HarnessPluginContext) => void | Disposer\n}\n\nexport interface PluginContribution<T> { readonly pluginId: string; readonly id: string; readonly value: T }\n\nexport interface PluginRegistry {\n register(plugin: HarnessPlugin): void\n mount(): void\n emit<K extends HarnessEventType>(event: HarnessEvent<K>): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n contributions<T>(slot: PluginSlot<T>): readonly PluginContribution<T>[]\n dispose(): void\n}\n\nconst validId = (value: string, label: string): string => {\n if (!value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value\n}\n\nexport const createPluginRegistry = (): PluginRegistry => {\n const plugins = new Map<string, HarnessPlugin>()\n const contributions = new Map<string, Map<string, PluginContribution<unknown>>>()\n const listeners = new Map<HarnessEventType, Set<HarnessEventListener<HarnessEventType>>>()\n const cleanups: Disposer[] = []\n let mounted = false\n let disposed = false\n\n const ensureOpen = (): void => { if (disposed) fail('Plugin registry has been disposed.', 'HARNESS_ERROR') }\n const removeContribution = (slot: PluginSlot<unknown>, id: string, pluginId: string): void => {\n const entries = contributions.get(slot.id)\n if (entries?.get(id)?.pluginId === pluginId) entries.delete(id)\n }\n const registerContribution = <T>(pluginId: string, slot: PluginSlot<T>, id: string, value: T): Disposer => {\n const entries = contributions.get(slot.id) ?? new Map<string, PluginContribution<unknown>>()\n if (entries.has(id)) fail(`Plugin contribution already exists: ${slot.id}/${id}.`, 'INVALID_INPUT')\n entries.set(id, { pluginId, id, value })\n contributions.set(slot.id, entries)\n const disposer = (): void => removeContribution(slot as PluginSlot<unknown>, id, pluginId)\n cleanups.push(disposer)\n return disposer\n }\n const order = (): HarnessPlugin[] => {\n const result: HarnessPlugin[] = []\n const visiting = new Set<string>()\n const visited = new Set<string>()\n const visit = (id: string): void => {\n if (visited.has(id)) return\n if (visiting.has(id)) fail(`Plugin dependency cycle includes ${id}.`, 'INVALID_INPUT')\n const candidate = plugins.get(id)\n if (!candidate) fail(`Plugin dependency is missing: ${id}.`, 'INVALID_INPUT')\n const plugin = candidate as HarnessPlugin\n visiting.add(id)\n for (const dependency of plugin.requires ?? []) visit(dependency)\n visiting.delete(id); visited.add(id); result.push(plugin)\n }\n for (const id of plugins.keys()) visit(id)\n return result\n }\n const registry: PluginRegistry = {\n register(plugin) {\n ensureOpen()\n if (mounted) fail('Plugins cannot be registered after mount.', 'HARNESS_ERROR')\n validId(plugin.id, 'Plugin id'); validId(plugin.version, 'Plugin version')\n if (plugin.apiVersion !== HARNESS_PLUGIN_API_VERSION) fail(`Unsupported plugin API version: ${String(plugin.apiVersion)}.`, 'INVALID_INPUT')\n if (plugins.has(plugin.id)) fail(`Plugin already registered: ${plugin.id}.`, 'INVALID_INPUT')\n plugins.set(plugin.id, plugin)\n },\n mount() {\n ensureOpen()\n if (mounted) return\n try {\n for (const plugin of order()) {\n const context: HarnessPluginContext = {\n apiVersion: HARNESS_PLUGIN_API_VERSION,\n register: (slot, id, value) => registerContribution(plugin.id, slot, validId(id, 'Plugin contribution id'), value),\n effect: (disposer) => { cleanups.push(disposer) },\n on: (type, listener) => {\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n const disposer = (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n cleanups.push(disposer); return disposer\n },\n }\n const cleanup = plugin.apply(context)\n if (cleanup) cleanups.push(cleanup)\n }\n mounted = true\n } catch (error) { registry.dispose(); throw error }\n },\n emit(event) {\n ensureOpen()\n for (const listener of listeners.get(event.type) ?? []) listener(event as HarnessEvent<HarnessEventType>)\n },\n on(type, listener) {\n ensureOpen()\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n return (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n },\n contributions: <T>(slot: PluginSlot<T>): readonly PluginContribution<T>[] => [...(contributions.get(slot.id)?.values() ?? [])] as readonly PluginContribution<T>[],\n dispose() {\n if (disposed) return\n let firstError: unknown\n for (const cleanup of cleanups.splice(0).reverse()) { try { cleanup() } catch (error) { firstError ??= error } }\n contributions.clear(); listeners.clear(); disposed = true; mounted = false\n if (firstError) throw firstError\n },\n }\n return registry\n}\n","import { readFileSync } from 'node:fs'\nimport { createPluginSlot } from './plugins.js'\nimport { hashJson } from './hash.js'\nimport { fail } from './errors.js'\n\nexport interface ContextQuery {\n readonly query: string\n readonly scope?: readonly string[]\n readonly sourceRevision?: string\n}\n\nexport interface ContextReference {\n readonly id: string\n readonly uri: string\n readonly title?: string\n readonly version?: string\n readonly contentHash?: string\n}\n\nexport interface ContextSnapshot {\n readonly providerId: string\n readonly query: ContextQuery\n readonly references: readonly ContextReference[]\n readonly sourceHash: string\n readonly snapshotHash: string\n readonly resolvedAt: string\n}\n\nexport interface ContextProvider {\n readonly id: string\n readonly version: string\n readonly resolve: (query: ContextQuery) => Promise<ContextSnapshot>\n}\n\nexport const hashContextSnapshot = ({ providerId, query, references, sourceHash }: Pick<ContextSnapshot, 'providerId' | 'query' | 'references' | 'sourceHash'>): string => hashJson({ providerId, query, references, sourceHash })\nexport const hashContextSnapshots = (snapshots: readonly ContextSnapshot[]): string => hashJson(snapshots.map(({ providerId, query, references, sourceHash, snapshotHash }) => ({ providerId, query, references, sourceHash, snapshotHash })))\n\nconst record = (value: unknown, label: string): Record<string, unknown> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return value as Record<string, unknown>\n}\nconst requiredString = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value as string\n}\nexport const validateContextSnapshot = (value: unknown, index = 0): ContextSnapshot => {\n const raw = record(value, `context snapshot ${index}`)\n const rawQuery = record(raw['query'], `context snapshot ${index}.query`)\n const rawReferences = raw['references']\n if (!Array.isArray(rawReferences)) fail(`context snapshot ${index}.references must be an array.`, 'INVALID_INPUT')\n const references = (rawReferences as unknown[]).map((reference: unknown, referenceIndex: number) => {\n const rawReference = record(reference, `context snapshot ${index}.references[${referenceIndex}]`)\n return {\n id: requiredString(rawReference['id'], `context snapshot ${index}.references[${referenceIndex}].id`),\n uri: requiredString(rawReference['uri'], `context snapshot ${index}.references[${referenceIndex}].uri`),\n ...(typeof rawReference['title'] === 'string' ? { title: rawReference['title'] } : {}),\n ...(typeof rawReference['version'] === 'string' ? { version: rawReference['version'] } : {}),\n ...(typeof rawReference['contentHash'] === 'string' ? { contentHash: rawReference['contentHash'] } : {}),\n }\n })\n const scope = rawQuery['scope'] === undefined ? undefined : Array.isArray(rawQuery['scope']) && rawQuery['scope'].every((item) => typeof item === 'string') ? rawQuery['scope'] : fail(`context snapshot ${index}.query.scope must be an array of strings.`, 'INVALID_INPUT')\n const snapshot = {\n providerId: requiredString(raw['providerId'], `context snapshot ${index}.providerId`),\n query: { query: requiredString(rawQuery['query'], `context snapshot ${index}.query.query`), ...(scope ? { scope } : {}), ...(typeof rawQuery['sourceRevision'] === 'string' ? { sourceRevision: rawQuery['sourceRevision'] } : {}) },\n references,\n sourceHash: requiredString(raw['sourceHash'], `context snapshot ${index}.sourceHash`),\n snapshotHash: requiredString(raw['snapshotHash'], `context snapshot ${index}.snapshotHash`),\n resolvedAt: requiredString(raw['resolvedAt'], `context snapshot ${index}.resolvedAt`),\n }\n if (snapshot.snapshotHash !== hashContextSnapshot(snapshot)) fail(`context snapshot ${index}.snapshotHash does not match its contents.`, 'INVALID_INPUT')\n return snapshot\n}\n\nexport const readContextSnapshots = (path: string): readonly ContextSnapshot[] => {\n const value = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return (Array.isArray(value) ? value : [value]).map((snapshot, index) => validateContextSnapshot(snapshot, index))\n}\n\nexport const validateContextSnapshots = (snapshots: readonly ContextSnapshot[]): readonly ContextSnapshot[] => snapshots.map((snapshot, index) => validateContextSnapshot(snapshot, index))\n\nexport const CONTEXT_PROVIDER_SLOT = createPluginSlot<ContextProvider>('context.provider')\n","import { hashJson } from './hash.js'\nimport { saveRun as persistRun, setLatest } from './files.js'\nimport { FileEventStore } from './events.js'\nimport { hashContextSnapshots } from './context.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { LoadedConfig, SourceSnapshot, VerificationRun } from './types.js'\n\nconst now = (): string => new Date().toISOString()\nconst newRunId = (): string => `${Date.now()}-${process.pid}-${Math.random().toString(36).slice(2, 8)}`\n\nexport const saveRun = (stateDir: string, run: VerificationRun): void => {\n persistRun(stateDir, run)\n const store = new FileEventStore(stateDir)\n const events = store.read(run.runId)\n if (!events.some((event) => event.type === 'run.created')) store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'run.created', payload: { project: run.project, baselineRevision: run.baseline.revision, baselineStatusHash: run.baseline.statusHash } })\n const loggedTransitions = new Set(events.filter((event) => event.type === 'state.transitioned').map((event) => event.payload.transitionIndex))\n run.transitions.forEach((transition, transitionIndex) => {\n if (loggedTransitions.has(transitionIndex)) return\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'state.transitioned', payload: { from: transition.from, to: transition.to, actor: transition.actor ?? 'harness', ...(transition.reason ? { reason: transition.reason } : {}), transitionIndex } })\n })\n const loggedSnapshots = new Set(events.filter((event) => event.type === 'context.attached').map((event) => event.payload.snapshotHash))\n for (const snapshot of run.contextSnapshots ?? []) {\n if (loggedSnapshots.has(snapshot.snapshotHash)) continue\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'context.attached', payload: { providerId: snapshot.providerId, sourceHash: snapshot.sourceHash, snapshotHash: snapshot.snapshotHash, query: snapshot.query } })\n }\n}\nexport { setLatest }\n\nexport const createRun = async ({ loaded, baseline, supersedes, dirtyBaselineAuthorized, contextSnapshots = [], planner = 'human' }: { readonly loaded: LoadedConfig; readonly baseline: SourceSnapshot; readonly supersedes?: string; readonly dirtyBaselineAuthorized?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[]; readonly planner?: 'human' | 'ci' }): Promise<VerificationRun> => {\n const contractHash = hashJson(loaded.config.contract)\n const run: VerificationRun = {\n type: 'agentskit-harness-run', schemaVersion: 1, runId: newRunId(), project: loaded.config.project, state: 'PLANNED', configHash: loaded.configHash, contractHash, sourceRevision: baseline.revision, sourceStatusHash: baseline.statusHash, baseline,\n ...(planner === 'human' ? { contractApproval: { actor: 'human' as const, at: now(), contractHash } } : { contractPreparation: { actor: 'ci' as const, at: now(), contractHash } }),\n checks: loaded.config.checks.map(({ id, category }) => ({ id, category, status: 'pending' })), contextSnapshots, ...(contextSnapshots.length ? { contextHash: hashContextSnapshots(contextSnapshots) } : {}), ...(loaded.config.benchmark ? { benchmark: loaded.config.benchmark } : {}),\n outcomes: loaded.config.contract.outcomes.map(({ id, statement, checks }) => ({ id, statement, checks, status: 'pending' })),\n transitions: [{ from: null, to: 'PLANNED', at: now(), actor: planner }], evidenceReferences: [],\n ...(supersedes ? { supersedes } : {}), ...(dirtyBaselineAuthorized ? { dirtyBaselineAuthorized: true } : {}),\n }\n saveRun(loaded.stateDir, run); setLatest(loaded.stateDir, run); return run\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { sha256 } from './hash.js'\nimport { pathInside } from './files.js'\nimport type { EvidenceArtifact, StructuredEvidence, VerificationCheck } from './types.js'\n\nexport const parseStructuredEvidence = (stdout: string): StructuredEvidence | null => {\n for (const line of stdout.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean).reverse()) {\n try {\n const value: unknown = JSON.parse(line)\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof (value as Record<string, unknown>)['status'] === 'string') return value as StructuredEvidence\n } catch {}\n }\n return null\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst viewportValid = (viewport: unknown): boolean => typeof viewport === 'string' || (isRecord(viewport) && typeof viewport['width'] === 'number' && viewport['width'] > 0 && typeof viewport['height'] === 'number' && viewport['height'] > 0)\n\nexport const validateEvidence = (root: string, check: VerificationCheck, evidence: StructuredEvidence | null, outcomeIds: readonly string[]): string[] => {\n if (!evidence || evidence.status !== 'passed') return ['structured evidence did not pass']\n if (!Array.isArray(evidence.criteria) || !evidence.criteria.every((id): id is string => typeof id === 'string') || outcomeIds.some((id) => !evidence.criteria.includes(id))) return [`evidence must map criteria: ${outcomeIds.join(', ')}`]\n const failures: string[] = []\n if (check.category === 'ui') {\n if (evidence.capability !== 'real-browser') failures.push('UI evidence must declare capability real-browser')\n if (!Array.isArray(evidence.artifacts) || evidence.artifacts.length === 0) failures.push('UI evidence requires screenshot artifacts')\n }\n const artifacts = Array.isArray(evidence.artifacts) ? evidence.artifacts : []\n for (const artifactValue of artifacts) {\n if (!isRecord(artifactValue) || typeof artifactValue['path'] !== 'string' || typeof artifactValue['sha256'] !== 'string') {\n failures.push('artifact requires string path and sha256')\n continue\n }\n const artifact = artifactValue as unknown as EvidenceArtifact\n const artifactPath = join(root, artifact.path)\n if (!pathInside(root, artifactPath)) failures.push(`artifact path escapes project root: ${artifact.path}`)\n else if (!existsSync(artifactPath) || sha256(readFileSync(artifactPath)) !== artifact.sha256) failures.push(`artifact hash mismatch: ${artifact.path}`)\n if (check.category === 'ui' && (artifact.type !== 'screenshot' || !viewportValid(artifact.viewport))) failures.push(`UI artifact requires type=screenshot and viewport: ${artifact.path}`)\n }\n return failures\n}\n","import { execFile } from 'node:child_process'\nimport { lstatSync, readFileSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\nimport { promisify } from 'node:util'\nimport { hashJson, sha256 } from './hash.js'\nimport type { SourceSnapshot } from './types.js'\n\nconst execFileAsync = promisify(execFile)\nconst git = async (root: string, args: readonly string[]): Promise<string> => {\n try { return (await execFileAsync('git', ['-C', root, ...args], { encoding: 'utf8' })).stdout.trim() } catch { return '' }\n}\n\nexport const sourceSnapshot = async (root: string, stateDir: string): Promise<SourceSnapshot> => {\n const revision = await git(root, ['rev-parse', 'HEAD'])\n const stateRelative = relative(root, stateDir).replaceAll('\\\\', '/')\n const pathspec = ['--', '.']\n if (stateRelative && stateRelative !== '..' && !stateRelative.startsWith('../')) pathspec.push(`:(exclude)${stateRelative}`)\n const status = await git(root, ['status', '--porcelain=v1', '--untracked-files=all', ...pathspec])\n const diff = await git(root, ['diff', '--no-ext-diff', '--binary', 'HEAD', ...pathspec])\n const untrackedPaths = (await git(root, ['ls-files', '--others', '--exclude-standard', '-z'])).split('\\0').filter(Boolean).filter((path) => !stateRelative || (path !== stateRelative && !path.startsWith(`${stateRelative}/`)))\n const untracked = untrackedPaths.flatMap((path) => {\n const absolute = resolve(root, path)\n try { return lstatSync(absolute).isFile() ? [{ path, hash: sha256(readFileSync(absolute)) }] : [] } catch { return [] }\n })\n const fingerprint = { revision, status, diff, untracked }\n return { revision: revision || `content:${hashJson(fingerprint)}`, status, statusHash: hashJson(fingerprint) }\n}\n","import { spawn } from 'node:child_process'\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\nimport { createRun, saveRun, setLatest } from './runs.js'\nimport { loadConfig } from './config.js'\nimport { fail } from './errors.js'\nimport { parseStructuredEvidence, validateEvidence } from './evidence.js'\nimport { assertHuman, approvedDecision, transition } from './state-machine.js'\nimport { sourceSnapshot } from './source.js'\nimport { cleanConfiguredArtifacts, loadLatestRun, readRun } from './files.js'\nimport { validateContextSnapshots } from './context.js'\nimport { hashJson } from './hash.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { CheckResult, LoadedConfig, VerificationCheck, VerificationRun } from './types.js'\nimport { FileEventStore } from './events.js'\n\nconst now = (): string => new Date().toISOString()\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst verificationProjection = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): { readonly checks: VerificationRun['checks']; readonly outcomes: VerificationRun['outcomes']; readonly metrics: VerificationRun['metrics'] } => ({ checks: run.checks, outcomes: run.outcomes, metrics: run.metrics })\nconst verificationDigest = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): string => hashJson(verificationProjection(run))\n\ninterface CommandResult { readonly exitCode: number; readonly timedOut: boolean; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\n\nconst runCommand = (check: VerificationCheck, cwd: string): Promise<CommandResult> => new Promise((resolveResult) => {\n const started = Date.now()\n const child = spawn(check.command, { cwd, shell: true, env: process.env })\n let stdout = ''\n let stderr = ''\n let timedOut = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGTERM') }, check.timeoutMs)\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString() })\n child.stderr.on('data', (chunk: Buffer) => { stderr += chunk.toString() })\n child.on('close', (exitCode) => { clearTimeout(timer); resolveResult({ exitCode: exitCode ?? 1, timedOut, stdout, stderr, durationMs: Date.now() - started }) })\n})\n\nconst currentBinding = async (loaded: LoadedConfig): Promise<{ readonly source: Awaited<ReturnType<typeof sourceSnapshot>>; readonly configHash: string }> => ({ source: await sourceSnapshot(loaded.root, loaded.stateDir), configHash: loaded.configHash })\n\nconst staleRun = (loaded: LoadedConfig, run: VerificationRun, reason: string): never => {\n const stale = transition(run, 'STALE', reason)\n saveRun(loaded.stateDir, stale as VerificationRun); setLatest(loaded.stateDir, stale as VerificationRun)\n return fail(reason, 'STALE')\n}\n\nconst isFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<boolean> => {\n const current = await currentBinding(loaded)\n return current.configHash === run.configHash && current.source.revision === run.sourceRevision && current.source.statusHash === run.sourceStatusHash\n}\n\nexport const planRun = async ({ configPath, decision, actor = 'human', allowDirty = false, contextSnapshots = [] }: { readonly configPath: string; readonly decision: string; readonly actor?: string; readonly allowDirty?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n const automatedPreparation = actor === 'ci' && decision === 'prepared'\n if (!automatedPreparation) {\n assertHuman(actor)\n if (!approvedDecision(decision)) fail('Contract was not approved.', 'CLARIFYING')\n }\n const loaded = loadConfig(configPath)\n if (loaded.config.contract.ambiguities.length) fail(`Unresolved ambiguities remain: ${loaded.config.contract.ambiguities.join(' | ')}`, 'CLARIFYING')\n const validatedContextSnapshots = validateContextSnapshots(contextSnapshots)\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const configRelative = relative(loaded.root, loaded.absolute)\n const meaningful = baseline.status.split('\\n').filter(Boolean).filter((line) => !line.endsWith(` ${configRelative}`) && !line.endsWith(` ${configRelative.replaceAll('/', '\\\\')}`))\n if (meaningful.length && !allowDirty) fail(`Worktree is dirty before planning:\\n${meaningful.join('\\n')}\\nUse --allow-dirty only with explicit human authorization.`, 'WORKTREE_DIRTY')\n const previous = loadLatestRun(loaded.stateDir)\n if (previous && !['STALE', 'SUPERSEDED'].includes(previous.state)) fail(`An active run already exists: ${previous.runId} (${previous.state}).`, 'ACTIVE_RUN')\n return createRun({ loaded, baseline, supersedes: previous?.runId, dirtyBaselineAuthorized: allowDirty, contextSnapshots: validatedContextSnapshots, planner: automatedPreparation ? 'ci' : 'human' })\n}\n\nexport const startRun = (loaded: LoadedConfig): VerificationRun => {\n const run = requireRun(loadLatestRun(loaded.stateDir))\n const next = transition(run, 'IMPLEMENTING', 'Implementation started.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cancelRun = async ({ configPath, runId, reason = 'Run cancelled by a human.', actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly reason?: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor)\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n const next = transition(run, 'CANCELLED', reason, 'human') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const verifyRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(loadLatestRun(loaded.stateDir))\n if (!['IMPLEMENTING', 'VERIFYING'].includes(run.state)) {\n if (['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state) && !(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or contract changed.')\n fail(`Cannot verify from ${run.state}.`, 'INVALID_STATE')\n }\n if (run.configHash !== loaded.configHash) staleRun(loaded, run, 'Run is stale because the verification contract changed.')\n const binding = await currentBinding(loaded)\n let current = { ...transition(run, 'VERIFYING', 'Verification started.', 'agent'), sourceRevision: binding.source.revision, sourceStatusHash: binding.source.statusHash } as VerificationRun\n saveRun(loaded.stateDir, current)\n const checkDir = join(loaded.stateDir, 'runs', current.runId, 'checks')\n mkdirSync(checkDir, { recursive: true })\n const outcomesByCheck = new Map(loaded.config.checks.map((check) => [check.id, loaded.config.contract.outcomes.filter((outcome) => outcome.checks.includes(check.id)).map((outcome) => outcome.id)]))\n let totalDurationMs = 0\n for (const check of loaded.config.checks) {\n const result = await runCommand(check, loaded.root)\n totalDurationMs += result.durationMs\n const stdoutPath = join(checkDir, `${check.id}.stdout`)\n const stderrPath = join(checkDir, `${check.id}.stderr`)\n writeFileSync(stdoutPath, result.stdout, 'utf8'); writeFileSync(stderrPath, result.stderr, 'utf8')\n const evidence = parseStructuredEvidence(result.stdout)\n const failures = result.exitCode === 0 && !result.timedOut && evidence ? validateEvidence(loaded.root, check, evidence, outcomesByCheck.get(check.id) ?? []) : [result.timedOut ? 'check timed out' : result.exitCode !== 0 ? `exit code ${result.exitCode}` : 'missing final structured evidence']\n const nextCheck: CheckResult = { id: check.id, category: check.category, status: failures.length ? 'failed' : 'passed', exitCode: result.exitCode, durationMs: result.durationMs, ...(evidence ? { evidence } : {}), ...(failures.length ? { failures } : {}) }\n current = { ...current, evidenceReferences: [...current.evidenceReferences, { checkId: check.id, stdout: relative(loaded.stateDir, stdoutPath), stderr: relative(loaded.stateDir, stderrPath) }], checks: current.checks.map((item) => item.id === check.id ? nextCheck : item) } as VerificationRun\n saveRun(loaded.stateDir, current)\n }\n const statuses = new Map(current.checks.map((check) => [check.id, check.status]))\n const budgetExceeded = loaded.config.budget?.maxDurationMs !== undefined && totalDurationMs > loaded.config.budget.maxDurationMs\n const allPassed = loaded.config.checks.every((check) => statuses.get(check.id) === 'passed') && !budgetExceeded\n current = { ...current, outcomes: current.outcomes.map((outcome) => ({ ...outcome, status: outcome.checks.every((id) => statuses.get(id) === 'passed') ? 'passed' : 'failed' })), metrics: { totalDurationMs, budgetExceeded } } as VerificationRun\n const digest = verificationDigest(current)\n current = { ...current, verificationDigest: digest }\n saveRun(loaded.stateDir, current)\n new FileEventStore(loaded.stateDir).append({ runId: current.runId, sourceRevision: current.sourceRevision, configHash: current.configHash, type: 'verification.completed', payload: { verificationDigest: digest, checkCount: current.checks.length, outcomeCount: current.outcomes.length, totalDurationMs, budgetExceeded } })\n const nextState = allPassed ? 'AWAITING_HUMAN_APPROVAL' : 'BLOCKED'\n current = { ...transition(current, nextState, allPassed ? 'All configured checks passed; human approval is required.' : budgetExceeded ? 'Verification budget was exceeded.' : 'A configured check failed or lacked structured evidence.', 'harness') } as VerificationRun\n saveRun(loaded.stateDir, current); setLatest(loaded.stateDir, current); return current\n}\n\nconst assertFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<void> => {\n if (!(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or worktree changed after verification.')\n}\n\nconst assertVerificationAttestation = (loaded: LoadedConfig, run: VerificationRun): void => {\n const expected = verificationDigest(run)\n if (run.verificationDigest !== expected) fail('Verification projection attestation does not match run.json.', 'HARNESS_ERROR')\n const event = new FileEventStore(loaded.stateDir).read(run.runId).filter((item) => item.type === 'verification.completed').at(-1)\n if (!event || event.payload.verificationDigest !== expected || event.sourceRevision !== run.sourceRevision || event.configHash !== run.configHash) fail('Verification projection attestation is missing from the event log.', 'HARNESS_ERROR')\n}\n\nconst plannerForRetry = (loaded: LoadedConfig, run: VerificationRun): 'human' | 'ci' => {\n if (run.contractPreparation) return 'ci'\n if (!run.supersedes) return 'human'\n return plannerForRetry(loaded, readRun(loaded.stateDir, run.supersedes))\n}\n\nconst recordDecision = (loaded: LoadedConfig, run: VerificationRun, type: 'approval.recorded' | 'authorization.recorded', payload: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string; readonly target?: string }): void => {\n new FileEventStore(loaded.stateDir).append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type, payload: type === 'authorization.recorded' ? { ...payload, target: payload.target ?? fail('tracking.target is required when authorizing.', 'INVALID_CONFIG') } : payload })\n}\n\nconst assertDecisionProjection = (run: VerificationRun, decision: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly sourceRevision: string; readonly contractHash: string }, expectedState: VerificationRun['state']): void => {\n if (decision.decision !== 'approved' || decision.resultingState !== expectedState || decision.verificationDigest !== run.verificationDigest || decision.sourceRevision !== run.sourceRevision || decision.contractHash !== run.contractHash) fail('Terminal decision attestation does not match the run projection.', 'HARNESS_ERROR')\n}\n\nexport const reconcileRun = async ({ configPath, runId }: { readonly configPath: string; readonly runId?: string }): Promise<import('./types.js').RunReconciliation> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n await assertFresh(loaded, run)\n const store = new FileEventStore(loaded.stateDir)\n const eventLog = store.verify(run.runId)\n const events = store.read(run.runId)\n if (events.some((event) => event.runId !== run.runId || event.configHash !== run.configHash)) fail('Run event log is not bound to the current run projection.', 'HARNESS_ERROR')\n const requiresVerification = ['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state)\n if (requiresVerification) {\n if (eventLog.status !== 'verified') fail('Terminal run requires a verified event log.', 'HARNESS_ERROR')\n assertVerificationAttestation(loaded, run)\n }\n if (run.state === 'AWAITING_AUTHORIZATION' || run.state === 'COMPLETE') {\n const approval = events.filter((event) => event.type === 'approval.recorded').at(-1) ?? fail('Terminal run is missing its human approval event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, approval.payload, run.state === 'COMPLETE' && !loaded.config.tracking.required ? 'COMPLETE' : 'AWAITING_AUTHORIZATION')\n if (!run.humanApproval || run.humanApproval.actor !== 'human' || run.humanApproval.verificationDigest !== run.verificationDigest || run.humanApproval.sourceRevision !== run.sourceRevision || run.humanApproval.contractHash !== run.contractHash) fail('Human approval projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n if (run.state === 'COMPLETE' && loaded.config.tracking.required) {\n const authorization = events.filter((event) => event.type === 'authorization.recorded').at(-1) ?? fail('Complete tracked run is missing its authorization event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, authorization.payload, 'COMPLETE')\n if (!run.authorization || run.authorization.actor !== 'human' || run.authorization.verificationDigest !== run.verificationDigest || run.authorization.target !== authorization.payload.target || run.authorization.sourceRevision !== run.sourceRevision || run.authorization.contractHash !== run.contractHash) fail('Authorization projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n return { status: 'verified', runId: run.runId, state: run.state, eventCount: eventLog.eventCount, ...(eventLog.headHash ? { headHash: eventLog.headHash } : {}), ...(run.verificationDigest ? { verificationDigest: run.verificationDigest } : {}) }\n}\n\nexport const approveRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_HUMAN_APPROVAL') fail(`Cannot approve from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected the verification result.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'approval.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n const nextState = loaded.config.tracking.required ? 'AWAITING_AUTHORIZATION' : 'COMPLETE'\n const next = { ...transition(run, nextState, 'Human approved the verification result.', 'human'), humanApproval: { actor: 'human', at: now(), sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'approval.recorded', { decision: 'approved', resultingState: nextState, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const authorizeRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_AUTHORIZATION') fail(`Cannot authorize from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected external tracking authorization.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'authorization.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target ?? '', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n if (!loaded.config.tracking.target) fail('tracking.target is required when authorizing.', 'INVALID_CONFIG')\n const next = { ...transition(run, 'COMPLETE', 'External tracking was authorized.', 'human'), authorization: { actor: 'human', at: now(), target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'authorization.recorded', { decision: 'approved', resultingState: 'COMPLETE', verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const retryRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath); const previous = loadLatestRun(loaded.stateDir)\n const previousRun = requireRun(previous)\n if (!['BLOCKED', 'STALE', 'CANCELLED'].includes(previousRun.state)) fail(`Cannot retry from ${previousRun.state}.`, 'INVALID_STATE')\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const superseded = transition(previousRun, 'SUPERSEDED', 'Retry superseded the previous run.', 'harness') as VerificationRun\n saveRun(loaded.stateDir, superseded)\n const run = await createRun({ loaded, baseline, supersedes: previousRun.runId, dirtyBaselineAuthorized: previousRun.dirtyBaselineAuthorized, planner: plannerForRetry(loaded, previousRun) })\n const next = transition(run, 'IMPLEMENTING', 'Retry started after a previous attempt.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cleanTaskArtifacts = (configPath: string): { readonly cleaned: readonly string[] } => cleanConfiguredArtifacts(loadConfig(configPath))\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { hashJson } from '../hash.js'\nimport { hashContextSnapshot } from '../context.js'\nimport type { ContextProvider, ContextQuery, ContextReference } from '../context.js'\n\ninterface IndexEntry { readonly id?: unknown; readonly type?: unknown; readonly title?: unknown; readonly path?: unknown; readonly description?: unknown; readonly body?: unknown; readonly tags?: unknown }\ninterface IndexDocument { readonly contentHash?: unknown; readonly knowledge?: unknown }\n\nconst index = (root: string, indexPath: string): IndexDocument => JSON.parse(readFileSync(resolve(root, indexPath), 'utf8')) as IndexDocument\nconst text = (entry: IndexEntry): string => [entry.id, entry.type, entry.title, entry.path, entry.description, entry.body, ...(Array.isArray(entry.tags) ? entry.tags : [])].filter((value): value is string => typeof value === 'string').join(' ').toLowerCase()\nconst sourceHash = (document: IndexDocument): string => typeof document.contentHash === 'string' && document.contentHash.length > 0 ? document.contentHash : hashJson(document)\nconst matches = (entry: IndexEntry, query: ContextQuery): boolean => {\n const needle = query.query.trim().toLowerCase()\n const scopes = query.scope?.map((scope) => scope.toLowerCase()) ?? []\n const value = text(entry)\n return Boolean(needle && value.includes(needle) && (scopes.length === 0 || scopes.some((scope) => value.includes(scope))))\n}\n\nexport interface DocBridgeContextProviderOptions {\n readonly root: string\n readonly indexPath?: string\n}\n\nexport const createDocBridgeContextProvider = ({ root, indexPath = '.doc-bridge/index.json' }: DocBridgeContextProviderOptions): ContextProvider => ({\n id: 'doc-bridge',\n version: '1.0.0',\n resolve: async (query) => {\n const document = index(root, indexPath)\n const contentHash = sourceHash(document)\n const entries = Array.isArray(document.knowledge) ? document.knowledge.filter((value): value is IndexEntry => typeof value === 'object' && value !== null && !Array.isArray(value)).filter((entry) => matches(entry, query)).sort((left, right) => String(left.id ?? '').localeCompare(String(right.id ?? ''))).slice(0, 8) : []\n const references: ContextReference[] = entries.flatMap((entry) => typeof entry.id === 'string' && typeof entry.path === 'string' ? [{ id: entry.id, uri: `doc-bridge://${entry.path}`, ...(typeof entry.title === 'string' ? { title: entry.title } : {}), contentHash }] : [])\n return { providerId: 'doc-bridge', query, references, sourceHash: contentHash, snapshotHash: hashContextSnapshot({ providerId: 'doc-bridge', query, references, sourceHash: contentHash }), resolvedAt: new Date().toISOString() }\n },\n})\n","import { existsSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { fail } from './errors.js'\nimport { readJson, readRun } from './files.js'\nimport { RUN_STATES, SURFACE_NAMES } from './types.js'\nimport type { BenchmarkBinding, RunState, SurfaceName, VerificationRun } from './types.js'\n\nexport const BENCHMARK_SCHEMA_VERSION = 1 as const\n\nexport type BenchmarkObservationStatus = 'passed' | 'failed' | 'blocked' | 'not-run'\nexport type BenchmarkImprovementDirection = 'improved' | 'regressed' | 'unchanged' | 'unavailable'\nexport type BenchmarkConfidence = 'insufficient' | 'directional' | 'reliable'\n\nexport interface BenchmarkPolicy {\n readonly minComparableTasks: number\n readonly maxDurationRegressionRate: number\n readonly minCompletedRunsPerTask: number\n readonly minBaselineSamplesPerTask: number\n readonly requireZeroEscapedIncomplete: boolean\n}\n\nexport interface BenchmarkQualityGate {\n readonly status: 'passed' | 'failed' | 'insufficient-data'\n readonly confidence: BenchmarkConfidence\n readonly comparableTaskCount: number\n readonly policy: BenchmarkPolicy\n readonly durationRegressionTaskIds: readonly string[]\n readonly escapedIncompleteTaskIds: readonly string[]\n readonly reasons: readonly string[]\n}\n\nexport interface BenchmarkTask {\n readonly id: string\n readonly title: string\n readonly acceptanceCriteria: readonly string[]\n /** Product/runtime surfaces exercised by the task. */\n readonly surfaces?: readonly SurfaceName[]\n readonly kind?: string\n readonly prompt?: BenchmarkTaskFile\n readonly source?: BenchmarkTaskSource\n readonly scope?: BenchmarkTaskScope\n}\n\nexport interface BenchmarkTaskFile {\n readonly path: string\n readonly sha256: string\n}\n\nexport interface BenchmarkTaskSource {\n readonly repository: string\n readonly path: string\n readonly revision: string\n}\n\nexport interface BenchmarkSuiteSource {\n readonly repository: string\n readonly revision: string\n readonly taskDefinition: string\n}\n\nexport interface BenchmarkTaskScope {\n readonly read: readonly string[]\n readonly write: readonly string[]\n}\n\nexport interface BenchmarkObservation {\n readonly taskId: string\n readonly mode: 'baseline'\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly durationSamplesMs?: readonly number[]\n /** Fraction of repeated samples whose task artifact passed acceptance validation. */\n readonly artifactAcceptanceRate?: number\n /** Fraction of repeated samples whose verification protocol completed. */\n readonly protocolCompletionRate?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nexport interface BenchmarkObservationEvidence {\n readonly criterion: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n}\n\nexport interface BenchmarkManifest {\n readonly type: 'agentskit-harness-benchmark-manifest'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly suiteId: string\n readonly name: string\n readonly provenance?: BenchmarkSuiteSource\n readonly tasks: readonly BenchmarkTask[]\n readonly observations: readonly BenchmarkObservation[]\n readonly policy?: BenchmarkPolicy\n}\n\nexport interface BenchmarkRun {\n readonly runId: string\n readonly state: RunState\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly supersedes?: string\n readonly durationMs?: number\n readonly checks: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly outcomes: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly evidence: { readonly total: number; readonly attached: number }\n /** Optional artifact outcome emitted by structured benchmark evidence. */\n readonly artifactAcceptanceRate?: number\n readonly escapedIncomplete?: number\n readonly humanApproved: boolean\n readonly humanReviewMinutes?: number\n readonly authorized: boolean\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface BenchmarkComparison {\n readonly taskId: string\n readonly title: string\n readonly comparability: 'comparable' | 'missing-baseline' | 'baseline-not-run' | 'baseline-evidence-missing' | 'baseline-incomplete' | 'baseline-samples-insufficient' | 'harness-not-run' | 'harness-not-complete'\n readonly comparable: boolean\n readonly baselineDeliveryComplete: boolean\n readonly baseline?: BenchmarkObservation\n readonly baselineEvidenceCoverageRate: number | null\n readonly baselineSampleCount: number\n readonly baselineArtifactAcceptanceRate: number | null\n readonly baselineProtocolCompletionRate: number | null\n readonly baselineMedianDurationMs?: number\n readonly improvement: {\n readonly durationRate: number | null\n readonly duration: BenchmarkImprovementDirection\n readonly attemptsRate: number | null\n readonly attempts: BenchmarkImprovementDirection\n readonly reviewRate: number | null\n readonly review: BenchmarkImprovementDirection\n readonly artifactAcceptanceRate: number | null\n readonly artifactAcceptance: BenchmarkImprovementDirection\n readonly artifactAcceptanceDelta: number | null\n readonly protocolCompletionRate: number | null\n readonly protocolCompletion: BenchmarkImprovementDirection\n readonly protocolCompletionDelta: number | null\n readonly escapedIncompleteRate: number | null\n readonly escapedIncomplete: BenchmarkImprovementDirection\n }\n readonly harness: {\n readonly attempts: number\n readonly retryCount: number\n readonly completedRuns: number\n readonly durationSamplesMs: readonly number[]\n readonly medianDurationMs?: number\n readonly latestState: RunState | 'NOT_RUN'\n readonly latestRunId?: string\n readonly latestDurationMs?: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly artifactAcceptanceRate?: number\n readonly artifactAcceptanceSampleCount: number\n readonly protocolCompletionRate: number | null\n readonly protocolCompletionSampleCount: number\n readonly humanApproved: boolean\n readonly escapedIncomplete?: number\n readonly humanReviewMinutes?: number\n }\n readonly confidence: BenchmarkConfidence\n readonly durationDeltaMs?: number\n readonly attemptDelta?: number\n readonly reviewDeltaMinutes?: number\n readonly escapedIncompleteDelta?: number\n}\n\nexport interface BenchmarkSummary {\n readonly totalRuns: number\n readonly stateCounts: Readonly<Record<RunState, number>>\n readonly completeRuns: number\n readonly retriedRuns: number\n readonly staleRuns: number\n readonly firstAttemptRuns: number\n readonly humanApprovedRuns: number\n readonly authorizedRuns: number\n readonly effectiveRunCount: number\n readonly effectiveCompleteRuns: number\n readonly effectiveCompletionRate: number | null\n readonly effectiveCheckPassRate: number | null\n readonly effectiveOutcomePassRate: number | null\n readonly effectiveEvidenceCoverageRate: number | null\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly firstAttemptApprovalRate: number | null\n readonly retryRate: number | null\n readonly staleRate: number | null\n readonly averageDurationMs: number | null\n readonly medianDurationMs: number | null\n}\n\nexport interface BenchmarkReport {\n readonly type: 'agentskit-harness-benchmark'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly stateDir: string\n readonly generatedAt: string\n readonly runs: readonly BenchmarkRun[]\n readonly summary: BenchmarkSummary\n readonly manifest?: { readonly suiteId: string; readonly taskCount: number; readonly baselineCount: number; readonly comparableTaskCount: number }\n readonly comparisons: readonly BenchmarkComparison[]\n readonly qualityGate: BenchmarkQualityGate\n}\n\nexport interface BenchmarkObservationInput {\n readonly taskId: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt?: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly durationSamplesMs?: readonly number[]\n readonly artifactAcceptanceRate?: number\n readonly protocolCompletionRate?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nconst percentage = (part: number, total: number): number | null => total ? Number((part / total).toFixed(4)) : null\nconst DEFAULT_POLICY: BenchmarkPolicy = { minComparableTasks: 3, maxDurationRegressionRate: 0.2, minCompletedRunsPerTask: 3, minBaselineSamplesPerTask: 3, requireZeroEscapedIncomplete: true }\nconst improvementRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((baseline - current) / baseline).toFixed(4))\nconst increaseRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((current - baseline) / baseline).toFixed(4))\nconst increaseDelta = (baseline: number | undefined, current: number | null): number | null => baseline === undefined || current === null ? null : Number((current - baseline).toFixed(4))\nconst increaseDirection = (rate: number | null, delta: number | null): BenchmarkImprovementDirection => delta === null ? improvementDirection(rate) : delta > 0 ? 'improved' : delta < 0 ? 'regressed' : 'unchanged'\nconst improvementDirection = (rate: number | null): BenchmarkImprovementDirection => rate === null ? 'unavailable' : rate > 0 ? 'improved' : rate < 0 ? 'regressed' : 'unchanged'\nconst count = <T>(items: readonly T[], predicate: (item: T) => boolean): number => items.filter(predicate).length\nconst median = (values: readonly number[]): number | null => {\n if (!values.length) return null\n const sorted = [...values].sort((left, right) => left - right)\n const middle = Math.floor(sorted.length / 2)\n return sorted.length % 2 ? sorted[middle] ?? null : ((sorted[middle - 1] ?? 0) + (sorted[middle] ?? 0)) / 2\n}\nconst reviewMinutes = (run: VerificationRun): number | undefined => {\n if (!run.humanApproval) return undefined\n const reviewStart = run.transitions.find((transition) => transition.to === 'AWAITING_HUMAN_APPROVAL')?.at\n if (!reviewStart) return undefined\n const elapsed = Date.parse(run.humanApproval.at) - Date.parse(reviewStart)\n return Number.isFinite(elapsed) && elapsed >= 0 ? Number((elapsed / 60_000).toFixed(2)) : undefined\n}\nconst confidence = (comparable: boolean, completedRuns: number, policy: BenchmarkPolicy): BenchmarkConfidence => !comparable ? 'insufficient' : completedRuns >= policy.minCompletedRunsPerTask ? 'reliable' : 'directional'\n\nconst artifactAcceptanceRate = (run: VerificationRun): number | undefined => {\n const rates = run.checks.flatMap((check) => {\n const evidence = check.evidence\n if (!evidence) return []\n const direct = typeof evidence['artifactAcceptanceRate'] === 'number' ? [evidence['artifactAcceptanceRate']] : []\n const reports = Array.isArray(evidence['reports']) ? evidence['reports'].flatMap((report) => typeof report === 'object' && report !== null && typeof report['artifactAcceptanceRate'] === 'number' ? [report['artifactAcceptanceRate']] : []) : []\n return [...direct, ...reports].filter((rate) => Number.isFinite(rate) && rate >= 0 && rate <= 1)\n })\n return rates.length ? Number((rates.reduce((total, rate) => total + rate, 0) / rates.length).toFixed(4)) : undefined\n}\n\nconst projectRun = (run: VerificationRun): BenchmarkRun => {\n const checks = { total: run.checks.length, passed: count(run.checks, (check) => check.status === 'passed'), failed: count(run.checks, (check) => check.status === 'failed') }\n const outcomes = { total: run.outcomes.length, passed: count(run.outcomes, (outcome) => outcome.status === 'passed'), failed: count(run.outcomes, (outcome) => outcome.status === 'failed') }\n const evidence = { total: run.checks.length, attached: count(run.checks, (check) => check.evidence !== undefined) }\n const acceptanceRate = artifactAcceptanceRate(run)\n const humanReviewMinutes = reviewMinutes(run)\n const escapedIncomplete = run.state === 'COMPLETE' && checks.failed === 0 && outcomes.failed === 0 && evidence.attached === evidence.total ? 0 : undefined\n return { runId: run.runId, state: run.state, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, ...(run.supersedes ? { supersedes: run.supersedes } : {}), ...(run.metrics ? { durationMs: run.metrics.totalDurationMs } : {}), checks, outcomes, evidence, ...(acceptanceRate === undefined ? {} : { artifactAcceptanceRate: acceptanceRate }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), humanApproved: run.humanApproval !== undefined, ...(humanReviewMinutes === undefined ? {} : { humanReviewMinutes }), authorized: run.authorization !== undefined, ...(run.benchmark ? { benchmark: run.benchmark } : {}) }\n}\n\nconst summarize = (runs: readonly BenchmarkRun[]): BenchmarkSummary => {\n const stateCounts = Object.fromEntries(RUN_STATES.map((state) => [state, count(runs, (run) => run.state === state)])) as Record<RunState, number>\n const checksTotal = runs.reduce((total, run) => total + run.checks.total, 0)\n const checksPassed = runs.reduce((total, run) => total + run.checks.passed, 0)\n const outcomesTotal = runs.reduce((total, run) => total + run.outcomes.total, 0)\n const outcomesPassed = runs.reduce((total, run) => total + run.outcomes.passed, 0)\n const evidenceTotal = runs.reduce((total, run) => total + run.evidence.total, 0)\n const evidenceAttached = runs.reduce((total, run) => total + run.evidence.attached, 0)\n const firstAttempts = runs.filter((run) => !run.supersedes)\n const superseded = new Set(runs.flatMap((run) => run.supersedes ? [run.supersedes] : []))\n const effectiveRuns = runs.filter((run) => !superseded.has(run.runId))\n const effectiveChecksTotal = effectiveRuns.reduce((total, run) => total + run.checks.total, 0)\n const effectiveChecksPassed = effectiveRuns.reduce((total, run) => total + run.checks.passed, 0)\n const effectiveOutcomesTotal = effectiveRuns.reduce((total, run) => total + run.outcomes.total, 0)\n const effectiveOutcomesPassed = effectiveRuns.reduce((total, run) => total + run.outcomes.passed, 0)\n const effectiveEvidenceTotal = effectiveRuns.reduce((total, run) => total + run.evidence.total, 0)\n const effectiveEvidenceAttached = effectiveRuns.reduce((total, run) => total + run.evidence.attached, 0)\n const durations = runs.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n return {\n totalRuns: runs.length,\n stateCounts,\n completeRuns: stateCounts.COMPLETE,\n retriedRuns: count(runs, (run) => run.supersedes !== undefined),\n staleRuns: stateCounts.STALE,\n firstAttemptRuns: firstAttempts.length,\n humanApprovedRuns: count(runs, (run) => run.humanApproved),\n authorizedRuns: count(runs, (run) => run.authorized),\n effectiveRunCount: effectiveRuns.length,\n effectiveCompleteRuns: count(effectiveRuns, (run) => run.state === 'COMPLETE'),\n effectiveCompletionRate: percentage(count(effectiveRuns, (run) => run.state === 'COMPLETE'), effectiveRuns.length),\n effectiveCheckPassRate: percentage(effectiveChecksPassed, effectiveChecksTotal),\n effectiveOutcomePassRate: percentage(effectiveOutcomesPassed, effectiveOutcomesTotal),\n effectiveEvidenceCoverageRate: percentage(effectiveEvidenceAttached, effectiveEvidenceTotal),\n checkPassRate: percentage(checksPassed, checksTotal),\n outcomePassRate: percentage(outcomesPassed, outcomesTotal),\n evidenceCoverageRate: percentage(evidenceAttached, evidenceTotal),\n firstAttemptApprovalRate: percentage(count(firstAttempts, (run) => run.humanApproved), firstAttempts.length),\n retryRate: percentage(count(runs, (run) => run.supersedes !== undefined), runs.length),\n staleRate: percentage(stateCounts.STALE, runs.length),\n averageDurationMs: durations.length ? Math.round(durations.reduce((total, duration) => total + duration, 0) / durations.length) : null,\n medianDurationMs: median(durations),\n }\n}\n\nconst readRuns = (stateDir: string): VerificationRun[] => {\n const runsDir = join(stateDir, 'runs')\n if (!existsSync(runsDir)) return []\n return readdirSync(runsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => {\n try {\n const candidate = readJson(join(runsDir, entry.name, 'run.json')) as { readonly type?: unknown }\n return candidate.type === 'agentskit-harness-run' ? readRun(stateDir, entry.name) : undefined\n } catch (error) { return fail(`Benchmark could not read run ${entry.name}: ${error instanceof Error ? error.message : String(error)}`, 'HARNESS_ERROR') }\n }).filter((run): run is VerificationRun => run !== undefined)\n}\n\nconst nonEmptyString = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return result\n}\n\nconst sha256 = (value: unknown, label: string): string | undefined => {\n if (value === undefined) return undefined\n const result = nonEmptyString(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) return fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_CONFIG')\n return result\n}\n\nconst stringList = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n const items = value as unknown[]\n if (!items.length || !items.every((item: unknown) => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => String(item).trim())\n}\n\nconst nonNegativeNumber = (value: unknown, label: string): number | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'number') return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n if (!Number.isFinite(value) || value < 0) return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n const result = value\n return result\n}\n\nconst nonNegativeInteger = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && !Number.isInteger(result)) return fail(`${label} must be an integer.`, 'INVALID_CONFIG')\n return result\n}\n\nconst rate = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && result > 1) return fail(`${label} must be between 0 and 1.`, 'INVALID_CONFIG')\n return result\n}\n\nconst timestamp = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (!Number.isFinite(Date.parse(result))) return fail(`${label} must be a valid timestamp.`, 'INVALID_CONFIG')\n return result\n}\n\nconst relativePath = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (result.startsWith('/') || result.split('/').includes('..')) return fail(`${label} must be a repository-relative path.`, 'INVALID_CONFIG')\n return result\n}\n\nconst taskFile = (value: unknown, label: string): BenchmarkTaskFile | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { path: relativePath(raw['path'], `${label}.path`), sha256: sha256(raw['sha256'], `${label}.sha256`) ?? fail(`${label}.sha256 is required.`, 'INVALID_CONFIG') }\n}\n\nconst taskSource = (value: unknown, label: string): BenchmarkTaskSource | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { repository: nonEmptyString(raw['repository'], `${label}.repository`), path: relativePath(raw['path'], `${label}.path`), revision: nonEmptyString(raw['revision'], `${label}.revision`) }\n}\n\nconst suiteSource = (value: unknown, label: string): BenchmarkSuiteSource | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { repository: nonEmptyString(raw['repository'], `${label}.repository`), revision: nonEmptyString(raw['revision'], `${label}.revision`), taskDefinition: relativePath(raw['taskDefinition'], `${label}.taskDefinition`) }\n}\n\nconst taskScope = (value: unknown, label: string): BenchmarkTaskScope | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { read: stringList(raw['read'], `${label}.read`), write: stringList(raw['write'], `${label}.write`) }\n}\n\nconst taskSurfaces = (value: unknown, label: string): readonly SurfaceName[] | undefined => {\n if (value === undefined) return undefined\n if (!Array.isArray(value) || !value.length) return fail(`${label} must be a non-empty array.`, 'INVALID_CONFIG')\n const surfaces = value.map((item, index) => nonEmptyString(item, `${label}[${index}]`))\n if (surfaces.some((surface) => !(SURFACE_NAMES as readonly string[]).includes(surface))) fail(`${label} contains an unknown surface.`, 'INVALID_CONFIG')\n if (new Set(surfaces).size !== surfaces.length) fail(`${label} must contain unique surfaces.`, 'INVALID_CONFIG')\n return surfaces as SurfaceName[]\n}\n\nconst benchmarkPolicy = (value: unknown): BenchmarkPolicy | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail('benchmark.policy must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n const minComparableTasks = nonNegativeInteger(raw['minComparableTasks'], 'benchmark.policy.minComparableTasks')\n const maxDurationRegressionRate = nonNegativeNumber(raw['maxDurationRegressionRate'], 'benchmark.policy.maxDurationRegressionRate')\n const minCompletedRunsPerTask = nonNegativeInteger(raw['minCompletedRunsPerTask'], 'benchmark.policy.minCompletedRunsPerTask')\n const minBaselineSamplesPerTask = nonNegativeInteger(raw['minBaselineSamplesPerTask'] ?? 1, 'benchmark.policy.minBaselineSamplesPerTask')\n if (minComparableTasks === undefined || minComparableTasks < 1) return fail('benchmark.policy.minComparableTasks must be at least 1.', 'INVALID_CONFIG')\n if (maxDurationRegressionRate === undefined || maxDurationRegressionRate > 1) return fail('benchmark.policy.maxDurationRegressionRate must be between 0 and 1.', 'INVALID_CONFIG')\n if (minCompletedRunsPerTask === undefined || minCompletedRunsPerTask < 1) return fail('benchmark.policy.minCompletedRunsPerTask must be at least 1.', 'INVALID_CONFIG')\n if (minBaselineSamplesPerTask === undefined || minBaselineSamplesPerTask < 1) return fail('benchmark.policy.minBaselineSamplesPerTask must be at least 1.', 'INVALID_CONFIG')\n if (typeof raw['requireZeroEscapedIncomplete'] !== 'boolean') return fail('benchmark.policy.requireZeroEscapedIncomplete must be boolean.', 'INVALID_CONFIG')\n return { minComparableTasks, maxDurationRegressionRate, minCompletedRunsPerTask, minBaselineSamplesPerTask, requireZeroEscapedIncomplete: raw['requireZeroEscapedIncomplete'] }\n}\n\nexport const validateBenchmarkManifest = (value: unknown): BenchmarkManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('benchmark manifest must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n if (raw['type'] !== 'agentskit-harness-benchmark-manifest' || raw['schemaVersion'] !== BENCHMARK_SCHEMA_VERSION) fail('benchmark manifest type or schemaVersion is invalid.', 'INVALID_CONFIG')\n const rawTasks = Array.isArray(raw['tasks']) && raw['tasks'].length ? raw['tasks'] : fail('benchmark manifest tasks must be non-empty.', 'INVALID_CONFIG')\n const tasks = rawTasks.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.tasks[${index}] must be an object.`, 'INVALID_CONFIG')\n const task = item as Record<string, unknown>\n const kind = task['kind'] === undefined ? undefined : nonEmptyString(task['kind'], `benchmark.tasks[${index}].kind`)\n const prompt = taskFile(task['prompt'], `benchmark.tasks[${index}].prompt`)\n const source = taskSource(task['source'], `benchmark.tasks[${index}].source`)\n const scope = taskScope(task['scope'], `benchmark.tasks[${index}].scope`)\n const surfaces = taskSurfaces(task['surfaces'], `benchmark.tasks[${index}].surfaces`)\n return { id: nonEmptyString(task['id'], `benchmark.tasks[${index}].id`), title: nonEmptyString(task['title'], `benchmark.tasks[${index}].title`), acceptanceCriteria: stringList(task['acceptanceCriteria'], `benchmark.tasks[${index}].acceptanceCriteria`), ...(surfaces === undefined ? {} : { surfaces }), ...(kind === undefined ? {} : { kind }), ...(prompt === undefined ? {} : { prompt }), ...(source === undefined ? {} : { source }), ...(scope === undefined ? {} : { scope }) }\n })\n if (new Set(tasks.map((task) => task.id)).size !== tasks.length) fail('benchmark task ids must be unique.', 'INVALID_CONFIG')\n const taskIds = new Set(tasks.map((task) => task.id))\n const rawObservations = raw['observations'] === undefined ? [] : Array.isArray(raw['observations']) ? raw['observations'] : fail('benchmark.observations must be an array.', 'INVALID_CONFIG')\n const observations = rawObservations.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}] must be an object.`, 'INVALID_CONFIG')\n const observation = item as Record<string, unknown>\n const status = observation['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(status))) fail(`benchmark.observations[${index}].status is invalid.`, 'INVALID_CONFIG')\n const taskId = nonEmptyString(observation['taskId'], `benchmark.observations[${index}].taskId`)\n if (!taskIds.has(taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const task = tasks.find((candidate) => candidate.id === taskId) ?? fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const attempts = nonNegativeInteger(observation['attempts'], `benchmark.observations[${index}].attempts`)\n const durationMs = nonNegativeNumber(observation['durationMs'], `benchmark.observations[${index}].durationMs`)\n const durationSamplesMs = observation['durationSamplesMs'] === undefined ? undefined : Array.isArray(observation['durationSamplesMs']) ? observation['durationSamplesMs'].map((sample, sampleIndex) => nonNegativeNumber(sample, `benchmark.observations[${index}].durationSamplesMs[${sampleIndex}]`) ?? fail(`benchmark.observations[${index}].durationSamplesMs must contain numbers.`, 'INVALID_CONFIG')) : fail(`benchmark.observations[${index}].durationSamplesMs must be an array.`, 'INVALID_CONFIG')\n if (durationSamplesMs && !durationSamplesMs.length) fail(`benchmark.observations[${index}].durationSamplesMs must not be empty.`, 'INVALID_CONFIG')\n const artifactAcceptanceRate = rate(observation['artifactAcceptanceRate'], `benchmark.observations[${index}].artifactAcceptanceRate`)\n const protocolCompletionRate = rate(observation['protocolCompletionRate'], `benchmark.observations[${index}].protocolCompletionRate`)\n const reviewMinutes = nonNegativeNumber(observation['reviewMinutes'], `benchmark.observations[${index}].reviewMinutes`)\n const escapedIncomplete = nonNegativeInteger(observation['escapedIncomplete'], `benchmark.observations[${index}].escapedIncomplete`)\n const evidenceDigest = sha256(observation['evidenceDigest'], `benchmark.observations[${index}].evidenceDigest`)\n const rawEvidence = observation['evidence'] === undefined ? undefined : Array.isArray(observation['evidence']) ? observation['evidence'] : fail(`benchmark.observations[${index}].evidence must be an array.`, 'INVALID_CONFIG')\n const evidence = rawEvidence?.map((item, evidenceIndex) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}] must be an object.`, 'INVALID_CONFIG')\n const entry = item as Record<string, unknown>\n const criterion = nonEmptyString(entry['criterion'], `benchmark.observations[${index}].evidence[${evidenceIndex}].criterion`)\n if (!task.acceptanceCriteria.includes(criterion)) fail(`benchmark evidence references unknown criterion: ${criterion}.`, 'INVALID_CONFIG')\n const evidenceStatus = entry['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(evidenceStatus))) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}].status is invalid.`, 'INVALID_CONFIG')\n return { criterion, status: evidenceStatus as BenchmarkObservationStatus, source: nonEmptyString(entry['source'], `benchmark.observations[${index}].evidence[${evidenceIndex}].source`) }\n })\n if (evidence && new Set(evidence.map((entry) => entry.criterion)).size !== evidence.length) fail(`benchmark.observations[${index}].evidence criteria must be unique.`, 'INVALID_CONFIG')\n return { taskId, mode: 'baseline' as const, status: status as BenchmarkObservationStatus, source: nonEmptyString(observation['source'], `benchmark.observations[${index}].source`), recordedAt: timestamp(observation['recordedAt'], `benchmark.observations[${index}].recordedAt`), ...(attempts === undefined ? {} : { attempts }), ...(durationMs === undefined ? {} : { durationMs }), ...(durationSamplesMs === undefined ? {} : { durationSamplesMs }), ...(artifactAcceptanceRate === undefined ? {} : { artifactAcceptanceRate }), ...(protocolCompletionRate === undefined ? {} : { protocolCompletionRate }), ...(reviewMinutes === undefined ? {} : { reviewMinutes }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), ...(evidence === undefined ? {} : { evidence }), ...(evidenceDigest === undefined ? {} : { evidenceDigest }) }\n })\n if (new Set(observations.map((observation) => observation.taskId)).size !== observations.length) fail('benchmark allows at most one baseline observation per task.', 'INVALID_CONFIG')\n const provenance = suiteSource(raw['provenance'], 'benchmark.provenance')\n const policy = benchmarkPolicy(raw['policy'])\n return { type: 'agentskit-harness-benchmark-manifest', schemaVersion: BENCHMARK_SCHEMA_VERSION, suiteId: nonEmptyString(raw['suiteId'], 'benchmark.suiteId'), name: nonEmptyString(raw['name'], 'benchmark.name'), ...(provenance === undefined ? {} : { provenance }), tasks, observations, ...(policy === undefined ? {} : { policy }) }\n}\n\nexport const loadBenchmarkManifest = (path: string): BenchmarkManifest => {\n try { return validateBenchmarkManifest(JSON.parse(readFileSync(path, 'utf8')) as unknown) } catch (error) { if (error instanceof SyntaxError) return fail(`Invalid benchmark manifest JSON: ${error.message}`, 'INVALID_CONFIG'); throw error }\n}\n\nexport const recordBenchmarkObservation = (path: string, input: BenchmarkObservationInput): BenchmarkManifest => {\n const originalContent = readFileSync(path, 'utf8')\n const manifest = loadBenchmarkManifest(path)\n const taskId = nonEmptyString(input.taskId, 'benchmark observation.taskId')\n if (!manifest.tasks.some((task) => task.id === taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_INPUT')\n if (manifest.observations.some((observation) => observation.taskId === taskId)) fail(`benchmark already has an observation for task: ${taskId}.`, 'INVALID_INPUT')\n const observation = validateBenchmarkManifest({\n ...manifest,\n observations: [...manifest.observations, {\n taskId,\n mode: 'baseline',\n status: input.status,\n source: input.source,\n recordedAt: input.recordedAt ?? new Date().toISOString(),\n ...(input.attempts === undefined ? {} : { attempts: input.attempts }),\n ...(input.durationMs === undefined ? {} : { durationMs: input.durationMs }),\n ...(input.durationSamplesMs === undefined ? {} : { durationSamplesMs: input.durationSamplesMs }),\n ...(input.artifactAcceptanceRate === undefined ? {} : { artifactAcceptanceRate: input.artifactAcceptanceRate }),\n ...(input.protocolCompletionRate === undefined ? {} : { protocolCompletionRate: input.protocolCompletionRate }),\n ...(input.reviewMinutes === undefined ? {} : { reviewMinutes: input.reviewMinutes }),\n ...(input.escapedIncomplete === undefined ? {} : { escapedIncomplete: input.escapedIncomplete }),\n ...(input.evidence === undefined ? {} : { evidence: input.evidence }),\n ...(input.evidenceDigest === undefined ? {} : { evidenceDigest: input.evidenceDigest }),\n }],\n })\n const temporaryRoot = mkdtempSync(join(tmpdir(), 'agentskit-harness-baseline-'))\n const temporaryPath = join(temporaryRoot, 'manifest.json')\n try {\n writeFileSync(temporaryPath, `${JSON.stringify(observation, null, 2)}\\n`, 'utf8')\n if (readFileSync(path, 'utf8') !== originalContent) fail('benchmark manifest changed while recording an observation.', 'STALE')\n renameSync(temporaryPath, path)\n } finally {\n rmSync(temporaryRoot, { recursive: true, force: true })\n }\n return observation\n}\n\nconst comparisons = (runs: readonly BenchmarkRun[], manifest: BenchmarkManifest, policy: BenchmarkPolicy): readonly BenchmarkComparison[] => manifest.tasks.map((task) => {\n const taskRuns = runs.filter((run) => run.benchmark?.suiteId === manifest.suiteId && run.benchmark.taskId === task.id)\n const latest = taskRuns.at(-1)\n const baseline = manifest.observations.find((observation) => observation.taskId === task.id)\n const coveredCriteria = new Set((baseline?.evidence ?? []).map((entry) => entry.criterion))\n const baselineEvidenceCoverageRate = baseline ? percentage(coveredCriteria.size, task.acceptanceCriteria.length) : null\n const baselineEvidenceComplete = baselineEvidenceCoverageRate === 1\n const baselineEvidencePassed = baselineEvidenceComplete && (baseline?.evidence?.every((entry) => entry.status === 'passed') ?? false)\n const baselineDeliveryComplete = baseline?.status === 'passed' && baselineEvidencePassed\n const baselineDurationSamples = baseline?.durationSamplesMs ?? (baseline?.durationMs === undefined ? [] : [baseline.durationMs])\n const baselineMedianDurationMs = median(baselineDurationSamples)\n const baselineSamplesSufficient = baselineDurationSamples.length >= policy.minBaselineSamplesPerTask\n const comparable = baseline !== undefined && baseline.status !== 'not-run' && baselineEvidenceComplete && baselineDeliveryComplete && baselineSamplesSufficient && latest?.state === 'COMPLETE'\n const comparability = comparable ? 'comparable' : baseline === undefined ? 'missing-baseline' : baseline.status === 'not-run' ? 'baseline-not-run' : !baselineEvidenceComplete ? 'baseline-evidence-missing' : latest === undefined ? 'harness-not-run' : latest.state !== 'COMPLETE' ? 'harness-not-complete' : !baselineDeliveryComplete ? 'baseline-incomplete' : 'baseline-samples-insufficient'\n const completedTaskRuns = taskRuns.filter((run) => run.state === 'COMPLETE')\n const durationSamplesMs = completedTaskRuns.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n const medianDurationMs = median(durationSamplesMs)\n const retryCount = count(taskRuns, (run) => run.supersedes !== undefined)\n const attempts = retryCount + (taskRuns.length ? 1 : 0)\n const durationRate = comparable ? improvementRate(baselineMedianDurationMs ?? undefined, medianDurationMs ?? undefined) : null\n const attemptsRate = comparable ? improvementRate(baseline?.attempts, attempts) : null\n const reviewRate = comparable ? improvementRate(baseline?.reviewMinutes, latest?.humanReviewMinutes) : null\n const acceptanceSamples = taskRuns.flatMap((run) => run.artifactAcceptanceRate === undefined ? [] : [run.artifactAcceptanceRate])\n const harnessArtifactAcceptanceRate = acceptanceSamples.length ? Number((acceptanceSamples.reduce((total, rate) => total + rate, 0) / acceptanceSamples.length).toFixed(4)) : null\n const artifactAcceptanceImprovementRate = increaseRate(baseline?.artifactAcceptanceRate, harnessArtifactAcceptanceRate ?? undefined)\n const artifactAcceptanceDelta = increaseDelta(baseline?.artifactAcceptanceRate, harnessArtifactAcceptanceRate)\n const completedRuns = completedTaskRuns.length\n const harnessProtocolCompletionRate = taskRuns.length ? percentage(completedRuns, taskRuns.length) : null\n const protocolCompletionImprovementRate = increaseRate(baseline?.protocolCompletionRate, harnessProtocolCompletionRate ?? undefined)\n const protocolCompletionDelta = increaseDelta(baseline?.protocolCompletionRate, harnessProtocolCompletionRate)\n const escapedIncompleteRate = improvementRate(baseline?.escapedIncomplete, latest?.escapedIncomplete)\n return { taskId: task.id, title: task.title, comparability, comparable, baselineDeliveryComplete, baselineEvidenceCoverageRate, baselineSampleCount: baselineDurationSamples.length, baselineArtifactAcceptanceRate: baseline?.artifactAcceptanceRate ?? null, baselineProtocolCompletionRate: baseline?.protocolCompletionRate ?? null, ...(baselineMedianDurationMs === null ? {} : { baselineMedianDurationMs }), improvement: { durationRate, duration: improvementDirection(durationRate), attemptsRate, attempts: improvementDirection(attemptsRate), reviewRate, review: improvementDirection(reviewRate), artifactAcceptanceRate: artifactAcceptanceImprovementRate, artifactAcceptance: increaseDirection(artifactAcceptanceImprovementRate, artifactAcceptanceDelta), artifactAcceptanceDelta, protocolCompletionRate: protocolCompletionImprovementRate, protocolCompletion: increaseDirection(protocolCompletionImprovementRate, protocolCompletionDelta), protocolCompletionDelta, escapedIncompleteRate, escapedIncomplete: improvementDirection(escapedIncompleteRate) }, ...(baseline ? { baseline } : {}), harness: { attempts, retryCount, completedRuns, durationSamplesMs, ...(medianDurationMs === null ? {} : { medianDurationMs }), ...(harnessArtifactAcceptanceRate === null ? {} : { artifactAcceptanceRate: harnessArtifactAcceptanceRate }), artifactAcceptanceSampleCount: acceptanceSamples.length, protocolCompletionRate: harnessProtocolCompletionRate, protocolCompletionSampleCount: taskRuns.length, latestState: latest?.state ?? 'NOT_RUN', ...(latest ? { latestRunId: latest.runId } : {}), ...(latest?.durationMs === undefined ? {} : { latestDurationMs: latest.durationMs }), checkPassRate: latest ? percentage(latest.checks.passed, latest.checks.total) : null, outcomePassRate: latest ? percentage(latest.outcomes.passed, latest.outcomes.total) : null, evidenceCoverageRate: latest ? percentage(latest.evidence.attached, latest.evidence.total) : null, ...(latest?.escapedIncomplete === undefined ? {} : { escapedIncomplete: latest.escapedIncomplete }), ...(latest?.humanReviewMinutes === undefined ? {} : { humanReviewMinutes: latest.humanReviewMinutes }), humanApproved: latest?.humanApproved ?? false }, confidence: confidence(comparable, completedRuns, policy), ...(comparable && baselineMedianDurationMs !== null && medianDurationMs !== null ? { durationDeltaMs: medianDurationMs - baselineMedianDurationMs } : {}), ...(comparable && baseline?.attempts !== undefined ? { attemptDelta: attempts - baseline.attempts } : {}), ...(comparable && baseline?.reviewMinutes !== undefined && latest?.humanReviewMinutes !== undefined ? { reviewDeltaMinutes: latest.humanReviewMinutes - baseline.reviewMinutes } : {}), ...(baseline?.escapedIncomplete !== undefined && latest?.escapedIncomplete !== undefined ? { escapedIncompleteDelta: latest.escapedIncomplete - baseline.escapedIncomplete } : {}) }\n})\n\nexport const benchmarkRuns = (stateDir: string, manifest?: BenchmarkManifest): BenchmarkReport => {\n const runs = readRuns(stateDir).map(projectRun).sort((left, right) => left.runId.localeCompare(right.runId))\n const policy = manifest?.policy ?? DEFAULT_POLICY\n const reportComparisons = manifest ? comparisons(runs, manifest, policy) : []\n const comparable = reportComparisons.filter((comparison) => comparison.comparable)\n const durationRegressionTaskIds = comparable.filter((comparison) => (comparison.improvement.durationRate ?? 0) < -policy.maxDurationRegressionRate).map((comparison) => comparison.taskId)\n const escapedIncompleteTaskIds = comparable.filter((comparison) => comparison.harness.escapedIncomplete !== 0).map((comparison) => comparison.taskId)\n const reasons = []\n if (comparable.length < policy.minComparableTasks) reasons.push(`requires at least ${policy.minComparableTasks} comparable tasks`)\n const incompleteBaselineTaskIds = reportComparisons.filter((comparison) => comparison.comparability === 'baseline-incomplete').map((comparison) => comparison.taskId)\n if (incompleteBaselineTaskIds.length) reasons.push(`baseline delivery incomplete: ${incompleteBaselineTaskIds.join(', ')}`)\n const baselineSampleGaps = reportComparisons.filter((comparison) => comparison.baselineSampleCount < policy.minBaselineSamplesPerTask).map((comparison) => `${comparison.taskId} (${comparison.baselineSampleCount}/${policy.minBaselineSamplesPerTask})`)\n if (baselineSampleGaps.length) reasons.push(`requires ${policy.minBaselineSamplesPerTask} baseline samples per task: ${baselineSampleGaps.join(', ')}`)\n if (durationRegressionTaskIds.length) reasons.push(`duration regression exceeds ${policy.maxDurationRegressionRate * 100}%: ${durationRegressionTaskIds.join(', ')}`)\n if (policy.requireZeroEscapedIncomplete && escapedIncompleteTaskIds.length) reasons.push(`escaped incomplete delivery: ${escapedIncompleteTaskIds.join(', ')}`)\n const confidenceLevel: BenchmarkConfidence = comparable.length < policy.minComparableTasks ? 'insufficient' : comparable.every((comparison) => comparison.confidence === 'reliable') ? 'reliable' : 'directional'\n const qualityGate: BenchmarkQualityGate = { status: comparable.length < policy.minComparableTasks ? 'insufficient-data' : reasons.length ? 'failed' : 'passed', confidence: confidenceLevel, comparableTaskCount: comparable.length, policy, durationRegressionTaskIds, escapedIncompleteTaskIds, reasons }\n return { type: 'agentskit-harness-benchmark', schemaVersion: BENCHMARK_SCHEMA_VERSION, stateDir, generatedAt: new Date().toISOString(), runs, summary: summarize(runs), comparisons: reportComparisons, qualityGate, ...(manifest ? { manifest: { suiteId: manifest.suiteId, taskCount: manifest.tasks.length, baselineCount: manifest.observations.length, comparableTaskCount: comparable.length } } : {}) }\n}\n","import { createPrivateKey, createPublicKey, sign, verify } from 'node:crypto'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport { fileContents, loadLatestRun, pathInside, readJson } from './files.js'\nimport { sha256 } from './hash.js'\nimport { reconcileRun } from './verification.js'\nimport { FileEventStore } from './events.js'\nimport type { EventLogVerification } from './events.js'\nimport { loadConfig } from './config.js'\nimport type { VerificationRun } from './types.js'\n\nexport const EVIDENCE_BUNDLE_SCHEMA_VERSION = 1 as const\n\nexport interface EvidenceBundleFile {\n readonly path: string\n readonly sha256: string\n readonly contentBase64: string\n}\n\nexport interface EvidenceBundleSignature {\n readonly algorithm: 'ed25519'\n readonly keyId: string\n readonly publicKeyPem: string\n readonly signatureBase64: string\n}\n\nexport interface TrustedEvidenceKey {\n readonly keyId: string\n readonly publicKeyPem: string\n readonly status: 'active' | 'revoked'\n}\n\nexport interface EvidenceBundle {\n readonly type: 'agentskit-harness-evidence-bundle'\n readonly schemaVersion: typeof EVIDENCE_BUNDLE_SCHEMA_VERSION\n readonly runId: string\n readonly signerKeyId: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly verificationDigest: string\n readonly eventLog: EventLogVerification\n readonly files: readonly EvidenceBundleFile[]\n readonly payloadHash: string\n readonly signature: EvidenceBundleSignature\n}\n\nexport interface EvidenceBundleVerification {\n readonly status: 'verified'\n readonly runId: string\n readonly payloadHash: string\n readonly fileCount: number\n readonly signed: true\n}\n\nconst body = (bundle: EvidenceBundle): Omit<EvidenceBundle, 'payloadHash' | 'signature'> => {\n const { payloadHash: _payloadHash, signature: _signature, ...unsigned } = bundle\n return unsigned\n}\nconst parseBundle = (path: string): EvidenceBundle => {\n try { return JSON.parse(fileContents(path)) as EvidenceBundle } catch (error) { return fail(`Invalid evidence bundle JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT') }\n}\nconst validDigest = (value: unknown): value is string => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value)\nconst validKeyId = (value: unknown): value is string => typeof value === 'string' && /^[A-Za-z0-9._:-]{1,128}$/.test(value)\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst bundleFile = (stateDir: string, path: string): EvidenceBundleFile => {\n const absolute = resolve(stateDir, path)\n if (!pathInside(stateDir, absolute)) fail(`Evidence path escapes state directory: ${path}`, 'HARNESS_ERROR')\n const content = readFileSync(absolute)\n return { path: relative(stateDir, absolute).split(sep).join('/'), sha256: sha256(content), contentBase64: content.toString('base64') }\n}\n\nexport const exportEvidenceBundle = async ({ configPath, runId, outputPath, privateKeyPath, keyId }: { readonly configPath: string; readonly runId?: string; readonly outputPath: string; readonly privateKeyPath: string; readonly keyId: string }): Promise<EvidenceBundle> => {\n if (!validKeyId(keyId)) fail('keyId must contain only letters, numbers, dot, underscore, colon, or hyphen.', 'INVALID_INPUT')\n const loaded = loadConfig(configPath)\n const run = requireRun((runId ? readJson(join(loaded.stateDir, 'runs', runId, 'run.json')) : loadLatestRun(loaded.stateDir)) as VerificationRun | null)\n const reconciliation = await reconcileRun({ configPath, runId: run.runId })\n const digest = run.verificationDigest ?? fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n if (reconciliation.state !== 'COMPLETE') fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n const eventLog = new FileEventStore(loaded.stateDir)\n eventLog.read(run.runId)\n const eventVerification = eventLog.verify(run.runId)\n const paths = new Set(['runs/' + run.runId + '/run.json', 'runs/' + run.runId + '/events.ndjson'])\n for (const reference of run.evidenceReferences) { paths.add(reference.stdout); paths.add(reference.stderr) }\n const files = [...paths].map((path) => {\n if (!existsSync(resolve(loaded.stateDir, path))) fail(`Evidence file is missing: ${path}`, 'HARNESS_ERROR')\n return bundleFile(loaded.stateDir, path)\n })\n const privateKey = createPrivateKey(readFileSync(privateKeyPath))\n const unsigned = { type: 'agentskit-harness-evidence-bundle' as const, schemaVersion: EVIDENCE_BUNDLE_SCHEMA_VERSION, runId: run.runId, signerKeyId: keyId, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, verificationDigest: digest, eventLog: eventVerification, files }\n const payloadHash = sha256(JSON.stringify(unsigned))\n const publicKeyPem = createPublicKey(privateKey).export({ type: 'spki', format: 'pem' }).toString()\n const bundle = { ...unsigned, payloadHash, signature: { algorithm: 'ed25519' as const, keyId, publicKeyPem, signatureBase64: sign(null, Buffer.from(payloadHash), privateKey).toString('base64') } }\n writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\\n`, 'utf8')\n return bundle\n}\n\nexport const verifyEvidenceBundle = (path: string, { trustedKeys = [] }: { readonly trustedKeys?: readonly TrustedEvidenceKey[] } = {}): EvidenceBundleVerification => {\n const bundle = parseBundle(path)\n if (bundle.type !== 'agentskit-harness-evidence-bundle' || bundle.schemaVersion !== EVIDENCE_BUNDLE_SCHEMA_VERSION || !bundle.runId || !validKeyId(bundle.signerKeyId) || !validDigest(bundle.payloadHash) || bundle.signature?.algorithm !== 'ed25519' || bundle.signature.keyId !== bundle.signerKeyId || typeof bundle.signature.publicKeyPem !== 'string' || typeof bundle.signature.signatureBase64 !== 'string' || !Array.isArray(bundle.files)) fail('Evidence bundle metadata is invalid.', 'HARNESS_ERROR')\n if (trustedKeys.length) {\n const trusted = trustedKeys.find((key) => key.keyId === bundle.signerKeyId)\n if (!trusted) return fail(`Evidence bundle key is not trusted: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.status === 'revoked') fail(`Evidence bundle key is revoked: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.publicKeyPem !== bundle.signature.publicKeyPem) fail(`Evidence bundle key does not match trust store: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n }\n const paths = new Set<string>()\n for (const file of bundle.files) {\n if (!file || typeof file.path !== 'string' || paths.has(file.path) || !validDigest(file.sha256) || typeof file.contentBase64 !== 'string') fail('Evidence bundle file metadata is invalid.', 'HARNESS_ERROR')\n paths.add(file.path)\n const content = Buffer.from(file.contentBase64, 'base64')\n if (sha256(content) !== file.sha256) fail(`Evidence bundle file hash mismatch: ${file.path}`, 'HARNESS_ERROR')\n }\n if (!paths.has(`runs/${bundle.runId}/run.json`) || !paths.has(`runs/${bundle.runId}/events.ndjson`)) fail('Evidence bundle is missing the run projection or event log.', 'HARNESS_ERROR')\n if (sha256(JSON.stringify(body(bundle))) !== bundle.payloadHash) fail('Evidence bundle payload hash mismatch.', 'HARNESS_ERROR')\n let valid = false\n try { valid = verify(null, Buffer.from(bundle.payloadHash), createPublicKey(bundle.signature.publicKeyPem), Buffer.from(bundle.signature.signatureBase64, 'base64')) } catch { valid = false }\n if (!valid) fail('Evidence bundle signature is invalid.', 'HARNESS_ERROR')\n return { status: 'verified', runId: bundle.runId, payloadHash: bundle.payloadHash, fileCount: bundle.files.length, signed: true }\n}\n\nexport const readEvidenceTrustStore = (path: string): readonly TrustedEvidenceKey[] => {\n const value = readJson(path) as { readonly schemaVersion?: unknown; readonly keys?: unknown }\n if (value.schemaVersion !== 1 || !Array.isArray(value.keys)) fail('Evidence trust store must contain schemaVersion 1 and a keys array.', 'INVALID_INPUT')\n return (value.keys as readonly unknown[]).map((key: unknown, index: number) => {\n if (typeof key !== 'object' || key === null || Array.isArray(key) || !validKeyId((key as Record<string, unknown>)['keyId']) || typeof (key as Record<string, unknown>)['publicKeyPem'] !== 'string' || ((key as Record<string, unknown>)['status'] !== 'active' && (key as Record<string, unknown>)['status'] !== 'revoked')) fail(`Invalid evidence trust store key at index ${index}.`, 'INVALID_INPUT')\n return key as TrustedEvidenceKey\n })\n}\n","#!/usr/bin/env node\nimport { createHash } from 'node:crypto'\nimport { readFileSync } from 'node:fs'\nimport { Command } from 'commander'\nimport { approveRun, authorizeRun, benchmarkRuns, cancelRun, cleanTaskArtifacts, createDocBridgeContextProvider, exportEvidenceBundle, loadBenchmarkManifest, loadConfig, loadLatestRun, planRun, readContextSnapshots, readEvidenceTrustStore, reconcileRun, recordBenchmarkObservation, retryRun, startRun, verifyEvidenceBundle, verifyRun } from './index.js'\nimport type { BenchmarkObservationEvidence } from './metrics.js'\nimport { fail } from './errors.js'\nimport { FileEventStore, inspectEventLogLock, recoverEventLogLock } from './events.js'\n\ninterface CliOptions { readonly config: string; readonly json: boolean }\nconst packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as { readonly version: string }\nconst program = new Command()\nprogram.name('ak-harness').description('Portable, evidence-backed development harness for coding agents.').version(packageJson.version).option('-c, --config <path>', 'verification contract path', '.codex/verification.json').option('--json', 'emit machine-readable output')\nconst options = (): CliOptions => program.opts<CliOptions>()\nconst print = (value: unknown): void => { if (options().json) console.log(JSON.stringify(value)); else console.log(typeof value === 'string' ? value : JSON.stringify(value, null, 2)) }\nconst readBenchmarkEvidence = (path: string): { readonly evidence: readonly BenchmarkObservationEvidence[]; readonly digest: string } => {\n try {\n const content = readFileSync(path, 'utf8')\n const raw = JSON.parse(content) as unknown\n const evidence = Array.isArray(raw) ? raw : typeof raw === 'object' && raw !== null ? (raw as { readonly evidence?: unknown }).evidence : undefined\n if (Array.isArray(evidence)) return { evidence: evidence as BenchmarkObservationEvidence[], digest: createHash('sha256').update(content).digest('hex') }\n } catch (error) {\n fail(`Invalid benchmark evidence JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT')\n }\n return fail('benchmark evidence file must contain an array or an object with an evidence array.', 'INVALID_INPUT')\n}\nconst decisionArgs = (first: string, second: string | undefined): { readonly decision: string; readonly runId?: string } => {\n const decisions = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n return decisions.has(first) ? { decision: first, ...(second ? { runId: second } : {}) } : { decision: second ?? '', runId: first }\n}\nprogram.command('doctor').description('Validate the contract without starting a run.').action(() => print({ status: 'passed', criteria: ['package'], config: loadConfig(options().config).config }))\nprogram.command('plan <decision>').description('Prepare or approve the frozen task contract and create a planned run.').option('--by <actor>', 'planner: human approval or ci preparation', 'human').option('--allow-dirty', 'allow a human-authorized dirty worktree').option('--context-file <path>', 'attach a context snapshot JSON file').action(async (decision: string, command: { readonly by: string; readonly allowDirty?: boolean; readonly contextFile?: string }) => print(await planRun({ configPath: options().config, decision, actor: command.by, allowDirty: command.allowDirty ?? false, contextSnapshots: command.contextFile ? readContextSnapshots(command.contextFile) : [] })))\nconst context = program.command('context').description('Resolve portable, provenance-bearing context snapshots.')\ncontext.command('resolve <query>').description('Resolve a Doc Bridge snapshot from the local index.').option('--provider <provider>', 'context provider', 'doc-bridge').option('--scope <scope...>', 'optional search scopes').option('--index <path>', 'Doc Bridge index path', '.doc-bridge/index.json').action(async (query: string, command: { readonly provider: string; readonly scope?: readonly string[]; readonly index: string }) => {\n if (command.provider !== 'doc-bridge') fail(`Unsupported context provider: ${command.provider}`, 'INVALID_INPUT')\n const loaded = loadConfig(options().config)\n print(await createDocBridgeContextProvider({ root: loaded.root, indexPath: command.index }).resolve({ query, ...(command.scope?.length ? { scope: command.scope } : {}) }))\n})\nprogram.command('start').description('Move a planned run into implementation.').action(() => print(startRun(loadConfig(options().config))))\nprogram.command('verify').description('Execute every configured check and record evidence.').action(async () => print(await verifyRun({ configPath: options().config })))\nprogram.command('run').description('Alias for verify, compatible with the common protocol.').action(async () => print(await verifyRun({ configPath: options().config })))\nprogram.command('approve <run-id-or-decision> [decision-or-run-id]').description('Record human approval or rejection. Accepts <run-id> <decision> or <decision> <run-id>.').option('--by <actor>', 'approval actor', 'human').action(async (first: string, second: string | undefined, command: { readonly by: string }) => { const args = decisionArgs(first, second); print(await approveRun({ configPath: options().config, ...args, actor: command.by })) })\nprogram.command('authorize <run-id-or-decision> [decision-or-run-id]').description('Authorize or reject declared external tracking. Accepts <run-id> <decision> or <decision> <run-id>.').option('--by <actor>', 'approval actor', 'human').action(async (first: string, second: string | undefined, command: { readonly by: string }) => { const args = decisionArgs(first, second); print(await authorizeRun({ configPath: options().config, ...args, actor: command.by })) })\nprogram.command('retry').description('Create a new implementation attempt after a blocked or stale run.').action(async () => print(await retryRun({ configPath: options().config })))\nprogram.command('cancel [run-id]').description('Cancel an active run.').option('--by <actor>', 'cancellation actor', 'human').option('--reason <reason>', 'cancellation reason', 'Run cancelled by a human.').action(async (runId: string | undefined, command: { readonly by: string; readonly reason: string }) => print(await cancelRun({ configPath: options().config, runId, reason: command.reason, actor: command.by })))\nprogram.command('status').description('Show the latest run after reconciling its audit evidence.').action(async () => { const loaded = loadConfig(options().config); print(loadLatestRun(loaded.stateDir) ? await reconcileRun({ configPath: options().config }) : { state: 'CLARIFYING', message: 'No run exists.' }) })\nprogram.command('audit [run-id]').description('Reconcile a run projection with its verified lifecycle decisions.').action(async (runId?: string) => print(await reconcileRun({ configPath: options().config, runId })))\nconst events = program.command('events').description('Inspect the lifecycle audit log.')\nevents.command('verify [run-id]').description('Verify the latest or selected event log hash chain.').action((runId?: string) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(new FileEventStore(loaded.stateDir).verify(selectedRunId)) })\nevents.command('lock [run-id]').description('Inspect the latest or selected event-log lock.').action((runId?: string) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(inspectEventLogLock(loaded.stateDir, selectedRunId)) })\nevents.command('unlock [run-id]').description('Recover an old event-log lock after confirming its owner is dead.').option('--by <actor>', 'recovery actor', 'human').option('--max-age-ms <milliseconds>', 'minimum lock age', (value) => Number(value), 300_000).action((runId: string | undefined, command: { readonly by: string; readonly maxAgeMs: number }) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(recoverEventLogLock({ stateDir: loaded.stateDir, runId: selectedRunId, actor: command.by, maxAgeMs: command.maxAgeMs })) })\nevents.command('export [run-id]').description('Export a reconciled COMPLETE run as a signed evidence bundle.').requiredOption('--output <path>', 'bundle output path').requiredOption('--private-key <path>', 'Ed25519 private key path').requiredOption('--key-id <id>', 'stable signing key identity').action(async (runId: string | undefined, command: { readonly output: string; readonly privateKey: string; readonly keyId: string }) => print(await exportEvidenceBundle({ configPath: options().config, runId, outputPath: command.output, privateKeyPath: command.privateKey, keyId: command.keyId })))\nevents.command('verify-bundle <path>').description('Verify an exported signed evidence bundle independently.').option('--trusted-key-store <path>', 'JSON trust store with active or revoked public keys').action((path: string, command: { readonly trustedKeyStore?: string }) => print(verifyEvidenceBundle(path, { trustedKeys: command.trustedKeyStore ? readEvidenceTrustStore(command.trustedKeyStore) : [] })))\nconst benchmark = program.command('benchmark').description('Aggregate reproducible metrics from historical runs.').option('--manifest <path>', 'benchmark manifest for baseline comparison').action((command: { readonly manifest?: string }) => { const loaded = loadConfig(options().config); print(benchmarkRuns(loaded.stateDir, command.manifest ? loadBenchmarkManifest(command.manifest) : undefined)) })\nbenchmark.command('baseline <taskId>').description('Record one controlled baseline observation in a benchmark manifest.').option('--manifest <path>', 'benchmark manifest path').requiredOption('--status <status>', 'passed, failed, blocked, or not-run').requiredOption('--source <source>', 'baseline source or run reference').option('--evidence-file <path>', 'JSON file with criterion-level baseline evidence').option('--recorded-at <timestamp>', 'ISO-8601 timestamp').option('--attempts <count>', 'attempt count', (value) => Number(value)).option('--duration-ms <milliseconds>', 'duration in milliseconds', (value) => Number(value)).option('--review-minutes <minutes>', 'human review time in minutes', (value) => Number(value)).option('--escaped-incomplete <count>', 'incomplete deliveries discovered after handoff', (value) => Number(value)).action((taskId: string, command: { readonly manifest?: string; readonly status: string; readonly source: string; readonly evidenceFile?: string; readonly recordedAt?: string; readonly attempts?: number; readonly durationMs?: number; readonly reviewMinutes?: number; readonly escapedIncomplete?: number }, cliCommand: Command) => {\n const manifest = command.manifest ?? cliCommand.parent?.opts<{ readonly manifest?: string }>().manifest\n const manifestPath = manifest ?? fail('baseline requires --manifest <path>.', 'INVALID_INPUT')\n const status = ['passed', 'failed', 'blocked', 'not-run'].includes(command.status) ? command.status as 'passed' | 'failed' | 'blocked' | 'not-run' : fail('status must be passed, failed, blocked, or not-run.', 'INVALID_INPUT')\n const evidence = command.evidenceFile ? readBenchmarkEvidence(command.evidenceFile) : undefined\n print(recordBenchmarkObservation(manifestPath, { taskId, status, source: command.source, ...(evidence ? { evidence: evidence.evidence, evidenceDigest: evidence.digest } : {}), ...(command.recordedAt ? { recordedAt: command.recordedAt } : {}), ...(command.attempts === undefined ? {} : { attempts: command.attempts }), ...(command.durationMs === undefined ? {} : { durationMs: command.durationMs }), ...(command.reviewMinutes === undefined ? {} : { reviewMinutes: command.reviewMinutes }), ...(command.escapedIncomplete === undefined ? {} : { escapedIncomplete: command.escapedIncomplete }) }))\n})\nprogram.command('clean').description('Remove only configured task-owned temporary artifacts.').action(() => print(cleanTaskArtifacts(options().config)))\nprocess.on('SIGINT', () => { process.stderr.write('Cancelled.\\n'); process.exitCode = 130 })\ntry { await program.parseAsync(process.argv) } catch (error) { const value = error instanceof Error ? error : new Error(String(error)); process.stderr.write(`${'code' in value ? String(value.code) : 'HARNESS_ERROR'}: ${value.message}\\n`); process.exitCode = 'code' in value && value.code === 'INVALID_INPUT' ? 2 : 1 }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/profiles.ts","../src/hash.ts","../src/files.ts","../src/types.ts","../src/config.ts","../src/state-machine.ts","../src/events.ts","../src/plugins.ts","../src/context.ts","../src/runs.ts","../src/evidence.ts","../src/source.ts","../src/machine.ts","../src/verification.ts","../src/adapters/doc-bridge.ts","../src/discovery.ts","../src/wip.ts","../src/experiment.ts","../src/delivery.ts","../src/pilot.ts","../src/cycle.ts","../src/metrics.ts","../src/coordination.ts","../src/preflight.ts","../src/block.ts","../src/learning.ts","../src/status.ts","../src/bundle.ts","../src/cli.ts"],"names":["index","resolve","isRecord","record","id","category","benchmark","dirname","join","existsSync","readFileSync","body","context","value","events","mkdirSync","sourceHash","saveRun","transition","relative","status","cpus","cpuInfo","options","now","binding","writeFileSync","required","digest","createHash","readdirSync","sha256","reviewMinutes","item","observation","rmSync","comparable","appendFileSync","openSync","closeSync","unlinkSync","unique","text","block","requireRun","sep"],"mappings":"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","file":"cli.js","sourcesContent":["import type { RunState } from './types.js'\n\nexport const STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const satisfies readonly RunState[]\n\nexport const LEGAL_TRANSITIONS = {\n CLARIFYING: ['PLANNED', 'BLOCKED', 'CANCELLED'],\n PLANNED: ['IMPLEMENTING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n IMPLEMENTING: ['VERIFYING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n VERIFYING: ['AWAITING_HUMAN_APPROVAL', 'COMPLETE', 'BLOCKED', 'STALE', 'CANCELLED'],\n AWAITING_HUMAN_APPROVAL: ['AWAITING_AUTHORIZATION', 'COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n AWAITING_AUTHORIZATION: ['COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n COMPLETE: ['STALE', 'SUPERSEDED'],\n BLOCKED: ['SUPERSEDED'],\n STALE: ['SUPERSEDED', 'PLANNED'],\n CANCELLED: ['SUPERSEDED'],\n SUPERSEDED: [],\n} as const satisfies Readonly<Record<RunState, readonly RunState[]>>\n\nexport const REAL_CATEGORIES: ReadonlySet<string> = new Set(['endpoint', 'database', 'cli', 'mcp', 'ui'])\nexport const DECISIONS: ReadonlySet<string> = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n","export type HarnessErrorCode = 'HARNESS_ERROR' | 'INVALID_CONFIG' | 'INVALID_INPUT' | 'INVALID_STATE' | 'POLICY_BLOCKED' | 'CLARIFYING' | 'STALE' | 'WORKTREE_DIRTY' | 'ACTIVE_RUN' | 'NO_RUN' | 'HUMAN_APPROVAL_REQUIRED' | 'GIT_REQUIRED'\n\nexport class HarnessError extends Error {\n public readonly code: HarnessErrorCode\n\n public constructor(message: string, code: HarnessErrorCode = 'HARNESS_ERROR') {\n super(message)\n this.name = 'HarnessError'\n this.code = code\n }\n}\n\nexport const fail = (message: string, code: HarnessErrorCode = 'HARNESS_ERROR'): never => {\n throw new HarnessError(message, code)\n}\n","import { fail } from './errors.js'\n\ntype RawRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst record = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst id = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return value as string\n}\nconst parents = (value: unknown, label: string): string[] => value === undefined ? [] : Array.isArray(value) ? value.map((item, index) => id(item, `${label}[${index}]`)) : [id(value, label)]\n\nconst merge = (base: RawRecord, overlay: RawRecord): RawRecord => {\n const result: RawRecord = { ...base }\n for (const key of ['surfaces', 'budget', 'cleanup', 'runtime', 'verification'] as const) {\n if (overlay[key] !== undefined) result[key] = { ...(isRecord(result[key]) ? result[key] : {}), ...record(overlay[key], `profile.${key}`) }\n }\n if (overlay['autonomy'] !== undefined) result['autonomy'] = overlay['autonomy']\n if (Array.isArray(overlay['checks'])) result['checks'] = overlay['checks']\n if (overlay['checkOverrides'] !== undefined) {\n if (!Array.isArray(overlay['checkOverrides'])) fail('profile.checkOverrides must be an array.', 'INVALID_CONFIG')\n const checks = Array.isArray(result['checks']) ? [...result['checks']] : []\n for (const [index, value] of (overlay['checkOverrides'] as unknown[]).entries()) {\n const override = record(value, `profile.checkOverrides[${index}]`)\n const checkId = id(override['id'], `profile.checkOverrides[${index}].id`)\n const checkIndex = checks.findIndex((check) => isRecord(check) && check['id'] === checkId)\n if (checkIndex < 0) fail(`profile.checkOverrides references unknown check: ${checkId}.`, 'INVALID_CONFIG')\n checks[checkIndex] = { ...(checks[checkIndex] as RawRecord), ...override }\n }\n result['checks'] = checks\n }\n return result\n}\n\nexport const resolveProfile = (root: RawRecord): RawRecord => {\n if (root['profiles'] === undefined) return root\n const profileMap = record(root['profiles'], 'profiles')\n const selected = id(root['profile'], 'profile')\n const visiting = new Set<string>()\n const visited = new Map<string, RawRecord>()\n const resolve = (name: string): RawRecord => {\n const cached = visited.get(name)\n if (cached) return cached\n if (visiting.has(name)) fail(`Profile inheritance cycle includes ${name}.`, 'INVALID_CONFIG')\n const definition = record(profileMap[name], `profiles.${name}`)\n visiting.add(name)\n let result: RawRecord = { ...root }\n for (const parent of parents(definition['extends'], `profiles.${name}.extends`)) result = merge(result, resolve(parent))\n result = merge(result, definition)\n visiting.delete(name); visited.set(name, result)\n return result\n }\n return resolve(selected)\n}\n","import { createHash } from 'node:crypto'\n\nexport const sha256 = (value: string | NodeJS.ArrayBufferView): string => createHash('sha256').update(value).digest('hex')\nexport const hashJson = (value: unknown): string => sha256(JSON.stringify(value))\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport type { LoadedConfig, VerificationRun } from './types.js'\n\nexport const readJson = (path: string): unknown => JSON.parse(readFileSync(path, 'utf8')) as unknown\nexport const writeJson = (path: string, value: unknown): void => {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nexport const pathInside = (root: string, candidate: string): boolean => {\n const rel = relative(resolve(root), resolve(candidate))\n return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !rel.startsWith(sep))\n}\n\nexport const latestPath = (stateDir: string): string => join(stateDir, 'latest.json')\nexport const runPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'run.json')\nexport const saveRun = (stateDir: string, run: VerificationRun): void => writeJson(runPath(stateDir, run.runId), run)\nexport const readRun = (stateDir: string, runId: string): VerificationRun => readJson(runPath(stateDir, runId)) as VerificationRun\n\nexport const loadLatestRun = (stateDir: string): VerificationRun | null => {\n if (!existsSync(latestPath(stateDir))) return null\n const pointer = readJson(latestPath(stateDir)) as { readonly runId: string }\n return readRun(stateDir, pointer.runId)\n}\n\nexport const setLatest = (stateDir: string, run: VerificationRun): void => writeJson(latestPath(stateDir), {\n runId: run.runId,\n path: relative(resolve(stateDir, '..', '..'), runPath(stateDir, run.runId)),\n updatedAt: new Date().toISOString(),\n})\n\nexport const cleanConfiguredArtifacts = (loaded: LoadedConfig): { readonly cleaned: readonly string[] } => {\n const roots = loaded.config.cleanup?.roots ?? []\n for (const root of roots) {\n const target = resolve(loaded.root, root)\n if (!pathInside(loaded.root, target)) fail(`Cleanup root escapes project root: ${root}`, 'INVALID_CONFIG')\n if (existsSync(target)) for (const entry of readdirSync(target)) rmSync(join(target, entry), { recursive: true, force: true })\n }\n return { cleaned: roots }\n}\n\nexport const fileContents = (path: string): string => readFileSync(path, 'utf8')\n","import type { ContextSnapshot } from './context.js'\n\nexport const SURFACE_NAMES = ['logic', 'endpoint', 'database', 'cli', 'mcp', 'ui', 'docs'] as const\nexport type SurfaceName = typeof SURFACE_NAMES[number]\n\nexport const CHECK_CATEGORIES = ['build', 'test', 'lint', ...SURFACE_NAMES, 'custom'] as const\nexport type CheckCategory = typeof CHECK_CATEGORIES[number]\n\nexport const RUN_STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const\nexport type RunState = typeof RUN_STATES[number]\n\nexport interface SurfaceRequirement {\n readonly required: boolean\n readonly reason?: string\n}\n\nexport interface ContractScope {\n readonly inScope: readonly string[]\n readonly outOfScope: readonly string[]\n}\n\nexport interface ContractOutcome {\n readonly id: string\n readonly statement: string\n readonly checks: readonly string[]\n}\n\nexport interface TaskContract {\n readonly intent: string\n readonly scope: ContractScope\n readonly ambiguities: readonly string[]\n readonly outcomes: readonly ContractOutcome[]\n}\n\nexport interface VerificationCheck {\n readonly id: string\n readonly category: CheckCategory\n readonly command: string\n readonly required: boolean\n readonly reason?: string\n readonly timeoutMs: number\n readonly dependsOn?: readonly string[]\n readonly execution?: 'real'\n readonly capabilities?: readonly string[]\n readonly evidence: 'structured'\n}\n\nexport interface TrackingConfig {\n readonly required: boolean\n readonly target?: string\n readonly reason?: string\n}\n\nexport interface BenchmarkBinding {\n readonly suiteId: string\n readonly taskId: string\n readonly mode: 'harness'\n}\n\nexport interface RuntimeConfig {\n readonly kind: 'process' | 'docker'\n}\n\nexport type AutonomyMode = 'controlled' | 'yolo'\n\nexport interface VerificationConfig {\n readonly schemaVersion: 1\n readonly project: string\n readonly root?: string\n readonly stateDir?: string\n readonly profile: string\n readonly autonomy: AutonomyMode\n readonly runtime: RuntimeConfig\n readonly contract: TaskContract\n readonly surfaces: Readonly<Record<SurfaceName, SurfaceRequirement>>\n readonly checks: readonly VerificationCheck[]\n readonly tracking: TrackingConfig\n readonly verification?: { readonly maxConcurrency?: number }\n readonly budget?: { readonly maxDurationMs?: number }\n readonly cleanup?: { readonly roots?: readonly string[] }\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface LoadedConfig {\n readonly absolute: string\n readonly root: string\n readonly stateDir: string\n readonly config: VerificationConfig\n readonly configHash: string\n}\n\nexport interface SourceSnapshot {\n readonly revision: string\n readonly status: string\n readonly statusHash: string\n}\n\nexport interface EvidenceArtifact {\n readonly type?: string\n readonly path: string\n readonly sha256: string\n readonly viewport?: { readonly width: number; readonly height: number } | string\n}\n\nexport interface StructuredEvidence {\n readonly status: string\n readonly criteria: readonly string[]\n readonly capability?: string\n readonly artifacts?: readonly EvidenceArtifact[]\n readonly [key: string]: unknown\n}\n\nexport interface CheckResult {\n readonly id: string\n readonly category: CheckCategory\n readonly status: 'pending' | 'passed' | 'failed' | 'not-applicable'\n readonly exitCode?: number\n readonly durationMs?: number\n readonly evidence?: StructuredEvidence\n readonly failures?: readonly string[]\n}\n\nexport interface RunOutcome extends ContractOutcome {\n readonly status: 'pending' | 'passed' | 'failed' | 'not-applicable'\n}\n\nexport interface EvidenceReference {\n readonly checkId: string\n readonly stdout: string\n readonly stderr: string\n}\n\nexport interface VerificationRun {\n readonly type: 'agentskit-harness-run'\n readonly schemaVersion: 1\n readonly runId: string\n readonly project: string\n readonly state: RunState\n readonly configHash: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly sourceStatusHash: string\n readonly baseline: SourceSnapshot\n readonly contractApproval: { readonly actor: 'human'; readonly at: string; readonly contractHash: string }\n readonly checks: readonly CheckResult[]\n readonly outcomes: readonly RunOutcome[]\n readonly transitions: readonly StateTransition[]\n readonly evidenceReferences: readonly EvidenceReference[]\n readonly contextSnapshots: readonly ContextSnapshot[]\n readonly contextHash?: string\n readonly verificationDigest?: string\n readonly benchmark?: BenchmarkBinding\n readonly supersedes?: string\n readonly dirtyBaselineAuthorized?: boolean\n readonly autonomy: AutonomyMode\n readonly metrics?: { readonly totalDurationMs: number; readonly wallDurationMs?: number; readonly peakConcurrency?: number; readonly budgetExceeded: boolean; readonly machine?: MachineMetrics }\n readonly humanApproval?: { readonly actor: 'human'; readonly at: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n readonly authorization?: { readonly actor: 'human'; readonly at: string; readonly target: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n}\n\nexport interface MachineSample {\n readonly at: string\n readonly cpus: number\n readonly load1: number\n readonly load1PerCpuPercent: number\n readonly memoryUsedPercent: number\n readonly rssBytes: number\n readonly swapUsedPercent?: number\n readonly memoryPressure?: 'normal' | 'warning' | 'critical'\n readonly interferingProcesses?: readonly string[]\n}\n\nexport interface MachineMetrics {\n readonly sampleIntervalMs: number\n readonly samples: readonly MachineSample[]\n readonly peakLoad1PerCpuPercent: number\n readonly peakMemoryUsedPercent: number\n readonly peakRssBytes: number\n readonly pressureEvents: number\n readonly throttleEvents: number\n readonly minimumEffectiveConcurrency: number\n}\n\nexport interface RunReconciliation {\n readonly status: 'verified'\n readonly runId: string\n readonly state: RunState\n readonly eventCount: number\n readonly headHash?: string\n readonly verificationDigest?: string\n}\n\nexport interface StateTransition {\n readonly from: RunState | null\n readonly to: RunState\n readonly at: string\n readonly actor?: string\n readonly reason?: string\n}\n","import { dirname, resolve } from 'node:path'\nimport { REAL_CATEGORIES } from './constants.js'\nimport { resolveProfile } from './profiles.js'\nimport { fail } from './errors.js'\nimport { hashJson } from './hash.js'\nimport { readJson } from './files.js'\nimport type { CheckCategory, ContractOutcome, LoadedConfig, RuntimeConfig, SurfaceName, SurfaceRequirement, TaskContract, TrackingConfig, VerificationCheck, VerificationConfig } from './types.js'\nimport { CHECK_CATEGORIES, SURFACE_NAMES } from './types.js'\n\ninterface RawRecord { readonly [key: string]: unknown }\ninterface RawScope extends RawRecord { readonly inScope?: unknown; readonly outOfScope?: unknown }\ninterface RawContract extends RawRecord { readonly intent?: unknown; readonly scope?: unknown; readonly ambiguities?: unknown; readonly outcomes?: unknown }\ninterface RawCheck extends RawRecord { readonly id?: unknown; readonly category?: unknown; readonly command?: unknown; readonly required?: unknown; readonly reason?: unknown; readonly timeoutMs?: unknown; readonly execution?: unknown; readonly capabilities?: unknown; readonly evidence?: unknown; readonly dependsOn?: unknown }\ninterface RawTracking extends RawRecord { readonly required?: unknown; readonly target?: unknown; readonly reason?: unknown }\ninterface RawConfig extends RawRecord { readonly schemaVersion?: unknown; readonly project?: unknown; readonly root?: unknown; readonly stateDir?: unknown; readonly profile?: unknown; readonly profiles?: unknown; readonly runtime?: unknown; readonly autonomy?: unknown; readonly contract?: unknown; readonly checks?: unknown; readonly surfaces?: unknown; readonly tracking?: unknown; readonly verification?: unknown; readonly budget?: unknown; readonly cleanup?: unknown }\ninterface RawBudget extends RawRecord { readonly maxDurationMs?: unknown }\ninterface RawVerification extends RawRecord { readonly maxConcurrency?: unknown }\ninterface RawCleanup extends RawRecord { readonly roots?: unknown }\ninterface RawBenchmark extends RawRecord { readonly suiteId?: unknown; readonly taskId?: unknown; readonly mode?: unknown }\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst stringValue = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} is required.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} is required.`, 'INVALID_CONFIG')\n return result\n}\nconst stringArray = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n const items: unknown[] = value as unknown[]\n if (!items.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => stringValue(item, label))\n}\nconst asRecord = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst surface = (value: unknown, name: SurfaceName): SurfaceRequirement => {\n if (typeof value === 'boolean') return value ? { required: true } : { required: false, reason: `${name} is not applicable.` }\n const record = asRecord(value, `surfaces.${name}`)\n if (typeof record['required'] !== 'boolean') fail(`surfaces.${name}.required must be boolean.`, 'INVALID_CONFIG')\n if (!record['required'] && typeof record['reason'] !== 'string') fail(`surfaces.${name}.reason is required when not applicable.`, 'INVALID_CONFIG')\n return { required: record['required'] as boolean, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}) }\n}\n\nconst parseCheck = (value: unknown, index: number): VerificationCheck => {\n const record = asRecord(value, `checks[${index}]`) as RawCheck\n const id = stringValue(record['id'], `checks[${index}].id`)\n const category = stringValue(record['category'], `checks[${index}].category`)\n if (!(CHECK_CATEGORIES as readonly string[]).includes(category)) fail(`checks[${index}].category is invalid.`, 'INVALID_CONFIG')\n const command = stringValue(record['command'], `checks[${index}].command`)\n if (REAL_CATEGORIES.has(category) && record['execution'] !== 'real') fail(`checks[${index}] must declare execution: real.`, 'INVALID_CONFIG')\n if (record['evidence'] !== 'structured') fail(`checks[${index}] must declare evidence: structured.`, 'INVALID_CONFIG')\n if (record['capabilities'] !== undefined && (!Array.isArray(record['capabilities']) || !record['capabilities'].every((item: unknown) => typeof item === 'string'))) fail(`checks[${index}].capabilities must be strings.`, 'INVALID_CONFIG')\n const capabilities = Array.isArray(record['capabilities']) ? record['capabilities'].filter((item): item is string => typeof item === 'string') : undefined\n if (category === 'ui' && !capabilities?.includes('real-browser')) fail(`checks[${index}] must declare real-browser.`, 'INVALID_CONFIG')\n if (category === 'ui' && !capabilities?.includes('screenshot')) fail(`checks[${index}] must declare screenshot.`, 'INVALID_CONFIG')\n if (record['required'] !== undefined && typeof record['required'] !== 'boolean') fail(`checks[${index}].required must be boolean.`, 'INVALID_CONFIG')\n if (record['required'] === false && typeof record['reason'] !== 'string') fail(`checks[${index}].reason is required when required is false.`, 'INVALID_CONFIG')\n if (record['timeoutMs'] !== undefined && (!Number.isInteger(record['timeoutMs']) || typeof record['timeoutMs'] !== 'number' || record['timeoutMs'] < 1)) fail(`checks[${index}].timeoutMs must be positive.`, 'INVALID_CONFIG')\n const dependsOn = record['dependsOn'] === undefined ? undefined : stringArray(record['dependsOn'], `checks[${index}].dependsOn`)\n return { id, category: category as CheckCategory, command, required: record['required'] !== false, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}), timeoutMs: typeof record['timeoutMs'] === 'number' ? record['timeoutMs'] : 120_000, ...(record['execution'] === 'real' ? { execution: 'real' } : {}), ...(capabilities ? { capabilities } : {}), ...(dependsOn ? { dependsOn: [...new Set(dependsOn)] } : {}), evidence: 'structured' }\n}\n\nconst parseOutcome = (value: unknown, index: number, checks: readonly VerificationCheck[]): ContractOutcome => {\n const record = asRecord(value, `contract.outcomes[${index}]`)\n const id = stringValue(record['id'], `contract.outcomes[${index}].id`)\n const statement = stringValue(record['statement'], `contract.outcomes[${index}].statement`)\n const ids = stringArray(record['checks'], `contract.outcomes[${index}].checks`)\n if (ids.some((checkId) => !checks.some((check) => check.id === checkId))) fail(`contract.outcomes[${index}] references an unknown check.`, 'INVALID_CONFIG')\n return { id, statement, checks: [...new Set(ids)] }\n}\n\nexport const validateConfig = (rawValue: unknown): VerificationConfig => {\n const raw = resolveProfile(asRecord(rawValue, 'verification config')) as RawConfig\n if (raw['schemaVersion'] !== 1) fail('verification config schemaVersion must be 1.', 'INVALID_CONFIG')\n const project = stringValue(raw['project'], 'verification config project')\n const runtimeRaw = asRecord(raw['runtime'] ?? { kind: 'process' }, 'runtime')\n if (runtimeRaw['kind'] !== 'process' && runtimeRaw['kind'] !== 'docker') fail('runtime.kind must be process or docker.', 'INVALID_CONFIG')\n const runtime: RuntimeConfig = { kind: runtimeRaw['kind'] as RuntimeConfig['kind'] }\n if (raw['autonomy'] !== undefined && raw['autonomy'] !== 'controlled' && raw['autonomy'] !== 'yolo') fail('autonomy must be controlled or yolo.', 'INVALID_CONFIG')\n const autonomy = (raw['autonomy'] ?? 'controlled') as import('./types.js').AutonomyMode\n const contractRaw = asRecord(raw['contract'], 'contract') as RawContract\n const rawChecks = raw['checks']\n const checks = Array.isArray(rawChecks) ? rawChecks.map(parseCheck) : fail('checks must be a non-empty array.', 'INVALID_CONFIG')\n if (!checks.length || new Set(checks.map((check) => check.id)).size !== checks.length) fail('check ids must be unique.', 'INVALID_CONFIG')\n const checkIds = new Set(checks.map((check) => check.id))\n for (const check of checks) for (const dependency of check.dependsOn ?? []) if (!checkIds.has(dependency) || dependency === check.id) fail(`check ${check.id} has an invalid dependency: ${dependency}.`, 'INVALID_CONFIG')\n const visiting = new Set<string>(); const visited = new Set<string>()\n const visit = (id: string): void => { if (visiting.has(id)) fail(`check dependency cycle includes ${id}.`, 'INVALID_CONFIG'); if (visited.has(id)) return; visiting.add(id); for (const dependency of checks.find((check) => check.id === id)?.dependsOn ?? []) visit(dependency); visiting.delete(id); visited.add(id) }\n for (const check of checks) visit(check.id)\n const scopeRaw = asRecord(contractRaw['scope'], 'contract.scope') as RawScope\n const scope = { inScope: stringArray(scopeRaw['inScope'], 'contract.scope.inScope'), outOfScope: stringArray(scopeRaw['outOfScope'], 'contract.scope.outOfScope') }\n const ambiguities = stringArray(contractRaw['ambiguities'], 'contract.ambiguities')\n const rawOutcomes = contractRaw['outcomes']\n const outcomes = Array.isArray(rawOutcomes) ? rawOutcomes.map((outcome, index) => parseOutcome(outcome, index, checks)) : fail('contract.outcomes must be a non-empty array.', 'INVALID_CONFIG')\n if (!outcomes.length || new Set(outcomes.map((outcome) => outcome.id)).size !== outcomes.length) fail('outcome ids must be unique.', 'INVALID_CONFIG')\n const mapped = new Set(outcomes.flatMap((outcome) => outcome.checks))\n if (checks.some((check) => check.required && !mapped.has(check.id))) fail('every required check must map to an outcome.', 'INVALID_CONFIG')\n const rawSurfaces = isRecord(raw['surfaces']) ? raw['surfaces'] : undefined\n const surfaces = Object.fromEntries(SURFACE_NAMES.map((name) => [name, surface(rawSurfaces?.[name] ?? (name === 'logic'), name)])) as Record<SurfaceName, SurfaceRequirement>\n for (const name of SURFACE_NAMES) if (surfaces[name].required && !checks.some((check) => check.required && check.category === name)) fail(`required surface ${name} has no required check.`, 'INVALID_CONFIG')\n const trackingRaw = isRecord(raw['tracking']) ? raw['tracking'] as RawTracking : { required: false, reason: 'tracking is not configured for this run.' }\n if (trackingRaw['required'] === true && typeof trackingRaw['target'] !== 'string') fail('tracking.target is required when tracking is enabled.', 'INVALID_CONFIG')\n if (trackingRaw['required'] !== true && typeof trackingRaw['reason'] !== 'string') fail('tracking.reason is required when tracking is disabled.', 'INVALID_CONFIG')\n const budgetRaw = raw['budget'] === undefined ? undefined : asRecord(raw['budget'], 'budget') as RawBudget\n if (budgetRaw && budgetRaw['maxDurationMs'] !== undefined && (!Number.isInteger(budgetRaw['maxDurationMs']) || typeof budgetRaw['maxDurationMs'] !== 'number' || budgetRaw['maxDurationMs'] < 1)) fail('budget.maxDurationMs must be positive.', 'INVALID_CONFIG')\n const verificationRaw = raw['verification'] === undefined ? undefined : asRecord(raw['verification'], 'verification') as RawVerification\n if (verificationRaw && verificationRaw['maxConcurrency'] !== undefined && (!Number.isInteger(verificationRaw['maxConcurrency']) || typeof verificationRaw['maxConcurrency'] !== 'number' || verificationRaw['maxConcurrency'] < 1)) fail('verification.maxConcurrency must be a positive integer.', 'INVALID_CONFIG')\n const cleanupRaw = raw['cleanup'] === undefined ? undefined : asRecord(raw['cleanup'], 'cleanup') as RawCleanup\n const cleanup = cleanupRaw ? { roots: cleanupRaw['roots'] === undefined ? undefined : stringArray(cleanupRaw['roots'], 'cleanup.roots') } : undefined\n const benchmarkRaw = raw['benchmark'] === undefined ? undefined : asRecord(raw['benchmark'], 'benchmark') as RawBenchmark\n const benchmark = benchmarkRaw ? { suiteId: stringValue(benchmarkRaw['suiteId'], 'benchmark.suiteId'), taskId: stringValue(benchmarkRaw['taskId'], 'benchmark.taskId'), mode: benchmarkRaw['mode'] === 'harness' ? 'harness' as const : fail('benchmark.mode must be harness.', 'INVALID_CONFIG') } : undefined\n const contract: TaskContract = { intent: stringValue(contractRaw['intent'], 'contract.intent'), scope, ambiguities, outcomes }\n const tracking: TrackingConfig = { required: trackingRaw['required'] === true, ...(typeof trackingRaw['target'] === 'string' ? { target: trackingRaw['target'] } : {}), ...(typeof trackingRaw['reason'] === 'string' ? { reason: trackingRaw['reason'] } : {}) }\n return { schemaVersion: 1, project, ...(typeof raw['root'] === 'string' ? { root: raw['root'] } : {}), ...(typeof raw['stateDir'] === 'string' ? { stateDir: raw['stateDir'] } : {}), profile: typeof raw['profile'] === 'string' ? raw['profile'] : 'strict', runtime, autonomy, contract, surfaces, checks, tracking, ...(verificationRaw ? { verification: { maxConcurrency: verificationRaw['maxConcurrency'] as number | undefined } } : {}), ...(budgetRaw ? { budget: { maxDurationMs: budgetRaw['maxDurationMs'] as number | undefined } } : {}), ...(cleanup ? { cleanup } : {}), ...(benchmark ? { benchmark } : {}) }\n}\n\nexport const loadConfig = (configPath = '.codex/verification.json'): LoadedConfig => {\n const absolute = resolve(configPath)\n const raw = readJson(absolute)\n const rawRecord = asRecord(raw, 'verification config')\n const root = resolve(dirname(absolute), typeof rawRecord['root'] === 'string' ? rawRecord['root'] : '.')\n const stateDir = resolve(root, typeof rawRecord['stateDir'] === 'string' ? rawRecord['stateDir'] : '.codex/verification')\n if (stateDir === root) fail('stateDir must be separate from the project root.', 'INVALID_CONFIG')\n const config = validateConfig(raw)\n return { absolute, root, stateDir, config, configHash: hashJson(config) }\n}\n","import { DECISIONS, LEGAL_TRANSITIONS, STATES } from './constants.js'\nimport { fail } from './errors.js'\nimport type { RunState, StateTransition, VerificationRun } from './types.js'\n\nexport const transition = (run: Pick<VerificationRun, 'state' | 'transitions'>, to: RunState, reason?: string, actor = 'harness'): Pick<VerificationRun, 'state' | 'transitions'> => {\n if (!STATES.includes(to)) fail(`Unknown state ${to}.`, 'INVALID_STATE')\n if (run.state !== to && !LEGAL_TRANSITIONS[run.state].some((state) => state === to)) fail(`Illegal transition ${run.state} -> ${to}.`, 'INVALID_STATE')\n const event: StateTransition = { from: run.state, to, at: new Date().toISOString(), actor, ...(reason ? { reason } : {}) }\n return { ...run, state: to, transitions: [...run.transitions, event] }\n}\n\nexport const assertHuman = (actor: string): void => {\n if (actor !== 'human') fail('This action requires --by human.', 'HUMAN_APPROVAL_REQUIRED')\n}\n\nexport const approvedDecision = (decision: string): boolean => {\n if (!DECISIONS.has(decision)) fail('Decision must be approved or rejected.', 'INVALID_INPUT')\n return ['approved', 'approve', 'yes', 'ok'].includes(decision)\n}\n","import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { fail } from './errors.js'\nimport { sha256 } from './hash.js'\nimport type { ContextQuery } from './context.js'\nimport type { RunState } from './types.js'\nimport type { DockerRuntimeEvidence } from './runtime.js'\n\nexport const HARNESS_EVENT_SCHEMA_VERSION = 1 as const\nexport const EVENT_LOG_GENESIS = 'GENESIS' as const\nexport const HARNESS_EVENT_TYPES = ['run.created', 'state.transitioned', 'context.attached', 'verification.completed', 'approval.recorded', 'authorization.recorded', 'session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'] as const\nexport type HarnessEventType = typeof HARNESS_EVENT_TYPES[number]\nconst SESSION_EVENT_TYPES = new Set<HarnessEventType>(['session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'])\n\nexport interface HarnessEventContext {\n readonly operationId: string\n readonly runId?: string\n readonly sessionId?: string\n readonly turnId?: string\n readonly actionId?: string\n readonly traceId?: string\n}\n\nexport interface HarnessEventPayloads {\n readonly 'run.created': { readonly project: string; readonly baselineRevision: string; readonly baselineStatusHash: string }\n readonly 'state.transitioned': { readonly from: RunState | null; readonly to: RunState; readonly actor: string; readonly reason?: string; readonly transitionIndex: number }\n readonly 'context.attached': { readonly providerId: string; readonly sourceHash: string; readonly snapshotHash: string; readonly query: ContextQuery }\n readonly 'verification.completed': { readonly verificationDigest: string; readonly checkCount: number; readonly outcomeCount: number; readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly 'approval.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'authorization.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly target: string; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'session.started': { readonly adapterId: string; readonly adapterVersion: string; readonly capabilities: readonly string[] }\n readonly 'session.resumed': { readonly recovery: 'event-log' }\n readonly 'agent.turn.started': { readonly turnId: string; readonly inputHash: string }\n readonly 'policy.evaluated': { readonly actionId: string; readonly turnId: string; readonly toolId: string; readonly decision: 'allow' | 'block' | 'approve'; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly decision: 'approved' | 'rejected'; readonly actor: 'human'; readonly policyId: string; readonly reason: string }\n readonly 'tool.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string }\n readonly 'tool.execution.started': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly attempt: number }\n readonly 'tool.recovery.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly decision: 'retry' | 'abandon'; readonly actor: 'human'; readonly reason: string }\n readonly 'tool.blocked': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.completed': { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'tool.failed': { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'session.ended': { readonly status: 'completed' | 'failed' | 'cancelled' }\n}\n\nexport type HarnessEvent<K extends HarnessEventType = HarnessEventType> = K extends HarnessEventType ? {\n readonly schemaVersion: typeof HARNESS_EVENT_SCHEMA_VERSION\n readonly runId: string\n readonly sequence: number\n readonly at: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly correlation?: HarnessEventContext\n readonly previousHash?: string\n readonly eventHash?: string\n readonly sessionId?: string\n readonly type: K\n readonly payload: HarnessEventPayloads[K]\n } : never\n\nexport type HarnessEventInput<K extends HarnessEventType = HarnessEventType> = Omit<HarnessEvent<K>, 'schemaVersion' | 'sequence' | 'at'>\nexport type HarnessEventListener<K extends HarnessEventType> = (event: HarnessEvent<K>) => void\n\nexport interface EventStore {\n append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K>\n read(runId: string): readonly HarnessEvent[]\n verify(runId: string): EventLogVerification\n}\n\nexport interface EventLogVerification {\n readonly status: 'verified' | 'legacy'\n readonly eventCount: number\n readonly headHash?: string\n}\n\nexport interface EventLogLock {\n readonly pid: number\n readonly at: string\n}\n\nexport interface EventLogLockStatus {\n readonly status: 'locked' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nexport interface EventLogLockRecovery {\n readonly status: 'recovered' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nconst eventPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'events.ndjson')\nconst lockPath = (stateDir: string, runId: string): string => `${eventPath(stateDir, runId)}.lock`\nconst parseLock = (value: string): EventLogLock => {\n try {\n const record = JSON.parse(value) as Record<string, unknown>\n if (!Number.isInteger(record['pid']) || (record['pid'] as number) <= 0 || typeof record['at'] !== 'string' || !Number.isFinite(Date.parse(record['at']))) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n return { pid: record['pid'] as number, at: record['at'] as string }\n } catch (error) {\n if (error instanceof SyntaxError) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n throw error\n }\n}\nconst readLock = (stateDir: string, runId: string): EventLogLock | null => {\n const path = lockPath(stateDir, runId)\n return existsSync(path) ? parseLock(readFileSync(path, 'utf8')) : null\n}\nconst isEventType = (value: unknown): value is HarnessEventType => typeof value === 'string' && (HARNESS_EVENT_TYPES as readonly string[]).includes(value)\nconst digest = (value: string): boolean => /^[a-f0-9]{64}$/.test(value)\nconst eventBody = (event: HarnessEvent): Omit<HarnessEvent, 'eventHash'> => {\n const { eventHash: _eventHash, ...body } = event\n return body\n}\nconst eventDigest = (event: HarnessEvent): string => sha256(JSON.stringify(eventBody(event)))\n\nconst parseEvent = (value: unknown, expectedSequence: number): HarnessEvent => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event log contains a non-object record.', 'HARNESS_ERROR')\n const record = value as Record<string, unknown>\n const context = record['correlation']\n const validContext = context === undefined || (typeof context === 'object' && context !== null && !Array.isArray(context) && Object.entries(context as Record<string, unknown>).every(([key, value]) => ['operationId', 'runId', 'sessionId', 'turnId', 'actionId', 'traceId'].includes(key) && typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value)) && typeof (context as Record<string, unknown>)['operationId'] === 'string')\n if (record['schemaVersion'] !== HARNESS_EVENT_SCHEMA_VERSION || typeof record['runId'] !== 'string' || typeof record['sequence'] !== 'number' || record['sequence'] !== expectedSequence || typeof record['at'] !== 'string' || typeof record['sourceRevision'] !== 'string' || typeof record['configHash'] !== 'string' || !isEventType(record['type']) || typeof record['payload'] !== 'object' || record['payload'] === null || (record['sessionId'] !== undefined && (typeof record['sessionId'] !== 'string' || !record['sessionId'].trim())) || (SESSION_EVENT_TYPES.has(record['type']) && typeof record['sessionId'] !== 'string') || !validContext) fail('Event log is invalid or out of order.', 'HARNESS_ERROR')\n const hasPreviousHash = record['previousHash'] !== undefined\n const hasEventHash = record['eventHash'] !== undefined\n if (hasPreviousHash !== hasEventHash || (hasPreviousHash && (typeof record['previousHash'] !== 'string' || (record['previousHash'] !== EVENT_LOG_GENESIS && !digest(record['previousHash'] as string)) || typeof record['eventHash'] !== 'string' || !digest(record['eventHash'] as string)))) fail('Event log integrity metadata is invalid.', 'HARNESS_ERROR')\n return record as unknown as HarnessEvent\n}\n\nconst validateChain = (events: readonly HarnessEvent[]): EventLogVerification => {\n const current = events.filter((event) => event.eventHash !== undefined)\n if (!current.length) return { status: 'legacy', eventCount: events.length }\n if (current.length !== events.length) fail('Event log mixes legacy and hashed records.', 'HARNESS_ERROR')\n let previous: string = EVENT_LOG_GENESIS\n for (const event of events) {\n const eventHash = event.eventHash ?? fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n if (event.previousHash !== previous || eventHash !== eventDigest(event)) fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n previous = eventHash\n }\n return { status: 'verified', eventCount: events.length, ...(events.length ? { headHash: previous } : {}) }\n}\n\nexport class FileEventStore implements EventStore {\n public constructor(private readonly stateDir: string) {}\n\n public append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K> {\n if (!event.runId.trim()) fail('Event runId is required.', 'INVALID_INPUT')\n if (!event.sourceRevision.trim() || !event.configHash.trim()) fail('Event sourceRevision and configHash are required.', 'INVALID_INPUT')\n if (!isEventType(event.type)) fail('Event type is invalid.', 'INVALID_INPUT')\n if (SESSION_EVENT_TYPES.has(event.type) && (!event.sessionId || !event.sessionId.trim())) fail('Session events require a sessionId.', 'INVALID_INPUT')\n if (event.sessionId !== undefined && !event.sessionId.trim()) fail('Event sessionId cannot be empty.', 'INVALID_INPUT')\n if (event.correlation !== undefined && (!event.correlation.operationId || !event.correlation.operationId.trim())) fail('Event correlation operationId is required.', 'INVALID_INPUT')\n const path = eventPath(this.stateDir, event.runId)\n const lock = lockPath(this.stateDir, event.runId)\n mkdirSync(join(this.stateDir, 'runs', event.runId), { recursive: true })\n let lockFd: number\n try { lockFd = openSync(lock, 'wx'); writeSync(lockFd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() })) } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') fail('Event log is busy; retry the operation.', 'HARNESS_ERROR'); throw error }\n try {\n const events = this.readUnlocked(event.runId)\n const previous = events.at(-1)\n const body = { schemaVersion: HARNESS_EVENT_SCHEMA_VERSION, sequence: events.length + 1, at: new Date().toISOString(), runId: event.runId, sourceRevision: event.sourceRevision, configHash: event.configHash, ...(event.correlation ? { correlation: event.correlation } : {}), ...(event.sessionId ? { sessionId: event.sessionId } : {}), ...(previous?.eventHash ? { previousHash: previous.eventHash } : events.length ? {} : { previousHash: EVENT_LOG_GENESIS }), type: event.type, payload: event.payload } as HarnessEvent<K>\n const record = (events.length && !previous?.eventHash ? body : { ...body, eventHash: eventDigest(body) }) as HarnessEvent<K>\n appendFileSync(path, `${JSON.stringify(record)}\\n`, 'utf8')\n return record\n } finally {\n closeSync(lockFd)\n unlinkSync(lock)\n }\n }\n\n private readUnlocked(runId: string): readonly HarnessEvent[] {\n const path = eventPath(this.stateDir, runId)\n if (!existsSync(path)) return []\n const events = readFileSync(path, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return parseEvent(JSON.parse(line) as unknown, index + 1) } catch (error) { if (error instanceof SyntaxError) fail('Event log contains invalid JSON.', 'HARNESS_ERROR'); throw error }\n })\n validateChain(events)\n return events\n }\n\n public read(runId: string): readonly HarnessEvent[] {\n if (existsSync(lockPath(this.stateDir, runId))) fail('Event log is busy; retry the operation.', 'HARNESS_ERROR')\n return this.readUnlocked(runId)\n }\n\n public verify(runId: string): EventLogVerification {\n return validateChain(this.read(runId))\n }\n}\n\nexport const inspectEventLogLock = (stateDir: string, runId: string): EventLogLockStatus => {\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n return lock ? { status: 'locked', path, lock } : { status: 'unlocked', path }\n}\n\nexport const recoverEventLogLock = ({ stateDir, runId, actor, maxAgeMs = 300_000 }: { readonly stateDir: string; readonly runId: string; readonly actor: string; readonly maxAgeMs?: number }): EventLogLockRecovery => {\n if (actor !== 'human') fail('Event log lock recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n if (!lock) return { status: 'unlocked', path }\n const ageMs = Date.now() - Date.parse(lock.at)\n if (ageMs < maxAgeMs) fail('Event log lock is not old enough to recover.', 'HARNESS_ERROR')\n try { process.kill(lock.pid, 0) } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ESRCH') fail('Event log lock owner cannot be proven dead.', 'HARNESS_ERROR')\n unlinkSync(path)\n return { status: 'recovered', path, lock }\n }\n return fail('Event log lock owner is still alive.', 'HARNESS_ERROR')\n}\n","import { fail } from './errors.js'\nimport type { HarnessEvent, HarnessEventListener, HarnessEventType } from './events.js'\n\nexport const HARNESS_PLUGIN_API_VERSION = 1 as const\nexport type Disposer = () => void\n\nexport interface PluginSlot<T> { readonly id: string }\nexport const createPluginSlot = <T>(id: string): PluginSlot<T> => {\n if (!id.trim()) fail('Plugin slot id is required.', 'INVALID_INPUT')\n return { id }\n}\n\nexport interface HarnessPluginContext {\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n register<T>(slot: PluginSlot<T>, id: string, value: T): Disposer\n effect(disposer: Disposer): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n}\n\nexport interface HarnessPlugin {\n readonly id: string\n readonly version: string\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n readonly requires?: readonly string[]\n readonly apply: (context: HarnessPluginContext) => void | Disposer\n}\n\nexport interface PluginContribution<T> { readonly pluginId: string; readonly id: string; readonly value: T }\n\nexport interface PluginRegistry {\n register(plugin: HarnessPlugin): void\n mount(): void\n emit<K extends HarnessEventType>(event: HarnessEvent<K>): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n contributions<T>(slot: PluginSlot<T>): readonly PluginContribution<T>[]\n dispose(): void\n}\n\nconst validId = (value: string, label: string): string => {\n if (!value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value\n}\n\nexport const createPluginRegistry = (): PluginRegistry => {\n const plugins = new Map<string, HarnessPlugin>()\n const contributions = new Map<string, Map<string, PluginContribution<unknown>>>()\n const listeners = new Map<HarnessEventType, Set<HarnessEventListener<HarnessEventType>>>()\n const cleanups: Disposer[] = []\n let mounted = false\n let disposed = false\n\n const ensureOpen = (): void => { if (disposed) fail('Plugin registry has been disposed.', 'HARNESS_ERROR') }\n const removeContribution = (slot: PluginSlot<unknown>, id: string, pluginId: string): void => {\n const entries = contributions.get(slot.id)\n if (entries?.get(id)?.pluginId === pluginId) entries.delete(id)\n }\n const registerContribution = <T>(pluginId: string, slot: PluginSlot<T>, id: string, value: T): Disposer => {\n const entries = contributions.get(slot.id) ?? new Map<string, PluginContribution<unknown>>()\n if (entries.has(id)) fail(`Plugin contribution already exists: ${slot.id}/${id}.`, 'INVALID_INPUT')\n entries.set(id, { pluginId, id, value })\n contributions.set(slot.id, entries)\n const disposer = (): void => removeContribution(slot as PluginSlot<unknown>, id, pluginId)\n cleanups.push(disposer)\n return disposer\n }\n const order = (): HarnessPlugin[] => {\n const result: HarnessPlugin[] = []\n const visiting = new Set<string>()\n const visited = new Set<string>()\n const visit = (id: string): void => {\n if (visited.has(id)) return\n if (visiting.has(id)) fail(`Plugin dependency cycle includes ${id}.`, 'INVALID_INPUT')\n const candidate = plugins.get(id)\n if (!candidate) fail(`Plugin dependency is missing: ${id}.`, 'INVALID_INPUT')\n const plugin = candidate as HarnessPlugin\n visiting.add(id)\n for (const dependency of plugin.requires ?? []) visit(dependency)\n visiting.delete(id); visited.add(id); result.push(plugin)\n }\n for (const id of plugins.keys()) visit(id)\n return result\n }\n const registry: PluginRegistry = {\n register(plugin) {\n ensureOpen()\n if (mounted) fail('Plugins cannot be registered after mount.', 'HARNESS_ERROR')\n validId(plugin.id, 'Plugin id'); validId(plugin.version, 'Plugin version')\n if (plugin.apiVersion !== HARNESS_PLUGIN_API_VERSION) fail(`Unsupported plugin API version: ${String(plugin.apiVersion)}.`, 'INVALID_INPUT')\n if (plugins.has(plugin.id)) fail(`Plugin already registered: ${plugin.id}.`, 'INVALID_INPUT')\n plugins.set(plugin.id, plugin)\n },\n mount() {\n ensureOpen()\n if (mounted) return\n try {\n for (const plugin of order()) {\n const context: HarnessPluginContext = {\n apiVersion: HARNESS_PLUGIN_API_VERSION,\n register: (slot, id, value) => registerContribution(plugin.id, slot, validId(id, 'Plugin contribution id'), value),\n effect: (disposer) => { cleanups.push(disposer) },\n on: (type, listener) => {\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n const disposer = (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n cleanups.push(disposer); return disposer\n },\n }\n const cleanup = plugin.apply(context)\n if (cleanup) cleanups.push(cleanup)\n }\n mounted = true\n } catch (error) { registry.dispose(); throw error }\n },\n emit(event) {\n ensureOpen()\n for (const listener of listeners.get(event.type) ?? []) listener(event as HarnessEvent<HarnessEventType>)\n },\n on(type, listener) {\n ensureOpen()\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n return (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n },\n contributions: <T>(slot: PluginSlot<T>): readonly PluginContribution<T>[] => [...(contributions.get(slot.id)?.values() ?? [])] as readonly PluginContribution<T>[],\n dispose() {\n if (disposed) return\n let firstError: unknown\n for (const cleanup of cleanups.splice(0).reverse()) { try { cleanup() } catch (error) { firstError ??= error } }\n contributions.clear(); listeners.clear(); disposed = true; mounted = false\n if (firstError) throw firstError\n },\n }\n return registry\n}\n","import { readFileSync } from 'node:fs'\nimport { createPluginSlot } from './plugins.js'\nimport { hashJson } from './hash.js'\nimport { fail } from './errors.js'\n\nexport interface ContextQuery {\n readonly query: string\n readonly scope?: readonly string[]\n readonly sourceRevision?: string\n}\n\nexport interface ContextReference {\n readonly id: string\n readonly uri: string\n readonly title?: string\n readonly version?: string\n readonly contentHash?: string\n}\n\nexport interface ContextSnapshot {\n readonly providerId: string\n readonly query: ContextQuery\n readonly references: readonly ContextReference[]\n readonly sourceHash: string\n readonly snapshotHash: string\n readonly resolvedAt: string\n}\n\nexport interface ContextProvider {\n readonly id: string\n readonly version: string\n readonly resolve: (query: ContextQuery) => Promise<ContextSnapshot>\n}\n\nexport const hashContextSnapshot = ({ providerId, query, references, sourceHash }: Pick<ContextSnapshot, 'providerId' | 'query' | 'references' | 'sourceHash'>): string => hashJson({ providerId, query, references, sourceHash })\nexport const hashContextSnapshots = (snapshots: readonly ContextSnapshot[]): string => hashJson(snapshots.map(({ providerId, query, references, sourceHash, snapshotHash }) => ({ providerId, query, references, sourceHash, snapshotHash })))\n\nconst record = (value: unknown, label: string): Record<string, unknown> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return value as Record<string, unknown>\n}\nconst requiredString = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value as string\n}\nexport const validateContextSnapshot = (value: unknown, index = 0): ContextSnapshot => {\n const raw = record(value, `context snapshot ${index}`)\n const rawQuery = record(raw['query'], `context snapshot ${index}.query`)\n const rawReferences = raw['references']\n if (!Array.isArray(rawReferences)) fail(`context snapshot ${index}.references must be an array.`, 'INVALID_INPUT')\n const references = (rawReferences as unknown[]).map((reference: unknown, referenceIndex: number) => {\n const rawReference = record(reference, `context snapshot ${index}.references[${referenceIndex}]`)\n return {\n id: requiredString(rawReference['id'], `context snapshot ${index}.references[${referenceIndex}].id`),\n uri: requiredString(rawReference['uri'], `context snapshot ${index}.references[${referenceIndex}].uri`),\n ...(typeof rawReference['title'] === 'string' ? { title: rawReference['title'] } : {}),\n ...(typeof rawReference['version'] === 'string' ? { version: rawReference['version'] } : {}),\n ...(typeof rawReference['contentHash'] === 'string' ? { contentHash: rawReference['contentHash'] } : {}),\n }\n })\n const scope = rawQuery['scope'] === undefined ? undefined : Array.isArray(rawQuery['scope']) && rawQuery['scope'].every((item) => typeof item === 'string') ? rawQuery['scope'] : fail(`context snapshot ${index}.query.scope must be an array of strings.`, 'INVALID_INPUT')\n const snapshot = {\n providerId: requiredString(raw['providerId'], `context snapshot ${index}.providerId`),\n query: { query: requiredString(rawQuery['query'], `context snapshot ${index}.query.query`), ...(scope ? { scope } : {}), ...(typeof rawQuery['sourceRevision'] === 'string' ? { sourceRevision: rawQuery['sourceRevision'] } : {}) },\n references,\n sourceHash: requiredString(raw['sourceHash'], `context snapshot ${index}.sourceHash`),\n snapshotHash: requiredString(raw['snapshotHash'], `context snapshot ${index}.snapshotHash`),\n resolvedAt: requiredString(raw['resolvedAt'], `context snapshot ${index}.resolvedAt`),\n }\n if (snapshot.snapshotHash !== hashContextSnapshot(snapshot)) fail(`context snapshot ${index}.snapshotHash does not match its contents.`, 'INVALID_INPUT')\n return snapshot\n}\n\nexport const readContextSnapshots = (path: string): readonly ContextSnapshot[] => {\n const value = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return (Array.isArray(value) ? value : [value]).map((snapshot, index) => validateContextSnapshot(snapshot, index))\n}\n\nexport const validateContextSnapshots = (snapshots: readonly ContextSnapshot[]): readonly ContextSnapshot[] => snapshots.map((snapshot, index) => validateContextSnapshot(snapshot, index))\n\nexport const CONTEXT_PROVIDER_SLOT = createPluginSlot<ContextProvider>('context.provider')\n","import { hashJson } from './hash.js'\nimport { saveRun as persistRun, setLatest } from './files.js'\nimport { FileEventStore } from './events.js'\nimport { hashContextSnapshots } from './context.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { LoadedConfig, SourceSnapshot, VerificationRun } from './types.js'\n\nconst now = (): string => new Date().toISOString()\nconst newRunId = (): string => `${Date.now()}-${process.pid}-${Math.random().toString(36).slice(2, 8)}`\n\nexport const saveRun = (stateDir: string, run: VerificationRun): void => {\n persistRun(stateDir, run)\n const store = new FileEventStore(stateDir)\n const events = store.read(run.runId)\n if (!events.some((event) => event.type === 'run.created')) store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'run.created', payload: { project: run.project, baselineRevision: run.baseline.revision, baselineStatusHash: run.baseline.statusHash } })\n const loggedTransitions = new Set(events.filter((event) => event.type === 'state.transitioned').map((event) => event.payload.transitionIndex))\n run.transitions.forEach((transition, transitionIndex) => {\n if (loggedTransitions.has(transitionIndex)) return\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'state.transitioned', payload: { from: transition.from, to: transition.to, actor: transition.actor ?? 'harness', ...(transition.reason ? { reason: transition.reason } : {}), transitionIndex } })\n })\n const loggedSnapshots = new Set(events.filter((event) => event.type === 'context.attached').map((event) => event.payload.snapshotHash))\n for (const snapshot of run.contextSnapshots ?? []) {\n if (loggedSnapshots.has(snapshot.snapshotHash)) continue\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'context.attached', payload: { providerId: snapshot.providerId, sourceHash: snapshot.sourceHash, snapshotHash: snapshot.snapshotHash, query: snapshot.query } })\n }\n}\nexport { setLatest }\n\nexport const createRun = async ({ loaded, baseline, supersedes, dirtyBaselineAuthorized, contextSnapshots = [] }: { readonly loaded: LoadedConfig; readonly baseline: SourceSnapshot; readonly supersedes?: string; readonly dirtyBaselineAuthorized?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n const run: VerificationRun = {\n type: 'agentskit-harness-run', schemaVersion: 1, runId: newRunId(), project: loaded.config.project, state: 'PLANNED', configHash: loaded.configHash, contractHash: hashJson(loaded.config.contract), sourceRevision: baseline.revision, sourceStatusHash: baseline.statusHash, baseline, autonomy: loaded.config.autonomy,\n contractApproval: { actor: 'human', at: now(), contractHash: hashJson(loaded.config.contract) },\n checks: loaded.config.checks.map(({ id, category }) => ({ id, category, status: 'pending' })), contextSnapshots, ...(contextSnapshots.length ? { contextHash: hashContextSnapshots(contextSnapshots) } : {}), ...(loaded.config.benchmark ? { benchmark: loaded.config.benchmark } : {}),\n outcomes: loaded.config.contract.outcomes.map(({ id, statement, checks }) => ({ id, statement, checks, status: 'pending' })),\n transitions: [{ from: null, to: 'PLANNED', at: now(), actor: 'human' }], evidenceReferences: [],\n ...(supersedes ? { supersedes } : {}), ...(dirtyBaselineAuthorized ? { dirtyBaselineAuthorized: true } : {}),\n }\n saveRun(loaded.stateDir, run); setLatest(loaded.stateDir, run); return run\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { sha256 } from './hash.js'\nimport { pathInside } from './files.js'\nimport type { EvidenceArtifact, StructuredEvidence, VerificationCheck } from './types.js'\n\nexport const parseStructuredEvidence = (stdout: string): StructuredEvidence | null => {\n for (const line of stdout.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean).reverse()) {\n try {\n const value: unknown = JSON.parse(line)\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof (value as Record<string, unknown>)['status'] === 'string') return value as StructuredEvidence\n } catch {}\n }\n return null\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst viewportValid = (viewport: unknown): boolean => typeof viewport === 'string' || (isRecord(viewport) && typeof viewport['width'] === 'number' && viewport['width'] > 0 && typeof viewport['height'] === 'number' && viewport['height'] > 0)\n\nexport const validateEvidence = (root: string, check: VerificationCheck, evidence: StructuredEvidence | null, outcomeIds: readonly string[]): string[] => {\n if (!evidence || evidence.status !== 'passed') return ['structured evidence did not pass']\n if (!Array.isArray(evidence.criteria) || !evidence.criteria.every((id): id is string => typeof id === 'string') || outcomeIds.some((id) => !evidence.criteria.includes(id))) return [`evidence must map criteria: ${outcomeIds.join(', ')}`]\n const failures: string[] = []\n if (check.category === 'ui') {\n if (evidence.capability !== 'real-browser') failures.push('UI evidence must declare capability real-browser')\n if (!Array.isArray(evidence.artifacts) || evidence.artifacts.length === 0) failures.push('UI evidence requires screenshot artifacts')\n }\n const artifacts = Array.isArray(evidence.artifacts) ? evidence.artifacts : []\n for (const artifactValue of artifacts) {\n if (!isRecord(artifactValue) || typeof artifactValue['path'] !== 'string' || typeof artifactValue['sha256'] !== 'string') {\n failures.push('artifact requires string path and sha256')\n continue\n }\n const artifact = artifactValue as unknown as EvidenceArtifact\n const artifactPath = join(root, artifact.path)\n if (!pathInside(root, artifactPath)) failures.push(`artifact path escapes project root: ${artifact.path}`)\n else if (!existsSync(artifactPath) || sha256(readFileSync(artifactPath)) !== artifact.sha256) failures.push(`artifact hash mismatch: ${artifact.path}`)\n if (check.category === 'ui' && (artifact.type !== 'screenshot' || !viewportValid(artifact.viewport))) failures.push(`UI artifact requires type=screenshot and viewport: ${artifact.path}`)\n }\n return failures\n}\n","import { execFile } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\nimport { promisify } from 'node:util'\nimport { hashJson, sha256 } from './hash.js'\nimport { fail } from './errors.js'\nimport type { SourceSnapshot } from './types.js'\n\nconst execFileAsync = promisify(execFile)\nconst git = async (root: string, args: readonly string[]): Promise<string> => {\n try { return (await execFileAsync('git', ['-C', root, ...args], { encoding: 'utf8' })).stdout.trim() } catch { return '' }\n}\n\nexport const sourceSnapshot = async (root: string, stateDir: string): Promise<SourceSnapshot> => {\n const revision = await git(root, ['rev-parse', 'HEAD'])\n if (!revision) fail('Current-source evidence requires a Git repository with a committed HEAD.', 'GIT_REQUIRED')\n const stateRelative = relative(root, stateDir).replaceAll('\\\\', '/')\n const pathspec = ['--', '.']\n if (stateRelative && stateRelative !== '..' && !stateRelative.startsWith('../')) pathspec.push(`:(exclude)${stateRelative}`)\n const status = await git(root, ['status', '--porcelain=v1', '--untracked-files=all', ...pathspec])\n const diff = await git(root, ['diff', '--no-ext-diff', '--binary', 'HEAD', ...pathspec])\n const untrackedPaths = (await git(root, ['ls-files', '--others', '--exclude-standard', '-z'])).split('\\0').filter(Boolean).filter((path) => !stateRelative || (path !== stateRelative && !path.startsWith(`${stateRelative}/`)))\n const untracked = untrackedPaths.map((path) => ({ path, hash: sha256(readFileSync(resolve(root, path))) }))\n const fingerprint = { revision, status, diff, untracked }\n return { revision, status, statusHash: hashJson(fingerprint) }\n}\n","import { cpus as cpuInfo, freemem, loadavg, totalmem } from 'node:os'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { MachineMetrics, MachineSample } from './types.js'\nimport { fail } from './errors.js'\n\nexport interface MachineThresholds {\n readonly warningPercent: number\n readonly criticalPercent: number\n}\n\nconst thresholds = (value: Partial<MachineThresholds> = {}): MachineThresholds => {\n const result = { warningPercent: value.warningPercent ?? 75, criticalPercent: value.criticalPercent ?? 90 }\n if (![result.warningPercent, result.criticalPercent].every((item) => Number.isFinite(item) && item >= 0 && item <= 100) || result.warningPercent > result.criticalPercent) fail('Machine thresholds must be between 0 and 100 and warning must not exceed critical.', 'INVALID_INPUT')\n return result\n}\n\nconst linuxSwap = (): number | undefined => {\n if (process.platform !== 'linux' || !existsSync('/proc/meminfo')) return undefined\n const values = Object.fromEntries(readFileSync('/proc/meminfo', 'utf8').split(/\\r?\\n/).flatMap((line) => {\n const match = line.match(/^(SwapTotal|SwapFree):\\s+(\\d+)\\s+kB$/)\n return match ? [[match[1], Number(match[2])]] : []\n })) as Record<string, number>\n if (!values['SwapTotal']) return undefined\n return Number(((1 - (values['SwapFree'] ?? 0) / values['SwapTotal']) * 100).toFixed(2))\n}\n\nconst percentile95 = (values: readonly number[]): number => {\n if (!values.length) return 0\n const sorted = [...values].sort((left, right) => left - right)\n return sorted[Math.min(sorted.length - 1, Math.ceil(sorted.length * 0.95) - 1)] ?? 0\n}\n\nexport const sampleMachine = (): MachineSample => {\n const cpus = Math.max(1, cpuInfo().length)\n const load1 = Math.max(0, loadavg()[0] ?? 0)\n const memory = Math.max(0, Math.min(100, (1 - freemem() / Math.max(1, totalmem())) * 100))\n const swapUsedPercent = linuxSwap()\n return {\n at: new Date().toISOString(),\n cpus,\n load1: Number(load1.toFixed(4)),\n load1PerCpuPercent: Number(Math.min(100, (load1 / cpus) * 100).toFixed(2)),\n memoryUsedPercent: Number(memory.toFixed(2)),\n rssBytes: process.memoryUsage().rss,\n ...(swapUsedPercent === undefined ? {} : { swapUsedPercent }),\n }\n}\n\nexport const summarizeMachine = (samples: readonly MachineSample[], sampleIntervalMs = 5_000, limits: Partial<MachineThresholds> = {}): MachineMetrics => {\n const limit = thresholds(limits)\n const load = samples.map((sample) => sample.load1PerCpuPercent)\n const memory = samples.map((sample) => sample.memoryUsedPercent)\n const rss = samples.map((sample) => sample.rssBytes)\n return {\n sampleIntervalMs,\n samples,\n peakLoad1PerCpuPercent: Number(Math.max(...load, 0).toFixed(2)),\n peakMemoryUsedPercent: Number(Math.max(...memory, 0).toFixed(2)),\n peakRssBytes: Math.max(...rss, 0),\n pressureEvents: samples.filter((sample) => sample.load1PerCpuPercent >= limit.criticalPercent || sample.memoryUsedPercent >= limit.criticalPercent || (sample.swapUsedPercent ?? 0) >= limit.criticalPercent || sample.memoryPressure === 'critical').length,\n throttleEvents: 0,\n minimumEffectiveConcurrency: 0,\n }\n}\n\nexport const adaptiveConcurrency = (configured: number, sample: MachineSample, limits: Partial<MachineThresholds> = {}): number => {\n if (!Number.isInteger(configured) || configured < 1) throw new Error('configured concurrency must be a positive integer.')\n const limit = thresholds(limits)\n const critical = sample.load1PerCpuPercent >= limit.criticalPercent || sample.memoryUsedPercent >= limit.criticalPercent || (sample.swapUsedPercent ?? 0) >= limit.criticalPercent || sample.memoryPressure === 'critical'\n const warning = sample.load1PerCpuPercent >= limit.warningPercent || sample.memoryUsedPercent >= limit.warningPercent || (sample.swapUsedPercent ?? 0) >= limit.warningPercent || sample.memoryPressure === 'warning'\n if (critical) return 1\n if (warning) return Math.min(configured, 2)\n return configured\n}\n\nexport const createMachineMonitor = (sampleIntervalMs = 5_000, options: { readonly sample?: () => MachineSample; readonly thresholds?: Partial<MachineThresholds> } = {}): { readonly sample: () => MachineSample; readonly observeConcurrency: (value: number) => void; readonly markThrottle: () => void; readonly stop: () => MachineMetrics } => {\n const sampler = options.sample ?? sampleMachine\n const limits = thresholds(options.thresholds)\n const samples: MachineSample[] = [sampler()]\n let throttleEvents = 0\n const effectiveConcurrency: number[] = []\n const record = (): MachineSample => { const sample = sampler(); samples.push(sample); return sample }\n const timer = setInterval(record, sampleIntervalMs)\n timer.unref()\n return {\n sample: record,\n observeConcurrency: (value) => effectiveConcurrency.push(value),\n markThrottle: () => { throttleEvents += 1 },\n stop: () => {\n clearInterval(timer)\n record()\n const summary = summarizeMachine(samples, sampleIntervalMs, limits)\n return { ...summary, throttleEvents, minimumEffectiveConcurrency: effectiveConcurrency.length ? Math.min(...effectiveConcurrency) : 0 }\n },\n }\n}\n","import { spawn } from 'node:child_process'\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\nimport { createRun, saveRun, setLatest } from './runs.js'\nimport { loadConfig } from './config.js'\nimport { fail } from './errors.js'\nimport { parseStructuredEvidence, validateEvidence } from './evidence.js'\nimport { assertHuman, approvedDecision, transition } from './state-machine.js'\nimport { sourceSnapshot } from './source.js'\nimport { cleanConfiguredArtifacts, loadLatestRun, readRun } from './files.js'\nimport { validateContextSnapshots } from './context.js'\nimport { hashJson } from './hash.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { CheckResult, LoadedConfig, VerificationCheck, VerificationRun } from './types.js'\nimport { FileEventStore } from './events.js'\nimport { adaptiveConcurrency, createMachineMonitor } from './machine.js'\n\nconst now = (): string => new Date().toISOString()\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst verificationProjection = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): { readonly checks: VerificationRun['checks']; readonly outcomes: VerificationRun['outcomes']; readonly metrics: VerificationRun['metrics'] } => ({ checks: run.checks, outcomes: run.outcomes, metrics: run.metrics })\nconst verificationDigest = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): string => hashJson(verificationProjection(run))\n\ninterface CommandResult { readonly exitCode: number; readonly timedOut: boolean; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\ninterface ExecutedCheck { readonly check: CheckResult; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\n\nconst runCommand = (check: VerificationCheck, cwd: string): Promise<CommandResult> => new Promise((resolveResult) => {\n const started = Date.now()\n const child = spawn(check.command, { cwd, shell: true, env: process.env })\n let stdout = ''\n let stderr = ''\n let timedOut = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGTERM') }, check.timeoutMs)\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString() })\n child.stderr.on('data', (chunk: Buffer) => { stderr += chunk.toString() })\n child.on('close', (exitCode) => { clearTimeout(timer); resolveResult({ exitCode: exitCode ?? 1, timedOut, stdout, stderr, durationMs: Date.now() - started }) })\n})\n\nconst executeCheck = async (check: VerificationCheck, cwd: string, checkDir: string, outcomes: readonly string[]): Promise<ExecutedCheck> => {\n const result = await runCommand(check, cwd)\n const evidence = parseStructuredEvidence(result.stdout)\n const failures = result.exitCode === 0 && !result.timedOut && evidence ? validateEvidence(cwd, check, evidence, outcomes) : [result.timedOut ? 'check timed out' : result.exitCode !== 0 ? `exit code ${result.exitCode}` : 'missing final structured evidence']\n return { check: { id: check.id, category: check.category, status: failures.length ? 'failed' : 'passed', exitCode: result.exitCode, durationMs: result.durationMs, ...(evidence ? { evidence } : {}), ...(failures.length ? { failures } : {}) }, stdout: result.stdout, stderr: result.stderr, durationMs: result.durationMs }\n}\n\nconst currentBinding = async (loaded: LoadedConfig): Promise<{ readonly source: Awaited<ReturnType<typeof sourceSnapshot>>; readonly configHash: string }> => ({ source: await sourceSnapshot(loaded.root, loaded.stateDir), configHash: loaded.configHash })\n\nconst staleRun = (loaded: LoadedConfig, run: VerificationRun, reason: string): never => {\n const stale = transition(run, 'STALE', reason)\n saveRun(loaded.stateDir, stale as VerificationRun); setLatest(loaded.stateDir, stale as VerificationRun)\n return fail(reason, 'STALE')\n}\n\nconst isFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<boolean> => {\n const current = await currentBinding(loaded)\n return current.configHash === run.configHash && current.source.revision === run.sourceRevision && current.source.statusHash === run.sourceStatusHash\n}\n\nexport const planRun = async ({ configPath, decision, actor = 'human', allowDirty = false, contextSnapshots = [] }: { readonly configPath: string; readonly decision: string; readonly actor?: string; readonly allowDirty?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n assertHuman(actor)\n if (!approvedDecision(decision)) fail('Contract was not approved.', 'CLARIFYING')\n const loaded = loadConfig(configPath)\n if (loaded.config.contract.ambiguities.length) fail(`Unresolved ambiguities remain: ${loaded.config.contract.ambiguities.join(' | ')}`, 'CLARIFYING')\n const validatedContextSnapshots = validateContextSnapshots(contextSnapshots)\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const configRelative = relative(loaded.root, loaded.absolute)\n const meaningful = baseline.status.split('\\n').filter(Boolean).filter((line) => !line.endsWith(` ${configRelative}`) && !line.endsWith(` ${configRelative.replaceAll('/', '\\\\')}`))\n if (meaningful.length && !allowDirty) fail(`Worktree is dirty before planning:\\n${meaningful.join('\\n')}\\nUse --allow-dirty only with explicit human authorization.`, 'WORKTREE_DIRTY')\n const previous = loadLatestRun(loaded.stateDir)\n if (previous && !['STALE', 'SUPERSEDED'].includes(previous.state)) fail(`An active run already exists: ${previous.runId} (${previous.state}).`, 'ACTIVE_RUN')\n return createRun({ loaded, baseline, supersedes: previous?.runId, dirtyBaselineAuthorized: allowDirty, contextSnapshots: validatedContextSnapshots })\n}\n\nexport const startRun = (loaded: LoadedConfig): VerificationRun => {\n const run = requireRun(loadLatestRun(loaded.stateDir))\n const next = transition(run, 'IMPLEMENTING', 'Implementation started.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cancelRun = async ({ configPath, runId, reason = 'Run cancelled by a human.', actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly reason?: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor)\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n const next = transition(run, 'CANCELLED', reason, 'human') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const verifyRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath)\n const machineMonitor = createMachineMonitor()\n const run = requireRun(loadLatestRun(loaded.stateDir))\n if (!['IMPLEMENTING', 'VERIFYING'].includes(run.state)) {\n if (['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state) && !(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or contract changed.')\n fail(`Cannot verify from ${run.state}.`, 'INVALID_STATE')\n }\n if (run.configHash !== loaded.configHash) staleRun(loaded, run, 'Run is stale because the verification contract changed.')\n const binding = await currentBinding(loaded)\n let current = { ...transition(run, 'VERIFYING', 'Verification started.', 'agent'), sourceRevision: binding.source.revision, sourceStatusHash: binding.source.statusHash } as VerificationRun\n saveRun(loaded.stateDir, current)\n const checkDir = join(loaded.stateDir, 'runs', current.runId, 'checks')\n mkdirSync(checkDir, { recursive: true })\n const outcomesByCheck = new Map(loaded.config.checks.map((check) => [check.id, loaded.config.contract.outcomes.filter((outcome) => outcome.checks.includes(check.id)).map((outcome) => outcome.id)]))\n let totalDurationMs = 0\n let activeChecks = 0\n let observedPeakConcurrency = 0\n const verificationStarted = Date.now()\n const maxConcurrency = loaded.config.verification?.maxConcurrency ?? 1\n const requiredChecks = loaded.config.checks.filter((check) => check.required)\n for (const check of loaded.config.checks.filter((item) => !item.required)) {\n const nextCheck: CheckResult = { id: check.id, category: check.category, status: 'not-applicable', failures: [check.reason ?? 'Not required by the selected profile.'] }\n current = { ...current, checks: current.checks.map((item) => item.id === check.id ? nextCheck : item) } as VerificationRun\n }\n const remaining = new Set(requiredChecks.map((check) => check.id))\n const completed = new Set(loaded.config.checks.filter((check) => !check.required).map((check) => check.id))\n while (remaining.size) {\n const ready = requiredChecks.filter((check) => remaining.has(check.id) && (check.dependsOn ?? []).every((dependency) => completed.has(dependency)))\n if (!ready.length) fail('Check dependency graph contains an unknown dependency or cycle.', 'INVALID_CONFIG')\n // ponytail: build checks are a dependency barrier; consumers may fan out only after artifacts exist.\n const buildChecks = ready.filter((check) => check.category === 'build')\n const queue = buildChecks.length ? buildChecks : ready\n let offset = 0\n while (offset < queue.length) {\n const effectiveConcurrency = buildChecks.length ? 1 : adaptiveConcurrency(maxConcurrency, machineMonitor.sample())\n machineMonitor.observeConcurrency(effectiveConcurrency)\n if (effectiveConcurrency < maxConcurrency) machineMonitor.markThrottle()\n const batch = queue.slice(offset, offset + effectiveConcurrency)\n const executed = await Promise.all(batch.map(async (check) => {\n activeChecks += 1\n observedPeakConcurrency = Math.max(observedPeakConcurrency, activeChecks)\n try {\n return await executeCheck(check, loaded.root, checkDir, outcomesByCheck.get(check.id) ?? [])\n } finally {\n activeChecks -= 1\n }\n }))\n for (const item of executed) {\n totalDurationMs += item.durationMs\n const stdoutPath = join(checkDir, `${item.check.id}.stdout`)\n const stderrPath = join(checkDir, `${item.check.id}.stderr`)\n writeFileSync(stdoutPath, item.stdout, 'utf8'); writeFileSync(stderrPath, item.stderr, 'utf8')\n current = { ...current, evidenceReferences: [...current.evidenceReferences, { checkId: item.check.id, stdout: relative(loaded.stateDir, stdoutPath), stderr: relative(loaded.stateDir, stderrPath) }], checks: current.checks.map((check) => check.id === item.check.id ? item.check : check) } as VerificationRun\n }\n saveRun(loaded.stateDir, current)\n for (const check of batch) { remaining.delete(check.id); completed.add(check.id) }\n offset += batch.length\n }\n }\n const statuses = new Map(current.checks.map((check) => [check.id, check.status]))\n const budgetExceeded = loaded.config.budget?.maxDurationMs !== undefined && totalDurationMs > loaded.config.budget.maxDurationMs\n const allPassed = loaded.config.checks.every((check) => !check.required || statuses.get(check.id) === 'passed') && !budgetExceeded\n current = { ...current, outcomes: current.outcomes.map((outcome) => { const required = outcome.checks.filter((id) => loaded.config.checks.find((check) => check.id === id)?.required); return { ...outcome, status: required.length === 0 ? 'not-applicable' : required.every((id) => statuses.get(id) === 'passed') ? 'passed' : 'failed' } }), metrics: { totalDurationMs, wallDurationMs: Date.now() - verificationStarted, peakConcurrency: observedPeakConcurrency, budgetExceeded, machine: machineMonitor.stop() } } as VerificationRun\n const digest = verificationDigest(current)\n current = { ...current, verificationDigest: digest }\n saveRun(loaded.stateDir, current)\n new FileEventStore(loaded.stateDir).append({ runId: current.runId, sourceRevision: current.sourceRevision, configHash: current.configHash, type: 'verification.completed', payload: { verificationDigest: digest, checkCount: current.checks.length, outcomeCount: current.outcomes.length, totalDurationMs, budgetExceeded } })\n const automatic = allPassed && current.autonomy === 'yolo' && !loaded.config.tracking.required && loaded.config.contract.ambiguities.length === 0\n const nextState = allPassed ? automatic ? 'COMPLETE' : 'AWAITING_HUMAN_APPROVAL' : 'BLOCKED'\n current = { ...transition(current, nextState, automatic ? 'All applicable checks passed; YOLO policy permits automatic completion.' : allPassed ? 'All configured checks passed; human approval is required.' : budgetExceeded ? 'Verification budget was exceeded.' : 'A configured check failed or lacked structured evidence.', 'harness') } as VerificationRun\n saveRun(loaded.stateDir, current); setLatest(loaded.stateDir, current); return current\n}\n\nconst assertFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<void> => {\n if (!(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or worktree changed after verification.')\n}\n\nconst assertVerificationAttestation = (loaded: LoadedConfig, run: VerificationRun): void => {\n const expected = verificationDigest(run)\n if (run.verificationDigest !== expected) fail('Verification projection attestation does not match run.json.', 'HARNESS_ERROR')\n const event = new FileEventStore(loaded.stateDir).read(run.runId).filter((item) => item.type === 'verification.completed').at(-1)\n if (!event || event.payload.verificationDigest !== expected || event.sourceRevision !== run.sourceRevision || event.configHash !== run.configHash) fail('Verification projection attestation is missing from the event log.', 'HARNESS_ERROR')\n}\n\nconst recordDecision = (loaded: LoadedConfig, run: VerificationRun, type: 'approval.recorded' | 'authorization.recorded', payload: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string; readonly target?: string }): void => {\n new FileEventStore(loaded.stateDir).append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type, payload: type === 'authorization.recorded' ? { ...payload, target: payload.target ?? fail('tracking.target is required when authorizing.', 'INVALID_CONFIG') } : payload })\n}\n\nconst assertDecisionProjection = (run: VerificationRun, decision: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly sourceRevision: string; readonly contractHash: string }, expectedState: VerificationRun['state']): void => {\n if (decision.decision !== 'approved' || decision.resultingState !== expectedState || decision.verificationDigest !== run.verificationDigest || decision.sourceRevision !== run.sourceRevision || decision.contractHash !== run.contractHash) fail('Terminal decision attestation does not match the run projection.', 'HARNESS_ERROR')\n}\n\nexport const reconcileRun = async ({ configPath, runId }: { readonly configPath: string; readonly runId?: string }): Promise<import('./types.js').RunReconciliation> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n await assertFresh(loaded, run)\n const store = new FileEventStore(loaded.stateDir)\n const eventLog = store.verify(run.runId)\n const events = store.read(run.runId)\n if (events.some((event) => event.runId !== run.runId || event.configHash !== run.configHash)) fail('Run event log is not bound to the current run projection.', 'HARNESS_ERROR')\n const requiresVerification = ['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state)\n if (requiresVerification) {\n if (eventLog.status !== 'verified') fail('Terminal run requires a verified event log.', 'HARNESS_ERROR')\n assertVerificationAttestation(loaded, run)\n }\n if ((run.state === 'AWAITING_AUTHORIZATION' || run.state === 'COMPLETE') && run.autonomy !== 'yolo') {\n const approval = events.filter((event) => event.type === 'approval.recorded').at(-1) ?? fail('Terminal run is missing its human approval event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, approval.payload, run.state === 'COMPLETE' && !loaded.config.tracking.required ? 'COMPLETE' : 'AWAITING_AUTHORIZATION')\n if (!run.humanApproval || run.humanApproval.actor !== 'human' || run.humanApproval.verificationDigest !== run.verificationDigest || run.humanApproval.sourceRevision !== run.sourceRevision || run.humanApproval.contractHash !== run.contractHash) fail('Human approval projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n if (run.state === 'COMPLETE' && loaded.config.tracking.required) {\n const authorization = events.filter((event) => event.type === 'authorization.recorded').at(-1) ?? fail('Complete tracked run is missing its authorization event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, authorization.payload, 'COMPLETE')\n if (!run.authorization || run.authorization.actor !== 'human' || run.authorization.verificationDigest !== run.verificationDigest || run.authorization.target !== authorization.payload.target || run.authorization.sourceRevision !== run.sourceRevision || run.authorization.contractHash !== run.contractHash) fail('Authorization projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n return { status: 'verified', runId: run.runId, state: run.state, eventCount: eventLog.eventCount, ...(eventLog.headHash ? { headHash: eventLog.headHash } : {}), ...(run.verificationDigest ? { verificationDigest: run.verificationDigest } : {}) }\n}\n\nexport const approveRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_HUMAN_APPROVAL') fail(`Cannot approve from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected the verification result.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'approval.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n const nextState = loaded.config.tracking.required ? 'AWAITING_AUTHORIZATION' : 'COMPLETE'\n const next = { ...transition(run, nextState, 'Human approved the verification result.', 'human'), humanApproval: { actor: 'human', at: now(), sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'approval.recorded', { decision: 'approved', resultingState: nextState, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const authorizeRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_AUTHORIZATION') fail(`Cannot authorize from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected external tracking authorization.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'authorization.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target ?? '', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n if (!loaded.config.tracking.target) fail('tracking.target is required when authorizing.', 'INVALID_CONFIG')\n const next = { ...transition(run, 'COMPLETE', 'External tracking was authorized.', 'human'), authorization: { actor: 'human', at: now(), target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'authorization.recorded', { decision: 'approved', resultingState: 'COMPLETE', verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const retryRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath); const previous = loadLatestRun(loaded.stateDir)\n const previousRun = requireRun(previous)\n if (!['BLOCKED', 'STALE', 'CANCELLED'].includes(previousRun.state)) fail(`Cannot retry from ${previousRun.state}.`, 'INVALID_STATE')\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const superseded = transition(previousRun, 'SUPERSEDED', 'Retry superseded the previous run.', 'harness') as VerificationRun\n saveRun(loaded.stateDir, superseded)\n const run = await createRun({ loaded, baseline, supersedes: previousRun.runId, dirtyBaselineAuthorized: previousRun.dirtyBaselineAuthorized })\n const next = transition(run, 'IMPLEMENTING', 'Retry started after a previous attempt.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cleanTaskArtifacts = (configPath: string): { readonly cleaned: readonly string[] } => cleanConfiguredArtifacts(loadConfig(configPath))\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { hashJson } from '../hash.js'\nimport { hashContextSnapshot } from '../context.js'\nimport type { ContextProvider, ContextQuery, ContextReference } from '../context.js'\n\ninterface IndexEntry { readonly id?: unknown; readonly type?: unknown; readonly title?: unknown; readonly path?: unknown; readonly description?: unknown; readonly body?: unknown; readonly tags?: unknown }\ninterface IndexDocument { readonly contentHash?: unknown; readonly knowledge?: unknown }\n\nconst index = (root: string, indexPath: string): IndexDocument => JSON.parse(readFileSync(resolve(root, indexPath), 'utf8')) as IndexDocument\nconst text = (entry: IndexEntry): string => [entry.id, entry.type, entry.title, entry.path, entry.description, entry.body, ...(Array.isArray(entry.tags) ? entry.tags : [])].filter((value): value is string => typeof value === 'string').join(' ').toLowerCase()\nconst sourceHash = (document: IndexDocument): string => typeof document.contentHash === 'string' && document.contentHash.length > 0 ? document.contentHash : hashJson(document)\nconst matches = (entry: IndexEntry, query: ContextQuery): boolean => {\n const needle = query.query.trim().toLowerCase()\n const scopes = query.scope?.map((scope) => scope.toLowerCase()) ?? []\n const value = text(entry)\n return Boolean(needle && value.includes(needle) && (scopes.length === 0 || scopes.some((scope) => value.includes(scope))))\n}\n\nexport interface DocBridgeContextProviderOptions {\n readonly root: string\n readonly indexPath?: string\n}\n\nexport const createDocBridgeContextProvider = ({ root, indexPath = '.doc-bridge/index.json' }: DocBridgeContextProviderOptions): ContextProvider => ({\n id: 'doc-bridge',\n version: '1.0.0',\n resolve: async (query) => {\n const document = index(root, indexPath)\n const contentHash = sourceHash(document)\n const entries = Array.isArray(document.knowledge) ? document.knowledge.filter((value): value is IndexEntry => typeof value === 'object' && value !== null && !Array.isArray(value)).filter((entry) => matches(entry, query)).sort((left, right) => String(left.id ?? '').localeCompare(String(right.id ?? ''))).slice(0, 8) : []\n const references: ContextReference[] = entries.flatMap((entry) => typeof entry.id === 'string' && typeof entry.path === 'string' ? [{ id: entry.id, uri: `doc-bridge://${entry.path}`, ...(typeof entry.title === 'string' ? { title: entry.title } : {}), contentHash }] : [])\n return { providerId: 'doc-bridge', query, references, sourceHash: contentHash, snapshotHash: hashContextSnapshot({ providerId: 'doc-bridge', query, references, sourceHash: contentHash }), resolvedAt: new Date().toISOString() }\n },\n})\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport interface DiscoveryOption {\n readonly id: string\n readonly summary: string\n readonly impact: string\n}\n\nexport interface DiscoveryAmbiguity {\n readonly id: string\n readonly question: string\n readonly material: boolean\n readonly options: readonly DiscoveryOption[]\n readonly recommendedOptionId: string\n readonly assumptionId?: string\n}\n\nexport interface ApprovedAssumption {\n readonly id: string\n readonly policyId: string\n readonly resolution: string\n}\n\nexport interface DiscoveryInput {\n readonly issueId: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n readonly ambiguities: readonly DiscoveryAmbiguity[]\n readonly approvedAssumptions?: readonly ApprovedAssumption[]\n}\n\nexport interface DecisionPacket {\n readonly issueId: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly contextHash?: string\n readonly decisions: readonly {\n readonly id: string\n readonly question: string\n readonly options: readonly DiscoveryOption[]\n readonly recommendedOptionId: string\n }[]\n}\n\nexport interface DiscoveryDecisionLogEntry {\n readonly ambiguityId: string\n readonly kind: 'human-decision-required' | 'approved-assumption'\n readonly detail: string\n readonly policyId?: string\n}\n\nexport interface DiscoveryResult {\n readonly version: 1\n readonly issueId: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n readonly status: 'ready' | 'awaiting-decision'\n readonly packet?: DecisionPacket\n readonly decisionLog: readonly DiscoveryDecisionLogEntry[]\n readonly digest: string\n}\n\nexport interface DiscoveryCurrentInput {\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n}\n\nexport interface DiscoveryCurrentResult {\n readonly current: boolean\n readonly reasons: readonly ('source' | 'contract' | 'context')[]\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst unique = (values: readonly string[], label: string): void => {\n if (new Set(values).size !== values.length) fail(`${label} must be unique.`, 'INVALID_INPUT')\n}\n\nconst validate = (input: DiscoveryInput): { readonly assumptions: Map<string, ApprovedAssumption> } => {\n required(input.issueId, 'issueId')\n required(input.sourceRevision, 'sourceRevision')\n required(input.contractHash, 'contractHash')\n if (!Array.isArray(input.ambiguities)) fail('ambiguities must be an array.', 'INVALID_INPUT')\n unique(input.ambiguities.map((item) => required(item.id, 'ambiguity.id')), 'ambiguity ids')\n const assumptions = new Map<string, ApprovedAssumption>()\n for (const assumption of input.approvedAssumptions ?? []) {\n const id = required(assumption.id, 'assumption.id')\n if (assumptions.has(id)) fail('assumption ids must be unique.', 'INVALID_INPUT')\n assumptions.set(id, { id, policyId: required(assumption.policyId, 'assumption.policyId'), resolution: required(assumption.resolution, 'assumption.resolution') })\n }\n for (const ambiguity of input.ambiguities) {\n required(ambiguity.question, 'ambiguity.question')\n if (typeof ambiguity.material !== 'boolean') fail('ambiguity.material must be boolean.', 'INVALID_INPUT')\n if (!Array.isArray(ambiguity.options) || ambiguity.options.length < 2 || ambiguity.options.length > 4) fail('ambiguity.options must contain 2 to 4 options.', 'INVALID_INPUT')\n unique(ambiguity.options.map((option) => required(option.id, 'option.id')), 'option ids')\n for (const option of ambiguity.options) {\n required(option.summary, 'option.summary')\n required(option.impact, 'option.impact')\n }\n if (!ambiguity.options.some((option) => option.id === ambiguity.recommendedOptionId)) fail('recommendedOptionId must identify an option.', 'INVALID_INPUT')\n if (!ambiguity.material && (!ambiguity.assumptionId || !assumptions.has(ambiguity.assumptionId))) fail('non-material ambiguity requires an approved assumption.', 'INVALID_INPUT')\n }\n return { assumptions }\n}\n\nconst digest = (result: Omit<DiscoveryResult, 'digest'>): string => hashJson(result)\n\nexport const assessDiscovery = (input: DiscoveryInput): DiscoveryResult => {\n const { assumptions } = validate(input)\n const human = input.ambiguities.filter((ambiguity) => ambiguity.material)\n const decisionLog: DiscoveryDecisionLogEntry[] = input.ambiguities.map((ambiguity) => {\n if (ambiguity.material) return { ambiguityId: ambiguity.id, kind: 'human-decision-required', detail: `Recommendation: ${ambiguity.recommendedOptionId}.` }\n const assumption = assumptions.get(ambiguity.assumptionId as string)!\n return { ambiguityId: ambiguity.id, kind: 'approved-assumption', detail: assumption.resolution, policyId: assumption.policyId }\n })\n const base = {\n version: 1 as const,\n issueId: input.issueId,\n sourceRevision: input.sourceRevision,\n contractHash: input.contractHash,\n ...(input.contextHash ? { contextHash: input.contextHash } : {}),\n status: human.length ? 'awaiting-decision' as const : 'ready' as const,\n ...(human.length ? { packet: {\n issueId: input.issueId,\n contractHash: input.contractHash,\n sourceRevision: input.sourceRevision,\n ...(input.contextHash ? { contextHash: input.contextHash } : {}),\n decisions: human.map((ambiguity) => ({ id: ambiguity.id, question: ambiguity.question, options: ambiguity.options, recommendedOptionId: ambiguity.recommendedOptionId })),\n } } : {}),\n decisionLog,\n }\n return { ...base, digest: digest(base) }\n}\n\nexport const isDiscoveryCurrent = (result: DiscoveryResult, current: DiscoveryCurrentInput): DiscoveryCurrentResult => {\n const reasons: ('source' | 'contract' | 'context')[] = []\n if (result.sourceRevision !== current.sourceRevision) reasons.push('source')\n if (result.contractHash !== current.contractHash) reasons.push('contract')\n if ((result.contextHash ?? '') !== (current.contextHash ?? '')) reasons.push('context')\n return { current: reasons.length === 0, reasons }\n}\n","import { fail } from './errors.js'\n\nexport const WIP_STATES = ['ready', 'implementing', 'blocked', 'awaiting-decision', 'awaiting-acceptance', 'done', 'cancelled'] as const\nexport type WipState = typeof WIP_STATES[number]\n\nexport interface WipEntry {\n readonly issueId: string\n readonly state: WipState\n}\n\nexport interface WipAssessmentInput {\n readonly entries: readonly WipEntry[]\n readonly candidate: { readonly issueId: string; readonly kind: 'new' | 'resume' }\n readonly maxInFlight?: number\n}\n\nexport interface WipAssessment {\n readonly decision: 'admit' | 'hold'\n readonly inFlight: readonly WipEntry[]\n readonly counts: Readonly<Record<WipState, number>>\n readonly reason: string\n}\n\nconst terminal = new Set<WipState>(['done', 'cancelled'])\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const assessWip = ({ entries, candidate, maxInFlight = 3 }: WipAssessmentInput): WipAssessment => {\n if (!Array.isArray(entries)) fail('entries must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(maxInFlight) || maxInFlight < 1) fail('maxInFlight must be a positive integer.', 'INVALID_INPUT')\n const candidateId = required(candidate.issueId, 'candidate.issueId')\n if (candidate.kind !== 'new' && candidate.kind !== 'resume') fail('candidate.kind must be new or resume.', 'INVALID_INPUT')\n const ids = new Set<string>()\n const counts = Object.fromEntries(WIP_STATES.map((state) => [state, 0])) as Record<WipState, number>\n for (const entry of entries) {\n const id = required(entry.issueId, 'entry.issueId')\n if (ids.has(id)) fail('entry issueIds must be unique.', 'INVALID_INPUT')\n ids.add(id)\n if (!WIP_STATES.includes(entry.state)) fail(`Unknown WIP state: ${entry.state}.`, 'INVALID_INPUT')\n counts[entry.state] += 1\n }\n const inFlight = entries.filter((entry) => !terminal.has(entry.state))\n const existing = entries.find((entry) => entry.issueId === candidateId)\n if (candidate.kind === 'resume') {\n if (!existing || terminal.has(existing.state)) return { decision: 'hold', inFlight, counts, reason: 'A resume requires an existing non-terminal issue.' }\n return { decision: 'admit', inFlight, counts, reason: 'A resume keeps its existing WIP reservation and takes priority over new work.' }\n }\n if (existing) return { decision: 'hold', inFlight, counts, reason: 'A new admission cannot reuse an existing issue id.' }\n if (inFlight.length >= maxInFlight) return { decision: 'hold', inFlight, counts, reason: `WIP limit ${maxInFlight} reached; blocked and awaiting-human work still count.` }\n return { decision: 'admit', inFlight, counts, reason: `WIP slot available (${inFlight.length}/${maxInFlight}).` }\n}\n","import { fail } from './errors.js'\n\nexport interface RuntimeExperimentCandidate {\n readonly runtime: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly provider: string\n readonly model: string\n readonly configurationHash: string\n readonly hardGatesPassed: boolean\n readonly humanMinutes: number\n readonly durationMs: number\n readonly cost: number\n}\n\nexport interface RuntimeExperimentResult {\n readonly decision: 'selected' | 'blocked'\n readonly selected?: RuntimeExperimentCandidate\n readonly eligible: readonly RuntimeExperimentCandidate[]\n readonly reason: string\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst comparable = (candidate: RuntimeExperimentCandidate, baseline: RuntimeExperimentCandidate): void => {\n for (const key of ['sourceRevision', 'contractHash', 'provider', 'model', 'configurationHash'] as const) {\n if (candidate[key] !== baseline[key]) fail(`Candidates must share ${key}.`, 'INVALID_INPUT')\n }\n}\n\nexport const selectRuntime = (candidates: readonly RuntimeExperimentCandidate[]): RuntimeExperimentResult => {\n if (!Array.isArray(candidates) || candidates.length < 2) fail('At least two runtime candidates are required.', 'INVALID_INPUT')\n const names = new Set<string>()\n for (const candidate of candidates) {\n const runtime = required(candidate.runtime, 'candidate.runtime')\n if (names.has(runtime)) fail('candidate.runtime values must be unique.', 'INVALID_INPUT')\n names.add(runtime)\n for (const key of ['sourceRevision', 'contractHash', 'provider', 'model', 'configurationHash'] as const) required(candidate[key], `candidate.${key}`)\n for (const key of ['humanMinutes', 'durationMs', 'cost'] as const) if (!Number.isFinite(candidate[key]) || candidate[key] < 0) fail(`candidate.${key} must be a non-negative number.`, 'INVALID_INPUT')\n comparable(candidate, candidates[0]!)\n }\n const eligible = candidates.filter((candidate) => candidate.hardGatesPassed)\n if (!eligible.length) return { decision: 'blocked', eligible, reason: 'No runtime passed every hard gate.' }\n const selected = [...eligible].sort((left, right) => left.humanMinutes - right.humanMinutes || left.durationMs - right.durationMs || left.cost - right.cost || (left.runtime === 'orca' ? -1 : right.runtime === 'orca' ? 1 : left.runtime.localeCompare(right.runtime)))[0]\n return { decision: 'selected', selected, eligible, reason: 'Selected by human minutes, duration, cost, then Orca tie-break.' }\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport type CriterionStatus = 'passed' | 'failed' | 'pending' | 'not-applicable'\nexport interface GateCriterion { readonly id: string; readonly gate: 'G2' | 'G3' | 'G4' | 'G5'; readonly status: CriterionStatus; readonly reason?: string }\nexport interface GateBinding { readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string }\nexport interface GateAssessment { readonly gate: 'G2' | 'G3' | 'G4' | 'G5'; readonly decision: 'approved' | 'blocked' | 'awaiting-acceptance'; readonly reasons: readonly string[]; readonly binding: GateBinding; readonly digest: string }\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst criteriaFor = (criteria: readonly GateCriterion[], gate: GateCriterion['gate']): readonly GateCriterion[] => {\n if (!Array.isArray(criteria)) fail('criteria must be an array.', 'INVALID_INPUT')\n const ids = new Set<string>()\n for (const criterion of criteria) {\n const id = required(criterion.id, 'criterion.id')\n if (ids.has(id)) fail('criterion ids must be unique.', 'INVALID_INPUT')\n ids.add(id)\n if (!['G2', 'G3', 'G4', 'G5'].includes(criterion.gate)) fail('criterion.gate is invalid.', 'INVALID_INPUT')\n if (!['passed', 'failed', 'pending', 'not-applicable'].includes(criterion.status)) fail('criterion.status is invalid.', 'INVALID_INPUT')\n if (criterion.status === 'not-applicable' && !criterion.reason?.trim()) fail('not-applicable criteria require a reason.', 'INVALID_INPUT')\n }\n return criteria.filter((criterion) => criterion.gate === gate)\n}\n\nconst binding = (value: GateBinding): GateBinding => ({ candidateRevision: required(value.candidateRevision, 'binding.candidateRevision'), contractHash: required(value.contractHash, 'binding.contractHash'), configHash: required(value.configHash, 'binding.configHash') })\nconst assessed = (gate: GateAssessment['gate'], decision: GateAssessment['decision'], reasons: readonly string[], current: GateBinding): GateAssessment => {\n const base = { gate, decision, reasons, binding: binding(current) }\n return { ...base, digest: hashJson(base) }\n}\n\nexport const assessPreflight = ({ criteria, repairAttempts = 0, implementerId, reviewerId, reviewKind, reviewApproved, binding: current }: { readonly criteria: readonly GateCriterion[]; readonly repairAttempts?: number; readonly implementerId: string; readonly reviewerId?: string; readonly reviewKind?: 'adversarial'; readonly reviewApproved: boolean; readonly binding: GateBinding }): GateAssessment => {\n required(implementerId, 'implementerId')\n if (!Number.isInteger(repairAttempts) || repairAttempts < 0) fail('repairAttempts must be a non-negative integer.', 'INVALID_INPUT')\n const g2 = criteriaFor(criteria, 'G2')\n const reasons = [\n ...(g2.length ? [] : ['No G2 criteria are defined.']),\n ...g2.filter((criterion) => criterion.status === 'failed' || criterion.status === 'pending').map((criterion) => `${criterion.id} is ${criterion.status}.`),\n ...(reviewApproved && reviewerId && reviewerId !== implementerId && reviewKind === 'adversarial' ? [] : ['An approved adversarial review by a reviewer different from the implementer is required.']),\n ...(repairAttempts <= 2 ? [] : ['The two-repair limit was exceeded; preserve diagnostics and return blocked.']),\n ]\n return assessed('G2', reasons.length ? 'blocked' : 'approved', reasons, current)\n}\n\nexport interface PullRequestDraft {\n readonly issueId: string\n readonly candidateRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly g2Digest: string\n readonly evidence: readonly string[]\n readonly documentation: readonly string[]\n readonly risk: string\n readonly rollback: string\n readonly pendingCriteria: readonly string[]\n}\n\nexport const composePullRequest = ({ draft, g2, remote }: { readonly draft: PullRequestDraft; readonly g2: GateAssessment; readonly remote?: { readonly state: 'missing' | 'confirmed' | 'uncertain'; readonly url?: string; readonly candidateRevision?: string } }): { readonly decision: 'create' | 'reuse' | 'blocked'; readonly body?: string; readonly reason: string; readonly idempotencyKey: string } => {\n for (const [label, value] of Object.entries({ issueId: draft.issueId, candidateRevision: draft.candidateRevision, contractHash: draft.contractHash, configHash: draft.configHash, g2Digest: draft.g2Digest, risk: draft.risk, rollback: draft.rollback })) required(value, `draft.${label}`)\n if (g2.gate !== 'G2' || g2.decision !== 'approved' || g2.digest !== draft.g2Digest || g2.binding.candidateRevision !== draft.candidateRevision || g2.binding.contractHash !== draft.contractHash || g2.binding.configHash !== draft.configHash) return { decision: 'blocked', reason: 'A current approved G2 assessment is required before a PR can be created.', idempotencyKey: hashJson(draft) }\n const idempotencyKey = hashJson({ issueId: draft.issueId, contractHash: draft.contractHash, action: 'pull-request', revision: draft.candidateRevision })\n if (remote?.state === 'uncertain') return { decision: 'blocked', reason: 'Remote PR state is uncertain; reconcile before retrying.', idempotencyKey }\n if (remote?.state === 'confirmed') {\n if (remote.candidateRevision !== draft.candidateRevision || !remote.url) return { decision: 'blocked', reason: 'Confirmed remote PR does not match the candidate revision.', idempotencyKey }\n return { decision: 'reuse', reason: 'The idempotent remote PR already exists for this candidate revision.', idempotencyKey }\n }\n const body = [`## Contract`, `- Issue: ${draft.issueId}`, `- Candidate: ${draft.candidateRevision}`, `- Contract: ${draft.contractHash}`, `- Configuration: ${draft.configHash}`, '', '## G2 evidence', ...draft.evidence.map((item) => `- ${item}`), '', '## Documentation', ...draft.documentation.map((item) => `- ${item}`), '', '## Risk and rollback', `- Risk: ${draft.risk}`, `- Rollback: ${draft.rollback}`, '', '## Later gates', ...(draft.pendingCriteria.length ? draft.pendingCriteria.map((item) => `- Pending: ${item}`) : ['- None.'])].join('\\n')\n return { decision: 'create', body, reason: 'G2 is current and the remote PR is absent.', idempotencyKey }\n}\n\nexport const assessIntegration = ({ g2, candidateRevision, evidenceRevision, contractHash, configHash, ci }: { readonly g2: GateAssessment; readonly candidateRevision: string; readonly evidenceRevision: string; readonly contractHash: string; readonly configHash: string; readonly ci: CriterionStatus }): GateAssessment => {\n required(candidateRevision, 'candidateRevision'); required(evidenceRevision, 'evidenceRevision')\n if (!['passed', 'failed', 'pending', 'not-applicable'].includes(ci)) fail('ci is invalid.', 'INVALID_INPUT')\n const reasons = [\n ...(g2.gate === 'G2' && g2.decision === 'approved' ? [] : ['G2 is not approved.']),\n ...(g2.binding.candidateRevision === candidateRevision && g2.binding.contractHash === contractHash && g2.binding.configHash === configHash ? [] : ['G2 is not bound to the current candidate, contract, and configuration.']),\n ...(candidateRevision === evidenceRevision ? [] : ['Candidate revision changed; G3 evidence must be revalidated.']),\n ...(ci === 'passed' ? [] : [`Integration CI is ${ci}.`]),\n ]\n return assessed('G3', reasons.length ? 'blocked' : 'approved', reasons, { candidateRevision, contractHash, configHash })\n}\n\nexport const assessWorktreeCleanup = ({ branch, candidateRevision, contractHash, configHash, remoteBranchRevision, remotePr, integration }: { readonly branch: string; readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string; readonly remoteBranchRevision?: string; readonly remotePr: 'confirmed' | 'missing' | 'uncertain'; readonly integration: GateAssessment }): { readonly decision: 'clean' | 'preserve'; readonly reason: string } => {\n required(branch, 'branch'); required(candidateRevision, 'candidateRevision')\n if (remotePr === 'uncertain') return { decision: 'preserve', reason: 'Remote PR state is uncertain; preserve the worktree for reconciliation.' }\n if (remotePr !== 'confirmed') return { decision: 'preserve', reason: 'No confirmed remote PR exists; preserve the worktree.' }\n if (remoteBranchRevision !== candidateRevision) return { decision: 'preserve', reason: 'Remote branch SHA does not match the candidate revision.' }\n if (integration.gate !== 'G3' || integration.decision !== 'approved') return { decision: 'preserve', reason: 'G3 is not approved.' }\n if (integration.binding.candidateRevision !== candidateRevision || integration.binding.contractHash !== contractHash || integration.binding.configHash !== configHash) return { decision: 'preserve', reason: 'G3 is not bound to the current candidate, contract, and configuration.' }\n return { decision: 'clean', reason: 'Remote branch, PR, and G3 evidence are confirmed for the candidate revision.' }\n}\n\nexport interface RepositoryProfile { readonly deploy: string; readonly rollback: string; readonly urls: readonly string[]; readonly featureFlag: string; readonly syntheticTenant: string; readonly observability: readonly string[]; readonly sensitivePaths: readonly string[]; readonly owners: readonly string[]; readonly approvedBy: string }\n\nconst profileReasons = (profile: RepositoryProfile): readonly string[] => Object.entries(profile).flatMap(([key, value]) => Array.isArray(value) ? value.length ? [] : [`RepositoryProfile.${key} is required.`] : typeof value === 'string' && value.trim() ? [] : [`RepositoryProfile.${key} is required.`])\n\nexport interface ProductionEvidence { readonly tenant: string; readonly realFlow: string; readonly logs: readonly string[]; readonly metrics: readonly string[] }\n\nexport const assessProduction = ({ profile, integration, artifact, isolated, acceptanceArtifact, lowRisk = true, observationMinutes, technicalPassed, evidence, containmentPreauthorized, containmentAction, linkedDefect }: { readonly profile: RepositoryProfile; readonly integration: GateAssessment; readonly artifact: string; readonly isolated: boolean; readonly acceptanceArtifact?: string; readonly lowRisk?: boolean; readonly observationMinutes: number; readonly technicalPassed: boolean; readonly evidence: ProductionEvidence; readonly containmentPreauthorized: boolean; readonly containmentAction?: string; readonly linkedDefect?: string }): GateAssessment => {\n required(artifact, 'artifact')\n if (!Number.isFinite(observationMinutes) || observationMinutes < 0) fail('observationMinutes must be non-negative.', 'INVALID_INPUT')\n const evidenceReasons = [required(evidence.tenant, 'evidence.tenant'), required(evidence.realFlow, 'evidence.realFlow'), ...(Array.isArray(evidence.logs) && evidence.logs.length ? [] : ['Production evidence requires logs.']), ...(Array.isArray(evidence.metrics) && evidence.metrics.length ? [] : ['Production evidence requires metrics.'])].filter((item) => item.startsWith('Production evidence'))\n const reasons = [\n ...profileReasons(profile),\n ...(integration.gate === 'G3' && integration.decision === 'approved' ? [] : ['G3 is not approved.']),\n ...evidenceReasons,\n ...(isolated || acceptanceArtifact === artifact ? [] : ['Exposure requires isolation or acceptance linked to this artifact version.']),\n ...(technicalPassed ? [] : [containmentPreauthorized && containmentAction?.trim() && linkedDefect?.trim() ? 'Technical validation failed; pre-authorized containment and linked defect are recorded.' : containmentPreauthorized ? 'Technical validation failed; containment action and linked defect are required.' : 'Technical validation failed.']),\n ...(lowRisk && observationMinutes < 15 ? ['Low-risk production validation requires a 15-minute observation window.'] : []),\n ]\n return assessed('G4', reasons.length ? 'blocked' : 'approved', reasons, integration.binding)\n}\n\nexport const assessAcceptance = ({ production, acceptanceRequired, accepted, notApplicableReason, materialChange }: { readonly production: GateAssessment; readonly acceptanceRequired: boolean; readonly accepted: boolean; readonly notApplicableReason?: string; readonly materialChange: boolean }): GateAssessment => {\n const reasons = [\n ...(production.gate === 'G4' && production.decision === 'approved' ? [] : ['G4 is not approved.']),\n ...(materialChange ? ['A material change invalidated acceptance; return to the affected gate.'] : []),\n ]\n if (reasons.length) return assessed('G5', 'blocked', reasons, production.binding)\n if (acceptanceRequired && !accepted) return assessed('G5', 'awaiting-acceptance', ['Business or UX acceptance is still required.'], production.binding)\n if (!acceptanceRequired && !notApplicableReason?.trim()) return assessed('G5', 'blocked', ['Acceptance marked not applicable requires a contractual reason.'], production.binding)\n return assessed('G5', 'approved', acceptanceRequired ? [] : [`Acceptance is not applicable: ${notApplicableReason}.`], production.binding)\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport interface PilotEntry {\n readonly issueId: string\n readonly classification: 'normal' | 'incident' | 'sensitive'\n readonly status: 'included' | 'excluded' | 'aborted'\n readonly reason?: string\n}\n\nexport interface PilotManifest {\n readonly policyHash: string\n readonly baselineReference: string\n readonly entries: readonly PilotEntry[]\n}\n\nexport interface PilotAssessment {\n readonly decision: 'ready' | 'blocked'\n readonly included: readonly string[]\n readonly reasons: readonly string[]\n readonly digest: string\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const assessPilot = (manifest: PilotManifest): PilotAssessment => {\n required(manifest.policyHash, 'policyHash'); required(manifest.baselineReference, 'baselineReference')\n if (!Array.isArray(manifest.entries)) fail('entries must be an array.', 'INVALID_INPUT')\n const ids = new Set<string>()\n const reasons: string[] = []\n const included: string[] = []\n for (const entry of manifest.entries) {\n const issueId = required(entry.issueId, 'entry.issueId')\n if (ids.has(issueId)) fail('entry issueIds must be unique; an issue cannot be substituted in the same pilot.', 'INVALID_INPUT')\n ids.add(issueId)\n if (!['normal', 'incident', 'sensitive'].includes(entry.classification)) fail('entry.classification is invalid.', 'INVALID_INPUT')\n if (!['included', 'excluded', 'aborted'].includes(entry.status)) fail('entry.status is invalid.', 'INVALID_INPUT')\n if (entry.status !== 'included' && !entry.reason?.trim()) reasons.push(`${issueId} is ${entry.status} without an auditable reason.`)\n if (entry.status === 'included') {\n included.push(issueId)\n if (entry.classification !== 'normal') reasons.push(`${issueId} is ${entry.classification}; only normal issues can enter the pilot.`)\n }\n }\n if (included.length !== 10) reasons.push(`Pilot requires exactly 10 included issues; found ${included.length}.`)\n const base = { decision: reasons.length ? 'blocked' as const : 'ready' as const, included, reasons }\n return { ...base, digest: hashJson({ ...manifest, ...base }) }\n}\n","import { createHash } from 'node:crypto'\nimport { fail } from './errors.js'\n\nexport const IMPROVEMENT_CYCLE_STEPS = ['adversarial-review', 'g2-preflight', 'baseline-record', 'pilot-execution', 'comparison'] as const\nexport type ImprovementCycleStep = typeof IMPROVEMENT_CYCLE_STEPS[number]\nexport type CycleStepStatus = 'passed' | 'failed' | 'blocked' | 'pending'\n\nexport interface CycleStepResult {\n readonly step: ImprovementCycleStep\n readonly status: CycleStepStatus\n readonly reason?: string\n}\n\nexport interface CycleIterationMetrics {\n readonly durationMs?: number\n readonly humanMinutes?: number\n readonly attempts?: number\n readonly escapedIncomplete?: number\n}\n\nexport interface ImprovementCycleIteration {\n readonly iteration: number\n readonly steps: readonly CycleStepResult[]\n readonly adjustment?: string\n readonly metrics?: CycleIterationMetrics\n}\n\nexport interface ImprovementCycleInput {\n readonly cycleId: string\n readonly maxIterations: number\n readonly iterations: readonly ImprovementCycleIteration[]\n}\n\nexport interface CycleMatrixRow {\n readonly iteration: number\n readonly passedSteps: number\n readonly totalSteps: number\n readonly passRate: number\n readonly statuses: Readonly<Record<ImprovementCycleStep, CycleStepStatus>>\n readonly adjustment?: string\n readonly metrics?: CycleIterationMetrics\n}\n\nexport interface ImprovementCycleAssessment {\n readonly type: 'agentskit-harness-improvement-cycle'\n readonly cycleId: string\n readonly decision: 'complete' | 'repeat' | 'blocked'\n readonly nextIteration?: number\n readonly reasons: readonly string[]\n readonly matrix: readonly CycleMatrixRow[]\n readonly digest: string\n}\n\nconst nonEmpty = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) return fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst validateMetrics = (metrics: CycleIterationMetrics | undefined, index: number): CycleIterationMetrics | undefined => {\n if (metrics === undefined) return undefined\n for (const [key, value] of Object.entries(metrics)) {\n if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || value < 0)) return fail(`iterations[${index}].metrics.${key} must be a non-negative number.`, 'INVALID_INPUT')\n }\n return metrics\n}\n\nconst validateIteration = (iteration: ImprovementCycleIteration, index: number): ImprovementCycleIteration => {\n if (typeof iteration !== 'object' || iteration === null || Array.isArray(iteration)) return fail(`iterations[${index}] must be an object.`, 'INVALID_INPUT')\n if (!Number.isInteger(iteration.iteration) || iteration.iteration < 1) return fail(`iterations[${index}].iteration must be a positive integer.`, 'INVALID_INPUT')\n if (!Array.isArray(iteration.steps) || iteration.steps.length !== IMPROVEMENT_CYCLE_STEPS.length) return fail(`iterations[${index}].steps must contain the five cycle steps exactly once, in order.`, 'INVALID_INPUT')\n iteration.steps.forEach((result, stepIndex) => {\n if (typeof result !== 'object' || result === null || Array.isArray(result)) return fail(`iterations[${index}].steps[${stepIndex}] must be an object.`, 'INVALID_INPUT')\n if (result.step !== IMPROVEMENT_CYCLE_STEPS[stepIndex]) return fail(`iterations[${index}].steps[${stepIndex}] must be ${IMPROVEMENT_CYCLE_STEPS[stepIndex]}.`, 'INVALID_INPUT')\n if (!['passed', 'failed', 'blocked', 'pending'].includes(result.status)) return fail(`iterations[${index}].steps[${stepIndex}].status is invalid.`, 'INVALID_INPUT')\n if (result.status !== 'passed' && !nonEmpty(result.reason, `iterations[${index}].steps[${stepIndex}].reason`)) return fail(`iterations[${index}].steps[${stepIndex}].reason is required when the step does not pass.`, 'INVALID_INPUT')\n })\n if (iteration.adjustment !== undefined) nonEmpty(iteration.adjustment, `iterations[${index}].adjustment`)\n return { ...iteration, metrics: validateMetrics(iteration.metrics, index) }\n}\n\nexport const assessImprovementCycle = (input: ImprovementCycleInput): ImprovementCycleAssessment => {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) return fail('cycle input must be an object.', 'INVALID_INPUT')\n const cycleId = nonEmpty(input.cycleId, 'cycleId')\n if (!Number.isInteger(input.maxIterations) || input.maxIterations < 1) return fail('maxIterations must be a positive integer.', 'INVALID_INPUT')\n if (!Array.isArray(input.iterations) || input.iterations.length < 1) return fail('iterations must be non-empty.', 'INVALID_INPUT')\n if (input.iterations.length > input.maxIterations) return fail('iterations cannot exceed maxIterations.', 'INVALID_INPUT')\n const iterations = input.iterations.map(validateIteration)\n iterations.forEach((iteration, index) => {\n if (iteration.iteration !== index + 1) return fail('iterations must be sequential and start at 1.', 'INVALID_INPUT')\n if (index > 0 && iterations[index - 1]?.steps.every((step) => step.status === 'passed')) return fail('a completed cycle cannot have later iterations.', 'INVALID_INPUT')\n if (index < iterations.length - 1 && !iteration.adjustment) return fail(`iterations[${index}].adjustment is required before repeating.`, 'INVALID_INPUT')\n })\n const matrix = iterations.map((iteration): CycleMatrixRow => {\n const statuses = Object.fromEntries(iteration.steps.map((step) => [step.step, step.status])) as Record<ImprovementCycleStep, CycleStepStatus>\n const passedSteps = iteration.steps.filter((step) => step.status === 'passed').length\n return { iteration: iteration.iteration, passedSteps, totalSteps: IMPROVEMENT_CYCLE_STEPS.length, passRate: Number((passedSteps / IMPROVEMENT_CYCLE_STEPS.length).toFixed(4)), statuses, ...(iteration.adjustment ? { adjustment: iteration.adjustment } : {}), ...(iteration.metrics ? { metrics: iteration.metrics } : {}) }\n })\n const latest = iterations[iterations.length - 1]!\n const complete = latest.steps.every((step) => step.status === 'passed')\n const reasons = complete ? ['All five cycle steps passed.'] : iterations.length >= input.maxIterations ? ['Maximum cycle iterations reached; human adjustment is required.'] : latest.adjustment ? ['A failed or blocked step remains; repeat with the recorded adjustment.'] : ['A failed or blocked step remains; an explicit adjustment is required before repeating.']\n const decision: ImprovementCycleAssessment['decision'] = complete ? 'complete' : iterations.length >= input.maxIterations || !latest.adjustment ? 'blocked' : 'repeat'\n const result = { type: 'agentskit-harness-improvement-cycle' as const, cycleId, decision, ...(decision === 'repeat' ? { nextIteration: latest.iteration + 1 } : {}), reasons, matrix }\n const digest = createHash('sha256').update(JSON.stringify(result)).digest('hex')\n return { ...result, digest }\n}\n","import { existsSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { fail } from './errors.js'\nimport { readJson, readRun } from './files.js'\nimport { RUN_STATES } from './types.js'\nimport type { BenchmarkBinding, MachineMetrics, RunState, VerificationRun } from './types.js'\n\nexport const BENCHMARK_SCHEMA_VERSION = 1 as const\n\nexport type BenchmarkObservationStatus = 'passed' | 'failed' | 'blocked' | 'not-run'\nexport type BenchmarkImprovementDirection = 'improved' | 'regressed' | 'unchanged' | 'unavailable'\n\nexport interface BenchmarkTask {\n readonly id: string\n readonly title: string\n readonly acceptanceCriteria: readonly string[]\n}\n\nexport interface BenchmarkObservation {\n readonly taskId: string\n readonly mode: 'baseline'\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nexport interface BenchmarkObservationEvidence {\n readonly criterion: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n}\n\nexport interface BenchmarkManifest {\n readonly type: 'agentskit-harness-benchmark-manifest'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly suiteId: string\n readonly name: string\n readonly tasks: readonly BenchmarkTask[]\n readonly observations: readonly BenchmarkObservation[]\n}\n\nexport interface BenchmarkRun {\n readonly runId: string\n readonly state: RunState\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly supersedes?: string\n readonly durationMs?: number\n readonly checks: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly outcomes: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly evidence: { readonly total: number; readonly attached: number }\n readonly escapedIncomplete?: number\n readonly humanApproved: boolean\n readonly humanReviewMinutes?: number\n readonly authorized: boolean\n readonly machine?: MachineMetrics\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface BenchmarkComparison {\n readonly taskId: string\n readonly title: string\n readonly comparability: 'comparable' | 'missing-baseline' | 'baseline-not-run' | 'baseline-evidence-missing' | 'harness-not-run' | 'harness-not-complete'\n readonly comparable: boolean\n readonly baseline?: BenchmarkObservation\n readonly baselineEvidenceCoverageRate: number | null\n readonly improvement: {\n readonly durationRate: number | null\n readonly duration: BenchmarkImprovementDirection\n readonly attemptsRate: number | null\n readonly attempts: BenchmarkImprovementDirection\n readonly reviewRate: number | null\n readonly review: BenchmarkImprovementDirection\n readonly escapedIncompleteRate: number | null\n readonly escapedIncomplete: BenchmarkImprovementDirection\n }\n readonly harness: {\n readonly attempts: number\n readonly latestState: RunState | 'NOT_RUN'\n readonly latestRunId?: string\n readonly latestDurationMs?: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly humanApproved: boolean\n readonly escapedIncomplete?: number\n readonly humanReviewMinutes?: number\n }\n readonly durationDeltaMs?: number\n readonly attemptDelta?: number\n readonly reviewDeltaMinutes?: number\n readonly escapedIncompleteDelta?: number\n}\n\nexport interface BenchmarkSummary {\n readonly totalRuns: number\n readonly stateCounts: Readonly<Record<RunState, number>>\n readonly completeRuns: number\n readonly retriedRuns: number\n readonly staleRuns: number\n readonly firstAttemptRuns: number\n readonly humanApprovedRuns: number\n readonly authorizedRuns: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly firstAttemptApprovalRate: number | null\n readonly retryRate: number | null\n readonly staleRate: number | null\n readonly averageDurationMs: number | null\n readonly medianDurationMs: number | null\n}\n\nexport interface BenchmarkReport {\n readonly type: 'agentskit-harness-benchmark'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly stateDir: string\n readonly generatedAt: string\n readonly runs: readonly BenchmarkRun[]\n readonly summary: BenchmarkSummary\n readonly manifest?: { readonly suiteId: string; readonly taskCount: number; readonly baselineCount: number; readonly comparableTaskCount: number }\n readonly comparisons: readonly BenchmarkComparison[]\n}\n\nexport interface BenchmarkObservationInput {\n readonly taskId: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt?: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nconst percentage = (part: number, total: number): number | null => total ? Number((part / total).toFixed(4)) : null\nconst improvementRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((baseline - current) / baseline).toFixed(4))\nconst improvementDirection = (rate: number | null): BenchmarkImprovementDirection => rate === null ? 'unavailable' : rate > 0 ? 'improved' : rate < 0 ? 'regressed' : 'unchanged'\nconst count = <T>(items: readonly T[], predicate: (item: T) => boolean): number => items.filter(predicate).length\nconst median = (values: readonly number[]): number | null => {\n if (!values.length) return null\n const sorted = [...values].sort((left, right) => left - right)\n const middle = Math.floor(sorted.length / 2)\n return sorted.length % 2 ? sorted[middle] ?? null : ((sorted[middle - 1] ?? 0) + (sorted[middle] ?? 0)) / 2\n}\nconst reviewMinutes = (run: VerificationRun): number | undefined => {\n if (!run.humanApproval) return undefined\n const reviewStart = run.transitions.find((transition) => transition.to === 'AWAITING_HUMAN_APPROVAL')?.at\n if (!reviewStart) return undefined\n const elapsed = Date.parse(run.humanApproval.at) - Date.parse(reviewStart)\n return Number.isFinite(elapsed) && elapsed >= 0 ? Number((elapsed / 60_000).toFixed(2)) : undefined\n}\n\nconst projectRun = (run: VerificationRun): BenchmarkRun => {\n const checks = { total: run.checks.length, passed: count(run.checks, (check) => check.status === 'passed'), failed: count(run.checks, (check) => check.status === 'failed') }\n const outcomes = { total: run.outcomes.length, passed: count(run.outcomes, (outcome) => outcome.status === 'passed'), failed: count(run.outcomes, (outcome) => outcome.status === 'failed') }\n const evidence = { total: run.checks.length, attached: count(run.checks, (check) => check.evidence !== undefined) }\n const humanReviewMinutes = reviewMinutes(run)\n const escapedIncomplete = run.state === 'COMPLETE' && checks.failed === 0 && outcomes.failed === 0 && evidence.attached === evidence.total ? 0 : undefined\n return { runId: run.runId, state: run.state, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, ...(run.supersedes ? { supersedes: run.supersedes } : {}), ...(run.metrics ? { durationMs: run.metrics.totalDurationMs } : {}), checks, outcomes, evidence, ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), humanApproved: run.humanApproval !== undefined, ...(humanReviewMinutes === undefined ? {} : { humanReviewMinutes }), authorized: run.authorization !== undefined, ...(run.metrics?.machine ? { machine: run.metrics.machine } : {}), ...(run.benchmark ? { benchmark: run.benchmark } : {}) }\n}\n\nconst summarize = (runs: readonly BenchmarkRun[]): BenchmarkSummary => {\n const stateCounts = Object.fromEntries(RUN_STATES.map((state) => [state, count(runs, (run) => run.state === state)])) as Record<RunState, number>\n const checksTotal = runs.reduce((total, run) => total + run.checks.total, 0)\n const checksPassed = runs.reduce((total, run) => total + run.checks.passed, 0)\n const outcomesTotal = runs.reduce((total, run) => total + run.outcomes.total, 0)\n const outcomesPassed = runs.reduce((total, run) => total + run.outcomes.passed, 0)\n const evidenceTotal = runs.reduce((total, run) => total + run.evidence.total, 0)\n const evidenceAttached = runs.reduce((total, run) => total + run.evidence.attached, 0)\n const firstAttempts = runs.filter((run) => !run.supersedes)\n const durations = runs.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n return {\n totalRuns: runs.length,\n stateCounts,\n completeRuns: stateCounts.COMPLETE,\n retriedRuns: count(runs, (run) => run.supersedes !== undefined),\n staleRuns: stateCounts.STALE,\n firstAttemptRuns: firstAttempts.length,\n humanApprovedRuns: count(runs, (run) => run.humanApproved),\n authorizedRuns: count(runs, (run) => run.authorized),\n checkPassRate: percentage(checksPassed, checksTotal),\n outcomePassRate: percentage(outcomesPassed, outcomesTotal),\n evidenceCoverageRate: percentage(evidenceAttached, evidenceTotal),\n firstAttemptApprovalRate: percentage(count(firstAttempts, (run) => run.humanApproved), firstAttempts.length),\n retryRate: percentage(count(runs, (run) => run.supersedes !== undefined), runs.length),\n staleRate: percentage(stateCounts.STALE, runs.length),\n averageDurationMs: durations.length ? Math.round(durations.reduce((total, duration) => total + duration, 0) / durations.length) : null,\n medianDurationMs: median(durations),\n }\n}\n\nconst readRuns = (stateDir: string): VerificationRun[] => {\n const runsDir = join(stateDir, 'runs')\n if (!existsSync(runsDir)) return []\n return readdirSync(runsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => {\n try {\n const candidate = readJson(join(runsDir, entry.name, 'run.json')) as { readonly type?: unknown }\n return candidate.type === 'agentskit-harness-run' ? readRun(stateDir, entry.name) : undefined\n } catch (error) { return fail(`Benchmark could not read run ${entry.name}: ${error instanceof Error ? error.message : String(error)}`, 'HARNESS_ERROR') }\n }).filter((run): run is VerificationRun => run !== undefined)\n}\n\nconst nonEmptyString = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return result\n}\n\nconst sha256 = (value: unknown, label: string): string | undefined => {\n if (value === undefined) return undefined\n const result = nonEmptyString(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) return fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_CONFIG')\n return result\n}\n\nconst stringList = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n const items = value as unknown[]\n if (!items.length || !items.every((item: unknown) => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => String(item).trim())\n}\n\nconst nonNegativeNumber = (value: unknown, label: string): number | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'number') return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n if (!Number.isFinite(value) || value < 0) return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n const result = value\n return result\n}\n\nconst nonNegativeInteger = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && !Number.isInteger(result)) return fail(`${label} must be an integer.`, 'INVALID_CONFIG')\n return result\n}\n\nconst timestamp = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (!Number.isFinite(Date.parse(result))) return fail(`${label} must be a valid timestamp.`, 'INVALID_CONFIG')\n return result\n}\n\nexport const validateBenchmarkManifest = (value: unknown): BenchmarkManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('benchmark manifest must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n if (raw['type'] !== 'agentskit-harness-benchmark-manifest' || raw['schemaVersion'] !== BENCHMARK_SCHEMA_VERSION) fail('benchmark manifest type or schemaVersion is invalid.', 'INVALID_CONFIG')\n const rawTasks = Array.isArray(raw['tasks']) && raw['tasks'].length ? raw['tasks'] : fail('benchmark manifest tasks must be non-empty.', 'INVALID_CONFIG')\n const tasks = rawTasks.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.tasks[${index}] must be an object.`, 'INVALID_CONFIG')\n const task = item as Record<string, unknown>\n return { id: nonEmptyString(task['id'], `benchmark.tasks[${index}].id`), title: nonEmptyString(task['title'], `benchmark.tasks[${index}].title`), acceptanceCriteria: stringList(task['acceptanceCriteria'], `benchmark.tasks[${index}].acceptanceCriteria`) }\n })\n if (new Set(tasks.map((task) => task.id)).size !== tasks.length) fail('benchmark task ids must be unique.', 'INVALID_CONFIG')\n const taskIds = new Set(tasks.map((task) => task.id))\n const rawObservations = raw['observations'] === undefined ? [] : Array.isArray(raw['observations']) ? raw['observations'] : fail('benchmark.observations must be an array.', 'INVALID_CONFIG')\n const observations = rawObservations.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}] must be an object.`, 'INVALID_CONFIG')\n const observation = item as Record<string, unknown>\n const status = observation['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(status))) fail(`benchmark.observations[${index}].status is invalid.`, 'INVALID_CONFIG')\n const taskId = nonEmptyString(observation['taskId'], `benchmark.observations[${index}].taskId`)\n if (!taskIds.has(taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const task = tasks.find((candidate) => candidate.id === taskId) ?? fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const attempts = nonNegativeInteger(observation['attempts'], `benchmark.observations[${index}].attempts`)\n const durationMs = nonNegativeNumber(observation['durationMs'], `benchmark.observations[${index}].durationMs`)\n const reviewMinutes = nonNegativeNumber(observation['reviewMinutes'], `benchmark.observations[${index}].reviewMinutes`)\n const escapedIncomplete = nonNegativeInteger(observation['escapedIncomplete'], `benchmark.observations[${index}].escapedIncomplete`)\n const evidenceDigest = sha256(observation['evidenceDigest'], `benchmark.observations[${index}].evidenceDigest`)\n const rawEvidence = observation['evidence'] === undefined ? undefined : Array.isArray(observation['evidence']) ? observation['evidence'] : fail(`benchmark.observations[${index}].evidence must be an array.`, 'INVALID_CONFIG')\n const evidence = rawEvidence?.map((item, evidenceIndex) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}] must be an object.`, 'INVALID_CONFIG')\n const entry = item as Record<string, unknown>\n const criterion = nonEmptyString(entry['criterion'], `benchmark.observations[${index}].evidence[${evidenceIndex}].criterion`)\n if (!task.acceptanceCriteria.includes(criterion)) fail(`benchmark evidence references unknown criterion: ${criterion}.`, 'INVALID_CONFIG')\n const evidenceStatus = entry['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(evidenceStatus))) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}].status is invalid.`, 'INVALID_CONFIG')\n return { criterion, status: evidenceStatus as BenchmarkObservationStatus, source: nonEmptyString(entry['source'], `benchmark.observations[${index}].evidence[${evidenceIndex}].source`) }\n })\n if (evidence && new Set(evidence.map((entry) => entry.criterion)).size !== evidence.length) fail(`benchmark.observations[${index}].evidence criteria must be unique.`, 'INVALID_CONFIG')\n return { taskId, mode: 'baseline' as const, status: status as BenchmarkObservationStatus, source: nonEmptyString(observation['source'], `benchmark.observations[${index}].source`), recordedAt: timestamp(observation['recordedAt'], `benchmark.observations[${index}].recordedAt`), ...(attempts === undefined ? {} : { attempts }), ...(durationMs === undefined ? {} : { durationMs }), ...(reviewMinutes === undefined ? {} : { reviewMinutes }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), ...(evidence === undefined ? {} : { evidence }), ...(evidenceDigest === undefined ? {} : { evidenceDigest }) }\n })\n if (new Set(observations.map((observation) => observation.taskId)).size !== observations.length) fail('benchmark allows at most one baseline observation per task.', 'INVALID_CONFIG')\n return { type: 'agentskit-harness-benchmark-manifest', schemaVersion: BENCHMARK_SCHEMA_VERSION, suiteId: nonEmptyString(raw['suiteId'], 'benchmark.suiteId'), name: nonEmptyString(raw['name'], 'benchmark.name'), tasks, observations }\n}\n\nexport const loadBenchmarkManifest = (path: string): BenchmarkManifest => {\n try { return validateBenchmarkManifest(JSON.parse(readFileSync(path, 'utf8')) as unknown) } catch (error) { if (error instanceof SyntaxError) return fail(`Invalid benchmark manifest JSON: ${error.message}`, 'INVALID_CONFIG'); throw error }\n}\n\nexport const recordBenchmarkObservation = (path: string, input: BenchmarkObservationInput): BenchmarkManifest => {\n const originalContent = readFileSync(path, 'utf8')\n const manifest = loadBenchmarkManifest(path)\n const taskId = nonEmptyString(input.taskId, 'benchmark observation.taskId')\n if (!manifest.tasks.some((task) => task.id === taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_INPUT')\n if (manifest.observations.some((observation) => observation.taskId === taskId)) fail(`benchmark already has an observation for task: ${taskId}.`, 'INVALID_INPUT')\n const observation = validateBenchmarkManifest({\n ...manifest,\n observations: [...manifest.observations, {\n taskId,\n mode: 'baseline',\n status: input.status,\n source: input.source,\n recordedAt: input.recordedAt ?? new Date().toISOString(),\n ...(input.attempts === undefined ? {} : { attempts: input.attempts }),\n ...(input.durationMs === undefined ? {} : { durationMs: input.durationMs }),\n ...(input.reviewMinutes === undefined ? {} : { reviewMinutes: input.reviewMinutes }),\n ...(input.escapedIncomplete === undefined ? {} : { escapedIncomplete: input.escapedIncomplete }),\n ...(input.evidence === undefined ? {} : { evidence: input.evidence }),\n ...(input.evidenceDigest === undefined ? {} : { evidenceDigest: input.evidenceDigest }),\n }],\n })\n const temporaryRoot = mkdtempSync(join(tmpdir(), 'agentskit-harness-baseline-'))\n const temporaryPath = join(temporaryRoot, 'manifest.json')\n try {\n writeFileSync(temporaryPath, `${JSON.stringify(observation, null, 2)}\\n`, 'utf8')\n if (readFileSync(path, 'utf8') !== originalContent) fail('benchmark manifest changed while recording an observation.', 'STALE')\n renameSync(temporaryPath, path)\n } finally {\n rmSync(temporaryRoot, { recursive: true, force: true })\n }\n return observation\n}\n\nconst comparisons = (runs: readonly BenchmarkRun[], manifest: BenchmarkManifest): readonly BenchmarkComparison[] => manifest.tasks.map((task) => {\n const taskRuns = runs.filter((run) => run.benchmark?.suiteId === manifest.suiteId && run.benchmark.taskId === task.id)\n const latest = taskRuns.at(-1)\n const baseline = manifest.observations.find((observation) => observation.taskId === task.id)\n const coveredCriteria = new Set((baseline?.evidence ?? []).map((entry) => entry.criterion))\n const baselineEvidenceCoverageRate = baseline ? percentage(coveredCriteria.size, task.acceptanceCriteria.length) : null\n const baselineEvidenceComplete = baselineEvidenceCoverageRate === 1\n const comparable = baseline !== undefined && baseline.status !== 'not-run' && baselineEvidenceComplete && latest?.state === 'COMPLETE'\n const comparability = comparable ? 'comparable' : baseline === undefined ? 'missing-baseline' : baseline.status === 'not-run' ? 'baseline-not-run' : !baselineEvidenceComplete ? 'baseline-evidence-missing' : latest === undefined ? 'harness-not-run' : 'harness-not-complete'\n const durationRate = comparable ? improvementRate(baseline?.durationMs, latest?.durationMs) : null\n const attemptsRate = comparable ? improvementRate(baseline?.attempts, taskRuns.length) : null\n const reviewRate = comparable ? improvementRate(baseline?.reviewMinutes, latest?.humanReviewMinutes) : null\n const escapedIncompleteRate = comparable ? improvementRate(baseline?.escapedIncomplete, latest?.escapedIncomplete) : null\n return { taskId: task.id, title: task.title, comparability, comparable, baselineEvidenceCoverageRate, improvement: { durationRate, duration: improvementDirection(durationRate), attemptsRate, attempts: improvementDirection(attemptsRate), reviewRate, review: improvementDirection(reviewRate), escapedIncompleteRate, escapedIncomplete: improvementDirection(escapedIncompleteRate) }, ...(baseline ? { baseline } : {}), harness: { attempts: taskRuns.length, latestState: latest?.state ?? 'NOT_RUN', ...(latest ? { latestRunId: latest.runId } : {}), ...(latest?.durationMs === undefined ? {} : { latestDurationMs: latest.durationMs }), checkPassRate: latest ? percentage(latest.checks.passed, latest.checks.total) : null, outcomePassRate: latest ? percentage(latest.outcomes.passed, latest.outcomes.total) : null, evidenceCoverageRate: latest ? percentage(latest.evidence.attached, latest.evidence.total) : null, ...(latest?.escapedIncomplete === undefined ? {} : { escapedIncomplete: latest.escapedIncomplete }), ...(latest?.humanReviewMinutes === undefined ? {} : { humanReviewMinutes: latest.humanReviewMinutes }), humanApproved: latest?.humanApproved ?? false }, ...(comparable && baseline?.durationMs !== undefined && latest?.durationMs !== undefined ? { durationDeltaMs: latest.durationMs - baseline.durationMs } : {}), ...(comparable && baseline?.attempts !== undefined ? { attemptDelta: taskRuns.length - baseline.attempts } : {}), ...(comparable && baseline?.reviewMinutes !== undefined && latest?.humanReviewMinutes !== undefined ? { reviewDeltaMinutes: latest.humanReviewMinutes - baseline.reviewMinutes } : {}), ...(comparable && baseline?.escapedIncomplete !== undefined && latest?.escapedIncomplete !== undefined ? { escapedIncompleteDelta: latest.escapedIncomplete - baseline.escapedIncomplete } : {}) }\n})\n\nexport const benchmarkRuns = (stateDir: string, manifest?: BenchmarkManifest): BenchmarkReport => {\n const runs = readRuns(stateDir).map(projectRun).sort((left, right) => left.runId.localeCompare(right.runId))\n const reportComparisons = manifest ? comparisons(runs, manifest) : []\n return { type: 'agentskit-harness-benchmark', schemaVersion: BENCHMARK_SCHEMA_VERSION, stateDir, generatedAt: new Date().toISOString(), runs, summary: summarize(runs), comparisons: reportComparisons, ...(manifest ? { manifest: { suiteId: manifest.suiteId, taskCount: manifest.tasks.length, baselineCount: manifest.observations.length, comparableTaskCount: reportComparisons.filter((comparison) => comparison.comparable).length } } : {}) }\n}\n","import { closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, appendFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport interface CoordinationIdentity {\n readonly tracker: string\n readonly repository: string\n readonly issue: string\n readonly worktree: string\n readonly branch: string\n}\n\nexport interface DispatchLease extends CoordinationIdentity {\n readonly key: string\n readonly leaseId: string\n readonly owner: string\n readonly claimedAt: string\n}\n\nexport interface ClaimResult {\n readonly decision: 'claimed' | 'already-claimed'\n readonly lease: DispatchLease\n}\n\nexport interface DispatchRecord extends DispatchLease {\n readonly action: 'dispatch' | 'release' | 'recover'\n readonly at: string\n readonly idempotencyKey?: string\n readonly commandDigest?: string\n readonly reason?: string\n}\n\nexport interface DispatchLedger {\n claim(identity: CoordinationIdentity & { readonly owner: string }): ClaimResult\n recordDispatch(input: { readonly lease: DispatchLease; readonly idempotencyKey: string; readonly commandDigest: string }): { readonly decision: 'recorded' | 'duplicate'; readonly record: DispatchRecord }\n release(lease: DispatchLease, reason?: string): DispatchRecord\n recover(key: string, input: { readonly actor: string; readonly maxAgeMs?: number; readonly reason: string }): DispatchRecord\n active(): readonly DispatchLease[]\n records(): readonly DispatchRecord[]\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst safeKey = (identity: CoordinationIdentity): string => hashJson(identity)\nconst now = (): string => new Date().toISOString()\n\nconst parse = (value: string, label: string): DispatchLease => {\n try {\n const raw = JSON.parse(value) as Record<string, unknown>\n const identity = {\n tracker: required(raw['tracker'] as string, `${label}.tracker`),\n repository: required(raw['repository'] as string, `${label}.repository`),\n issue: required(raw['issue'] as string, `${label}.issue`),\n worktree: required(raw['worktree'] as string, `${label}.worktree`),\n branch: required(raw['branch'] as string, `${label}.branch`),\n }\n return { ...identity, key: required(raw['key'] as string, `${label}.key`), leaseId: required(raw['leaseId'] as string, `${label}.leaseId`), owner: required(raw['owner'] as string, `${label}.owner`), claimedAt: required(raw['claimedAt'] as string, `${label}.claimedAt`) }\n } catch (error) {\n if (error instanceof SyntaxError) fail(`${label} contains invalid JSON.`, 'HARNESS_ERROR')\n throw error\n }\n}\n\nexport const createDispatchLedger = (stateDir: string): DispatchLedger => {\n const root = required(stateDir, 'stateDir')\n const claimsDir = join(root, 'coordination', 'claims')\n const ledgerPath = join(root, 'coordination', 'dispatch-ledger.ndjson')\n mkdirSync(claimsDir, { recursive: true })\n const claimPath = (key: string): string => join(claimsDir, `${key}.json`)\n const append = (record: DispatchRecord): void => appendFileSync(ledgerPath, `${JSON.stringify(record)}\\n`, 'utf8')\n\n const records = (): readonly DispatchRecord[] => {\n if (!existsSync(ledgerPath)) return []\n return readFileSync(ledgerPath, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return JSON.parse(line) as DispatchRecord } catch { return fail(`Dispatch ledger record ${index + 1} is invalid JSON.`, 'HARNESS_ERROR') }\n })\n }\n\n const active = (): readonly DispatchLease[] => {\n const byKey = new Map<string, DispatchLease>()\n for (const record of records()) {\n if (record.action === 'release' || record.action === 'recover') byKey.delete(record.key)\n else if (record.action === 'dispatch') byKey.set(record.key, record)\n }\n return [...byKey.values()]\n }\n\n return {\n claim: (input) => {\n const identity: CoordinationIdentity = {\n tracker: required(input.tracker, 'tracker'),\n repository: required(input.repository, 'repository'),\n issue: required(input.issue, 'issue'),\n worktree: required(input.worktree, 'worktree'),\n branch: required(input.branch, 'branch'),\n }\n const owner = required(input.owner, 'owner')\n const key = safeKey(identity)\n const path = claimPath(key)\n if (existsSync(path)) return { decision: 'already-claimed' as const, lease: parse(readFileSync(path, 'utf8'), 'claim') }\n const lease: DispatchLease = { ...identity, key, leaseId: randomUUID(), owner, claimedAt: now() }\n let fd: number\n try { fd = openSync(path, 'wx') } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') return { decision: 'already-claimed' as const, lease: parse(readFileSync(path, 'utf8'), 'claim') }; throw error }\n try { writeFileSync(fd, JSON.stringify(lease), 'utf8') } finally { closeSync(fd) }\n append({ ...lease, action: 'dispatch', at: lease.claimedAt })\n return { decision: 'claimed' as const, lease }\n },\n recordDispatch: ({ lease, idempotencyKey, commandDigest }) => {\n const id = required(idempotencyKey, 'idempotencyKey')\n const digest = required(commandDigest, 'commandDigest')\n const existing = records().find((record) => record.action === 'dispatch' && record.idempotencyKey === id)\n if (existing) return { decision: 'duplicate' as const, record: existing }\n const record: DispatchRecord = { ...lease, action: 'dispatch', at: now(), idempotencyKey: id, commandDigest: digest }\n append(record)\n return { decision: 'recorded' as const, record }\n },\n release: (lease, reason = 'lease released') => {\n const path = claimPath(required(lease.key, 'lease.key'))\n if (!existsSync(path)) fail('Dispatch lease is not active.', 'INVALID_STATE')\n const current = parse(readFileSync(path, 'utf8'), 'claim')\n if (current.leaseId !== lease.leaseId) fail('Dispatch lease owner does not match.', 'INVALID_STATE')\n unlinkSync(path)\n const record: DispatchRecord = { ...current, action: 'release', at: now(), reason: required(reason, 'reason') }\n append(record)\n return record\n },\n recover: (key, input) => {\n if (input.actor !== 'human') fail('Dispatch lease recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n const normalizedKey = required(key, 'key')\n const maxAgeMs = input.maxAgeMs ?? 300_000\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = claimPath(normalizedKey)\n if (!existsSync(path)) fail('Dispatch lease is not active.', 'INVALID_STATE')\n const current = parse(readFileSync(path, 'utf8'), 'claim')\n if (Date.now() - Date.parse(current.claimedAt) < maxAgeMs) fail('Dispatch lease is not old enough to recover.', 'HARNESS_ERROR')\n unlinkSync(path)\n const record: DispatchRecord = { ...current, action: 'recover', at: now(), reason: required(input.reason, 'reason') }\n append(record)\n return record\n },\n active,\n records,\n }\n}\n","import { basename, extname, dirname, join } from 'node:path'\nimport { fail } from './errors.js'\n\nexport interface ChangedFile {\n readonly path: string\n readonly status?: string\n}\n\nexport interface FilePreflightPlan {\n readonly files: readonly string[]\n readonly codeFiles: readonly string[]\n readonly testFiles: readonly string[]\n readonly docsOnly: boolean\n readonly checks: readonly ('lint' | 'typecheck' | 'test')[]\n}\n\nconst DOC_EXTENSIONS = new Set(['.md', '.mdx', '.txt', '.adoc', '.rst'])\nconst TEST_SUFFIXES = ['.test.', '.spec.', '__tests__']\nconst SHELL_META = /[;&|`$()<>\\n\\r]/\n\nconst normalizedPath = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty path.`, 'INVALID_INPUT')\n const path = value.trim().replaceAll('\\\\', '/')\n if (path.startsWith('/') || path.split('/').includes('..')) fail(`${label} must be repository-relative.`, 'INVALID_INPUT')\n return path\n}\n\nexport const validateSafeCommand = (command: string): { readonly valid: true; readonly command: string } => {\n if (typeof command !== 'string' || !command.trim()) fail('command must be a non-empty string.', 'INVALID_INPUT')\n const value = command.trim()\n if (SHELL_META.test(value)) fail('command contains shell metacharacters; use argv-based execution.', 'POLICY_BLOCKED')\n return { valid: true, command: value }\n}\n\nconst isTest = (path: string): boolean => TEST_SUFFIXES.some((suffix) => path.includes(suffix)) || /(^|\\/)(test|tests|__tests__)\\//.test(path)\nconst isDoc = (path: string): boolean => DOC_EXTENSIONS.has(extname(path).toLowerCase())\n\nexport const planFilePreflight = (files: readonly ChangedFile[], options: { readonly testRoots?: readonly string[]; readonly includeTests?: boolean } = {}): FilePreflightPlan => {\n if (!Array.isArray(files)) fail('files must be an array.', 'INVALID_INPUT')\n const unique = [...new Set(files.map((file, index) => normalizedPath(file.path, `files[${index}].path`)))].sort()\n const codeFiles = unique.filter((path) => !isDoc(path) && !isTest(path))\n const existingTests = unique.filter(isTest)\n const roots = (options.testRoots ?? ['test', 'tests', '__tests__']).map((root, index) => normalizedPath(root, `testRoots[${index}]`))\n const colocated = options.includeTests === false ? [] : codeFiles.flatMap((path) => {\n const file = basename(path)\n const directory = dirname(path)\n const stem = file.includes('.') ? file.slice(0, file.lastIndexOf('.')) : file\n return [join(directory, `${stem}.test.ts`), join(directory, `${stem}.spec.ts`)].filter((candidate) => unique.includes(candidate))\n })\n const testFiles = [...new Set([...existingTests, ...colocated, ...unique.filter((path) => roots.some((root) => path === root || path.startsWith(`${root}/`)))].sort())]\n const docsOnly = unique.length > 0 && codeFiles.length === 0 && existingTests.length === 0\n return { files: unique, codeFiles, testFiles, docsOnly, checks: docsOnly ? [] : ['lint', 'typecheck', ...(testFiles.length ? ['test' as const] : [])] }\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const BLOCK_STATUSES = ['todo', 'picked', 'development', 'validation', 'pr-open', 'merged', 'post-merge', 'done', 'blocked', 'scope-cut'] as const\nexport type BlockStatus = typeof BLOCK_STATUSES[number]\n\nexport interface BlockManifest {\n readonly schemaVersion: 1\n readonly id: string\n readonly title: string\n readonly tracker: string\n readonly repository: string\n readonly acceptanceCriteria: readonly string[]\n readonly dependencies: readonly string[]\n readonly wave: number\n readonly status: BlockStatus\n readonly budget?: { readonly maxMinutes?: number; readonly maxAttempts?: number }\n readonly humanGates?: readonly string[]\n readonly sourceHash?: string\n}\n\nexport interface BlockAssessment {\n readonly status: 'ready' | 'blocked'\n readonly manifestHash: string\n readonly blockers: readonly string[]\n readonly next: readonly string[]\n}\n\nconst text = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\nconst list = (value: unknown, label: string): readonly string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be an array of non-empty strings.`, 'INVALID_INPUT')\n if (!value.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be an array of non-empty strings.`, 'INVALID_INPUT')\n return [...new Set(value.map((item: string) => item.trim()))]\n}\n\nexport const validateBlockManifest = (value: unknown): BlockManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('block manifest must be an object.', 'INVALID_INPUT')\n const raw = value as Record<string, unknown>\n if (raw['schemaVersion'] !== 1) fail('block manifest schemaVersion must be 1.', 'INVALID_INPUT')\n const criteria = list(raw['acceptanceCriteria'], 'acceptanceCriteria')\n if (!criteria.length) fail('acceptanceCriteria must not be empty.', 'INVALID_INPUT')\n const dependencies = list(raw['dependencies'] ?? [], 'dependencies')\n const wave = raw['wave']\n if (!Number.isInteger(wave) || (wave as number) < 1) fail('wave must be a positive integer.', 'INVALID_INPUT')\n const status = raw['status']\n if (!(BLOCK_STATUSES as readonly unknown[]).includes(status)) fail('status is invalid.', 'INVALID_INPUT')\n const budgetRaw = raw['budget']\n let budget: BlockManifest['budget']\n if (budgetRaw !== undefined) {\n if (typeof budgetRaw !== 'object' || budgetRaw === null || Array.isArray(budgetRaw)) fail('budget must be an object.', 'INVALID_INPUT')\n const candidate = budgetRaw as Record<string, unknown>\n for (const key of ['maxMinutes', 'maxAttempts'] as const) if (candidate[key] !== undefined && (!Number.isInteger(candidate[key]) || (candidate[key] as number) < 1)) fail(`budget.${key} must be a positive integer.`, 'INVALID_INPUT')\n budget = { ...(candidate['maxMinutes'] === undefined ? {} : { maxMinutes: candidate['maxMinutes'] as number }), ...(candidate['maxAttempts'] === undefined ? {} : { maxAttempts: candidate['maxAttempts'] as number }) }\n }\n return { schemaVersion: 1, id: text(raw['id'], 'id'), title: text(raw['title'], 'title'), tracker: text(raw['tracker'], 'tracker'), repository: text(raw['repository'], 'repository'), acceptanceCriteria: criteria, dependencies, wave: wave as number, status: status as BlockStatus, ...(budget ? { budget } : {}), ...(raw['humanGates'] === undefined ? {} : { humanGates: list(raw['humanGates'], 'humanGates') }), ...(raw['sourceHash'] === undefined ? {} : { sourceHash: text(raw['sourceHash'], 'sourceHash') }) }\n}\n\nexport const assessBlock = (manifest: BlockManifest, completedDependencies: readonly string[] = []): BlockAssessment => {\n const value = validateBlockManifest(manifest)\n const completed = new Set(completedDependencies.map((item) => text(item, 'completedDependencies[]')))\n const blockers = value.dependencies.filter((dependency) => !completed.has(dependency))\n const next = blockers.length ? [`Complete dependencies: ${blockers.join(', ')}`] : value.status === 'blocked' ? ['Resolve the recorded blocker before dispatch.'] : ['Dispatch the block with the frozen acceptance criteria.']\n return { status: blockers.length || value.status === 'blocked' ? 'blocked' : 'ready', manifestHash: hashJson(value), blockers, next }\n}\n","import { createHash } from 'node:crypto'\nimport { fail } from './errors.js'\n\nexport const LEARNING_STATUSES = ['proposed', 'promoted', 'rejected'] as const\nexport type LearningStatus = typeof LEARNING_STATUSES[number]\n\nexport interface LearningRecord {\n readonly id: string\n readonly source: string\n readonly category: 'worked' | 'problem' | 'adjustment' | 'other'\n readonly text: string\n readonly status: LearningStatus\n readonly recordedAt: string\n}\n\nconst text = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\n\nconst category = (heading: string): LearningRecord['category'] => {\n const value = heading.toLowerCase()\n if (/went well|success|worked/.test(value)) return 'worked'\n if (/problem|failed|blocker|pain/.test(value)) return 'problem'\n if (/adjust|action|next|improv/.test(value)) return 'adjustment'\n return 'other'\n}\n\nexport const parseRetro = (markdown: string, source: string, recordedAt = new Date().toISOString()): readonly LearningRecord[] => {\n const input = text(markdown, 'markdown')\n const origin = text(source, 'source')\n if (!Number.isFinite(Date.parse(recordedAt))) fail('recordedAt must be a valid timestamp.', 'INVALID_INPUT')\n const records: LearningRecord[] = []\n let current: LearningRecord['category'] = 'other'\n for (const line of input.split(/\\r?\\n/)) {\n const heading = line.match(/^#{1,6}\\s+(.+)$/)\n if (heading) { current = category(heading[1] ?? ''); continue }\n const item = line.match(/^\\s*[-*]\\s+(?:\\[[ xX]\\]\\s+)?(.+?)\\s*$/)\n if (!item?.[1]?.trim()) continue\n const value = item[1].trim()\n const id = `L-${createHash('sha256').update(`${origin}|${current}|${value}`).digest('hex').slice(0, 12)}`\n if (!records.some((record) => record.id === id)) records.push({ id, source: origin, category: current, text: value, status: 'proposed', recordedAt })\n }\n return records\n}\n\nexport const promoteLearnings = (records: readonly LearningRecord[], input: { readonly actor: string; readonly ids: readonly string[]; readonly status?: 'promoted' | 'rejected' }): readonly LearningRecord[] => {\n if (input.actor !== 'human') fail('Learning promotion requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n const ids = new Set(input.ids.map((id) => text(id, 'ids[]')))\n const status = input.status ?? 'promoted'\n const result = records.map((record) => ids.has(record.id) ? { ...record, status } : record)\n const unknown = [...ids].filter((id) => !records.some((record) => record.id === id))\n if (unknown.length) fail(`Unknown learning IDs: ${unknown.join(', ')}`, 'INVALID_INPUT')\n return result\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\nimport type { BlockStatus } from './block.js'\nimport type { MachineMetrics } from './types.js'\n\nexport interface StatusBlock {\n readonly id: string\n readonly status: BlockStatus\n readonly owner?: string\n readonly issue?: string\n readonly branch?: string\n readonly revision?: string\n readonly blockers?: readonly string[]\n}\n\nexport interface StatusSnapshot {\n readonly schemaVersion: 1\n readonly generatedAt: string\n readonly sourceRevision: string\n readonly blocks: readonly StatusBlock[]\n readonly machine?: MachineMetrics\n readonly metrics?: Readonly<Record<string, number>>\n readonly next?: string\n readonly digest: string\n}\n\nconst required = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\n\nexport const createStatusSnapshot = (input: Omit<StatusSnapshot, 'schemaVersion' | 'digest'>): StatusSnapshot => {\n const sourceRevision = required(input.sourceRevision, 'sourceRevision')\n if (!Number.isFinite(Date.parse(input.generatedAt))) fail('generatedAt must be a valid timestamp.', 'INVALID_INPUT')\n if (!Array.isArray(input.blocks)) fail('blocks must be an array.', 'INVALID_INPUT')\n const blocks = input.blocks.map((block, index) => {\n if (typeof block !== 'object' || block === null || Array.isArray(block)) fail(`blocks[${index}] must be an object.`, 'INVALID_INPUT')\n const value = block as StatusBlock\n if (!(typeof value.id === 'string' && value.id.trim())) fail(`blocks[${index}].id is required.`, 'INVALID_INPUT')\n if (!['todo', 'picked', 'development', 'validation', 'pr-open', 'merged', 'post-merge', 'done', 'blocked', 'scope-cut'].includes(value.status)) fail(`blocks[${index}].status is invalid.`, 'INVALID_INPUT')\n return { ...value, id: value.id.trim() }\n }).sort((left, right) => left.id.localeCompare(right.id))\n if (input.metrics !== undefined && Object.entries(input.metrics).some(([key, value]) => !key.trim() || typeof value !== 'number' || !Number.isFinite(value) || value < 0)) fail('metrics must contain finite non-negative numbers.', 'INVALID_INPUT')\n const body = { schemaVersion: 1 as const, generatedAt: input.generatedAt, sourceRevision, blocks, ...(input.machine ? { machine: input.machine } : {}), ...(input.metrics ? { metrics: input.metrics } : {}), ...(input.next ? { next: required(input.next, 'next') } : {}) }\n return { ...body, digest: hashJson(body) }\n}\n\nexport const validateStatusSnapshot = (value: unknown): StatusSnapshot => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('status snapshot must be an object.', 'INVALID_INPUT')\n const raw = value as StatusSnapshot\n const snapshot = createStatusSnapshot({ generatedAt: required(raw.generatedAt, 'generatedAt'), sourceRevision: required(raw.sourceRevision, 'sourceRevision'), blocks: raw.blocks, ...(raw.machine ? { machine: raw.machine } : {}), ...(raw.metrics ? { metrics: raw.metrics } : {}), ...(raw.next ? { next: raw.next } : {}) })\n if (raw.schemaVersion !== 1 || raw.digest !== snapshot.digest) fail('status snapshot digest or schemaVersion is invalid.', 'HARNESS_ERROR')\n return snapshot\n}\n","import { createPrivateKey, createPublicKey, sign, verify } from 'node:crypto'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport { fileContents, loadLatestRun, pathInside, readJson } from './files.js'\nimport { sha256 } from './hash.js'\nimport { reconcileRun } from './verification.js'\nimport { FileEventStore } from './events.js'\nimport type { EventLogVerification } from './events.js'\nimport { loadConfig } from './config.js'\nimport type { VerificationRun } from './types.js'\n\nexport const EVIDENCE_BUNDLE_SCHEMA_VERSION = 1 as const\n\nexport interface EvidenceBundleFile {\n readonly path: string\n readonly sha256: string\n readonly contentBase64: string\n}\n\nexport interface EvidenceBundleSignature {\n readonly algorithm: 'ed25519'\n readonly keyId: string\n readonly publicKeyPem: string\n readonly signatureBase64: string\n}\n\nexport interface TrustedEvidenceKey {\n readonly keyId: string\n readonly publicKeyPem: string\n readonly status: 'active' | 'revoked'\n}\n\nexport interface EvidenceBundle {\n readonly type: 'agentskit-harness-evidence-bundle'\n readonly schemaVersion: typeof EVIDENCE_BUNDLE_SCHEMA_VERSION\n readonly runId: string\n readonly signerKeyId: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly verificationDigest: string\n readonly eventLog: EventLogVerification\n readonly files: readonly EvidenceBundleFile[]\n readonly payloadHash: string\n readonly signature: EvidenceBundleSignature\n}\n\nexport interface EvidenceBundleVerification {\n readonly status: 'verified'\n readonly runId: string\n readonly payloadHash: string\n readonly fileCount: number\n readonly signed: true\n}\n\nconst body = (bundle: EvidenceBundle): Omit<EvidenceBundle, 'payloadHash' | 'signature'> => {\n const { payloadHash: _payloadHash, signature: _signature, ...unsigned } = bundle\n return unsigned\n}\nconst parseBundle = (path: string): EvidenceBundle => {\n try { return JSON.parse(fileContents(path)) as EvidenceBundle } catch (error) { return fail(`Invalid evidence bundle JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT') }\n}\nconst validDigest = (value: unknown): value is string => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value)\nconst validKeyId = (value: unknown): value is string => typeof value === 'string' && /^[A-Za-z0-9._:-]{1,128}$/.test(value)\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst bundleFile = (stateDir: string, path: string): EvidenceBundleFile => {\n const absolute = resolve(stateDir, path)\n if (!pathInside(stateDir, absolute)) fail(`Evidence path escapes state directory: ${path}`, 'HARNESS_ERROR')\n const content = readFileSync(absolute)\n return { path: relative(stateDir, absolute).split(sep).join('/'), sha256: sha256(content), contentBase64: content.toString('base64') }\n}\n\nexport const exportEvidenceBundle = async ({ configPath, runId, outputPath, privateKeyPath, keyId }: { readonly configPath: string; readonly runId?: string; readonly outputPath: string; readonly privateKeyPath: string; readonly keyId: string }): Promise<EvidenceBundle> => {\n if (!validKeyId(keyId)) fail('keyId must contain only letters, numbers, dot, underscore, colon, or hyphen.', 'INVALID_INPUT')\n const loaded = loadConfig(configPath)\n const run = requireRun((runId ? readJson(join(loaded.stateDir, 'runs', runId, 'run.json')) : loadLatestRun(loaded.stateDir)) as VerificationRun | null)\n const reconciliation = await reconcileRun({ configPath, runId: run.runId })\n const digest = run.verificationDigest ?? fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n if (reconciliation.state !== 'COMPLETE') fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n const eventLog = new FileEventStore(loaded.stateDir)\n eventLog.read(run.runId)\n const eventVerification = eventLog.verify(run.runId)\n const paths = new Set(['runs/' + run.runId + '/run.json', 'runs/' + run.runId + '/events.ndjson'])\n for (const reference of run.evidenceReferences) { paths.add(reference.stdout); paths.add(reference.stderr) }\n const files = [...paths].map((path) => {\n if (!existsSync(resolve(loaded.stateDir, path))) fail(`Evidence file is missing: ${path}`, 'HARNESS_ERROR')\n return bundleFile(loaded.stateDir, path)\n })\n const privateKey = createPrivateKey(readFileSync(privateKeyPath))\n const unsigned = { type: 'agentskit-harness-evidence-bundle' as const, schemaVersion: EVIDENCE_BUNDLE_SCHEMA_VERSION, runId: run.runId, signerKeyId: keyId, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, verificationDigest: digest, eventLog: eventVerification, files }\n const payloadHash = sha256(JSON.stringify(unsigned))\n const publicKeyPem = createPublicKey(privateKey).export({ type: 'spki', format: 'pem' }).toString()\n const bundle = { ...unsigned, payloadHash, signature: { algorithm: 'ed25519' as const, keyId, publicKeyPem, signatureBase64: sign(null, Buffer.from(payloadHash), privateKey).toString('base64') } }\n writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\\n`, 'utf8')\n return bundle\n}\n\nexport const verifyEvidenceBundle = (path: string, { trustedKeys = [] }: { readonly trustedKeys?: readonly TrustedEvidenceKey[] } = {}): EvidenceBundleVerification => {\n const bundle = parseBundle(path)\n if (bundle.type !== 'agentskit-harness-evidence-bundle' || bundle.schemaVersion !== EVIDENCE_BUNDLE_SCHEMA_VERSION || !bundle.runId || !validKeyId(bundle.signerKeyId) || !validDigest(bundle.payloadHash) || bundle.signature?.algorithm !== 'ed25519' || bundle.signature.keyId !== bundle.signerKeyId || typeof bundle.signature.publicKeyPem !== 'string' || typeof bundle.signature.signatureBase64 !== 'string' || !Array.isArray(bundle.files)) fail('Evidence bundle metadata is invalid.', 'HARNESS_ERROR')\n if (trustedKeys.length) {\n const trusted = trustedKeys.find((key) => key.keyId === bundle.signerKeyId)\n if (!trusted) return fail(`Evidence bundle key is not trusted: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.status === 'revoked') fail(`Evidence bundle key is revoked: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.publicKeyPem !== bundle.signature.publicKeyPem) fail(`Evidence bundle key does not match trust store: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n }\n const paths = new Set<string>()\n for (const file of bundle.files) {\n if (!file || typeof file.path !== 'string' || paths.has(file.path) || !validDigest(file.sha256) || typeof file.contentBase64 !== 'string') fail('Evidence bundle file metadata is invalid.', 'HARNESS_ERROR')\n paths.add(file.path)\n const content = Buffer.from(file.contentBase64, 'base64')\n if (sha256(content) !== file.sha256) fail(`Evidence bundle file hash mismatch: ${file.path}`, 'HARNESS_ERROR')\n }\n if (!paths.has(`runs/${bundle.runId}/run.json`) || !paths.has(`runs/${bundle.runId}/events.ndjson`)) fail('Evidence bundle is missing the run projection or event log.', 'HARNESS_ERROR')\n if (sha256(JSON.stringify(body(bundle))) !== bundle.payloadHash) fail('Evidence bundle payload hash mismatch.', 'HARNESS_ERROR')\n let valid = false\n try { valid = verify(null, Buffer.from(bundle.payloadHash), createPublicKey(bundle.signature.publicKeyPem), Buffer.from(bundle.signature.signatureBase64, 'base64')) } catch { valid = false }\n if (!valid) fail('Evidence bundle signature is invalid.', 'HARNESS_ERROR')\n return { status: 'verified', runId: bundle.runId, payloadHash: bundle.payloadHash, fileCount: bundle.files.length, signed: true }\n}\n\nexport const readEvidenceTrustStore = (path: string): readonly TrustedEvidenceKey[] => {\n const value = readJson(path) as { readonly schemaVersion?: unknown; readonly keys?: unknown }\n if (value.schemaVersion !== 1 || !Array.isArray(value.keys)) fail('Evidence trust store must contain schemaVersion 1 and a keys array.', 'INVALID_INPUT')\n return (value.keys as readonly unknown[]).map((key: unknown, index: number) => {\n if (typeof key !== 'object' || key === null || Array.isArray(key) || !validKeyId((key as Record<string, unknown>)['keyId']) || typeof (key as Record<string, unknown>)['publicKeyPem'] !== 'string' || ((key as Record<string, unknown>)['status'] !== 'active' && (key as Record<string, unknown>)['status'] !== 'revoked')) fail(`Invalid evidence trust store key at index ${index}.`, 'INVALID_INPUT')\n return key as TrustedEvidenceKey\n })\n}\n","#!/usr/bin/env node\nimport { createHash } from 'node:crypto'\nimport { readFileSync } from 'node:fs'\nimport { Command } from 'commander'\nimport { approveRun, assessAcceptance, assessBlock, assessDiscovery, assessImprovementCycle, assessIntegration, assessPilot, assessPreflight, assessProduction, assessWip, assessWorktreeCleanup, authorizeRun, benchmarkRuns, cancelRun, cleanTaskArtifacts, composePullRequest, createDispatchLedger, createDocBridgeContextProvider, createStatusSnapshot, exportEvidenceBundle, loadBenchmarkManifest, loadConfig, loadLatestRun, parseRetro, planFilePreflight, planRun, readContextSnapshots, readEvidenceTrustStore, reconcileRun, recordBenchmarkObservation, retryRun, selectRuntime, startRun, validateBlockManifest, validateStatusSnapshot, verifyEvidenceBundle, verifyRun } from './index.js'\nimport type { BenchmarkObservationEvidence } from './metrics.js'\nimport { fail } from './errors.js'\nimport { FileEventStore, inspectEventLogLock, recoverEventLogLock } from './events.js'\n\ninterface CliOptions { readonly config: string; readonly json: boolean }\nconst packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as { readonly version: string }\nconst program = new Command()\nprogram.name('ak-harness').description('Portable, evidence-backed development harness for coding agents.').version(packageJson.version).option('-c, --config <path>', 'verification contract path', '.codex/verification.json').option('--json', 'emit machine-readable output')\nconst options = (): CliOptions => program.opts<CliOptions>()\nconst print = (value: unknown): void => { if (options().json) console.log(JSON.stringify(value)); else console.log(typeof value === 'string' ? value : JSON.stringify(value, null, 2)) }\nconst readBenchmarkEvidence = (path: string): { readonly evidence: readonly BenchmarkObservationEvidence[]; readonly digest: string } => {\n try {\n const content = readFileSync(path, 'utf8')\n const raw = JSON.parse(content) as unknown\n const evidence = Array.isArray(raw) ? raw : typeof raw === 'object' && raw !== null ? (raw as { readonly evidence?: unknown }).evidence : undefined\n if (Array.isArray(evidence)) return { evidence: evidence as BenchmarkObservationEvidence[], digest: createHash('sha256').update(content).digest('hex') }\n } catch (error) {\n fail(`Invalid benchmark evidence JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT')\n }\n return fail('benchmark evidence file must contain an array or an object with an evidence array.', 'INVALID_INPUT')\n}\nconst decisionArgs = (first: string, second: string | undefined): { readonly decision: string; readonly runId?: string } => {\n const decisions = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n return decisions.has(first) ? { decision: first, ...(second ? { runId: second } : {}) } : { decision: second ?? '', runId: first }\n}\nconst readJsonInput = (path: string, label: string): unknown => {\n try { return JSON.parse(readFileSync(path, 'utf8')) as unknown } catch (error) { return fail(`Invalid ${label} JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT') }\n}\nprogram.command('doctor').description('Validate the contract without starting a run.').action(() => print({ status: 'passed', criteria: ['package'], config: loadConfig(options().config).config }))\nprogram.command('plan <decision>').description('Approve the frozen task contract and create a planned run.').option('--by <actor>', 'approval actor', 'human').option('--allow-dirty', 'allow a human-authorized dirty worktree').option('--context-file <path>', 'attach a context snapshot JSON file').action(async (decision: string, command: { readonly by: string; readonly allowDirty?: boolean; readonly contextFile?: string }) => print(await planRun({ configPath: options().config, decision, actor: command.by, allowDirty: command.allowDirty ?? false, contextSnapshots: command.contextFile ? readContextSnapshots(command.contextFile) : [] })))\nconst context = program.command('context').description('Resolve portable, provenance-bearing context snapshots.')\ncontext.command('resolve <query>').description('Resolve a Doc Bridge snapshot from the local index.').option('--provider <provider>', 'context provider', 'doc-bridge').option('--scope <scope...>', 'optional search scopes').option('--index <path>', 'Doc Bridge index path', '.doc-bridge/index.json').action(async (query: string, command: { readonly provider: string; readonly scope?: readonly string[]; readonly index: string }) => {\n if (command.provider !== 'doc-bridge') fail(`Unsupported context provider: ${command.provider}`, 'INVALID_INPUT')\n const loaded = loadConfig(options().config)\n print(await createDocBridgeContextProvider({ root: loaded.root, indexPath: command.index }).resolve({ query, ...(command.scope?.length ? { scope: command.scope } : {}) }))\n})\nconst discovery = program.command('discovery').description('Assess a structured discovery result before implementation.')\ndiscovery.command('assess <input>').description('Emit Ready or a human decision packet from a discovery JSON file.').action((input: string) => print(assessDiscovery(readJsonInput(input, 'discovery input') as Parameters<typeof assessDiscovery>[0])))\nconst wip = program.command('wip').description('Assess deterministic WIP admission before starting work.')\nwip.command('assess <input>').description('Emit an admission decision from WIP ledger JSON.').action((input: string) => print(assessWip(readJsonInput(input, 'WIP input') as Parameters<typeof assessWip>[0])))\nconst experiment = program.command('experiment').description('Select a runtime only from a controlled, comparable experiment.')\nexperiment.command('select <input>').description('Select the eligible runtime from experiment JSON.').action((input: string) => print(selectRuntime(readJsonInput(input, 'experiment input') as Parameters<typeof selectRuntime>[0])))\nconst delivery = program.command('delivery').description('Assess deterministic G2–G5 gates and prepare idempotent PR handoff.')\ndelivery.command('preflight <input>').action((input: string) => print(assessPreflight(readJsonInput(input, 'preflight input') as Parameters<typeof assessPreflight>[0])))\ndelivery.command('pr <input>').action((input: string) => print(composePullRequest(readJsonInput(input, 'PR input') as Parameters<typeof composePullRequest>[0])))\ndelivery.command('integration <input>').action((input: string) => print(assessIntegration(readJsonInput(input, 'integration input') as Parameters<typeof assessIntegration>[0])))\ndelivery.command('production <input>').action((input: string) => print(assessProduction(readJsonInput(input, 'production input') as Parameters<typeof assessProduction>[0])))\ndelivery.command('acceptance <input>').action((input: string) => print(assessAcceptance(readJsonInput(input, 'acceptance input') as Parameters<typeof assessAcceptance>[0])))\ndelivery.command('cleanup <input>').action((input: string) => print(assessWorktreeCleanup(readJsonInput(input, 'cleanup input') as Parameters<typeof assessWorktreeCleanup>[0])))\nprogram.command('pilot <input>').description('Freeze and assess a ten-issue pilot cohort.').action((input: string) => print(assessPilot(readJsonInput(input, 'pilot input') as Parameters<typeof assessPilot>[0])))\nconst cycle = program.command('cycle').description('Run the five-step improvement cycle with explicit adjustment and bounded repetition.')\ncycle.command('assess <input>').description('Assess run → verify → adjust → repeat from a cycle JSON file.').action((input: string) => print(assessImprovementCycle(readJsonInput(input, 'cycle input') as Parameters<typeof assessImprovementCycle>[0])))\nconst block = program.command('block').description('Validate and assess a portable execution block manifest.')\nblock.command('validate <input>').action((input: string) => print(validateBlockManifest(readJsonInput(input, 'block manifest') as unknown)))\nblock.command('assess <input>').option('--completed <ids...>', 'completed dependency IDs').action((input: string, command: { readonly completed?: readonly string[] }) => print(assessBlock(readJsonInput(input, 'block manifest') as Parameters<typeof assessBlock>[0], command.completed ?? [])))\nconst preflight = program.command('preflight').description('Plan safe, file-scoped validation before commit.')\npreflight.command('files <input>').action((input: string) => print(planFilePreflight(readJsonInput(input, 'changed files') as Parameters<typeof planFilePreflight>[0])))\nconst status = program.command('snapshot <input>').description('Create or validate a deterministic status snapshot.')\nstatus.action((input: string) => print(createStatusSnapshot(readJsonInput(input, 'status input') as Parameters<typeof createStatusSnapshot>[0])))\nstatus.command('validate <input>').action((input: string) => print(validateStatusSnapshot(readJsonInput(input, 'status snapshot') as unknown)))\nconst learning = program.command('learning').description('Parse retrospectives into proposed learnings.')\nlearning.command('parse <input>').requiredOption('--source <source>').action((input: string, command: { readonly source: string }) => print(parseRetro(readFileSync(input, 'utf8'), command.source)))\nconst coordination = program.command('coordination').description('Manage idempotent issue/worktree claims and dispatch records.')\ncoordination.command('claim <input>').action((input: string) => { const loaded = loadConfig(options().config); print(createDispatchLedger(loaded.stateDir).claim(readJsonInput(input, 'coordination identity') as Parameters<ReturnType<typeof createDispatchLedger>['claim']>[0])) })\nprogram.command('start').description('Move a planned run into implementation.').action(() => print(startRun(loadConfig(options().config))))\nprogram.command('verify').description('Execute every configured check and record evidence.').action(async () => print(await verifyRun({ configPath: options().config })))\nprogram.command('run').description('Alias for verify, compatible with the common protocol.').action(async () => print(await verifyRun({ configPath: options().config })))\nprogram.command('approve <run-id-or-decision> [decision-or-run-id]').description('Record human approval or rejection. Accepts <run-id> <decision> or <decision> <run-id>.').option('--by <actor>', 'approval actor', 'human').action(async (first: string, second: string | undefined, command: { readonly by: string }) => { const args = decisionArgs(first, second); print(await approveRun({ configPath: options().config, ...args, actor: command.by })) })\nprogram.command('authorize <run-id-or-decision> [decision-or-run-id]').description('Authorize or reject declared external tracking. Accepts <run-id> <decision> or <decision> <run-id>.').option('--by <actor>', 'approval actor', 'human').action(async (first: string, second: string | undefined, command: { readonly by: string }) => { const args = decisionArgs(first, second); print(await authorizeRun({ configPath: options().config, ...args, actor: command.by })) })\nprogram.command('retry').description('Create a new implementation attempt after a blocked or stale run.').action(async () => print(await retryRun({ configPath: options().config })))\nprogram.command('cancel [run-id]').description('Cancel an active run.').option('--by <actor>', 'cancellation actor', 'human').option('--reason <reason>', 'cancellation reason', 'Run cancelled by a human.').action(async (runId: string | undefined, command: { readonly by: string; readonly reason: string }) => print(await cancelRun({ configPath: options().config, runId, reason: command.reason, actor: command.by })))\nprogram.command('status').description('Show the latest run after reconciling its audit evidence.').action(async () => { const loaded = loadConfig(options().config); print(loadLatestRun(loaded.stateDir) ? await reconcileRun({ configPath: options().config }) : { state: 'CLARIFYING', message: 'No run exists.' }) })\nprogram.command('audit [run-id]').description('Reconcile a run projection with its verified lifecycle decisions.').action(async (runId?: string) => print(await reconcileRun({ configPath: options().config, runId })))\nconst events = program.command('events').description('Inspect the lifecycle audit log.')\nevents.command('verify [run-id]').description('Verify the latest or selected event log hash chain.').action((runId?: string) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(new FileEventStore(loaded.stateDir).verify(selectedRunId)) })\nevents.command('lock [run-id]').description('Inspect the latest or selected event-log lock.').action((runId?: string) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(inspectEventLogLock(loaded.stateDir, selectedRunId)) })\nevents.command('unlock [run-id]').description('Recover an old event-log lock after confirming its owner is dead.').option('--by <actor>', 'recovery actor', 'human').option('--max-age-ms <milliseconds>', 'minimum lock age', (value) => Number(value), 300_000).action((runId: string | undefined, command: { readonly by: string; readonly maxAgeMs: number }) => { const loaded = loadConfig(options().config); const run = runId ? { runId } : loadLatestRun(loaded.stateDir); const selectedRunId = run?.runId ?? fail('No verification run exists.', 'NO_RUN'); print(recoverEventLogLock({ stateDir: loaded.stateDir, runId: selectedRunId, actor: command.by, maxAgeMs: command.maxAgeMs })) })\nevents.command('export [run-id]').description('Export a reconciled COMPLETE run as a signed evidence bundle.').requiredOption('--output <path>', 'bundle output path').requiredOption('--private-key <path>', 'Ed25519 private key path').requiredOption('--key-id <id>', 'stable signing key identity').action(async (runId: string | undefined, command: { readonly output: string; readonly privateKey: string; readonly keyId: string }) => print(await exportEvidenceBundle({ configPath: options().config, runId, outputPath: command.output, privateKeyPath: command.privateKey, keyId: command.keyId })))\nevents.command('verify-bundle <path>').description('Verify an exported signed evidence bundle independently.').option('--trusted-key-store <path>', 'JSON trust store with active or revoked public keys').action((path: string, command: { readonly trustedKeyStore?: string }) => print(verifyEvidenceBundle(path, { trustedKeys: command.trustedKeyStore ? readEvidenceTrustStore(command.trustedKeyStore) : [] })))\nconst benchmark = program.command('benchmark').description('Aggregate reproducible metrics from historical runs.').option('--manifest <path>', 'benchmark manifest for baseline comparison').action((command: { readonly manifest?: string }) => { const loaded = loadConfig(options().config); print(benchmarkRuns(loaded.stateDir, command.manifest ? loadBenchmarkManifest(command.manifest) : undefined)) })\nbenchmark.command('baseline <taskId>').description('Record one controlled baseline observation in a benchmark manifest.').option('--manifest <path>', 'benchmark manifest path').requiredOption('--status <status>', 'passed, failed, blocked, or not-run').requiredOption('--source <source>', 'baseline source or run reference').option('--evidence-file <path>', 'JSON file with criterion-level baseline evidence').option('--recorded-at <timestamp>', 'ISO-8601 timestamp').option('--attempts <count>', 'attempt count', (value) => Number(value)).option('--duration-ms <milliseconds>', 'duration in milliseconds', (value) => Number(value)).option('--review-minutes <minutes>', 'human review time in minutes', (value) => Number(value)).option('--escaped-incomplete <count>', 'incomplete deliveries discovered after handoff', (value) => Number(value)).action((taskId: string, command: { readonly manifest?: string; readonly status: string; readonly source: string; readonly evidenceFile?: string; readonly recordedAt?: string; readonly attempts?: number; readonly durationMs?: number; readonly reviewMinutes?: number; readonly escapedIncomplete?: number }, cliCommand: Command) => {\n const manifest = command.manifest ?? cliCommand.parent?.opts<{ readonly manifest?: string }>().manifest\n const manifestPath = manifest ?? fail('baseline requires --manifest <path>.', 'INVALID_INPUT')\n const status = ['passed', 'failed', 'blocked', 'not-run'].includes(command.status) ? command.status as 'passed' | 'failed' | 'blocked' | 'not-run' : fail('status must be passed, failed, blocked, or not-run.', 'INVALID_INPUT')\n const evidence = command.evidenceFile ? readBenchmarkEvidence(command.evidenceFile) : undefined\n print(recordBenchmarkObservation(manifestPath, { taskId, status, source: command.source, ...(evidence ? { evidence: evidence.evidence, evidenceDigest: evidence.digest } : {}), ...(command.recordedAt ? { recordedAt: command.recordedAt } : {}), ...(command.attempts === undefined ? {} : { attempts: command.attempts }), ...(command.durationMs === undefined ? {} : { durationMs: command.durationMs }), ...(command.reviewMinutes === undefined ? {} : { reviewMinutes: command.reviewMinutes }), ...(command.escapedIncomplete === undefined ? {} : { escapedIncomplete: command.escapedIncomplete }) }))\n})\nprogram.command('clean').description('Remove only configured task-owned temporary artifacts.').action(() => print(cleanTaskArtifacts(options().config)))\nprocess.on('SIGINT', () => { process.stderr.write('Cancelled.\\n'); process.exitCode = 130 })\ntry { await program.parseAsync(process.argv) } catch (error) { const value = error instanceof Error ? error : new Error(String(error)); process.stderr.write(`${'code' in value ? String(value.code) : 'HARNESS_ERROR'}: ${value.message}\\n`); process.exitCode = 'code' in value && value.code === 'INVALID_INPUT' ? 2 : 1 }\n"]}
|