Files
dtf-system/deploy/PRODUCTION_CHECKLIST.md
Cauê Faleiros 7386469404
All checks were successful
Build and deploy / Validate source (push) Successful in 5s
Build and deploy / Integration suite on a real stack (push) Successful in 1m18s
Build and deploy / Secret scan and release gate (push) Successful in 6s
Build and deploy / Publish images and notify Portainer (push) Successful in 1m26s
docs: move the engineering documents into docs/
Thirteen files at the repository root, seven of them documents. Only README.md
earns a place there; the rest are now in docs/ beside the meeting notes, the
client roadmap and the historical material.

The compose files stay. docker-compose.yml is the path the dtf-cloud Portainer
stack reads, so moving it would break deployment, and Docker resolves a compose
file's relative build contexts against its own directory, so moving the other
two would silently break every build. Both reasons are now written down where
someone would otherwise try it.

Correcting references turned up a live fault: the Portainer stack creation
instructions still named deploy/stack.yaml as the compose path. That file was
removed, so anyone recreating the stack from these instructions would have
failed. It names docker-compose.yml now, with the reason it stays at the root.

ROADMAP.md keeps the paths its closed findings were written with, and says so at
the top. Those entries record where a fault was when it was found; rewriting
them to match a later layout would make the record less true, not more.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 17:52:20 -03:00

2.5 KiB

Production release checklist

Every item is required. A checked box records reviewed evidence; it is not a substitute for production_preflight.py, CI, staging acceptance, or change approval.

Application and external contracts

  • docs/PRODUCTION_INPUTS.md has owners, decisions, and evidence for every item.
  • Production R2, freight, Mercado Pago, Tiny/Olist, and WhatsApp adapters have sandbox contract tests and least-privilege credentials.
  • Payment webhook authenticity, replay handling, and idempotency are tested.
  • Docker secret *_FILE loading is implemented and tested without logging values.
  • Production account verification/recovery and the length/grade authority flow are approved.
  • No factory automation or automatic print pre-flight was added by inference.

Platform and recovery

  • DNS/TLS proxy routes and firewall rules are approved; only Site and Kanban have published web ports.
  • External, versioned Swarm secrets exist and match the configured names.
  • The PostgreSQL volume is encrypted/backed up and pinned to the labeled node.
  • Scheduled offsite database/object backups and an isolated restore rehearsal pass.
  • ClamAV signatures are current and have a controlled update/rebuild process.
  • Central alerts, logs, clocks, capacity, and on-call ownership are verified.

Release and deploy

  • Protected Gitea runner, main branch, registry permissions, and variables are reviewed.
  • Base, database, and scanner images use approved immutable digests; application SHA tags remain pullable and the digest resolved by each deployment is recorded.
  • Full regressions and production preflight pass on the exact release commit.
  • HIGH/CRITICAL Trivy findings are fixed or formally risk-accepted with evidence.
  • Staging acceptance passes with provider sandboxes and production-like topology.
  • Four production approval variables equal approved only after their reviews.
  • The generated docker stack config contains no secret values or placeholders.
  • Health probes, monitoring, rollback, and a backup restore are observed in staging.
  • The Portainer webhook redeploys the one dtf-cloud stack and post-deploy HTTPS health probes pass.

Rollback

  • Previous application image digests remain pullable.
  • Portainer rollback by full commit IMAGE_TAG has been rehearsed; it does not roll back the database.
  • Database migration forward/restore ownership and maintenance procedure are approved.