Repository navigation
Commit 5ce3404
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
- docs/qa/platform-checklist/areas
- packages/qa/dogfood/test
0 commit comments