Uh oh!
There was an error while loading. Please reload this page.
docs(tests): route A for the three memory-driver fixtures — the console-level capture captures zero, measured - #12145
Merged
os-warren merged 2 commits intoAug 25, 2026
Conversation
…easured, not assumed
The three memory-driver fixtures in @objectstack/trigger-record-change keep
their blanket `logger: { level: 'silent' }`. The console-level capture proposed
to replace it was measured and captures ZERO of their 21 boot ERROR frames:
ObjectLogger.write prefers the process streams and reaches `console` only as a
browser/bundler fallback, so under vitest's `environment: 'node'` the console
arm is unreachable.
Records the measurement in the helper that would have grown the predicate, and
at the three `level: 'silent'` lines someone would go to remove.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6HFzyH98W1YaQXhJUJt6oContributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 23 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-warren
marked this pull request as ready for review
August 25, 2026 11:35
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 25, 2026
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
os-warren
deleted the
claude/issue-11571-memory-fixture-boot-noise-capture
branch
August 25, 2026 15:06
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 freeto 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.
Part of #11571
Route A — the three memory-driver fixtures keep their blanket mute — chosen on a
measurement rather than defaulted into. #11081 stays open for the maintainer's call on
whether to wrap it up at 2 of 5.
What was measured
Re-measured rather than recalled, by floating each fixture to
level: 'info'(the mutationproved on disk by anchored grep counts before any result was read, then restored and
verified byte-identical against
HEAD):bulk-write-per-row-context.test.tsformula-context.test.tsmultilookup-context.test.tsThe card's 15 / 3 / 3 reproduces exactly, and the entire ERROR surface is the one
boot-without-a-datasource trio, invariant per boot.
Why route C is not buildable as specified
Route C was "patch
console.error/console.warnfor the file, kernel atlevel: 'error'".It captures zero of the 21 frames.
ObjectLogger.write(packages/core/src/logger.ts)prefers the process streams and reaches
consoleonly as a fallback:Under vitest's
environment: 'node',process.stderralways exists, so theconsolearmis unreachable there. A probe booting this exact plugin stack at
level: 'error'with allfour sinks counted scored:
The prediction was written down before the run and matched it.
Why the one working variant is refused too
The only variant that does intercept them patches
process.stderr.write. That is refusedhere as disproportionate rather than unworkable: both predicates in the helper today
patch an object seam (
driver.logger,engine.logger) whose blast radius is one instancethe fixture itself owns, while a stream patch is process-global and sits in the path of
everything the worker writes for as long as it is installed. Twenty-one invariant per-boot
frames that carry no per-test signal do not buy a third capture mechanism of that reach —
and #11569 (the helper's engine pass-through already lands in a silenced logger) means the
two mechanisms already there want repairing before a third is stacked on them. That is the
"designed together rather than in sequence" point from the card: this PR does neither, and
records why.
Route B stays refused on the card's own mechanism, restated in the helper so the next reader
meets it there: the kernel takes a logger config, builds its own and hands it out by
reference, so a post-construction swap propagates only partially — a capture that misses
frames while asserting it does not.
What changed
Comments only. No behaviour, and nothing publishable:
packages/runtimeshipsdistaloneand this helper is not exported from
src/index.ts, so it is not bundled.packages/runtime/src/expected-read-refusal-noise.ts— a closing section recording themeasurement and the refused routes, at the place someone would go to add the predicate.
logger: { level: 'silent' }, the place someonewould go to remove the mute.
No ablation is owed: no capture was built, so there is nothing to prove can fail. The
measurement is the deliverable.
Verification
Gate union derived, not recalled —
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack— and re-run at final commit32dd522d21. Every exit code wascaptured before any pipe.
All green:
check:cross-package-test-inputs,check:published-files,check:slot-lookup,check:test-source-alias,check:type-source-resolution,check-ci-filter-parity,check-plugin-teardown-shape,check-affected-docs,check-drift-comment,check:query-options-erasure,check:engine-double-contract,check:where-matcher,check:type-check-coverage,check:nul-bytes,check:type-check-debt.Ratchet verdicts quoted from their own output at that commit:
check-type-check-coverage --re-measure: OK — 32 ledger entr(ies) re-measured in 221.5s, 1897 raw tsc error(s) total, none above its recorded number.✓ slot-lookup ratchet holds: 107 unswept site(s) in 25 file(s), none new✓ where-matcher conformance holds: 299 matcher(s) discovered, 299 answer the combinator battery correctly or refuse it loudlycheck-nul-bytes: OK (scanned 6730 text file(s) … no raw ASCII control bytes)Fixtures re-run after the edits:
Test Files 3 passed (3) · Tests 6 passed (6). Packagetypechecks green for
@objectstack/trigger-record-change(bothtsc --noEmitand-p tsconfig.test.json) and@objectstack/runtime.No changeset — test-only surface, so the
skip-changesetlabel carries the declaration.Generated by Claude Code
Generated by Claude Code