Release process
Spark ships in a fixed order so that nothing goes live before the pieces it depends on.
Order
- Contracts (
spark-contracts): new shared types first. Services compile against them. - Shared libraries (such as
spark-storage), when they changed. - Data-producing services: services other services read from, such as
spark_metaandspark_tiktok_snapchat(their read-only snapshot routes). - Backend: new proxy routes, permissions and their migration. The browser's only door must exist before the service behind it.
- The new or changed internal service, such as
spark_launch. - Frontend last, because its pages call the backend.
Rules
- Package from a merged, clean commit, never from a working tree with local changes. Record the exact commit in the release notes.
- Every step has a check (health, a read-only call, a smoke test) and a rollback. Stop at the first failed check and roll that step back.
- Changes to contracts and data are additive, so the previous version of a service keeps working while the next one rolls out.
- Database permission changes are done by the database owner only.
- Configuration values are set on the target only, compared by fingerprint, and never copied into notes, tickets or chat.
- Only one instance of a service that runs scheduled jobs (nightly checks, digests, retention) may run at a time.
- Features that are built but not yet released are marked Rolling out in this documentation.