--- name: fantasia-flatten-database-schemas description: >- Collapses .faproject SQLite PRAGMA user_version ladders into a single bootstrap schema (procedure sets max to 1) during pre-release dev resets. Use when the user asks to flatten database schemas, reset migrations, or squash schema versions before wider release. --- # Flatten database schemas (`.faproject`) ## When to use - Pre-release / dev-only resets when incremental migrations not worth keeping - User explicitly asks to **flatten** or **squash** migrations - **Do not** flatten after public release without migration strategy for user data ## Live repo today - Supported max **`FA_PROJECT_USER_VERSION_SUPPORTED_MAX = 6`** — [projectDB.md](../../../docs/database/projectDB.md) - Flatten = **dev procedure** that resets ladder to bootstrap **1** (below), not current shipped state ## Target after flatten (procedure outcome) - **`PRAGMA user_version` 1** only shipped revision - **`FA_PROJECT_USER_VERSION_SUPPORTED_MAX = 1`** in **`faProjectDbMigrateWiring.ts`** - Fresh: **0** → bootstrap → **1** + default world seed - At **1**: **`applyFaProjectMigrations`** no-op (or idempotent patches only) - Other versions: unsupported (throws) ## Flatten procedure (checklist) 1. Read [docs/database/projectDB.md](../../../docs/database/projectDB.md); list tables/columns/indexes to keep 2. Merge DDL into **`faProjectDbSchemaDdl.ts`** (**`applyFaProjectProjectDataSchemaV1`**, **`applyFaProjectContentSchemaV1`**) 3. Simplify **`faProjectDbMigrateWiring.ts`** — max version **1**, remove legacy steps 4. Delete obsolete migration-only helpers 5. Rewrite **`_tests/faProjectDbMigrate.vitest.test.ts`**; update DDL tests 6. Docs: **projectDB.md**, **templateCustomFields.md**, **AGENTS.md**, **README.md** if needed 7. Changelog: older dev **`.faproject`** must be recreated (current **`package.json`** version only) 8. **Full** **`yarn testbatch:verify`** before commit (schema squash touches electron + docs + broad tests) ## Adding migrations again (after flatten) 1. Bump **`FA_PROJECT_USER_VERSION_SUPPORTED_MAX`** 2. Add **`applyFaProjectContentSchemaV2`** or **`migrateProjectDataV1ToV2`** 3. Chain in **`applyFaProjectMigrations`** 4. Update **projectDB.md** + tests No long historical ladder unless real user upgrades require it. ## Related - [fantasia-sqlite-main](../fantasia-sqlite-main/SKILL.md) - [docs-database.mdc](../../rules/docs-database.mdc) - [flatten-database-schemas.mdc](../../rules/flatten-database-schemas.mdc) ## Types Shared types → **`types/`**. See [types-folder.mdc](../../rules/types-folder.mdc).