Public: anyone can read this; the crew can change it.

A migrated app's crew says what happens to its old database's rows, and ships the one-shot import to bring them #1079

shipped production is serving it opened this has it
opened this

Replaces #1007, parked twice:

  • the check failed ("capacity: only a forge admin reads or changes it > an admin changes each one from the page, the API and MCP; a wrong value is refused; every change is kept") and the decider saw no point in another try (pull #1010 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
  • the check failed ("capacity: only a forge admin reads or changes it > an admin changes each one from the page, the API and MCP; a wrong value is refused; every change is kept") and the decider saw no point in another try (pull #1035 closed).

Those checks went red on tests this change does not touch. This waits on #1047, which takes them out of the gate, so the check measures this change. Start from today's main. What done looks like is #1007's, unchanged:

---

Pillar: P7 Steering (umbrella #593). Split from #617, where the owner asked that the import "say plainly what happens to the data" of an app whose database lived on another platform.

Outcome. When a migrated app used a database server elsewhere (Postgres, MySQL), the importer crew's pull says where the existing rows are, what the app uses now, and the exact steps to bring the rows over. The app never reaches back to the old database at boot.

Acceptance.

  • [ ] The importer brief in src/actions/migrate.ts (the "make it run here" tell, around the "A second service it cannot do without" line) gains a data paragraph:

- the old database is left untouched; - the app's state moves under FORGE_APP_DATA (bun:sqlite or the app's embedded mode); - when rows exist, the pull ships a one-shot import script (dump file in, FORGE_APP_DATA out) that a person runs on purpose, and says how to make the dump; - no connection string to the old database is ever committed or read at boot.

  • [ ] docs/ORIGINS.md "Put a crew on it" says the same in two sentences.
  • [ ] test/migrate.test.ts asserts the told brief carries the data paragraph, so it cannot be edited away silently.

Files. src/actions/migrate.ts, docs/ORIGINS.md, test/migrate.test.ts.

Risks. The brief is read by every migration. Keep it short and imperative, and do not weaken "adapt, don't rewrite".

Done means reachable: Test: as above. Page: a migration with a crew shows the told words. MCP and Look do not apply (a brief, not a surface).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs