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

Merged opened this in answer to

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

Merged

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

opened this

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.ts now holds START_BUTTON ("Start my forge"), SITE_PATH(origin) (the exact one-line path from the issue) and SITE_WHAT (the one-sentence description). /llms.txt opens with SITE_WHAT then SITE_PATH, just after the running-version line. The home page's first text and the home, /pricing and /agents description 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".
  • /pricing free 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. /agents also posts to /forges/start with the same button name instead of "Make my forge".
  • Plan facts. src/web/offer.ts builds one schema.org Offer per 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 from getPlans(). The /llms.txt cache now invalidates when the plans setting changes.
  • Share tags. og:site_name is "Open Platform Forge". Added twitter:image, og:image:alt and twitter:image:alt. The home and /pricing titles lead with "Open Platform Forge: …". tabTitle does not add the "· forge" suffix to those.
  • Tests. New test/share-path.test.ts covers 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.png already 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 /pricing on the preview and press "Start my forge" in the Free row.
  • Read the first lines of /llms.txt and its Plans table.
  • View source on / for the title, description and og: and twitter: tags.

Checks run

  • bun scripts/gate.ts passes, tsc has no errors, and design-lint is 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-text failed once in that broad run and passed on a re-run alone; page-title failed there, I updated it, and it now passes.

🤖 Generated with Claude Code

Closes #11654

commented

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.ts now holds START_BUTTON ("Start my forge"), SITE_PATH(origin) (the exact one-line path from the issue) and SITE_WHAT (the one-sentence description). /llms.txt opens with SITE_WHAT then SITE_PATH, just after the running-version line. The home page's first text and the home, /pricing and /agents description 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".
  • /pricing free 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. /agents also posts to /forges/start with the same button name instead of "Make my forge".
  • Plan facts. src/web/offer.ts builds one schema.org Offer per 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 from getPlans(). The /llms.txt cache now invalidates when the plans setting changes.
  • Share tags. og:site_name is "Open Platform Forge". Added twitter:image, og:image:alt and twitter:image:alt. The home and /pricing titles lead with "Open Platform Forge: …". tabTitle does not add the "· forge" suffix to those.
  • Tests. New test/share-path.test.ts covers 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.png already 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 /pricing on the preview and press "Start my forge" in the Free row.
  • Read the first lines of /llms.txt and its Plans table.
  • View source on / for the title, description and og: and twitter: tags.

Checks run

  • bun scripts/gate.ts passes, tsc has no errors, and design-lint is 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-text failed once in that broad run and passed on a re-run alone; page-title failed there, I updated it, and it now passes.

🤖 Generated with Claude Code

commented

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.

Changes requested — before the latest push

Fix first: the home page now says the same path twice (principle 1). Other changes below.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. /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.
commented

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.

  1. Home page: I removed the muted SITE_WHAT + SITE_PATH paragraph, so the page keeps the one door-support sentence. The long path now appears only in the meta description, /llms.txt, and the /pricing and /agents descriptions.
  2. Path wording: SITE_PATH is 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.
  3. /pricing button: the free plan's button is now btn(START_BUTTON, { formaction: "/forges/start" }), and data-plan is gone from the button. The <li data-plan="free"> row still carries data-plan, as it did before.
  4. Clean-up: SITE_NAME is removed, and layout.ts computes the share-image URL once for both og:image and twitter:image.
  5. Both doors: docs/features/start-my-forge.md has 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.
  6. Hosted-forge routes: /llms.txt has a pointer again: "Or hosted (plans below): {origin}/forges/new, or MCP spawn with the person's consent."
  7. 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.

  1. /pricing sub 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.

commented

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.txt was 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.txt is 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.ts I 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 --noEmit is clean.
  • The five test files covering the change pass: llms-anonymous, pull-quiet, share-path, page-title and agents-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.ts passes 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

Approved

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:

  1. 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.
  2. 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.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs