Summary
On self-host, the boot migration refuses to start when an integration was created by an older version that never recorded a specHash. The server exits on boot instead of backfilling, so any self-host upgrade past the version that introduced specHash hard-fails (on Railway the health check just rolls back).
Error
[executor] failed to start: Error: Monolith <id>/google/google has no specHash; serving state cannot be migrated
at specHashFor (/app/apps/host-selfhost/dist-server/serve.js:208389:18)
at planMigration (/app/apps/host-selfhost/dist-server/serve.js:208514:34)
Reproduce
# A /data volume with an integration created by an older self-host version → crash on boot
docker run --rm -v <existing-data>:/data -e EXECUTOR_DATA_DIR=/data \
ghcr.io/rhyssullivan/executor-selfhost:1.5.32
# exits 1 with the error above
# A fresh /data volume → boots fine (generates secret.key/auth-secret.key, "Listening")
docker run --rm -v <empty-data>:/data -e EXECUTOR_DATA_DIR=/data \
ghcr.io/rhyssullivan/executor-selfhost:1.5.32
Confirmed both cases against 1.5.32. The integration in my /data (a Google connection, plus a few OpenAPI/MCP ones) predates specHash.
Expected
planMigration should backfill (or tolerate a missing) specHash rather than throwing, so an existing self-host DB can migrate forward instead of being left un-bootable.
Summary
On self-host, the boot migration refuses to start when an integration was created by an older version that never recorded a
specHash. The server exits on boot instead of backfilling, so any self-host upgrade past the version that introducedspecHashhard-fails (on Railway the health check just rolls back).Error
Reproduce
Confirmed both cases against
1.5.32. The integration in my/data(a Google connection, plus a few OpenAPI/MCP ones) predatesspecHash.Expected
planMigrationshould backfill (or tolerate a missing)specHashrather than throwing, so an existing self-host DB can migrate forward instead of being left un-bootable.