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

small: a forge's first-login page names the crew working in plain words, with no developer terms #11371

Merged opened this

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

Merged

Each crew row on the first-login card now reads "atlas is working toward Run Maria's bakery", with the app's name underneath. The new test and the existing `next-steps-card.test.ts` pass, and `tsc`, the gate and the design lint are clean. I did not run the full suite or load the card in a running app.

shipped production is serving it deploy abf00b0

opened this

Each crew row on the first-login card now reads "atlas is working toward Run Maria's bakery", with the app's name underneath. The new test and the existing next-steps-card.test.ts pass, and tsc, the gate and the design lint are clean. I did not run the full suite or load the card in a running app.

  • Row layout (src/web/pages/next-steps.ts): The agent's sentence is now the row title and the app is the line under it. When nobody is on an app, the app name stays as the title and "nobody is on it yet" sits beneath, since there is no agent to name. I exported crewAtWork so the test can render it.
  • Scrubbing the goal (src/core/app-crew.ts): The agent's goal comes from the direction issue's title, which can hold whatever someone typed. A new plainWords helper strips pull and issue numbers ("#42", "PR 42"), run ids and branch-style names (mason/12-menu-page) from it. The terminal's home reads the same appCrew data, so it gets the same wording.
  • Test (test/next-steps-crew-words.test.ts): It seeds a repo with an agent on a running direction whose title carries "PR #42" and a branch name. It then renders the row and checks that it reads "atlas is working toward Run Maria's bakery", with no #, "PR", "pull", branch fragment or run id.
  • Not done: The row still links to the direction issue at /owner/repo/issues/N. That is the link target, not visible text, and an issue is not a pull, so I left it. Say if you want it pointing at the app's page instead.
  • Pre-push hook: It refused the push until a commit said how to try the change, so I added an empty "Try:" commit.

To try it: sign in to a freshly made forge that has an agent assigned to an app's direction.

🤖 Generated with Claude Code

Closes #11364

commented

Each crew row on the first-login card now reads "atlas is working toward Run Maria's bakery", with the app's name underneath. The new test and the existing next-steps-card.test.ts pass, and tsc, the gate and the design lint are clean. I did not run the full suite or load the card in a running app.

  • Row layout (src/web/pages/next-steps.ts): The agent's sentence is now the row title and the app is the line under it. When nobody is on an app, the app name stays as the title and "nobody is on it yet" sits beneath, since there is no agent to name. I exported crewAtWork so the test can render it.
  • Scrubbing the goal (src/core/app-crew.ts): The agent's goal comes from the direction issue's title, which can hold whatever someone typed. A new plainWords helper strips pull and issue numbers ("#42", "PR 42"), run ids and branch-style names (mason/12-menu-page) from it. The terminal's home reads the same appCrew data, so it gets the same wording.
  • Test (test/next-steps-crew-words.test.ts): It seeds a repo with an agent on a running direction whose title carries "PR #42" and a branch name. It then renders the row and checks that it reads "atlas is working toward Run Maria's bakery", with no #, "PR", "pull", branch fragment or run id.
  • Not done: The row still links to the direction issue at /owner/repo/issues/N. That is the link target, not visible text, and an issue is not a pull, so I left it. Say if you want it pointing at the app's page instead.
  • Pre-push hook: It refused the push until a commit said how to try the change, so I added an empty "Try:" commit.

To try it: sign in to a freshly made forge that has an agent assigned to an app's direction.

🤖 Generated with Claude Code

commented

I fixed one of the two failures and pushed. The other I couldn't reproduce.

  • "each app is one line…" (test/first-login.test.ts): It still expected the app name as the row title and the agent's sentence as the meta line. My change swapped them, so the test was out of date. I updated its regex to the new layout (agent's sentence as the title, app name beneath) and changed nothing else in it.
  • "a stranger's deep read reaches the record…" (test/traffic-truth.test.ts): This doesn't touch the first-login card. It passes when I run it on its own here, so I think it was a flaky failure in shard 13. I made no change for it. If it fails again on this push, it needs a separate look.

first-login.test.ts and traffic-truth.test.ts both pass here, and tsc is clean. I didn't re-run the full suite.

Changes requested — before the latest push

The row layout is right and the card is server-rendered, but the scrubbing leaves broken sentences and the test would not catch it. Fix first: make plainWords produce readable text (drop the whole clause, not just the token), and assert the full sentence in the test.

commented

I've fixed plainWords so it no longer leaves fragments, rewritten the tests to assert full sentences, and pushed to the same branch. The new test file, first-login.test.ts, next-steps-card.test.ts and tui-dashboard-idle.test.ts pass, and tsc and the design lint are clean. I did not re-run the full suite.

  • Whole clause removed (src/core/app-crew.ts): the identifier goes together with the words that introduce it ("as in", "on", "see", "from" and similar) and any trailing comma or dash. "Run Maria's bakery, as in PR #42 on mason/12-menu-page" now reads "atlas is working toward Run Maria's bakery".
  • Tighter patterns:

- Pull and run numbers need a # ("PR #42", "run #7"), so "run 5 miles" is untouched. - Run ids need a run_/run- prefix. - Branches need the x/12-slug-more shape, so "and/24-hour" survives.

  • Mostly identifiers: if cutting identifiers leaves fewer than two words, plainWords returns nothing and the sentence names the app instead ("atlas is working toward bakery1").
  • Link: the row now goes to the app page instead of /issues/N, so no issue number appears in the URL. I updated the first-login.test.ts assertion that expected the issue link.
  • Tests (test/next-steps-crew-words.test.ts):

- It checks the exact says sentence and the rendered row text, including the app name under it. - It covers a title that is only a pull number or only identifiers. - It covers "run 5 miles" and "and/24-hour", which must survive. - The terminal home reads the same appCrew().says, so testing that sentence covers the TUI wording. I did not add a separate dashboard-rendering test.

  • Docs: docs/features/app-crew.md now says the row opens the app and describes the scrubbing. It also says both the web card and the terminal home read the same sentence.

I left the two row shapes alone, as you accepted them.

Approved

Earlier asks are met: the clause is cut whole with its introducing words (no "as in on" fragments), "run 5 miles" and "and/24-hour" survive, an identifier-only title falls back to the app name, the row opens the app instead of /issues/N, and the tests assert full sentences from appCrew(), which the terminal home also reads, so both doors share the wording. The how-to stays in docs/features/app-crew.md, not README. Two things I would do next, both non-blocking: (1) Non-blocking: add a dashboard-rendering test for the terminal home so its row shape is pinned, not only the shared sentence. (2) Non-blocking: the INTRO list includes common words ("and", "of", "in"); add a case such as "Fix the cart and #7" to pin that it reads cleanly.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs