Repository navigation
test(dogfood): the 18.x upgrade harness — an 18.0 database boots on HEAD with its data (step 0) - #24552
Merged
objectstack-fleet[bot] merged 2 commits intoOct 19, 2026
Conversation
…ss test (WIP, fixture pending) Claude-Session: https://claude.ai/code/session_01SH2ojNSqz93pYiNSmUyQnf Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SH2ojNSqz93pYiNSmUyQnf 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
Seat review ·
|
objectstack-fleet
Bot
deleted the
claude/issue-24522-18x-upgrade-harness
branch
October 19, 2026 14:45
This was referenced Oct 19, 2026
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.
Part of #24522
Clause-②: no — tests, a fixture and scripts only; nothing a package publishes changes (
@objectstack/dogfoodis private,scripts/ships nowhere)Step 0 of the 18.x line (ruling record 6266750393 on #15194): the upgrade harness, built, green on this branch and ablated. The card's second half, the measured plan for steps 1–7, is in the
os-dev-reporton #24522 understep_plan; the seat files the child cards from it, so this PR does not close the card.What it adds
The fixture —
packages/qa/dogfood/test/upgrade-harness/fixture-18.0/.database.sqlis an 18.0 showcase database after real use, dumped as SQL text: 920 lines, 431 KB, 107 tables.manifest.jsonrecords the ref and commit it came from, every table's row count, and every row (key columns only) of the 14 tables steps 1–7 reshape.5b14b7f3ad8e, this branch's base onmain, which containsf8ef14487(feat(objectql)!: undersingle, a platform object's organization-less system insert is stamped or refused (C8 stage 8b) #24513). The 18.0 release tag does not exist yet.The populator —
upgrade-harness/populate-fixture.tsandrun-populate.ts. It boots the showcase over a SQLite file, composed asos servecomposes it (the app's default profile,AuditPlugin,OrganizationOwnershipBootGuardPlugin). It then uses the install through the real HTTP doors:aisetting (audit and secret);It then reboots once. Every door's answer is checked, and the census refuses to write a fixture in which any reshaped table is empty.
The generator —
node scripts/gen-upgrade-harness-fixture.mjs --ref REF [--checkout DIR].--checkout, it makes a temporary worktree of REF, installs it, builds the dogfood package's closure, and runs HEAD's populator there.--checkout, it first proves the checkout equals REF everywhere outsidepackages/qa/dogfoodandscripts/.The harness —
packages/qa/dogfood/test/upgrade-18x-harness.dogfood.test.ts. On a fresh copy of the fixture:organization_idamong them). Counts are checked as "at least", so rows a boot adds pass.organization_idonsys_metadata) is refused, with the guard's code.Measured
Test Files 1 passed (1)·Tests 5 passed (5)·Duration 53.89s (… import 42.80s, tests 10.70s)--checkoutover a built tree--concurrency=2on the shared 4-vCPU boxsys_webhook=1 (customized, active) ·sys_http_delivery=2 ·sys_secret=3 ·sys_setting=2 ·sys_setting_audit=4 (2 global, 2 tenant) ·sys_flow_credential=2 ·sys_email=2 (an invitation, a reset) ·sys_invitation=3 ·sys_sharing_rule=1 ·sys_share_link=1 ·sys_activity=164 ·sys_user_permission_set=2 ·sys_member=3 ·sys_user=3organization_idin those tablesAblation (one-time; no permanent mutation left)
Each leg ran through
node scripts/ablation-replace.mjson the fixture's SQL (a data file, so there is no build ordist/leg). Each restore was proven by the tool as blobe43efe830f55== HEAD andgit diff HEADempty.anchor count moved 1 -> 1) and restored the file. Nothing was measured.sys_webhookINSERT was commented out (anchor 1 → 0, blob →5a8d318e7b45).× 3. every reshaped table keeps every 18.0 row …, withAssertionError: sys_webhook row whk_8a24917e-…: expected undefined to deeply equal { …(4) }, soTests 1 failed | 4 passed (5).sys_metadatawas created with a physicalorganization_id(blob →a5b65a723f9b).× 1withthe ownership boot guard refused the 18.0 database: This database is still in the v17 organization-ownership shape: sys_metadata still carries …, plus× 2and× 4, soTests 3 failed | 2 passed (5).Where it runs before merge
Dogfood skips
pull_requestandmerge_grouptoday. The cheapest wiring measured is a label-gated opt-in lane, thepack-smoke-optin.ymlshape: one file, its build closure, and the labelneeds:upgrade-harness. It touches.github/workflows/**, so it is a separate draft PR for the maintainer onclaude/issue-24522-harness-lane(Tier H). Until that lands, this file runs inmain's full-battery dogfood like any other dogfood test.Acceptance notes
sys_sequencesor__global__counter rows, because the showcase writes none. Step 7's 8d PR regenerates the fixture with an autonumber write first (recorded in the step plan).sys_invitationholds twoinv_verify_*rows that@objectstack/verify'ssignUpfiles against its audience-gate organization. They are harness residue, not product data, and kept as the populator produced them.tsx(measured: without it,requiresreadundefinedand no provider mounted). Under vitest the export is the stack itself, so the harness boots the identical configuration.…not-a-real-…) have 0 hits indatabase.sql, andPRIVATE KEYhas 0 hits.Gates
Gate readings are cited at the final head in the
os-dev-reporton #24522.Generated by Claude Code