Skip to content

Commit 5ce3404

Browse files
test(dogfood): pin the last records-forms checklist api clauses and name the live legs (slice 4) (#26908)
<!-- claude-projects-attribution: {"github_login":"os-warren"} --> _Requested by **Warren** · [project thread](https://claude.ai/code/project/chan_01U5RdnAAmkSQmZbqh6FtqZ8?thread=cmsg_01U5RdnAAmkSQmZbqh6FtqZ8EZuqRp2sWT5mEbwB3fUdmh)_ Fixes #26573 (slice 4, the last: items `related-list-server-pagination`, `view-type-gallery` pinned; live-leg text on `adhoc-filter-sort-builder`, `conditional-rules-header`, `field-history-tracking`, `form-dirty-guard`, `record-discussion-mentions`, `v18-semantic-defaults`) Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:新增 2 个 dogfood 测试,钉住 related-list-server-pagination 与 view-type-gallery 的 api 条款的服务端一半;另有 6 项只在 `automated.ref` 里补一句为什么未钉条款留作现场腿(浏览器专属,或 record-discussion-mentions 等 #26625)。8 项 revision 各加 1,history 引本卡。 - 为什么改:按卡片 Done-when,21 项里每条列出的条款要么有 oracle 层的钉测,要么条目文字说明为何留作现场腿;本片补齐后 21 项全部满足,所以写 Fixes。 - 风险与回滚:只加测试和清单文字,不动产品代码、不加 CI 车道;新文件在 dogfood 现有的 isolated 项目。回滚即 revert 本 PR。 - 先看:`related-list-server-paging-and-gate.dogfood.test.ts`(contributor 被 403、manager 200 的两端读权限);`records-forms.json` 6 处只改说明文字的 `automated.ref`。 - 两分钟验证:先建依赖闭包,再 `pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/related-list-server-paging-and-gate.dogfood.test.ts test/view-type-gallery-data-halves.dogfood.test.ts`,预期 2 个文件 5 个用例全绿;`node scripts/check-platform-checklist.mjs` 预期 OK。 - 需要你做的:无,席位落地。 ## What changes | Item (rev → new) | Change | |---|---| | `related-list-server-pagination` (8 → 9) | New `related-list-server-paging-and-gate.dogfood.test.ts`: the parent-scoped `GET /data/showcase_contact` holds Northwind's 26 contacts; `$top=10` pages at `$skip` 0/10/20 answer `total: 26` and 10/10/6 rows that partition the set (acceptance[1], negative[1] server half); each served child re-reads by id (acceptance[4]); a member staffed `contributor` is refused 403, one staffed `manager` reads 200 (acceptance[5], negative[2] server half). The console's request shape, pager text, relatedList config and tab absence are named as live browser legs. | | `view-type-gallery` (2 → 3) | New `view-type-gallery-data-halves.dogfood.test.ts`: `GET /meta/view` serves the kanban view (status / estimate_hours), every one of the five columns holds seeded tasks, and the `POST /data/showcase_task/query` sum per status equals the raw rows grouped client-side (acceptance[1]); the calendar, timeline and gantt views name due_date, created_at and start_date → end_date with progress, and the seeded tasks carry them (acceptance[2]). acceptance[5] is named as the smoke spec's; the screenshot/dom clauses are named as live browser legs. | | `adhoc-filter-sort-builder` (7 → 8) | `automated.ref` text only: acceptance[0]–[3], acceptance[4]'s same-request half and negative[0]–[3] stay live browser legs, and why. | | `conditional-rules-header` (6 → 7) | `automated.ref` text only: acceptance[2]'s client lock, acceptance[4] and negative[2] are named as live browser legs. | | `field-history-tracking` (8 → 9) | `automated.ref` text only: negative[1] and acceptance[2]'s absence half are named as live browser legs. | | `form-dirty-guard` (4 → 5) | `automated.ref` text only: what the unit suite holds, and why acceptance[0]/negative[0]'s Escape and backdrop legs and acceptance[1] stay live browser legs (the re-read needs a browser to drive the guard's exit). | | `record-discussion-mentions` (8 → 9) | `automated.ref` text only: acceptance[9]'s REST-door pin waits on #26625; until then its cross-organization leg stays a live leg on a walled boot. | | `v18-semantic-defaults` (3 → 4) | `automated.ref` text only: the spec pins hold acceptance[0]; acceptance[1]–[3] stay live browser legs. | One history row per item, citing #26573. No clause text, fixture, step or `knownGaps` line was edited (the claim's file surface). ## Why The card's Done-when: every clause it lists either carries a pin at its oracle's layer, or the item text says why it stays a live leg; each touched item's `automated.ref` names the new pin with `revision` bumped and a `history` row citing the card; procedural clauses are left alone. Slices 1–3 (#26788, #26813, #26865) pinned fifteen items. This slice pins the last two that carry api clauses and writes the live-leg reason into the six items whose remaining clauses are browser-only or wait on #26625. A check of all 21 items against the card's clause lists finds every listed clause named in its item's `automated.ref`, as a pin or as a live leg with its reason. The triage ruling adds no CI lane, so the browser legs stay live legs rather than new Playwright specs. ## Tests <details><summary>Runs</summary> - Dependency closure on `e78d7057` (the restarted branch) under `os-verify-lock.sh` (`Tasks: 67 successful, 67 total`), then the two files: the view file failed twice on its first run, because `GET /meta/view` wraps each view under `items[].config`; after that fix, and with the measured paging answer (`total: 26`, `hasMore`) pinned, `Test Files 2 passed (2)`, `Tests 5 passed (5)`. Then the dogfood typecheck: exit 0. - Final head `8e3668c0` (after merging `origin/main` `c4a4aefc`, which brought a `packages/spec` change): the closure rebuilt (`Tasks: 67 successful, 67 total`), then the two files → `Test Files 2 passed (2)`, `Tests 5 passed (5)`, then `pnpm typecheck` in `packages/qa/dogfood`, one locked command, VERDICT command-exit 0. </details> No ablation was run: this diff adds tests and item text and changes no behaviour they pin. Each refusal assertion has a same-door admitted control beside it (the contributor's 403 against the manager's 200). ## Acceptance notes - `view-type-gallery` acceptance[1] and [2] are pinned on their API half only: what the views declare and what the data door answers for the fields they name. Where a record lands on the canvas stays the browser leg the item's verify text describes. - `related-list-server-pagination` acceptance[1] / negative[1]: the pin reads the server's paging (`total`, `hasMore`, disjoint pages); the console's pager text and its request's `top`/`skip` spelling stay browser legs. ## Verification - `node scripts/check-platform-checklist.mjs` → exit 0, `OK — 16 areas, 329 items (324 active, 1 planned)`, on the commit `f09120b3` and on the final head. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` → 55 commands on `f09120b3`, each run and reconciled with `--ran`: `55 derived famil(ies) accounted for — 55 run, 0 NOT-MEASURED`, all exit 0. - Done-when check: for each of the card's 21 `Parked-on` lines, every listed clause is named in the item's `automated.ref`, either with its pin or as a live leg with its reason (a scripted cross-read of the card body against `records-forms.json`, then read by hand for the reasons). - CI families are read from this PR's check-runs, not re-run locally. `Dogfood Regression Gate` does not run on pull_request, so the local runs above are this PR's evidence for the new pins. ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (not touched) - [x] 2. Every name I added uses the casing for its kind. - [x] 3. No formatter ran; `pnpm lint` passes. (CI-owned run) - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset — nothing publishes here (`@objectstack/dogfood` is private; `docs/qa/**` ships in no package), so `skip-changeset`; both declaration lines are filled in above. - [x] 6. `packages/spec` not touched. - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English (the maintainer brief above is Chinese by the repo's communication rule). --- _Generated by [Claude Code](https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 9f40488 commit 5ce3404

3 files changed

Lines changed: 284 additions & 16 deletions

File tree

0 commit comments

Comments
 (0)