Skip to content

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

Closed

Description

@objectstack-fleet

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.

The gap

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.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    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:

    1. This card: a clause for the fresh-install order 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 fixed (os migrate apply first on an empty database, then the first os serve boots), in the item whose scope covers a fresh install's first boot. If no item covers it, one new item, authored with the checklist-author skill.
    2. Bundled, by this seat's ruling: records-forms.validation-rule-type-matrix fixtures.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 the domain:engine pointer 6308955528 on 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 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.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-21T07:53Z

    reading result
    merge queue none left: the entry has drained
    PR object PR #25075 merged at 2026-10-21T07:52Z as c67f244f5a (ACCEPT 6310471398; not governed; Fixes #25054)
    origin/main, by content areas/cli.json and areas/records-forms.json are byte-identical to the head 855415f993

    State change: PR #25075 closed this card through Fixes #25054 (completed). pm:dispatched comes off in this act.

    On main:

    The ledger reads 329 items.

    The dev's out-of-scope finding is #25079 (domain:engine).


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxpriority:p2Medium: important, M3tests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions