Skip to content

feat(data): add fail-closed schema migration ledger - #500

Open
seonghobae wants to merge 61 commits into
developfrom
refactor/schema-migration-ledger-433
Open

feat(data): add fail-closed schema migration ledger#500
seonghobae wants to merge 61 commits into
developfrom
refactor/schema-migration-ledger-433

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Buyer and operator impact

Issue #433 requires a zero-downtime rename of ScopeWeave's legacy single-word SQLite tables. Before any rename can be safe, startup needs durable migration identity and must refuse to serve a database left half old-schema and half canonical-schema after an interrupted cutover or stale restore.

This bounded prerequisite adds that fail-closed migration boundary without renaming production tables yet. It also replaces the earlier blanket ALTER TABLE exception swallowing with catalog-first compatibility-column validation, makes first bootstrap transactional, and preserves additive legacy schema self-healing for compliant existing databases.

Exact current identity and bounded delta

  • protected live base: develop@2c328875e00e86537df3e965170be80532571cad;
  • exact contributor head: 6bab0a547f484307073d0e3f7e9c3a15963ed1fe;
  • branch: refactor/schema-migration-ledger-433;
  • current branch is ahead-only by 58 commits, zero behind, with protected develop as the exact merge base;
  • Ready/non-Draft and mechanically mergeable at the latest fresh refetch; and
  • effective protected-base delta is 11 files:
    • CHANGELOG.md;
    • docs/doctoring/schema-migration-ledger.md;
    • package.json;
    • server/db.mjs;
    • server/schema_migration.mjs;
    • tests/unit/coverage-script-contract.test.mjs;
    • tests/unit/legacy-column-migration.test.mjs;
    • tests/unit/schema-migration-concurrent-startup.test.mjs;
    • tests/unit/schema-migration-ledger-contract.test.mjs;
    • tests/unit/schema-migration-state.test.mjs;
    • tests/unit/schema-migration-streaming.test.mjs.

Any contributor-head or protected-base movement invalidates revision-sensitive evidence until the exact revisions, semantic delta, reviews, checks and checkout attestations are freshly revalidated.

Current production contract

  • creates and validates the two-word schema_migrations ledger idempotently;
  • recognizes only a complete ten-table legacy generation or complete ten-table canonical generation for the refactor(data): migrate single-word database objects with zero-downtime compatibility #433 rename set and fails closed on partial/mixed generations;
  • preserves unrelated compliant application tables outside the rename set (for example audit_log, api_tokens, project_revisions, project_seen, share_tokens, and webhook_deliveries) rather than misclassifying them as migration-generation objects;
  • validates persisted migration key/state pairs through a null-prototype allowlist and verifies ledger schema/history against fresh SQLite catalog evidence;
  • preserves legitimate legacy history when a forward canonical migration is recorded and rejects backward-generation rollback after canonical history exists;
  • allows only a genuinely empty database to enter first legacy bootstrap;
  • wraps first legacy bootstrap in BEGIN IMMEDIATE/commit/rollback so an interrupted initial CREATE sequence does not leave an accidentally serviceable partial generation;
  • for an established complete legacy database, still executes the idempotent additive CREATE TABLE/INDEX bootstrap outside that explicit transaction so missing non-rename support objects can self-heal without taking the first-bootstrap transaction path;
  • validates existing users.token_version, projects.archived, and projects.methodology declarations before accepting them, adds them only when absent, and propagates real compatibility-DDL failures;
  • deliberately identifies canonical-generation databases but does not serve them yet; the actual rename executor remains later refactor(data): migrate single-word database objects with zero-downtime compatibility #433 work; and
  • includes server/db.mjs and server/schema_migration.mjs in the canonical c8 owned-production coverage set.

TDD and review-driven repair chronology

The branch began with the schema-state regression before implementation. Subsequent current-tree repairs were test-first or directly coupled to realistic regressions:

  • null-prototype migration-state lookup for persisted untrusted keys;
  • exact compatibility-column type/nullability/default validation and non-callable adapter cases;
  • atomic first-bootstrap regression and implementation;
  • streaming ledger-schema fixture correction;
  • rolling-startup regression around existing-schema lock behavior; and
  • current head 6bab0a547f484307073d0e3f7e9c3a15963ed1fe (fix(data): preserve additive schema bootstrap), which repairs the discovered regression where an early return for an established legacy generation skipped idempotent creation of non-rename tables/indexes.

The current head therefore preserves both safety properties: a brand-new interrupted bootstrap rolls back, while a complete legacy database can still receive additive idempotent schema objects.

Current unresolved Devin threads are informational operating-boundary observations rather than demonstrated current defects: canonical-state ledger recording occurs before the intentional unsupported-canonical fail-close; strict compatibility-column declarations may reject hand-modified self-hosted schemas by design; a future dual-generation expand executor needs its own controlled transition; genuine additive self-heal can still contend for a write lock when it actually creates a missing object; ledger creation/default-text checks depend on documented SQLite behavior; and the compatibility-column step intentionally runs only on the legacy path. They remain visible rather than being resolved for status cleanliness.

A CodeRabbit suggestion to reject every table outside the ten-table rename set is not adopted because #433 explicitly preserves existing compliant application tables outside that rename set; treating those tables as migration corruption would make valid ScopeWeave databases unstartable. The bounded catalog sentinel exists to distinguish a non-empty unrelated database from a pristine bootstrap, not to outlaw ScopeWeave's other owned tables.

Current exact-head evidence

For exact contributor head 6bab0a547f484307073d0e3f7e9c3a15963ed1fe, all six currently associated pull-request workflow runs are terminal GitHub-success:

  • Dependency Review 32502265208;
  • SAST Semgrep 32502265219;
  • Server Tests 32502265195;
  • Fuzz 32502265327;
  • OSV Scanner 32502265731; and
  • Security Scan 32502265282.

These success labels are useful product/regression evidence but are not promoted to immutable contributor-head merge authority while the known workflow checkout defects remain unresolved. ScopeWeave #523 owns repository-native exact-head Server Tests/coverage and Dependency Review integrity. ContextualWisdomLab/.github#1222 owns the centrally reusable SAST/Security exact-head repair through the central repository's existing dedicated writer path.

The formal OpenCode CHANGES_REQUESTED review is bound to predecessor head ad4166b0652ecf204c4876770b69265ab9c6b2d8 and its then-failing coverage evidence; it does not transfer to current head 6bab0a5.... CodeRabbit/Devin COMMENTED reviews are supplementary rather than qualifying independent approval. No qualifying independent current-head/last-push approval is present.

Standards, recovery and remaining #433 scope

docs/doctoring/schema-migration-ledger.md records the pre-bootstrap boundary, catalog-first compatibility validation, monotonic ledger semantics, transactional first-bootstrap behavior, rollback/recovery constraints, and APA 7 references to ISO/IEC 9075-1:2023 and current SQLite ALTER TABLE/PRAGMA documentation.

A partial rename or schema/ledger generation mismatch is never auto-healed. Later #433 slices still own the reviewed expand/verify/contract rename executor, complete foreign-key/index/trigger/view/query verification, populated-database migration/restart/kill-point acceptance, PostgreSQL adapter parity, compatibility-view decisions where genuinely needed, restore rehearsal, and final canonical-object enforcement. This PR does not close #433 and does not claim canonical schema shipment.

Merge gate

Do not merge or enable auto-merge until this unchanged exact head remains reconciled to freshly resolved protected develop, the repository and central exact-head evidence controls are protected-shipped and regenerated, every applicable CI/browser/owned statement-branch-function-line coverage/docstring/CodeQL/SAST/security/dependency/supply-chain/package/SBOM/provenance/migration-recovery gate is substantively terminal-passing, valid unresolved current-head defects are zero, and a qualifying independent current-head/last-push approval genuinely exists under live rulesets.

Pending, queued, skipped-required, cancelled, absent, neutral-required, failed, stale, predecessor, synthetic-only, status-only, author-only, model-only, rate-limited, or infrastructure-only evidence is non-passing.

Refs #433

Summary by CodeRabbit

  • 개선 사항

    • 데이터베이스 시작 시 스키마 상태와 변경 이력을 검증합니다.
    • 불완전하거나 손상된 스키마, 혼합 상태, 알 수 없는 객체 및 지원되지 않는 정규 스키마를 감지하면 안전하게 시작을 중단합니다.
    • 레거시 스키마 초기화는 원자적으로 처리되어 실패 시 변경 사항을 롤백합니다.
    • 호환 컬럼은 필요한 경우에만 추가하며, 잘못된 정의나 실제 오류를 숨기지 않습니다.
  • 문서

    • 스키마 마이그레이션 원장, 복구 동작 및 검증 규칙을 문서화했습니다.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

스키마 세대와 schema_migrations 원장을 검증하는 모듈을 추가했습니다. 데이터베이스 시작 전에 부분·혼합·손상 상태를 거부합니다. canonical 스키마는 원장에 기록한 뒤 현재 query layer가 지원하지 않음을 오류로 알립니다. 레거시 호환 컬럼은 카탈로그를 확인한 뒤 필요한 경우에만 추가합니다.

Changes

스키마 마이그레이션 상태 관리

Layer / File(s) Summary
스키마 상태 계약과 원장 검증
server/schema_migration.mjs, tests/unit/schema-migration-state.test.mjs, docs/doctoring/schema-migration-ledger.md
레거시 및 canonical 객체 집합을 정의합니다. 카탈로그와 원장 상태를 검증합니다. 부분·혼합 세대, 알 수 없는 값, 역행 이력을 SchemaMigrationStateError로 거부합니다. 검증된 세대의 원장 기록은 멱등적으로 삽입합니다.
레거시 호환 컬럼 검증과 DDL 오류 처리
server/schema_migration.mjs, server/db.mjs, tests/unit/legacy-column-migration.test.mjs, docs/doctoring/schema-migration-ledger.md
PRAGMA table_infotoken_version, archived, methodology의 정의를 확인합니다. 누락된 컬럼만 추가합니다. 호환되지 않는 정의, 실제 SQLite DDL 오류, 불완전한 데이터베이스 어댑터 오류를 전파합니다.
시작 가드 통합과 canonical 중단
server/db.mjs, tests/unit/schema-migration-state.test.mjs, package.json, CHANGELOG.md, tests/unit/coverage-script-contract.test.mjs, tests/unit/schema-migration-streaming.test.mjs
데이터베이스 초기화 전에 스키마 상태를 검사합니다. canonical 스키마에서는 원장 상태를 보장한 뒤 시작을 중단합니다. 레거시 초기화 후에는 원장 상태를 기록합니다. 카탈로그와 원장 조회는 iterate()로 스트리밍합니다. 테스트 계측 대상과 테스트 명령을 갱신합니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: 🟠 High · up to f9410

Startup can currently treat a valid legacy or canonical schema with an unexpected extra table as trusted, allowing an unverified database state to pass migration checks and potentially serve requests under the wrong schema assumptions. This concrete correctness risk should be fixed before merge, and the required independent approval after the latest push is still missing.

Sequence Diagram(s)

sequenceDiagram
  participant DatabaseStartup
  participant schema_migration
  participant SQLiteDatabase
  participant QueryLayer

  DatabaseStartup->>schema_migration: inspectSchemaBootstrapState(database)
  schema_migration->>SQLiteDatabase: 스키마와 schema_migrations 조회
  SQLiteDatabase-->>schema_migration: 스키마 세대와 원장 상태
  schema_migration-->>DatabaseStartup: 검증된 상태 또는 SchemaMigrationStateError
  DatabaseStartup->>schema_migration: ensureSchemaMigrationState(database)
  schema_migration->>SQLiteDatabase: 세대 원장 레코드 멱등 삽입
  DatabaseStartup->>QueryLayer: canonical 세대 초기화
  QueryLayer-->>DatabaseStartup: 현재 세대 미지원 오류
Loading
🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning [증상 #433] 원장과 시작 시 검증은 구현했지만 rename, 백업, PostgreSQL 어댑터 등 핵심 요구사항은 구현하지 않았습니다. #433의 잔여 요구사항을 구현하거나, 이 PR을 명확한 선행 작업으로 분리하고 해당 이슈와의 연결 범위를 조정하십시오.
Out of Scope Changes check ⚠️ Warning [요구사항 #433] 기능 범위와 무관한 @playwright/test 의존성 업데이트가 포함되어 있으며, 연결된 이슈는 의존성 업데이트를 금지합니다. @playwright/test 버전 변경을 별도 PR로 이동하고, 이 PR에는 스키마 마이그레이션 원장 관련 변경만 유지하십시오.
Docstring Coverage ⚠️ Warning Docstring coverage is 54.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 5 files. (1 skipped: 1 unsupported.) Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 fail-closed 스키마 마이그레이션 원장 추가라는 주요 변경을 정확하고 간결하게 설명합니다.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/schema-migration-ledger-433

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 22:17

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Please perform a fresh independent formal review of exact current head fa2581bccad0ecc26e11f88839ddcee6dd179d8b against live protected develop@b88e66e81e9701404d29a0f5de4f58573ceee14f. All six repository-native workflows are terminal-success on this exact head. Pay particular attention to the pre-bootstrap migration-state guard: an existing canonical database must be recognized before legacy DDL can recreate old tables, and this application version must fail closed until its query layer is migrated. Verify the persisted-SQLite subprocess regression, ledger consistency, mixed/incomplete-state handling, and the six-file scope. Publish current-head review evidence only; do not mutate the branch, merge, or bypass repository policy.

@seonghobae
seonghobae enabled auto-merge (squash) August 14, 2026 22:40
@seonghobae
seonghobae marked this pull request as draft August 14, 2026 23:45
auto-merge was automatically disabled August 14, 2026 23:45

Pull request was converted to draft

@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 23:55

Copy link
Copy Markdown
Contributor Author

@opencode-agent
@cwl-noema-review

Request independent review for exact current head ba5d1197535b8c0664f4983ce19ff00d834bba5e against live develop@b88e66e81e9701404d29a0f5de4f58573ceee14f. All six repository-native workflows, exact-head coverage-evidence, CodeQL, and opencode-review checks are terminal-success; there are no unresolved review threads. Verify startup rejects mixed/partial schema generations, validates every persisted migration key/state pair, permits legitimate legacy→canonical append-only history, rejects canonical-history→legacy rollback, and does not recreate legacy tables over a canonical schema. The six-file slice intentionally does not rename production tables yet. Publish current-head review evidence only; do not mutate or merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Already reviewed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

coderabbitai[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

@opencode-agent
@cwl-noema-review
@coderabbitai review

Fresh exact-head review requested for d36200c00c22ae66b3dadfd4f2c3daf41d3adf9f against live develop@b88e66e81e9701404d29a0f5de4f58573ceee14f. All six repository-native workflows plus exact-head coverage-source-tree, coverage-evidence, opencode-review, CodeQL, and Semgrep OSS checks are terminal-success; the prior CodeRabbit untrusted-key map finding was addressed on this head and its thread is resolved. Verify the migration ledger remains append-only/monotonic, mixed or partial generations fail closed before service use, canonical history cannot silently roll back to legacy, legitimate legacy→canonical history is preserved, and the six-file slice does not rename production tables yet. Publish current-head review evidence only; do not mutate or merge.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent opencode-agent Bot added area: data Database, schema, migration, ETL, or lineage priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability labels Aug 22, 2026
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Caution

Review failed

An error occurred during the review process. Please try again later.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 39e1e7e7-f37e-4057-ba96-8ce724679d67

📥 Commits

Reviewing files that changed from the base of the PR and between 37e27e7 and b7ef5c5.

📒 Files selected for processing (5)
  • CHANGELOG.md
  • docs/doctoring/schema-migration-ledger.md
  • server/schema_migration.mjs
  • tests/unit/schema-migration-state.test.mjs
  • tests/unit/schema-migration-streaming.test.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

스키마 세대와 schema_migrations 원장을 시작 시 검증합니다. 부분·혼합·손상·역행 상태를 거부합니다. 레거시 부트스트랩을 원자적으로 실행합니다. 호환 컬럼을 카탈로그 확인 후 추가합니다. 관련 테스트와 문서를 추가합니다.

Changes

스키마 마이그레이션 상태 관리

Layer / File(s) Summary
스키마 상태 계약과 원장 검증
server/schema_migration.mjs, tests/unit/schema-migration-state.test.mjs, tests/unit/schema-migration-streaming.test.mjs, tests/unit/schema-migration-ledger-contract.test.mjs, docs/doctoring/schema-migration-ledger.md, CHANGELOG.md
레거시·canonical 객체를 분류합니다. schema_migrations 계약과 이력을 검증합니다. 알 수 없거나 불완전하거나 역행한 상태를 SchemaMigrationStateError로 거부합니다. 원장 기록과 조회는 멱등적이며 스트리밍 방식으로 처리합니다.
레거시 호환 컬럼 검증과 DDL 오류 처리
server/schema_migration.mjs, server/db.mjs, tests/unit/legacy-column-migration.test.mjs, CHANGELOG.md
PRAGMA table_info로 호환 컬럼을 확인합니다. 누락된 컬럼만 추가합니다. 기존 정의가 계약과 다르면 오류를 발생시키고 실제 DDL 오류를 전파합니다.
원자적 레거시 스키마 부트스트랩
server/schema_migration.mjs, tests/unit/schema-migration-state.test.mjs, tests/unit/schema-migration-streaming.test.mjs, docs/doctoring/schema-migration-ledger.md
빈 데이터베이스의 레거시 DDL을 BEGIN IMMEDIATECOMMIT으로 실행합니다. DDL 실패 시 ROLLBACK 후 원래 오류를 전파합니다. 기존 레거시 스키마에는 멱등 DDL을 적용합니다.
시작 가드 통합과 동시 시작 검증
server/db.mjs, tests/unit/schema-migration-state.test.mjs, tests/unit/schema-migration-concurrent-startup.test.mjs, tests/unit/coverage-script-contract.test.mjs, package.json
데이터베이스 초기화 전에 상태를 검사합니다. canonical 세대는 기록한 뒤 지원되지 않는 상태로 시작을 중단합니다. 이미 마이그레이션된 데이터베이스의 동시 시작을 검증합니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: 🔵 Low · up to b7ef5

The PR adds durable schema-generation checks and transactional first bootstrap, improving protection against partial or mixed databases. A stale restore with conflicting history may still receive schema mutations before startup rejects it, and simultaneous first starts may contend without a demonstrated wait/retry policy; the service remains fail-closed, so this is mergeable with explicit owner awareness of these bounded risks.

Sequence Diagram(s)

sequenceDiagram
  participant ApplicationStartup
  participant db.mjs
  participant schema_migration
  participant SQLiteDatabase
  ApplicationStartup->>db.mjs: 데이터베이스 모듈 초기화
  db.mjs->>schema_migration: inspectSchemaBootstrapState(database)
  schema_migration->>SQLiteDatabase: 카탈로그와 schema_migrations 조회
  SQLiteDatabase-->>schema_migration: 스키마 세대와 원장 상태
  alt 빈 데이터베이스
    db.mjs->>schema_migration: runAtomicLegacySchemaBootstrap(database, bootstrapSql)
    schema_migration->>SQLiteDatabase: BEGIN IMMEDIATE 및 레거시 DDL
    SQLiteDatabase-->>schema_migration: COMMIT 또는 DDL 오류
  else canonical 세대
    db.mjs->>schema_migration: ensureSchemaMigrationState(database)
    schema_migration-->>db.mjs: canonical_ready
    db.mjs-->>ApplicationStartup: SchemaMigrationStateError
  else 레거시 세대
    db.mjs->>schema_migration: ensureLegacyCompatibilityColumns(database)
    schema_migration->>SQLiteDatabase: PRAGMA table_info 및 필요한 ALTER TABLE
    db.mjs->>schema_migration: ensureSchemaMigrationState(database)
    schema_migration-->>db.mjs: legacy_ready
    db.mjs-->>ApplicationStartup: 시작 완료
  end
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 41.18% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 17 functions across 8 files. (2 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 fail-closed 스키마 마이그레이션 원장 추가라는 PR의 주요 변경 사항을 정확하고 간결하게 설명합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 41.18% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 17 functions across 8 files. (2 skipped: 2 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/schema-migration-ledger-433

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 24, 2026 22:05

Dismissed as stale predecessor-head evidence after a fresh exact-state refetch. This OpenCode CHANGES_REQUESTED review is explicitly bound to ad4166b and its then-failing coverage-evidence run 32123439123. The live contributor head is 6bab0a5 on protected develop@2c328875e00e86537df3e965170be80532571cad; its current repository workflow labels are terminal success, while known exact-head checkout/control repairs remain separately required. Dismissal removes predecessor review state only; it does not approve this PR or manufacture current-head evidence. A qualifying independent current-head/latest-push approval and corrected exact-head gates remain required.

coderabbitai[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

Devin Review

Comment thread server/schema_migration.mjs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: data Database, schema, migration, ETL, or lineage priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(data): migrate single-word database objects with zero-downtime compatibility

1 participant