Repository navigation
feat: verification plans, criteria gate and per-check results - #366
Conversation
|
Implemented #290 at Agent-reported verification:
The one CI read for the final head returned no reported checks ( Persistence, plan execution, the final verification gate/resume and CI substitution remain outside #290 as specified in the owner decisions. Updated owning docs: docs/execution-plan.md and docs/verification.md. This is an implementation handoff, without approval or merge. |
[CCR-20261029-001] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2SummaryStatus: CHANGES_REQUESTED for head Findings[REV-001] · medium · open · - · blocks:yes — Plane/Jira cycles now stop before implementation; undocumented, with a misleading messagePaths:
[REV-002] · medium · open · - · blocks:no —
|
| Command | Result |
|---|---|
python3 scripts/validate-package.py |
exit 0: VALID: 16 skills (7 cycle, 9 supporting), shared sections in sync, cross-agent manifests aligned |
python3 -m unittest discover -s tests |
exit 0: Ran 2069 tests in 191.651s, OK (all pass here; the PR text reports 22 failures in test_dependency_setup under the nested Codex limitation, which did not reproduce in this stage) |
python3 -m unittest |
exit 0, but 0 tests ran (no discovery at the repo root). It gives no evidence |
python3 /home/datacas/.code-cycle/runtime/cycle_journal.py ... permissions |
no permission decisions in force for this branch |
Dependency preparation reported prepared (npm ci, scripts disabled). I did not count it as a test run.
Unverified
- REV-002 is not reproduced by execution (the probe was denied by the command table); it rests on reading
VerificationPlan.extendand the driver. - BasedPyright results in the PR description are agent-reported and were not rerun.
CI (parallel policy, read once, not waited on)
Head 9070ed2 has five checks from workflow "Validate package", all IN_PROGRESS: Skills, manifests, and Bash installer, Windows test shard (windows-1), (windows-2), (windows-3), (windows-4). None has passed yet, and none has failed. This is not a finding. The CI gate decides.
Residual risks
- Resumes (
--from resolve|rereview) and cycles with no work-item provider build anot_evaluableplan, so their verification is permanently capped atnot_verifieduntil Execute and replan native cycles under mandatory policy gates #329 persists plans. The docs record this as intended. - A standalone v2 report without a runtime plan (
_testswith no plan) trusts the agent-suppliedcriterialist. - Documentation otherwise covers the change (
docs/execution-plan.md,docs/verification.md, issue template).
Verdict
CHANGES_REQUESTED: REV-001 blocks approval. REV-002 does not block.
ORCHESTRATION_RESULT (JSON)
ORCHESTRATION_RESULT
{"skill": "cc-initial-review", "status": "CHANGES_REQUESTED", "issue_provider": "github", "issue_id": "290", "code_host": "github", "change_request_id": "366", "change_request_url": "#366", "pr_number": 366, "issue_number": 290, "head_sha": "9070ed2d332451f71151a2c1b6aec5490da8b475", "reviewed_head_sha": "9070ed2d332451f71151a2c1b6aec5490da8b475", "review_run_id": "CCR-20261029-001", "reviewer": {"profile": "reviewer", "provider": "anthropic", "model_requested": "claude-sonnet-5-5", "model_resolved": null, "effort": "high"}, "findings": [{"id": "REV-001", "severity": "medium", "status": "open", "disposition": "-", "blocks_approval": true, "category": "correctness", "path": "scripts/run_cycle.py", "line": 3965}, {"id": "REV-002", "severity": "medium", "status": "open", "disposition": "-", "blocks_approval": false, "category": "correctness", "path": "scripts/run_cycle.py", "line": 3395}], "blocking_findings": ["REV-001"], "checks": {"head_sha": "9070ed2d332451f71151a2c1b6aec5490da8b475", "passed": 0, "failed": 0, "pending": 5}, "blocking": false}
END_ORCHESTRATION_RESULT
[CCR-20261029-002] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2SummaryStatus: CHANGES_REQUESTED for head Findings[REV-001] · medium · open · - · blocks:yes — Plane/Jira cycles now stop before implementation; undocumented, with a misleading messagePaths: Recovered from the previous review and re-confirmed in the code. [REV-002] · medium · open · - · blocks:no —
|
| Command | Result |
|---|---|
python3 -m unittest discover -s tests |
exit 0: Ran 2069 tests in 184.778s, OK |
python3 scripts/validate-package.py |
exit 0: VALID: 16 skills (7 cycle, 9 supporting), shared sections in sync, cross-agent manifests aligned |
python3 -m unittest |
exit 0, but 0 tests ran (no discovery at the repo root); it gives no evidence |
Dependency preparation reported prepared (npm ci, scripts disabled); it was not counted as a test run.
Unverified
- REV-002 and REV-003 are not reproduced by execution; they rest on reading the code.
- BasedPyright results in the PR description are agent-reported and were not rerun.
- The PR description reports 15 failures and 7 errors in
test_dependency_setupunder the nested Codex limitation. They did not reproduce here: the full suite passed.
CI (parallel policy, read once, not waited on)
Head 9070ed2 has six checks from workflow "Validate package", all SUCCESS: Skills, manifests, and Bash installer, Windows test shard (windows-1) to (windows-4), and PowerShell installer. None failed, pending or skipped. This is not a finding.
Residual risks
- Resumes (
--from resolve|rereview) and cycles with no work-item provider build anot_evaluableplan, so their verification is permanently capped atnot_verifieduntil Execute and replan native cycles under mandatory policy gates #329 persists plans. The docs record this as intended. - A standalone v2 report without a runtime plan (
_testswith no plan) trusts the agent-suppliedcriterialist. criteria_contextis appended to the instruction of every stage, including reviewers, not only the code stages.- Criteria must be a flat list at column zero, so a wrapped or indented continuation line sends the work item to
needs_refinement. This is documented.
Verdict
CHANGES_REQUESTED: REV-001 blocks approval. REV-002 and REV-003 do not block. All required checks of this head passed, but an open blocking finding remains.
[CCR-20261029-001] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2[CCR-20261029-002] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2[CCT-20261029-001] · deep_coder · openai/gpt-6.1-sol→? · high · triaged:9070ed2d332451f71151a2c1b6aec5490da8b475 · schema:2RESOLVED, with full-suite verification pending under the known nested Codex prerequisite. All three findings were classified as valid against the triaged head before source edits. Fix commit [REV-001] · medium · resolved · valid · blocks:yes — Plane/Jira stop needs accurate messaging and documentationPreserved the conservative stop before implementation. An unavailable reader now produces [REV-002] · medium · resolved · valid · blocks:no — Later stages need the frozen configured-test identityThe runtime now supplies existing frozen check identities to subsequent code stages. The four reporting skills instruct agents to retain the check's owning executor/profile when their dispatch differs, preserving the owner's identity contract. A check requiring a different context needs a new ID and cannot replace an existing obligation. The multi-stage regression verifies successful reports across different implement/rereview profiles and executors, without weakening identity validation. [REV-003] · medium · resolved · valid · blocks:no — No-test stages must preserve earlier verificationOmitted tests and outcome-free Verification (agent-reported; commands executed in this stage):
Post-change review used the complete fix delta from trusted review head CI was read once for Owning documentation was updated in this fix. Persistence and verification-only resume remain deferred to #329. Residual limitations are the unavailable full-suite prerequisite and non-clean type checking; none is represented as passed. |
[CCR-20261029-001] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2[CCR-20261029-002] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2[CCT-20261029-001] · deep_coder · openai/gpt-6.1-sol→? · high · triaged:9070ed2d332451f71151a2c1b6aec5490da8b475 · schema:2[CCR-20261029-003] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2SummaryStatus: REVIEW_PASSED_AWAITING_CI for head What changed since the previous reviewCommit
Previous findings[REV-001] · medium · resolved · valid · blocks:yes — Plane/Jira cycles now stop before implementation; undocumented, with a misleading messageCorrected and verified by execution. [REV-002] · medium · resolved · valid · blocks:no —
|
| Command | Result |
|---|---|
python3 -m unittest discover -s tests |
exit 0: Ran 2073 tests in 178.466s, OK |
python3 scripts/validate-package.py |
exit 0: VALID: 16 skills (7 cycle, 9 supporting), shared sections in sync, cross-agent manifests aligned |
python3 -m unittest tests.test_verification_plan -v |
exit 0: 24 tests OK, including the five regression tests above |
python3 -m unittest |
exit 0, but 0 tests ran (no discovery at the repo root). It gives no evidence |
The full suite passed in this stage. The implementer reported 22 test_dependency_setup failures under the nested Codex socket limitation (#268); they did not reproduce here. Dependency preparation reported prepared (npm ci, scripts disabled) and was not counted as a test run.
Unverified
- The BasedPyright results reported in the PR text were not rerun.
- I did not probe the case where an
implementstage omitstestsin a cycle with a configured test command. Nothing is recorded, as before Verification plan: map acceptance criteria to checks and record per-check results #290, and the docs now say so. No case turns missing verification into a pass.
CI (parallel policy, read once, not waited on)
Head 77db5dc has five reported checks from workflow "Validate package". Passed: Skills, manifests, and Bash installer, Windows test shard (windows-2). Pending: Windows test shard (windows-1), (windows-3), (windows-4). No failure is reported. PowerShell installer, a required gate in CONTRIBUTING.md, is not yet reported for this head; the earlier head had it. This is CI state, not a finding. The cycle's CI gate decides.
Residual risks
- Resumes (
--from resolve|rereview) and cycles with no work-item provider build anot_evaluableplan, so their verification stays capped atnot_verifieduntil Execute and replan native cycles under mandatory policy gates #329 persists plans. The docs record this as intended. - A standalone v2 report without a runtime plan trusts the agent-supplied
criterialist. - Identity reuse across profiles relies on the agent following the prompt and skills.
Verdict
REVIEW_PASSED_AWAITING_CI: the head is completely rereviewed, every previous finding is resolved, and no open finding blocks approval. Required checks have not all passed yet, so this is not an approval.
Closes #290
Defines verification plans in ExecutionPlan version 3 and emits per-check results through tests.version=2. GitHub work items now require an explicit, parseable acceptance-criteria list before implementation, regardless of issue-review mode or difficulty. Plane and Jira criteria remain explicitly not evaluable until their readers exist.
The contract freezes check identity and obligations, retains result history, invalidates results from another HEAD, and deterministically caps conclusions for required failures, unverified checks and uncovered criteria. The one-release legacy adapter preserves unmatched executed evidence and never infers a missing required pass. Code-host checks remain separate.
Diagnosis
This is a feature request, so defect reproduction does not apply. The driver previously consumed stage-wide evidence without a structured criteria source or per-check states. The invariant is that project and criterion obligations cannot be removed, and missing or stale verification cannot become success. Related work was checked against the issue and owner decisions, with #288, #289, #327, #328 and #329 providing the relevant boundaries. The latest owner decisions defer persistence, plan execution, the final verification gate and verification-only resume to #329; CI substitution is also outside this change. No provisional store, new stop-reason schema or provider reader for Plane/Jira is introduced.
Work units
Verification (agent-reported)
python3 -m unittest tests.test_execution_plan tests.test_verification_plan tests.test_cycle_outcomes tests.test_stage_dispatch tests.test_validate_workflow tests.test_fast_path: exit 0, 190 tests.python3 scripts/validate-package.py: exit 0; 16 skills and shared sections validated.python3 -m unittest discover -s tests: exit 1, 2,068 tests, 15 failures and 7 errors, all in test_dependency_setup under the known nested Codex socket limitation (Codex write stages fail: /tmp/codex-daemon-<uid> masked in the stage sandbox, and reroute stops on publication_changed #268). Some assertions see missing preparation outputs because the guard stops their mocked commands. Full-suite verification remains not_verified, rather than passed. The original command was rerun after fixing regressions; the follow-up cap case was then verified by the targeted suite. No isolation was disabled and no nested Codex launch was attempted as recovery.The targeted tests use controlled provider fixtures, disposable repositories and a real local child process for the criteria-reader boundary. They do not need live credentials or global Git identity. The full-suite prerequisite remains specific to this nested executor; CI is complementary evidence and is not reported as locally executed verification. Under the parallel CI policy this stage reads the pushed head's checks once without waiting.
Documentation and scope
The new behaviour was not previously documented. This change updates the owning pages, docs/execution-plan.md and docs/verification.md, plus the emitting skills and a new issue template. README has no entry-point changes. Durable plan/result persistence and the final gate/resume remain for #329; this PR does not implement CI substitution or claim merge readiness.
The final uploaded head is
9070ed2d332451f71151a2c1b6aec5490da8b475, confirmed throughgh pr view. Its one CI read returned an empty statusCheckRollup: no checks were reported yet, and none is claimed passed. The parallel policy leaves the CI wait to the cycle gate.