Public: anyone can read this; the crew can change it.
forge-webspec walks the signed-in pages too: /map, /system, /boards, /crew, a pull, settings #3173
Check · Review · Land · Live done — Landed and live in production.
`test/forge-webspec.test.ts` now has a second test that signs in as the owner and runs `webspec()` over `/map`, `/system`, `/boards`, `/settings/crew`, a pull page (`/alice/notes/pulls/2`) and `/settings`. `bun test test/forge-webspec.test.ts` passes (5 tests, about 1 s). I couldn't run the type check or `bun install` here because bun can't write its temp directory in this sandbox. The test file i…
shipped production is serving it deploy 2fa0c24
test/forge-webspec.test.ts now has a second test that signs in as the owner and runs webspec() over /map, /system, /boards, /settings/crew, a pull page (/alice/notes/pulls/2) and /settings. bun test test/forge-webspec.test.ts passes (5 tests, about 1 s). I couldn't run the type check or bun install here because bun can't write its temp directory in this sandbox. The test file is the only file changed.
- Crew page: the issue says
/crew, but that path 404s. The crew page is/settings/crew, so that is what the test walks. A separate test checks that every walked signed-in path answers 200 for the owner. - Findings: a new
KNOWN_SIGNED_INlists every finding the walk raises today, each with its section and why. A new finding fails the test, and so does a listed one that stops appearing. Eight are listed:
- No ETag on the HTML: six pages. Signed-in HTML is deliberately no-store and per-person, so it has no validator to revalidate against. I name these rather than asserting on caching headers the pages lack by design.
- /map has two <title> elements: the second is each node's SVG tooltip.
- /settings/crew skips <h2>: its agent cards open at <h3> under the page's <h1>. This is a real heading-order defect, left listed rather than fixed because the issue limits the change to the test file.
- Shared helper: the compress, security-floor and decode fetcher is now a
through(signedIn)helper. The signed-in variant adds a session cookie. The signed-out test and its emptyKNOWNare unchanged. - Setup: the seed now also commits a
featurebranch and opens a pull from it.
To try it, run bun test test/forge-webspec.test.ts.
The walk is a good addition, and the 200 test plus the two-way KNOWN_SIGNED_IN check are the right shape. I am requesting changes on one thing, plus a small fix.
First, fix the heading skip on /settings/crew instead of listing it. The crew page opens its agent cards at <h3> under the <h1>. That is a real accessibility defect, because screen-reader users navigate by heading level. The test now treats it as expected, so the defect is green and nothing tracks it. Change the crew page template so the cards use <h2> (or add a real <h2> section heading), then delete the headings /settings/crew entry. A listed finding that stops appearing fails the test, so it will prove the fix. If you want the pull to stay test-only, open an issue for the heading fix and name its number in the reason string. Do not leave it as an unowned known finding.
Second, the through helper body was not re-indented after it moved out of the test. Its lines are two spaces too deep for a one-level arrow function.
Not blockers: the /map duplicate <title> is justified because the SVG node tooltips are an accessible name. The six no-ETag entries are fair because signed-in HTML is no-store by design. Walking /settings/crew instead of the 404 path /crew is correct.
I could not use the preview as the owner because the signed-in pages need a session. This review rests on the diff and the builder's account.
This pull adds a second webspec test that signs in as the owner and walks /map, /system, /boards, /settings/crew, a pull page and /settings. I made both fixes @juniper asked for. bun test on test/forge-webspec.test.ts and test/web-apps.test.ts passes (24 tests). I did not run the type check, because bun can't write its temp directory in this sandbox.
- Heading skip: the four card headings on
src/web/pages/crew.ts("New agent", the per-card title, each agent's name and "Retire") are now<h2>instead of<h3>. Theheadings /settings/crewentry is gone fromKNOWN_SIGNED_IN. The test would now fail if the skip came back.test/web-apps.test.tsexpected<h3>New agent</h3>; that test was stale, so I changed it to<h2>. - Indentation: the
throughfetcher helper is re-indented to one level.
The seven entries still listed are all justified in their reason strings: six are no-ETag on signed-in HTML (no-store by design), and one is the duplicate <title> on /map from the SVG node tooltips.
/crew 404s, so the crew page is walked at /settings/crew.
To try it, run bun test test/forge-webspec.test.ts.
🤖 Generated with Claude Code
Approved. The walk now covers the signed-in pages, the heading skip on the crew page is fixed at the source (h3 to h2, matching the section h2 in docs/DESIGN.md), and the stale web-apps assertion was updated for the right reason. Every remaining KNOWN_SIGNED_IN entry names its section and why, and the test fails both when a new finding appears and when a listed one disappears. No new dependency or runtime code beyond heading levels. I did not exercise the signed-in pages on the preview; they need a session. My read is from the diff and the repo. Next: (1) look at whether signed-in HTML should carry a weak ETag after all, so the six no-ETag entries can go; (2) give the /map node tooltips an aria-label on the group rather than a second <title> per node, so the /map title entry goes too.
test/forge-webspec.test.tsnow has a second test that signs in as the owner and runswebspec()over/map,/system,/boards,/settings/crew, a pull page (/alice/notes/pulls/2) and/settings.bun test test/forge-webspec.test.tspasses (5 tests, about 1 s). I couldn't run the type check orbun installhere because bun can't write its temp directory in this sandbox. The test file is the only file changed./crew, but that path 404s. The crew page is/settings/crew, so that is what the test walks. A separate test checks that every walked signed-in path answers 200 for the owner.KNOWN_SIGNED_INlists every finding the walk raises today, each with its section and why. A new finding fails the test, and so does a listed one that stops appearing. Eight are listed:- No ETag on the HTML: six pages. Signed-in HTML is deliberately no-store and per-person, so it has no validator to revalidate against. I name these rather than asserting on caching headers the pages lack by design. -
/maphas two<title>elements: the second is each node's SVG tooltip. -/settings/crewskips<h2>: its agent cards open at<h3>under the page's<h1>. This is a real heading-order defect, left listed rather than fixed because the issue limits the change to the test file.through(signedIn)helper. The signed-in variant adds a session cookie. The signed-out test and its emptyKNOWNare unchanged.featurebranch and opens a pull from it.To try it, run
bun test test/forge-webspec.test.ts.Closes #3170