Build Log · August 24, 2026
Signals Product Analysis, an RSC Deterministic Trap, and the Observer's Own Transport Redesign
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.
- Alloy
- Signals
- Research
- Experiment 0
- OS Guardrail
- commits landed
- 4
- real correctness gaps fixed on Signals
- 2
- live production regression, found and fixed same session
- 1
- character reduction on the oversized observer window
- 87%
commits landed
real correctness gaps fixed on Signals
live production regression, found and fixed same session
character reduction on the oversized observer window
Timeline
Start
Signals Page Product Analysis Charge received
Explicit instruction: understand the page's job before touching anything, implementation only if analysis justifies it
~1h
Deep Dive taxonomy mismatch found and fixed
Cockpit used canonical categories, Deep Dive one click below still used the raw fragmented field
~2h
easeScore inference challenged by the observer, then verified stronger than suspected
Observer: failure for one purpose doesn't prove failure for another. Direct verification found known-fix unreachable against all 16 real categories
~2.5h
Live production regression during the fix
SignalsTable.tsx (Client Component) pulled prioritization.ts's fs/path/crypto chain into the browser bundle — caught by the user, not by tsc/eslint/dev-server
~3h
User review: easeScore fix was only half-right
Cockpit badge replaced one non-discriminating claim with another; property name never updated to match its new meaning; test coverage claim didn't match what was tested
~3.5h
Deterministic RSC-boundary guard built and verified
Two real false-positive classes found and fixed (Server Actions, two different type-only import tags) by testing against the real 55-file codebase, then verified by reintroducing the original bug
~4h
Observer drafts its own transport-redesign Charge
User's proposal (Observer Packet + provenance-on-demand) handed directly to the observer persona, which pushed back on real points rather than agreeing
~4.5h
Observer Packet Level 0+1 built and verified against the exact real 1.34MB window that broke the original transport
1,350,618 chars -> 175,631 chars, zero unclassified events, both images correctly marked
End
Direct review: stop building, fix the vocabulary, freeze the transport
unclassified:[] does not prove no silent loss — corrected the manifest's own overclaim, then stopped per instruction
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'