Skip to content

[finding] After #10629 the @objectstack/runtime log still carries 6 expected ERROR Find operation failed frames from one green test — same defect class, different feature (cross-field filter refusal) #10983

Description

@os-elon

Filed unassigned by the seat implementing #10629. Observation class — no fix proposed here, and no pm:queue.

What was measured

#10629 removed the whole refused a read on population from the @objectstack/runtime log. Measured on claude/issue-10629-runtime-test-noise-remainder at ef25e4a341, one full run (179 files, 2679 tests, all PASS), reporter forced the way CI effectively gets it:

pnpm --filter @objectstack/runtime exec vitest run --reporter=default --maxWorkers=2
featurebefore #10629after #10629
[sql-driver] DATABASE_ERROR — the backend refused a read on '...'1340
ERROR Find operation failed1406

The 6 survivors are not residue of that card's population — they are a different feature that happens to share the engine's frame. All 6 come from one passing file:

linesfileobject
6packages/runtime/src/cross-field-refusal-operand-withhold.test.tscross_field_deal

Their payload is the #7929 cross-field refusal, not a missing table:

ERROR Find operation failed {"object":"cross_field_deal","error":{"message":"A cross-field
comparison in this filter cannot be compiled here. ... The columns, the operator this filter
used and the specific reason are withheld from the message (#7929); the full diagnostic is in
the server log.", ...}}

The suite is [#7929] a cross-field refusal keeps its envelope and stops disclosing the predicate, 11 tests, all PASS. The refusals are the subject of the file — it drives filters the SQL push-down must refuse — so each frame is expected in exactly the sense #10380 and #10629 use the word.

Why this is recorded rather than fixed

It is the same defect class both of those cards close — expected-failure noise from a green test, in a shard log turbo interleaves without attribution, which is how the #10293 p1 flake signature was assembled — but it is a different feature string and a different file, outside the enumerated population #10629 claims. #10629's scope was the refused a read on census; widening it at implementation time would have been the scope creep Prime Directive #10 forbids.

The tooling to close it already exists and is generic in the right dimension for tables but not for this: packages/runtime/src/expected-read-refusal-noise.ts (landed by #10629) withholds a driver refusal by table-plus-reason and the engine frame directly above it. A cross-field refusal has no table to key on — it never reaches the driver's backendStatementFault at all, so there is no pending driver refusal for the engine gate to sit above. Closing this one needs either a second predicate keyed on the refusal's own message, or a decision that the engine's Find operation failed frame is the wrong altitude for a refusal the driver deliberately produced. That choice is a judgement, not a mechanical edit, which is why no fix is proposed here.

One neighbour worth naming, deliberately not counted above

The same run also prints 4 [Protocol] Withheld a caught error's text from a batch row (#8502) lines, from the two batch-row-*-real-driver files #10629 touched. They were left alone on purpose: unlike the two features above they are warn-shaped rather than ERROR-shaped, and they report a production withholding decision actually being taken — the thing those suites exist to prove. Quieting them is a separate judgement and is not implied by anything here.

How to reproduce

The noise is invisible to an ordinary piped local run — vitest 4 picks MinimalReporter off a TTY and drops console.* from passing tests, while turbo gives each task a pty and gets DefaultReporter. --reporter=default is what makes a local measurement match CI. Note this particular feature is written straight to stdout and bypasses the reporter, so it reaches the log under both — but the refused a read on half of the comparison above does not, and a measurement without the flag reports a false zero for it.

Related

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions