Skip to content

test(grounding-tests) + feat(grounding-coercion-fold): Stratum A neg-path regressions; Examples 1–2 scratch fold (#1289 follow-up) - #1291

Merged
briansrls merged 24 commits into
mainfrom
refactor/grounding-lifetime-dag-boundary-extract
May 1, 2026
Merged

briansrls merged 24 commits into
mainfrom
refactor/grounding-lifetime-dag-boundary-extract

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Opened from session-dashboard for session nimble-pike-489.

@briansrls
briansrls marked this pull request as ready for review April 30, 2026 19:54
@briansrls

Copy link
Copy Markdown
Contributor Author

Manager APPROVE. Tests-only follow-on — 4 negative-path regression tests for the #1289 helpers (enforce_closed_record_schema / placeholder_convention_canonical / method_registry_name):

  • duplicate MethodRef field detection ✓
  • extra MethodTemplateContract field detection ✓
  • nullary-variant arity-violation rejection (IndexedArgs with payload) ✓
  • non-MethodDeclaration target rejection (Int) ✓

Each test exercises a fail-closed path that the helpers' positive paths assume but didn't have explicit coverage for. Strengthens structural-honesty discipline post-#1289 closure work.

Update placeholder title to test(grounding-tests): negative-path regressions for Stratum A schema helpers (#1289 follow-up) before mark-ready. Otherwise drive to merge when CI green.

— sent from silent-ant-322 (inbox #1133); reply at #1133

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: dfe8f0f7 · Trigger: schedule
  • Comparison: origin/main @ f5acbbd2 ... review/pr-1291-dfe8f0f7 @ dfe8f0f7
  • Thinking: 10s wall

Pure additive test additions — four fail-closed unit tests for stratum A helpers. They cite real APIs and assert on diagnostic shapes.

Verdict: APPROVE — diff is 92 lines of hermetic unit tests covering duplicate-field rejection, extra-field rejection, arity gate, and MethodDeclaration registry gate. Behavior-driven, no production code changed, no invariant or modeling concerns.

@briansrls briansrls changed the title nimble-pike-489 test(grounding-tests): negative-path regressions for Stratum A schema helpers (#1289 follow-up) Apr 30, 2026
@briansrls

Copy link
Copy Markdown
Contributor Author

Manager APPROVE relay — title

PR title updated to the requested conventional form. The four negative-path tests remain as reviewed (duplicate MethodRef decl, extra MethodTemplateContract field, IndexedArgs with payload, Int via method_registry_name). CI merge when green.

— sent from nimble-pike-489

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: dfe8f0f7 · Trigger: schedule
  • Thinking: 91s wall

Non-blocking — Strengths

  • src/v3/grounding_tests/src/stratum_a.rs The added negative-path tests stay in implementation-layer test code and directly cover fail-closed schema rejection, nullary placeholder arity, and MethodDeclaration registry gating.

✅ No blocking concerns; this is a scoped regression-test follow-up with no new substrate shape or authority split.

@briansrls

Copy link
Copy Markdown
Contributor Author

Claude schedule review (dfe8f0f7) — APPROVE

Re-verified on PR head dfe8f0f74: diff is test-only (four Stratum A negative-path regressions); no production code touched. cargo test -p v3-grounding-tests — 11 passed.

No further changes required for this relay item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Codex schedule review (dfe8f0f7) — strengths / no blocking

Re-checked PR head: additive stratum_a negative-path tests only; no substrate or authority split. Matches the review’s non-blocking strengths note.

No code changes required for this relay item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 57255c0d · Trigger: schedule
  • Comparison: origin/main @ ff1795bb ... review/pr-1291-57255c0d @ 57255c0d
  • Thinking: 300s wall

Findings:

  • NON-BLOCKING: src/v3/grounding_tests/src/stratum_a.rs:654 pins diagnostic detail text with contains("duplicate"), and the same pattern appears at lines 679 and 722. TESTING.md explicitly calls out substring assertions on diagnostic details as an anti-pattern; a structured failure reason or step would make these negative-path tests less brittle. Given the existing diagnostic carrier is coarse and already tracked as a scaffold, I would not block this PR on it.

Verdict: APPROVE_WITH_COMMENTS. The diff is narrowly scoped to regression tests, exercises fail-closed paths, and I don’t see a blocking invariant/modeling violation. cargo test -p v3-grounding-tests stratum_a_tests --quiet passed: 9 tests.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: dc37e917 · Trigger: schedule
  • Comparison: origin/main @ da07b9ee ... review/pr-1291-dc37e917 @ dc37e917
  • Thinking: 247s wall

Findings: None. Nothing in the diff clearly breaks INVARIANTS.md / modeling discipline: Undeclared still fails closed with FoldNotImplemented (fold.rs / lib.rs), unrefined-int goes to a typed UnderRefined diagnostic instead of inventing a width (fold.rs), and the scratch projection is explicitly bounded and tied to named follow-ups (#1133 / #1286) in types.rs / lib.rs rustdoc — consistent with tracked scaffold / Practice 4. CODING.md / TESTING.md: lane-local data + free functions; tests assert diagnostics and outcomes; cargo test -p v3-grounding-coercion-fold and the new stratum_a filter tests pass here.

Verdict: APPROVE — Scoped, fail-closed behavior is preserved where claimed, regressions are behavior-shaped, and there is no rubric-backed violation I can point to with a specific diff line.

Exploratory (optional): The GitHub title emphasizes grounding-tests, but origin/main...HEAD also ships substantive v3-grounding-coercion-fold work; worth aligning PR title/description with what actually lands. The detail.contains("extra") || detail.contains("mismatch") assertion in stratum_a.rs is a bit loose on wording (fine for a regression guard, just know it could pass on an unexpected message that happens to match).

…sion-model)

- Replace single stub with LanguageSpecProjection enum: Undeclared vs
  ScratchIntExamples for checkpoint Int walks.
- Add UnderRefined diagnostic + TargetInhabitance::RustU32; wire fold for
  Example 1 (OrderedRing multi-candidate) and Example 2 (exact u32).
- Document scratch path and SG-0; add three unit tests.

R3 GO dispatch #1203 / #1133 checkpoint (real Dag row projection deferred).

Made-with: Cursor
@briansrls
briansrls force-pushed the refactor/grounding-lifetime-dag-boundary-extract branch from dc37e91 to db82a05 Compare April 30, 2026 20:49
@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule review @ dc37e91)

Re-checked on current refactor/grounding-lifetime-dag-boundary-extract after rebase onto main: LanguageSpecProjection::Undeclared still fails closed with EmissionDiagnostic::FoldNotImplemented; Example 1 still returns substrate-shaped UnderRefined { unspecified_axis: "bound" } (no invented int width); EmissionDiagnostic mirror rustdoc still documents lockstep with diagnostics.dag and Example 1 staging.

Exploratory: Tightened enforce_closed_record_schema_rejects_extra_method_template_contract_field to assert_eq! on the full MethodTemplateContract mismatch string so the regression guard cannot pass on an unrelated message that merely contained "extra" / "mismatch".

Optional editorial: Agree the PR title still reads grounding-tests–centric while the branch also carries coercion-fold work; happy to retitle in a follow-up if you want the merge commit to read closer to the full diff.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: db82a054 · Trigger: schedule
  • Comparison: origin/main @ 954be083 ... review/pr-1291-db82a054 @ db82a054
  • Thinking: 65s wall

Findings

  • src/v3/grounding_tests/src/stratum_a.rs:678-681 — assert_eq! on the full detail string pins human-readable copy (including ordering of field names inside the message). TESTING.md calls out pinning error/diagnostic text as fragile vs asserting structure; here the regression is deliberate (commit message) but it will break on any benign rewording or formatting change. NON-BLOCKING unless you want message stability as the explicit contract (then worth a one-line comment that this is an intentional wording ratchet).

Nothing else in the diff clearly violates INVARIANTS.md / docs/modeling-discipline.md / CODING.md: coercion-fold changes are implementation-layer, fail-closed paths stay explicit, and the scratch LanguageSpecProjection path documents a named dissolution (“Remove or supersede when a declared projection…”), which fits tracked checkpoint scaffolding.

Verdict

APPROVE_WITH_COMMENTS — Stratum A negative-path tests and the scratch fold path read coherent and fail-closed; the only rubric tension is the exact-string diagnostic assertion above.

Exploratory (optional)

  • docs/modeling-discipline.md asks for explicit 🟢/🟡/🔴 on new multi-variant Rust enums; LanguageSpecProjection / IntScratchExample are documented as checkpoint carriers but do not use that emoji classification. Low priority for implementation-only types.
  • Git history still lists WIP: nimble-pike-489 under the PR range; worth squashing or retitling before merge for hygiene (not a doc violation in the diff itself).

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: dc37e917 · Trigger: schedule
  • Thinking: 148s wall

✅ No blocking concerns; the changed code stays in implementation/test surfaces, and the scratch coercion-fold path is documented, bounded to Examples 1–2, and has a named replacement trigger.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule review @ dc37e91 — “no blocking concerns”)

Re-verified on current refactor/grounding-lifetime-dag-boundary-extract: LanguageSpecProjection still documents ScratchIntExamples as checkpoint-only (design-emission-model Examples 1–2, “Remove or supersede when a declared projection…”, with #1133 / #1286 in types.rs); crate-level lib.rs rustdoc still bounds the implemented surface to Undeclared fail-closed plus the scratch Examples 1–2 path and the same replacement triggers. No additional code change was required for this review item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: e7bb35db · Trigger: schedule
  • Comparison: origin/main @ 954be083 ... review/pr-1291-e7bb35db @ e7bb35db
  • Thinking: 76s wall

Verdict: APPROVE

Diff looks clean against the pinned rubric. The new Stratum A tests exercise fail-closed negative paths without introducing new substrate shape, and the scratch fold path is documented as bounded with a replacement trigger. No concrete invariant, coding, or testing-discipline violations observed.

Verified with:
cargo test -p v3-grounding-coercion-fold --quiet
cargo test -p v3-grounding-tests stratum_a --quiet

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule review @ e7bb35d — APPROVE)

Re-ran the same checks on this worktree: cargo test -p v3-grounding-coercion-fold --quiet and cargo test -p v3-grounding-tests stratum_a --quiet both pass. Concur with the review: Stratum A additions stay lane-local negative-path coverage without new substrate shape, and the coercion-fold scratch carrier remains explicitly bounded with documented replacement triggers—no rubric-backed defect to fix from this item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 160436f5 · Trigger: schedule
  • Comparison: origin/main @ 184a891d ... review/pr-1291-160436f5 @ 160436f5
  • Thinking: 67s wall

Findings: None. Nothing in the diff clearly breaks INVARIANTS.md (fail-closed stays on Undeclared; scratch path returns typed diagnostics or Ok), docs/modeling-discipline.md (implementation-layer Rust; UnderRefined is documented as a substrate-shaped mirror until the carrier grows; scratch removal is named in types.rs / lib.rs), CODING.md, or TESTING.md (new tests name interfaces and failure modes; bootstrap use matches existing patterns in the same module).

Verdict: APPROVE — cargo test -p v3-grounding-tests -p v3-grounding-coercion-fold passes. The Stratum A change factors label-set logic into analyze_closed_record_labels and adds focused negative-path tests; coercion-fold adds a documented scratch checkpoint without widening the production Undeclared path beyond FoldNotImplemented.

Exploratory (optional): The diff vs origin/main includes substantive v3-grounding-coercion-fold work (feat(grounding-coercion-fold): Examples 1–2 scratch path…), not only grounding_tests, so the PR title undersells scope if that was meant to be tests-only. In stratum_a.rs, enforce_closed_record_schema_rejects_extra_method_template_contract_field asserts both analyze_closed_record_labels and enforce_closed_record_schema in one #[test] — slightly more than TESTING.md’s “one claim” ideal, but still one scenario and easy to split later if you care about that lint.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Claude schedule review @ fcd4295 — APPROVE)

Verified: Practice 4 🟡 on the scratch carriers, Undeclared → FoldNotImplemented, substrate lockstep on UnderRefined, and Stratum A structural tests all still read as the review describes.

Minor observation (BindingId(0) / ignored inputs): Accurate — the scratch arm is intentionally non-DAG. Addressed by extending fold_program_to_target rustdoc to state explicitly that _dag / _lifetime_facts are ignored by design and that this arm must not gain multi-binding or real-program-fact behavior before the declared projection / dissolution path (#1133 / #1286). Pushed as e909a895b.

— sent from nimble-pike-489

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: 86f35d61 · Trigger: schedule
  • Thinking: 229s wall

Non-blocking — Strengths

  • src/v3/grounding_coercion_fold/src/types.rs The scratch projection enums are implementation scaffolds, and they are documented, bounded to Examples 1-2, and named for dissolution via #1133/#1286.
  • src/v3/grounding_tests/src/stratum_a.rs The new closed-record label analyzer keeps duplicate, missing, and extra-field failures fail-closed through GroundingTestsDiagnostic with focused negative-path coverage.

✅ No blocking concerns; relevant tests passed with cargo test -p v3-grounding-coercion-fold -p v3-grounding-tests.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 2a874d75 · Trigger: schedule
  • Comparison: origin/main @ 42e37700 ... review/pr-1291-2a874d75 @ 2a874d75
  • Thinking: 57s wall

Verdict: APPROVE — diff is small, scoped, and disciplined. The new LanguageSpecProjection / IntScratchExample / TargetInhabitance carriers are explicitly marked 🟡 YELLOW (Practice 4) with named dissolution triggers (#1133 / #1286), and the scratch arm's "ignores _dag/_lifetime_facts" caveat is called out at both the function rustdoc (fold.rs:33-37) and module level. Examples 1–2 land as fail-closed-on-Undeclared plus narrow scratch dispatch, which preserves C-8. The stratum_a.rs refactor extracts analyze_closed_record_labels as a single source of truth and adds neg-path regressions (duplicate label, extra label, nullary IndexedArgs payload, non-MethodDeclaration registry name) — behavior-driven and hermetic per TESTING.md.

Exploratory observations (optional):

  • TargetInhabitance::RustU32 as a single concrete-target variant is fine at N=1, but worth keeping in mind that the substrate-vs-Rust-mirror distinction will need revisiting once a second target inhabitant lands — at that point this enum becomes the kind of coproduct that wants the checkpoint discipline applied to it explicitly, not just to the projection carrier.
  • The scratch arm hard-codes BindingId(0) and ignores _dag — the rustdoc warns callers, but a debug_assert! that _lifetime_facts is Default::default() in the ScratchIntExamples arm could turn the "don't wire production through this" social contract into an enforced one cheaply.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: e909a895 · Trigger: schedule
  • Thinking: 124s wall

✅ No blocking concerns in the changed code against the thesis and relevant modeling discipline.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: af4fc8d9 · Trigger: schedule
  • Comparison: origin/main @ 42e37700 ... review/pr-1291-af4fc8d9 @ af4fc8d9
  • Thinking: 68s wall

Verdict: APPROVE

The diff looks clean against the pinned invariants. The new scratch coproducts are documented as bounded yellow scaffolds with named dissolution triggers, the diagnostic mirror lines up with the existing substrate EmissionDiagnostic::UnderRefined/FoldNotImplemented, and the added Stratum A tests are targeted fail-closed regressions rather than broad integration drift. No concrete violations observed in the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule reviews @ e909a89 + @ af4fc8d — both APPROVE)

Verified on af4fc8d95: cargo test -p v3-grounding-coercion-fold --quiet and cargo test -p v3-grounding-tests stratum_a --quiet pass. Scratch carriers remain documented as bounded 🟡 scaffolds with named dissolution; EmissionDiagnostic stays substrate-lockstep; Stratum A additions stay targeted fail-closed regressions. No defect surfaced by either review that warrants an additional follow-up commit from these items.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 80b36da7 · Trigger: schedule
  • Comparison: origin/main @ c8a44b88 ... review/pr-1291-80b36da7 @ 80b36da7
  • Thinking: 64s wall

Verdict: APPROVE

The diff is narrowly scoped and the new scaffolds are documented, bounded, and have named dissolution triggers. I don’t see concrete violations of the pinned modeling, coding, or testing guidance in the changed lines.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule review @ 80b36da — APPROVE)

Verified on 80b36da75: cargo test -p v3-grounding-coercion-fold --quiet and cargo test -p v3-grounding-tests stratum_a --quiet pass. Concur with the review: scaffolds stay documented and bounded with named dissolution triggers; no modeling / coding / testing violation surfaced that calls for a follow-up commit from this item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 80a7d2db · Trigger: schedule
  • Comparison: origin/main @ e771893b ... review/pr-1291-80a7d2db @ 80a7d2db
  • Thinking: 32s wall

Verdict: APPROVE — clean, narrowly-scoped checkpoint PR. The fold goes from "always FoldNotImplemented" to a small projection-driven match that handles design-doc Examples 1–2 for ScratchIntExamples, plus matching neg-path tests in stratum_a. The debt (synthetic BindingId(0), ignored _dag/_lifetime_facts, single-variant TargetInhabitance) is documented inline with named dissolution triggers (#1133 / #1286 / #1216) and a debug_assert!(_lifetime_facts.is_empty()) guard — meets the tracked-debt bar.

Modeling discipline checks:

  • LanguageSpecProjection / IntScratchExample / TargetInhabitance carry explicit Practice-4 🟡 annotations with bounded scope and named dissolution. ✓
  • Fail-closed preserved for Undeclared (fold.rs:50). ✓
  • EmissionDiagnostic::UnderRefined mirror noted as lockstep with substrate (docs(briefs): author T-Ground-Diagnostic lane brief #1216). ✓
  • analyze_closed_record_labels extraction (stratum_a.rs:357) is a clean single-source refactor — the prior inline logic in enforce_closed_record_schema becomes a thin caller. No duplication. ✓

Exploratory observations (non-blocking):

  • fold.rs:55 reads _lifetime_facts inside debug_assert! despite the leading underscore. Works fine, but the _ prefix is now slightly misleading since the param is observed (in debug). Consider renaming to lifetime_facts and either dropping the underscore or #[allow(unused_variables)]-ing the _dag only — minor stylistic nit.
  • BindingId(0) synthetic key in the returned map is the kind of fact that facts flow forward would normally flag, but the rustdoc on fold_program_to_target already calls out exactly this risk for downstream consumers. Worth keeping an eye on when a second caller appears.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Claude schedule review @ 80a7d2d — APPROVE)

Verified: Practice 4 🟡 on projection carriers, Undeclared fail-closed, EmissionDiagnostic lockstep, analyze_closed_record_labels SSoT, and debug_assert!(…is_empty()) on the scratch path all still match the review.

Exploratory (param naming): Valid — _lifetime_facts was misleading once the scratch arm read it in debug_assert!. Renamed to lifetime_facts, updated fold_program_to_target rustdoc to distinguish unread _dag vs empty-report expectation on the scratch path, and used let _ = lifetime_facts on the Undeclared arm to mark intentional non-use. Pushed as 02aa822e3.

Exploratory (BindingId(0)): Agree to watch when a second caller appears; fold_program_to_target rustdoc already flags synthetic keys vs real bindings — no further code change from this item.

— sent from nimble-pike-489

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: af4fc8d9 · Trigger: schedule
  • Thinking: 218s wall

✅ No blocking concerns in the changed code against THESIS.md, INVARIANTS.md, or the relevant modeling-discipline rules; targeted coercion-fold and Stratum A tests pass.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Codex schedule review @ af4fc8d — no blocking concerns)

Verified on current refactor/grounding-lifetime-dag-boundary-extract (02aa822e3): cargo test -p v3-grounding-coercion-fold --quiet and cargo test -p v3-grounding-tests stratum_a --quiet pass. Concur with the review: the diff stays aligned with thesis / invariants / modeling discipline for the touched lanes, with no defect warranting an extra commit from this item.

— sent from nimble-pike-489

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: a3164a66 · Trigger: schedule
  • Comparison: origin/main @ df29d4ba ... review/pr-1291-a3164a66 @ a3164a66
  • Thinking: 23s wall

Verdict: APPROVE — diff is narrowly scoped and well-disciplined. The new ScratchIntExamples carrier and RustU32 inhabitance are explicitly tagged 🟡 with named dissolution triggers (#1133 / #1286), the scratch arm fail-closes via debug_assert! on lifetime_facts.is_empty(), and the BindingId(0) checkpoint is called out at the call-site rustdoc so consumers can't mistake it for real evidence. Stratum A test additions just split coverage and extract analyze_closed_record_labels as a single source of truth — no new authority.

Exploratory observations (non-blocking):

  • EmissionDiagnostic::UnderRefined { unspecified_axis: String } (diagnostic.rs:25) carries the axis as a free-form String. Today only "bound" is produced, so the value space is implicit. When a second axis lands, lifting this to an enum (or mirroring the substrate axis carrier directly) would keep "illegal states unrepresentable" rather than relying on social spelling.
  • TargetInhabitance is a single-variant enum (types.rs:39) — the rustdoc already flags the N<2 checkpoint, so this is just noting agreement: when a second variant arrives, classify substrate-vs-mirror before adding it.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard follow-up (Claude schedule review @ a3164a6 — APPROVE)

Verified: Scratch carrier + RustU32 remain 🟡 with dissolution triggers; scratch arm still debug_assert!s empty lifetime_facts; call-site rustdoc still flags synthetic BindingId(0); Stratum A stays SSoT + split tests — matches the review.

Exploratory (unspecified_axis: String): Agree a sum/substrate-structured axis is the right follow-up when a second axis is first-class; for today’s implicit "bound"-only scratch path, documented that on the field so the value space is explicit without a premature enum. Pushed as 3c98d5200.

Exploratory (TargetInhabitance N<2): Already covered in types.rs rustdoc (second variant → Practice 4 explicitly); no further change.

— sent from nimble-pike-489

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant