Alignment Workspace

2026-08-11-retire-frozen

2026-08-11 · project workspace · path prompts/2026-08-11-retire-frozen

Prompt prompts/2026-08-11-retire-frozen/PROMPT.md

ROUND — retire frozen/, adopt agent-consolidated

Extends the governance architecture; AGENTS.md rules apply. Read from the public repo after patch/priorities-and-slop merges. Confirm current state yourself.

What changes and why

frozen/ treats four trees as immutable inputs, enforced by a CI gate on hash drift and a manifest-update rule. The maintainer's decision: the received work becomes ordinary content inside the two research lines, and the discipline that replaces immutability is a status, not a wall.

The reasoning, recorded so the trade is visible in the ledger rather than implicit. What the freeze bought: a stable citable path, a record of what each tree was when received, and protection against an agent quietly rewriting the corpus. What it cost: every legitimate change — the two scrub rounds already — had to go through a manifest procedure, and material that is the starting point of ongoing work was structurally forbidden from being worked on. The first two benefits do not require immutability; they require a receipt (the hash at intake) and a status that says do not casually edit this. Only the third requires a wall, and the wall is aimed at a failure — an agent silently rewriting inherited notes — that the path gate, review, and git history already make visible.

Keep the receipts. Drop the wall.

A. Move the trees

  • frozen/consolidation_aug9/ -> projects/leverage/consolidation-aug9/
  • frozen/deference-note-dump-2026-06-27/ -> projects/deference/note-dump-2026-06-27/
  • frozen/dose-response-note-dump-2026-07-02/ -> projects/deference/dose-response-note-dump-2026-07-02/
  • frozen/references-citations-2026-08-11/ -> alongside the note dumps in projects/deference/, since it supersedes their references/ payloads

git mv, preserving content exactly; this round changes no bytes inside any tree. Update every reference — seventeen tracked files mention frozen/, including tests/path_gate.py, tests/name_lint.py, checkers/, AGENTS.md, CONTRIBUTING.md, README.md, PRIORITIES.md, PROVENANCE.md, both project READMEs, projects/leverage/CLAIMS.md, and the PR template. Reports under prompts/ keep their paths as written; they are records.

frozen/MANIFEST.md and FROZEN_INPUT_CHECKSUMS.json do not survive as such — their content moves per B.

B. Receipts, not a gate

Each moved tree gets an ORIGIN.md at its root recording what the manifest recorded: what it is, where it came from and when, the sha256 of the archive as received, the tree hash at intake, one line on what cites it, and — for the note dumps — the redistribution note about third-party material and the scrub history by date. This is a receipt: it says what the tree was when it arrived, so a later reader can tell whether it has moved since. Nothing enforces that it has not.

Retire tests/check_frozen.py and the frozen-integrity job.

Sequencing that will bite you if missed: frozen-integrity is one of the eight required status checks in branch protection. A required check that no longer reports blocks every pull request permanently. Update .github/branch-protection.json and re-apply protection via .github/apply-branch-protection.sh as part of this change, and confirm by querying the branch's protection that the required-check list matches the CI job list exactly. Report both lists.

C. agent-consolidated status

Add to AGENTS.md, in the same section as the epistemic classes but distinct from them — this is a status about how a document is treated, not about what is established:

**agent-consolidated.** A tree produced by a consolidation round, or received as a settled bundle, and treated as done. It is ordinary content: editable, reviewable, and not machine-protected. The norm is that it is not tweaked. Edit it when there is a reason — a correction, a scrub, a supersession — state the reason in the commit, and record substantive edits in DECISIONS.md. Rewriting a consolidated tree to fit new work is not a reason; that work belongs in forward/ or a new round directory, and the consolidated tree is superseded by a later one rather than rewritten into it.

Mark each moved tree agent-consolidated in its ORIGIN.md and in PROVENANCE.md. Contributors do not edit consolidated trees at all: add the paths to the specification-path list in tests/path_gate.py, which is where the protection now lives — visible and reviewable rather than hash-enforced.

D. The self-verification job stays

foundations-verification runs the consolidation own verifier and is the one piece of the frozen apparatus that carries real information: it tells you whether the consolidated results still verify in a current environment. Retarget it to the new path, drop its second step (the removed hash check), and rename the job honestly — it no longer verifies anything frozen. Keep the run-from-a-copy pattern.

Consider proposing, not deciding: this job is a slow gate against an input that now changes only deliberately, so a schedule plus runs on toolchain and CI changes may serve better than every push. If you propose it, the required-check list changes again, so raise it as an outstanding action rather than doing it here.

E. No residue

Per no negative ontologies: no frozen/ stub, no "formerly frozen" phrasing in living documents, no vocabulary in AGENTS.md or CONTRIBUTING.md that presumes an immutable tier. The word "frozen" survives only in prompts/, in DECISIONS.md history, and inside the moved trees own text where it is those documents own wording. Report any place where removing the concept left a rule with a hole.

DECISIONS.md: a dated entry recording the retirement, with the trade above stated in two or three sentences.

Report

ROUND_REPORT.md per convention, Outstanding maintainer actions first. Include: the full reference-update list; the before/after required-check lists with the protection query that confirms them; every gate re-run after the move, including that path_gate now covers the consolidated paths and was exercised, not merely green; and any rule left with a hole by E.


Prompt author: Claude Fable 5 (Anthropic), 2026-08-11, in a maintainer-directed session. Dispatched by the maintainer.

Report prompts/2026-08-11-retire-frozen/REPORT.md

Retire frozen/, adopt agent-consolidated — report

Dispatch: PROMPT.md beside this file, verbatim.

Based directly on main at 9e03a0e, which carries the recovered priorities round and the admin-cleanup round. One commit, no stack.

Outstanding maintainer actions

  1. Merge this pull request; until it lands, nothing else can. Branch protection was re-applied here (§B) and now requires consolidation-verification, a job that exists only on this branch. That is the sequencing the dispatch warned about, and it resolves the moment this merges. Any other branch opened before then will sit on six of seven checks.
  2. **Consider moving consolidation-verification off every-push.** Proposed, not done, per the dispatch. It is a slow gate against an input that now changes only deliberately; a schedule plus runs on toolchain and CI changes would serve better. Doing it changes the required-check list again, so it is a separate deliberate act.
  3. Carried: two missing dispatches (scrub-round-2, contributor-checkers), and the three stubs in DECISIONS.md.

A. The move

Four git mvs, no byte changed:

fromto
frozen/consolidation_aug9/projects/leverage/consolidation-aug9/
frozen/deference-note-dump-2026-06-27/projects/deference/note-dump-2026-06-27/
frozen/dose-response-note-dump-2026-07-02/projects/deference/dose-response-note-dump-2026-07-02/
frozen/references-citations-2026-08-11/projects/deference/references-citations-2026-08-11/

Verified rather than asserted. Every tree's hash was recomputed after the move against its registered intake digest, and all four matched:

consolidation-aug9                  a2ca95ad…  MATCH  (59 files)
note-dump-2026-06-27                722b687a…  MATCH  (41 files)
dose-response-note-dump-2026-07-02  d34afa3c…  MATCH  (13 files)
references-citations-2026-08-11     268fbdba…  MATCH  (1 file)

frozen/MANIFEST.md, frozen/FROZEN_INPUT_CHECKSUMS.json and tests/check_frozen.py are gone; frozen/ no longer exists.

Reference updates

Exactly seventeen tracked files contained the literal frozen/, matching the dispatch's count. Seven contained tree paths and were rewritten mechanically: .github/workflows/ci.yml, CONTRIBUTING.md, PRIORITIES.md (12 references), PROVENANCE.md, SETUP_REPORT.md, projects/leverage/CLAIMS.md, projects/leverage/README.md.

The rest referred to the concept and were rewritten by hand: AGENTS.md (standard 1 rewritten, plus the runner rule, the chat-bundle pointer, the bundle intake path, the specification-layer list, and two rows of the enforcement table), CONTRIBUTING.md (reader rule 4 and hard rule 1), README.md (the layout key and the two hard rules), PROVENANCE.md (the row and the chat-bundle note), .github/PULL_REQUEST_TEMPLATE.md (the provenance comment and the "Frozen inputs" section, now "Consolidated trees"), GOVERNANCE_REPORT.md (a path listing), projects/deference/README.md, projects/deference/notes/README.md, tests/path_gate.py, tests/name_lint.py, tests/run.py.

Not rewritten, deliberately: DECISIONS.md:126 and three lines in SETUP_REPORT.md. Both are records — the ledger entry describes the name lint as it was written, and SETUP_REPORT.md describes a gate that existed when that round ran. The ledger rule settled in the previous round says identifiers are updated in place so the record keeps resolving, and everything else lands as a new entry; these are not identifiers that need to resolve, they are statements about a past state. Rewriting them would describe a world that did not exist when they were written. Flagged rather than silently kept.

B. Receipts, and the required-check list

Each tree has an ORIGIN.md: what it is, provenance and date, archive sha256, tree sha256 at intake, file count, what cites it, and — for the note dumps — the third-party redistribution resolution and both scrub rounds by date. Each says plainly that it is a receipt and not a gate, and each records that the digest **excludes ORIGIN.md itself**, which did not exist at intake — without that a reader recomputing the hash would get a mismatch and misread it as drift.

Retired: tests/check_frozen.py, its self-test, and the frozen-integrity job.

Before and after
before (8)after (7)
checkers — house harness self-test and the claims registriessame
conservativity — no new axioms, specification shape unchangedsame
dco — every commit carries a sign-offsame
frozen-integrity — digests and the manifest ruleremoved
foundations-verification — the frozen consolidation re-proves itselfconsolidation-verification — the leverage consolidation re-proves itself
lean — build, sorry-free, axiom auditsame
path-gate — proof-layer PRs may not touch the specification layersame
python — project test runnerssame

Applied with .github/apply-branch-protection.sh, which reads back what GitHub stored. Confirmed three ways — payload, workflow job names, and the live branch:

gh api repos/A-M-Berns/alignment-workspace/branches/main/protection \
  --jq '.required_status_checks.contexts[]'
payload 7   ci jobs 7   live 7
payload == ci jobs : True
payload == live    : True

Approvals 0, code-owner reviews off, enforce-for-admins on, force-pushes and deletions blocked — all unchanged and re-verified.

C. agent-consolidated

In AGENTS.md beside the epistemic classes and explicitly not comparable with them: the classes say what is established, this says how a document is treated. The definition is the dispatch's, plus a paragraph on the ORIGIN.md receipt and where the protection now lives.

Contributor protection moved from a hash to a list: the four tree paths are in SPEC_PATHS in tests/path_gate.py. Exercised, not assumed:

projects/leverage/consolidation-aug9/LEDGER.md        spec=True
projects/deference/note-dump-2026-06-27/x.md          spec=True
projects/leverage/forward/src/a.py                    spec=False
frozen/x.md                                           spec=False

The last line matters as much as the first two: the retired path is no longer matched by anything, so the list does not carry a dead pattern.

Marked in each ORIGIN.md and in PROVENANCE.md.

D. The self-verification job

Retargeted, renamed consolidation-verification, second step dropped, and the run-from-a-copy pattern kept — with the reason restated, since it changed: the tree is ordinary content now, so nothing stops a runner writing into it, which is why the job does not give it the chance.

One consequence the dispatch did not anticipate. tests/run.py discovers project suites by rglob("tests/run.py") under projects/, so moving the consolidation into projects/leverage/ means the repo runner now finds and runs its verifier too — the python job reports PASS projects/leverage/consolidation-aug9. It runs in place there, not from a copy. Checked rather than assumed: after a full local run the tree recomputes to its intake digest exactly, so the verifier writes nothing. It is duplicated work between two jobs, which is an argument for the schedule change proposed above.

E. Residue, and one rule left with a hole

No frozen/ stub, no "formerly frozen" phrasing, no vocabulary presuming an immutable tier. The word survives in prompts/, in DECISIONS.md and SETUP_REPORT.md as history, inside the moved trees' own text — and as ordinary domain vocabulary in the deference line, where "frozen deliberation" is a technical term and has nothing to do with this.

The hole. Standard 1 used to be enforced by a gate that could not be argued with; it is now enforced by a list plus review. Against a contributor that is equivalent — the path gate refuses them either way. Against a maintainer, or a maintainer-dispatched agent, it is strictly weaker: nothing now detects a consolidated tree being edited except a human reading the diff. The dispatch argues this is the right trade, and the argument holds for the failure it names. It is worth being explicit that the residual exposure is agents acting under maintainer authority — which is most of the activity in this repository — and that the mitigation is entirely ORIGIN.md plus review. A cheap partial restoration, not done here: a non-required job that recomputes the four digests and reports drift as information rather than as a veto.

Gates

python3 tests/run.py green: eight self-tests, gate coverage (7 scripts now that check_frozen is gone), name lint, contrib hygiene, conservativity, the Lean textual gates, and both project runners. The Lean build and axiom audit are unaffected — this round touches no Lean — and run in CI.

Attribution

prompt authorClaude Fable 5 (Anthropic)
executorClaude Opus 5 (Anthropic)
date2026-08-11

Claims it registered

None.

Items it filed or answered

None recorded in the index.

Nodes pointing at it

None.