rung-content ladder + persona demarcation, facet bridge, legacy_outliers, D-TSC-1 alias fix, chess-arc board bank#689
Conversation
…HANY-SIG-1 (Hambly-Lyons epiphany detector, probe-gated) + rejected rhymes Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…— 6 graded mappings (sender→receiver=edge, wave=stream, basins ground/wave identifies) Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…C-1 regression fix) 1a11038 (D-TSC-1) renamed the planner 12-space ThinkingStyle -> StyleFamily and left `#[deprecated] pub type ThinkingStyle = StyleFamily;` in thinking/style.rs "for external compat" — but the same commit dropped ThinkingStyle from the `thinking/mod.rs` re-export (line 22 went from `pub use style::{…, ThinkingStyle}` to `…, StyleFamily`). So the alias was stranded one level down: `thinking::style::ThinkingStyle` resolved, but `thinking::ThinkingStyle` — the natural, pre-existing consumer import path — hard-broke. Not a compat shim; a compat shim I forgot to wire up. Same second-order break for the methods that used to be inherent on the old enum (cluster/tau_address/modulation): they moved onto the `PlannerStyleExt` ext trait, which was only privately `use`d in mod.rs, so `style.cluster()` broke even with the type alias present. Fix: re-export ThinkingStyle at thinking/mod.rs (with `#[allow(deprecated)]` on the re-export line so the crate stays -D warnings clean) and lift PlannerStyleExt via `pub use`. Consumers on the old paths now compile again (with the deprecation warning steering them to StyleFamily) instead of failing outright. `cargo build -p lance-graph-planner` clean, no new warnings (the 2 remaining are pre-existing deprecated-CausalEdge64 calls in nars_engine.rs, untouched). thinking-engine's alias was already at its prior path (cognitive_stack::) so it never broke; #674 audited clean (RESERVE-DON'T-RECLAIM, no stranded alias). Board: EPIPHANIES E-COMPAT-ALIAS-MUST-BE-LIFTED-1. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…ator ruling 2026-07-13) The V3 12-byte facet payload is a content-blind register the ClassView projects; L1-L8 (le-contract §3) are all byte-axis readings (8:8 / 8:8:8 / 8:8:8:8). This adds the three WIDE CONTIGUOUS grace carvings a not-yet- decomposed class may sit in temporarily, in a bluntly-named module so it announces its own status: - LegacyOutlier::WideMixed (G1) — 3×u16 + 2×u24 = 48+48 - LegacyOutlier::WideTriple (G2) — 4×u24 (contiguous, NOT axis 4×(8:8:8)) - LegacyOutlier::WideQuad (G3) — 3×u32 (contiguous, NOT axis 3×(8:8:8:8)) All 96 bit, LE read/write, u24 no-silent-truncation guard mirroring NodeGuid::new. Deliberately a SEPARATE module from facet::CascadeShape and NOT a variant of it — a wide carving with no rail/axis is exactly what that enum refuses to bless, which is the whole point. Tagged "strongly discouraged if god-object-related or lacking proper bucket rollover; migrate to cosine-replacement palette256 (L4)" — the conditions are the diagnosis (god object -> decompose; no bucket rollover -> saturates silently; exit -> L4 6×(8:8) palette256²). NOT a V1 tail revival: one register read coarsely, no path/tail split. The V1 family:identity u24 fragment is the degenerate G1/G2 case (test proves the waiting-room claim). New classes MUST NOT be born into G1-G3. le-contract.md §3a documents the catalogue + code home; EPIPHANIES E-V3-GRACE-WIDE-CARVINGS-1 records the ruling. 5 lib tests green, clippy clean (-p lance-graph-contract). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…surface, not mint_for Adoption measured the market verdict: facet:: is used in 8 files / 28 sites with no apology; NodeGuid::mint_for has 3 real call sites and EVERY one is wrapped in a comment justifying the `mint_for(classid_read_mode(c) .tail_variant, …)` incantation. Sessions reached for facet::FacetCascade because it is the content-blind register done right; they held their nose past mint_for's tail ergonomics. Root cause: NodeGuid and FacetCascade are the SAME 16 bytes (`classid(4) | 6×(8:8)`) — one the tail lens, one the content-blind lens — but there was NO bridge, so a mint literally could not reach the good surface. This adds it: byte-identical `From<FacetCascade> for NodeGuid`, `From<NodeGuid> for FacetCascade`, and a `NodeGuid::facet()` accessor. No layout change, no reinterpretation — a mint can now build the ergonomic FacetCascade and `.into()` the node key with zero tail incantation. Byte-identity proven (facet_bridge_tests, green). Additive only; retiring mint_for/TailVariant and re-projecting the 3 sites' per-class ClassView byte placement are the follow-ups (the latter is a per-class semantic call, not a mechanical one). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
…ng banked (board + CLAUDE.md link) Operator rulings from this session, calcified before they dilute: - NEW `.claude/v3/knowledge/persona-vs-rung-ladder.md` — the demarcation file. The rung-content ladder (ladybug-rs -> thinking-engine lineage): 0-1 observation / 2 = the 144 thinking atoms (12 verb families x 12 tenses; sigma_rosetta + verb_table) / 3 = the 34 NARS reasoning tactics = THE runbooks (contract::recipes RECIPES[34], primitives in ndarray hpc/styles) / 4 = StyleFamily-12 macros, autopoiesis through frozen x learned x exploration. The adjective-36 in contract::thinking is the SEPARATE persona-modeling storyline - off-ladder, unwired by design, never rung 3, never "NARS runbooks". Corrects the E-STYLE-FAMILY-VS-RUNBOOK-1 label (default_runbook() bridges rung-4 macros to the persona vocabulary while wearing the rung-3 tactics' name). Anti-conflation card for the four spaces + open items O1-O6 (rung-content wiring, StyleFamily->recipes edge, persona future work, D-TSC-1 residue, probe results, triangle landing zone). - CLAUDE.md: the doc linked from the V3 SUBSTRATE section as a MANDATORY read before touching StyleFamily / runbooks / recipes / 144 verbs / RungLevel / persona modeling (in addition to the existing .claude/board links). - Board: EPIPHANIES prepend E-RUNG-CONTENT-LADDER-1 (the ruling + the correction, append-only); TECH_DEBT prepend flipping TD-STYLE-TABLE-RESIDUE item 3 to PROBED/DORMANT (p64-bridge STYLES[ord % 12] has zero external callers; dependents import only CognitiveShader; UNIFIED_STYLES confirmed tethered-not-collapsed, closing the MODULE-TABLE census question). Doc + board only; no code change in this commit. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c103f29c-6040-4fce-939c-0e9581399143) |
📝 WalkthroughWalkthroughThe PR adds legacy 96-bit migration payload types, bridges ChangesV3 contracts and knowledge
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8540d0e554
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| /// the same no-silent-truncation guard `NodeGuid::new` uses for its u24 groups. | ||
| #[inline] | ||
| fn put_u24_le(dst: &mut [u8], v: u32) { | ||
| debug_assert!(v <= 0x00FF_FFFF, "legacy outlier u24 field must fit 24 bits"); |
There was a problem hiding this comment.
Preserve u24 overflow checks in release builds
When callers pass a value above 0x00ff_ffff through write_wide_mixed or write_wide_triple, this guard is compiled out in release builds, so the subsequent byte writes silently drop the high bits and persist a different legacy payload than requested. The analogous NodeGuid::new u24 fields use assert! specifically to prevent this release-mode collision/truncation, so this helper should enforce the bound outside debug builds as well.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/v3/knowledge/persona-vs-rung-ladder.md:
- Around line 55-63: Update the stale “36 = literal NARS RUNBOOKS” definition in
FUTURE-DESIGN.md to distinguish persona-36 from the 34 NARS runbooks, or
explicitly mark that mapping as superseded by the persona-vs-rung-ladder
demarcation. Preserve the corrected 12↔36 persona-storyline mapping and avoid
implying that persona-36 belongs to the NARS runbook abstraction.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 9adddfe7-33f0-4df5-b266-b3ade2b6b549
📒 Files selected for processing (12)
.claude/board/AGENT_LOG.md.claude/board/EPIPHANIES.md.claude/board/TECH_DEBT.md.claude/plans/temporal-markov-and-style-classes-v1.md.claude/v3/FUTURE-DESIGN.md.claude/v3/knowledge/persona-vs-rung-ladder.md.claude/v3/soa_layout/le-contract.mdCLAUDE.mdcrates/lance-graph-contract/src/canonical_node.rscrates/lance-graph-contract/src/legacy_outliers.rscrates/lance-graph-contract/src/lib.rscrates/lance-graph-planner/src/thinking/mod.rs
| **What made the conflation easy:** persona-36 is 12-groupable, the | ||
| word "style" appears in all four spaces, and D-TSC-1's board ruling | ||
| `E-STYLE-FAMILY-VS-RUNBOOK-1` labeled the persona-36 "literal NARS | ||
| runbooks seeding the rung ladder." That label is CORRECTED by this | ||
| demarcation: `StyleFamily::default_runbook()` bridges rung-4 macros to | ||
| the *persona vocabulary*, while wearing the name of the *rung-3 | ||
| tactics*. The mapping pair (`family()`/`default_runbook()`) is | ||
| mechanically sound as a 12↔36 bridge WITHIN the persona storyline; only | ||
| its "runbook" naming and the board label cross storylines. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Synchronize the stale FUTURE-DESIGN mapping.
This demarcation says persona-36 is separate from the 34 NARS runbooks, but .claude/v3/FUTURE-DESIGN.md Line 31 still defines “36 = literal NARS RUNBOOKS.” That contradiction can send future implementation work down the wrong abstraction path. Update the FUTURE-DESIGN entry or explicitly mark it superseded by this document.
Proposed documentation correction
-E-STYLE-FAMILY-VS-RUNBOOK-1 | 12 = abstract orchestration FAMILIES (`StyleFamily`); 36 = literal NARS RUNBOOKS
+E-STYLE-FAMILY-VS-RUNBOOK-1 | 12 = abstract orchestration FAMILIES (`StyleFamily`); 34 = literal NARS RUNBOOKS; persona-36 remains a separate, unwired vocabulary🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/v3/knowledge/persona-vs-rung-ladder.md around lines 55 - 63, Update
the stale “36 = literal NARS RUNBOOKS” definition in FUTURE-DESIGN.md to
distinguish persona-36 from the 34 NARS runbooks, or explicitly mark that
mapping as superseded by the persona-vs-rung-ladder demarcation. Preserve the
corrected 12↔36 persona-storyline mapping and avoid implying that persona-36
belongs to the NARS runbook abstraction.
…; OGAR #201 companion noted) Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
What
Six commits, rebased onto post-#688 main — the operator-ruling arc of the 2026-07-13/14 session.
Rulings banked (doc + board)
8540d0e5— the rung-content ladder + persona demarcation (NEW.claude/v3/knowledge/persona-vs-rung-ladder.md, linked as a MANDATORY read from CLAUDE.md § V3 SUBSTRATE):sigma_rosetta+verb_table) · rung 3 = the 34 NARS tactic recipes = THE runbooks (contract::recipes::RECIPES[34], primitives in ndarrayhpc/styles) · rung 4 = StyleFamily-12 macros, autopoiesis through frozen × learned × exploration.contract::thinkingis the separate, unwired persona-modeling storyline — never rung 3, never "NARS runbooks". CorrectsE-STYLE-FAMILY-VS-RUNBOOK-1's label (append-only, viaE-RUNG-CONTENT-LADDER-1).StyleFamily → recipesedge, D-TSC-1 residue, probe results).TD-STYLE-TABLE-RESIDUEitem 3 to PROBED/DORMANT (p64-bridgeSTYLES[ord % 12]has zero external callers;UNIFIED_STYLESconfirmed tethered-not-collapsed).Code
e83e5f10— D-TSC-1 regression fix:1a11038left the deprecatedThinkingStylealias stranded inthinking/style.rswhile dropping itsthinking/mod.rsre-export — the old import path hard-broke with no migration affordance. Re-exports the alias (#[allow(deprecated)]) + liftsPlannerStyleExtsostyle.cluster()callers get a one-line fix. Board:E-COMPAT-ALIAS-MUST-BE-LIFTED-1(the gate lesson: a compat-alias gate must assert the old import PATH resolves, not that an alias token exists).9316d49d—contract::legacy_outliers(operator ruling, le-contract §3a): the three wide contiguous grace carvings for un-migrated V1 classes —WideMixed(3×u16+2×u24),WideTriple(4×u24),WideQuad(3×u32), all 96-bit, LE round-trip, bluntly named. Strongly discouraged if god-object-related or lacking bucket rollover; exit = L4 palette256². Deliberately NOTCascadeShapevariants. 5 tests incl. the V1family:identitydegenerate-case proof. Board:E-V3-GRACE-WIDE-CARVINGS-1.6de620c6—NodeGuid ↔ FacetCascadebridge: the two types are the same 16 bytes (classid(4) | 6×(8:8)) but had no conversion, which is why 3 call sites held their nose through themint_for(classid_read_mode(c).tail_variant, …)detour while 8 files reached forfacet::. Byte-identicalFromimpls both ways +NodeGuid::facet(); additive only, direct cast (no registry lookup on the conversion path). Byte-identity test green.Chess-arc board bank (pre-existing on branch, no PR before the main restart)
99c11f3b/b9ae704e—E-CHESS-ARC-TO-V3-TRANSFER-1(4 validations + D-EPIPHANY-SIG-1 probe-gated + 3 rejected rhymes) and the temporal-markov spine evidence addendum (E-THINKING-SPINE-CHESS-EVIDENCE-1, 6 graded mappings).Verification
cargo test -p lance-graph-contract --lib— legacy_outliers 5/5, facet_bridge 1/1 green; clippy clean.cargo build -p lance-graph-planner— clean, no new warnings (2 pre-existing deprecated-CausalEdge64 warnings untouched).Companion PR: AdaWorldAPI/OGAR (D‑V1‑GRACE‑CARVINGS mirror — the ⊘ V1-tail supersession gains the sanctioned waiting-room amendment).
🤖 Generated with Claude Code
https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
Generated by Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Documentation