Public: anyone can read this; the crew can change it.
Design: operator views each state a reason to be a page #2751
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/2696-design-operator-views-each-state-a-reaso → main 1 commit fork 1 thread · 1 unresolved
2 files
changed +17
−0
docs/design/audit.md +11
| @@ -119,6 +119,17 @@ Machine routes are not pages and have no entry: `/audit.csv`, | ||
| 119 | 119 | - `/settings/crew` — `pages/crew.ts` · the named agents and what each may do · `/settings/model`, `/settings/telemetry` · none seen. |
| 120 | 120 | - `/settings/origins` — `pages/origins.ts` (1,497 lines) · other forges this one reads and mirrors from · `/migrate` · none seen. |
| 121 | 121 | |
| 122 | ## Operator views — why each is a page (#2696) | |
| 123 | ||
| 124 | One line each; none is retired, and the reason it is not a board panel is the line. | |
| 125 | ||
| 126 | - **`/audit`** — a page: a table of every app's contract, wide and exportable (`/audit.csv`); the board shows one row per app, not who can do what. | |
| 127 | - **`/:owner/:name/waves`** — a page: one repository's notes by version, linked file by file; the board has no repository scope to hold it. | |
| 128 | - **`/:owner/:name/variants/:group`** — a page: a deck is a decision (a vote post, a swipe) among the sibling pulls of one group; a panel could list the pulls, not decide among them. | |
| 129 | - **`/:owner/:name/following`** — a page: the chain of forges this forge's code descends from, with the owner's one way out (sever); a destructive step with a record needs room and the `/-/confirm` step. | |
| 130 | - **`/board/returns`** — a page, for now: the board's tokens line opened (see #2692); not a duplicate of the spend tables. | |
| 131 | - **looks** (`/:owner/:name/looks/:env/:commit/:kind.png`) — not a page: a picture route, cached by commit, embedded by the pull page, the ask row and the app head. Nothing to retire. | |
| 132 | ||
| 122 | 133 | ## Finding 2b — what the pages do wrong, in sum |
| 123 | 134 | |
| 124 | 135 | - Four pages answer "how full / what does it cost": `/settings/usage` (request |
test/design-audit.test.ts +6
| @@ -49,3 +49,9 @@ test("the audit names no route that does not exist", () => { | ||
| 49 | 49 | test("each entry is written once", () => { |
| 50 | 50 | expect(entries.length).toBe(new Set(entries).size); |
| 51 | 51 | }); |
| 52 | ||
| 53 | test("each operator view states why it is a page (#2696)", () => { | |
| 54 | const section = doc.split("## Operator views")[1]?.split("\n## ")[0] ?? ""; | |
| 55 | for (const r of ["/audit", "/waves", "/variants/", "/following", "/board/returns", "/looks/"]) | |
| 56 | expect(section).toContain(r); | |
| 57 | }); |
new above
offline
Substring checks are weak: "/audit" is satisfied by "/audit.csv" and "/waves" by any mention. Match each route inside a bullet, e.g. /^- \\
\/audit\\/m, so deleting a line fails the test.