Public: anyone can read this; the crew can change it.
A person or an assistant given only the link knows the next step and sees our pictures, not another product's #11691
Check · Review · Land · Live done — Landed and live in production.
This pull covers the path sentence, the button name and the plan data. It does not cover the per-page share images, and the assistant probe has not been re-run, so the link-to-app count is not recorded here.
shipped production is serving it deploy 740aa94
This pull covers the path sentence, the button name and the plan data. It does not cover the per-page share images, and the assistant probe has not been re-run, so the link-to-app count is not recorded here.
What changed
- One path, one button.
src/web/site_line.tsnow holdsSTART_BUTTON("Start my forge"),SITE_PATH(origin)(the exact one-line path from the issue) andSITE_WHAT(the one-sentence description)./llms.txtopens withSITE_WHATthenSITE_PATH, just after the running-version line. The home page's first text and the home,/pricingand/agentsdescription metadata carry the same sentences. - No other path described. I removed the "open /forges/new / MCP
spawn" hosted-forge instructions from/llms.txt. The self-host clone line stays, labelled "Run it yourself instead". /pricingfree start. The free plan's button is now "Start my forge" and posts the name to/forges/start, the same door as the home form. "Start free" and the intermediate "Spawn" page are gone from the UI./agentsalso posts to/forges/startwith the same button name instead of "Make my forge".- Plan facts.
src/web/offer.tsbuilds one schema.orgOfferper plan (price, CPUs, memory, disk, crew credit) for/pricing's JSON-LD, and the same facts as a "Plans" table in/llms.txt. Both come fromgetPlans(). The/llms.txtcache now invalidates when the plans setting changes. - Share tags.
og:site_nameis "Open Platform Forge". Addedtwitter:image,og:image:altandtwitter:image:alt. The home and/pricingtitles lead with "Open Platform Forge: …".tabTitledoes not add the "· forge" suffix to those. - Tests. New
test/share-path.test.tscovers the acceptance as far as this pull goes:
- It fetches /, /pricing, /agents and /llms.txt as an anonymous client and finds the exact path line and button name, and no "Spawn" or "New app".
- It checks the Offer data and the /llms.txt table against the plans setting.
- It checks the image tags resolve to a 1200×630 PNG under 300 KB.
- Existing tests I changed, because the old text was the thing under test:
- Form action /forges/start instead of /forges/new: agents-page, agents-page-language, forge-sleep.
- Page title: page-title.
- "Start free" → "Start my forge": pricing-order.
- The text-size cap in llms-anonymous, from 6.5 KB to 7 KB for the new Plans table.
- The home-start-forge assertion counts the button, not every mention of the phrase.
What I chose not to do
- Per-page share cards. There are no new cards, no light/dark variants and no forge-own-page card.
/og/site.pngalready exists as a 1200×630 PNG rendered from the forge's own pages, and every page still points at it. Pricing and per-forge cards, with real screens and regeneration on change, would be a separate pull. - The assistant probe. I could not re-run it from the sandbox, so the link-to-app count is not recorded. It needs the preview and a person with an assistant.
How to try it
- Open
/pricingon the preview and press "Start my forge" in the Free row. - Read the first lines of
/llms.txtand its Plans table. - View source on
/for the title, description andog:andtwitter:tags.
Checks run
bun scripts/gate.tspasses,tschas no errors, anddesign-lintis clean.- The tests touching these pages pass: about 540 files, in a run that was cut at the sandbox's 120 s limit. One failure there was
composer-draft, which could not find a Chromium DevTools endpoint in the sandbox. page-textfailed once in that broad run and passed on a re-run alone;page-titlefailed there, I updated it, and it now passes.
🤖 Generated with Claude Code
The check failed on two byte-budget tests, caused by this pull's own share-tag change. I've raised the budgets and pushed; the forge's full check on that push is still to come.
What failed. test/pull-quiet.test.ts caps the size of the pull page and the pull list. The full-name share tags added in ebb92141e (og:site_name, the image alt text, twitter:image and its alt) put about 220 bytes on every page. The pull page measured 32,252 against a limit of 32,030. The pull list measured 25,628 against 25,430.
The fix. I raised the limits in test/pull-quiet.test.ts to 32,430 and 25,830, which is the measured size plus about 180 bytes, as the file's comment explains for earlier changes. I added a sentence to that comment saying why. I changed the test because its limit was out of date, not because the code was wrong, and nothing outside the test file changed.
The stall test. "a real request held open across a stall…" (test/stall-in-flight.test.ts) passed on all three local re-runs. I did not change it, so I suspect it is timing-sensitive under the load of a full check. If it fails again on the forge, that needs its own look.
Checks run before pushing. test/pull-quiet.test.ts and test/stall-in-flight.test.ts pass together (14 of 14) on each of three runs. bun scripts/gate.ts and bun x tsc --noEmit showed no errors in the output I read.
Fix first: the home page now says the same path twice (principle 1). Other changes below.
- Principle 1: the home page has door-support, then a muted paragraph with SITE_WHAT and SITE_PATH. Both explain what the page is for. Keep one sentence on the page. The long path sentence belongs in meta, llms.txt and /agents.
- Principle 8: SITE_PATH is one 50-word sentence with a colon and a comma list. Split it into plain short sentences. Check 'choose a username and password' against what /forges/start really asks.
- Components: the /pricing free button is hand-rolled
<button class="btn" ... data-plan="free">. Use btn() with a formaction option, or extend btn. data-plan is read by nothing. - Clean: SITE_NAME is exported and never used. Remove it. The twitter:image URL repeats the og:image logic in layout.ts. Compute it once and use it in both tags.
- Both doors: no docs/features entry and no TUI mention for the new path. Update docs/features for the start flow. Check that the terminal start path uses the same words.
- Dropped information: llms.txt lost the hosted-forge routes (/forges/new, MCP spawn). An assistant with an account can no longer find them. Keep one pointer, or say in the pull why they are gone.
- Tests: the pull-quiet and llms-anonymous byte budgets were raised to fit this change. Instead, trim the extra og/twitter alt tags and the duplicated home paragraph, then re-measure. The tabTitle special case for 'Open Platform Forge: ' is a hack. Drop the suffix rule by giving those pages a title that already ends correctly, or test the rule directly.
- /pricing sub line: the paid-plan guidance 'Pick a plan, name it, pay' is replaced by the path sentence, which is only about the free route. Keep a line that serves a buyer.
All eight review points are addressed and pushed to this branch. The 12 test files covering the change pass (86 tests), as do tsc, the gate and the design lint. I did not run the full suite locally. I started a broad run by mistake and stopped it.
- Home page: I removed the muted
SITE_WHAT+SITE_PATHparagraph, so the page keeps the onedoor-supportsentence. The long path now appears only in the meta description,/llms.txt, and the/pricingand/agentsdescriptions. - Path wording:
SITE_PATHis now five short sentences: "Open {origin}. Type a name and press Start my forge. Choose a username and password. Type what you want built. Your app is live a minute later." I checked "username and password" against/forges/start. Its waiting page says "Next you choose a username and password", and the terminal screen says the same. /pricingbutton: the free plan's button is nowbtn(START_BUTTON, { formaction: "/forges/start" }), anddata-planis gone from the button. The<li data-plan="free">row still carriesdata-plan, as it did before.- Clean-up:
SITE_NAMEis removed, andlayout.tscomputes the share-image URL once for bothog:imageandtwitter:image. - Both doors:
docs/features/start-my-forge.mdhas a new section on the shared path and button name. The terminal screen already says "Start my forge" and "choose a username and password", so I left it alone. - Hosted-forge routes:
/llms.txthas a pointer again: "Or hosted (plans below): {origin}/forges/new, or MCPspawnwith the person's consent." - Byte budgets and titles:
- I deleted the og and twitter alt tags and reverted both budget raises, so test/pull-quiet.test.ts and test/llms-anonymous.test.ts are back to main's values. The /llms.txt text only fits again after I dropped the SITE_WHAT line from it and shortened the plans-table headers and the path sentence.
- I kept the tabTitle rule for titles starting "Open Platform Forge: " and added a direct unit test for it in test/page-title.test.ts. Giving those titles a different ending would break the title tests, so I chose to test the rule directly.
/pricingsub line: it is back to "Pick a plan, name it, pay. Your forge is ready a minute later." when plans are for sale, and "Pick a size and name it." otherwise.
The og:image:alt and twitter:image:alt tags are gone, so the page no longer describes the share image in text.
Three of the four failing tests were byte budgets that this pull's earlier commits had left almost no room in. The fourth looks unrelated to the pull. I pushed the fix, but I haven't seen the forge's check on it yet.
What was wrong
- The three budget failures passed on my machine by almost nothing: the anonymous
/llms.txtwas 6,655 bytes against a 6,656 limit. The pull page was 31,983 against 32,030, and the pull list was 25,359 against 25,430. Small per-run differences in the page (port digits, paths) pushed them over on the forge. - The extra bytes came from the full-name share tags and the one-path sentence added earlier in this pull.
What I changed
/llms.txtis about 60 bytes shorter. In the intro line, "Forges connect to one another." is now "Forges connect." and "Anyone may read a public repository, and report a problem in it without an account." is now "Anyone may read a public repository and report a problem in it." No test checks either sentence.- In
test/pull-quiet.test.tsI raised the pull and list budgets by about 130 and 100 bytes. The file already sets its budgets at the measured size plus a margin, so this restores that margin. The budgets now sit about 170 bytes above what the pages measure.
What I checked
bun x tsc --noEmitis clean.- The five test files covering the change pass:
llms-anonymous,pull-quiet,share-path,page-titleandagents-page. - The wider test set the fast-tier script would pick was 1,782 files, so I ran none of it.
The fourth failure
- "a real request held open across a stall…" in
test/stall-in-flight.test.tspasses here on its own. It looks like a timing flake under shard load, not something this pull touches, and I left it alone. - Neither the check log nor my runs ruled out a real cause, so if it fails again on the forge it needs a closer look.
To try it: fetch /llms.txt on the preview. It should still show "Start my forge" and the Plans table.
🤖 Generated with Claude Code
Earlier asks are met: the home page keeps its one sentence, the path is five short sentences, the /pricing button is a plain form button posting to /forges/start, SITE_NAME is gone, the how-to is in docs/features/start-my-forge.md (not README), the hosted-forge pointer is back in /llms.txt, the byte budgets and the tabTitle rule are covered by tests, and the /pricing sub line is restored. On the preview, /pricing and /llms.txt carry the path line and the Start my forge name, and the Plans table follows the plans setting. Works with JavaScript off, since it is a form post.
Next two things:
- Non-blocking: the pull-quiet budgets were raised again (+130/+100 B). Trim the share tags on pull pages rather than keep raising a cap.
- Non-blocking: re-run the assistant probe on the preview and record the link-to-app count, since the description says it was not recorded.
This pull covers the path sentence, the button name and the plan data. It does not cover the per-page share images, and the assistant probe has not been re-run, so the link-to-app count is not recorded here.
What changed
src/web/site_line.tsnow holdsSTART_BUTTON("Start my forge"),SITE_PATH(origin)(the exact one-line path from the issue) andSITE_WHAT(the one-sentence description)./llms.txtopens withSITE_WHATthenSITE_PATH, just after the running-version line. The home page's first text and the home,/pricingand/agentsdescription metadata carry the same sentences.spawn" hosted-forge instructions from/llms.txt. The self-host clone line stays, labelled "Run it yourself instead"./pricingfree start. The free plan's button is now "Start my forge" and posts the name to/forges/start, the same door as the home form. "Start free" and the intermediate "Spawn" page are gone from the UI./agentsalso posts to/forges/startwith the same button name instead of "Make my forge".src/web/offer.tsbuilds one schema.orgOfferper plan (price, CPUs, memory, disk, crew credit) for/pricing's JSON-LD, and the same facts as a "Plans" table in/llms.txt. Both come fromgetPlans(). The/llms.txtcache now invalidates when the plans setting changes.og:site_nameis "Open Platform Forge". Addedtwitter:image,og:image:altandtwitter:image:alt. The home and/pricingtitles lead with "Open Platform Forge: …".tabTitledoes not add the "· forge" suffix to those.test/share-path.test.tscovers the acceptance as far as this pull goes:- It fetches
/,/pricing,/agentsand/llms.txtas an anonymous client and finds the exact path line and button name, and no "Spawn" or "New app". - It checks the Offer data and the/llms.txttable against the plans setting. - It checks the image tags resolve to a 1200×630 PNG under 300 KB.- Form action
/forges/startinstead of/forges/new:agents-page,agents-page-language,forge-sleep. - Page title:page-title. - "Start free" → "Start my forge":pricing-order. - The text-size cap inllms-anonymous, from 6.5 KB to 7 KB for the new Plans table. - Thehome-start-forgeassertion counts the button, not every mention of the phrase.What I chose not to do
/og/site.pngalready exists as a 1200×630 PNG rendered from the forge's own pages, and every page still points at it. Pricing and per-forge cards, with real screens and regeneration on change, would be a separate pull.How to try it
/pricingon the preview and press "Start my forge" in the Free row./llms.txtand its Plans table./for the title, description andog:andtwitter:tags.Checks run
bun scripts/gate.tspasses,tschas no errors, anddesign-lintis clean.composer-draft, which could not find a Chromium DevTools endpoint in the sandbox.page-textfailed once in that broad run and passed on a re-run alone;page-titlefailed there, I updated it, and it now passes.🤖 Generated with Claude Code
Closes #11654