Repository navigation
docs(qa): a checklist item drives the fresh-install order (os migrate apply, then the first os serve), and validation-rule-type-matrix drops its red-until-#24782 text - #25075
Conversation
… apply, then the first os serve), and validation-rule-type-matrix drops its red-until-#24782 text - cli.fresh-install-migrate-apply-first (new, r1): on an empty database `os migrate apply --yes` writes the organization-ownership birth marker (sys_migration adr-0131-organization-ownership), and the first `os serve` reaches its serving line with no ownership refusal. Ships in 18.1.0; a run against 18.0.0 records the refusal as that release's known behaviour. Driven live at base 688052e. - records-forms.validation-rule-type-matrix (r6 -> r7): knownGaps[1] and acceptance[5]'s "Red until #24782 lands" removed after a verification re-run of acceptance[5] at base 688052e read as #25051 fixed it. The history rows carry the placeholder ref #PENDING-25054; the next commit swaps in this PR's number and changes nothing else. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
Swaps the placeholder ref #PENDING-25054 for this PR's number in cli.fresh-install-migrate-apply-first r1 and records-forms.validation-rule-type-matrix r7. Nothing else changes. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
Seat reviewACCEPT ·
This seat readies the PR and queues it with auto-merge. Generated by Claude Code |
Fixes #25054
Clause-②: no
Two items in
docs/qa/platform-checklist/areas/and nothing else: no product code, test, pin, changeset orRUNNER.md.areas/integration-system.json(open in PR #25045) is untouched.1. New item
cli.fresh-install-migrate-apply-first(areas/cli.json, revision 1)os migrate apply --yesfirst, then the firstos serve, in one environment, as a deploy script runs them.✓ Server is ready(not DEGRADED),/api/v1/healthanswers 200, and the output has no organization-ownership refusal. The marker is read at its own layer (acceptance[0]): thesys_migrationrowadr-0131-organization-ownership, read through SQLite after the apply and before any boot, then again after the boot, where it must be unchanged.since: "v18.1". The change for os migrate apply on an empty database writes no organization-ownership birth marker, so the fresh install's first os serve is refused as a 17.x / 18.0 pre-release database #24827 is.changeset/24827-migrate-apply-birth-marker.md, aminorchangeset pending onmain, so it ships in 18.1.0.fixtures.knownGaps[0]says a run against 18.0.0 records the refusal as 18.0.0's known behaviour, not as a FAIL of the item. Measured: the fix commit19484af538is not an ancestor of the@objectstack/cli@18.0.0tag commit06cab4849a(exit 1). Control leg, the commit 50 behind that tag: exit 0. The checkout is not shallow.fixtures.knownGaps[1]says why the fix's two pins score no clause (RUNNER rule 6).apply.organization-ownership-birth.integration.test.tsrunsMigrateApplyin-process, andschema-migrate.birth-after-flush.test.tsruns with no kernel. Neither spawns the CLI or bootsos serve. So the item has noautomatedref, and both clauses are driven live.platform-core.jsonandcli.jsonat688052e147:platform-core.v18-boot-refusalscli.organization-ownership-ceremonycli.migrate-plan-apply-jsonos devboot synced (itsfixtures.requires[0])platform-core.boot-health,cli.dev-boot-contractos devbootcli.scaffold-first-runos start --artifactos migrate apply2.
records-forms.validation-rule-type-matrix(areas/records-forms.json, revision 6 to 7)fixtures.knownGaps[1]is removed, and the closing "Red until objectql(validation): an unevaluable severity:'warning' rule logs "write rejected: … fails closed" twice while the write is accepted 201 and persists #24782 lands" is removed fromacceptance[5].clause.knownGaps[1]itself asked for both edits once the change for objectql(validation): an unevaluable severity:'warning' rule logs "write rejected: … fails closed" twice while the write is accepted 201 and persists #24782 merged. It merged as PR fix(objectql): an unevaluable advisory validation rule logs one line saying the write proceeded, not two saying it was rejected #25051 (72518d20f5), per thedomain:enginepointer 6308955528 on seat post [PM seat] domain:devx @ objectstack — ⏳ vacant #6023. No other field changed.Each edited item gets one
revisionbump and onehistoryrow. The new item starts at revision 1 with one row. A scripted editor made the edits: text edits inside each target item's own span, then a re-parse asserting that every other item, every top-level key, and the bytes outside the spans are unchanged, and that the target matches the intended edit exactly. The history rows carry the placeholder ref#PENDING-25054, because this PR had no number yet. The next commit on this branch replaces it with this PR's number and changes nothing else.Live readings on
main(base688052e147, CLI built from this worktree)Fresh-install order: first evidence for the new item
The showcase was run from this PR's worktree. Run directory under the session scratchpad:
fresh.dbabsent before the run (test ! -eon it and on its-waland-shm). Environment for both commands:OS_DATABASE_URL=file:RUN/fresh.db,OS_HOME=RUN/home, andOS_AUTH_SECRETandOS_SECRET_KEYset to fresh random values. The boot also hadOS_PORT=41873.os migrate apply --yes: exit 0. It printed✓ Created/extended 107 table(s): 107 table(s) to create, 0 column(s) to add.and[organization-ownership] a datastore created from empty: birth marker written (shape generation 1, platform 18.0.0).node:sqlitebefore any boot:id adr-0131-organization-ownership,verified_at 2026-10-21T06:54:23.840Z,applied_at null,blocking 0,advisory 0,details {"birth":{"shapeGeneration":1,"platformVersion":"18.0.0","createdAt":"2026-10-21T06:54:23.840Z"}}. This is the only row with that id.os serve -p 41873(started withsetsid): it printed✓ Server is readywithMode: productionandOrganizationOwnershipBootGuardamong the plugins.GET /api/v1/healthanswered 200 10 s after the start, andGET /api/v1/readyanswered 200. Refusal greps over the output:carries no organization-ownership marker0,refuses to start0,os migrate organization-ownership0.cli.fresh-install-migrate-apply-first(1)cli.fresh-install-migrate-apply-first(1)✓ Server is ready, health 200, 0/0/0 refusal grepsItem verdict: pass.
Verification re-run of
records-forms.validation-rule-type-matrixacceptance[5]The boot was the canonical checklist boot:
pnpm -C WORKTREE/examples/app-showcase exec objectstack dev --ui --seed-admin -p 41874 -d file:SCRATCH/data.dbwithOS_PORT=41874exported. The run signed in as the seeded admin and authored the two scratch objects offixtures.requires[2]withPUT /api/v1/meta/object/qa_vr_probeandPUT /api/v1/meta/object/qa_vr_probe_err, which both answered 200. Then it followed steps[6]:POST /api/v1/data/qa_vr_probe {"title":"abc"}answered 201, and the re-read found 1 row (title abc).qa_unevaluable_warn, across the whole log:Validation rule 'qa_unevaluable_warn' (warning): the rule could not be evaluated (runtime: int() type error: cannot convert to int) — write proceeded: the rule is advisory, so it was not applied to this write. Lines naming the rule that containwrite rejected: 0. Lines that containfails closed: 0.POST /api/v1/data/qa_vr_probe_err {"title":"abc"}answered 400VALIDATION_FAILED, withfields[0].constraint{rule: qa_unevaluable_err, reason: unevaluable}. The re-read found 0 rows. Its log lines say— write rejected: a rule that cannot be evaluated fails closed, it is never skipped, which is true here.records-forms.validation-rule-type-matrix(6)records-forms.validation-rule-type-matrix(6)This is a verification re-run, so it files no run record (RUNNER, Run records). Both servers were stopped by process group, and
examples/app-showcase/.objectstack, which the boots wrote into the worktree, was deleted.Gates
Local, derived by
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackfrom the merge base. All 13 ran at7b35265616, and each exit code was captured before any pipe:node scripts/check-ci-filter-parity.mjsnode scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjspnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:cross-package-test-inputspnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:gitlink-declaredpnpm check:nul-bytespnpm check:platform-checklistpnpm check:refd-timer-probepnpm check:watch-hint-literal--ranreconciliation:✓ dispatch-gates --ran: 13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED.pnpm check:platform-checklistruns in no per-PR CI.688052e147:OK — 16 areas, 328 items (323 active, 1 planned); coverage: 39 kinds mapped, 2 waived; … symbol anchors: 979/989 resolved … 18 file floors held.7b35265616:OK — 16 areas, 329 items (324 active, 1 planned); coverage: 39 kinds mapped, 2 waived; … symbol anchors: 985/995 resolved … 18 file floors held.scripts/checklist-select.mjs:since:v18.1andfile:packages/cli/src/utils/schema-migrate.tseach resolve the new item.git merge-tree --write-treeagainstorigin/main(2b1382a5b3) and against PR fix(spec,driver-turso)!: refuse encryptionKey on a local or replica turso datasource instead of writing the file in plaintext #25045's head (4a595ed439): both exit 0 with a tree id and no conflicts. The one commit that landed onmainsince BASE touches nothing underdocs/qa/platform-checklist/.skip-changesetwas re-measured: the changed paths sit in the private repo root, outside every package directory. No public package'sfiles[]namesdocs,qaor a parent path. Positive control: 73 public packages namedist.os migrate applyfirst on an empty database writes the organization-ownership birth marker, so the firstos serveboots instead of refusing #25054.Acceptance notes
os migrate applyprints an ERROR-level line,2 federated (external) object(s) are NOT bound to their remote table, yet stay registered and served: …(frompackages/objectql/src/plugin.ts). It comes right after the same boot'sdatasource 'showcase_external': connect denied by policy (schemaMode 'external': …). A migrate run serves nothing, so the line's consequence does not describe this run. This is passed to the seat through the report on qa(checklist): no clause drives the fresh-install order #24827 fixed —os migrate applyfirst on an empty database writes the organization-ownership birth marker, so the firstos serveboots instead of refusing #25054.Generated by Claude Code