@@ -1124,3 +1124,65 @@ Estimated 100× speedup for encoding (O(1) table lookup vs O(256) L1 per query).
11241124- ** TD-DIST-3** (Palette distance table): ` Palette::build_distance_table() ` →
11251125 ` PaletteDistanceTable ` with O(1) ` distance(a, b) ` and ` edge_distance(a, b) ` .
11261126 128 KB table, L2-resident. Status: ** PAID** .
1127+
1128+ ## 2026-04-26 — TD-PALETTE-SENTINEL: 257th sentinel slot in palette distance/compose tables
1129+
1130+ ** Status:** Open (low priority — historical aspirational design, no current need)
1131+
1132+ The 2026-04-20 resolution-hierarchy epiphany described the bgz17 HIP layer
1133+ as ` 256×257 ` (256 archetypes + 1 sentinel). Implementation shipped ` k×k `
1134+ without the sentinel. See EPIPHANIES.md 2026-04-26 CORRECTION for full
1135+ context.
1136+
1137+ ** Why deferred:**
1138+ - Adding a 257th index requires widening palette indices from ` u8 ` to ` u16 `
1139+ - ` PaletteEdge ` wire format doubles from 3 bytes to 6 bytes per edge
1140+ - ` MAX_PALETTE_SIZE = 256 ` is a deliberate u8-ceiling design choice
1141+ - The three sentinel roles (unknown/null/identity) are already covered by
1142+ existing mechanisms: ` Palette::nearest() ` clamps unknowns, ` identity() `
1143+ returns the closest-to-zero archetype.
1144+
1145+ ** Revisit when:** a real "absent edge" code path materializes (e.g., a
1146+ sparse mxm that needs to distinguish "no relation" from "relation = 0
1147+ distance"), or when the palette grows beyond 256 entries (which would
1148+ also force u16 indices).
1149+
1150+ ## 2026-04-26 — TD-AWARENESS-INLINE-1: awareness should be BF16-mantissa-inline, not driver-global
1151+
1152+ ** Status:** Open (P-0 architectural, scope: substrate-wide)
1153+
1154+ Per EPIPHANIES.md 2026-04-26 "awareness should be BF16-mantissa-inline":
1155+ the current ` ShaderDriver.awareness: RwLock<Vec<GrammarStyleAwareness>> `
1156+ is driver-global and separate from the stream. This wastes the CPU's
1157+ 20-200 ns random-access advantage and recreates the parser/processor
1158+ split that AGI is supposed to dissolve.
1159+
1160+ ** The correct shape:** every stream operation returns ` (value, awareness) ` ,
1161+ where awareness (7-8 bits, BF16-mantissa-equivalent) is derived inline
1162+ from operation properties (bit-purity, distribution shape, residual norm,
1163+ match strength). Awareness composes through the cascade the same way
1164+ values compose.
1165+
1166+ ** Wedge for the smallest viable adoption:**
1167+ 1 . Extend ` contract::distance::Distance ` with
1168+ ` distance_with_awareness(&self, other) -> (u32, u8) ` . 8 bits per
1169+ measurement; 11% overhead vs raw distance.
1170+ 2 . Add ` Aware ` trait and ` Annotated<T> ` to contract.
1171+ 3 . Implement awareness derivation for the four primary operations:
1172+ ` vsa_bind ` , ` vsa_bundle ` , ` hamming ` , ` cosine ` .
1173+ 4 . Update ` ShaderDriver::dispatch ` to compose inline awareness over
1174+ the cascade. The driver-global ` GrammarStyleAwareness ` becomes a
1175+ bootstrap seed, not the per-cycle source of truth.
1176+
1177+ ** Size budget:** 11-12% overhead on stream payloads (vs 43.75% for
1178+ BF16 mantissa as a fraction of value), because the value plane is
1179+ much wider here than in floating-point.
1180+
1181+ ** Why deferred:** scope is substrate-wide. Touches the contract
1182+ Distance trait (just shipped TD-DIST-1), every SIMD operation in
1183+ ndarray::hpc, the shader driver's cascade, and the BindSpace SoA.
1184+ Should be designed as one coherent commit, not piecemeal.
1185+
1186+ ** Revisit when:** the next architectural sweep covers the awareness
1187+ dimension. Until then, awareness stays driver-global. The epiphany
1188+ documents the correct direction so future work doesn't re-derive it.
0 commit comments