Skip to content

test(dogfood): fixture-18.0.0 — the upgrade harness boots a database the published 18.0.0 created - #24911

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24884-ga-fixture
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24884-ga-fixture

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #24884
Clause-②: no

What

fixture-18.0.0: a database the published @objectstack/*@18.0.0 created, added to the 18.x upgrade harness, with one leg pinning that HEAD boots it.

  • The fixture (packages/qa/dogfood/test/upgrade-harness/fixture-18.0.0/). It was generated by scripts/gen-upgrade-harness-fixture.mjs --ref @objectstack/cli@18.0.0 --checkout CHECKOUT --out …/fixture-18.0.0, from a built checkout of the @objectstack/cli@18.0.0 tag (06cab4849a). That checkout's packages/cli/dist (660 files) and packages/runtime/dist are sha256-identical to the npm 18.0.0 tarballs. The populator and the dump are the ones fixture-18.0 uses: the same showcase app and the same seed actions. Its 18.0.0 shape, read from the dump:
    • birth marker {shapeGeneration: 1, platformVersion: "18.0.0"};
    • the tenant column is nullable (sys_share_link.organization_id varchar(255));
    • 15 COALESCE unique indexes;
    • sys_secret and sys_flow_credential carry no organization_id.
      The census covers all 14 reshaped tables.
  • The leg (upgrade-18x-harness.dogfood.test.ts, a new describe). It runs on a fresh copy of the fixture:
    1. the copy is birth-marked at 18.0.0;
    2. HEAD's os migrate plan --json (the real binary, in the showcase's directory) reports no destructive change;
    3. HEAD boots it with no ownership refusal and no boot error, the fixture's people sign in, and the fixture's task is served;
    4. once HEAD has stopped, every 18.0.0 row of every reshaped table is still there, with its key columns.
  • fixture-18.0 is unchanged. It stays the pre-release shape, and its legs run as before.

Why the populator and census changed

18.0.0 differs from the pre-release in two ways the shared populator did not handle:

  • The webhook. 18.0.0 seeds no sys_webhook mirror row for a declared webhook. So, when no mirror row exists, the populator switches showcase_task_changed on through POST /security/_activation/webhook/:name, which is the door the 18.0.0 showcase docblock names. It also authors an organization webhook (upgrade_harness_task_changed), so sys_webhook still holds the row an 18.0.0 install holds. The pre-release path, which PATCHes the mirror row, is unchanged.
  • The census. sys_secret and sys_flow_credential are deployment-level at birth in 18.0.0. A new dropsOrganization flag on those two entries lets the census leave organization_id out of their key columns where the table never had it. Every other missing key column is still refused.

There is also a generator fix. Its copy filter (anything whose name starts with fixture-) also skipped fixture-manifest.ts, so a --checkout run used the checkout's own census, not HEAD's. It now skips only the fixture directories.

Verification

  • npx vitest run test/upgrade-18x-harness.dogfood.test.ts: 12 passed (12), which is the 8 existing fixture-18.0 cases plus the 4 new ones.
  • npx vitest run test/audit-mail-bodies.dogfood.test.ts test/identity-mail-read-gate.dogfood.test.ts, the other suites that import the populator: 29 passed (29).
  • Reverse check of the drift assertion: on a copy of the fixture with an undeclared physical column added, HEAD's plan reports {kind: unmapped_column, category: destructive, op: drop_column}, so the filter is not vacuous.
  • pnpm --filter @objectstack/dogfood typecheck exits 0. eslint --no-inline-config on the changed files exits 0. check:cross-package-test-inputs, check:test-source-alias and check:doc-authoring exit 0.

Size and release

  • 7 files, 2,229 insertions and 15 deletions. That is under 3,000 changed lines; the dump and the manifest are 2,061 of them.
  • Nothing publishes: @objectstack/dogfood is private and scripts/ ships in no package. So there is no changeset, and the PR carries skip-changeset.
  • No ADR, driver or engine file is touched.

Acceptance notes

The published 18.0.0 verification (R1, R1b, R4, and R3 with the ceremony) is reported on #24884 and to the epic seat. Its two documentation findings are release-owned, so they need a docs-only change. They are not fixed here:

  • the CLI CHANGELOG's 18.0.0 section still carries the superseded "18.0 supports fresh single installs only" entry;
  • content/docs/upgrading.mdx has no v18 row and does not mention the ceremony.

Generated by Claude Code

Generated with scripts/gen-upgrade-harness-fixture.mjs from the
@objectstack/cli@18.0.0 tag (06cab48). The populator switches the declared
webhook on through its activation door and authors an organization webhook
when the release seeds no mirror row; the census leaves organization_id out
of a deployment-level table that never had it; the generator's copy filter no
longer skips fixture-manifest.ts.

Claude-Session: https://claude.ai/code/session_01YaviApKPNAuQLZVQarNfxP
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 20, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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): node scripts/docs-audit/affected-docs.mjs --json a8b44d407028cde9886b193f1add17a53437b03c → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat ACCEPT · epic PM session_01Y5583bs2RDd53MH6kM1ca3 (os-steve) · 2026-10-20T14:23Z. PR #24911 at e6861886060f0876a2e79bf7e0765ff6673b7bc5 (#24884 Part 2, os-dev-report 6292657948 on #24884). ACCEPT.

Seat check

  • Shape.
    • 7 paths, +2229/−15 = 2,244 lines, all under packages/qa/dogfood/test/ plus scripts/gen-upgrade-harness-fixture.mjs. The dump and manifest are 2,061 of those lines.
    • check-governed-merges --branch: NOT governed, under 3,000 lines. Not Tier H.
    • The body says Clause-②: no; there is no published schema and no governed path. No contract face is touched, so no second-agent review is owed (contract-review.md, "none of the four faces ⇒ CI plus the seat's own read"). This is that read.
  • Premises, measured in the committed fixture.
    • The birth marker is {shapeGeneration: 1, platformVersion: "18.0.0"}.
    • The dump holds 15 COALESCE unique indexes.
    • A scan for credential-shaped strings in fixture-18.0.0/database.sql (token prefixes, access-key ids, PEM headers) found none.
  • Code read.
    • The new leg reads the GA fixture into a temp SQLite file. It asserts four things:
      • the marker, and that every reshaped table holds rows;
      • os migrate plan --json over it lists no destructive change;
      • HEAD boots it with no refusal and no error, both fixture people sign in, and the edited task is served;
      • after stop, every census row is still there with its key columns.
    • takeCensus leaves organization_id out only on the two dropsOrganization tables, and only when the column is absent. Any other missing key column is still a failure.
    • The populator keeps the pre-release path (PATCH the seeded mirror row) and adds the 18.0.0 path (POST /security/_activation/webhook/:name, then an organization webhook authored under a new name).
    • The generator now skips only the fixture-* directories, so fixture-manifest.ts comes from HEAD.
    • fixture-18.0/ is unchanged.
  • Gate check-runs on the head.
    • 18.x upgrade harness (opt-in): success, job 118671826332. Its log shows upgrade-18x-harness.dogfood.test.ts 12/12, the four new tests among them.
    • Required checks: TypeScript Type Check, Test Core, Build Core, Lint & Repo Gates and Governed Surface Queue Guard all succeeded. All 42 latest check-runs are success or skipped.
  • Accepted deviation. None.
  • Out of scope, and where it goes. 7b-0 (tenant column NOT NULL at create) and 7b-1+7b-2 (feat(driver-sql,driver-turso,driver-memory,objectql,cli,metadata-protocol): plain organization key part in new unique indexes; the differ reads COALESCE(tenant) as tenant on a certified database (18.x step 7b-1 + 7b-2) #24893, plain index form) change this baseline. Each must keep this leg green on its own head. Both devs have been told, and both PRs carry needs:upgrade-harness.
  • Landing. This is an ordinary queue landing (not governed, not Tier H): the seat flips it ready and enables auto-merge. The PR merges clean with main after 7z (0091d845e2).

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 14:24
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 81e6edd Oct 20, 2026
53 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24884-ga-fixture branch October 20, 2026 14:49
os-steve pushed a commit that referenced this pull request Oct 20, 2026
… into 7b-0

Conflicts in seven fixture files take #24893's resolution (4dadd7e): where
7a-2 now writes the grant with an organization the pre-18 relax goes; where
main still lands an organization-less row the relax stays.
sharing-rule-criteria-required takes main's version verbatim (both sides had
added the organization key). plugin-webhooks' new real-SqlDriver case gets the
lean engine's Default Organization.

Claude-Session: https://claude.ai/code/session_018EszgtA3V2KXBX5tf59Hi4
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs:upgrade-harness size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test(upgrade-harness): verify the published 18.0.0, and add an 18.0.0-born fixture to the upgrade harness

2 participants