RELEASE PLAN — PHASE 9
VietGara — Production Readiness
Version 9.0 — October 9, 2026 · Cloud: Google Cloud Platform (GCP) · Backend: Go
1. Introduction
Release 1.5 shipped its features (revenue report, e-mail notifications, the dashboard, OpenTelemetry tracing) but not its hardening. The October 2026 review found:
| Gap | Evidence | Now handled in |
|---|---|---|
| No rate limiting | kong.yml defines services and routes, no plugins | Phase 8, Release 8.0 |
| No Compliance Checklist or security review | The checklist is cited by several documents but does not exist | Phase 8, Release 8.0 |
| MFA | Not built | Phase 6, Release 6.1 |
| Settlement E2E and money-path coverage | No scenario; billing 63–68%, repair order about 70% | Phase 4 |
| No load test | No script in any repository; NFR-PF-06 never exercised | Release 9.0 |
| Observability beyond tracing | No metrics, alert rules, central logging or dashboards (NFR-OB-02..04) | Release 9.1 |
| Backups | Daily pg_dump exists; no off-site copy, no restore drill (NFR-BR-01, 04) | Release 9.1 |
| No infrastructure as code | No Terraform; vietgara-infra holds the Docker Compose staging only | Release 9.2 |
The phase has no new user-facing features. Open launch (public store listings, unrestricted sign-up) waits for it; invited garages can start earlier on the existing staging with the daily dump.
2. Overview of the 3 Releases
| Release | Name | Main Modules | Demoable Value |
|---|---|---|---|
| 9.0 | Load Test & Performance | k6, backend, database | The whole flow holds its latency targets at about 50 garages |
| 9.1 | Observability & Disaster Recovery | Metrics, alerts, logging, backups | An induced fault pages the on-call channel within 2 minutes; a restore drill is signed off |
| 9.2 | Infrastructure as Code | Terraform, GCP environments | A new environment is created from code and runs the stack |
3. Release Details
Release 9.0 — Load Test & Performance
- Load test (NFR-PF-06). A k6 script drives Quote → Approval → Repair Order → Close → Settlement → Payment → Dashboard against staging, seeded with about 50 garages from the shared dataset (Release 4.0) with realistic customers, vehicles and parts. Record P95 for read APIs (NFR-PF-01), write APIs (NFR-PF-02) and event latency (NFR-PF-05). Fix what misses a target (indexes, N+1 queries, pool sizes) and keep the script in CI as a manual workflow.
- The inventory documents, stock count, job picker and stock reservation of Phase 7 are part of the run.
- Definition of Done: the 50-garage run meets NFR-PF-01, 02 and 05; results are stored in the repository; the run is repeatable from the dataset with one command.
Release 9.1 — Observability & Disaster Recovery
- Metrics and health. Prometheus metrics for requests, errors, latency, database pool, Kafka lag and outbox backlog per module, plus liveness and readiness endpoints.
- Alerting (NFR-OB-02). A 5xx-rate alert and an outbox-backlog alert that reach Slack or PagerDuty within 2 minutes.
- Central logging (NFR-OB-03). Structured logs shipped to a central store, retained 30 days, searchable by garage id and trace id.
- Dashboards (NFR-OB-04). Grafana dashboards for latency, error rate and throughput per module.
- Backup and restore (NFR-BR-01, 04). Automated daily backups copied to a GCS bucket with retention of 30 copies, and a documented restore drill executed once with its duration and result recorded.
- Definition of Done: stopping a dependency on staging raises the alert within 2 minutes; logs for one garage are found by id; the drill restores a backup into a clean database and the E2E smoke suite passes against it.
Release 9.2 — Infrastructure as Code
- Terraform for the GCP dev, staging and production environments: network, Cloud SQL (PostgreSQL), Memorystore, Pub/Sub or the chosen Kafka service, secrets, the storage bucket and its Workload Identity binding, the container platform chosen by the ADR (GKE or Cloud Run), Kong and DNS.
- CI plan and apply workflows with a review step for production; state in a locked GCS bucket.
- The stack that the Compose staging runs is deployed unchanged from the same images, and the runbook (
Deployment_Guide) is updated. - Definition of Done: an empty GCP project is brought to a working staging environment with one apply; the E2E smoke suite passes against it; a destroy and re-create loses nothing that is not restored from backup.
4. Dependency Diagram
flowchart TD P8(["Phase 8 complete"]) --> R90["Release 9.0<br/>Load test & performance"] R90 --> R91["Release 9.1<br/>Observability & DR"] R91 --> R92["Release 9.2<br/>Infrastructure as code"] R92 --> DONE(["Phase 9 complete — open launch"])
Release 9.1 measures against the load profile of 9.0. Release 9.2 comes last so that it codifies the environment as it is operated.