Repository navigation
feat(loop): C2 launch-time committed-truth check (keyless council anchor) - #43
Conversation
…hor) When the loop config has no signed reference, compare the live pseudo_operator section against the committed copy on origin/main and run the committed copy on drift (drift_unsigned), the keyless analogue of Track C restore-by-consumption. --require-committed makes it a fail-closed gate (refuses on drift and when it cannot confirm committed truth). Signed reference present -> Track C wins. Council spec COUNCIL_VERDICT.md Phase 1 (C2). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Failed checks: code_quality |
reviewer process exited with rc=1 for state_key=ContextLifecycle-43 (stdout_tail="You've hit your session limit · resets 3:30pm (America/New_York)") |
The automated fix passes exhausted the Self-Heal Ladder (reached L2/2) without changing the branch; a fresh self-review on the same PR head still finds concerns. Further autonomous retries would repeat without progress. Latest concerns: Failed checks: code_quality |
committed.py imported the private signing._load_section and duplicated its section-extraction. Promote to public signing.section_of(data) + load_section(file) so the signed and committed anchors resolve the SAME scope with no duplication, and catch yaml.YAMLError in verify_committed (its never-raises contract missed malformed committed YAML). Resolves the reviewer's code_quality concern on this PR. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Needs human attention (reason= The automated fix passes exhausted the Self-Heal Ladder (reached L2/2) without changing the branch; a fresh self-review on the same PR head still finds concerns. Further autonomous retries would repeat without progress. Latest concerns: Failed checks: code_quality |
…ted slugs (attribution substrate) (#44) Verified self-merge under the C2/#43 precedent: all CI green, custodian clean, diff reviewed line-by-line by the supervising session (additive telemetry field + display-token change; no gate behavior change). Reviewer fleet parked by budget throttle; CL main has no required review check. Operator directed continue.
…ests_green) (#45) Verified self-merge under the C2/#43 precedent: all CI green, custodian clean, 21-test fail-closed matrix + 432-test suite on the rebased tree. Standalone module with zero callers (inert until P2 wires it); no gate behavior change. Reviewer fleet parked by budget throttle; CL main has no required review check. Operator directed continue.
…in the injected cold block (#46) Verified self-merge under the C2/#43 precedent: CI green, custodian clean, 434-test suite; entire source change reviewed inline (one rendered-only instruction line gated on cold_slugs; telemetry untouched). Reviewer fleet parked by budget throttle. Operator directed continue.
…trailer → consequence plan) (#47) Verified self-merge under the C2/#43 precedent: CI green, custodian clean (fixed real C29/C16 findings pre-push), 465-test suite incl. the full 7-attack red-team matrix. Supervising session reviewed attribution.py line-by-line: all five link-predicate clauses enforced fail-closed, verbatim tests_green guard (never True on doubt), zero writes, never raises. Reviewer fleet parked by budget throttle. Operator directed continue.
… (human --apply) (#48) Verified self-merge under the C2/#43 precedent: CI green, custodian clean (fixed a real D11 duplicate-code finding pre-push), 498-test suite. Supervising session reviewed attribution_apply.py line-by-line: write-once + monotone guards re-checked at write time against fresh disk reads; verbatim tests_green (never True on doubt); token-less plan path so dry-run == applied Phase A; no standalone CLI (only mutation path is the reviewed --apply boundary); per-item fail-soft. Reviewer fleet parked by budget throttle. Operator directed continue.
What
Council spec (
docs/design/COUNCIL_VERDICT.mdin OperationsCenter) Phase 1 / C2 — the keyless analogue of Track C's signed anchor.When the loop config has no signed reference,
cl loop runnow compares the livepseudo_operator:section against the committed copy onorigin/main:unsigned;signed_status="drift_unsigned", no YAML rewrite) and flag loudly — restore-by-consumption, keylessly;New launcher flag
--require-committed(parity with--require-signed, lives outside agent-reachable config) turns it into a fail-closed gate: refuses to start on drift and when it cannot confirm committed truth (offline) — a fail-open skip there would let anyone bypass the gate by cutting network access.A signed reference present ⇒ Track C wins unchanged; C2 is never consulted.
How
pseudo_operator/committed.py—verify_committed()runs a boundedgit fetch+git show origin/main:<relpath>; every reachability/parse failure returnsskip(never raises)._load_section+canonical_bytes, so the committed comparison scope is byte-identical to what Track C signs.config.load_verified_config()gainsrequire_committed;cli/loop.pygains the--require-committedtyper flag and adrift_unsignedlog branch.Tests
12 C2 tests + signing/loop regression (28 in the touched set; full suite 408 pass). Covers match/drift/offline/absent,
--require-committedrefusal on drift AND offline, signed-reference-bypasses-C2, and the CLI flag.Council spec Phase 1 (C2). C1 (reviewer council mode) and C3 (EVAL panel) follow in OperationsCenter.
🤖 Generated with Claude Code