Uh oh!
There was an error while loading. Please reload this page.
test(lint): pin the four unprovisionedAnchors threading sites that the lint suite could not see - #8989
Conversation
…date-react-page-props `checkFieldRefs` takes the anchor index as an optional trailing parameter, so a call site that stops passing it keeps compiling and silently downgrades to the pre-#8340 behaviour. Four of the six in-repo threading sites were threaded by convention only: dropping the index at any of them left the whole lint suite green. One behaviour test per uncovered site, each written ablation-first. Refs #8943 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobm
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31927041196 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
os-project-manager
commented
Aug 16, 2026
分诊:同批次连带,与本 PR 无关 —— ⛔ 不重排,⛔ 不是 flaky队列构建 实测
⇒ main 绿、本 PR 不碰那个文件 ⇒ 红只可能来自同批次里改了 来源已修复,时间线对得上
现在 #8983 的 head 实测为 处置:等,不动手⛔ 不重排 —— 盲排会让排在后面的每个 PR 再重建一轮,而污染源已经不在了,重排除了烧一轮什么都不改变。 根因(CLI 测试读 docs 却对门禁与 turbo affected 集双双隐形)已单独立卡:#8995。 Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8943
checkFieldRefstakes the anchor index as an optional trailing parameter, so a call site that stops passing it keeps compiling and silently downgrades to the pre-#8340 behaviour: existence still answered, provenance never asked. #8943 measured all six in-repo threading sites — the two module seams are pinned, and four calls insidecheckBlockFieldPropswere threaded by convention only.This adds one behaviour test per uncovered site, through
validateReactPageProps, assertingpage-field-unprovisionedon an ADR-0015externalobject — mirroring the existing FILTER-position test, with the #8404 pin's comment style so the next reader knows what each test is for.Test-only. No production file is touched —
validate-react-page-props.tsis byte-identical toorigin/main(bloba560d360bon both, verified after the last ablation).Ablation evidence — each test observed RED at its own site
Every test was written ablation-first: drop the
unprovisionedAnchorsargument at that site, run, restore. Each leg was then re-run against the full 2051-test suite — not a filtered subset — because the claim being pinned is that nothing else catches the drop.ownrefs, theskippedbucket ofREACT_FIELD_SPECSchildObject)totalFieldrollup (resolved against the FORM object)COMPONENT_FIELD_SPECSpath reached by BlocktypeExactly one red per leg carries both halves of the claim: no pre-existing test covers any of the four sites (a second failure would have shown one), and each new test pins exactly one call site rather than the group. Restored between every leg, with the blob hash checked back against
origin/mainat the end.The branches are disjoint by tag and prop, which is what makes that attribution possible:
ownrefs reach ListViewcolumns; the subform pair needs ObjectFormsubforms; andCOMPONENT_FIELD_SPECSis reachable only through Blocktype, since no react tag's ownschemaType(list-view,object-form,object-chart) is a key in that table.Why no other instrument sees this: measured under the R5 ablation,
pnpm --filter @objectstack/lint typecheckexits 0. The parameter is optional, so there is no type error, and the localunprovisionedAnchorsbinding stays read by the sibling calls, so there is no TS6133 either. Only a behaviour test can see it.Verification
Gate union run after the final commit, at
dcecc68ec:pnpm --filter @objectstack/lint test— 73 files, 2051 passed (2047 onmain+ the 4 new)pnpm --filter @objectstack/lint typecheck— cleanpnpm check:cross-package-test-inputsandnode scripts/check-cross-package-test-inputs.mjs— OK, 12 packages read outside themselves, all declaredpnpm check:nul-bytes— OK, 5938 files scannedscripts/pm/dispatch-gates.mjs, which added three convention-triggered gates the dispatch list did not name; all run and green:pnpm check:query-options-erasure— ratchet holds, test surface unchanged at the ceilingpnpm check:type-check-coverage— OKpnpm check:type-check-debt— OK, 33 ledger entries re-measured, none above its recorded number. Run with the full workspace closure built, as the gate requires.@objectstack/lintmeasures 19 against its recorded 20, so the new test file adds zero type errors. (Itstsconfig.jsonexcludes*.test.ts, so this ratchet — not the packagetypecheck— is what actually reads the new file.)skip-changeset: test-only, nothing user-visible to release.Generated by Claude Code