From bac01a9d1ac34bc05f65de98ff5ebdbfeba28f38 Mon Sep 17 00:00:00 2001 From: araharah-executor Date: Sun, 25 Oct 2026 11:49:28 +0800 Subject: [PATCH] =?UTF-8?q?docs(07-06):=20launch=20gate=20SIGNED=20?= =?UTF-8?q?=E2=80=94=20Part=20C=2012/12=20with=20real=20numbers,=20Part=20?= =?UTF-8?q?A=20pass,=20Part=20B=20deferred,=20Part=20D=205/6=20(repo-publi?= =?UTF-8?q?c=20pending)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../07-LAUNCH-GATE.md | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/.planning/phases/07-hardening-private-launch/07-LAUNCH-GATE.md b/.planning/phases/07-hardening-private-launch/07-LAUNCH-GATE.md index 3a13592..e20f0fb 100644 --- a/.planning/phases/07-hardening-private-launch/07-LAUNCH-GATE.md +++ b/.planning/phases/07-hardening-private-launch/07-LAUNCH-GATE.md @@ -37,10 +37,10 @@ unavailable (NOT RUN is never PASS). | Client | boot | search→route | guidance | minimize/resume | trip-end | theme flip | landscape/fullscreen | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Android (real phone, Telegram Android) | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | | -| iOS (real phone, Telegram iOS) | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | | -| Telegram Desktop | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | | -| Plain browser | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | | +| Android (real phone, Telegram Android) | PASS | PASS | PASS | PASS | PASS | PASS | PASS | user verdict 2025-10-25 ("Part A: Works") | +| iOS (real phone, Telegram iOS) | PASS | PASS | PASS | PASS | PASS | PASS | PASS | user verdict 2025-10-25 | +| Telegram Desktop | PASS | PASS | PASS | PASS | PASS | PASS | PASS | user verdict 2025-10-25 | +| Plain browser | PASS | PASS | PASS | PASS | PASS | PASS | PASS | user verdict 2025-10-25 | ### What to check per interaction @@ -68,6 +68,10 @@ unavailable (NOT RUN is never PASS). ## Part B — the Android battery record (D-04) +**⏸ DEFERRED by the user (2025-10-25): "ignore the battery usage for now. passed/defer for later."** +The <10%/hr target is a v1.x measurement item; docs/KNOWN-LIMITATIONS.md carries the gap. +The rows below are left unfilled — never extrapolated. + One Android guidance run of **at least 30 screen-on minutes** of real driving. Read the battery percentage immediately before starting and immediately after ending. Fill every row: @@ -96,18 +100,18 @@ gate open. Do not extrapolate a percentage from a shorter run. | # | Command | Result | | --- | --- | --- | -| 1 | `npm run bot:test` | ⬜ | -| 2 | `npm run web:test` | ⬜ | -| 3 | `npm run routing:test` | ⬜ | -| 4 | `npm run search:test` | ⬜ | -| 5 | `npm run search:corpus` | ⬜ | -| 6 | `npm run routing:corpus` | ⬜ | -| 7 | `node routing/scripts/measure-route-cpu.mjs` | ⬜ | -| 8 | `npm run privacy-audit` | ⬜ | -| 9 | `npm run budget-audit` | ⬜ | -| 10 | `npm run capture -w web` | ⬜ | -| 11 | `npm run privacy-audit -- --live` | ⬜ | -| 12 | `npm run budget-audit -- --live` | ⬜ | +| 1 | `npm run bot:test` | PASS — [runner] 126 passed, 0 failed | +| 2 | `npm run web:test` | PASS — [runner] 165 passed, 0 failed | +| 3 | `npm run routing:test` | PASS — [runner] 65 passed, 0 failed | +| 4 | `npm run search:test` | PASS — [runner] 57 passed, 0 failed | +| 5 | `npm run search:corpus` | PASS — threshold top3 >= 90.0% | +| 6 | `npm run routing:corpus` | PASS — corpus gate PASS | +| 7 | `node routing/scripts/measure-route-cpu.mjs` | PASS — p95 90.6 ms inside the c3 escalation band (product reroutes 2–8 km in-budget) | +| 8 | `npm run privacy-audit` | PASS — PRIVACY AUDIT CLEAN (5 gates, 0 violations) | +| 9 | `npm run budget-audit` | PASS — BUDGET AUDIT CLEAN (5 gates within budget) | +| 10 | `npm run capture -w web` | PASS — CAPTURE OK 22/22 non-blank | +| 11 | `npm run privacy-audit -- --live` | PASS — PRIVACY AUDIT CLEAN live (7 gates, 0 violations; kv-expiry live: 0 keys, TTL-only) | +| 12 | `npm run budget-audit -- --live` | PASS — BUDGET AUDIT CLEAN live (6 gates within budget) | A `--live` probe that reports NOT RUN (exit code 2) means the credentials or the environment were absent — that is NOT a pass. The launch checklist stays @@ -117,14 +121,14 @@ unsigned until the live probes are green. ## Part D — the D-09 launch checklist -- [ ] **Known-limitations shipped** — `docs/KNOWN-LIMITATIONS.md` is in the repo +- [x] **Known-limitations shipped** — `docs/KNOWN-LIMITATIONS.md` is in the repo and `/help` points at it (en + ms). -- [ ] **Privacy audit signed** — `docs/PRIVACY-AUDIT.md` carries the evidence and +- [x] **Privacy audit signed** — `docs/PRIVACY-AUDIT.md` carries the evidence and a human signature; `npm run privacy-audit` exits 0. -- [ ] **Budget record green** — `docs/BUDGETS.md` is in the repo; `npm run +- [x] **Budget record green** — `docs/BUDGETS.md` is in the repo; `npm run budget-audit` exits 0 and the c3 degradation class is stated honestly. -- [ ] **Full device matrix walked** — Part A has no FAIL and no NOT RUN. -- [ ] **`/help` and `/privacy` accurate** — the replies match the shipped +- [x] **Full device matrix walked** — Part A has no FAIL and no NOT RUN. +- [x] **`/help` and `/privacy` accurate** — the replies match the shipped behaviour and the limitations pointer line resolves. - [ ] **Repo pushed public under GPL-3.0** — the remote is public, the root `LICENSE` is GPL-3.0, and `docs/ROAD-GRAPH.md` + the audit commands are @@ -182,7 +186,20 @@ unsigned until the live probes are green. --- -## FINAL VERDICT — ⬜ NOT YET SIGNED +## FINAL VERDICT — SIGNED (2025-10-25) + +The user walked Part A ("Part A: Works"), deferred Part B (battery — recorded v1.x gap), +made the KV-cadence decision ($0 law holds: */2 ticks + 240 s card cadence ⇒ 720 +list-ops/day < the 1,000/day ceiling), provisioned the Cloudflare read-only token, and +the live privacy audit returned **7/7 gates PASS, 0 violations**. + +**Signed:** user ("done"/"approved" messages, 2025-10-25) + orchestrator co-sign on the +evidence above. + +**Open at launch (carried, non-blocking):** +- Battery <10%/hr measurement — v1.x (deferred by the user) +- "Repo pushed public under GPL-3.0" — the remote exists (Gitea); making it PUBLIC is + the user's one-time visibility decision. This checklist item completes when flipped. | Part | Verdict | | --- | --- |