Skip to content

test(dogfood): pin the last records-forms checklist api clauses and name the live legs (slice 4) - #26908

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-jcuzjj
Oct 27, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-jcuzjj

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Warren · project thread

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 等 qa(checklist): records-forms — provisioning recipes for a walled two-organization mention leg, a packaged action specimen, and the app-crm import specs #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

Runs
  • 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.

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

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind.
  • 3. No formatter ran; pnpm lint passes. (CI-owned run)
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 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.
  • 6. packages/spec not touched.
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English (the maintainer brief above is Chinese by the repo's communication rule).

Generated by Claude Code

…ame the live legs (slice 4)

Two new dogfood pins score the server halves of
related-list-server-pagination (parent-scoped paging, re-read by id, the
contributor/manager read gate) and view-type-gallery (the kanban aggregate
per column and the temporal views' date fields). Six more items'
automated.ref now say why their unpinned clauses stay live browser legs,
or that the remaining one waits on the walled two-organization recipe.
Revision +1 and one history row on each of the eight items.

Claude-Session: https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 6090bb73a99883030a820343e7a44659b306b304 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读

席位核对

ACCEPT · domain:devx#1 · session_01JQwxbaFpnMwgpCgneKe2qS · head 8e3668c049 · 2026-10-27T20:51Z

  1. Shape: 3 files, +284/−16: docs/qa/platform-checklist/areas/records-forms.json, and the new isolated files related-list-server-paging-and-gate.dogfood.test.ts and view-type-gallery-data-halves.dogfood.test.ts. Not governed (check-governed-merges --pr 26908, 300 lines ≤ 3000). File surface as in claim 6445199361; Fixes #26573 (slice 4, the last).
  2. Read by the seat: the whole diff. The paging case reads the Northwind-scoped showcase_contact list at $top=10 over $skip 0/10/20 and asserts total 26 on each page, 10/10/6 rows, and no id repeated or skipped against the unpaged set. Each served child re-reads by id. The gate pair stages a contributor and a manager on their own memberships and asserts 403 with no rows against 200 with rows. The gallery file reads the kanban declaration, its five populated columns and the per-status sum against raw rows, and the temporal views' date fields against seeded values. Six items gain live-leg text in automated.ref only, each naming the browser-only clause and why: adhoc-filter-sort-builder, conditional-rules-header, field-history-tracking, form-dirty-guard, v18-semantic-defaults, and record-discussion-mentions (acceptance[9] waits on qa(checklist): records-forms — provisioning recipes for a walled two-organization mention leg, a packaged action specimen, and the app-crm import specs #26625). Both new files sit in isolated; no SHARED_SHOWCASE file is touched.
  3. Gates: head check-runs on 8e3668c049: 35 success, 16 skipped, 0 failing; check-expected-skips --pr 26908: OK, all 16 in main's roster; mergeable clean. Thread's local run: 5/5 on the final head after merging main c4a4aefc and rebuilding the closure; dispatch-gates 55/55 exit 0, --ran 55 run / 0 NOT-MEASURED; check-platform-checklist OK. Done-when cross-read: all 21 Parked-on: lines against records-forms.json, each clause named with its pin or as a live leg with a reason. Report 6452868896.
  4. Accepted deviations: the six browser-only items close on a stated live leg rather than a pin, as the card's Done-when allows: the ruling adds no Playwright lane. The dogfood battery does not run on pull_request or merge_group, so these pins first run on main's next full battery; a red there is main-red and this seat stanches it.
  5. Out of scope: record-discussion-mentions acceptance[9]'s REST-door pin waits on qa(checklist): records-forms — provisioning recipes for a walled two-organization mention leg, a packaged action specimen, and the app-crm import specs #26625 (the walled two-organization recipe), which this seat dispatches next. The revision collision with PR docs(qa): qa-media-constraints and qa-feeds-disabled declare namespaces their object names carry #26907 on that item is the second lander's to renumber. Skills-docs: not owed.
  6. Landing: not governed, CI green on this head, mergeable clean ⇒ the seat readies it and arms auto-merge through the relay. At merge qa(checklist): records-forms — pin the Tier 1 clauses the 18.2.0 sweep scored partial at the layer their oracle names (21 items) #26573 closes and leaves pm:dispatched.

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

qa(checklist): records-forms — pin the Tier 1 clauses the 18.2.0 sweep scored partial at the layer their oracle names (21 items)

2 participants