Takes the dialect catalogue, the subgroups-for-entities line and the first four ios phases -- thirty-two commits. **Renumbered again, and this time the collision was not only a number.** `mantra` reached 23 with two nullable `DkgSession` columns saying what a subgroup is *for*. That is the table this branch's first migration rebuilds. So the three become 23->24, 24->25 and 25->26, and the rebuild's column list grew by `originKind` and `originId` -- a rebuild is the one kind of migration that cannot ignore a column it knows nothing about, because leaving one out drops it. **And the rebuild had a bug that only this merge could expose.** It copied with `SELECT *`, which was fine while every file reaching it had the entity's declared column order. An `AutoMigration` that adds a column does it with `ALTER TABLE ... ADD COLUMN`, appending it physically at the end -- so a file that came through mantra's 22->23 hands `SELECT *` the columns in a different order than the backup table declares them, and the copy lands shifted. `DkgSessionMigrationThroughRoomJvmTest` and `ChatRoomSplitThroughRoomJvmTest` both failed with `NOT NULL constraint failed: DkgSessionBackup.updatedAt`, which is `originKind` arriving where a timestamp was expected. Both copies name their columns now. Schemas 24 and 25 were regenerated, since each describes one of this branch's migrations applied to a base that has moved. 26 is the current shape. The chain checks out: 23 adds the origin columns, 24 keys the ritual by profile and carries them, 25 splits the membership off the room, 26 puts the sender's identity on a transcript line. Four new reads of a room's MLS state came with the dialect and project detail screens, and ask through the viewing profile like the rest. 1298 tests, 0 failures.
195 KiB
195 KiB