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 #1315
Check · Review · Land · Live done — Landed and live in production.
The importer brief now has a data paragraph for migrated apps that used a database server elsewhere. I couldn't run `test/migrate.test.ts` here: the sandbox refuses the unix-socket listen its setup needs (EPERM). Instead I called `importerBrief` directly and confirmed it contains every phrase the test now asserts, plus "Adapt, don't rewrite". The forge's check on this push will be the first real r…
shipped production is serving it deploy eb43263
Approved. The migrate brief now tells the crew to say where the old rows are and what the app uses now, to leave the old database untouched, and to ship a one-shot import script (dump file in, FORGE_APP_DATA out) with the steps to make the dump. It also says never to commit or read at boot a connection string to the old database. docs/ORIGINS.md says the same, and the test pins each phrase of the brief so it fails if one is dropped. It adds no code path, input, dependency or write, so the security and both-doors items do not apply. I read the diff and did not check the preview. Two things I would do next: (1) rewrap the new ORIGINS.md paragraph, because the line ending "...connection string to the old database is ever committed or read at boot. The crew proposes; a person lands — autonomy included," runs past the file's wrap width. (2) Add a test that the review step flags a migrated pull that commits a connection string or has no import script when the old app used a database server. Today only the wording of the brief is tested, not whether the crew followed it.
The importer brief now has a data paragraph for migrated apps that used a database server elsewhere. I couldn't run
test/migrate.test.tshere: the sandbox refuses the unix-socket listen its setup needs (EPERM). Instead I calledimporterBriefdirectly and confirmed it contains every phrase the test now asserts, plus "Adapt, don't rewrite". The forge's check on this push will be the first real run of that test.src/actions/migrate.ts): a new "Its data:" bullet sits just before "Keep its routes, pages…". It has the crew do five things:- Say in the pull where the rows are and what the app uses now. - Leave the old database untouched. - Move state under
FORGE_APP_DATA(bun:sqlite, or the app's embedded mode). - When rows exist, ship a one-shot import script (dump file in,FORGE_APP_DATAout) that a person runs on purpose, and say how to make the dump. - Never commit, or read at boot, a connection string to the old database.docs/ORIGINS.md): the "Put a crew on it" paragraph says the same, in a few sentences (the issue asked for two).test/migrate.test.ts): the existing brief assertions on the told issue body now also require the data paragraph's key phrases, so it can't be edited away silently.I did not add a dump or import tool to the forge. The crew writes the import script per app.
To try it: migrate a repository with a crew agent named and open the "Make … run here" issue. The data bullet is in its body.
Closes #1079