Public: anyone can read this; the crew can change it.

A tell's sentences live in one module, read by the tell action, the terminal, runs and the report screen #5701

Merged opened this

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

Merged

The four sentences a tell or report says when it is empty or does not go now live in one new module, `src/actions/tell_words.ts`. Each one was typed out separately before. It is a new module rather than an addition to `src/actions/tell.ts`: that file holds the tell action itself and imports the app, so the screens and pages would have pulled that in just to get a string. The new module has no impo…

shipped production is serving it deploy c1f25a9

opened this

The four sentences a tell or report says when it is empty or does not go now live in one new module, src/actions/tell_words.ts. Each one was typed out separately before. It is a new module rather than an addition to src/actions/tell.ts: that file holds the tell action itself and imports the app, so the screens and pages would have pulled that in just to get a string. The new module has no imports.

  • NOT_TOLD_WORDS: "That could not be told."
  • NOT_TOLD_FROM_WORDS: "That page could not be told from."
  • SAY_SOMETHING_WORDS: "Say something first."
  • NOT_SENT_WORDS: "That could not be sent."

What moved:

  • Named files: src/web/studio/actions.ts, src/tui/screens/tell.ts, src/tui/screens/report.ts, src/web/pages/runs.ts and src/web/studio/toolbar.ts each import the sentences they use. Only the lines the sentences were on, plus one import each, changed.
  • One file not in the issue's list: src/web/client.ts:1664 also had "That could not be told." as the browser-side fallback for the tell box. It is inside the shellJs template literal, which already interpolates static constants, so it now reads '${NOT_TOLD_WORDS}'. The served script is byte-for-byte the same. With that change, grep -rn for each sentence under src/ finds only the module.
  • Guard test: the new test/tell-words.test.ts reads each of those six files as text. It fails if any of them contains one of the literals or stops importing tell_words.ts. It also checks that the module still says each sentence word for word, and that shellJs still contains the fallback.

src/http/mcp.ts and src/http/api.ts are untouched, since they are being edited in parallel. No existing test was changed.

Checks run:

  • test/tell-words.test.ts, test/tui-tell.test.ts and test/tui-report.test.ts: all pass.
  • The toolbar, runs, tell, client and studio suites: 309 pass, 0 fail.
  • bun x tsc --noEmit and bun scripts/design-lint.ts: both clean.

To try it: run bun test test/tell-words.test.ts, then type one of the sentences back into, say, src/tui/screens/report.ts and run it again; it goes red.

🤖 Generated with Claude Code

Closes #5650

commented

The four sentences a tell or report says when it is empty or does not go now live in one new module, src/actions/tell_words.ts. Each one was typed out separately before. It is a new module rather than an addition to src/actions/tell.ts: that file holds the tell action itself and imports the app, so the screens and pages would have pulled that in just to get a string. The new module has no imports.

  • NOT_TOLD_WORDS: "That could not be told."
  • NOT_TOLD_FROM_WORDS: "That page could not be told from."
  • SAY_SOMETHING_WORDS: "Say something first."
  • NOT_SENT_WORDS: "That could not be sent."

What moved:

  • Named files: src/web/studio/actions.ts, src/tui/screens/tell.ts, src/tui/screens/report.ts, src/web/pages/runs.ts and src/web/studio/toolbar.ts each import the sentences they use. Only the lines the sentences were on, plus one import each, changed.
  • One file not in the issue's list: src/web/client.ts:1664 also had "That could not be told." as the browser-side fallback for the tell box. It is inside the shellJs template literal, which already interpolates static constants, so it now reads '${NOT_TOLD_WORDS}'. The served script is byte-for-byte the same. With that change, grep -rn for each sentence under src/ finds only the module.
  • Guard test: the new test/tell-words.test.ts reads each of those six files as text. It fails if any of them contains one of the literals or stops importing tell_words.ts. It also checks that the module still says each sentence word for word, and that shellJs still contains the fallback.

src/http/mcp.ts and src/http/api.ts are untouched, since they are being edited in parallel. No existing test was changed.

Checks run:

  • test/tell-words.test.ts, test/tui-tell.test.ts and test/tui-report.test.ts: all pass.
  • The toolbar, runs, tell, client and studio suites: 309 pass, 0 fail.
  • bun x tsc --noEmit and bun scripts/design-lint.ts: both clean.

To try it: run bun test test/tell-words.test.ts, then type one of the sentences back into, say, src/tui/screens/report.ts and run it again; it goes red.

🤖 Generated with Claude Code

Approved — before the latest push

A pure string move: no markup, token, route or write path changes, so the design-system, security and both-doors checks hold as before. The preview answers 200 at /. The served browser script is byte-identical, and the guard test fails if a literal is typed back. Two things next: (1) src/http/mcp.ts and src/http/api.ts may still hold these sentences. Move them once the parallel edits land, so the issue's grep-finds-only-the-module line is true. (2) The guard test checks for substrings, so a differently punctuated copy would pass. A small pattern such as /could not be (told|sent)/ would catch near-copies.

commented

The sentences a tell or a report says when it is empty or does not go now live in one module, src/actions/tell_words.ts (#5650). It holds four constants: NOT_TOLD_WORDS, NOT_TOLD_FROM_WORDS, SAY_SOMETHING_WORDS and NOT_SENT_WORDS. The studio's box, the toolbar's report, the run page and the terminal's report import them, so all four read the same. No wording changes.

This push merges main, which added src/apps/note_words.ts (#5616) and src/actions/comment_words.ts while this pull was open. That caused conflicts in two files, src/tui/screens/report.ts and src/web/studio/toolbar.ts. Both kept both sides:

  • The too-long message uses main's NOTE_TOO_LONG, so it has one source.
  • The empty and not-sent messages use SAY_SOMETHING_WORDS and NOT_SENT_WORDS from this branch.
  • The toolbar keeps main's comment-words import alongside the new imports.

No copies of these strings are left outside the word modules and the tests. The type check and design lint pass, and the eight test files covering the words modules, the terminal report, the toolbar and feedback pass (68 tests).

To try it, open the toolbar's report on any app page, or the report screen in the terminal. Send an empty report, then one longer than an issue body: the messages match what they said before.

🤖 Generated with Claude Code

Approved

Approved. The pull does what #5650 asks and only that. Read at head 236d8ccb: four sentences in one module with no imports, and each door imports them. Running grep -rn under src/ for each sentence finds only src/actions/tell_words.ts. The client.ts fallback, which the issue missed, is covered too. No wording changed. Security is unchanged because no write path, identity check, body cap or query is touched, and the interpolated value is a fixed constant from the repository, not user text. The design system is unchanged: no markup or class changed, and design-lint is clean. Checked here: bun x tsc --noEmit is clean; tell-words, tui-tell, tui-report and the toolbar suites pass (61 pass, 0 fail). The guard test goes red if a literal is typed back. On the preview, / answers 200 and the served /assets/shell-*.js still contains note.textContent = 'That could not be told.', so the browser's fallback is byte-for-byte the same. One non-blocking note is on the line below.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs