Skip to content

feat(runtime): execute native cycles from policy plans - #371

Merged
datacas merged 2 commits into
mainfrom
task-329
Oct 30, 2026
Merged

datacas merged 2 commits into
mainfrom
task-329

Conversation

@datacas

@datacas datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Execute native cycles from the resolved policy plan, preserve verification obligations across revisions, and stop unverified required checks from producing merge readiness.

Closes #329

Work item: #329

Diagnosis

Feature request; decision: implement. The existing plan contracts describe policy, but the live CLI rejects non-standard execution and the driver follows a fixed stage loop. Check histories are in-memory, ordinary resolution repeats rereview without comparing HEADs, and there is no durable verification-only resume. No defect reproduction applies to this feature request; the existing driver and contract tests establish the integration gap.

Related work was searched by execution-plan and verification terms, including closed work and merged changes. #327/#328 and PRs #361/#362 provide the plan contracts; #290/PR #366 provides per-check evidence; #189/PR #369 provides the existing explicit driver loop. #259 and #261 are closed security dependencies. #330 owns supervised Orca integration and remains separate. The change extends the existing loop, gates and history store rather than introducing another workflow engine.

Behavior

  • Consume all five execution profiles and preserve mandatory obligations when policy, HEAD, criteria or execution context changes.
  • Persist schema-25 plan revisions, canonical receipt digests, closed verification metadata and SHA-specific check histories without prompts or output text in the history projection.
  • Stop with verification_unverified when required evidence is missing; generic CI cannot substitute for it.
  • Recover same-HEAD pending checks through one disposable cc-verify dispatch, retaining completed evidence and a valid clean review. Reconcile changed policies or partial history before reusing evidence.
  • Keep open findings blocking without an identical rereview. Require Hotfix reproduction/regression identities and test-first fail/pass proof with matching test and environment fingerprints.

Work units

Unit Behavior Files Tests Verification Rollback
WU-1 Integrate native plan execution, persistence and mandatory verification recovery scripts/cycle_plan.py, driver/history/contracts/permissions/schema modules, runtime manifest, six owning docs pages Native plan/Hotfix/recovery/clone integrity tests, contract tests, installed-runtime fixtures and schema regression Full suite and package validator pass; CLI and disposable-clone boundaries exercised independent; revert this commit to restore previous behavior. The additive history table can remain unused; no shared data migration was applied during verification.

Verification

Agent-reported local evidence:

Level Command Exit Executed
static python3 scripts/validate-package.py 0 —
test python3 -m unittest discover -s tests 0 2121
boundary python3 -m unittest tests.test_run_cycle.NativeExecutionPlanTests tests.test_verification_plan tests.test_execution_plan 0 56

The full suite has one existing skip. Boundary coverage invokes the real CLI with valid and invalid arguments, installs the runtime with fake agent binaries, and exercises detached verification clones. The tests use disposable Git repositories and SQLite databases with explicit fixture identities, without relying on global Git credentials. Live model dispatch and Windows execution were not performed locally. BasedPyright comparison against the committed baseline reports 172 existing errors and no introduced errors in the affected runtime modules.

Documentation

The prior contract-only behavior was already documented. This PR updates the owning pages in docs/execution-plan.md, docs/verification.md, docs/workflows.md, docs/review-cycle.md, docs/telemetry.md and docs/configuration.md in the same change. No README entry point was added or removed.

CI policy is parallel: the implementation stage reads checks of the uploaded HEAD once and leaves pending checks to the cycle's CI gate. Human review and merge remain required.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

Implemented #329 at 34b5a0ccbc793af791e393549174563002f563ee. The uploaded commit was confirmed against the PR HEAD.

Native plan execution, schema-25 history, verification-only recovery, conditional rereview and Hotfix proof requirements are implemented. The six owning documentation pages are updated.

Agent-reported local evidence:

Level Command Exit Executed
static python3 scripts/validate-package.py 0 —
test python3 -m unittest discover -s tests 0 2121
boundary python3 -m unittest tests.test_run_cycle.NativeExecutionPlanTests tests.test_verification_plan tests.test_execution_plan 0 56

The full suite has one existing skip. Boundary coverage invokes the real CLI with valid and invalid arguments, installs the runtime with fake agent binaries, and exercises detached verification clones. The tests use disposable Git repositories and SQLite databases with explicit fixture identities, without relying on global Git credentials. Live model dispatch and Windows execution were not performed locally. BasedPyright comparison against the committed baseline reports 172 existing errors and no introduced errors in the affected runtime modules.

Checks of this HEAD, read once under the parallel CI policy:

  • Skills, manifests, and Bash installer: pending
  • Windows test shard (windows-1): pending
  • Windows test shard (windows-2): pending
  • Windows test shard (windows-3): pending
  • Windows test shard (windows-4): pending

Routing: profile deep_coder; requested openai/gpt-6.1-sol; resolved ?; effort medium.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

Initial review — #371 feat(runtime): execute native cycles from policy plans

[CCR-20261030-001] · senior_reviewer · anthropic/claude-opus-5-5→? · high · schema:2

Verdict: CHANGES_REQUESTED. Reviewed head is 34b5a0ccbc793af791e393549174563002f563ee. Two open findings block approval.

Summary and scope

I reviewed the complete accumulated diff from merge base a3d98d5 to 34b5a0c: 1715 lines, 22 files, read in full. The PR covers:

  • the new scripts/cycle_plan.py;
  • the native driver changes in cycle_loop.py, cycle_dispatch.py, cycle_session.py and cycle_cli.py;
  • the schema-25 history in cycle_history.py and telemetry.py;
  • receipt validation in review_contract.py;
  • the verification-plan history and current() semantics;
  • the verify role in stage_permissions.py;
  • the six docs pages and the tests.

The implementation matches the acceptance criteria of #329. Native execution consumes all five profiles. Revisions are append-only and privacy-projected. The verification_unverified barrier is in place. A verification-only resume runs in a detached clone without remotes, and it checks HEAD and the source workspace before and after the dispatch. Hotfix needs test-first proof. Ordinary resolution does not rerun an identical rereview.

The findings are about the contract the new security gate depends on, documentation that now contradicts the behaviour, and an inconsistent terminal state for verified_change.

Findings

[REV-001] · medium · open · - · blocks:yes — The review result key security_audit_ran is required by the runtime but declared by no skill or doc

Paths: scripts/cycle_dispatch.py:566, scripts/cycle_plan.py:279, scripts/cycle_plan.py:373

When the plan selects security, a review or rereview without security_audit_ran: true in its payload stops the cycle with verification_unverified. The security completion state in record_plan_stage is set only from that key. Security is selected under Full, for any sensitive diff, and whenever the diff paths cannot be read.

git grep security_audit_ran finds the key only in the runtime, the telemetry field table, tests and the fake agent. It is not in skills/ (cc-initial-review, cc-rereview) or in docs/. The cc-initial-review result contract says the block "carries identifiers and status only". A reviewer that follows its skill therefore omits the key even after a real audit, and the cycle stops falsely.

The only source of the key is the prompt suffix from plan_context(). The changed installed-cycle tests show the effect: every default installed cycle now ends HUMAN_INTERVENTION / verification_unverified with "security audit was omitted". The fake agent reaches resolution only with FAKE_SECURITY_AUDIT=1.

Fix: declare security_audit_ran in the result contracts of the review and rereview skills, and document it in the owning docs page under the structured result. Alternatively, derive audit completion from evidence the skills already publish.

[REV-002] · medium · open · - · blocks:yes — The owning docs sections contradict the new stop behaviour

Paths: docs/review-cycle.md:365, docs/review-cycle.md:372, docs/instrumentation.md:703, docs/review-cycle.md:3, docs/telemetry.md:3

  • The review-cycle.md exit-conditions table still defines no_progress as "a rereview reports the same head_sha and the same open finding set". The new stop (cycle_loop.py:398-403) happens when a resolution leaves the reviewed HEAD unchanged, before any rereview. The table has no verification_unverified row.
  • The claim rules at review-cycle.md:372 say a finding triaged incorrect and published not_applicable is a claim "judged by the next review". A comment-only resolution never moves HEAD, so it now stops with no_progress and the next review never runs. The docs should state this consequence where claims are defined.
  • instrumentation.md:703 lists telemetry.STOP_REASONS but not verification_unverified.
  • The new paragraphs in review-cycle.md and telemetry.md are placed above each page's introduction and On this page navigation, not in the sections that own these concepts.

AGENTS.md treats a visible change without its owning docs as a finding.

[REV-003] · medium · open · - · blocks:no — verified_change ends with a terminal status that nothing else uses, and the path is untested

Paths: scripts/cycle_loop.py:272-274, scripts/cycle_session.py:240-248

After a clean review, the loop ends a verified_change cycle with status IN_PROGRESS and stop_reason: local_only. No other code path ends a cycle as IN_PROGRESS, so a finished cycle reads as unfinished. local_only also misclassifies a cycle that has a change request.

The same objective reached through stop(APPROVED_END), for example after the verification-only resume, ends instead as HUMAN_INTERVENTION / local_only. docs/configuration.md does not name the terminal status. No test drives the native verified_change path; test_execution_profiles covers only plan construction.

[REV-004] · low · open · - · blocks:no — Dead code from the removed pre-#329 gate

Paths: scripts/execution_profiles.py:339, scripts/cycle_loop.py:141

  • current_flow_differences has no runtime caller after check_current_flow was removed. Its docstring and tests (test_execution_profiles.py:69,375,388-392) still describe the "until Execute and replan native cycles under mandatory policy gates #329" refusal.
  • In cycle_loop.py, the except VerificationError around self.state.verification_plan.criteria is unreachable now that criteria are read in prepare_plan.

Security triage

  • Deterministic rule: no match. .code-cycle.yml declares no security_review.always_when, so the defaults apply. No changed path matches the mandatory minimum (CI, secrets, agent configuration). The PR has no labels.
  • Reviewer judgement: sensitive. The change touches command authorization (stage_permissions.py, and authorized_bindings rebinding journal commands), the disposable verification workspace, and what the telemetry history stores.
  • Audit result: the audit ran inline; the cc-security-review pass was not dispatched separately. I found no confirmed vulnerabilities:
    • Rebinding from the journal accepts only commands that the current allowed_commands authorizes, and the test shows ; echo secret is rejected.
    • The verifier clone uses --no-hardlinks, has no remote and no writable directories, and receives only the pending exact commands. The runtime checks that the source and clone HEAD are unchanged before and after the dispatch.
    • The projection removes command text, criterion prose, reasons and attempts.
    • Plan receipts are accepted only from trusted_authors, and only when they match a stored revision.
  • Residual: Hotfix fingerprints (test_sha256, context_sha256, cause: defect) are reported by the agent and are not recomputed by the runtime.

Commands executed (local clone at 34b5a0c)

Command Exit Observed
python3 scripts/validate-package.py 0 VALID: 16 skills (7 cycle, 9 supporting), shared sections in sync, cross-agent manifests aligned
python3 -m unittest discover -s tests 0 Ran 2121 tests in 392.763s — OK (skipped=1)
python3 -m unittest 0 Ran 0 tests: default discovery from the repository root finds no tests. This configured prefix verifies nothing on its own.

The findings come from code inspection plus git grep (REV-001, REV-002, REV-004). REV-001 is also backed by the changed installed-cycle tests, which pass with the new stop. REV-003 was not reproduced at runtime, because this read-only stage cannot add a test.

Unverified

  • Live model dispatch, and whether a real reviewer emits security_audit_ran from the prompt suffix alone. Not executed; this needs live agents.
  • Windows execution: covered only by CI.

CI (read once; parallel policy)

Check State
Skills, manifests, and Bash installer pass
Windows test shard (windows-1) pass
Windows test shard (windows-2) pass
Windows test shard (windows-3) pending
Windows test shard (windows-4) pass

The cycle's CI gate decides on the pending shard.

Residual risks

  • Every new live behaviour, including Full, Hotfix, verified_change, verification-only resume and the security barrier, is proven only with fake agents.
  • Each dispatch now appends one or two plan revisions. The cycle_execution_plans table grows with every stage.
  • When work-item criteria change, the old items are restored as opaque AC-n placeholders and the new criteria are appended. The old prose is not recoverable for the agent.

Verdict

CHANGES_REQUESTED: blocking findings REV-001 and REV-002.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

Resolution — #371

Status: RESOLVED. Fix commit dcd36fc270c62c0988418bb8c4a1aa2e8df9443f was uploaded through the stage publication helper. A subsequent gh pr view confirmed the PR head equals that commit. All four findings below are addressed by this commit. Human review and merge remain required.

[CCR-20261030-001] · senior_reviewer · anthropic/claude-opus-5-5→? · high · schema:2

[CCT-20261030-001] · deep_coder · openai/gpt-6.1-sol→? · high · triaged:34b5a0ccbc793af791e393549174563002f563ee · schema:2

All four findings were classified valid against the triaged SHA before editing. Their dispositions remain frozen. No findings were rejected or left open. The work stayed in the task-329 linked worktree and branch.

[REV-001] · medium · resolved · valid · blocks:yes — The review result key security_audit_ran is required by the runtime but declared by no skill or doc

Declared the boolean in both cc-initial-review and cc-rereview result contracts and examples, including instructions for skipped, incomplete and blocked audits. docs/review-cycle.md now documents the structured field, the plan's security obligation and the verification_unverified stop. The field is true only after the audit completes for the reviewed SHA; a clean verdict does not imply completion. The runtime guard remains unchanged. Focused regressions prove omitted and false audit results stop a Full review; the verified-change tests exercise explicit true completion. Updated the package validator to recognize both result-contract wordings while preserving the exception for questions; the regression now exercises initial review, rereview and resolver contracts.

[REV-002] · medium · resolved · valid · blocks:yes — The owning docs sections contradict the new stop behaviour

Updated the exit table to describe unchanged resolution HEADs stopping before rereview and added verification_unverified. The claim section explicitly explains why a comment-only not_applicable resolution cannot bypass the guard or count a survival without a readable review rejection. Added schema-25 stop evidence to docs/instrumentation.md. Moved plan-loop prose into The loop and plan-history prose into its own schema-25 history subsection, below each page's introduction and navigation. Checked these sections against the runtime and existing unchanged-HEAD regressions.

[REV-003] · medium · resolved · valid · blocks:no — verified_change ends with a terminal status that nothing else uses, and the path is untested

Both normal completion and verification-only resume now use the shared completion path: HUMAN_INTERVENTION / approved, with an explicit objective-completion explanation. They retain the verification barrier, skip the merge-readiness CI gate and cannot report READY_FOR_MANUAL_MERGE. Configuration and lifecycle docs name that terminal behavior. New regressions reproduced IN_PROGRESS on the normal path and local_only on resume before the fix, then passed afterward. Normal completion is covered under strict and parallel CI policies; resume coverage uses the disposable clone boundary and asserts CI is not called.

[REV-004] · low · resolved · valid · blocks:no — Dead code from the removed pre-#329 gate

Removed current_flow_differences, its obsolete refusal tests and the unreachable criteria-access exception handler. No references to the removed symbol remain. Profile planning and native execution regressions pass.

Verification

Agent-reported local evidence; executed in the foreground and awaited:

Command Exit Observed
python3 -m unittest tests.test_run_cycle.NativeExecutionPlanTests tests.test_execution_profiles 0 50 tests passed, including real CLI subprocess and disposable verification-clone coverage
python3 -m unittest tests.test_validate_package tests.test_run_cycle.NativeExecutionPlanTests tests.test_execution_profiles 0 121 tests passed after the validator update
python3 scripts/validate-package.py 0 16 skills valid; shared sections and cross-agent manifests aligned
python3 -m unittest discover -s tests 0 2,122 tests in 282.024 seconds; OK, one existing skip
python3 -m unittest 0 0 tests discovered; no coverage credited
basedpyright scripts/cycle_loop.py scripts/cycle_session.py scripts/execution_profiles.py --outputjson 1 3 existing errors; not a clean type-check pass
python3 "$TMPDIR/typecheck.py" 0 Same affected-file check including scripts/validate-package.py against disposable reviewed-baseline copies: baseline 6 error diagnostics, current 6, introduced 0; both underlying type-check runs exit 1
git diff --check 0 No whitespace errors

The first full-suite run found one validator regression in 2,122 tests; its outdated literal matcher was corrected and the suite rerun. The baseline comparison reports no introduced errors; existing diagnostics remain. No unrelated diagnostics were changed. The tests use disposable repositories/databases and fixture identities rather than GitHub write credentials or global Git identity. Live model dispatch and Windows execution were not run locally; one existing suite skip remains.

Post-fix review and security

Selected delta base: 34b5a0ccbc793af791e393549174563002f563ee, the runtime-supplied trusted review receipt. Ancestor verification succeeded. The delegated cc-code-review read the complete updated 534-line fix delta and returned no P0–P3 findings. This pass does not approve the PR or replace accumulated rereview.

Security triage: no deterministic path/label trigger; reviewer judgement requested an audit because the fix changes security completion reporting and cycle completion. The delegated cc-security-review found no confirmed or new potential vulnerabilities. The omitted-audit barrier remains fail-closed and no permissions, publication boundaries, credentials, dependencies or stored-data projections were weakened. Audit completion remains agent-reported.

Checks of the uploaded head

Read once under the parallel CI policy with gh pr view 371 --repo datacas/code-cycle-toolkit --json headRefOid,statusCheckRollup:

  • HEAD: dcd36fc270c62c0988418bb8c4a1aa2e8df9443f (matches the uploaded commit).
  • Passed: 0; failed: 0; pending: 0; registered items: 0.
  • GitHub returned an empty rollup at this read. This is not a CI pass or evidence that the repository has no configured workflows. No polling, waiting, or in-stage CI fix round was performed; the cycle's CI gate owns subsequent results.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

Rereview — #371 feat(runtime): execute native cycles from policy plans

[CCR-20261030-001] · senior_reviewer · anthropic/claude-opus-5-5→? · high · schema:2

[CCT-20261030-001] · deep_coder · openai/gpt-6.1-sol→? · high · triaged:34b5a0ccbc793af791e393549174563002f563ee · schema:2

[CCR-20261030-002] · senior_reviewer · anthropic/claude-opus-5-5→? · high · schema:2

Verdict: REVIEW_PASSED_AWAITING_CI. Reviewed head is dcd36fc270c62c0988418bb8c4a1aa2e8df9443f; the previous review was of 34b5a0ccbc793af791e393549174563002f563ee. All four previous findings are resolved and verified. One new finding is non-blocking. The review of this head is complete, but it is not an approval: the required checks were still running when I read them, and the cycle's CI gate decides.

What changed since the previous review

There is one fix commit, 34b5a0c..dcd36fc: 13 files, +158/−111. I read the whole 534-line delta. I also re-read the accumulated diff from merge base a3d98d5 to dcd36fc, which is 2048 lines and 30 files, and confirmed its line count matches the runtime evidence file. That re-read concentrated on the runtime trust boundaries: cycle_dispatch.py, cycle_history.py, cycle_loop.py, the verification resume and barrier in cycle_plan.py, and stage_permissions.py. The fix commit changes:

  • the result contracts and examples of cc-initial-review and cc-rereview, which now declare security_audit_ran;
  • the matcher in validate-package.py;
  • verified_change completion in cycle_loop.py and cycle_session.py;
  • dead-code removal in execution_profiles.py and cycle_loop.py;
  • documentation in review-cycle.md, telemetry.md, instrumentation.md and configuration.md;
  • the tests.

Previous findings

[REV-001] · medium · resolved · valid · blocks:yes — The review result key security_audit_ran is required by the runtime but declared by no skill or doc

Fixed and verified.

  • Contracts: both review skills now declare the boolean, with its semantics, in the result contract and the JSON example (skills/cc-initial-review/SKILL.md:722-731,754 and skills/cc-rereview/SKILL.md:714-723,746). docs/review-cycle.md:351-358 documents it under The structured result is opt-in. git grep security_audit_ran now finds it in the skills and docs as well as the runtime.
  • Runtime: the guard is unchanged and fails closed. cycle_dispatch.py:566 stops on anything other than is not True.
  • By execution: test_required_security_needs_explicit_completion_from_the_reviewer passes. A Full review that omits the key, or sets it to false, ends verification_unverified. Explicit true completes the native verified_change path in test_verified_change_completes_without_merge_readiness_or_ci.
  • Validator: validate-package.py passes, and the updated questions-exception regression passes for all review-cycle skills.

[REV-002] · medium · resolved · valid · blocks:yes — The owning docs sections contradict the new stop behaviour

Fixed and verified against the runtime.

  • Exit table: no_progress now describes an unchanged resolution HEAD, as in cycle_loop.py:398-403. A verification_unverified row was added (docs/review-cycle.md:384-385).
  • Comment-only resolutions: the claim section explains that a comment-only not_applicable resolution stops with no_progress.
  • Stop reasons: docs/instrumentation.md:713-715 lists verification_unverified.
  • Placement: the plan-loop prose moved into The loop. The plan-history prose moved to a new Execution plan history (schema 25) subsection of docs/telemetry.md. Both page introductions and On this page lines are restored at the top.

The new claim paragraph sits in an awkward spot, reported as REV-005 below. It does not change the outcome of REV-002.

[REV-003] · medium · resolved · valid · blocks:no — verified_change ends with a terminal status that nothing else uses, and the path is untested

Fixed and verified.

  • Shared path: both completion paths now go through stop(APPROVED_END), which runs verification_barrier(). That path maps verified_change to HUMAN_INTERVENTION / approved; see cycle_loop.py:129-130,272-273 and cycle_session.py:244-248.
  • No leftover status: no code path still ends a cycle as IN_PROGRESS; git grep IN_PROGRESS finds nothing in the loop, session or plan modules.
  • By execution: the new regressions pass for normal completion under both strict and parallel, and for verification-only resume. They assert stop_reason == "approved", approved false, and that the CI gate is not called.
  • Docs: docs/configuration.md and docs/review-cycle.md name the terminal state.

[REV-004] · low · resolved · valid · blocks:no — Dead code from the removed pre-#329 gate

Fixed and verified.

  • current_flow_differences: removed with its tests. git grep current_flow_differences finds no references.
  • Unreachable handler: the except VerificationError in cycle_loop.py was removed. criteria is a plain dataclass field. When a policy provider is set, prepare_plan() (cycle_plan.py:200-205) has already read the criteria before drive(), and execute() (cycle_session.py:318-323) catches their read errors. The access therefore cannot raise there.

New findings

[REV-005] · low · open · - · blocks:no — The new claim paragraph separates "These do not count:" from its table

Paths: docs/review-cycle.md:392-400

The paragraph that starts "An ordinary comment-only resolution leaves HEAD unchanged…" was inserted between the sentence ending "These do not count:" and the table of sequences that sentence introduces. A reader now gets the no-progress paragraph where the list of exceptions should be. Fix: move the paragraph after the table, or before "A finding survives a claimed fix". This is a placement problem only; the content is correct.

Security triage

  • Deterministic rule: no match. .code-cycle.yml declares no security_review.always_when. No changed path matches the mandatory minimum (CI and automation, secrets and keys, agent and toolkit configuration), and the PR has no labels.
  • Reviewer judgement: sensitive, so an audit is required. The fix changes the result contract that reports security-audit completion, and terminal paths that sit next to the verification barrier. The accumulated change touches command authorization and the disposable verification clone.
  • Audit: the cc-security-review pass ran for dcd36fc over the accumulated diff, with emphasis on the fix delta. It found no confirmed vulnerabilities:
    • The new verified_change returns still pass through verification_barrier(), through stop(APPROVED_END) or an explicit call just before (cycle_loop.py:619-631). An incomplete required security stage, or unverified checks, therefore cannot complete the objective.
    • The security_audit_ran guard stays fail-closed for omitted or false values.
    • Permissions, publication boundaries, the stored-data projection (plan_projection) and the verifier clone are unchanged by the fix commit.
    • The verifier clone still has no remote and no writable directories, receives only the pending exact commands, and is checked for source and clone HEAD and status changes.
  • Potential risk (informational, unchanged): security_audit_ran and the Hotfix fingerprints are reported by the agent and are not recomputed by the runtime.

Commands executed (local clone at dcd36fc)

Command Exit Observed
python3 -m unittest discover -s tests 0 Ran 2122 tests in 230.433s — OK (skipped=1)
python3 scripts/validate-package.py 0 VALID: 16 skills (7 cycle, 9 supporting), shared sections in sync, cross-agent manifests aligned
python3 -m unittest 0 Ran 0 tests: default discovery from the repository root finds no tests, so this configured command verifies nothing on its own
python3 -m unittest -v with the four focused regressions for REV-001 and REV-003 0 Ran 4 tests — OK

Unverified

  • Live model dispatch, including whether a real reviewer emits security_audit_ran from the updated skill contract. That needs live agents.
  • Windows execution, which only CI covers.

CI (read once; parallel policy)

Check State
Skills, manifests, and Bash installer pending (in progress)
Windows test shard (windows-1) pending (in progress)
Windows test shard (windows-2) pending (in progress)
Windows test shard (windows-3) pending (in progress)
Windows test shard (windows-4) pending (in progress)

Passed 0, failed 0, pending 5 for dcd36fc. The cycle's CI gate decides on these checks.

Residual risks

  • Every new live behaviour is still proven only with fake agents: Full, Hotfix, verified_change, verification-only resume and the security barrier.
  • The pre-existing comment at scripts/cycle_dispatch.py:520 ("Resumes cannot recover criteria revisions until Execute and replan native cycles under mandatory policy gates #329") is outside the diff but now stale.
  • cycle_execution_plans gains one or two revisions per dispatch.

Verdict

REVIEW_PASSED_AWAITING_CI. No open finding blocks approval; REV-005 is blocks:no. Merge readiness waits for the required checks of dcd36fc, and a human owns the merge.

ORCHESTRATION_RESULT (JSON)

ORCHESTRATION_RESULT
{"skill":"cc-rereview","status":"REVIEW_PASSED_AWAITING_CI","issue_provider":"github","issue_id":"329","code_host":"github","change_request_id":"371","change_request_url":"https://github.com/datacas/code-cycle-toolkit/pull/371","pr_number":371,"issue_number":329,"previous_reviewed_head_sha":"34b5a0ccbc793af791e393549174563002f563ee","reviewed_head_sha":"dcd36fc270c62c0988418bb8c4a1aa2e8df9443f","head_sha":"dcd36fc270c62c0988418bb8c4a1aa2e8df9443f","security_audit_ran":true,"review_run_id":"CCR-20261030-002","reviewer":{"profile":"senior_reviewer","provider":"anthropic","model_requested":"claude-opus-5-5","model_resolved":null,"effort":"high"},"verified_findings":[{"id":"REV-001","severity":"medium","blocks_approval":true,"status":"resolved","disposition":"valid"},{"id":"REV-002","severity":"medium","blocks_approval":true,"status":"resolved","disposition":"valid"},{"id":"REV-003","severity":"medium","blocks_approval":false,"status":"resolved","disposition":"valid"},{"id":"REV-004","severity":"low","blocks_approval":false,"status":"resolved","disposition":"valid"}],"new_findings":[{"id":"REV-005","severity":"low","status":"open","disposition":"-","blocks_approval":false,"path":"docs/review-cycle.md","line":394}],"blocking_findings":[],"checks":{"head_sha":"dcd36fc270c62c0988418bb8c4a1aa2e8df9443f","passed":0,"failed":0,"pending":5},"blocking":false}
END_ORCHESTRATION_RESULT

@datacas
datacas merged commit ee223e9 into main Oct 30, 2026
6 checks passed
@datacas
datacas deleted the task-329 branch October 30, 2026 16:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Execute and replan native cycles under mandatory policy gates

1 participant