Document verifiable public launch readiness
This commit is contained in:
parent
6302fd4045
commit
62f1c4d9fc
|
|
@ -235,7 +235,9 @@ presented as an FCM or APNs implementation; an external provider must resolve
|
||||||
the stable user recipient to registered devices.
|
the stable user recipient to registered devices.
|
||||||
|
|
||||||
The commands, boundaries, and unclaimed production properties are documented
|
The commands, boundaries, and unclaimed production properties are documented
|
||||||
in [the operations runbook](docs/operations.md).
|
in [the operations runbook](docs/operations.md). Use the
|
||||||
|
[public launch checklist](docs/public-launch-checklist.md) to keep automated
|
||||||
|
evidence separate from provider, staffing, and jurisdiction-specific approvals.
|
||||||
|
|
||||||
Local defaults are intentionally limited to local development. Copy
|
Local defaults are intentionally limited to local development. Copy
|
||||||
`.env.example` to `.env` and replace every secret before any public deployment.
|
`.env.example` to `.env` and replace every secret before any public deployment.
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,10 @@ Check an environment without printing its secret values:
|
||||||
./scripts/check-environment-readiness.sh .env --require-release
|
./scripts/check-environment-readiness.sh .env --require-release
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The complete promotion sequence and the human/provider decisions that these
|
||||||
|
scripts cannot prove are listed in
|
||||||
|
[`docs/public-launch-checklist.md`](public-launch-checklist.md).
|
||||||
|
|
||||||
Provider downloads can be imported into that same file without placing
|
Provider downloads can be imported into that same file without placing
|
||||||
secrets on a command line or printing them:
|
secrets on a command line or printing them:
|
||||||
|
|
||||||
|
|
|
||||||
116
docs/public-launch-checklist.md
Normal file
116
docs/public-launch-checklist.md
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
# Public launch checklist
|
||||||
|
|
||||||
|
This checklist separates properties the repository can verify from decisions
|
||||||
|
that require the operator, a provider, or jurisdiction-specific legal review.
|
||||||
|
Checking a box is an operator record, not proof created by the application.
|
||||||
|
Do not replace unknown values with estimates.
|
||||||
|
|
||||||
|
## 1. Freeze the candidate
|
||||||
|
|
||||||
|
- [ ] Record the candidate Git revision and immutable application, PostGIS,
|
||||||
|
socket-proxy, and edge image references.
|
||||||
|
- [ ] Confirm that the target is the independent production checkout, Compose
|
||||||
|
project, database, volumes, secrets, Google/Firebase project, SMTP
|
||||||
|
credentials, and Android identity.
|
||||||
|
- [ ] Keep development, hackathon test, and production credentials separate.
|
||||||
|
- [ ] Run the repository quality suite and retain its non-secret evidence.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git rev-parse HEAD
|
||||||
|
./scripts/quality.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Verify production configuration without exposing secrets
|
||||||
|
|
||||||
|
Run both checks against the single ignored production `.env`. The first reports
|
||||||
|
capabilities; the second additionally enforces the repository's release
|
||||||
|
requirements.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./scripts/validate-production-env.sh .env whoneedhelp.com
|
||||||
|
./scripts/check-environment-readiness.sh .env --require-release
|
||||||
|
```
|
||||||
|
|
||||||
|
The release check covers the application origin and secrets, database
|
||||||
|
selection, SMTP and support routing, Google OAuth, browser VAPID, Firebase/FCM,
|
||||||
|
Android package/signing configuration, and production App Links. It does not
|
||||||
|
prove that external providers will deliver successfully after deployment.
|
||||||
|
|
||||||
|
## 3. Record human and legal decisions
|
||||||
|
|
||||||
|
The following decisions are intentionally not generated by code:
|
||||||
|
|
||||||
|
- [ ] Launch jurisdictions and the exact local emergency contacts shown to
|
||||||
|
users have been approved.
|
||||||
|
- [ ] Privacy notice, Terms, medicine/prohibited-items guidance, and voluntary
|
||||||
|
payment/reimbursement wording have been reviewed for those jurisdictions.
|
||||||
|
- [ ] A retention and anonymisation schedule defines each account, safety,
|
||||||
|
dispute, moderation, support, legal, tracking-evidence, and backup record.
|
||||||
|
- [ ] The account-deletion executor and operator procedure have been approved
|
||||||
|
and tested against that schedule before destructive execution is enabled.
|
||||||
|
- [ ] Moderation, support, privacy, account-deletion, content-removal, and
|
||||||
|
incident queues have named owners and monitored contact paths.
|
||||||
|
- [ ] Provider terms and capacity are approved for email, map tiles, Google
|
||||||
|
identity, Web Push, Firebase/FCM, database hosting, backups, and monitoring.
|
||||||
|
- [ ] Representative load measurements from the intended host and traffic shape
|
||||||
|
justify database pools, action-limit policies, replica counts, memory/CPU
|
||||||
|
allocation, alerts, and any scaling thresholds.
|
||||||
|
- [ ] Backup ownership, encryption-key custody, off-site destination, restore
|
||||||
|
procedure, and measured recovery objectives have been approved.
|
||||||
|
|
||||||
|
Until the retention decision and tested executor exist, account-deletion cases
|
||||||
|
remain an audited operator workflow and automatic erasure stays disabled. The
|
||||||
|
software must not claim that an unresolved legal or operational item is
|
||||||
|
complete.
|
||||||
|
|
||||||
|
## 4. Rehearse recovery before promotion
|
||||||
|
|
||||||
|
Create a current custom-format backup and restore it only into the isolated
|
||||||
|
drill database. Then rehearse the current release against that backup.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
backup_output=$(./scripts/backup-compose.sh)
|
||||||
|
backup_path=$(printf '%s\n' "$backup_output" | sed -n 's/^Backup: //p')
|
||||||
|
./scripts/restore-drill-compose.sh "$backup_path"
|
||||||
|
./scripts/upgrade-rehearsal-compose.sh "$backup_path"
|
||||||
|
./scripts/production-rollback-drill.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Local backups and local MinIO drills verify mechanics but are not proof of
|
||||||
|
off-site durability or a production recovery policy.
|
||||||
|
|
||||||
|
## 5. Promote with an explicit rollback point
|
||||||
|
|
||||||
|
Use the release workflow in `docs/operations.md`; do not copy mutable source
|
||||||
|
over a running production checkout. A successful release must retain the
|
||||||
|
generated rollback manifest, the pre-release backup checksum/catalog, and the
|
||||||
|
previous immutable image references. A forward-only migration must be treated
|
||||||
|
as forward-only rather than receiving an invented database rollback.
|
||||||
|
|
||||||
|
## 6. Verify the deployed product
|
||||||
|
|
||||||
|
- [ ] Public HTTPS home, liveness, readiness, WebSocket upgrade, manifest, and
|
||||||
|
`assetlinks.json` return the expected production identity.
|
||||||
|
- [ ] Registration, returning-user login, and settings linking complete against
|
||||||
|
the production Google OAuth client and exact callback origin.
|
||||||
|
- [ ] A production-generated authentication email reaches an external mailbox;
|
||||||
|
sender identity and every URL use the production domain.
|
||||||
|
- [ ] Browser Web Push reaches a real subscribed browser.
|
||||||
|
- [ ] The production Android build signs in, opens verified App Links, receives
|
||||||
|
FCM, and performs user-started foreground location sharing on a physical
|
||||||
|
device.
|
||||||
|
- [ ] The full two-person help flow passes: create, discover, accept, chat,
|
||||||
|
optional tracking, start, handover code, both confirmations, blind review,
|
||||||
|
report/block, and notification delivery.
|
||||||
|
- [ ] The Activity flow passes: create, request to join, approve/decline,
|
||||||
|
withdraw, rejoin, group chat, exact-location disclosure only after
|
||||||
|
approval, and reporting.
|
||||||
|
- [ ] Support, privacy/data, account-deletion, general content-removal, and
|
||||||
|
TAKE IT DOWN submissions reach the correct production operator queues.
|
||||||
|
- [ ] Database, application, worker, email, push, backup, and edge monitoring
|
||||||
|
are visible to the responsible operator.
|
||||||
|
|
||||||
|
Record observed timestamps, revision/image identities, and non-secret evidence
|
||||||
|
paths in `docs/verification.md`. Record failed checks as failed; do not convert
|
||||||
|
them into documentation-only success.
|
||||||
|
|
||||||
|
|
@ -1611,6 +1611,12 @@ None of the observations below describe the current delivery path.
|
||||||
|
|
||||||
## Known work before a public production launch
|
## Known work before a public production launch
|
||||||
|
|
||||||
|
The operator-facing sequence is maintained in
|
||||||
|
[`docs/public-launch-checklist.md`](public-launch-checklist.md). That checklist
|
||||||
|
separates repository-verifiable evidence from external provider, staffing, and
|
||||||
|
jurisdiction-specific decisions; an unchecked or unknown item is not claimed
|
||||||
|
complete.
|
||||||
|
|
||||||
- Promote the tested release from `test.whoneedhelp.com` to the independent
|
- Promote the tested release from `test.whoneedhelp.com` to the independent
|
||||||
production project only after explicit approval. Recheck the production
|
production project only after explicit approval. Recheck the production
|
||||||
health endpoints, migrations, Google callback, and authentication-email flow
|
health endpoints, migrations, Google callback, and authentication-email flow
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user