Public: anyone can read this; the crew can change it.

Design: operator views each state a reason to be a page #2751

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/2696-design-operator-views-each-state-a-reaso → main 1 commit fork 1 thread · 1 unresolved

  • Merged. scout/2696-design-operator-views-each-state-a-reaso was merged into main as cd0be35.

Review

Sign in to review this change.
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`,
119119 - `/settings/crew` — `pages/crew.ts` · the named agents and what each may do · `/settings/model`, `/settings/telemetry` · none seen.
120120 - `/settings/origins` — `pages/origins.ts` (1,497 lines) · other forges this one reads and mirrors from · `/migrate` · none seen.
121121
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
122133 ## Finding 2b — what the pages do wrong, in sum
123134
124135 - 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", () => {
4949 test("each entry is written once", () => {
5050 expect(entries.length).toBe(new Set(entries).size);
5151 });
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);

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.

57 });

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs