Repository navigation
test(dogfood): pin five records-forms checklist items at the REST door (slice 1) - #26788
Merged
Merged
Conversation
Claude-Session: https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU Co-authored-by: Claude <noreply@anthropic.com>
…ice 1 files (#26573) Claude-Session: https://claude.ai/code/session_01JQwxbZ3oTCkvGGTMNd5XYU Co-authored-by: Claude <noreply@anthropic.com>
…food pins (#26573) 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 |
This was referenced Oct 27, 2026
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 (slice 1 of about 5 items:
predicate-relationship-traversal,write-answer-advisories-rollback-and-tree-delete,comment-reactions-and-edit-stamps,encrypted-field-behavior,write-time-option-and-element-shape-judgement)Clause-②: no
Metadata-protocol: none
维护者速读
automated.ref改为指向新钉测(revision 各加 1,history 引本卡)。packages/qa/dogfood/test/encrypted-field-behavior.dogfood.test.ts(无加密提供者的 fail-closed 腿是启动后把引擎的 provider 置空,看这个建模是否可接受);packages/qa/dogfood/test/comment-reactions-and-edit-stamps.dogfood.test.ts(实测码 405 / 403);docs/qa/platform-checklist/areas/records-forms.json的 5 处automated与 history。pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/predicate-relationship-traversal.dogfood.test.ts test/write-answer-warnings-rest.dogfood.test.ts test/comment-reactions-and-edit-stamps.dogfood.test.ts test/encrypted-field-behavior.dogfood.test.ts test/write-time-option-and-element-shape.dogfood.test.ts(先建依赖闭包),预期 5 个文件 22 个用例全绿;node scripts/check-platform-checklist.mjs预期 OK。What changes
Five new dogfood files, each booting a real stack through
@objectstack/verifyand driving the REST doors (/data/:object,/data/:object/query,/data/:object/import), so these api clauses are pinned at the layer their oracle names:predicate-relationship-traversal(4 → 5)predicate-relationship-traversal.dogfood.test.ts— the showcase invoice rule as shipped, plus the scratch pairfixtures.knownGapsdescribes for a member with no parent grantwrite-answer-advisories-rollback-and-tree-delete(2 → 3)write-answer-warnings-rest.dogfood.test.ts(new) reads the PATCH body'swarnings[]; the existinghook-after-abort-rollback.dogfood.test.tsalready refused the aborting create over REST and read the store back, and is now namedcomment-reactions-and-edit-stamps(3 → 4)comment-reactions-and-edit-stamps.dogfood.test.ts— org-bound comments fixture + plugin-audit, the member armed (assertArmed) asorg_memberencrypted-field-behavior(5 → 6)encrypted-field-behavior.dogfood.test.ts— showcase field zoo for the echoed mask and the aggregate refusal; a scratch object on an engine left with no crypto provider for fail-closedwrite-time-option-and-element-shape-judgement(1 → 2)write-time-option-and-element-shape.dogfood.test.ts— scratch app: faulting option gate, kept-option import, matched-row dry run, multi-lookup element shapeEach item's
automated.refnames the new pin and what it scores; the existing engine/unit pins stay named as acceptance[0]'s pins and as evidence of their own layer (RUNNER rule 6). One history row per item, citing #26573. No clause text, fixture, step orknownGapsline was edited (the claim's file surface).Left out of this slice:
record-discussion-mentionsa9 (needs the #26625 walled two-organization recipe) and the browser/dom-oracle items, which need Playwright or live-boot specs.Why
The 18.2.0 release-candidate Tier 1 run scored these clauses PARTIAL: every pin was green, but each asserted the clause below its oracle's layer (in-process protocol calls, ObjectQL directly, or an ObjectKernel with no HTTP adapter). A pin at the oracle's layer turns a release-sweep live leg into a standing, re-runnable proof. 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):
405 OBJECT_API_METHOD_NOT_ALLOWED(the object'sapiMethodsoffers no update); foreign reaction DELETE →403 PERMISSION_DENIEDwith the member holding the object delete bit, so the refusal is the own-record floor; own DELETE is the 2xx control.200withwarnings: [{ rule: project_health_progression, severity: warning, field: health, code: invalid_transition, message }]; one-step change and the create answer carry nowarningskey.400 VALIDATION_FAILED,tier/rule_violation,constraint.rule: visibleWhen,constraint.reason: unevaluable.{id},false,42→400refs/invalid_type,constraint.detailstartingat index 1:.POST /data/showcase_field_zoo/query→400 INVALID_FIELD; a group-by onnameis the200control.500 INTERNAL_ERRORand no row stored; a password write on the same engine →201, masked on read.Runs
pnpm exec turbo run build --filter='@objectstack/dogfood^...' --concurrency=2underos-verify-lock.sh→Tasks: 67 successful, 67 total, VERDICT command-exit 0.pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2over the five files →Test Files 5 passed (5),Tests 22 passed (22).origin/main(head8919aecc, which brought a driver-sql refactor):pnpm --filter @objectstack/driver-sql build, then the five files plushook-after-abort-rollback.dogfood.test.ts→Test Files 6 passed (6),Tests 28 passed (28), VERDICT command-exit 0.pnpm --filter @objectstack/dogfood typecheck(tsc --noEmit) → VERDICT command-exit 0.5db5a474(after mergingorigin/mainwith feat!: ownership queues and assignment rules (ADR-0142 phase 2) #26337): the dependency closure rebuilt (Tasks: 67 successful, 67 total), then the five files plushook-after-abort-rollback.dogfood.test.ts→Test Files 6 passed (6),Tests 28 passed (28), thenpnpm --filter @objectstack/dogfood typecheck, one locked command, VERDICT command-exit 0.No ablation was run: this diff adds tests and changes no behaviour they pin (os-dev: ablation only where the diff changes a pinned behaviour). Each refusal assertion has a same-door admitted control beside it, so none passes on a door that refuses everything.
Acceptance notes
encrypted-field-behavioracceptance[3]:bootStackalways wires a crypto provider, so the fail-closed leg unsets it once after bootstrap (engine.setCryptoProvider(undefined)), before any request. That is the engine state of a boot that never wired one; no stock composition boots that way, so on a live stock boot the clause stays blocked(fixture).fixtures.knownGaps[1]still says the path has "NO live leg"; it is still true of a live boot, and its rewording is left to an item-text pass since this slice's surface isautomated.ref/revision/historyonly. The refusal arrives as the sanitised500 INTERNAL_ERROR, because the engine throws a plainError: noted, not filed, since an unwired provider is a host composition fault, not an author error.predicate-relationship-traversalacceptance[3]: now scored live on the scratch substitute the item'sfixtures.knownGapsalready prescribes, rather than only from the engine pin.write-answer-advisories…acceptance[2] / negative[0] were already pinned over REST byhook-after-abort-rollback.dogfood.test.ts(it reads the store back through the engine rather than a list count); revision 2 did not name it.Verification
node scripts/check-platform-checklist.mjs→ exit 0,OK — 16 areas, 329 items (324 active, 1 planned).node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack→ 55 commands on head8919aecc, each run and reconciled with--ran:55 derived famil(ies) accounted for — 54 run, 1 NOT-MEASURED. The NOT-MEASURED one ispnpm check:dual-build-cjs-loads(exit 3, PREREQUISITE NOT MET: it reads every package'sdist/and this worktree built only the dogfood closure); CI runs it.check-plugin-teardown-shape --self-testfirst exited 3 on the shallow clone and is exit 0 aftergit fetch --unshallow.origin/mainagain (it brought feat!: ownership queues and assignment rules (ADR-0142 phase 2) #26337, which touchescoverage.jsonandpackages/qa/dogfood/test):check-platform-checklistexit 0 on the new head; the five files are re-run there (see Runs).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