Uh oh!
There was an error while loading. Please reload this page.
docs(qa): correct four stale search-checklist texts from run #7629 - #7773
Conversation
…7647) Checklist/doc maintenance only — no product behaviour changes, and no edits outside `docs/qa/platform-checklist/areas/search.json`. 1. `cross-field-object-search` (rev 2) — the case-fold clause conflated two mechanisms, textual case matching and select label→value mapping, and the label half passes on a case-SENSITIVE build because `optionValuesMatching` lowercases in JS. So a green tick said nothing about the textual half, which is how #7641 survived a release with a green dogfood pin. Split into two clauses with a `['name']`-narrowed probe that pins the textual case-fold away from the select path, plus the step and negative for the lowercase-name assertion run #7629 identified as the missing one. Direction per the #4706 Q2 = A ruling: **case-insensitive is the declared truth**, so the item reconciles TOWARD the declaration. The title, the `search-filter.ts` docblock citation and the declaration itself are deliberately unchanged; `knownGaps` records #7641 as the expected FAIL on today's build. The variant string "case-insensitive $contains" was self-contradictory under Q2 = A and now names `$icontains` semantics. 2. `pinyin-flag-both-sides` (rev 2) — the OFF-inertness clause demanded a plugin log line that cannot appear under CLI serving: the flag gates one layer upstream, the CLI omits `pinyin-search` from `requires`, so the plugin never loads and never reaches its own inert branch (#7629: 47 plugins off vs 48 on, zero "pinyin" in a 1.2 MB debug boot log). The clause now reads the plugin roster difference — a stronger proof than the log line — and keeps the inert line only as the alternative oracle for a host that loads the plugin unconditionally. 3. `rls-both-personas` (rev 2) — the seed ships 12 invoices (INV-1001..INV-1012), not 8. Three places carried the stale count; the no-count-leakage clause no longer hard-codes a population at all. 4. `console-global-search` (rev 2) — same stale invoice count duplicated in its RLS-parity fixture, and `knownGaps` now records that this path inherits the declared-case-insensitive contract and the #7641 executor gap, so a run does not score a case-driven miss as a palette defect. `node scripts/check-platform-checklist.mjs` reports only the pre-existing `coverage.json · qa: UNCLASSIFIED` problem (#7347), unchanged from base. Fixes#7647 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RWxvQNohCm2gnSP5ACFGBV
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31510743697 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31511210718 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31512046400 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31512976815 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31513730596 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31514481240 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Fixes#7647
Checklist/doc maintenance falling out of the
searcharea QA run #7629 (framework92f26f75). No product behaviour changes. One file touched:docs/qa/platform-checklist/areas/search.json.Direction (the ruling this PR obeys)
#4706 Q2 = A:
$containsis a case-SENSITIVE substring test;$icontainsis the case-insensitive one. Per the maintainer ruling recorded in triage, case-insensitive remains the DECLARED truth for$search— so the checklist reconciles toward the declaration, not toward today's behaviour. Thecross-field-object-searchtitle, thesearch-filter.tsdocblock citation and the case-insensitive declaration itself are therefore deliberately unchanged;knownGapsrecords #7641 as the expected FAIL on current builds. The product-side conformance gap belongs to #7641, not to this PR.Itemized checklist — 落点 | before | after
cross-field-object-search·acceptance[2]['name'], and a select-label clause that states it proves nothing about the textual halfcross-field-object-search·stepsPOST { search: 'Retail' }(label case) only['name']-narrowed'retail'/'Retail'pair — the textual probe pinned away from the select pathcross-field-object-search·negativecross-field-object-search·variants[2]"case-insensitive $contains""case-insensitive textual matching ($icontainssemantics —$containsitself is case-SENSITIVE per #4706 Q2 = A)"— the old string was self-contradictory under the rulingcross-field-object-search·fixtures.knownGapscross-field-object-search·sourcefieldClausesForTermdoes not yet honor (#7641); +1 entry citing the #4706 Q2 = A rulingpinyin-flag-both-sides·acceptance[3]'OS_SEARCH_PINYIN_ENABLED is off — inert'requiresdifference + a zero-hitpinyingrep; the inert line is kept only as the alternative oracle for a host that loads the plugin unconditionallypinyin-flag-both-sides·steps[6]requiresand grep the whole debug logpinyin-flag-both-sides·fixturesrequires+1 (debug boot log for both boots);knownGaps+1 recording that the log line is unobtainable under CLI serving, so the next author cannot restore itpinyin-flag-both-sides·sourcerls-both-personas·fixtures.requires[0]INV-1001..INV-1008INV-1001..INV-1012(12 rows), owner spread as counts (ada ×5 / linus ×4 / grace ×3), INV-1003 named as linus'srls-both-personas·acceptance[1].verifyrls-both-personas·source(INV-1001..1008 owner spread; …)(INV-1001..1012 owner spread; …)console-global-search·fixtures.requires[2]INV-1001..INV-1008(same stale count duplicated)INV-1001..INV-1012(12 rows), INV-1003's owner namedconsole-global-search·fixtures.knownGapssearchAllalso emits$contains), so a case-driven miss is not scored as a palette defectrevision+historyrevision: 1revision: 2+ a history entry each, per the README change discipline (run records pin the revision they ran against)diff --statis 1 file / +47 −25, and every hunk maps to a row above.Why (1) is the substantive one
Run #7629 scored the old clause FAIL, and the interesting part is why it had gone unnoticed for a release: the clause conflated two independent mechanisms, and the select-label half passes on a case-sensitive build because
optionValuesMatchinglowercases both sides in JS before emitting$in. So a green tick — and the green dogfood pin, whose only case assertion is a select label — said nothing about textual matching. The split plus the['name']-narrowed probe is exactly the "single lowercase-name assertion" the run identified as the missing one.Out of scope — reported, not edited
Two further copies of the case declaration are cross-lane and left untouched:
packages/objectql/src/search-filter.ts:18— "Matching: case-insensitive", whilefieldClausesForTerm(lines 89/91/93) emits$contains. Under the ruling the docblock is correct as a declaration; the executor is what must move →$searchis case-sensitive on textual fields, contrary to three declarations that say case-insensitive #7641 (engine-core lane).packages/qa/dogfood/test/search-conformance.ledger.ts:23— rowsearch-executorsummary reads "case-insensitive$contains", which is self-contradictory under$regexon driver-sql is not a regex — it compiles to a substring LIKE, so it both over-matches and silently matches nothing #4706 Q2 = A. Wants the operator name corrected to$icontains(or dropped) → spec seat.packages/metadata-protocol/src/protocol.ts:7293("case-insensitive LIKE") and:7411("case-insensitive substring matching via$contains") make the same claim for thesearchAllpath.Verification
node scripts/checklist-select.mjs --self-test→ 17/17 pass;area:searchstill resolves all 6 items.node scripts/check-platform-checklist.mjs→ the single pre-existingcoverage.json · qa: UNCLASSIFIEDproblem (#7347), identical to base — no new problems.No changeset: docs-only under
docs/qa/**(skip-changesetlabel is the PM's to apply). Nocontent/docs/releases/**edits.🤖 Generated with Claude Code
https://claude.ai/code/session_01RWxvQNohCm2gnSP5ACFGBV
Generated by Claude Code