fix(event): stop the quoting sink from swallowing every audit channel - #8411
Open
esengine wants to merge 1 commit into
Open
fix(event): stop the quoting sink from swallowing every audit channel#8411esengine wants to merge 1 commit into
esengine wants to merge 1 commit into
Conversation
CostQuoteSink forwarded Emit but not the optional sink capabilities, so every recorder below it received nothing. In the CLI run chain that is the stats recorder and the trajectory recorder: a real `reasonix run --trajectory` wrote 2130 event records and zero audit records — no outcome progress, no readiness audits, no completion reports, no delegation admissions, no protocol recovery. The shadow instrumentation those channels carry is the input to the EBM and reasoning-governor experiments, so their trajectories have been empty of the samples they were built to compare, and cmd/e2ebench has been silently falling back to its verification backfill. Embed AuditForwarder, which exists for exactly this and whose own comment records the lesson: hand-written forwarding lost capabilities at multiple wrappers while their owning tests stayed green. The regression test drives the package dispatchers rather than the methods, so it fails with a named channel per capability instead of a build error — the dispatchers are the real path, and a wrapper that loses one no-ops silently.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Found by running
reasonix run --trajectoryfor real while verifying #8404, notby a test — every test in the tree wires recorders directly and stayed green.
CostQuoteSinkforwardsEmitbut not the optional sink capabilities, so everyrecorder below it in a chain receives nothing. In the CLI run chain that is the
stats recorder and the trajectory recorder, both of which sit under it:
A real research run wrote 2130 event records and zero audit records: no
outcome progress, no readiness audits, no completion reports, no delegation
admissions, no protocol recovery, no workspace mutations.
That matters beyond diagnostics. Those channels carry the shadow samples the EBM
and reasoning-governor experiments were built to compare (
ebm_eligible,governor_engaged,debt_age,blind_mutations), so CLI trajectories have beenempty of them, and
cmd/e2ebenchhas been silently taking its"older recordings" fallback — the one its own comment notes cannot price scorer
claims — instead of reading recorded samples.
The fix is to embed
AuditForwarder, which exists for exactly this case andwhose comment already records the lesson: hand-written forwarding lost
capabilities at multiple wrappers even while their owning tests stayed green.
The quoting sink simply never adopted it.
The regression test drives the package-level dispatchers rather than calling the
methods directly. That matters: the dispatchers are the path the host actually
uses and they no-op silently on a wrapper that lost the capability, so the test
fails with a named channel per capability. Calling the methods directly would
only produce a build error, and only if they vanished outright.
Verified end to end: with the fix, the same
reasonix run --trajectorynowrecords
outcome_progress.Cache-impact: none - sink capability plumbing only; no tool schema, prompt, or provider request surface is touched, so the system-prompt prefix stays byte-identical.
Cache-guard:
go test ./internal/boot/(provider_request golden), unchanged and green.Documentation-impact: none - no user-facing behaviour or documented contract changes; this restores recording that the docs already assume happens.