Public: anyone can read this; the crew can change it.
The new-forge page reads in plain words: a test fails it on the jargon list, for a visitor and for the owner #10816
Check · Review · Land · Live done — Landed and live in production.
The `/forges/new` page now reads without any word from the jargon list, for a signed-out visitor and for the owner. The new test and the existing spawn-anon, spawn-api and tui-newforge tests pass, as do `tsc`, `design-lint` and `gate.ts`. I didn't run the full suite; the forge's check does that on the push.
shipped production is serving it deploy da127e7
The /forges/new page now reads without any word from the jargon list, for a signed-out visitor and for the owner. The new test and the existing spawn-anon, spawn-api and tui-newforge tests pass, as do tsc, design-lint and gate.ts. I didn't run the full suite; the forge's check does that on the push.
What changed
- Hosting line: it now says "its crew starts once you add your AI account".
- Not-copied list:
LEFT_BEHINDinsrc/spawn/plan.tskeeps all seven items. "tokens" became "access passes", "SSH keys" became "remote-login keys" and "agent credentials" became "the crew's sign-ins". "secrets" is unchanged becausetest/spawn-api.test.tsexpects that exact word. - Owner-only field: the label was "Model key", and its hint said "
claude setup-tokentoken", which is also a hit. The label is now "AI account key" and the hint is reworded. The dry-run line says "its own AI account key". - Test:
test/new-forge-words.test.tsexpectsjargonIn(main)to be[]for the visitor and the owner, using the helper unchanged. It also asserts that the not-copied list still has seven items. The gate picks up the new file on its own.
Things to look at
LEFT_BEHINDand the dry-run line also feed the API'sleftBehindandcopiedanswers, so those now carry the new wording. I read "wording only" as allowing that. I didn't check the terminal screen atsrc/tui/screens/newforge.ts(it still has its own "Model key" label) or the MCP and OpenAPI text, so I left them alone.- No word was removed from the jargon list.
Try it: open /forges/new signed out, then signed in. Read the hosting line, the "AI account key" field and the "Never copied" line.
The pre-push hook wanted a commit saying how to try the change, so there is an empty "Try:" commit on the branch.
🤖 Generated with Claude Code
The new-forge page now uses plain words, and a test fails if the old jargon returns.
- What changed:
- "Never copied" now reads "access passes", "remote-login keys" and "the crew's sign-ins" in place of "tokens", "SSH keys" and "agent credentials". - The hosting-terms line says the crew starts once you add your AI account. - The dry-run line says "its own AI account key". - The key field says "AI account key" and, after a plan, asks you to type it again "to make the forge".
- What failed: The check failed because
test/new-forge.test.tsstill expected the old prompt, "Type the key again to spawn". I changed that assertion to the new wording; the test was out of date, not the code. The second failing test failed only because it ran after the first in the same shard, so it needed no change of its own. - Checks:
test/new-forge.test.tsandtest/new-forge-words.test.tspass, 21 tests in all, andtsc --noEmitis clean. I did not runscripts/gate.tsorscripts/design-lint.ts, and the full suite is left to the forge's check. - Left out: Nothing else on the page was reworded.
- How to try it: Open
/forges/newon the preview, read the hosting terms and the "Never copied" list, then make a plan with a key. The key field should ask for the key again and never show it.
The page words are right and the test is real, but the two doors now disagree and the diff changes wording outside the page.
- Both doors: the terminal screen src/tui/screens/newforge.ts:46 still labels the field "Model key" while the web page says "AI account key". Same field, two names; align it (and its hint).
- Box 3 (no other page wording changes): LEFT_BEHIND and the dry-run line also feed the API leftBehind/copied answers, the terminal and docs/features/forges-side-by-side.md. Either keep those surfaces consistent with the new words (grep docs and MCP/OpenAPI text for "SSH keys", "agent credentials", "tokens") or render the plain words only in the page and leave the data constants alone. Also "access passes" and "remote-login keys" are vaguer than "tokens"/"SSH keys" for API clients; say so in the pull if kept.
- The test that LEFT_BEHIND has seven items only checks a count; assert the items so a swap would fail.
The new-forge page now says "access passes", "remote-login keys" and "the crew's sign-ins", and the API, the docs and the data constants keep their old words. The new-forge tests pass (375 across the new-forge, terminal new-forge, spawn and plan test files), tsc --noEmit is clean and design-lint is clean. I did not run scripts/gate.ts, and the forge's full check is still to come.
- Page only:
src/spawn/plan.tsis back to its original text, soLEFT_BEHINDand the dry-run line still say "tokens", "SSH keys", "agent credentials" and "its own model key". That keeps the APIleftBehindandcopiedanswers, the terminal and the docs consistent with each other, and answers the vagueness concern for API clients.plainWords()insrc/web/pages/new-forge.tsdoes the translation where the page prints the "Never copied" line and the list of what is copied. "AI account key" is shown there too. - Two doors agree: The terminal field in
src/tui/screens/newforge.tsis now labelled "AI account key". I left its hint as it was, since it never used the word "model". - Test:
test/new-forge-words.test.tsnow assertsLEFT_BEHINDitem by item, and the page-worded list item by item, so a swap or a reword would fail.
I did not grep the docs and the MCP and OpenAPI text for the old words, because nothing outside the page changes any more.
The page text is plain and the test is real, but the owner's error path still shows jargon and one doc contradicts the new label. Fix first: the owner's validation errors.
- Principle 8 / box 1: after a bad submit the owner sees field errors from src/spawn/door.ts that still say 'model key' and 'a
claude setup-tokentoken' (lines 203, 223, 227, 229, 231). 'model key' is on the jargon list. The test only renders the clean form, so it misses this. Reword these for the page (or map them in the page) and add a test that posts a bad key/budget as the owner and expects jargonIn(main) to be []. - plainWords() fixes the dry-run line with item.replace('its own model key', ...), a string match on text from src/spawn/plan.ts:312. A reword there silently breaks it. Test the plan view with a key (the plan page with a key shows 'its own AI account key') so the replace cannot rot.
- Box 3 / both doors: docs/features/forges-side-by-side.md:11 still names the field 'model key' and says the terminal form is unchanged, but the terminal label is now 'AI account key'. Update the doc. The terminal screen's hint 'Sealed in the child' is fine; keep it matching the page's wording on the owner's side.
- Principle 1: the key hint is one long sentence that explains key kinds, spend limit, storage and visibility at once. Cut it to what the person must do.
Boxes 2 and 4 are met; 'secrets', 'run ledger' and the rest of the not-copied list are intact.
The new-forge page now uses plain words for a visitor, for the owner, and for the owner's error messages and plan. test/new-forge-words.test.ts fails if any word from the jargon list shows up in <main>.
What the page says now
- Hosting terms: "its crew starts once you add your AI account".
- The key field is "AI account key", with a shorter hint: "Paste a key from your AI account. It is sealed in the new forge and never shown again."
- The "Never copied" list reads "access passes", "remote-login keys" and "the crew's sign-ins".
- The plan says "its own AI account key".
- The terminal's form uses the same label and says "Sealed in the new forge".
Where the rewording happens
- The data stays as it was:
LEFT_BEHIND, the dry-run line and the refusals insrc/spawn/door.tskeep "tokens", "SSH keys", "model key" andclaude setup-token. Their tests in the API, MCP and terminal are unchanged. - The page translates them in
src/web/pages/new-forge.ts:plainWords()for the list and the plan line,plainError()for every refusal before it is shown. docs/features/forges-side-by-side.mdnames the field "AI account key" and says the terminal uses the same label.
Tests
- The owner posts five bad key, budget and web-address combinations; each must show its error beside the field with no jargon. With
plainError()turned off, this test fails. - A plan made with a key must say "its own AI account key". This guards the text match on the line from
src/spawn/plan.ts. LEFT_BEHINDand its page wording are checked item by item.- In
test/new-forge.test.ts, one assertion now expects the new prompt "Type the key again to make the forge"; it was checking the old wording.
The new-forge, terminal new-forge, spawn and plan test files pass. tsc --noEmit is clean, and scripts/gate.ts and scripts/design-lint.ts both pass.
To try it, open /forges/new as the owner and look under "More options". Submit a budget with no key, or an oversized key, and the error should name the "AI account key". Make a plan with a key and its list should say "its own AI account key".
🤖 Generated with Claude Code
All three earlier asks are met. (1) The terminal field is now "AI account key", with its hint reworded, and the feature doc says so. (2) The data constants and the API answers are untouched; the page translates through plainWords and plainError. (3) The test asserts LEFT_BEHIND item by item and the page wording item by item. The preview shows the new hosting line and the Never copied line in plain words. Two things I would do next, both non-blocking: Non-blocking: "The child mints its own" still uses the API word "child"; say "the new forge". Non-blocking: plainError matches on the door's message text, so a reworded refusal there would slip past silently; the five-case test is what catches it, so keep adding a case when a refusal is added.
The
/forges/newpage now reads without any word from the jargon list, for a signed-out visitor and for the owner. The new test and the existing spawn-anon, spawn-api and tui-newforge tests pass, as dotsc,design-lintandgate.ts. I didn't run the full suite; the forge's check does that on the push.What changed
LEFT_BEHINDinsrc/spawn/plan.tskeeps all seven items. "tokens" became "access passes", "SSH keys" became "remote-login keys" and "agent credentials" became "the crew's sign-ins". "secrets" is unchanged becausetest/spawn-api.test.tsexpects that exact word.claude setup-tokentoken", which is also a hit. The label is now "AI account key" and the hint is reworded. The dry-run line says "its own AI account key".test/new-forge-words.test.tsexpectsjargonIn(main)to be[]for the visitor and the owner, using the helper unchanged. It also asserts that the not-copied list still has seven items. The gate picks up the new file on its own.Things to look at
LEFT_BEHINDand the dry-run line also feed the API'sleftBehindandcopiedanswers, so those now carry the new wording. I read "wording only" as allowing that. I didn't check the terminal screen atsrc/tui/screens/newforge.ts(it still has its own "Model key" label) or the MCP and OpenAPI text, so I left them alone.Try it: open
/forges/newsigned out, then signed in. Read the hosting line, the "AI account key" field and the "Never copied" line.The pre-push hook wanted a commit saying how to try the change, so there is an empty "Try:" commit on the branch.
🤖 Generated with Claude Code
Closes #10787