Repository navigation
test(dogfood): pin five records-forms checklist items at the REST door (slice 2) - #26813
Merged
Merged
Conversation
…r (slice 2) Items action-param-widgets, cascading-multilevel-and-clear, cascading-options, conditional-rules-header and field-history-tracking. Five new dogfood pins on the showcase as shipped score the api clauses the 18.2.0 sweep left PARTIAL: the action param gate's body-never-ran echo, the two recorded cascade gaps pinned as they stand, both sides of the org_admin option gate, the invoice requiredWhen/readonlyWhen server half, and the trackHistory activity summary plus the derived history operation. Each item's automated.ref names its pin, revision +1, one history row. Claude-Session: https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing 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): |
Contributor
Author
维护者速读
席位核对ACCEPT ·
Generated by Claude Code |
8 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Warren · project thread
Refs #26573 (items
action-param-widgets,cascading-multilevel-and-clear,cascading-options,conditional-rules-header,field-history-tracking; slice 2)Clause-②: no
Metadata-protocol: none
维护者速读
automated.ref指向新钉测(revision 各加 1,history 引本卡)。cascade-server-boundary.dogfood.test.ts(两个 KNOWN GAP 按现状钉住:服务端哪天开始拦截就会变红,按条目自己的话应另开卡,而不是算通过);field-history-tracking-activity.dogfood.test.ts(未追踪字段的实测摘要是 record discussion feed: thirteen consecutive system entries "Updated Campaign \"CPG-0001 - …\"" with no field diff — an update event should carry what changed and consecutive same-actor updates should fold #25787 通用框架,会写出字段标签 Website 但不写值)。pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/action-param-gallery-dispatch.dogfood.test.ts test/cascade-server-boundary.dogfood.test.ts test/cascade-role-gated-option.dogfood.test.ts test/invoice-conditional-rules-server.dogfood.test.ts test/field-history-tracking-activity.dogfood.test.ts,预期 5 个文件 14 个用例全绿;node scripts/check-platform-checklist.mjs预期 OK。What changes
Five new dogfood files, each booting the showcase as shipped through
@objectstack/verifyand driving its REST doors:action-param-widgets(4 → 5)action-param-gallery-dispatch.dogfood.test.ts: the gallery action's body has no side effect and echoesreceived, so every refusal asserts the echo is absent (the body never ran); a bag missing onlyp_textis its own casecascading-multilevel-and-clear(8 → 9)cascade-server-boundary.dogfood.test.ts: the two recorded gaps pinned as they stand todaycascading-options(6 → 7)cascade-role-gated-option.dogfood.test.ts: a member gradedadmin(positions read back withorg_admin) vs a plain memberconditional-rules-header(5 → 6)invoice-conditional-rules-server.dogfood.test.ts: requiredWhen refusal and readonlyWhen strip on seededINV-1003field-history-tracking(7 → 8)field-history-tracking-activity.dogfood.test.ts: the sys_activity summary rows andGET /auth/me/permissionsEach item's
automated.refkeeps the pins it already named and adds the new one with what it scores. One history row per item, citing #26573. No clause text, fixture, step orknownGapsline was edited (the claim's file surface).Skipped, by the slice-2 order:
record-discussion-mentions: 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).adhoc-filter-sort-builder: next in card order, but every clause is a network/dom oracle; it needs Playwright, and the ruling adds no lane.action-param-widgetsacceptance[0], [1], acceptance[3] dialog half, negative[0];cascading-multilevel-and-clearacceptance[0], [3];cascading-optionsacceptance[0], [3] and acceptance[2]'s "sees" half;conditional-rules-headeracceptance[0], [2] client lock, [3], [4], negative[2];field-history-trackingacceptance[2], negative[1].cascading-*acceptance[1] stays on the objectui live spec andfield-history-trackingacceptance[4] on its unit pin.Why
The 18.2.0 release-candidate Tier 1 run scored these api clauses PARTIAL: no pin asserted them at the oracle's layer, so each sweep drove them by hand. The triage ruling allows ~5-item slices and no new CI lane; the new files fall under the dogfood package's existing
isolatedvitest project and run where the dogfood legs run today.Tests
Measured answers the pins now hold (all first read live, then pinned exactly):
200with the body'sreceivedecho; out-of-setp_priority+ undeclaredbogus→400naming both, no echo; onlyp_textmissing →400namingp_text, no echo.{cn, zj}then PATCH{country:'us'}→200, re-read holdsprovince: 'zj'; the same pair in the payload →400province/invalid_option. Invoice on Contoso with an existing Northwind contact →201, stored as sent; a fabricated contact →400contact/reference_not_found, nothing stored.tier: 'restricted'→201, re-reads; the plain member's →400 VALIDATION_FAILEDtier/invalid_option, nothing stored;tier: 'standard'→201.status: 'sent'withoutissued_on→400with exactly[issued_on, required], nothing stored; draft and dated-sent →201. PATCHtax_rate: 99on paidINV-1003→200, re-read unchanged; the same PATCH on a draft persists.summary: 'Industry: Retail → Finance'(message keyfieldChanges); a website-only PATCH landsUpdated Account (Success Overlay) "<name>": Website(keyactivityUpdatedFields, no arrow, neither URL)./auth/me/permissions→objects.showcase_account.apiOperationscontainshistory;showcase_task's containsget, nothistory.Runs
8b276385(the restarted branch):pnpm exec turbo run build --filter='@objectstack/dogfood^...' --concurrency=2underos-verify-lock.sh, held 8m34s.Tests 11 passed | 3 failed (14), all three in the history file:Object 'sys_activity' not found(the showcase boot composes no audit plugin) andapiOperationsread from the wrong key. Fixed by addingAuditPluginand readingobjects.<name>.apiOperations; the untracked-edit case was then re-pinned to the measured record discussion feed: thirteen consecutive system entries "Updated Campaign \"CPG-0001 - …\"" with no field diff — an update event should carry what changed and consecutive same-actor updates should fold #25787 generic frame.Test Files 5 passed (5),Tests 14 passed (14);pnpm typecheckinpackages/qa/dogfood(tsc --noEmit) → exit 0.efe6101e(after mergingorigin/mainc8583f80, which brought test(dogfood): pin access-security checklist clauses at the api oracle's layer, slice 1 #26797 and fix(create-objectstack): refuse a project name npm would refuse, before writing anything #26796: dogfood tests, the access-security area file and create-objectstack, none in this diff's pins' closure): the five files →Test Files 5 passed (5),Tests 14 passed (14), then the dogfood typecheck, one locked command, VERDICT command-exit 0.No ablation was run: this diff adds tests and changes no behaviour they pin. Each refusal assertion has a same-door admitted control beside it, so none passes on a door that refuses everything.
Acceptance notes
field-history-tracking: the showcase boot composes no audit plugin, so this file addsAuditPluginthe wayobjectstack servecomposes it (asactivity-withheld-update.dogfood.test.tsdoes). acceptance[1] says "no field-diff summary naming website"; the measured row is the record discussion feed: thirteen consecutive system entries "Updated Campaign \"CPG-0001 - …\"" with no field diff — an update event should carry what changed and consecutive same-actor updates should fold #25787 generic frame, which names the changed field's label and never its values, so the pin asserts no old → new for website. The clause text was not reworded (outside the claim's surface).cascading-multilevel-and-clearacceptance[2] and [4] are KNOWN GAP clauses: the pins assert today's 200/201, so new server enforcement turns them red, which by the item's own text is new enforcement to file, not a pass.cascading-optionsacceptance[2]: the seeded admin isorg_owner, which does not implyorg_admin, so the admin persona is a signed-up member whosesys_memberrow is gradedadmin, read back from the resolved positions before any write.Verification
node scripts/check-platform-checklist.mjs→ exit 0,OK — 16 areas, 329 items (324 active, 1 planned), on the commit head and again on the final head.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack→ 55 commands on the tree of this PR's commit38c2de88(run before a message-only reword), each run and reconciled with--ran:55 derived famil(ies) accounted for — 55 run, 0 NOT-MEASURED, all exit 0.Dogfood Regression Gatedoes not run on pull_request, so the local runs above are this PR's evidence for the new pins.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (CI-owned run)main, one pull request.@objectstack/dogfoodis private;docs/qa/**ships in no package), soskip-changeset; both declaration lines are filled in above.packages/specnot touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code