|
| 1 | +# 2026-10-16 — D-CGW-1: CE64 bits 43..45 are the orientation |
| 2 | + |
| 3 | +**Status:** SHIPPED IN PR (branch ccr-9f3b8075-74u47l-cgw1). |
| 4 | + |
| 5 | +## What changed |
| 6 | + |
| 7 | +- New `causal_edge::orientation::Orientation` (`crates/causal-edge/src/orientation.rs`): |
| 8 | + a 3-bit code. `Core` = 0, then Direction, Recipient, Experiencer, Purpose, |
| 9 | + Beneficiary, PredicativePossessor, ExternalPossessor (Haspelmath 2003 dative |
| 10 | + map). `from_code` reads the low three bits, so every value names exactly one |
| 11 | + orientation. |
| 12 | +- `CausalEdge64::direction()/set_direction()` are now |
| 13 | + `orientation()/set_orientation()`. `pack` and `pack_v2` take an |
| 14 | + `Orientation`, so the compiler lists every writer. `layout::DIR_SHIFT` is |
| 15 | + renamed `ORIENT_SHIFT`. `CausalEdgeV3::direction()` became `orientation()`. |
| 16 | +- Removed, not moved: `s/p/o_pathological`, `concern_level`, |
| 17 | + `CausalNetwork::detect_simpsons_paradox`. Reason: no production code wrote |
| 18 | + the triad. The only production writer of 43..45 was `deepnsm-v2::wire`, which |
| 19 | + already wrote Haspelmath codes. The planner's `ConfounderCheck` |
| 20 | + (`lance-graph-planner/src/pearl.rs`) computes its two directions from |
| 21 | + population masks. `CausalMask::simpsons_paradox_risk(so, po)` stays, documented |
| 22 | + as taking caller-computed directions. |
| 23 | +- `deepnsm-v2::wire` writes the contract's `Orientation`. Its own u8 table became |
| 24 | + `orientation_of(DativeFunction) -> Option<Orientation>` and |
| 25 | + `orientation_function(Orientation)`. |
| 26 | +- Contract `moore_tenant`: `DirectionReading`, `SignTriple`, |
| 27 | + `require_sign_triple` and `DirectionRefusal` (a per-tenant reading binding) are |
| 28 | + replaced by `MooreDirection { slot, polarity }`. `MooreTenantMut::lift_ce64` |
| 29 | + refuses an edge whose orientation is not `Core` with the new |
| 30 | + `MooreRefusal::Oriented { slot, code }`. A refusal writes nothing. |
| 31 | +- About 85 call sites migrated across causal-edge, deepnsm-v2, lance-graph, |
| 32 | + lance-graph-planner, cognitive-shader-driver, lance-graph-osint, p64-bridge and |
| 33 | + thinking-engine. Zero literals became `Orientation::Core`. Fixture bit patterns |
| 34 | + kept their bits through `Orientation::from_code`. |
| 35 | +- Probes that read 43..45 per class (`witness_angle_probe`) or as the triad |
| 36 | + (`moore_nars16_probe`) are marked superseded. The moore_nars16 Simpson tests |
| 37 | + were removed with the detector they tested. `moore_nars_gomoku_probe` no longer |
| 38 | + writes its Moore direction into 43..45. |
| 39 | +- `docs/architecture/ce64-semantic-upper-half.md`: 43..45 are settled. The |
| 40 | + "declared reading per tenant" paragraph is replaced by one meaning per field. |
| 41 | + |
| 42 | +## Tests |
| 43 | + |
| 44 | +- `crates/causal-edge/tests/orientation_contract.rs` (5 tests, written first and |
| 45 | + committed red): |
| 46 | + - the code table is one-to-one over 3 bits; |
| 47 | + - zero is `Core`; |
| 48 | + - accessor and setter agree; |
| 49 | + - both packers write the same table; |
| 50 | + - field isolation of 43..45 against 40..42 and 46..49. |
| 51 | +- Contract `moore_tenant`: `h_direction_is_slot_and_polarity` and |
| 52 | + `h2_an_oriented_edge_is_refused`. Disable run: removing the refusal check turns |
| 53 | + `h2` red (11 passed, 1 failed). Restored afterwards. |
| 54 | +- causal-edge passes on both the v2 default and `--no-default-features` (v1). |
| 55 | + |
| 56 | +## Edge facet census (Haiku card, spot-checked) |
| 57 | + |
| 58 | +- Production writers of the 16-byte edge facet: two. |
| 59 | + - `lance-graph-contract/src/aiwar.rs:117-119` (out-of-family slots, bytes |
| 60 | + 12..15). |
| 61 | + - `symbiont/src/domino.rs:95-97` (bytes 0 and 12). |
| 62 | +- Both use the old 12+4 slot reading. |
| 63 | +- All other non-default constructions are test code. No code assigns a row's |
| 64 | + `.edges` field directly. |
| 65 | + |
| 66 | +## Decided 2026-10-16 (conversation) |
| 67 | + |
| 68 | +- WordNet: `is_a` is the identity facet's DN path (16-nibble, already wired by |
| 69 | + `deepnsm-v2::promote::{tiers_of, key_at}`). `part_of` and other relations go to |
| 70 | + the edge facet, read as 16 slots through the ClassView. The 128-bit facet |
| 71 | + format already exists (D-HPR-6a), so there is no layout change. The missing |
| 72 | + piece is the caller: AriGraph, which is D-ARG-3. |
| 73 | +- A leapfrog trie zipper over DN keys is a lanewise span fold (each DN level is |
| 74 | + an ordered lane; a seek is a span). It is input to D-ASM-11 arm B and depends |
| 75 | + on range-as-span (lane-fold capstone point 4). Per the capstone, a real |
| 76 | + element-wise zip and a cyclic n-hop are refused residuals, so the triangle in §9 of `2026-10-16-synergy-map-since-1579.md` |
| 77 | + qualifies only as span intersections plus one terminal AND. |
| 78 | + |
| 79 | +## OPEN |
| 80 | + |
| 81 | +- 46..49 are still read as activation by `wire` and as Energy4 by Moore tenants. |
| 82 | + D-CGW-9 moves activation to a row field. |
| 83 | +- 50..52 carries plasticity (`learn`) and the novelty → wisdom rung (`wire`). It |
| 84 | + needs a ruling. |
| 85 | +- The two production edge-facet writers still use the 12+4 slot reading. |
| 86 | +- WordNet DN gates are not measured: |
| 87 | + - G1: chain depth ≤ 12/16; |
| 88 | + - G2: fan-out per level ≤ code width; |
| 89 | + - G3: multi-parent synsets. |
0 commit comments