Domain Model
Run
A run is a caller-selected local artifact directory for one canonical topology target, platform, evidence window, and report lifecycle. CLI --workspace means the requested analysis target. The adapter resolves its public workspace-topology contract; the topology root is the Git root when present and otherwise the requested standalone directory. run.runRef is relative to that topology root, so a repo-root render directory can safely anchor a member target. A coding agent session and a Harness run are different concepts.
Artifact
An artifact is an existing regular file beneath the canonical topology root. The checkpoint records its portable workspace: reference, media type, byte size, exact-byte digest, and detected native contract. V1 kinds are closed:
findings;report-markdown;report-html;canvas-data;canvas-module;report-source;component-snapshot;session-selection-profile; andsession-selection-snapshot.
Each kind appears at most once. Unknown run files are ignored, never assigned a generic semantic role. Adding another artifact kind requires V2. The top-level artifacts array is always emitted in the intake-table order below with absent optional kinds skipped; envelope validation rejects any other order.
Normative artifact intake
scripts/harness-analysis/checkpoint-adapter.mjs owns the closed intake registry and all native-contract dispatch. Creation uses exact run-root filenames for rendered outputs and exact CLI flags for supporting artifacts; it does not recursively scan the run. Media type is derived from kind, never sniffed or caller-supplied. contract is null for byte-only rows and the listed native \{ name, version \} for structured rows.
| Artifact kind | Intake | Presence | Media type | Validation and recorded contract at create | Anchor |
|---|