Repository navigation
Typed-module store: the seed-growth receipt, a real lockstep, and the lane parked in the roadmap - #11862
Conversation
Implements the C3 rung of gunbc.floor_materialization: a host-local, content-addressed backing for the typed-module snapshots the in-process tiers already produce, so the value survives the process that computed it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tion trigger Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…old run clippy::disallowed_macros forbids eprintln in this library module, and the note names the right repair rather than an allow: a structured return. That forced the better arm too. UNARMED and ARMED-BUT-UNUSABLE were being collapsed into one silent cold path; they are different states. No environment variable means the operator asked for no store and cold is correct. A directory that was NAMED and cannot be opened is an operator asking for a store they do not have, so it now stops the line with a located diagnostic instead of running cold under a name that promised otherwise. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Both are per-host content-addressed stores, so a reviewer is right to ask why there are two. They key different computations at different grains, and they share one compiler-identity authority rather than each deriving its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The clippy repair changed an armed-but-unopenable store from a silent cold run into a located refusal. That is the arm that carries the promise made by naming a directory, and it had no discriminating test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…-176 # Conflicts: # docs/plans/typed-module-cross-run-materialization.md
…ions 1. SEED-GROWTH STOP-LINE. ~670 lines of hand src/v1 Rust landed with no SeedGrowthJustification row. gunbc.seed_growth_admission seed_growth_forward_freeze_policy_note makes that a stop-line, and the comparable precedent (gunbc.census_memo_seed_growth) was authored for a 37-line delta. gunbc.typed_module_store_seed_growth now enumerates every new citable declaration, says why the subject cannot live in .dag (the persisted value is a host value the substrate cannot name), names the capability that deletes it, and states the current boundary -- including that no cold/warm measurement exists yet. 2. THE LOCKSTEP WAS A TAUTOLOGY. persist_cap_matches_modeled_authority asserted a Rust constant against a Rust literal spelling the same number, which is measure() == measure() -- the change detector DESIGN section 5 names, green through any edit to the authority it claimed to track. It now READS dag/gunbc/floor/floor_materialization.dag and compares against the modelled row, so its red is real. 3. TWO DANGLING DECLARATIONS DELETED, not justified. persist_format_version and persistent_typed_store_is_armed_for_test had zero consumers. A receipt justifying a declaration nothing reads would be DESIGN section 3c's dangling modeling wearing a justification's clothes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three nodes, so what is unfinished is a roadmap fact rather than a session's memory: the cold/warm measurement that decides whether the store was worth building at all; the compiler-identity derivation that cross-push reuse needs and does not have; and the three review-69138 repairs that missed the merge queue. Identities are minted ULIDs, not slug-derived -- roadmap_node_identity_law forbids the slug as an identity input. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…-176-followup # Conflicts: # src/v1/stage0/src/shared_typecheck_store.rs
The typed-store-review-69138-followup node described three repairs -- the
seed-growth receipt, the grounded lockstep, the two deletions -- and every one
of them lands in the diff that authored it. `active` mints a node open and
Dispatchable, so it was a brief that would have sent a worker to redo landed
work, and the receipt file written beside it in the same change already said the
opposite ("repaired in the same change"; the deleted items "are not enumerated
below because they were removed").
A roadmap node is for what is still OWED. The PR and
gunbc.typed_module_store_seed_growth are the record of what was done, so a node
restating it is DESIGN section 2 redundancy with a dispatch attached. The lane
keeps its two genuinely-open nodes: the cold/warm measurement and the
compiler-identity derivation.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Fixed in
The node is deleted rather than flipped to The lane comment now states the deletion and why, so the next reader does not re-add it:
One thing I'd flag for whoever picks this up: |
Ledger-Repair-Judged: docs/design-rung-drops.md Heal-Candidate-Run: 35519263833
main #11858 added four roadmap nodes while this branch added two, so the generated projection must be derived against the UNION and cannot be recovered by taking either side. The merge driver refused the path rather than answering, which is correct. The committed ROADMAP.md bytes here are the ours side VERBATIM and are NOT derived. They are provisional and this commit does not claim otherwise. The regeneration is owed and follows from the repo's own path -- the heal route that produced c9d3bdb on this same branch -- never by hand-editing a generated file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ones Produced by the repo's heal workflow (run 35524484764) against this exact head, verified before applying: expected_head_sha, base_blob and proposed_blob all matched this tree. The previous commit said its bytes were provisional and owed this; they no longer are. Review 69297 is right that the provisional bytes were stale -- that is what the previous commit declared -- and its three named rows (ci-cost-floor-memory-term-attribution, ci-cost-floor-preparation-cut, ci-control-namespace-admission-billing) are still absent after regeneration. They are absent from origin/main's committed projection too, so their absence is main's state and not this PR's doing. The carrier link the review named as lost, docs/plans/namespace-cut-replacement-plan.md, is restored by the regeneration. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Regenerated in The stale bytes were declared as stale by the commit that carried them — the merge commit message said "ROADMAP.md carries PROVISIONAL bytes that owe a regeneration" — because main's #11858 added four roadmap nodes while this branch added two, so the correct projection is a function of the union and is not recoverable by taking either side. The merge driver refused the path rather than answering, which was the right behaviour, and I did not overrule it. The derived bytes come from the repo's own heal workflow (run On the three named rows — They are absent from main's own committed projection, and they remain absent after regenerating against the merged authority. So this PR did not drop them; that is main's state, and whatever explains it (they are declared, their owners The carrier link the review named as lost, |
Same shape as the previous merge: main landed further roadmap changes, and the generated projection is a function of the merged authority, so neither side's bytes are the answer. The merge driver refused the path rather than guessing. These bytes are the ours side verbatim and are NOT derived. The regeneration is owed and comes from the heal route, never from hand-editing a generated file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-up to #11793, which entered the merge queue with review 69138 at
REQUEST_CHANGES and its branch frozen, so these repairs could not reach it.
1. The seed-growth stop-line (review 69138, finding 1)
#11793 adds ~670 lines of hand-written
src/v1Rust with noSeedGrowthJustificationrow.gunbc.seed_growth_admissionseed_growth_forward_freeze_policy_notemakes unenumerated hand growth astop-line, and the comparable precedent —
gunbc.census_memo_seed_growth—was authored for a 37-line delta. The review was right to call it.
gunbc.typed_module_store_seed_growthnow enumerates all 14 new citabledeclarations and joins
seed_growth_justification_roster(). It answers thequestion the receipt exists for: the persisted subject is a host value
(
TypecheckModuleResult, from the seed's own inference), so a.dag-side storewould key on a typecheck the substrate cannot name — a layer inversion rather
than a migration, the same boundary
gunbc.census_memo_seed_growthrecords oneseam over. The trigger names a capability, not an artifact. The boundary
states plainly that no cold/warm measurement exists.
It also discloses what it cannot cite: seven module-level statics, the process
store cell, and the inherent methods on
PersistentTypedStoreare not citabledeclarations, so they are named in the header rather than silently excluded.
2. The lockstep was a tautology (review 69138, finding 2)
persist_cap_matches_modeled_authorityasserted a Rust constant against a Rustliteral spelling the same number —
measure() == measure(), which DESIGN §5names outright, and which two carriers cited as their lockstep. It would have
stayed green through any edit to the authority it claimed to track.
It now reads
dag/gunbc/floor/floor_materialization.dagand compares againstfloor_typecheck_store_persist_cap_bytes. Its red is real: change either sidealone and it fails. The parser was verified against the live declaration.
3. Two dangling declarations, deleted rather than justified
Not in the review — found while assembling the receipt.
persist_format_versionand
persistent_typed_store_is_armed_for_testhave zero consumers. A receiptjustifying a declaration nothing reads would be DESIGN §3c's dangling modeling
wearing a justification's clothes, so they are deleted and absent from the
enumeration.
4. The lane parked in the roadmap
Three nodes under
typed_module_store_nodes(), so what is unfinished is aroadmap fact rather than a session's memory:
typed-store-cold-warm-measurement— the one that decides whether any ofthis was worth building. The store is armed by nothing today, so it displaces
nothing until this runs.
compiler-identity-invariant-under-corpus-commit—build.rsembeds thecommit SHA into the binary whose digest is the compiler-identity term, so a
corpus-only
.dagcommit re-keys every entry. Every cross-push reuse claim inthe design depends on this and none of it is reachable without it.
typed-store-review-69138-followup— this PR.Identities are minted ULIDs;
roadmap_node_identity_lawforbids the slug as anidentity input.
Note on
ROADMAP.mdROADMAP.mdis a generated artifact of this authority, so it needs a regen. Ihave deliberately not run one locally — the host is under heavy pressure during
a wind-down and a corpus run is exactly the churn to avoid. If the heal lane does
not repair it, the regen is
gunbc run --source-root dag --source-root src/v2 --entry dag/gunbc/instruments/generated_artifact_gate.dag --function main_wet.🤖 Generated with Claude Code