You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
qa(checklist): no clause drives the fresh-install order #24827 fixed — os migrate apply first on an empty database writes the organization-ownership birth marker, so the first os serve boots instead of refusing #25054
Filing gate ②: a coverage gap in the platform checklist, measured.Reader who acts: the domain:devx seat (docs/qa/**), in one checklist PR. Filed by domain:devx seat 1 (os-warren, session_01FM29ZqLTrnPNXxijioZwMp, seat post #6023) at the close of the 18.0 sweep anchor #24579, with the maintainer's agreement in this session's chat (「同意立卡」). ⛔ Not a claim. Grade and area:* are triage's.
Already covered elsewhere: the shape-generation-0 refusal is a clause of cli.organization-ownership-ceremony acceptance[5] since round 16.
Wanted
Find the item whose scope covers a fresh install's first boot, or author one with the checklist-author skill if none does.
The clause drives the order on an empty database: os migrate apply first, then os serve. Its oracle is the boot: the server reaches its serving line, with no ownership refusal.
Read the marker the apply wrote at its own layer (the sys_migration row adr-0131-organization-ownership).
The clause names the release that carries the fix (18.1.0). Until a published release carries it, a run against 18.0.0 records the refusal as the known 18.0.0 behaviour, not as a FAIL of the item.
⛔ No new gate.
Dedupe
MCP search_issues, objectstack, for "checklist item fresh install os migrate apply first birth marker then os serve boots 24827". The only hit is #24827 itself.
Dedupe words: fresh install birth marker; migrate apply first then serve; organization-ownership marker empty database.
Claim: PM loop round 37 · a p2 domain:devx checklist card this seat filed at #24579's close; serial dispatch under the maintainer's 「串行派发」, p1/p2 only
Session: session_01FM29ZqLTrnPNXxijioZwMp
Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-25054-fresh-install-order
Worktree: objectstack-issue-25054
Domain: domain:devx
Seat: domain:devx#1
File surface, in docs/qa/platform-checklist/areas/*.json:
Every edited item takes one revision bump and one history entry. ⛔ No product code, test, pin or changeset text. ⛔ Not areas/integration-system.json (open PR #25045). Stop on breach and explain.
Container & model: M (one clause or item, driven live once on main, and one re-run clause), mode:subagent, model: TIER_DEFAULT
Clause-②: no
Responsibility: no checklist clause drives the fresh-install order #24827 fixed, and validation-rule-type-matrix still says acceptance[5] is red after #24782 landed (#25054; pointer 6308955528) | none | every checklist runner, and the 18.1.0 release sweep
Thread-read: none
Serial constraints cleared: the one open PR under docs/qa/platform-checklist/ is PR #25045, which touches only areas/integration-system.json. No live Claim: names these files (read at 2026-10-21T06:38Z). No dev of this session is in flight.
{
"issue": 25054,
"status": "done",
"branch": "claude/issue-25054-fresh-install-order",
"pr": "https://github.com/objectstack-ai/objectstack/pull/25075",
"session": "session_01FM29ZqLTrnPNXxijioZwMp — the parent's id (mode:subagent), the Claude-Session line on both commits",
"premise_still_valid": true,
"summary": "Ruling 1: no item in platform-core.json or cli.json covers a fresh install's first `os serve` after `os migrate apply` (v18-boot-refusals: a 17.x-shaped DB, its r6 excludes the order; organization-ownership-ceremony: upgrades; migrate-plan-apply-json: a DB an `os dev` boot already synced, no boot after; boot-health / dev-boot-contract: the `os dev` boot writes the marker itself; scaffold-first-run: `os start --artifact`, no apply), so I added a new item, cli.fresh-install-migrate-apply-first (r1, since v18.1, P1). acceptance[0] reads the sys_migration row adr-0131-organization-ownership the apply wrote, before any boot and again after the boot. acceptance[1] is the boot oracle: the serving line and no ownership refusal. knownGaps[0] records 18.0.0's refusal as that release's known behaviour, with the ancestry measured: 19484af538 is not an ancestor of the cli@18.0.0 tag commit 06cab4849a. I drove it live once at base 688052e147: `os migrate apply --yes` exited 0 and wrote the birth marker; the first `os serve` printed `✓ Server is ready` (production) with health 200, 0 refusal hits, and the row unchanged after the boot. Ruling 2: the re-run of acceptance[5] read exactly as the engine pointer predicted, so I made the two edits: knownGaps[1] dropped, and 'Red until #24782 lands' cut from acceptance[5].clause (r6 to r7). A scripted editor made all the edits, re-parsed both files, and asserted that only the target items and fields changed. Each history row has ref #25075: the first commit used the placeholder #PENDING-25054, and a ref-only follow-up commit 855415f993 swapped in the number. The card's assignee was not written. The PR's assignee is os-warren, and its label is skip-changeset.",
"tests": "No package is touched, so no build closure, package test or typecheck is owed. Live drive 1 (new item, first evidence), with the full `pnpm build --concurrency=2` under os-verify-lock (VERDICT command-exit 0, 76/76 tasks) at 688052e147. Showcase in this worktree; DB file:SCRATCH/fresh-install/fresh.db, absent before the run (test ! -e on the db, -wal and -shm); OS_HOME scratch; fresh random OS_AUTH_SECRET and OS_SECRET_KEY. `os migrate apply --yes`: exit 0, '✓ Created/extended 107 table(s): 107 table(s) to create, 0 column(s) to add.', '[organization-ownership] a datastore created from empty: birth marker written (shape generation 1, platform 18.0.0).' The node:sqlite read before any boot: one row, 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}}. `OS_PORT=41873 os serve -p 41873` (setsid): '✓ Server is ready', 'Mode: production', OrganizationOwnershipBootGuard loaded; /api/v1/health 200 at 10 s; /api/v1/ready 200. Greps for 'carries no organization-ownership marker', 'refuses to start' and 'os migrate organization-ownership': 0 / 0 / 0. The row read after the boot was identical. The process group was stopped and the port is free. Live drive 2 (verification re-run, records-forms acceptance[5]) used the canonical boot `objectstack dev --ui --seed-admin -p 41874 -d file:SCRATCH/vr-rerun/data.db` with OS_PORT exported; admin sign-in 200; PUT meta/object qa_vr_probe and qa_vr_probe_err 200/200. POST data/qa_vr_probe {title abc}: 201, re-read 1 row. Whole log: exactly 1 line naming qa_unevaluable_warn, \"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\"; with 'write rejected' 0, with 'fails closed' 0. Control POST data/qa_vr_probe_err: 400 VALIDATION_FAILED, fields[0].constraint {rule qa_unevaluable_err, reason unevaluable}, re-read 0 rows, and its log says '— write rejected: a rule that cannot be evaluated fails closed'. The group was stopped (6 processes, 0 left). Verdicts: new item acceptance[0] pass, [1] pass, item pass; records-forms acceptance[5] pass, [0]-[4] skipped. No ablation: there is no tested behaviour change. Selector: since:v18.1 and file:packages/cli/src/utils/schema-migrate.ts each resolve the new item.",
"gates": "Local, derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; merge base 688052e14; 2 paths, +79/-4). All 13 were run at the final head 855415f993 (and earlier at 7b35265616), each exit captured before any pipe, all exit 0: check-ci-filter-parity, check-closing-keyword-parity, the same with --self-test, check-comment-mask-corpus, lint check:doc-formula-expressions, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist, check:refd-timer-probe, check:watch-hint-literal. `--ran` at 855415f993: '✓ dispatch-gates --ran: 13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED'. check:platform-checklist is not in per-PR CI. At BASE 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'. At 855415f993: 'OK — 16 areas, 329 items (324 active, 1 planned); coverage: 39 kinds mapped, 2 waived; symbol anchors 985/995 resolved, 18 file floors held'. git merge-tree --write-tree against origin/main 2b1382a5b3 and against PR #25045's head 4a595ed439: exit 0 and a tree id, both clean; the one main commit since BASE touches nothing under docs/qa/platform-checklist. skip-changeset was re-measured: the paths are in the private root, outside every package dir; no public package's files[] names docs, qa or a parent path (positive control: 73 name dist). Local-only families check:dev-prereqs and check:skill-frame-freshness are not owed (no packages/spec build edit, no frame file); dev-prereqs was run anyway before the boots: exit 0. CI check-runs at 855415f993, one read with no waiting. success: Auto Label, Check Documentation Links, Check PR Size, Dogfood Regression Gate, Governed Surface Queue Guard, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · scoped (3 jobs), the 4 PR-claim guards, Test Core 3/6 to 6/6, Type Check · debt ledger, source gates, workspace, filter. in_progress: Lint · repo & tooling gates, Test Core 1/6 and 2/6, Type Check · consumer gates. skipped: Build Core, Check Changeset, Build Docs, Console Pin Gate, Dogfood Verify CLI, the opt-in jobs, Temporal Conformance.",
"mcp_calls": "0 — no MCP GitHub tool was called; reads went through `gh api` REST GETs (card, comments, the pointer comment, PR read-back, check-runs)",
"api_writes": "2 — (1) one fleet-write relay stroke (repository_dispatch, run 39560167278, success) carrying pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/25075/assignees [os-warren] + POST /repos/objectstack-ai/objectstack/issues/25075/labels [skip-changeset]; read-back: body 10300 bytes sent, 10300 stored, identical. (2) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/25054/comments via scripts/pm/post-stamped.mjs. Not REST: 3 git pushes of the branch (empty probe, 7b35265616, 855415f993)",
"open_questions": [],
"out_of_scope_findings": [
"class: a (misleading user-visible text) · reach: `os migrate apply --yes` on the stock showcase (examples/app-showcase) at 688052e147 prints at ERROR level '2 federated (external) object(s) are NOT bound to their remote table, yet stay registered and served: they keep their REST routes and keep rendering in the UI, while every read against them resolves to a table named after the OBJECT …', right after the same boot logged \"datasource 'showcase_external': connect denied by policy (schemaMode 'external': the remote owns this datasource's schema, so a schema migration has no table to plan on it)\". A migrate run serves no route and no UI, so the ERROR's stated consequence is false for that composition, and it reads as a failure in a successful apply (exit 0) · evidence: the two lines in the apply output of live drive 1; landing: packages/objectql/src/plugin.ts (the federated-binding report) beside the migrate boot's deliberate policy denial (packages/cli/src/utils/schema-migrate.ts); not investigated past those two lines, so the seat may judge it by design · dedupe words: federated objects NOT bound ERROR os migrate apply; connect denied by policy schemaMode external; showcase_external migrate ERROR line"
]
}
Activity
objectstack-fleet commentedon Oct 21, 2026
Claim: PM loop round 37 · a p2
domain:devxchecklist card this seat filed at #24579's close; serial dispatch under the maintainer's 「串行派发」, p1/p2 onlySession:
session_01FM29ZqLTrnPNXxijioZwMpAccount:
os-warren(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-25054-fresh-install-orderWorktree:
objectstack-issue-25054Domain:
domain:devxSeat:
domain:devx#1File surface, in
docs/qa/platform-checklist/areas/*.json:os migrate applyfirst on an empty database, then the firstos serveboots), in the item whose scope covers a fresh install's first boot. If no item covers it, one new item, authored with thechecklist-authorskill.records-forms.validation-rule-type-matrixfixtures.knownGaps[1]and acceptance[5]'s "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". objectql(validation): an unevaluable severity:'warning' rule logs "write rejected: … fails closed" twice while the write is accepted 201 and persists #24782 landed as PR fix(objectql): an unevaluable advisory validation rule logs one line saying the write proceeded, not two saying it was rejected #25051, per thedomain:enginepointer6308955528on seat post [PM seat] domain:devx @ objectstack — 🟢 os-warren · session_01FM29ZqLTrnPNXxijioZwMp #6023. Its own text says to re-run the clause and drop the line.Every edited item takes one
revisionbump and onehistoryentry. ⛔ No product code, test, pin or changeset text. ⛔ Notareas/integration-system.json(open PR #25045). Stop on breach and explain.Container & model:
M (one clause or item, driven live once on main, and one re-run clause),mode:subagent,model: TIER_DEFAULTClause-②: no
Responsibility:
no checklist clause drives the fresh-install order #24827 fixed, and validation-rule-type-matrix still says acceptance[5] is red after #24782 landed (#25054; pointer 6308955528)|none|every checklist runner, and the 18.1.0 release sweepThread-read: none
Serial constraints cleared: the one open PR under
docs/qa/platform-checklist/is PR #25045, which touches onlyareas/integration-system.json. No liveClaim:names these files (read at 2026-10-21T06:38Z). No dev of this session is in flight.Generated by Claude Code
objectstack-fleet commentedon Oct 21, 2026
os-dev-report
{ "issue": 25054, "status": "done", "branch": "claude/issue-25054-fresh-install-order", "pr": "https://github.com/objectstack-ai/objectstack/pull/25075", "session": "session_01FM29ZqLTrnPNXxijioZwMp — the parent's id (mode:subagent), the Claude-Session line on both commits", "premise_still_valid": true, "summary": "Ruling 1: no item in platform-core.json or cli.json covers a fresh install's first `os serve` after `os migrate apply` (v18-boot-refusals: a 17.x-shaped DB, its r6 excludes the order; organization-ownership-ceremony: upgrades; migrate-plan-apply-json: a DB an `os dev` boot already synced, no boot after; boot-health / dev-boot-contract: the `os dev` boot writes the marker itself; scaffold-first-run: `os start --artifact`, no apply), so I added a new item, cli.fresh-install-migrate-apply-first (r1, since v18.1, P1). acceptance[0] reads the sys_migration row adr-0131-organization-ownership the apply wrote, before any boot and again after the boot. acceptance[1] is the boot oracle: the serving line and no ownership refusal. knownGaps[0] records 18.0.0's refusal as that release's known behaviour, with the ancestry measured: 19484af538 is not an ancestor of the cli@18.0.0 tag commit 06cab4849a. I drove it live once at base 688052e147: `os migrate apply --yes` exited 0 and wrote the birth marker; the first `os serve` printed `✓ Server is ready` (production) with health 200, 0 refusal hits, and the row unchanged after the boot. Ruling 2: the re-run of acceptance[5] read exactly as the engine pointer predicted, so I made the two edits: knownGaps[1] dropped, and 'Red until #24782 lands' cut from acceptance[5].clause (r6 to r7). A scripted editor made all the edits, re-parsed both files, and asserted that only the target items and fields changed. Each history row has ref #25075: the first commit used the placeholder #PENDING-25054, and a ref-only follow-up commit 855415f993 swapped in the number. The card's assignee was not written. The PR's assignee is os-warren, and its label is skip-changeset.", "tests": "No package is touched, so no build closure, package test or typecheck is owed. Live drive 1 (new item, first evidence), with the full `pnpm build --concurrency=2` under os-verify-lock (VERDICT command-exit 0, 76/76 tasks) at 688052e147. Showcase in this worktree; DB file:SCRATCH/fresh-install/fresh.db, absent before the run (test ! -e on the db, -wal and -shm); OS_HOME scratch; fresh random OS_AUTH_SECRET and OS_SECRET_KEY. `os migrate apply --yes`: exit 0, '✓ Created/extended 107 table(s): 107 table(s) to create, 0 column(s) to add.', '[organization-ownership] a datastore created from empty: birth marker written (shape generation 1, platform 18.0.0).' The node:sqlite read before any boot: one row, 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}}. `OS_PORT=41873 os serve -p 41873` (setsid): '✓ Server is ready', 'Mode: production', OrganizationOwnershipBootGuard loaded; /api/v1/health 200 at 10 s; /api/v1/ready 200. Greps for 'carries no organization-ownership marker', 'refuses to start' and 'os migrate organization-ownership': 0 / 0 / 0. The row read after the boot was identical. The process group was stopped and the port is free. Live drive 2 (verification re-run, records-forms acceptance[5]) used the canonical boot `objectstack dev --ui --seed-admin -p 41874 -d file:SCRATCH/vr-rerun/data.db` with OS_PORT exported; admin sign-in 200; PUT meta/object qa_vr_probe and qa_vr_probe_err 200/200. POST data/qa_vr_probe {title abc}: 201, re-read 1 row. Whole log: exactly 1 line naming qa_unevaluable_warn, \"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\"; with 'write rejected' 0, with 'fails closed' 0. Control POST data/qa_vr_probe_err: 400 VALIDATION_FAILED, fields[0].constraint {rule qa_unevaluable_err, reason unevaluable}, re-read 0 rows, and its log says '— write rejected: a rule that cannot be evaluated fails closed'. The group was stopped (6 processes, 0 left). Verdicts: new item acceptance[0] pass, [1] pass, item pass; records-forms acceptance[5] pass, [0]-[4] skipped. No ablation: there is no tested behaviour change. Selector: since:v18.1 and file:packages/cli/src/utils/schema-migrate.ts each resolve the new item.", "gates": "Local, derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; merge base 688052e14; 2 paths, +79/-4). All 13 were run at the final head 855415f993 (and earlier at 7b35265616), each exit captured before any pipe, all exit 0: check-ci-filter-parity, check-closing-keyword-parity, the same with --self-test, check-comment-mask-corpus, lint check:doc-formula-expressions, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist, check:refd-timer-probe, check:watch-hint-literal. `--ran` at 855415f993: '✓ dispatch-gates --ran: 13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED'. check:platform-checklist is not in per-PR CI. At BASE 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'. At 855415f993: 'OK — 16 areas, 329 items (324 active, 1 planned); coverage: 39 kinds mapped, 2 waived; symbol anchors 985/995 resolved, 18 file floors held'. git merge-tree --write-tree against origin/main 2b1382a5b3 and against PR #25045's head 4a595ed439: exit 0 and a tree id, both clean; the one main commit since BASE touches nothing under docs/qa/platform-checklist. skip-changeset was re-measured: the paths are in the private root, outside every package dir; no public package's files[] names docs, qa or a parent path (positive control: 73 name dist). Local-only families check:dev-prereqs and check:skill-frame-freshness are not owed (no packages/spec build edit, no frame file); dev-prereqs was run anyway before the boots: exit 0. CI check-runs at 855415f993, one read with no waiting. success: Auto Label, Check Documentation Links, Check PR Size, Dogfood Regression Gate, Governed Surface Queue Guard, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · scoped (3 jobs), the 4 PR-claim guards, Test Core 3/6 to 6/6, Type Check · debt ledger, source gates, workspace, filter. in_progress: Lint · repo & tooling gates, Test Core 1/6 and 2/6, Type Check · consumer gates. skipped: Build Core, Check Changeset, Build Docs, Console Pin Gate, Dogfood Verify CLI, the opt-in jobs, Temporal Conformance.", "mcp_calls": "0 — no MCP GitHub tool was called; reads went through `gh api` REST GETs (card, comments, the pointer comment, PR read-back, check-runs)", "api_writes": "2 — (1) one fleet-write relay stroke (repository_dispatch, run 39560167278, success) carrying pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/25075/assignees [os-warren] + POST /repos/objectstack-ai/objectstack/issues/25075/labels [skip-changeset]; read-back: body 10300 bytes sent, 10300 stored, identical. (2) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/25054/comments via scripts/pm/post-stamped.mjs. Not REST: 3 git pushes of the branch (empty probe, 7b35265616, 855415f993)", "open_questions": [], "out_of_scope_findings": [ "class: a (misleading user-visible text) · reach: `os migrate apply --yes` on the stock showcase (examples/app-showcase) at 688052e147 prints at ERROR level '2 federated (external) object(s) are NOT bound to their remote table, yet stay registered and served: they keep their REST routes and keep rendering in the UI, while every read against them resolves to a table named after the OBJECT …', right after the same boot logged \"datasource 'showcase_external': connect denied by policy (schemaMode 'external': the remote owns this datasource's schema, so a schema migration has no table to plan on it)\". A migrate run serves no route and no UI, so the ERROR's stated consequence is false for that composition, and it reads as a failure in a successful apply (exit 0) · evidence: the two lines in the apply output of live drive 1; landing: packages/objectql/src/plugin.ts (the federated-binding report) beside the migrate boot's deliberate policy denial (packages/cli/src/utils/schema-migrate.ts); not investigated past those two lines, so the seat may judge it by design · dedupe words: federated objects NOT bound ERROR os migrate apply; connect denied by policy schemaMode external; showcase_external migrate ERROR line" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 21, 2026
Landed ·
domain:devxseat 1 ·session_01FM29ZqLTrnPNXxijioZwMp· 2026-10-21T07:53Zc67f244f5a(ACCEPT6310471398; not governed;Fixes #25054)origin/main, by contentareas/cli.jsonandareas/records-forms.jsonare byte-identical to the head855415f993State change: PR #25075 closed this card through
Fixes #25054(completed).pm:dispatchedcomes off in this act.On
main:cli.fresh-install-migrate-apply-first(P1, since v18.1) drives 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's order,os migrate applyfirst on an empty database, then the firstos serve. It was read live once onmain;records-forms.validation-rule-type-matrixno longer reads "red until objectql(validation): an unevaluable severity:'warning' rule logs "write rejected: … fails closed" twice while the write is accepted 201 and persists #24782", after a live re-run of acceptance[5].The ledger reads 329 items.
The dev's out-of-scope finding is #25079 (
domain:engine).Generated by Claude Code