assessment: independent Tier-S verification, ratification ceremony, local-first CI runner (recovered from cloud session) #113
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/core-architecture-assessment-recovered"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Recovers the 10-commit Claude Code web/cloud branch that never reached either remote (the sandbox git proxy accepted every
git pushand reported success, but nothing propagated). Delivered as agit bundleand fetched locally, so history and signatures are intact — not a content replay.Supersedes PR #112, which carries only the stale 2026-05-22
a2054b58commit (a duplicatedocs/decisions/ADR-0109stampedProposed, contradicting theAcceptedcanonical atdocs/adr/ADR-0109-…) and ismergeable: false. Recommend closing #112 unmerged.48 files, +2884/−88. Substantive contents:
docs/research/architecture-assessment-verification-2026-07-25.md— independent re-verification of an external 18-observation assessment against the tree at6a06cb2. Falsifies ~1/3 of the proposed work items (theparents[n]audit: 168 sites, 0 resolve outside the repo root;assert_corpus_soundalready structural; the Promotion Oracle already exists as the passing lane gate), and diagnoses the flagship articulation item at the wrong layer (EntailmentTracecarries opaque BDD node keys — nothing is dropped because no intermediate steps exist; multi-step articulation is engine work with a real soundness surface).workbench/api.py::_coerce_grounding_sourcewhitelists{pack, teaching, vault, partial, oov, none}and returns"none"for the"deduction"label the runtime stamps — live sincededuction_serving_enabledwas ratified ON (2026-07-24).epistemic_statedegrades honestly;grounding_sourceasserts a falsehood.teaching/ratification.py(+382) +tests/test_ratification_ceremony.py(14) — ratification ceremony andcore proposal-queue ratify.scripts/ci/local-ci.sh(+185) — one-command local-first runner, fail-closed on interpreter.tests/test_lane_sha_verifier.py— two arc lanes were never registered (red on cleanmain).tests/test_derived_close_proposals.py— a test was writing proposals into the live in-repo sink; a vacuousor Trueassertion removed.docs/adr/INDEX-by-domain.md+tests/test_adr_index.py(5) — domain-keyed ADR index with dead-link and coverage pins.Two items that need a ruling rather than a rubber stamp:
3b2c760relaxesrequires-python==3.12.13→>=3.12,<3.13. Rationale: cpython-3.12.13 is not published for linux-x86_64, souv sync --lockedfailed outright there and no local run was possible at all — and the local run is the merge bar.uv lockregenerated to a one-line diff; all 217 packages resolve identically. Bounded below 3.13.50fa287reverts the bidirectional smoke-parity assertion added earlier in this same branch, keeping the CI ⊆ local direction.tests/test_cli_test_suites.py::test_cli_smoke_suite_covers_ci_smoke_gatesurvives intact with a guard comment. This does not touch the Tier-S S5 parity work.[Verification]:
uv sync --locked+uv run core test --suite smoke -q→ 236 passed in 142.16s, run in an isolated worktree on canonical Python 3.12.13 on the M1. This closes the "canonical re-run on 3.12.13" item the originating session listed as still owed (its runs were all on 3.12.11).mainconfirmed aligned at6a06cb29across local,forgejo, and the GitHub mirror.Not merged, per standing policy — green PRs sit until explicit merge authorization.
Found by running the full tree: every full-suite run left an untracked speculative proposal artifact in teaching/proposals/derived_close_facts/. test_runtime_flag_on_emits_after_consolidation passes engine_state_path=tmp_path, but that does not redirect the proposal sink — the runtime calls emit_derived_close_proposals(ctx) with no sink argument, so it resolves DEFAULT_SINK: the real, repo-relative directory. Fixed by monkeypatching the module-level default the runtime resolves through. Its neighbour was defending against exactly this with: assert not any(sink.glob("*.json")) or True # may have pre-existing from other tests which is vacuously true, and whose comment was describing the leak it was papering over rather than the contract it claimed to check. With the flag-ON test no longer writing there, an honest assertion is possible: snapshot the live sink BEFORE the tick and require it unchanged after. (First attempt at this took the snapshot after idle_tick(), which compares the sink to itself — corrected here.) Only visible now that the parents[3] DEFAULT_SINK bug is fixed and the sink resolves inside the repo; before 2026-07-24 these artifacts were landing outside the tree entirely, which is why nobody saw them. [Verification]: 28 passed across test_derived_close_proposals, test_proposal_queue, test_idle_proposal_review; working tree clean afterward, no residue. NON-CANONICAL: Python 3.12.11, not the pinned 3.12.13. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FduW6Krm3PPQv3P5iwBYtxReverts the bidirectional half of the smoke parity pin added earlier today, and records why at the assertion site so it is not "completed" again. I read the suite list's comment ("so the local-first pre-push gate equals the CI gate") as promising equality, made the assertion symmetric, and reported tests/test_pack_draft_serve_boundary.py as drift because it sits in the local gate and not in .github/workflows/smoke.yml. That was wrong, and AGENTS.md says so in a line I had already read: GitHub Actions are billing-locked and produce dead signals, never chase them. The Forgejo host (e2-micro) cannot run workflows either. CI here is run MANUALLY in-worktree — usually faster anyway on UMA hardware with real RAM — which is what scripts/ci/local-ci.sh now front-ends. smoke.yml is secondary observability, not a gate. So the local suite is the SOURCE and is free to be broader. Asserting the reverse converts a file nobody executes into a maintenance obligation, and one agents cannot discharge at that — pushing workflow changes needs an OAuth scope the push credential lacks. The three "owed" lines were never owed. The surviving direction (CI subset-of local) still protects something real: if smoke.yml ever names a path the local gate lacks, the local gate is narrower than a published claim about it. Arc-close brief updated to match: the "three files owed to smoke.yml" open item is replaced by a recorded non-finding, so the next reader does not re-derive it. Its shipped-work table now lists what actually landed in its place — the local CI runner, the lane-roster fix, and the proposal-sink test-isolation fix. [Verification]: 21 passed across test_cli_test_suites, test_lane_sha_verifier, test_adr_index; ruff clean on the changed test. NON-CANONICAL: Python 3.12.11, not the pinned 3.12.13 (unavailable for linux-x86_64). Hash-pinned tests reproduce committed values regardless. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FduW6Krm3PPQv3P5iwBYtxbf17f42bbca86b72fTwo of main's remaining failures, diagnosed rather than silenced. Neither was a broken invariant. ## test_adr_0119_1_sealed_holdout (2) — hardcoded developer-machine path IDENTITY_PATH = Path("/Users/kaizenpro/.config/core/holdout_keys/repo_holdout.txt") An absolute path to one laptop, in a test. It passed there and failed unconditionally on every other machine — a second developer, a fresh clone, any agent session. Now read from CORE_HOLDOUT_KEY (the same env var evals/holdout_runner.py already uses) with ~/.config/... as the fallback, which still resolves to the original location on the authoring machine, so those tests keep running for real there. Absent the key the tests now SKIP with the reason stated. A machine without the holdout key cannot run them; that is not the same as the sealed-holdout contract being violated, and the two must not report identically. evals/holdout_runner.py is untouched — it still refuses any plaintext fallback once an identity is supplied. Only the tests' ability to execute is conditional. ## test_adr_0244_gamma_calibration (1) — genuine drift, re-calibrated The first TEN pinned leakage values are byte-identical to the 2026-07-17 pin. Divergence starts at probe turn 12 ("ice is cold") and persists — the signature of a state trajectory splitting at one turn, not a numeric wobble. Deterministic across runs and IDENTICAL on pristine main, so it is engine drift accumulated across the generalization arc, not a change from this branch. Re-pinned, because this is the guard's own documented action ("regenerate with collect_live_benign_leakages()"; the test says a hit means "re-calibrate and reconsider the flag flip"), and because the conclusion it protects is unchanged: benign leakage still overlaps the attack distribution, so flag_flip_authorized stays False and identity_wave_gate stays OFF. Reconsidered; still not authorized. These are measurements of an EXPERIMENTAL off-by-default path where every probe turn is a boundary-violated refusal — that over-triggering on benign traffic is the finding the calibration exists to record. Recorded honestly in the constant's comment: the turn where drift begins is known, the arc commit that caused it is NOT isolated, and the comment says so. ## Not fixed here, because they were already fixed test_issue_300_versor_margin (3) and test_adr_0172_w0_1_trace_replay_equivalence (1) were subprocesses shelling out to `uv run core chat` and dying on "No interpreter found for Python 3.12.13" — the exact-pin problem. Both pass on this branch already, fixed by3b2c760. Eight such failures in the main baseline traced to that one cause. ## Observation, not changed tests/test_adr_0119_1_sealed_holdout.py carries the full decrypted holdout cases as EXPECTED_PLAINTEXT, in cleartext, next to the .age file they are encrypted into. That may be deliberate; flagging rather than touching it. [Verification]: the six formerly-red files — versor_margin, trace_replay, gamma_calibration, sealed_holdout, lane_sha_verifier, derived_close_proposals — 44 passed, 2 skipped (holdout key absent, reason stated). Full-tree run in progress. NON-CANONICAL: Python 3.12.11. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FduW6Krm3PPQv3P5iwBYtx