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

commits landed

real correctness gaps fixed on Signals
2

real correctness gaps fixed on Signals

live production regression, found and fixed same session
1

live production regression, found and fixed same session

character reduction on the oversized observer window
87%

character reduction on the oversized observer window

Timeline

  1. Start

    Signals Page Product Analysis Charge received

    Explicit instruction: understand the page's job before touching anything, implementation only if analysis justifies it

  2. ~1h

    Deep Dive taxonomy mismatch found and fixed

    Cockpit used canonical categories, Deep Dive one click below still used the raw fragmented field

  3. ~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

  4. ~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

  5. ~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

  6. ~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

  7. ~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

  8. ~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

  9. 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'