**Main thread (Opus), operator-directed.** Operator: read q2 `OGAR_CONSUMER_INTEGRATION.md` + `V3_SOA_WIRING.md`, check which lance-graph/OGAR consumers need the V1/V2→V3 (`part_of:is_a`) bump, focus first on representing the Spain electric grid better with V3. **Access:** pygithub/api.github.com is org-app-gated (403) — but `raw.githubusercontent.com` + `GH_TOKEN` works (different host, dodges the gate); fetched both docs that way. **V3 insight:** each 16-bit HHTL tier is an 8:8 split — high byte = `part_of` (PLACE/where, mereology), low byte = `is_a` (TISSUE/what, taxonomy); high-byte chain prefix-routes containment, low-byte chain prefix-routes type; `EdgeBlock` in-family = `part_of` siblings = `connected_to`. V3 needs **no layout change** (interpretation of the locked 3×u16). **Consumer-awareness (reported):** lance-graph `canonical_node` (no 8:8 accessor — additive opportunity); my `cascade_key` #605 (V1/V2 spatial-only → bumped here); `contract::soa_graph`/`graph_render`; **live blocker** q2 `osint-bake/fma.rs` calls `NodeGuid::new_v2(...LEAF...)` — a 7-group API that does NOT exist in `canonical_node` (the doc flags it as `I-LEGACY-API-FEATURE-GATED`; V3 sidesteps it — 6-group-compatible). Did NOT touch that gate (other session's OGAR/contract surface) — flagged only. **Shipped (`perturbation-sim/src/cascade_key.rs`, additive to #605):** `IsaPath {class,kind,sub}` (the is_a low-byte chain) + `CascadeKeyV3 {heel,hip,twig}` (each tier `(place<<8)|tissue`) + `place_chain`/`tissue_chain`/`part_of_distance`/`is_a_distance`/`to_guid_tiers` + `cascade_keys_v3(grid, alive, &[IsaPath])` (place = 24-bit Morton spectral cell, 3 octets; tissue = is_a taxonomy). For the grid: `part_of` prefix = "which region blacked out", `is_a` prefix = "all generators/loads" — two orthogonal queries on ONE key (V1/V2 spatial-only couldn't). **+4 V3 tests (9 total green):** 8:8 packing, axis-independence, blackout part_of-locality + is_a separability (source vs sink distinct class bytes), isa-count guard. Example `spain_cascade.rs` extended with the V3 dual-query (source/sink roles read off the is_a byte). clippy `-D warnings` clean, fmt-clean. EPIPHANIES `E-V3-PART-OF-IS-A-TILE`. Rides a PR on jirak.
0 commit comments