Repository navigation
§0 construction-justification rule (authoring-time): every lens records why its class can't be construction - #5476
Merged
Merged
Conversation
briansrls
added a commit
that referenced
this pull request
Jun 21, 2026
briansrls
added a commit
that referenced
this pull request
Jun 21, 2026
…everse-soundness fns + #5476 construction_justification) The merge commit was auto-snapshotted with unresolved markers; this restores the hand-resolved file (my reverse roster-soundness section AND main's #5476 construction_justification decl, with the brace fix). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 21, 2026
… reconcile checkboxes to merged PRs (#5488) Operator ask: bolded inline milestones so the checkboxes line up with where we're headed in dependency order, with checkpoints verifiable along the way. - Each section opens with a **◆ Milestones** spine: the verifiable checkpoints in dep order (✓ reached · ▸ now · ○ ahead). §5 carries the critical path (de-fork Step 1 ✓ → NOW cargo-green → ... → KEYSTONE regen-verify → TERMINAL src/v1 deleted). Read L->R = the path. - Reconcile checkboxes to reality (6 merges verified merged): §5 cross-tree import -> [x] #5473; §0 construction-justification -> [x] #5476; §0 fenced cross-tree-import-activation -> [x] #5473 (escalate item closed). - Fold in bright-stag's honest line-33 de-vacuum wording (EmitHostGate ✓ #5477; 4 advisory lenses widened+bounded, whole-corpus deferred to .dag reflection) — one PR not two. - invert-hand-maintained plan §3.1: the near-term PR->checkbox status slice (a GitHub Action / drift-check over the (#NNNN) anchors) that kills the manual reconcile pain before full emit-from-.dag lands — answers the operator's 'associate a PR -> check the box' question as a slice of the same project. Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 22, 2026
…t be green-on-main at merge or not enrolled yet; class-fix for the floor-skew that has red the fleet three times; see the emission-ingestion-inverse plan section 2 (#5475) * WIP: Gate-hygiene roster-completeness assertion: a floor-enrolled gate must b * realization-vocab reverse roster-soundness gate: every exception-roster entry must name a live non-edge sidecar importer (shrinking-ratchet integrity, DESIGN §5/§6) Forward clean_tree witness proves every live importer is rostered; this proves the converse — a STALE roster entry (migrated-off / deleted path) keeps a dead excuse that silently re-excuses a future re-leak at that path (§5 fail-open) and lies about the ratchet shrinking. Asserts the FROZEN roster against the SAME independent live import-fact scan the forward gate uses; roster is a parameter so the planted-stale control reds against the real live scan (non-tautological). Proven by execution: real roster PASS, real roster + one stale entry FAIL, planted control PASS, forward witnesses unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Gate-hygiene roster-completeness assertion: a floor-enrolled gate must b * Resolve merge conflict markers in realization_vocab lens (keep both reverse-soundness fns + #5476 construction_justification) The merge commit was auto-snapshotted with unresolved markers; this restores the hand-resolved file (my reverse roster-soundness section AND main's #5476 construction_justification decl, with the brace fix). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
ROADMAP §0 meta-item — the authoring-time construction-justification rule (DESIGN §5/§6), layered on top of the #5433 inert-lens backstop (it does not supersede it).
DESIGN §6: a lens is validation — it concedes the bad state is writable. So before adding a lens you must justify why the class can't be made unwritable by construction. This PR makes that judgment a recorded, fail-closed requirement.
Shape (the §7 recursion — construction applied to the rule itself)
The judgment (which §5 class + why) is unstructurable human residue. The requirement to have recorded one is structurable — so the missing-justification state is made unwritable:
v2.lens.common.construction_justification— single-authority typed model:ConstructionClass = WallNow | WallAfterGrounding | RatchetForever(DESIGN §5's three buckets, reusing the expressibility-frontier §2 region names — not a parallel taxonomy) +ConstructionJustification { class, rationale }.v2.lens.*modules now carry adata construction_justification: ConstructionJustification = …decl — the mark on the carrier (§3/§6), classified from each lens's existing header. Mirrors theextdeps_external_authority_anchorprecedent.discover_floor_corpus_rows(sibling to the Lens hygiene: import-closure inert-lens backstop + promote 5 inert lenses to floor-discovered witnesses (§0) #5433 inert check; reusesis_top_level_lens_moduleso the two cover the same set). A top-level lens with no recorded justification fails the floor closed.Why this layers on #5433, not over it
A judgment applied at authoring time executes nothing, so it can't replace a corpus check. Both run in floor discovery; neither subsumes the other.
Verification (green-by-execution)
cargo test -p v1-compiler --lib construction_justification_hygiene_tests(3 tests: scan predicate, discriminating detector RED-on-missing/GREEN-on-recorded, whole-corpus green) + inert backstop tests still green..dagresolution confirmed end-to-end by running real witnesses across all three variants: discrimination (WallAfterGrounding), cost (WallNow), synthesis (RatchetForever) — allresolved 32 sources→true.cargo fmt --all --check+cargo clippy -p v1-compiler --lib -- -D warningsclean.Residue / follow-on (honest)
WallNow(cost, application_serializer) + support moduleaffected_set_examplesflag a §3 home question (computations/support filed underv2.lens.*); relocating them touches module resolution → marked follow-up.Plan:
docs/plans/construction-justification-rule.md.🤖 Generated with Claude Code