Skip to content

fix(core): migrate legacy message ID prefixes - #54937

Closed
Dante-dan wants to merge 1 commit into
anomalyco:devfrom
Dante-dan:legacy-message-ids
Closed

Dante-dan wants to merge 1 commit into
anomalyco:devfrom
Dante-dan:legacy-message-ids

Conversation

@Dante-dan

@Dante-dan Dante-dan commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Issue for this PR

Closes #54736

Type of change

  • Bug fix

What does this PR do?

V1 accepts message IDs beginning with msg, but V2 requires msg_. Preserve the original IDs while matching parts and compaction relationships, then remap incompatible IDs using the existing deterministic, collision-safe ID helper. Derived synthetic messages also receive valid V2 prefixes. The V1 source tables remain unchanged.

How did you verify your code works?

  • Existing migration suite: 26 tests passed, 124 assertions (bun test test/v1-migration.test.ts --timeout 30000). The first run had two 5-second timeouts.
  • git diff --check passed. Canonical bun run check completed lint with zero errors, then failed in unrelated services/www because Astro cannot create its preferences directory in this environment.
  • Core typecheck passed. A targeted services/www typecheck also passed with ASTRO_TELEMETRY_DISABLED=1 (31 files, zero errors); the full monorepo check was not rerun. The reporter's database has not been tested locally.

Screenshots / recordings

Not applicable.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@github-actions

Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change looks correct. I reproduced #54736 on the base with the bot's script, running the CLI from source: the migration died with the Session.Message.ID validation error and nothing was imported. With this PR the migration completes, and the legacy msg000000000002… row is imported as msg_000000000002…, keeping the leading part of the ID so the order is unchanged. The existing v1-migration.test.ts tests pass and packages/core type-checks.

I also checked that no references are left pointing at old IDs. Parent, compaction and tail_start_id links are resolved on the original V1 IDs before the new IDs are assigned, and the migrated message data doesn't contain message IDs. New IDs come out the same on every run and can't collide, because they share the existing used set with the synthetic messages. importNextDatabase only copies rows that are already V2, so it doesn't need the same handling.

Public API: unchanged.

Related: #53971

@github-actions

Copy link
Copy Markdown
Contributor

Automated PR Cleanup

Thank you for contributing to opencode.

Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions.

This PR was closed because it matched the following cleanup criteria:

  • The PR was created more than 1 month ago
  • The PR had fewer than 2 positive reactions
  • Positive reactions are counted as thumbs-up, heart, celebration, or rocket reactions on the PR

PRs created within the last month are not affected by this cleanup.

If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate.

Thanks again for taking the time to contribute.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

migration: V1 migration aborts on legacy message ID failing Session.Message.ID schema

1 participant