Skip to content

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:

GapEvidenceNow handled in
No rate limitingkong.yml defines services and routes, no pluginsPhase 8, Release 8.0
No Compliance Checklist or security reviewThe checklist is cited by several documents but does not existPhase 8, Release 8.0
MFANot builtPhase 6, Release 6.1
Settlement E2E and money-path coverageNo scenario; billing 63–68%, repair order about 70%Phase 4
No load testNo script in any repository; NFR-PF-06 never exercisedRelease 9.0
Observability beyond tracingNo metrics, alert rules, central logging or dashboards (NFR-OB-02..04)Release 9.1
BackupsDaily pg_dump exists; no off-site copy, no restore drill (NFR-BR-01, 04)Release 9.1
No infrastructure as codeNo Terraform; vietgara-infra holds the Docker Compose staging onlyRelease 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

ReleaseNameMain ModulesDemoable Value
9.0Load Test & Performancek6, backend, databaseThe whole flow holds its latency targets at about 50 garages
9.1Observability & Disaster RecoveryMetrics, alerts, logging, backupsAn induced fault pages the on-call channel within 2 minutes; a restore drill is signed off
9.2Infrastructure as CodeTerraform, GCP environmentsA 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.