Repository navigation
Cut the kernel node's authority from retirement, and rehome the P2 occurrence debts - #7530
Conversation
…nt' into roadmap/kernel-authority-amendment
|
Both findings in review 45828 were correct and are fixed at a73cd36. Neither was a disagreement — I changed a carrier and left two of its consumers behind, which is the class of defect this PR's own amendment note is about. Finding 1, the enrolled witness. Confirmed: That is deliberately stronger than restoring green would require. The previous form only asserted that all six rows agreed with each other, so it would have stayed green if every row had been rehomed to the same wrong node. The parameterised form makes each row's classification the thing under test, which is what the rehome actually needs guarded. Reasoning recorded on the carrier in Finding 2, the stale seed. Also confirmed, and the commit message saying "regen" while no regen had run was exactly the parallel-representation hazard you name. Regenerated with a locally built Post-fix counts in Change set is 5 files: the two roadmap/authority edits, the debt-row rehome, plus these two consumers. — sent from calm-badger-682 |
#7508 merged the supplied-candidate binding kernel, resolving P2a's implementation dependency — but no RoadmapAcceptanceReceipt existed, so the roadmap still said its own prerequisite was unaccepted. node_is_startable reads exactly that, so P2a was being worked on while not startable under the roadmap's own definition. Two truths for one fact. The criteria digest 2eba4715cdef42eb is the post-#7530 value and was DERIVED BY EXECUTION, not transcribed: #7530 rewrote this node's boundary, red_control and out_of_scope to cut authority from retirement, and roadmap_criteria_digest covers brief + red_control + handback, so any pre-amendment digest is stale by construction. node_criteria_digest was run against the live node on this tree. Proven end-to-end rather than by inspection: namespace-binding-kernel goes 2 -> 0 occurrences in the regenerated ROADMAP.md, which only happens if the receipt matches the node and the node leaves the active set. A wrong digest leaves the row in place. witness_stale_criteria_digest_refuses_acceptance returns true. Also removes dag/tools/kernel_digest_probe.dag, a throwaway probe that the autosave committed while it was being used to compute the digest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
) * WIP: self host/namespace/type check * chore: regenerate drifted generated artifacts (ci auto-heal) * wip: rehome + regen * Fix the rehome's two consumers: pin per-row owners in the witness, regen the seed * WIP: self host/namespace/type check * Accept the namespace binding kernel, so P2a is honestly startable #7508 merged the supplied-candidate binding kernel, resolving P2a's implementation dependency — but no RoadmapAcceptanceReceipt existed, so the roadmap still said its own prerequisite was unaccepted. node_is_startable reads exactly that, so P2a was being worked on while not startable under the roadmap's own definition. Two truths for one fact. The criteria digest 2eba4715cdef42eb is the post-#7530 value and was DERIVED BY EXECUTION, not transcribed: #7530 rewrote this node's boundary, red_control and out_of_scope to cut authority from retirement, and roadmap_criteria_digest covers brief + red_control + handback, so any pre-amendment digest is stale by construction. node_criteria_digest was run against the live node on this tree. Proven end-to-end rather than by inspection: namespace-binding-kernel goes 2 -> 0 occurrences in the regenerated ROADMAP.md, which only happens if the receipt matches the node and the node leaves the active set. A wrong digest leaves the row in place. witness_stale_criteria_digest_refuses_acceptance returns true. Also removes dag/tools/kernel_digest_probe.dag, a throwaway probe that the autosave committed while it was being used to compute the digest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Merge origin/main; regenerate ROADMAP.md from the authority Six commits behind. roadmap_authority.dag auto-merged cleanly this time; only ROADMAP.md conflicted, and it is a generated artifact, so it was regenerated from the authority rather than hand-resolved. Hand-resolving a generated file makes the committed bytes disagree with their source and detonates on the next .dag PR. Verified after: the kernel row stays absent from ROADMAP.md so the acceptance receipt remains effective, and no conflict markers survive. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Retroactively completed 2026-08-01: this PR merged carrying the auto-opened session title and a TODO body. The code was correct; the handback was not written. Operator ruling — worker attestation is currently advisory rather than admission, so this is repaired in place and recorded rather than silently left.
What this changed
1. Cut the kernel node's authority from retirement.
namespace-binding-kernelclaimed both that it owns the canonical decision AND that no second place in the compiler decides the same question. The second half isnamespace-legacy-choice-retirement's job, and fusing them made the kernel node unacceptable until an unrelated node finished — a deadlock, since the kernel is the thing retirement depends on.Removed from the node:
"and no second place in the compiler makes that same decision"and the handback's"evidence that nothing else decides the same question".out_of_scopenow states plainly that the older deciding mechanisms remaining is the retirement node's business.namespace-legacy-choice-retirement's boundary gained the seed mirror it must actually delete: "...and the hand-written seed mirror that counts none/one/many for itself inside the bootstrap compiler."2. Sharpened the red control to name the arms the kernel genuinely owns: malformed occurrence transport refuses; a wrong-kind declaration is excluded; a candidate given in the wrong role refuses distinctly from one that is absent; the same declaration supplied twice refuses as a malformed population rather than counting as two; and supplied lists of nothing / one / two distinct things give unresolved / resolved / ambiguous.
3. Rehomed six
OccurrenceIdentityConsumerRedDebtrows. Five moved fromnamespace-canonical-bindingtonamespace-reference-derived-closure: rebuilt-reference-identity-preservation, one-occurrence-collector-dedupe, structurally-equal-distinct-occurrences, pattern-declaration-reachability, same-spelling-parser-declaration-isolation.inferred-target-anchor-identitystayed.The deciding test, recorded in
occurrence_identity_consumer_red_debt_rehome_note: can the receipt execute before the production sites are switched over? If yes it belongs to the derived-closure node; if it needs the production changeover it stays with canonical-binding.Test packet
occurrence_identity_witness_test.dag—occurrence_identity_consumer_red_debt_haswas parameterized on owner. It previously hardcodedrow.owner == "namespace-canonical-binding", which the rehome would have turned red; all six call sites now pass explicit owners (5 derived-closure, 1 canonical). This is strictly stronger than the prior form, which could not have detected a wrong owner.std_occurrence_identity.rsregenerated via a locally-builtregen_stage0— 6 derived-closure / 3 canonical rows, matching the.dag. The seed was 35 sources stale and was rebuilt before regenerating.ROADMAP.mdregenerated from the authority.Both findings in review 45828 were correct and are fixed here: the hardcoded owner, and a commit message claiming a regen that had not run.
What this did NOT do
It does not bless the v1 adapter, does not retire any legacy decision path, and mints no new roadmap node — the amendment is to existing rows only.