{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://eightarms.net/octopus-workflow/schemas/runs-index.schema.json", "title": "Tier 1 Run Artifact Index", "description": "Schema for runs/{slug}/index.json 鈥?the artifact manifest for a Tier 1 local structured run. This is the compact-recovery entry point after compaction (compact never deletes local files). Parallel to, not a replacement for, the Tier 2 '## 宸ヤ欢绱㈠紩' issue comment. Authoritative layout: templates/runs-layout.md. Boundary rule: rules/two-tier-artifacts.md.", "type": "object", "additionalProperties": false, "required": ["schema_version", "slug", "artifacts"], "properties": { "$schema": { "type": "string", "description": "Optional JSON Schema $self reference for editor validation." }, "schema_version": { "type": "integer", "const": 1, "description": "Index schema version." }, "slug": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$", "description": "Run slug; must match meta.json.slug." }, "artifacts": { "type": "array", "items": { "$ref": "#/$defs/artifact" }, "description": "One entry per Tier 1 artifact in this run. Tier 2 artifacts (Gitea issue comments, wiki pages, commit status, PRs) are NEVER listed here 鈥?this index is Tier 1 only." } }, "$defs": { "artifact": { "type": "object", "additionalProperties": false, "required": ["path", "type", "tier"], "properties": { "path": { "type": "string", "minLength": 1, "description": "Artifact path relative to {active-slug}/. Use forward slashes." }, "type": { "type": "string", "enum": [ "meta", "index", "design", "plan", "review-findings", "review-status", "review-synthesis", "synthesis-prompt", "precondition-gate", "working-notes", "analysis", "browser-evidence", "other" ], "description": "Artifact category. 'meta'/'index' for the manifest files themselves; stage categories for produced artifacts. 'review-synthesis' marks a synthesis result artifact (round verdict) as distinct from 'synthesis-prompt' (the Phase B task prompt) and 'review-status' (the lifecycle file). 'precondition-gate' marks the review-code mechanical-green gate log. 'working-notes' is the cross-stage narrative memory file ([org-internal #2600]) 鈥?one file per run, appended by every role at close, registered once (stage/produced_by null: multi-stage, multi-role). 'browser-evidence' marks a browser evidence pack manifest ([org-internal #4497] N-03, browser/{session-id}/manifest.json 鈥?shared/pack-manifest-v1)." }, "schema": { "type": ["string", "null"], "format": "uri", "description": "$id of the validating JSON Schema, or null for schema-less artifacts (e.g. a prompt .md passed via prompt_file). Accepts $ids from the current namespace https://eightarms.net/octopus-workflow/schemas/*.schema.json as well as legacy $ids from the historical namespace https://eightarms.net/fourbroad/octopus/ (archived live runs' index.json carry the old values); legacy values resolve via schemas/id-aliases.json." }, "tier": { "type": "integer", "const": 1, "description": "Tier marker. This index lists only Tier 1 artifacts, so the value is always 1." }, "stage": { "type": ["string", "null"], "enum": [ "requirements", "design", "plan-iterations", "roadmap", "implement", "review-roadmap", "review-design-space", "review-iteration-plan", "review-dag", "review-code", "verify", "audit-process", "merge-pr", null ], "description": "Producing pipeline stage, or null for meta/index manifest entries. Live stage ids (per schemas/workflow-routing.schema.json): review-dag, review-code, verify, audit-process, merge-pr. The production-phase / retired names (requirements, design, plan-iterations, roadmap, implement, review-roadmap, review-design-space, review-iteration-plan) are retained ONLY so historical archived rows keep validating; new artifacts MUST use the live ids." }, "produced_by": { "type": ["string", "null"], "enum": [ "Producer", "Reviewer", "Verifier", "Tool", "Coordinator", "Analyst", "Architect", "Planner", "Developer", "Synthesizer", "Orchestrator", "Remediator", "Auditor", null ], "description": "Role that produced the artifact, or null if not role-attributed. Canonical role names are Producer / Reviewer / Verifier / Tool / Coordinator (the `name` field of skills/_shared/roles/*.yaml). The remaining values are fine-grained sub-roles mapped to canonical roles via ROLE_ALIASES in role config: Analyst / Architect / Planner / Developer / Synthesizer / Orchestrator / Remediator map to `Producer`; Auditor maps to `Reviewer`. They are retained so historical index rows validate and so the audit target's revision role (Remediator) and reviewer sub-role (Auditor) can be attributed if ever written to a Tier 1 artifact." }, "sha": { "type": ["string", "null"], "pattern": "^[0-9a-f]{64}$", "description": "sha256 content digest, or null if not yet computed." }, "tier2_ref": { "type": ["string", "null"], "description": "Cross-link to a Tier 2 mirror of this artifact (issue comment URL, wiki page path, commit status context) when one exists; null when the artifact is Tier 1 only." } } } } }