diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/ARCHIVE_SUMMARY.md b/.adv/archive/2026-07-26-fixReviewerEvidence/ARCHIVE_SUMMARY.md new file mode 100644 index 00000000..8cfbfc9b --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/ARCHIVE_SUMMARY.md @@ -0,0 +1,17 @@ +# Archive: Fix reviewer evidence verification + +**Change ID:** fixReviewerEvidence +**Archived:** 2026-07-26T17:57:14.971Z +**Created:** 2026-07-25T20:13:01.723Z + +## Tasks Completed + +- ✅ Add rq-reviewerEvidenceAuthority01 to advance-workflow spec + > Task checkpoint completed +- ✅ Policy-gate verificationWarnings emitter (TDD red→green) + > Task checkpoint completed +- ✅ gate-readiness regression tests + full check sweep + > Task checkpoint completed + +## Specs Modified + diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/BRIEFING_DIGEST.md b/.adv/archive/2026-07-26-fixReviewerEvidence/BRIEFING_DIGEST.md new file mode 100644 index 00000000..676fbe15 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/BRIEFING_DIGEST.md @@ -0,0 +1,83 @@ +# Archive Briefing Digest + +**Change ID:** fixReviewerEvidence +**Title:** Fix reviewer evidence verification +**Status:** archived +**Generated:** 2026-07-26T17:57:15.018Z + +## Identity Anchors + +- CHANGE +- STATUS +- TERMINAL_GATE_SUMMARY +- Origin: discovery + +## Archive Digest + +**Status:** archived + +| Gate | Status | +| --- | --- | +| proposal | done | +| discovery | done | +| design | done | +| planning | done | +| execution | done | +| acceptance | done | +| release | pending | + +## Epic Context + +No Epic membership + +## Durable Facts + +Showing 21 of 21 durable facts. + +- **[archive_only_evidence]** decisions: Chose tags workflow, verification, evidence, structural, review for rq-reviewerEvidenceAuthority01 — Mirrors neighboring rq-verificationEvidence01 tags and adds review to capture the requirement's subject. +- **[archive_only_evidence]** verification: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts (1) — RED: 7 new rq-reviewerEvidenceAuthority01 assertions fail (requirement absent); 35 existing tests pass. +- **[archive_only_evidence]** verification: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts (0) — GREEN: all 42 tests pass after adding requirement to spec.json. +- **[archive_only_evidence]** verification: pnpm run check (0) — Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check. +- **[archive_only_evidence]** verification: tests_run=jq shape validation on .adv/specs/advance-workflow/spec.json, bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts results=pass — JSON/shape validation passed. Targeted suite: 1 file, 42 tests passed, exit 0. Requirement is additive and compatible with rq-verificationEvidence01 and rq-TDD013evp. +- **[unresolved_action]** consumer_warnings: verification_missing: Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: jq shape validation on .adv/specs/advance-workflow/spec.json +- **[unresolved_action]** consumer_warnings: verification_missing: Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts +- **[archive_only_evidence]** decisions: Imported resolveTaskEvidence from plugin/src/validator/task-classifier.ts and gated the adv-reviewer verification_missing emitter on task policy. — The spec requirement rq-reviewerEvidenceAuthority01 requires review-policy tasks to treat the same-task adv-reviewer report as authoritative, so its aggregate tests_run must not emit verification_missing; test/static_check policies still require durable adv_run_test evidence. +- **[archive_only_evidence]** verification: bin/oc-test targeted -- src/tools/subagent-report.test.ts (1) — RED: new review-policy suppression test fails as expected; 65 other tests pass. +- **[archive_only_evidence]** verification: bin/oc-test targeted -- src/tools/subagent-report.test.ts (0) — GREEN: both new policy-gate tests pass; all 66 tests pass. +- **[archive_only_evidence]** verification: pnpm run check (0) — Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check. +- **[archive_only_evidence]** decisions: Added persisted consumer_warnings to reviewer report mocks to reflect runtime emitter behavior — checkUnresolvedVerificationEvidence reads already-computed consumer_warnings; it does not re-run verificationWarnings +- **[archive_only_evidence]** decisions: Used stage-v2 in AC4 evidence plan — Same-task ownership for review_evidence_ref is only enforced in stage-v2 branch +- **[archive_only_evidence]** verification: bin/oc-test targeted -- src/temporal/gate-readiness.test.ts (0) — GREEN: 103 tests passed in gate-readiness.test.ts (AC1 review no-block, AC2 test block, AC3 warn-first, AC4 change-scoped rejected) +- **[archive_only_evidence]** verification: pnpm run check (0) — Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check +- **[report_follow_up]** follow_ups: Packet scope key researcher:fixReviewerEvidence-design-validation was schema-invalid due to uppercase characters; persisted report uses normalized schema-valid key researcher:fix-reviewer-evidence-design-validation. +- **[research_citation]** sources: Verification warning emitter and submission call site: Reviewer reports unconditionally emit verification_missing today; task is loaded from a valid task anchor before the warning function is called. (plugin/src/tools/subagent-report.ts:470-480,845-882) +- **[research_citation]** sources: Normalized evidence resolver and completion ownership: resolveTaskEvidence is exported, pure, takes Task, resolves a policy through declared/default policy, and stage-v2 reviewer evidence must be same-task and adv-reviewer-owned. (plugin/src/validator/task-classifier.ts:255-327,350-407) +- **[research_citation]** sources: Readiness evaluator: Acceptance/release blocking consumes persisted latest task-scoped verification warnings only for proof-bearing policies; it need not change if review-policy reviewer warnings are not emitted. (plugin/src/temporal/gate-readiness.ts:642-733) +- **[research_citation]** sources.omitted: 2 additional sources omitted (bounded to first 3) +- **[archive_only_evidence]** architecture_assessment: APPROVE. The consumer-side policy gate is the narrowest correct boundary: report submission has the resolved task object, while readiness remains a generic latest-warning evaluator. Direct import from validator/task-classifier introduces no observed cycle because the resolver depends only on types and no validator source imports tools/subagent-report. + +## Contract / AC Coverage + +| ID | Kind | Status | +| --- | --- | --- | +| AC1 | acceptance_criterion | pass | +| AC2 | acceptance_criterion | pass | +| AC3 | acceptance_criterion | pass | +| AC4 | acceptance_criterion | pass | +| AC5 | acceptance_criterion | pass | +| C1 | constraint | respected | +| C2 | constraint | respected | +| C3 | constraint | respected | +| C4 | constraint | respected | +| C5 | constraint | respected | +| DONT1 | avoidance | respected | +| DONT2 | avoidance | respected | +| DONT3 | avoidance | respected | +| OOS1 | out_of_scope | missing | +| OOS2 | out_of_scope | missing | +| OOS3 | out_of_scope | missing | + +## Unresolved Actions + +- verification_missing: Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: jq shape validation on .adv/specs/advance-workflow/spec.json +- verification_missing: Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/CONTRACT_TRACEABILITY.md b/.adv/archive/2026-07-26-fixReviewerEvidence/CONTRACT_TRACEABILITY.md new file mode 100644 index 00000000..00389beb --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/CONTRACT_TRACEABILITY.md @@ -0,0 +1,35 @@ +# Contract Traceability + +**Change ID:** fixReviewerEvidence +**Contract Version:** 1 +**Rigor:** standard +**Reviewed:** 2026-07-25T21:18:01.368Z + +## Contract Items + +| ID | Kind | Status | Evidence Policy | Evidence | +| --- | --- | --- | --- | --- | +| AC1 | acceptance_criterion | pass | test | subagent-report + gate-readiness tests. tr_ms0ujmvp, tr_ms0v2cg0. | +| AC2 | acceptance_criterion | pass | test | gate-readiness AC2 regression. tr_ms0v2cg0. | +| AC3 | acceptance_criterion | pass | test | gate-readiness AC3 warn-first. tr_ms0v2cg0. | +| AC4 | acceptance_criterion | pass | test | gate-readiness AC4 change-scoped rejected. tr_ms0v2cg0. | +| AC5 | acceptance_criterion | pass | test | subagent-report TDD red->green. tr_ms0ujmvp. | +| C1 | constraint | respected | static_check | task-classifier.ts:382-394 unchanged. | +| C2 | constraint | respected | static_check | subagent-reports.ts:50-67,471-477 unchanged. | +| C3 | constraint | respected | static_check | subagent-report.ts:493-587 unchanged. | +| C4 | constraint | respected | static_check | Direction (2) rejected; no auto-record. | +| C5 | constraint | respected | static_check | subagent-reports.ts:471-477 unchanged. | +| DONT1 | avoidance | respected | review | AC2 confirms block for test/static_check. | +| DONT2 | avoidance | respected | review | Direction (2) rejected. | +| DONT3 | avoidance | respected | review | Direction (3) rejected. | +| OOS1 | out_of_scope | missing | not_applicable | | +| OOS2 | out_of_scope | missing | not_applicable | | +| OOS3 | out_of_scope | missing | not_applicable | | + +## Task References + +| Task | Implements | Verifies | Respects | N/A Reason | +| --- | --- | --- | --- | --- | +| tk-f0b4525a6dd8 | | | C1, C2, C5 | | +| tk-feabc293e2b7 | AC1, AC5 | AC1, AC5 | C1, C3, C4, DONT1, DONT2 | | +| tk-0c23472dfede | | AC2, AC3, AC4 | C2, C5 | | diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/acceptance.md b/.adv/archive/2026-07-26-fixReviewerEvidence/acceptance.md new file mode 100644 index 00000000..413ccbf1 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/acceptance.md @@ -0,0 +1,25 @@ +# Acceptance + +Reviewed at: 2026-07-25T21:18:01.368Z + +## Contract Review Matrix + +| ID | Kind | Requirement | Status | Evidence | +|---|---|---|---|---| +| AC1 | acceptance_criterion | **AC1** — Given a done stage-v2 code task with `evidence_policy: review` and a persisted same-task `adv-reviewer` report, when acceptance or release readiness runs, then no `VERIFICATION_EVIDENCE_MISSING` blocker is emitted solely from the reviewer's aggregate `tests_run` list. *(Regression test: red → green.)* | pass | subagent-report + gate-readiness tests. tr_ms0ujmvp, tr_ms0v2cg0. | +| AC2 | acceptance_criterion | **AC2** — Given a done task with `evidence_policy: test` or `evidence_policy: static_check` whose only evidence is a reviewer aggregate command list (no durable `adv_run_test` run), when readiness runs, then the block remains (`VERIFICATION_EVIDENCE_MISSING` still fires). Reviewer prose does not satisfy these policies. | pass | gate-readiness AC2 regression. tr_ms0v2cg0. | +| AC3 | acceptance_criterion | **AC3** — Given a done task with `evidence_policy: source_audit` or `evidence_policy: rubric_review`, when reviewer warnings exist, then no verification-evidence blocker is emitted. *(Already the case today; regression-protect.)* | pass | gate-readiness AC3 warn-first. tr_ms0v2cg0. | +| AC4 | acceptance_criterion | **AC4** — Given a change-scoped `adv-reviewer` report, when task completion validation runs, then it cannot satisfy the task's `review_evidence_ref`. Same-task ownership is preserved. | pass | gate-readiness AC4 change-scoped rejected. tr_ms0v2cg0. | +| AC5 | acceptance_criterion | **AC5** — The `verification_missing` emitter in `plugin/src/tools/subagent-report.ts` is policy-gated: it fires `verification_missing` for `test`/`static_check` evidence policies but suppresses it for `review` policy when the report originates from `agent: "adv-reviewer"`. | pass | subagent-report TDD red->green. tr_ms0ujmvp. | +| C1 | constraint | **C1** — Same-task reviewer ownership and `adv-reviewer` identity for `review_evidence_ref` must be preserved (`task-classifier.ts:382-394`). | respected | task-classifier.ts:382-394 unchanged. | +| C2 | constraint | **C2** — No change-scoped report may satisfy task-level reviewer evidence linkage (`subagent-reports.ts:50-67, 471-477`). | respected | subagent-reports.ts:50-67,471-477 unchanged. | +| C3 | constraint | **C3** — `test` / `static_check` policies remain backed by independently durable execution evidence (`test.ts:484-558`); reviewer aggregate command prose cannot satisfy them. | respected | subagent-report.ts:493-587 unchanged. | +| C4 | constraint | **C4** — No fake `adv_run_test` records may be synthesized from report-submitted command claims. Auto-recording reviewer commands as `adv_run_test` runs is explicitly rejected (direction 2). | respected | Direction (2) rejected; no auto-record. | +| C5 | constraint | **C5** — Existing acceptance-summary `review:acceptance` boundary remains separate and unchanged (`subagent-reports.ts:471-477`). | respected | subagent-reports.ts:471-477 unchanged. | +| DONT1 | avoidance | **DONT1** — Do not extend the reviewer-authority exception to `test` or `static_check` policies. Those still require durable execution evidence from `adv_run_test` or equivalent capture. | respected | AC2 confirms block for test/static_check. | +| DONT2 | avoidance | **DONT2** — Do not auto-record `adv_run_test` runs from reviewer report claims. Reviewer reports carry aggregate `tests_run: string[]` without per-command exit codes, typed run IDs, duration, or execution classification. Writing `adv_run_test` records from these claims would falsely represent execution and bypass `adv_run_test`'s capture path. | respected | Direction (2) rejected. | +| DONT3 | avoidance | **DONT3** — Do not add a new duplicate authority field or signal. `review_evidence_ref` already provides typed reviewer ownership, same-task binding, and stage-v2 completion proof. A second "accepts-verification" path duplicates authority without adding a missing identity boundary. | respected | Direction (3) rejected. | +| OOS1 | out_of_scope | **OOS1** — Schema gap in `ChangeScopedReviewerSubagentReportSchema` not enforcing reviewer-key pairing (`subagent-reports.ts:57-62, 471-477, 783-791`). Different defect; track separately. | missing | | +| OOS2 | out_of_scope | **OOS2** — Reviewer agent behavior changes (reviewer still runs commands and reports them as aggregate verification). | missing | | +| OOS3 | out_of_scope | **OOS3** — Evidence policy taxonomy redesign. | missing | | + diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/change.json b/.adv/archive/2026-07-26-fixReviewerEvidence/change.json new file mode 100644 index 00000000..d225c908 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/change.json @@ -0,0 +1,1213 @@ +{ + "id": "fixReviewerEvidence", + "title": "Fix reviewer evidence verification", + "status": "archived", + "lifecycleState": "open", + "created_at": "2026-07-25T20:13:01.723Z", + "tasks": [ + { + "id": "tk-f0b4525a6dd8", + "title": "Add rq-reviewerEvidenceAuthority01 to advance-workflow spec", + "type": "code", + "section": "Foundation / Spec", + "status": "done", + "priority": 0, + "created_at": "2026-07-25T20:26:38.064Z", + "metadata": { + "tdd_intent": "inline" + }, + "contract_refs": { + "respects": [ + "C1", + "C2", + "C5" + ] + }, + "evidence_policy": "static_check", + "evidence_plan": { + "policy": "static_check", + "proof_target": "Static analysis or check output", + "rationale": "Spec-law artifact; schema validity + scenario well-formedness. Non-code (rq-prepNonCodeEvidence01).", + "review_evidence_ref": { + "report_key": "fixReviewerEvidence|tk-f0b4525a6dd8|adv-reviewer|1" + }, + "stage": "stage-v2", + "provenance": "new" + }, + "assignedTo": "agent", + "started_at": "2026-07-25T20:36:04.055Z", + "subagent_reports": [ + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-f0b4525a6dd8", + "scope": { + "kind": "task", + "task_id": "tk-f0b4525a6dd8" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + ".adv/specs/advance-workflow/spec.json", + "plugin/src/adv-autonomy-quality-assets.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0u6cch_5f58d17f", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "exit_code": 1, + "summary": "RED: 7 new rq-reviewerEvidenceAuthority01 assertions fail (requirement absent); 35 existing tests pass." + }, + { + "test_run_id": "tr_ms0u6shx_a1991c8b", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "exit_code": 0, + "summary": "GREEN: all 42 tests pass after adding requirement to spec.json." + }, + { + "test_run_id": "tr_ms0u8b5f_29454c78", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check." + } + ], + "decisions": [ + { + "what": "Chose tags workflow, verification, evidence, structural, review for rq-reviewerEvidenceAuthority01", + "why": "Mirrors neighboring rq-verificationEvidence01 tags and adds review to capture the requirement's subject." + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "Added rq-reviewerEvidenceAuthority01 to advance-workflow spec.json immediately after rq-verificationEvidence01, with four scenarios (.1 AC1, .2 AC2, .3 AC5, .4 no warrant) and tags workflow/verification/evidence/structural/review. Extended adv-autonomy-quality-assets.test.ts with presence/structure assertions. RED (7 failures) -> GREEN (42 passes) -> full pnpm run check clean.", + "suggested_next_action": "Proceed to tk-feabc293e2b7 (emitter policy-gate fix)." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-f0b4525a6dd8_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-f0b4525a6dd8_attempt_1" + } + } + }, + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-f0b4525a6dd8", + "scope": { + "kind": "task", + "task_id": "tk-f0b4525a6dd8" + }, + "agent": "adv-reviewer", + "phase": "review", + "verdict": "READY", + "blocking_findings": [], + "nonblocking_findings": [], + "changes_made": [], + "wisdom_candidates": [], + "verification": { + "tests_run": [ + "jq shape validation on .adv/specs/advance-workflow/spec.json", + "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts" + ], + "results": "pass", + "evidence": "JSON/shape validation passed. Targeted suite: 1 file, 42 tests passed, exit 0. Requirement is additive and compatible with rq-verificationEvidence01 and rq-TDD013evp." + }, + "scope_drift": null, + "risks": [], + "required_main_agent_actions": [], + "consumer_warnings": [ + { + "kind": "verification_missing", + "message": "Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: jq shape validation on .adv/specs/advance-workflow/spec.json" + }, + { + "kind": "verification_missing", + "message": "Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts" + } + ] + } + ], + "verification": "Spec rq-reviewerEvidenceAuthority01 added (4 scenarios). Asset test extended. TDD red→green→verify all pass. Engineer report (durable run IDs, 0 warnings) + reviewer report (READY, 0 blocking findings) submitted. Reviewer's verification_missing warnings are pre-fix artifacts to be dispositioned at acceptance.", + "summary": "Task checkpoint completed", + "implementation_summary": "Task checkpoint completed", + "filesTouched": [], + "touched_files": [], + "checkpointSha": "4d90420d16c072e997a539c34fab35c3a83acf26", + "completedAt": "2026-07-25T20:48:41.397Z", + "completed_at": "2026-07-25T20:48:41.397Z" + }, + { + "id": "tk-feabc293e2b7", + "title": "Policy-gate verificationWarnings emitter (TDD red→green)", + "type": "code", + "section": "Core Implementation", + "status": "done", + "priority": 1, + "created_at": "2026-07-25T20:26:49.737Z", + "deps": [ + { + "type": "blocked_by", + "target": "tk-f0b4525a6dd8" + } + ], + "metadata": { + "tdd_intent": "inline" + }, + "contract_refs": { + "implements": [ + "AC1", + "AC5" + ], + "respects": [ + "C1", + "C3", + "C4", + "DONT1", + "DONT2" + ], + "verifies": [ + "AC1", + "AC5" + ] + }, + "evidence_policy": "test", + "evidence_plan": { + "policy": "test", + "proof_target": "Automated red/green tests evidenced by adv_run_test", + "stage": "stage-v2", + "provenance": "new" + }, + "assignedTo": "agent", + "started_at": "2026-07-25T20:48:59.457Z", + "subagent_reports": [ + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-feabc293e2b7", + "scope": { + "kind": "task", + "task_id": "tk-feabc293e2b7" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + "plugin/src/tools/subagent-report.ts", + "plugin/src/tools/subagent-report.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0uizpf_6f456eca", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "exit_code": 1, + "summary": "RED: new review-policy suppression test fails as expected; 65 other tests pass." + }, + { + "test_run_id": "tr_ms0ujmvp_92b0e709", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "exit_code": 0, + "summary": "GREEN: both new policy-gate tests pass; all 66 tests pass." + }, + { + "test_run_id": "tr_ms0ukubc_e5eded05", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check." + } + ], + "decisions": [ + { + "what": "Imported resolveTaskEvidence from plugin/src/validator/task-classifier.ts and gated the adv-reviewer verification_missing emitter on task policy.", + "why": "The spec requirement rq-reviewerEvidenceAuthority01 requires review-policy tasks to treat the same-task adv-reviewer report as authoritative, so its aggregate tests_run must not emit verification_missing; test/static_check policies still require durable adv_run_test evidence." + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "verificationWarnings() now resolves the task evidence policy via resolveTaskEvidence and suppresses verification_missing for adv-reviewer reports only when policy is 'review'. Test-policy tasks still emit verification_missing. Red/green TDD cycle completed and full pnpm run check is green.", + "suggested_next_action": "Proceed to tk-0c23472dfede (gate-readiness regression tests + full check sweep)." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-feabc293e2b7_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-feabc293e2b7_attempt_1" + } + } + } + ], + "verification": "Policy-gate emitter fix: resolveTaskEvidence(task).policy check in verificationWarnings() adv-reviewer branch. Review-policy → return [] (no verification_missing). Test/static_check → current behavior preserved. TDD: tr_ms0uizpf (RED 1 fail), tr_ms0ujmvp (GREEN 66/66), tr_ms0ukubc (full check clean). Engineer report submitted with durable run IDs, 0 verification warnings.", + "summary": "Task checkpoint completed", + "implementation_summary": "Task checkpoint completed", + "filesTouched": [ + "plugin/src/tools/subagent-report.test.ts", + "plugin/src/tools/subagent-report.ts" + ], + "touched_files": [ + "plugin/src/tools/subagent-report.test.ts", + "plugin/src/tools/subagent-report.ts" + ], + "checkpointSha": "d333f15dee2198065b912cb5977727ea96819da5", + "completedAt": "2026-07-25T20:56:34.888Z", + "completed_at": "2026-07-25T20:56:34.888Z" + }, + { + "id": "tk-0c23472dfede", + "title": "gate-readiness regression tests + full check sweep", + "type": "verification", + "section": "Verification", + "status": "done", + "priority": 2, + "created_at": "2026-07-25T20:26:59.250Z", + "deps": [ + { + "type": "blocked_by", + "target": "tk-feabc293e2b7" + } + ], + "metadata": { + "tdd_intent": "separate_verification" + }, + "contract_refs": { + "respects": [ + "C2", + "C5" + ], + "verifies": [ + "AC2", + "AC3", + "AC4" + ] + }, + "evidence_policy": "test", + "evidence_plan": { + "policy": "test", + "proof_target": "Automated red/green tests evidenced by adv_run_test", + "stage": "stage-v2", + "provenance": "new" + }, + "assignedTo": "agent", + "started_at": "2026-07-25T20:56:53.719Z", + "subagent_reports": [ + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-0c23472dfede", + "scope": { + "kind": "task", + "task_id": "tk-0c23472dfede" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + "plugin/src/temporal/gate-readiness.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0v2cg0_d7388391", + "command": "bin/oc-test targeted -- src/temporal/gate-readiness.test.ts", + "exit_code": 0, + "summary": "GREEN: 103 tests passed in gate-readiness.test.ts (AC1 review no-block, AC2 test block, AC3 warn-first, AC4 change-scoped rejected)" + }, + { + "test_run_id": "tr_ms0v3ky5_fd43c1e0", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check" + } + ], + "decisions": [ + { + "what": "Added persisted consumer_warnings to reviewer report mocks to reflect runtime emitter behavior", + "why": "checkUnresolvedVerificationEvidence reads already-computed consumer_warnings; it does not re-run verificationWarnings" + }, + { + "what": "Used stage-v2 in AC4 evidence plan", + "why": "Same-task ownership for review_evidence_ref is only enforced in stage-v2 branch" + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "Regression tests added: AC1 review-policy no block, AC2 test-policy block remains, AC3 warn-first non-blocking, AC4 change-scoped rejected. 103 gate-readiness tests pass; full pnpm run check clean.", + "suggested_next_action": "Complete execution gate, proceed to acceptance." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-0c23472dfede_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-0c23472dfede_attempt_1" + } + } + } + ], + "verification": "Regression tests added: AC1 (review-policy no block), AC2 (test-policy block remains), AC3 (warn-first non-blocking), AC4 (change-scoped rejected). 103 gate-readiness tests pass (tr_ms0v2cg0). Full pnpm run check clean (tr_ms0v3ky5). Engineer report with durable run IDs, 0 verification warnings.", + "summary": "Task checkpoint completed", + "implementation_summary": "Task checkpoint completed", + "filesTouched": [ + "plugin/src/temporal/gate-readiness.test.ts" + ], + "touched_files": [ + "plugin/src/temporal/gate-readiness.test.ts" + ], + "checkpointSha": "3849b2609330d75e7adfebe35be7b22ffda38f0e", + "completedAt": "2026-07-25T21:09:36.972Z", + "completed_at": "2026-07-25T21:09:36.972Z" + } + ], + "subagent_reports": [ + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/dev/advance", + "scope": { + "kind": "change", + "scope_key": "researcher:fix-reviewer-evidence-design-validation" + }, + "agent": "adv-researcher", + "topic": "Design validation: reviewer evidence verification", + "sources": [ + { + "label": "Verification warning emitter and submission call site", + "locator": "plugin/src/tools/subagent-report.ts:470-480,845-882", + "summary": "Reviewer reports unconditionally emit verification_missing today; task is loaded from a valid task anchor before the warning function is called." + }, + { + "label": "Normalized evidence resolver and completion ownership", + "locator": "plugin/src/validator/task-classifier.ts:255-327,350-407", + "summary": "resolveTaskEvidence is exported, pure, takes Task, resolves a policy through declared/default policy, and stage-v2 reviewer evidence must be same-task and adv-reviewer-owned." + }, + { + "label": "Readiness evaluator", + "locator": "plugin/src/temporal/gate-readiness.ts:642-733", + "summary": "Acceptance/release blocking consumes persisted latest task-scoped verification warnings only for proof-bearing policies; it need not change if review-policy reviewer warnings are not emitted." + }, + { + "label": "Evidence policy and specification laws", + "locator": "plugin/src/types/evidence-policy.ts:29-59,71-81; .adv/specs/advance-workflow/spec.json:5610-5680; .adv/specs/tdd-contract/spec.json:530-609", + "summary": "Review remains proof-bearing; task-scoped reviewer reference is completion authority; proposed additive policy partition is compatible with warning-based enforcement." + }, + { + "label": "Existing test seams and affected ops task", + "locator": "plugin/src/tools/subagent-report.test.ts:467-481,1290-1339; plugin/src/temporal/gate-readiness.test.ts:1459-1701,1868-1921; ADV task tk-41b7b4de9d8b", + "summary": "Both planned test files have suitable fixtures. tk-41b7b4de9d8b is evidence_policy test and already has unresolved verification_missing warnings, so a review-only suppression cannot unblock it." + } + ], + "architecture_assessment": "APPROVE. The consumer-side policy gate is the narrowest correct boundary: report submission has the resolved task object, while readiness remains a generic latest-warning evaluator. Direct import from validator/task-classifier introduces no observed cycle because the resolver depends only on types and no validator source imports tools/subagent-report.", + "validation": { + "status": "pass", + "blockers": [], + "notes": "All eight claims validated. resolveTaskEvidence(task).policy is effectively always defined for a valid Task because it defaults by type; retaining the proposed undefined fallback is conservative and preserves current warning behavior for any future malformed/unavailable case." + }, + "architecture_judgement": { + "applicability": "applicable", + "confidence": "high", + "risk": "low", + "tradeoffs": [ + "Emission-time gating leaves already-persisted warnings until a newer reviewer report supersedes them.", + "A task policy changed after report submission could leave a stale warning state, but policy is resolved from the submission-time task and readiness remains structurally warning-driven." + ], + "alternatives_considered": [ + { + "option": "Evaluation-time special case in gate-readiness", + "disposition": "rejected", + "rationale": "Would duplicate authority logic and require warning provenance differentiation; source shows the generic evaluator is correctly limited to persisted warnings." + }, + { + "option": "Synthesize durable adv_run_test records from reviewer command prose", + "disposition": "rejected", + "rationale": "Reviewer tests_run lacks typed execution provenance; test policy must retain durable run requirements." + } + ], + "recommendation": "Proceed with the proposed resolver import and review-policy-only suppression. Add the two submission tests, one readiness regression with a same-task stage-v2 reviewer reference, and retain existing policy-matrix coverage for test/static_check." + }, + "recommendation": "Proceed without workflow changes or wf.patched. Ensure the spec scenario explicitly says that suppression concerns only the reviewer's aggregate tests_run warning and does not make aggregate command prose durable test evidence.", + "follow_ups": [ + "Packet scope key researcher:fixReviewerEvidence-design-validation was schema-invalid due to uppercase characters; persisted report uses normalized schema-valid key researcher:fix-reviewer-evidence-design-validation." + ] + }, + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-f0b4525a6dd8", + "scope": { + "kind": "task", + "task_id": "tk-f0b4525a6dd8" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + ".adv/specs/advance-workflow/spec.json", + "plugin/src/adv-autonomy-quality-assets.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0u6cch_5f58d17f", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "exit_code": 1, + "summary": "RED: 7 new rq-reviewerEvidenceAuthority01 assertions fail (requirement absent); 35 existing tests pass." + }, + { + "test_run_id": "tr_ms0u6shx_a1991c8b", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "exit_code": 0, + "summary": "GREEN: all 42 tests pass after adding requirement to spec.json." + }, + { + "test_run_id": "tr_ms0u8b5f_29454c78", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check." + } + ], + "decisions": [ + { + "what": "Chose tags workflow, verification, evidence, structural, review for rq-reviewerEvidenceAuthority01", + "why": "Mirrors neighboring rq-verificationEvidence01 tags and adds review to capture the requirement's subject." + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "Added rq-reviewerEvidenceAuthority01 to advance-workflow spec.json immediately after rq-verificationEvidence01, with four scenarios (.1 AC1, .2 AC2, .3 AC5, .4 no warrant) and tags workflow/verification/evidence/structural/review. Extended adv-autonomy-quality-assets.test.ts with presence/structure assertions. RED (7 failures) -> GREEN (42 passes) -> full pnpm run check clean.", + "suggested_next_action": "Proceed to tk-feabc293e2b7 (emitter policy-gate fix)." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-f0b4525a6dd8_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-f0b4525a6dd8_attempt_1" + } + } + }, + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-f0b4525a6dd8", + "scope": { + "kind": "task", + "task_id": "tk-f0b4525a6dd8" + }, + "agent": "adv-reviewer", + "phase": "review", + "verdict": "READY", + "blocking_findings": [], + "nonblocking_findings": [], + "changes_made": [], + "wisdom_candidates": [], + "verification": { + "tests_run": [ + "jq shape validation on .adv/specs/advance-workflow/spec.json", + "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts" + ], + "results": "pass", + "evidence": "JSON/shape validation passed. Targeted suite: 1 file, 42 tests passed, exit 0. Requirement is additive and compatible with rq-verificationEvidence01 and rq-TDD013evp." + }, + "scope_drift": null, + "risks": [], + "required_main_agent_actions": [], + "consumer_warnings": [ + { + "kind": "verification_missing", + "message": "Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: jq shape validation on .adv/specs/advance-workflow/spec.json" + }, + { + "kind": "verification_missing", + "message": "Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts" + } + ] + }, + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-feabc293e2b7", + "scope": { + "kind": "task", + "task_id": "tk-feabc293e2b7" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + "plugin/src/tools/subagent-report.ts", + "plugin/src/tools/subagent-report.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0uizpf_6f456eca", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "exit_code": 1, + "summary": "RED: new review-policy suppression test fails as expected; 65 other tests pass." + }, + { + "test_run_id": "tr_ms0ujmvp_92b0e709", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "exit_code": 0, + "summary": "GREEN: both new policy-gate tests pass; all 66 tests pass." + }, + { + "test_run_id": "tr_ms0ukubc_e5eded05", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check." + } + ], + "decisions": [ + { + "what": "Imported resolveTaskEvidence from plugin/src/validator/task-classifier.ts and gated the adv-reviewer verification_missing emitter on task policy.", + "why": "The spec requirement rq-reviewerEvidenceAuthority01 requires review-policy tasks to treat the same-task adv-reviewer report as authoritative, so its aggregate tests_run must not emit verification_missing; test/static_check policies still require durable adv_run_test evidence." + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "verificationWarnings() now resolves the task evidence policy via resolveTaskEvidence and suppresses verification_missing for adv-reviewer reports only when policy is 'review'. Test-policy tasks still emit verification_missing. Red/green TDD cycle completed and full pnpm run check is green.", + "suggested_next_action": "Proceed to tk-0c23472dfede (gate-readiness regression tests + full check sweep)." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-feabc293e2b7_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-feabc293e2b7_attempt_1" + } + } + }, + { + "schema_version": "1.0", + "change_id": "fixReviewerEvidence", + "attempt": 1, + "workdir_used": "/home/jon/.local/share/opencode/worktree/bdf259aa162ae192af5b18899ccdc653b085528d/change/fixReviewerEvidence", + "task_id": "tk-0c23472dfede", + "scope": { + "kind": "task", + "task_id": "tk-0c23472dfede" + }, + "agent": "adv-engineer", + "status": "complete", + "evidence_binding_version": "typed-v1", + "files_touched": [ + "plugin/src/temporal/gate-readiness.test.ts" + ], + "verification": [ + { + "test_run_id": "tr_ms0v2cg0_d7388391", + "command": "bin/oc-test targeted -- src/temporal/gate-readiness.test.ts", + "exit_code": 0, + "summary": "GREEN: 103 tests passed in gate-readiness.test.ts (AC1 review no-block, AC2 test block, AC3 warn-first, AC4 change-scoped rejected)" + }, + { + "test_run_id": "tr_ms0v3ky5_fd43c1e0", + "command": "pnpm run check", + "exit_code": 0, + "summary": "Full plugin check passes: schemas:check, typecheck, generate:manifests:check, test-isolation, lockfile-policy, lint, format:check" + } + ], + "decisions": [ + { + "what": "Added persisted consumer_warnings to reviewer report mocks to reflect runtime emitter behavior", + "why": "checkUnresolvedVerificationEvidence reads already-computed consumer_warnings; it does not re-run verificationWarnings" + }, + { + "what": "Used stage-v2 in AC4 evidence plan", + "why": "Same-task ownership for review_evidence_ref is only enforced in stage-v2 branch" + } + ], + "blockers": [], + "scope_drift": null, + "follow_ups": [], + "required_main_agent_actions": [], + "related_scan": "none", + "context_update_for_adv": { + "what_ads_needs_to_know": "Regression tests added: AC1 review-policy no block, AC2 test-policy block remains, AC3 warn-first non-blocking, AC4 change-scoped rejected. 103 gate-readiness tests pass; full pnpm run check clean.", + "suggested_next_action": "Complete execution gate, proceed to acceptance." + }, + "apply_context": { + "implementation_cycle_id": "ic_tk-0c23472dfede_1", + "implementation_provenance": { + "kind": "engineer_report", + "report_key": "tk-0c23472dfede_attempt_1" + } + } + } + ], + "test_runs": { + "tk-f0b4525a6dd8": [ + { + "runId": "tr_ms0u6cch_5f58d17f", + "phase": "red", + "exitCode": 1, + "classification": "failed", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "durationMs": 1315.964620999992, + "recordedAt": "2026-07-25T20:43:19.975Z" + }, + { + "runId": "tr_ms0u6shx_a1991c8b", + "phase": "green", + "exitCode": 0, + "classification": "passed", + "command": "bin/oc-test targeted -- src/adv-autonomy-quality-assets.test.ts", + "durationMs": 1285.685478000436, + "recordedAt": "2026-07-25T20:43:40.914Z" + }, + { + "runId": "tr_ms0u73gx_aef296ce", + "phase": "verify", + "exitCode": 1, + "classification": "failed", + "command": "pnpm run check", + "durationMs": 988.892969999928, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T20:43:55.124Z" + }, + { + "runId": "tr_ms0u8b5f_29454c78", + "phase": "verify", + "exitCode": 0, + "classification": "passed", + "command": "pnpm run check", + "durationMs": 48619.65091999993, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T20:44:51.762Z" + } + ], + "tk-feabc293e2b7": [ + { + "runId": "tr_ms0ui82q_f40d11a5", + "phase": "red", + "exitCode": 127, + "classification": "failed", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "durationMs": 2.9513340000994503, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T20:52:34.333Z" + }, + { + "runId": "tr_ms0uizpf_6f456eca", + "phase": "red", + "exitCode": 1, + "classification": "failed", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "durationMs": 4927.177795999683, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T20:53:10.124Z" + }, + { + "runId": "tr_ms0ujmvp_92b0e709", + "phase": "green", + "exitCode": 0, + "classification": "passed", + "command": "bin/oc-test targeted -- src/tools/subagent-report.test.ts", + "durationMs": 4769.494962999597, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T20:53:40.148Z" + }, + { + "runId": "tr_ms0ukubc_e5eded05", + "phase": "verify", + "exitCode": 0, + "classification": "passed", + "command": "pnpm run check", + "durationMs": 48301.77800399996, + "evidence_kind": "other", + "recordedAt": "2026-07-25T20:54:36.470Z" + } + ], + "tk-0c23472dfede": [ + { + "runId": "tr_ms0v22bm_a3962622", + "phase": "green", + "exitCode": 127, + "classification": "failed", + "command": "bin/oc-test targeted -- src/temporal/gate-readiness.test.ts", + "durationMs": 6.728039000183344, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:08:00.293Z" + }, + { + "runId": "tr_ms0v2cg0_d7388391", + "phase": "green", + "exitCode": 0, + "classification": "passed", + "command": "bin/oc-test targeted -- src/temporal/gate-readiness.test.ts", + "durationMs": 2355.6783369998448, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:08:13.114Z" + }, + { + "runId": "tr_ms0v3ky5_fd43c1e0", + "phase": "verify", + "exitCode": 0, + "classification": "passed", + "command": "pnpm run check", + "durationMs": 60022.72559900023, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:09:10.795Z" + }, + { + "runId": "tr_ms0vlk4j_00b8e214", + "phase": "green", + "exitCode": 0, + "classification": "passed", + "command": "bin/oc-test targeted -- src/temporal/gate-readiness.test.ts", + "durationMs": 3420.4848319999874, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:23:09.505Z" + }, + { + "runId": "tr_ms0vme9g_17a6ad3f", + "phase": "verify", + "exitCode": 1, + "classification": "failed", + "command": "pnpm run check", + "durationMs": 32052.232507999986, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:23:48.577Z" + }, + { + "runId": "tr_ms0vnu3w_7ea7908b", + "phase": "verify", + "exitCode": 0, + "classification": "passed", + "command": "pnpm run check", + "durationMs": 48330.13448099978, + "evidence_kind": "unit", + "recordedAt": "2026-07-25T21:24:55.766Z" + } + ] + }, + "deltas": {}, + "wisdom": [], + "gates": { + "proposal": { + "status": "done", + "completed_at": "2026-07-25T20:15:26.946Z", + "completed_by": "user", + "approval_evidence": "Proposal checkpoint confirmed by user ('confirm both'). Original hypothesis refuted by source; reframed as verification_missing consumer_warning blocking gate readiness. RCA grounded in source (defect origin). Validation: 0 errors, 0 conflicts.", + "artifact_evidence": { + "kind": "proposal", + "content_hash": "9b08453290bdb973a567744bc72d7ba58606b8806eb43120ed18891ecbe3f62b", + "non_whitespace_chars": 3981, + "checked_at": "2026-07-25T20:13:01.784Z" + } + }, + "discovery": { + "status": "done", + "completed_at": "2026-07-25T20:22:12.259Z", + "completed_by": "agent", + "approval_evidence": "Discovery complete. Agreement persisted (3 objectives, 5 ACs, 5 constraints, 3 avoidances, 3 OOS, authority partition table). Contract minted (16 items). Fix direction confirmed: direction (1) — policy-gate verification_missing emission; reviewer report IS authority for review policy. Directions (2) auto-record rejected (fabricates execution provenance), (3) redundant. Fix site: subagent-report.ts:470-480 emits verification_missing unconditionally for adv-reviewer tests_run. Gate-readiness.ts:642-733 treats any verification_missing on proof-bearing policies as blocking. Spec gap: rq-verificationEvidence01 requires blocking but doesn't define reviewer-as-authority for review policy; new requirement needed.", + "artifact_evidence": { + "kind": "agreement", + "content_hash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "non_whitespace_chars": 4510, + "checked_at": "2026-07-25T20:13:01.785Z" + } + }, + "design": { + "status": "done", + "completed_at": "2026-07-25T20:26:35.392Z", + "completed_by": "agent", + "approval_evidence": "Design validated by independent adv-researcher (APPROVE, 1 pass). All confirmations positive: resolveTaskEvidence importable from task-classifier.ts:255 (no circular dep); fix site correct (sole unconditional emitter at subagent-report.ts:475-480); task param populated at call site (subagent-report.ts:845-853); spec-law well-formed (no conflict with rq-verificationEvidence01 or rq-TDD013evp); no workflow/wf.patched changes needed; test infrastructure adequate. Limitation confirmed: fixOpsResolutionProjection (evidence_policy: test) will not auto-unblock.", + "artifact_evidence": { + "kind": "design", + "content_hash": "df156dab49221c7f3dca4cc87f8a486d3866c520c1b833f096f9ddb29975a489", + "non_whitespace_chars": 9278, + "checked_at": "2026-07-25T20:13:01.786Z" + } + }, + "planning": { + "status": "done", + "completed_at": "2026-07-25T20:35:38.054Z", + "completed_by": "user", + "approval_evidence": "Prep approved by user ('approve prep'). 3-task DAG: spec (tk-f0b4525a6dd8) → emitter fix (tk-feabc293e2b7) → regression (tk-0c23472dfede). All 5 ACs covered, 0 uncovered. 3 constraints respected, 3 avoidances threaded. Single-point fix at subagent-report.ts:475-479. No workflow/wf.patched changes." + }, + "execution": { + "status": "done", + "completed_at": "2026-07-25T21:09:54.788Z", + "completed_by": "agent", + "approval_evidence": "All 3 tasks done. T1 (tk-f0b4525a6dd8): spec rq-reviewerEvidenceAuthority01 + asset test, RED→GREEN→verify, reviewer READY. T2 (tk-feabc293e2b7): policy-gate emitter fix (resolveTaskEvidence check in verificationWarnings adv-reviewer branch), RED→GREEN 66/66, pnpm run check clean. T3 (tk-0c23472dfede): gate-readiness regression tests AC1-AC4, 103 pass, full check clean. Commits: 4d90420d, d333f15d, 3849b260. All engineer reports carry durable adv_run_test run IDs with 0 verification warnings. T1 reviewer report carries verification_missing (pre-fix artifact, to be dispositioned at acceptance)." + }, + "acceptance": { + "status": "done", + "started_at": "2026-07-25T21:14:45.945Z", + "completed_at": "2026-07-25T21:18:14.781Z", + "completed_by": "user", + "approval_evidence": "User accepted ('accept'). Review matrix: 13 rows (no OOS — workaround for evaluator bug at gate-readiness.ts:1186-1188 which flags OOS rows as 'unknown'). All 5 ACs pass, 5 constraints respected, 3 avoidances respected. 211 tests pass. Full check clean. Executive summary persisted. Task 1 verification_missing dispositioned. OOS scope documented in agreement + backlog bl-Do-akUeH.", + "artifact_evidence": { + "kind": "acceptance", + "content_hash": "6f43448ee3c4244a7808dd3697feb9862c4f61f74a0b4e4629a7a28005f7d994", + "non_whitespace_chars": 2674, + "checked_at": "2026-07-25T20:13:01.788Z" + } + }, + "release": { + "status": "pending" + } + }, + "reentry_history": [ + { + "from_gate": "acceptance", + "reason": "Acceptance gate blocked by ACCEPTANCE_REVIEW_MATRIX_INVALID: unknown: OOS1, OOS2, OOS3 despite review matrix submitted 4x with correct rows (16 rows, 0 failing on each submission). Re-entering to reset gate state and clear potentially stale evaluator cache.", + "scope_delta": "No scope change — same agreement, same contract, same review matrix. Re-entry is purely to reset the acceptance gate signal state.", + "reopened_by": "agent", + "reopened_at": "2026-07-25T21:14:27.759Z", + "gates_reset": [ + "acceptance", + "release" + ] + } + ], + "origin": { + "kind": "discovery", + "source_artifact": "bl-cYctpKl-" + }, + "contract": { + "version": 1, + "rigor": "standard", + "source": { + "artifact": "agreement", + "contentHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "approvedAt": "2026-07-25T20:22:12.259Z" + }, + "items": [ + { + "id": "AC1", + "kind": "acceptance_criterion", + "text": "**AC1** — Given a done stage-v2 code task with `evidence_policy: review` and a persisted same-task `adv-reviewer` report, when acceptance or release readiness runs, then no `VERIFICATION_EVIDENCE_MISSING` blocker is emitted solely from the reviewer's aggregate `tests_run` list. *(Regression test: red → green.)*", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "test", + "status": "approved" + }, + { + "id": "AC2", + "kind": "acceptance_criterion", + "text": "**AC2** — Given a done task with `evidence_policy: test` or `evidence_policy: static_check` whose only evidence is a reviewer aggregate command list (no durable `adv_run_test` run), when readiness runs, then the block remains (`VERIFICATION_EVIDENCE_MISSING` still fires). Reviewer prose does not satisfy these policies.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "test", + "status": "approved" + }, + { + "id": "AC3", + "kind": "acceptance_criterion", + "text": "**AC3** — Given a done task with `evidence_policy: source_audit` or `evidence_policy: rubric_review`, when reviewer warnings exist, then no verification-evidence blocker is emitted. *(Already the case today; regression-protect.)*", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "test", + "status": "approved" + }, + { + "id": "AC4", + "kind": "acceptance_criterion", + "text": "**AC4** — Given a change-scoped `adv-reviewer` report, when task completion validation runs, then it cannot satisfy the task's `review_evidence_ref`. Same-task ownership is preserved.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "test", + "status": "approved" + }, + { + "id": "AC5", + "kind": "acceptance_criterion", + "text": "**AC5** — The `verification_missing` emitter in `plugin/src/tools/subagent-report.ts` is policy-gated: it fires `verification_missing` for `test`/`static_check` evidence policies but suppresses it for `review` policy when the report originates from `agent: \"adv-reviewer\"`.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "test", + "status": "approved" + }, + { + "id": "C1", + "kind": "constraint", + "text": "**C1** — Same-task reviewer ownership and `adv-reviewer` identity for `review_evidence_ref` must be preserved (`task-classifier.ts:382-394`).", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "static_check", + "status": "approved" + }, + { + "id": "C2", + "kind": "constraint", + "text": "**C2** — No change-scoped report may satisfy task-level reviewer evidence linkage (`subagent-reports.ts:50-67, 471-477`).", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "static_check", + "status": "approved" + }, + { + "id": "C3", + "kind": "constraint", + "text": "**C3** — `test` / `static_check` policies remain backed by independently durable execution evidence (`test.ts:484-558`); reviewer aggregate command prose cannot satisfy them.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "static_check", + "status": "approved" + }, + { + "id": "C4", + "kind": "constraint", + "text": "**C4** — No fake `adv_run_test` records may be synthesized from report-submitted command claims. Auto-recording reviewer commands as `adv_run_test` runs is explicitly rejected (direction 2).", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "static_check", + "status": "approved" + }, + { + "id": "C5", + "kind": "constraint", + "text": "**C5** — Existing acceptance-summary `review:acceptance` boundary remains separate and unchanged (`subagent-reports.ts:471-477`).", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "static_check", + "status": "approved" + }, + { + "id": "DONT1", + "kind": "avoidance", + "text": "**DONT1** — Do not extend the reviewer-authority exception to `test` or `static_check` policies. Those still require durable execution evidence from `adv_run_test` or equivalent capture.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "review", + "status": "approved" + }, + { + "id": "DONT2", + "kind": "avoidance", + "text": "**DONT2** — Do not auto-record `adv_run_test` runs from reviewer report claims. Reviewer reports carry aggregate `tests_run: string[]` without per-command exit codes, typed run IDs, duration, or execution classification. Writing `adv_run_test` records from these claims would falsely represent execution and bypass `adv_run_test`'s capture path.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "review", + "status": "approved" + }, + { + "id": "DONT3", + "kind": "avoidance", + "text": "**DONT3** — Do not add a new duplicate authority field or signal. `review_evidence_ref` already provides typed reviewer ownership, same-task binding, and stage-v2 completion proof. A second \"accepts-verification\" path duplicates authority without adding a missing identity boundary.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": true, + "evidencePolicy": "review", + "status": "approved" + }, + { + "id": "OOS1", + "kind": "out_of_scope", + "text": "**OOS1** — Schema gap in `ChangeScopedReviewerSubagentReportSchema` not enforcing reviewer-key pairing (`subagent-reports.ts:57-62, 471-477, 783-791`). Different defect; track separately.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": false, + "evidencePolicy": "not_applicable", + "status": "approved", + "notRequiredReason": "Out-of-scope contract item" + }, + { + "id": "OOS2", + "kind": "out_of_scope", + "text": "**OOS2** — Reviewer agent behavior changes (reviewer still runs commands and reports them as aggregate verification).", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": false, + "evidencePolicy": "not_applicable", + "status": "approved", + "notRequiredReason": "Out-of-scope contract item" + }, + { + "id": "OOS3", + "kind": "out_of_scope", + "text": "**OOS3** — Evidence policy taxonomy redesign.", + "sourceArtifact": "agreement", + "sourceHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "verificationRequired": false, + "evidencePolicy": "not_applicable", + "status": "approved", + "notRequiredReason": "Out-of-scope contract item" + } + ], + "amendments": [], + "reviewMatrix": { + "reviewedAt": "2026-07-25T21:18:01.368Z", + "rows": [ + { + "contractId": "AC1", + "kind": "acceptance_criterion", + "status": "pass", + "evidencePolicy": "test", + "evidence": "subagent-report + gate-readiness tests. tr_ms0ujmvp, tr_ms0v2cg0." + }, + { + "contractId": "AC2", + "kind": "acceptance_criterion", + "status": "pass", + "evidencePolicy": "test", + "evidence": "gate-readiness AC2 regression. tr_ms0v2cg0." + }, + { + "contractId": "AC3", + "kind": "acceptance_criterion", + "status": "pass", + "evidencePolicy": "test", + "evidence": "gate-readiness AC3 warn-first. tr_ms0v2cg0." + }, + { + "contractId": "AC4", + "kind": "acceptance_criterion", + "status": "pass", + "evidencePolicy": "test", + "evidence": "gate-readiness AC4 change-scoped rejected. tr_ms0v2cg0." + }, + { + "contractId": "AC5", + "kind": "acceptance_criterion", + "status": "pass", + "evidencePolicy": "test", + "evidence": "subagent-report TDD red->green. tr_ms0ujmvp." + }, + { + "contractId": "C1", + "kind": "constraint", + "status": "respected", + "evidencePolicy": "static_check", + "evidence": "task-classifier.ts:382-394 unchanged." + }, + { + "contractId": "C2", + "kind": "constraint", + "status": "respected", + "evidencePolicy": "static_check", + "evidence": "subagent-reports.ts:50-67,471-477 unchanged." + }, + { + "contractId": "C3", + "kind": "constraint", + "status": "respected", + "evidencePolicy": "static_check", + "evidence": "subagent-report.ts:493-587 unchanged." + }, + { + "contractId": "C4", + "kind": "constraint", + "status": "respected", + "evidencePolicy": "static_check", + "evidence": "Direction (2) rejected; no auto-record." + }, + { + "contractId": "C5", + "kind": "constraint", + "status": "respected", + "evidencePolicy": "static_check", + "evidence": "subagent-reports.ts:471-477 unchanged." + }, + { + "contractId": "DONT1", + "kind": "avoidance", + "status": "respected", + "evidencePolicy": "review", + "evidence": "AC2 confirms block for test/static_check." + }, + { + "contractId": "DONT2", + "kind": "avoidance", + "status": "respected", + "evidencePolicy": "review", + "evidence": "Direction (2) rejected." + }, + { + "contractId": "DONT3", + "kind": "avoidance", + "status": "respected", + "evidencePolicy": "review", + "evidence": "Direction (3) rejected." + } + ] + } + }, + "acceptanceCriteria": [ + "**AC1** — Given a done stage-v2 code task with `evidence_policy: review` and a persisted same-task `adv-reviewer` report, when acceptance or release readiness runs, then no `VERIFICATION_EVIDENCE_MISSING` blocker is emitted solely from the reviewer's aggregate `tests_run` list. *(Regression test: red → green.)*", + "**AC2** — Given a done task with `evidence_policy: test` or `evidence_policy: static_check` whose only evidence is a reviewer aggregate command list (no durable `adv_run_test` run), when readiness runs, then the block remains (`VERIFICATION_EVIDENCE_MISSING` still fires). Reviewer prose does not satisfy these policies.", + "**AC3** — Given a done task with `evidence_policy: source_audit` or `evidence_policy: rubric_review`, when reviewer warnings exist, then no verification-evidence blocker is emitted. *(Already the case today; regression-protect.)*", + "**AC4** — Given a change-scoped `adv-reviewer` report, when task completion validation runs, then it cannot satisfy the task's `review_evidence_ref`. Same-task ownership is preserved.", + "**AC5** — The `verification_missing` emitter in `plugin/src/tools/subagent-report.ts` is policy-gated: it fires `verification_missing` for `test`/`static_check` evidence policies but suppresses it for `review` policy when the report originates from `agent: \"adv-reviewer\"`." + ], + "documents": { + "proposal": "# Fix reviewer evidence verification_missing block\n\n## Problem\n\nStage-v2 task completion correctly links task-scoped `adv-reviewer` reports as `review_evidence_ref` (verified in production: `addWorkerBundleFreshness` tk-50e16e7530b0 links successfully). However, those linked reports carry `consumer_warnings: verification_missing` (\"Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command\"). This `verification_missing` flag then blocks gate readiness at acceptance/release, forcing operators to cancel+re-add tasks as `type:ops` (non-logic-bearing) to bypass the requirement — losing task typing fidelity (code/verification semantics, evidence_policy, contract_refs).\n\nLive reproduction: `fixOpsResolutionProjection` is stuck at acceptance (2026-07-25) on `VERIFICATION_EVIDENCE_MISSING: tk-41b7b4de9d8b has unresolved verification evidence: verification_missing` — same shape, different evidence_policy (test).\n\n## Root Cause Analysis (defect origin — rq-defectOriginRca01)\n\n**Original hypothesis (REFUTED)**: \"`adv_subagent_report_submit` only accepts `review:acceptance` scope for task-level reviewer-evidence linkage.\"\n\n**Tier 1 evidence** (adv-researcher 2026-07-25):\n\n- Stage-v2 completion validator (`plugin/src/validator/task-classifier.ts:373-395`) requires `agent === \"adv-reviewer\"` + **same-task ownership**, NOT `review:acceptance` scope.\n- `applySubagentReportSubmittedToState` (`plugin/src/temporal/change-state.ts:1564-1589`) links any task-scoped adv-reviewer report regardless of phase.\n- `review:acceptance` is a **change-scoped** independent-summary key (subagent-reports.ts:57-67, 468-477), not a task-scope requirement.\n- Production confirmation: `addWorkerBundleFreshness` tk-50e16e7530b0 (type:code) has `review_evidence_ref={report_key:\"addWorkerBundleFreshness|tk-50e16e7530b0|adv-reviewer|2\"}` linked successfully.\n\n**Actual root cause**: reviewer reports link fine, but their run commands (e.g. `bin/oc-test targeted -- ...`, `git diff --check`, `pnpm run check`) are not recorded as typed `adv_run_test` runs. The reviewer report's `verification` field carries command + exit code, but the consumer_warning emitter (`subagent-report.ts`) flags it as `verification_missing` because no durable `adv_run_test` run ID backs it. Downstream gate readiness treats this as unresolved verification evidence.\n\n**Security boundary to preserve**: the acceptance gate's requirement for `review:acceptance` scope on the acceptance summary itself; the same-task ownership requirement for task-level reviewer linkage; no change-scoped report may satisfy task-level reviewer evidence linkage.\n\n## Scope\n\n**In scope:**\n- Resolve `verification_missing` consumer_warning on linked reviewer evidence when the reviewer is the authority for that evidence policy.\n- Preserve acceptance-gate security (review:acceptance scope still required for the acceptance summary).\n\n**Out of scope:**\n- Schema gap in `ChangeScopedReviewerSubagentReportSchema` not enforcing reviewer-key pairing (subagent-reports.ts:57-62, 471-477, 783-791) — different defect, track separately.\n- Reviewer agent behavior changes (reviewer still runs commands and reports them).\n- Evidence policy redesign.\n\n**Must not:**\n- Weaken the same-task ownership requirement.\n- Allow change-scoped reports to satisfy task-level reviewer evidence linkage.\n- Auto-pass verification without an authority backing it.\n\n## Affected code\n\n- `plugin/src/tools/subagent-report.ts` (consumer_warning emitter, :203-230, 322-342, 845-934)\n- `plugin/src/types/evidence-policy.ts` (authority boundary, :71-81)\n- Gate readiness evaluator (`plugin/src/temporal/gate-readiness.ts`)\n- Tests: `plugin/src/validator/task-classifier.test.ts`, `plugin/src/tools/subagent-report.test.ts`\n\n## Fix direction (to evaluate in discovery)\n\nThree options, ranked:\n\n1. **Allow reviewer reports to satisfy verification_evidence when the reviewer is the authority for that evidence policy** — the reviewer's signed verdict + run evidence IS the authority; requiring a separate `adv_run_test` run for the same command double-counts. (Preferred.)\n2. **Auto-record `adv_run_test` runs for reviewer-run commands** — reviewer reports already carry run commands; record them as typed runs during report submission.\n3. **Introduce a typed reviewer-evidence-accepts-verification path** — explicit contract that reviewer evidence satisfies verification for review evidence policies without `adv_run_test` backing.", + "agreement": "# Agreement: Fix reviewer evidence verification_missing block\n\n## Objectives\n\n- **O1** — Remove synthetic `verification_missing` consumer_warning for same-task `review`-policy evidence when the authority is a persisted `adv-reviewer` report. The reviewer's signed verdict IS the authority for `review`-policy tasks; its aggregate `tests_run` command list neither creates nor substitutes for durable execution evidence.\n- **O2** — Preserve durable-run authority requirements for `test` and `static_check` policies. Reviewer aggregate command prose cannot fabricate execution provenance for these policies.\n- **O3** — Document the authority partition in `advance-workflow` spec-law and lock it with regression tests so the partition cannot silently drift.\n\n## Acceptance Criteria\n\n- **AC1** — Given a done stage-v2 code task with `evidence_policy: review` and a persisted same-task `adv-reviewer` report, when acceptance or release readiness runs, then no `VERIFICATION_EVIDENCE_MISSING` blocker is emitted solely from the reviewer's aggregate `tests_run` list. *(Regression test: red → green.)*\n- **AC2** — Given a done task with `evidence_policy: test` or `evidence_policy: static_check` whose only evidence is a reviewer aggregate command list (no durable `adv_run_test` run), when readiness runs, then the block remains (`VERIFICATION_EVIDENCE_MISSING` still fires). Reviewer prose does not satisfy these policies.\n- **AC3** — Given a done task with `evidence_policy: source_audit` or `evidence_policy: rubric_review`, when reviewer warnings exist, then no verification-evidence blocker is emitted. *(Already the case today; regression-protect.)*\n- **AC4** — Given a change-scoped `adv-reviewer` report, when task completion validation runs, then it cannot satisfy the task's `review_evidence_ref`. Same-task ownership is preserved.\n- **AC5** — The `verification_missing` emitter in `plugin/src/tools/subagent-report.ts` is policy-gated: it fires `verification_missing` for `test`/`static_check` evidence policies but suppresses it for `review` policy when the report originates from `agent: \"adv-reviewer\"`.\n\n## Success Criteria (non-acceptance, advisory)\n\n- **SC1** — After deployment, `fixOpsResolutionProjection` (currently stuck at acceptance on `VERIFICATION_EVIDENCE_MISSING`) can advance without the cancel+re-add-as-`type:ops` workaround — for any task whose `evidence_policy` is `review`.\n- **SC2** — The cancel+re-add workaround is no longer needed for `review`-policy tasks across the portfolio.\n\n## Constraints\n\n- **C1** — Same-task reviewer ownership and `adv-reviewer` identity for `review_evidence_ref` must be preserved (`task-classifier.ts:382-394`).\n- **C2** — No change-scoped report may satisfy task-level reviewer evidence linkage (`subagent-reports.ts:50-67, 471-477`).\n- **C3** — `test` / `static_check` policies remain backed by independently durable execution evidence (`test.ts:484-558`); reviewer aggregate command prose cannot satisfy them.\n- **C4** — No fake `adv_run_test` records may be synthesized from report-submitted command claims. Auto-recording reviewer commands as `adv_run_test` runs is explicitly rejected (direction 2).\n- **C5** — Existing acceptance-summary `review:acceptance` boundary remains separate and unchanged (`subagent-reports.ts:471-477`).\n\n## Avoidances\n\n- **DONT1** — Do not extend the reviewer-authority exception to `test` or `static_check` policies. Those still require durable execution evidence from `adv_run_test` or equivalent capture.\n- **DONT2** — Do not auto-record `adv_run_test` runs from reviewer report claims. Reviewer reports carry aggregate `tests_run: string[]` without per-command exit codes, typed run IDs, duration, or execution classification. Writing `adv_run_test` records from these claims would falsely represent execution and bypass `adv_run_test`'s capture path.\n- **DONT3** — Do not add a new duplicate authority field or signal. `review_evidence_ref` already provides typed reviewer ownership, same-task binding, and stage-v2 completion proof. A second \"accepts-verification\" path duplicates authority without adding a missing identity boundary.\n\n## Out of Scope\n\n- **OOS1** — Schema gap in `ChangeScopedReviewerSubagentReportSchema` not enforcing reviewer-key pairing (`subagent-reports.ts:57-62, 471-477, 783-791`). Different defect; track separately.\n- **OOS2** — Reviewer agent behavior changes (reviewer still runs commands and reports them as aggregate verification).\n- **OOS3** — Evidence policy taxonomy redesign.\n\n## Authority partition (summary table for spec-law)\n\n| `evidence_policy` | Authority source | Reviewer report satisfies verification? |\n|---|---|---|\n| `test` | Durable `adv_run_test` run | ✗ (still blocked without durable run) |\n| `static_check` | Durable `adv_run_test` run | ✗ (still blocked without durable run) |\n| `review` | Persisted same-task `adv-reviewer` report | ✓ (reviewer IS the authority) |\n| `artifact_reference` | Durable artifact pointer | ✗ (separate authority) |\n| `source_citation` / `source_audit` / `rubric_review` / `stakeholder_acceptance` / `design_proof` / `not_applicable` | Warn-first (non-blocking) | N/A (already non-blocking) |", + "design": "# Design: Fix reviewer evidence verification_missing block\n\n## Architecture\n\nThe fix is a single-point policy gate at the consumer_warning emitter. No workflow code changes, no gate-readiness evaluator changes, no new signals or fields.\n\n### Current flow (broken)\n\n```\nadv-reviewer report submitted\n → verificationWarnings() [subagent-report.ts:475-479]\n → UNCONDITIONALLY maps each tests_run command → verification_missing\n (\"Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: ...\")\n → warnings persisted on report.consumer_warnings\n → gate-readiness.ts:715-720 collects warnings from ALL latest-per-agent reports\n → VERIFICATION_EVIDENCE_MISSING blocker fires for ANY proof-bearing policy (incl. review)\n```\n\nThe emitter never checks the task's evidence policy. A `review`-policy task (where the reviewer IS the authority) gets the same `verification_missing` as a `test`-policy task (where durable `adv_run_test` is required).\n\n### Fixed flow\n\n```\nadv-reviewer report submitted\n → verificationWarnings() [subagent-report.ts:475]\n → resolve task evidence_policy via resolveTaskEvidence(task)\n → IF policy === \"review\": return [] (reviewer IS the authority — no warnings)\n → IF policy === \"test\" | \"static_check\" | other proof-bearing: keep current behavior\n → IF no task / no policy: keep current behavior (fail-safe)\n → no verification_missing persisted for review-policy tasks\n → gate-readiness.ts: no warnings to collect → no blocker\n```\n\n## Fix site\n\n**Single function**: `verificationWarnings()` in `plugin/src/tools/subagent-report.ts:470-480`.\n\n```typescript\n// BEFORE (lines 475-479):\nif (report.agent === \"adv-reviewer\") {\n return report.verification.tests_run.map((command) => ({\n kind: \"verification_missing\" as const,\n message: `Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: ${command}`,\n }));\n}\n\n// AFTER:\nif (report.agent === \"adv-reviewer\") {\n // rq-reviewerEvidenceAuthority01: for review-policy tasks, the persisted\n // same-task adv-reviewer report IS the authoritative completion evidence.\n // Its aggregate tests_run list neither creates nor substitutes for durable\n // execution evidence. Suppress verification_missing for review policy only;\n // test/static_check still require durable adv_run_test evidence.\n const policy = task ? resolveTaskEvidence(task).policy : undefined;\n if (policy === \"review\") {\n return [];\n }\n return report.verification.tests_run.map((command) => ({\n kind: \"verification_missing\" as const,\n message: `Reviewer aggregate evidence is non-authoritative; no typed adv_run_test run ID proves command: ${command}`,\n }));\n}\n```\n\n**Import**: `resolveTaskEvidence` must be imported into `subagent-report.ts`. It's the same resolver used by `gate-readiness.ts:710` (`const resolution = resolveTaskEvidence(task)`), ensuring emission-time and evaluation-time policy resolution are identical.\n\n## Why emission-time gating (not evaluation-time)\n\n| Approach | Pros | Cons |\n|---|---|---|\n| **Emission-time (chosen)** | Simplest; prevents warnings from polluting the report; locality of behavior — authority decision lives where the report is processed | If task evidence_policy changes between submission and evaluation, warnings may be stale. Unlikely in practice (policy is set at planning). |\n| Evaluation-time | More robust — always evaluates against current policy | More complex; must distinguish reviewer-sourced warnings from engineer-sourced warnings in the evaluator; duplicates authority logic |\n| Both (belt+suspenders) | Defense in depth | Overengineered for a single-policy exception |\n\nEmission-time is chosen because: (1) the authority partition is static per policy — `review` always means reviewer-is-authority; (2) the emitter already receives the `task` parameter; (3) gate-readiness.ts doesn't need to change, reducing blast radius.\n\n## Spec-law addition\n\nNew requirement `rq-reviewerEvidenceAuthority01` in `advance-workflow` capability spec:\n\n```\nrq-reviewerEvidenceAuthority01 [MUST]:\nThe stage-v2 evidence authority MUST partition verification requirements by\nevidence policy. For a completed task with evidence_policy \"review\", a persisted\nsame-task adv-reviewer report IS the authoritative completion evidence; its\naggregate tests_run command list neither creates nor substitutes for durable\nadv_run_test execution evidence, and the consumer_warning emitter MUST NOT emit\nverification_missing for it. For evidence_policy \"test\" or \"static_check\",\nreviewer aggregate command evidence MUST NOT satisfy the verification\nrequirement; durable adv_run_test execution evidence remains required.\n\nScenarios:\n.1 (AC1) Review-policy task with linked reviewer report — no verification block\n Given a completed stage-v2 task with evidence_policy \"review\"\n And a persisted same-task adv-reviewer report linked as review_evidence_ref\n When acceptance or release readiness evaluates verification evidence\n Then no VERIFICATION_EVIDENCE_MISSING blocker is emitted for the reviewer's tests_run\n\n.2 (AC2) Test/static_check-policy task with only reviewer evidence — block remains\n Given a completed task with evidence_policy \"test\" or \"static_check\"\n And a persisted same-task adv-reviewer report with aggregate tests_run\n And no durable adv_run_test run backing the commands\n When acceptance or release readiness evaluates verification evidence\n Then VERIFICATION_EVIDENCE_MISSING blocker is emitted\n\n.3 (AC5) Emitter policy-gates verification_missing for adv-reviewer reports\n Given a task with evidence_policy \"review\"\n When an adv-reviewer report is submitted with aggregate tests_run\n Then the consumer_warning emitter produces no verification_missing warnings\n\n.4 Same-task ownership preserved\n Given a change-scoped adv-reviewer report (no task_id anchor)\n When task completion validation runs\n Then it cannot satisfy the task's review_evidence_ref (unchanged)\n```\n\nThis is an additive MUST requirement. It does not modify `rq-verificationEvidence01` (which remains the general blocking rule) — it carves out the reviewer-authority partition as a separate, single-responsibility law.\n\n## What does NOT change\n\n- `gate-readiness.ts:694-733` (`checkUnresolvedVerificationEvidence`) — unchanged. It still collects verification_missing warnings and blocks. The fix prevents the warnings from being created for review-policy tasks.\n- `evidence-policy.ts:35-40` — `review` stays in `PROOF_BEARING_EVIDENCE_POLICIES`. The policy is still proof-bearing; the partition is about WHO is the authority, not whether proof is required.\n- `task-classifier.ts:373-395` — stage-v2 completion validator unchanged. It still requires `agent === \"adv-reviewer\"` + same-task ownership.\n- `subagent-report.ts:493-587` — adv-engineer/adv-designer warning logic unchanged.\n- Reviewer agent behavior unchanged — reviewer still runs commands and reports aggregate verification.\n- Acceptance-summary `review:acceptance` boundary unchanged.\n\n## Important limitation\n\nThis fix only resolves `verification_missing` for **`review`-policy** tasks. Tasks with `evidence_policy: test` or `static_check` that lack durable `adv_run_test` backing will still be blocked — correctly, because those policies require execution provenance the reviewer cannot provide.\n\n**`fixOpsResolutionProjection`** (currently stuck) has `tk-41b7b4de9d8b` with `evidence_policy: test` — this fix will **not** auto-unblock it. That task needs durable `adv_run_test` evidence or a typed disposition, not a reviewer-authority exception. The user's original cancel+re-add-as-`type:ops` workaround was for `review`-policy tasks (or tasks misclassified as requiring reviewer evidence); this fix addresses that specific friction.\n\nExisting reports already carrying `verification_missing` will remain blocked until a new warning-free report is submitted (latest-wins by attempt). The fix is forward-looking: new report submissions for `review`-policy tasks will not carry the warning.\n\n## Test plan (TDD)\n\n### RED tests (fail before implementation)\n\n1. **`subagent-report.test.ts`** — AC5/AC1: Submit an adv-reviewer report for a task with `evidence_policy: \"review\"` → assert `consumer_warnings` does NOT contain `verification_missing` for `tests_run` commands.\n2. **`subagent-report.test.ts`** — AC2: Submit an adv-reviewer report for a task with `evidence_policy: \"test\"` → assert `consumer_warnings` DOES contain `verification_missing` (current behavior preserved).\n3. **`gate-readiness.test.ts`** — AC1: Completed `review`-policy task with linked adv-reviewer report → `checkUnresolvedVerificationEvidence` returns no blocker.\n4. **`gate-readiness.test.ts`** — AC2: Completed `test`-policy task with only reviewer evidence → blocker remains.\n\n### GREEN (implementation makes RED pass)\n\n5. Implement the policy gate in `verificationWarnings()`.\n\n### Regression sweep\n\n6. Run existing `subagent-report.test.ts` + `gate-readiness.test.ts` + `task-classifier.test.ts` suites — 0 regressions.\n7. Verify `source_audit` / `rubric_review` warn-first behavior unchanged (already non-blocking).\n\n## LBP decisions\n\n- **D1: Policy-gate at emission, not evaluation.** The emitter already has the task parameter and the authority decision belongs at the point where the report is processed. Evaluation-time gating would duplicate authority logic and require distinguishing warning sources.\n- **D2: New spec requirement, not modify `rq-verificationEvidence01`.** The reviewer-authority partition is a distinct concern from the general blocking rule. A new `rq-reviewerEvidenceAuthority01` keeps each requirement single-responsibility.\n- **D3: Only `review` policy gets the exception.** `test` and `static_check` genuinely require execution provenance. `artifact_reference` requires a durable artifact pointer. `review` is the only proof-bearing policy where the reviewer's signed verdict is the intended authority.\n- **D4: No wf.patched needed.** The fix is host-side only (subagent-report.ts emitter). The workflow query handler (gate-readiness.ts) doesn't change — it still checks for warnings. Only the warnings' existence changes.\n\n## Affected files\n\n| File | Change |\n|---|---|\n| `plugin/src/tools/subagent-report.ts` | Policy-gate `verificationWarnings()` at :475-479; import `resolveTaskEvidence` |\n| `plugin/src/tools/subagent-report.test.ts` | RED→GREEN tests for AC1/AC2/AC5 |\n| `plugin/src/temporal/gate-readiness.test.ts` | Regression tests for AC1/AC2 |\n| `.adv/specs/advance-workflow/spec.json` | Additive `rq-reviewerEvidenceAuthority01` (4 scenarios) |\n| `plugin/src/adv-autonomy-quality-assets.test.ts` | Presence/structure assertion for new requirement |", + "executiveSummary": "# Executive Summary: Fix reviewer evidence verification_missing block\n\n## Outcome\n\nTask-scoped `adv-reviewer` reports now correctly serve as authoritative completion evidence for `review`-policy tasks. The consumer_warning emitter no longer produces false `verification_missing` warnings that blocked gate readiness for these tasks, eliminating the cancel+re-add-as-`type:ops` workaround that was losing task typing fidelity.\n\n## Why it matters\n\nOperators were forced to cancel `type:code`/`type:verification` tasks with `evidence_policy: review` and re-add them as `type:ops` to bypass a `verification_missing` blocker that fired unconditionally on every `adv-reviewer` report — regardless of whether the reviewer was the intended authority for that evidence policy. This workaround discarded code/verification semantics, evidence plans, and contract references, degrading traceability and audit quality.\n\n## What changed\n\n**Single-point policy gate** at `plugin/src/tools/subagent-report.ts:475-479`: the `verificationWarnings()` function now resolves the task's evidence policy via `resolveTaskEvidence(task)` and suppresses `verification_missing` when the policy is `review` and the report is from `adv-reviewer`. For `test`/`static_check` policies, the current behavior is preserved — reviewer aggregate evidence does not satisfy those policies (durable `adv_run_test` execution evidence is still required).\n\n**New spec-law requirement** `rq-reviewerEvidenceAuthority01` in `advance-workflow` codifies the authority partition: `review` policy = reviewer is authority; `test`/`static_check` = durable execution evidence required. Four scenarios warrant AC1, AC2, AC5, and same-task ownership preservation.\n\n## Verification\n\n- **42 asset tests** pass (spec requirement presence + structure assertions)\n- **66 subagent-report tests** pass (TDD red→green: review-policy suppresses, test-policy preserves)\n- **103 gate-readiness tests** pass (AC1 no-block, AC2 block-remains, AC3 warn-first, AC4 change-scoped rejected)\n- **Full `pnpm run check`** clean (schemas, typecheck, manifests, test-isolation, lockfile, lint, format)\n\n## Risks and follow-ups\n\n- **Forward-looking only**: existing reports already carrying `verification_missing` remain blocked until a new warning-free report is submitted (latest-wins by attempt). New report submissions for `review`-policy tasks after deploy will not carry the warning.\n- **`fixOpsResolutionProjection`** (currently stuck) has `evidence_policy: test` — this fix does not auto-unblock it (test policy still needs durable evidence).\n- **Static_check friction**: the fix only suppresses `verification_missing` for `review` policy. Spec-law tasks with `static_check` policy may still face the same friction (dispositioned during this change's acceptance as a pre-fix artifact). If this recurs broadly, a follow-up may extend the authority partition.\n- **Schema gap** in `ChangeScopedReviewerSubagentReportSchema` (doesn't enforce reviewer-key pairing) tracked separately — different defect, not addressed here.", + "acceptance": "# Acceptance\n\nReviewed at: 2026-07-25T21:18:01.368Z\n\n## Contract Review Matrix\n\n| ID | Kind | Requirement | Status | Evidence |\n|---|---|---|---|---|\n| AC1 | acceptance_criterion | **AC1** — Given a done stage-v2 code task with `evidence_policy: review` and a persisted same-task `adv-reviewer` report, when acceptance or release readiness runs, then no `VERIFICATION_EVIDENCE_MISSING` blocker is emitted solely from the reviewer's aggregate `tests_run` list. *(Regression test: red → green.)* | pass | subagent-report + gate-readiness tests. tr_ms0ujmvp, tr_ms0v2cg0. |\n| AC2 | acceptance_criterion | **AC2** — Given a done task with `evidence_policy: test` or `evidence_policy: static_check` whose only evidence is a reviewer aggregate command list (no durable `adv_run_test` run), when readiness runs, then the block remains (`VERIFICATION_EVIDENCE_MISSING` still fires). Reviewer prose does not satisfy these policies. | pass | gate-readiness AC2 regression. tr_ms0v2cg0. |\n| AC3 | acceptance_criterion | **AC3** — Given a done task with `evidence_policy: source_audit` or `evidence_policy: rubric_review`, when reviewer warnings exist, then no verification-evidence blocker is emitted. *(Already the case today; regression-protect.)* | pass | gate-readiness AC3 warn-first. tr_ms0v2cg0. |\n| AC4 | acceptance_criterion | **AC4** — Given a change-scoped `adv-reviewer` report, when task completion validation runs, then it cannot satisfy the task's `review_evidence_ref`. Same-task ownership is preserved. | pass | gate-readiness AC4 change-scoped rejected. tr_ms0v2cg0. |\n| AC5 | acceptance_criterion | **AC5** — The `verification_missing` emitter in `plugin/src/tools/subagent-report.ts` is policy-gated: it fires `verification_missing` for `test`/`static_check` evidence policies but suppresses it for `review` policy when the report originates from `agent: \"adv-reviewer\"`. | pass | subagent-report TDD red->green. tr_ms0ujmvp. |\n| C1 | constraint | **C1** — Same-task reviewer ownership and `adv-reviewer` identity for `review_evidence_ref` must be preserved (`task-classifier.ts:382-394`). | respected | task-classifier.ts:382-394 unchanged. |\n| C2 | constraint | **C2** — No change-scoped report may satisfy task-level reviewer evidence linkage (`subagent-reports.ts:50-67, 471-477`). | respected | subagent-reports.ts:50-67,471-477 unchanged. |\n| C3 | constraint | **C3** — `test` / `static_check` policies remain backed by independently durable execution evidence (`test.ts:484-558`); reviewer aggregate command prose cannot satisfy them. | respected | subagent-report.ts:493-587 unchanged. |\n| C4 | constraint | **C4** — No fake `adv_run_test` records may be synthesized from report-submitted command claims. Auto-recording reviewer commands as `adv_run_test` runs is explicitly rejected (direction 2). | respected | Direction (2) rejected; no auto-record. |\n| C5 | constraint | **C5** — Existing acceptance-summary `review:acceptance` boundary remains separate and unchanged (`subagent-reports.ts:471-477`). | respected | subagent-reports.ts:471-477 unchanged. |\n| DONT1 | avoidance | **DONT1** — Do not extend the reviewer-authority exception to `test` or `static_check` policies. Those still require durable execution evidence from `adv_run_test` or equivalent capture. | respected | AC2 confirms block for test/static_check. |\n| DONT2 | avoidance | **DONT2** — Do not auto-record `adv_run_test` runs from reviewer report claims. Reviewer reports carry aggregate `tests_run: string[]` without per-command exit codes, typed run IDs, duration, or execution classification. Writing `adv_run_test` records from these claims would falsely represent execution and bypass `adv_run_test`'s capture path. | respected | Direction (2) rejected. |\n| DONT3 | avoidance | **DONT3** — Do not add a new duplicate authority field or signal. `review_evidence_ref` already provides typed reviewer ownership, same-task binding, and stage-v2 completion proof. A second \"accepts-verification\" path duplicates authority without adding a missing identity boundary. | respected | Direction (3) rejected. |\n| OOS1 | out_of_scope | **OOS1** — Schema gap in `ChangeScopedReviewerSubagentReportSchema` not enforcing reviewer-key pairing (`subagent-reports.ts:57-62, 471-477, 783-791`). Different defect; track separately. | missing | |\n| OOS2 | out_of_scope | **OOS2** — Reviewer agent behavior changes (reviewer still runs commands and reports them as aggregate verification). | missing | |\n| OOS3 | out_of_scope | **OOS3** — Evidence policy taxonomy redesign. | missing | |\n\n" + }, + "artifacts": { + "proposal": { + "updatedAt": "2026-07-25T20:13:01.839Z", + "contentHash": "9b08453290bdb973a567744bc72d7ba58606b8806eb43120ed18891ecbe3f62b", + "source": "temporal", + "readable": false + }, + "agreement": { + "updatedAt": "2026-07-25T20:19:17.312Z", + "contentHash": "627a99986d1a776c4f4563682db8fee49527d4e0f4ee8a349c7ae5ba4b341ec6", + "source": "temporal", + "readable": false + }, + "design": { + "updatedAt": "2026-07-25T20:23:20.581Z", + "contentHash": "df156dab49221c7f3dca4cc87f8a486d3866c520c1b833f096f9ddb29975a489", + "source": "temporal", + "readable": false + }, + "executiveSummary": { + "updatedAt": "2026-07-25T21:10:22.723Z", + "contentHash": "6f43448ee3c4244a7808dd3697feb9862c4f61f74a0b4e4629a7a28005f7d994", + "source": "temporal", + "readable": false + } + }, + "lastSignalAt": "2026-07-25T21:24:55.766Z", + "adv_project_id": "bdf259aa162ae192af5b18899ccdc653b085528d", + "same_project_dependencies": [] +} diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/executive-summary.md b/.adv/archive/2026-07-26-fixReviewerEvidence/executive-summary.md new file mode 100644 index 00000000..67c9c61d --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/executive-summary.md @@ -0,0 +1,29 @@ +# Executive Summary: Fix reviewer evidence verification_missing block + +## Outcome + +Task-scoped `adv-reviewer` reports now correctly serve as authoritative completion evidence for `review`-policy tasks. The consumer_warning emitter no longer produces false `verification_missing` warnings that blocked gate readiness for these tasks, eliminating the cancel+re-add-as-`type:ops` workaround that was losing task typing fidelity. + +## Why it matters + +Operators were forced to cancel `type:code`/`type:verification` tasks with `evidence_policy: review` and re-add them as `type:ops` to bypass a `verification_missing` blocker that fired unconditionally on every `adv-reviewer` report — regardless of whether the reviewer was the intended authority for that evidence policy. This workaround discarded code/verification semantics, evidence plans, and contract references, degrading traceability and audit quality. + +## What changed + +**Single-point policy gate** at `plugin/src/tools/subagent-report.ts:475-479`: the `verificationWarnings()` function now resolves the task's evidence policy via `resolveTaskEvidence(task)` and suppresses `verification_missing` when the policy is `review` and the report is from `adv-reviewer`. For `test`/`static_check` policies, the current behavior is preserved — reviewer aggregate evidence does not satisfy those policies (durable `adv_run_test` execution evidence is still required). + +**New spec-law requirement** `rq-reviewerEvidenceAuthority01` in `advance-workflow` codifies the authority partition: `review` policy = reviewer is authority; `test`/`static_check` = durable execution evidence required. Four scenarios warrant AC1, AC2, AC5, and same-task ownership preservation. + +## Verification + +- **42 asset tests** pass (spec requirement presence + structure assertions) +- **66 subagent-report tests** pass (TDD red→green: review-policy suppresses, test-policy preserves) +- **103 gate-readiness tests** pass (AC1 no-block, AC2 block-remains, AC3 warn-first, AC4 change-scoped rejected) +- **Full `pnpm run check`** clean (schemas, typecheck, manifests, test-isolation, lockfile, lint, format) + +## Risks and follow-ups + +- **Forward-looking only**: existing reports already carrying `verification_missing` remain blocked until a new warning-free report is submitted (latest-wins by attempt). New report submissions for `review`-policy tasks after deploy will not carry the warning. +- **`fixOpsResolutionProjection`** (currently stuck) has `evidence_policy: test` — this fix does not auto-unblock it (test policy still needs durable evidence). +- **Static_check friction**: the fix only suppresses `verification_missing` for `review` policy. Spec-law tasks with `static_check` policy may still face the same friction (dispositioned during this change's acceptance as a pre-fix artifact). If this recurs broadly, a follow-up may extend the authority partition. +- **Schema gap** in `ChangeScopedReviewerSubagentReportSchema` (doesn't enforce reviewer-key pairing) tracked separately — different defect, not addressed here. \ No newline at end of file diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/proposal.md b/.adv/archive/2026-07-26-fixReviewerEvidence/proposal.md new file mode 100644 index 00000000..18f2ef19 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/proposal.md @@ -0,0 +1,44 @@ +# Fix reviewer evidence verification + +## Why + + + +## What Changes + + + +## User Outcomes + + + +- [ ] User outcome 1 +- [ ] User outcome 2 +- [ ] Discovery will firm acceptance criteria and success criteria + +## Affected Code + + + +- `path/to/file.ts` — description of change +- `path/to/other.ts` — description of change + +## Constraints + + + +## Impact + + + +## Risks + + + +## Validation Plan + + + +- Write failing tests for new behavior (red phase) +- Implement to make tests pass (green phase) +- Run full test suite to verify no regressions diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/spec-projection.json b/.adv/archive/2026-07-26-fixReviewerEvidence/spec-projection.json new file mode 100644 index 00000000..ea1105e8 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/spec-projection.json @@ -0,0 +1,6 @@ +{ + "schema_version": 1, + "change_id": "fixReviewerEvidence", + "delta_set_sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "capabilities": [] +} diff --git a/.adv/archive/2026-07-26-fixReviewerEvidence/summary.v1.json b/.adv/archive/2026-07-26-fixReviewerEvidence/summary.v1.json new file mode 100644 index 00000000..e21e7e32 --- /dev/null +++ b/.adv/archive/2026-07-26-fixReviewerEvidence/summary.v1.json @@ -0,0 +1,16 @@ +{ + "archived_at": "2026-07-26T17:57:14.503Z", + "capabilities": [], + "change_hash": "a6edd1ca83f0b787c0253c234820dd2ad684418490f097c50e96956b41cfc227", + "change_id": "fixReviewerEvidence", + "completed_tasks": 3, + "created_at": "2026-07-25T20:13:01.723Z", + "current_gate": "release", + "last_activity_at": "2026-07-25T21:18:14.781Z", + "lifecycle_state": "open", + "status": "archived", + "summary_hash": "54cef0c39e5a5137734f34eae7695abc1ec12d71c55c2a436cf135b7a11c00fe", + "task_count": 3, + "title": "Fix reviewer evidence verification", + "version": "1" +}