Observation-class finding, noticed while implementing #7876 (PR #8079). Nothing is broken today — filing it so the triage round can grade it rather than sitting on it.
What is unasserted
"A $searchFields override naming __search is refused with a 400 ("is hidden")" is now stated in four places in the tree:
No test asserts it. Re-check:
git grep -rln "searchFields" -- packages | grep test | xargs grep -l "__search"
returns three files, and in all three the two names never meet in an assertion — search-companion.test.ts:173 pins the engine-side half (resolveSearchFields will not admit the column even when requestedFields names it), which is a different fact from the ingress gate's refusal.
Why it is only observation-class
The 400 does follow from two facts that ARE pinned, composed:
resolveSearchFields excludes hidden fields (packages/spec/src/data/search-fields.ts:112), pinned by search-companion.test.ts:173;
assertSearchFieldsAreSearchable refuses a known-but-unsearchable name with 400 INVALID_FIELD (packages/metadata-protocol/src/protocol.ts), pinned by query-expression-conformance.test.ts:1390 — on estimate, not on __search.
So the behaviour is real and reachable; what is missing is a test that names this column and asserts the ADR-0112 envelope (code AND status) on it.
Why it may still be worth closing
#7876's ruling makes the 400 load-bearing as a contrast: the projection door's silence is now documented as correct precisely because the authoring door refuses. A future change that let hidden columns clear the searchability gate would leave all four comments false with every suite green, and the one suite whose stated job is "on ANY door" is the one whose docblock asserts it in prose only.
Suggested shape if taken: one case in search-companion-read-projection-conformance.test.ts's matrix asserting code: 'INVALID_FIELD' and status: 400 for a searchFields override naming the companion.
Related: #7876 (the ruling) · PR #8079 (the comments) · #7642 (the projection strip) · #4254 (the gate)
Observation-class finding, noticed while implementing #7876 (PR #8079). Nothing is broken today — filing it so the triage round can grade it rather than sitting on it.
What is unasserted
"A
$searchFieldsoverride naming__searchis refused with a 400 ("is hidden")" is now stated in four places in the tree:packages/objectql/src/engine.ts—stripSearchCompanionFromRead's docblock (twice after docs(objectql,metadata-protocol): pin why the two__searchdoors answer differently (#7876) #8079: the pre-existing sentence and the new [Decision] Two doors answer__searchdifferently: the projection door drops it silently,$searchFieldsrefuses it with 400 "is hidden" #7876 ruling block)packages/objectql/src/search-companion.ts:224—stripSearchCompanion's docblockpackages/objectql/src/search-companion-read-projection-conformance.test.ts:12— the suite's own docblockNo test asserts it. Re-check:
returns three files, and in all three the two names never meet in an assertion —
search-companion.test.ts:173pins the engine-side half (resolveSearchFieldswill not admit the column even whenrequestedFieldsnames it), which is a different fact from the ingress gate's refusal.Why it is only observation-class
The 400 does follow from two facts that ARE pinned, composed:
resolveSearchFieldsexcludes hidden fields (packages/spec/src/data/search-fields.ts:112), pinned bysearch-companion.test.ts:173;assertSearchFieldsAreSearchablerefuses a known-but-unsearchable name with400 INVALID_FIELD(packages/metadata-protocol/src/protocol.ts), pinned byquery-expression-conformance.test.ts:1390— onestimate, not on__search.So the behaviour is real and reachable; what is missing is a test that names this column and asserts the ADR-0112 envelope (
codeANDstatus) on it.Why it may still be worth closing
#7876's ruling makes the 400 load-bearing as a contrast: the projection door's silence is now documented as correct precisely because the authoring door refuses. A future change that let hidden columns clear the searchability gate would leave all four comments false with every suite green, and the one suite whose stated job is "on ANY door" is the one whose docblock asserts it in prose only.
Suggested shape if taken: one case in
search-companion-read-projection-conformance.test.ts's matrix assertingcode: 'INVALID_FIELD'andstatus: 400for asearchFieldsoverride naming the companion.Related: #7876 (the ruling) · PR #8079 (the comments) · #7642 (the projection strip) · #4254 (the gate)