Skip to content

docs(tests): route A for the three memory-driver fixtures — the console-level capture captures zero, measured - #12145

Merged
os-warren merged 2 commits into
mainfrom
claude/issue-11571-memory-fixture-boot-noise-capture
Aug 25, 2026
Merged

docs(tests): route A for the three memory-driver fixtures — the console-level capture captures zero, measured#12145
os-warren merged 2 commits into
mainfrom
claude/issue-11571-memory-fixture-boot-noise-capture

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

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 mutation
proved on disk by anchored grep counts before any result was read, then restored and
verified byte-identical against HEAD):

fixtureERROR framesdistinct messagesrecognised by the helper
bulk-write-per-row-context.test.ts15 (5 boots)30
formula-context.test.ts3 (1 boot)30
multilookup-context.test.ts3 (1 boot)30

The 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.warn for the file, kernel at level: 'error'".
It captures zero of the 21 frames.ObjectLogger.write (packages/core/src/logger.ts)
prefers the process streams and reaches console only as a fallback:

if(stream){// process.stderr for error/fatalstream.write(line+'\n');}elseif(typeofconsole!=='undefined'){console.error// browsers / bundler shims ONLY}

Under vitest's environment: 'node', process.stderr always exists, so the console arm
is unreachable there. A probe booting this exact plugin stack at level: 'error' with all
four sinks counted scored:

console.error: 0 console.warn: 0 process.stderr.write: 3 process.stdout.write: 0

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 refused
here as disproportionate rather than unworkable: both predicates in the helper today
patch an object seam (driver.logger, engine.logger) whose blast radius is one instance
the 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/runtime ships dist alone
and 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 the
    measurement and the refused routes, at the place someone would go to add the predicate.
  • the three fixtures — a short note at each logger: { level: 'silent' }, the place someone
    would 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 commit 32dd522d21. Every exit code was
captured 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 loudly
  • check-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). Package
typechecks green for @objectstack/trigger-record-change (both tsc --noEmit and
-p tsconfig.test.json) and @objectstack/runtime.

No changeset — test-only surface, so the skip-changeset label carries the declaration.

Generated by Claude Code


Generated by Claude Code

…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_01W6HFzyH98W1YaQXhJUJt6o
@github-actions

github-actionsBot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/runtime/src/expected-read-refusal-noise.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/runtime/src/expected-read-refusal-noise.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 23 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 494279cb31f1d92adab959763085e19c923a8652packageMentionDocs.

@os-warrenos-warren added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s labels Aug 25, 2026 — with Claude
@os-warren
os-warren marked this pull request as ready for review August 25, 2026 11:35
@os-warren
os-warren added this pull request to the merge queueAug 25, 2026
@github-merge-queue
github-merge-queueBot removed this pull request from the merge queue due to failed status checks Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-warren@claude