Skip to content

cherry-pick: Preserve 5.2 rollback compatibility for first-time table creates (conflicts → v5.3) - #3124

Merged
kriszyp merged 7 commits into
v5.3from
cherry-pick/v5.3/pr-3118
Oct 8, 2026
Merged

kriszyp merged 7 commits into
v5.3from
cherry-pick/v5.3/pr-3118

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Cherry-pick of PR #3118 onto `v5.3` produced conflicts on commit(s): `4db030f2a0b8f4d064dfdf60446b4181ec597a40 b8fca4e 5f8f49e`.

Resolve the conflict markers on branch `cherry-pick/v5.3/pr-3118` and merge this PR.

@claude please review branch `cherry-pick/v5.3/pr-3118` and suggest a patch that resolves the conflict markers (<<<<<<< / ======= / >>>>>>>) introduced by cherry-picking PR #3118 onto `v5.3`. Post the suggested patch as a comment here — do not push.

Resolution on v5.3

The conflict markers are resolved in two new commits on top of the Action's commits. No history was rewritten. The resolution started from #3118's squashed diff on main (4dba9f5), not from the nested markers.

Every other production hunk matches #3118's squash on main.

❓ Your call: the backport adds one stored row type (/dropped/<table>) to the 5.3 patch line. You chose this (option A) over counting only journal rows and column families, which would make recreate naming timing-dependent and require rewriting about 5 of #3118's tests.

❓ Your call: two pre-existing defects are left as they are on main and recorded for follow-up there:

  • Orphan index column family. A crash before publish, then a 5.2 rollback, then a recreate with a different index set leaves an empty index column family (publishedCreate removes the creating journal).
  • Stale drop deletes the replacement's catalog. The operations-API dropTableMeta still runs after a stale drop, deleting a replacement table's catalog rows. This one is older than Preserve 5.2 rollback compatibility for first-time table creates #3118.

Fixing either on v5.3 alone would make this backport differ from main.

Verification

  • Locally (RocksDB): dropTableGeneration 24/24, and the ghost-table and cross-worker drop files pass. LMDB passes on the same files. Full test:unit:resources passed on c6ff208: 4024 passing, 0 failing.
  • Mutation checks: removing the Table.ts write fails 2 of Preserve 5.2 rollback compatibility for first-time table creates #3118's tests. Removing the completeInterruptedDrop write, or the loader skip, fails the new test.
  • CI was dispatched on 8e83d2d: Integration Tests (Node 24) ✅ (24/24 jobs, on the Node 24, uWS, Bun and Windows legs) and Unit Test (Node 24) ✅ (7/7 jobs). On the Node 24 leg, first-create-downgrade ran the real 5.2.15 round trip and passed. The tables it drops leave /dropped/ rows, so 5.2 booted with them present.
  • The PR-triggered Unit Test (Node.js v26) fails 7 tests on Node 26.11.1 (withNodeAdapter ×4, install_node_modules dry-run ×3). These are v5.3's own baseline failures, and v5.3's push runs of unit-test.yml are red too. The Node 22 and 24 legs pass.
  • Pre-push review (codex, gemini, cursor-composer, harper-domain; one full round, one delta round): 2 findings fixed. The rest are declined or deferred, and they concern code that is identical to main's Preserve 5.2 rollback compatibility for first-time table creates #3118 or older.

— Claude Opus 5.5

🤖 Generated with Claude Code

https://claude.ai/code/session_01QYAaU3uVxkbjHe19UNWRfK

Related PRs: #3118 overlaps, #2962 overlaps, #3119 overlaps, 17 others independent

Review-Coverage: authored=claude; ran=gemini,codex,cursor-composer; adjudicated=domain; blocked=cursor-grok(failed); declined=cursor-kimi,cursor-muse; rounds=2; full=1 @ 8e83d2d

Review-Attention: deep ~30m (critical: Table.ts, databases.ts; decisions: main-first-follow-ups, keep-legacy-writer-comment) @ 8e83d2d

kriszyp and others added 5 commits October 8, 2026 19:05
Keep legacy names until a table name has local history, journal unstamped creates independently, and preserve drop ownership during recovery.

Co-Authored-By: OpenAI Codex GPT-6.1 <noreply@openai.com>
Retirement journals can outlive a rollback that reuses bare store names. Preserve stores owned by the live catalog and their blobs, and verify the 5.2 recreate/re-upgrade path.

Co-Authored-By: OpenAI Codex GPT-6.1 <noreply@openai.com>
Guard retirement of the dropper’s own physical handles against live catalog ownership, then preserve write settlement and blob cleanup. Document untimed name history and older-reader crash recovery limits.

Co-Authored-By: OpenAI Codex GPT-6.1 <noreply@openai.com>
Reopen the storage engine before the final rollback-recreate and index assertions, so retained handles cannot mask an erroneously reclaimed family.

Co-Authored-By: OpenAI Codex GPT-6.1 <noreply@openai.com>
Snapshot journal phases under the catalog lock and defer creating-row primary retirement to any pending retired journal. Verify both journal orderings unlink blobs before retirement completes.

Co-Authored-By: OpenAI Codex GPT-6.1 <noreply@openai.com>
The conflict hunks pulled in main's #2962 lifecycle machinery (timed drop
markers, createdTime stamps, replication helpers), which is milestoned
v5.4 and absent here; it is dropped. #3118 keys "this name has history"
off the /dropped/<table> row that #2962 writes at every drop completion,
so v5.3 gets only the untimed form #3118 itself introduced: both RocksDB
completion paths (retireRocksStores, completeInterruptedDrop) record it
before removing the tombstone, and the load parser skips /dropped/ rows.
5.4 reads the same row as its untimed marker. The design notes keep
v5.3's section heading and drop the lifecycle-stamp paragraph.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYAaU3uVxkbjHe19UNWRfK
Dispatch-Task: cherry-resolve-kriszyp_harper_3118-6e6e74cf
…w contract

v5.3's dropTable() takes no options, so the picked tests' localOnly
argument only repeated the ordinary drop; the test now names what it
checks. The recordTableNameHistory comment states the row-shape
constraint instead of issue history.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYAaU3uVxkbjHe19UNWRfK
Dispatch-Task: cherry-resolve-kriszyp_harper_3118-6e6e74cf
@kriszyp
kriszyp merged commit f227ff0 into v5.3 Oct 8, 2026
84 of 85 checks passed
@kriszyp
kriszyp deleted the cherry-pick/v5.3/pr-3118 branch October 8, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant