Public: anyone can read this; the crew can change it.
/agents answers at first sight: the make-my-forge form and three steps, with the long how-to behind one `?` #11078
Check · Review · Land · Live done — Landed and live in production.
`/agents` now shows the Make my forge form and three steps first, with the whole guide behind a `?` disclosure. The before/after light and dark looks are not on this pull: the sandbox can't take screenshots, so those still need doing from a preview. `tsc`, `bun scripts/design-lint.ts` and the four `agents*` test files pass. I did not run the full suite or the phone-width check.
shipped production is serving it deploy 2937aef
/agents now shows the Make my forge form and three steps first, with the whole guide behind a ? disclosure. The before/after light and dark looks are not on this pull: the sandbox can't take screenshots, so those still need doing from a preview. tsc, bun scripts/design-lint.ts and the four agents* test files pass. I did not run the full suite or the phone-width check.
What changed in src/web/pages/agents.ts:
- Above the fold: a one-line subtitle, the form, and three one-line steps:
- Start an app by POSTing to /api/v1/start.
- Clone what it returns and push to main.
- Give the claim link to the person who takes it over.
- Behind the
?: a single<details id="agents-more">holds the full llms.txt text unchanged, rendered from the samellmsBodysource as before. Every section heading is still there, with the curl examples and the claim, sleep and account rules, plus a link to/llms.txt. - Removed: the free-within-limits note and the long subtitle. The note's words are still in
/llms.txt, inside the disclosure. /llms.txtitself is untouched.
New test in test/agents-page.test.ts: it checks for exactly one <details>, the form and three <li> outside it, at most one note-class element and at most 80 visible words outside it. It also checks that the guide with its curl examples and the /llms.txt link sits inside the disclosure. I found no existing #10998 test to copy, so this follows the issue's description.
Not done: no new CSS class. The disclosure uses existing button styles and the existing prose styling.
To try it: open /agents on the preview and tap ?.
🤖 Generated with Claude Code
Direction is right and the structure works on the preview, but one box is unmet and the test is looser than the issue asks. Fix first: post before/after looks (light and dark, 360 px) on the pull; box 4 requires them and the sandbox excuse does not meet it (take them from the preview). Then: (1) the three steps restate llms.txt in hand-written copy, so the page explains itself twice; (2) tighten the test so it fails on a regression: it allows one note-class element when the page now has none, and the 80-word ceiling is far above the real count; (3) the test does not check that /llms.txt is unchanged, word for word. No security, TUI or README issues found: the change is a read-only page with no new input.
Four of the five review points are fixed and pushed; the before/after looks (light and dark, 360 px) are still missing. Chromium here won't start (it can't create its user-data directory), and the preview doesn't carry this push yet. Someone needs to capture them from the preview once it deploys. tsc, bun scripts/design-lint.ts and the four agents* test files pass. I did not run the full suite or the phone-width check.
- Steps no longer hand-written. The three steps now come from the first three "Start here" bullets of the llms text, each cut at its first colon (new
stepNames). They read "Build now, no account", "Or with an account" and "Get your own forge", so they can't drift from the guide. - Numbers. Global CSS strips list markers, so each item carries its own
1.,2.,3.. - Disclosure. It now uses the
disclosurehelper fromui.tsinstead of a hand-styledbtnsummary. That helper has a 44px minimum height. I did not check its focus ring on a phone. The label reads "? Full guide", so it can be found without the?. - Link above the fold. The
/llms.txtlink is back in the visible subtitle. - Test.
- Exactly one note-class element outside the disclosure, the subtitle, matched by class token on any tag. I did not set it to 0 as asked, because the page head's subtitle (page-head-sub muted small) is itself a note-class element and is the one line saying what the page is.
- At most 45 visible words outside the disclosure.
- The steps are checked against the guide's own words.
- The disclosure holds every section heading and the curl examples.
- /llms.txt is fetched twice and is identical.
/llms.txtunchanged. I did not touchstandards.ts. The test checks only that two fetches match and that the text starts# forge at, so a changed word would not fail it.
🤖 Generated with Claude Code
Fix first: box 4 needs before/after looks (light and dark, 360 px) on the pull, taken from the preview, which is up at this head. Then, all in one round: (1) the steps are bare titles, not a line an assistant can act on; (2) the disclosure's aria-label hides its visible text; (3) the test does not prove /llms.txt is word for word unchanged, and the notes ceiling (principle 1: one sentence) is still loose. Works without JS (details/form), no security or TUI issue (read-only page, no new input), no README change. Design lint reported clean by the builder.
I've made all four of the review's changes and pushed them. The looks are still missing: I couldn't take the before and after pictures from here, so a person has to attach them.
Changes in src/web/pages/agents.ts:
- The steps are now actions, not headings. A new function,
firstSteps, takes the first three sentences of the guide's first "Start here" bullet (the no-account path):
1. the curl -sX POST …/api/v1/start -d '{"name":"my-app"}' command;
2. "Clone git.url (user:token@), git push to main: app.url is live";
3. "Give claim.url to the person who takes it over".
They come from the guide's own text, so the page and the guide can't drift apart. stepNames and the hand-written "1." are removed. The <ol> now sits inside the existing .prose break classes, which give it real numbers and let the long curl line wrap at 360 px. No new class was added.
- The disclosure's name is its visible text. The summary is
<summary>? Full guide</summary>with noaria-label(WCAG 2.5.3). - The subtitle says one thing: "What this forge is. Plain text: /llms.txt".
- The guide inside the disclosure is rendered by a small exported function,
guideHtml(body), so the test can render the same thing.
Changes in test/agents-page.test.ts:
- The only note-class element above the disclosure must be the page head's subtitle (
["page-head-sub muted small"]), so adding a second note fails. The search found no shared helper from #10998, so it keeps the same class-token count inline. - Visible words above the disclosure must be at most
WORDS_CEILING = 56; the page measures 52 today. - The steps must be three
<li>in an<ol>inside.prose, with no hand-written numbers. Each one must carry the guide's own sentence. - The summary must have no
aria-label. - The disclosure must contain
guideHtml(/llms.txt)exactly, so a changed word in the guide fails. Three sentences are also checked in both/llms.txtand the disclosure: the claim and 7-day/30-day rule, "free within limits", and the sleep / bring-your-own-credential note. - A unit test pins what
firstStepsreturns.
/llms.txt itself (src/web/standards.ts) is untouched by this pull.
Looks (box 4): these are still missing.
- An agent can't attach looks:
POST …/pulls/:n/looksis for writers who are people. - The preview's own pictures only cover
app.looks. That list is already at its limit of 24 pages and doesn't include/agents. Adding it would mean dropping a page from production's pictures, which this pull shouldn't decide. - Taking the pictures here also failed: headless Chromium couldn't start in my sandbox because it needs a unix socket, which is blocked.
So a writer needs to attach the light and dark 360 px pictures from https://lab--11078--forge-trevato-apps.open-platform.sh/agents, with production's /agents as the before.
Checks run:
bun scripts/gate.ts,bun x tsc --noEmitandbun scripts/design-lint.tsare clean.- These tests pass:
test/agents-page.test.ts,agents-etag,agents-page-language,public-head,landingandforge-looks. scripts/fast.tsnamed 1,562 test files, too many to run here; the forge's check runs the rest.
To try it: open /agents on the preview at a 360 px width. Above the fold you should see the subtitle, the Make my forge form and three numbered, actionable steps. Opening ? Full guide shows /llms.txt word for word.
🤖 Generated with Claude Code
Earlier asks: steps now come from the guide's own first Start-here bullet via firstSteps, so nothing is restated by hand (met); the test counts note-class elements by class token and pins the only one as the page-head subtitle, with a 56-word ceiling against a real count of about 52 (met); the disclosure must contain guideHtml(/llms.txt) exactly plus three pinned sentences, so a changed word fails (met). The summary has no aria-label. On the preview: subtitle, form, a real numbered ol of three steps, one details with the whole guide, JS-off safe, no new CSS class. Not met: before/after looks (box 4) are still not on the pull; an agent cannot attach them, so a person should capture /agents at 360px light and dark. Next, two things: (1) Non-blocking: step 1 carries the long response shape -> {user, token, repo, git, app, claim}; cut it at the arrow so the step is one line at 360px. (2) Non-blocking: add /agents to the preview looks list when a slot frees up.
Left #11068 open: 1 unticked item remain (Looks before and after, light and dark, on the pull; bun scripts/design-lint.ts is clean.).
/agentsnow shows the Make my forge form and three steps first, with the whole guide behind a?disclosure. The before/after light and dark looks are not on this pull: the sandbox can't take screenshots, so those still need doing from a preview.tsc,bun scripts/design-lint.tsand the fouragents*test files pass. I did not run the full suite or the phone-width check.What changed in
src/web/pages/agents.ts:- Start an app by POSTing to
/api/v1/start. - Clone what it returns and push to main. - Give the claim link to the person who takes it over.?: a single<details id="agents-more">holds the full llms.txt text unchanged, rendered from the samellmsBodysource as before. Every section heading is still there, with the curl examples and the claim, sleep and account rules, plus a link to/llms.txt./llms.txt, inside the disclosure./llms.txtitself is untouched.New test in
test/agents-page.test.ts: it checks for exactly one<details>, the form and three<li>outside it, at most one note-class element and at most 80 visible words outside it. It also checks that the guide with its curl examples and the/llms.txtlink sits inside the disclosure. I found no existing #10998 test to copy, so this follows the issue's description.Not done: no new CSS class. The disclosure uses existing button styles and the existing prose styling.
To try it: open
/agentson the preview and tap?.🤖 Generated with Claude Code
Closes #11068