Architectural Invariant Design: Kotlin Multiplatform Room SQLite Atomic Migration Standard
Kotlin Multiplatform Room SQLite Atomic Migration Standard defines an industrial-grade behavioral standard for mobile engineering. Enforces strict transactional atomicity and defensive foreign key management for Room database migrations across Android and iOS targets. Guarantees that any unexpected mid-migration process death rolls back schema changes completely without leaving the client SQLite database in an inconsistent or unrecoverable bricked state. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.
Hazard Analysis: What Breaks Without This Rule
The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:
| Failure Mode | AI Symptom (The Anti-Pattern) | Severity | Production Impact & Remedy |
|---|---|---|---|
| AI Hallucination & Deprecation Drift | Non-Transactional Multi-Statement Migrations Leading to Unrecoverable Client Database Corruption | Critical | Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production. Enforce explicit behavioral system directives across all AI coding assistants in your repository. |
| Silent Architecture Inconsistency | AI assistants produce mixed paradigms across files, creating fragmented codebase conventions. | Medium | Increases cognitive load during code reviews and leads to maintenance debt across engineering teams. Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails. |
Step-by-Step Production Directives
Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:
Engineers MUST ALWAYS wrap non-Room-managed raw SQLite statements within an explicit `execSQL("BEGIN TRANSACTION")` / `execSQL("COMMIT")` block with `execSQL("ROLLBACK")` in the exception path if using low-level SQLite drivers, or rely on Room's `Migration` contracts where `useConnection` or `SupportSQLiteDatabase.beginTransaction()` is mandated.
Engineers MUST ALWAYS wrap non-Room-managed raw SQLite statements within an explicit `execSQL("BEGIN TRANSACTION")` / `execSQL("COMMIT")` block with `execSQL("ROLLBACK")` in the exception path if using low-level SQLite drivers, or rely on Room's `Migration` contracts where `useConnection` or `SupportSQLiteDatabase.beginTransaction()` is mandated.
Engineers MUST NOT disable foreign key constraints (`PRAGMA foreign_keys = OFF`) inside an active transaction, as SQLite ignores foreign key pragma adjustments once a transaction has started.
Engineers MUST NOT disable foreign key constraints (`PRAGMA foreign_keys = OFF`) inside an active transaction, as SQLite ignores foreign key pragma adjustments once a transaction has started.
Engineers MUST ALWAYS implement table rebuilds following the 12-step SQLite table alteration procedure
Engineers MUST ALWAYS implement table rebuilds following the 12-step SQLite table alteration procedure: create new temporary table, copy data, drop old table, rename temporary table to target name, and recreate indexes/triggers.
Code MUST verify table integrity and foreign key constraints via `PRAGMA foreign_key_check` before committing destructive or structural data migrations.
Code MUST verify table integrity and foreign key constraints via `PRAGMA foreign_key_check` before committing destructive or structural data migrations.
Services MUST never rely on `fallbackToDestructiveMigration()` in production builds without an explicit, remote-controlled killswitch or diagnostic opt-in.
Services MUST never rely on `fallbackToDestructiveMigration()` in production builds without an explicit, remote-controlled killswitch or diagnostic opt-in.
Components NEVER execute long-running migrations synchronously on the main UI dispatcher
Components NEVER execute long-running migrations synchronously on the main UI dispatcher; migrations must be wired via appropriate background dispatchers during initialization.
Frequently Asked Technical Questions
Common questions developers face when configuring AI coding assistants for this stack:
Q:Why is Kotlin Multiplatform Room SQLite Atomic Migration Standard critical for AI coding assistants?
Enforces strict transactional atomicity and defensive foreign key management for Room database migrations across Android and iOS targets. Guarantees that any unexpected mid-migration process death rolls back schema changes completely without leaving the client SQLite database in an inconsistent or unrecoverable bricked state. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.
Q:How does adopting this rule prevent AI hallucinations?
This rule explicitly declares what the AI must avoid (Non-Transactional Multi-Statement Migrations Leading to Unrecoverable Client Database Corruption) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.
Q:Which AI coding environments are supported?
This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).
Q:Can I combine this rule with other technology stacks?
Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.