123 lines
6.0 KiB
JSON
123 lines
6.0 KiB
JSON
{
|
|
"$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."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|