56 lines
3.1 KiB
JSON
56 lines
3.1 KiB
JSON
{
|
|||
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
|
|
"$id": "https://eightarms.net/octopus-workflow/schemas/review-status.schema.json",
|
||
|
|
"title": "Review Status",
|
||
|
|
"description": "Schema for tracking the lifecycle state of a review session. This file lives at runs/{slug}/reviews/{stage}/status.json: initialized by the Orchestrator at Phase A (step 0.5) with the full required set, appended by the Synthesizer at Phase B (history[] + current_round), and finalized with `converged` by the Orchestrator at Phase E (see skills/_shared/review-pipeline-phases.md). Reader: the retrospective token-telemetry probe (retrospective/scripts/token-telemetry.ts) walks runs/**/reviews/*/status.json (canonical) and the legacy .artifacts/**/reviews/*/status.json, reading `history[]` (code-level legacy alias `rounds[]`, both handled) and `current_round`. For CLOSED runs (active workspace removed at archive-at-close), the probe reconstructs per-stage round counts from reviews/{stage}/round{N}/ artifact paths in the committed archive bundle runs/archive/{slug}.json ([org-internal #2591]). Since TD/TRC-F006 ([org-internal #2688]) the archive bundle can also embed an explicit digest of this history[] (top-level review_history: {stage, rounds, final_verdict, per_round[]}) so round counts and verdicts stay verifiable offline, without path reconstruction.",
|
||
|
|
"type": "object",
|
||
|
|
"required": ["slug", "started_at", "current_round", "max_rounds", "converged", "history"],
|
||
|
|
"properties": {
|
||
|
|
"slug": {
|
||
|
|
"type": "string"
|
||
|
|
},
|
||
|
|
"started_at": {
|
||
|
|
"type": "string",
|
||
|
|
"format": "date-time"
|
||
|
|
},
|
||
|
|
"current_round": {
|
||
|
|
"type": "integer"
|
||
|
|
},
|
||
|
|
"max_rounds": {
|
||
|
|
"type": "integer",
|
||
|
|
"default": 3,
|
||
|
|
"description": "Per-skill bound: `review-artifact` skill (process target) = 3 (the roadmap/design/plan targets were archived 2026-08-21, [org-internal #3072] phase 3); `review-code` = 2 default / 3 high-risk (`workflow-routing.yaml` `review.max_rounds`, [org-internal #3567]). `review-dag` (the review-artifact skill's DAG single-gate target) binds per depth from `dag_metrics.review_depth`: D1 鈮?, D2 鈮?, D3 鈮?, D4 鈮? 鈥?D4 reaches round 4, exceeding the shared `review-artifact` default, so the DAG per-depth cap takes precedence (see review-artifact/SKILL.md review-dag Phase D MAX_ROUNDS). Set explicitly by the skill; default 3 is a fallback only."
|
||
|
|
},
|
||
|
|
"converged": {
|
||
|
|
"type": "boolean"
|
||
|
|
},
|
||
|
|
"history": {
|
||
|
|
"type": "array",
|
||
|
|
"items": {
|
||
|
|
"type": "object",
|
||
|
|
"required": ["round", "overall_verdict", "blockers", "majors"],
|
||
|
|
"properties": {
|
||
|
|
"round": {
|
||
|
|
"type": "integer"
|
||
|
|
},
|
||
|
|
"overall_verdict": {
|
||
|
|
"type": "string",
|
||
|
|
"enum": ["PASS", "WARN", "FAIL"]
|
||
|
|
},
|
||
|
|
"blockers": {
|
||
|
|
"type": "integer"
|
||
|
|
},
|
||
|
|
"majors": {
|
||
|
|
"type": "integer"
|
||
|
|
},
|
||
|
|
"minors": {
|
||
|
|
"type": "integer",
|
||
|
|
"minimum": 0,
|
||
|
|
"description": "Count of MINOR findings for this round"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|