Parent: #8828. Successor to #8838 (whose deterministic core — input capture, pure replay, CLI, CI smoke — ships in the closing PR); this issue carries the two deliberately deferred pieces so #8838 closes clean.
Requirements
- Re-query mode (
replay-decision.ts --requery): re-runs the model for the same target and reports an ACTION-MATCH RATE — never labeled "reproducibility" (hosted inference is not bit-deterministic even at temperature 0; the docs must state why). Blocked on: persisting the full prompt text alongside the existing promptDigest (privacy + row-size call: prompt text embeds the diff — likely another private sibling table with retention bounds, mirroring decision_replay_inputs' posture).
- Wall-clock capture: when staleness rules (
requireFreshRebaseWindowMinutes, staleBaseAheadByThreshold) join the replay scope, the evaluation must read time through an injected nowMs recorded into decision_replay_inputs.replay_json — a seeded regression test per rule proving replay at the recorded instant is bit-exact and replay at a different instant is NOT silently accepted.
Test Coverage Requirements
99%+ patch coverage, branch-counted, on all changed src/** lines; both arms of every time-dependent branch.
Expected Outcome
The replay harness covers every decision input including time, and operators get an honest action-match metric for the one irreducibly nondeterministic stage.
Parent: #8828. Successor to #8838 (whose deterministic core — input capture, pure replay, CLI, CI smoke — ships in the closing PR); this issue carries the two deliberately deferred pieces so #8838 closes clean.
Requirements
replay-decision.ts --requery): re-runs the model for the same target and reports an ACTION-MATCH RATE — never labeled "reproducibility" (hosted inference is not bit-deterministic even at temperature 0; the docs must state why). Blocked on: persisting the full prompt text alongside the existingpromptDigest(privacy + row-size call: prompt text embeds the diff — likely another private sibling table with retention bounds, mirroring decision_replay_inputs' posture).requireFreshRebaseWindowMinutes,staleBaseAheadByThreshold) join the replay scope, the evaluation must read time through an injectednowMsrecorded intodecision_replay_inputs.replay_json— a seeded regression test per rule proving replay at the recorded instant is bit-exact and replay at a different instant is NOT silently accepted.Test Coverage Requirements
99%+ patch coverage, branch-counted, on all changed
src/**lines; both arms of every time-dependent branch.Expected Outcome
The replay harness covers every decision input including time, and operators get an honest action-match metric for the one irreducibly nondeterministic stage.