Build Log
Signals Product Analysis, an RSC Deterministic Trap, and the Observer's Own Transport Redesign
August 24, 2026
A product-analysis charge on Alloy's Signals page found and fixed two real correctness gaps, a live production regression during the fix became a deterministic RSC-boundary guard, and the observer itself drafted and shipped the first slice of its own transport redesign — then got corrected for an epistemic overclaim inside the very manifest built to catch epistemic overclaims.
Timeline
What shipped
Fixed Alloy Signals page: Deep Dive (SignalsTable.tsx) now uses the same canonical categorizeSpin() taxonomy the Cockpit already used, instead of the raw fragmented spin.category field
Removed the non-discriminating fix-history cockpit badge (previously 'Partial fix' on every card, then 'Fix on record' on every card — neither discriminated between the 5 ranked categories); renamed easeScore to fixHistoryStatus and extracted a pure classifyFixHistory() function with direct tests
Split categorizeSpin() into a new client-safe lib/signals/categorize-spin.ts after a real RSC-boundary production build break, fixing the live regression
Built products/alloy/scripts/check-rsc-boundary.mjs — a deterministic guard, wired into check:boundaries/predeploy, that walks dependency-cruiser's own JSON graph from every 'use client' file and fails if any transitively reaches a Node core module (fs/path/crypto/etc.), correctly stopping at 'use server' boundaries and excluding type-only imports
Had the observer (Witness) draft its own Charge for a transport redesign, then built the first slice: forgekit-os/scripts/experiments/observer-packet.mjs (deterministic Level 0 filtering + loss-aware event projection) and observer-provenance.mjs (minimal raw-event/window drill-down)
Wired --packet as an opt-in flag into observer-probe.mjs, with a separate packet-aware system prompt, verified end-to-end with a real observer call
Corrected a real epistemic overclaim in the packet manifest itself (unclassified:[] does not prove no silent loss) — split into unclassifiedCount (proven) vs. knownOmissionsCount (accounted for, not proven harmless), renamed the module from claiming 'Level 1' to the accurate 'loss-aware event projection'