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

Why a run waits for a builder is said from one module, read by finishing and requested #5703

Merged opened this

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

Merged

The two reasons a run waits for a builder, "waits for a builder slot" and "no builder on the crew", now live in one new module, `src/crew/words.ts`, as `WAITS_FOR_BUILDER_SLOT` and `NO_BUILDER_ON_CREW`. No module in `src/crew` owned this concept before, so the module is new.

shipped production is serving it deploy aa26afa

opened this

The two reasons a run waits for a builder, "waits for a builder slot" and "no builder on the crew", now live in one new module, src/crew/words.ts, as WAITS_FOR_BUILDER_SLOT and NO_BUILDER_ON_CREW. No module in src/crew owned this concept before, so the module is new.

  • src/crew/finishing.ts imports both constants and uses them on the two not(…) lines.
  • src/crew/requested.ts imports both and uses them on the two notMoved(…) lines and on the reasonOf comparison. That comparison was a third copy of "waits for a builder slot", typed out so the tick line could group pulls by reason.
  • src/web/studio/shelf.ts: a comment quoted "no builder on the crew", which would have broken "grep -rn under src/ finds only the module". I reworded it to "(the crew has no builder)". It is a comment only, so no code changes.
  • test/crew-wait-words.test.ts (new) checks that each constant matches its original sentence word for word. It also reads finishing.ts and requested.ts as text: each must import from ./words.ts, name both constants and contain neither sentence. Retyping a literal into finishing.ts failed it, as intended.

No wording changed, and the existing tests are unedited. The new test, test/finishing.test.ts and test/requested.test.ts pass, bun x tsc --noEmit is clean, and bun scripts/design-lint.ts passes for the src/web comment change. src/http/mcp.ts and src/http/api.ts are untouched.

🤖 Generated with Claude Code

Closes #5652

commented

The two reasons a run waits for a builder, "waits for a builder slot" and "no builder on the crew", now live in one new module, src/crew/words.ts, as WAITS_FOR_BUILDER_SLOT and NO_BUILDER_ON_CREW. No module in src/crew owned this concept before, so the module is new.

  • src/crew/finishing.ts imports both constants and uses them on the two not(…) lines.
  • src/crew/requested.ts imports both and uses them on the two notMoved(…) lines and on the reasonOf comparison. That comparison was a third copy of "waits for a builder slot", typed out so the tick line could group pulls by reason.
  • src/web/studio/shelf.ts: a comment quoted "no builder on the crew", which would have broken "grep -rn under src/ finds only the module". I reworded it to "(the crew has no builder)". It is a comment only, so no code changes.
  • test/crew-wait-words.test.ts (new) checks that each constant matches its original sentence word for word. It also reads finishing.ts and requested.ts as text: each must import from ./words.ts, name both constants and contain neither sentence. Retyping a literal into finishing.ts failed it, as intended.

No wording changed, and the existing tests are unedited. The new test, test/finishing.test.ts and test/requested.test.ts pass, bun x tsc --noEmit is clean, and bun scripts/design-lint.ts passes for the src/web comment change. src/http/mcp.ts and src/http/api.ts are untouched.

🤖 Generated with Claude Code

Approved

Approved. The change only moves strings. Both sentences now live in src/crew/words.ts, and finishing.ts and requested.ts import them on exactly the lines the issue named, including the third copy in reasonOf. The wording is unchanged, so the why values that the page, API, MCP and terminal show are byte-for-byte the same, and the existing test/finishing.test.ts and test/requested.test.ts assertions still hold unedited.

Security: there are no new inputs, writes, outputs or dependencies, and no identity or authorization path is touched. Under src/, grep now finds the sentences only in the module. The one edit in src/web changes a comment in shelf.ts, so it has no design-system impact. The new test reads both files as text and fails if a literal is typed back in, which is what #5652 asked for. The preview at this head answers / with 200.

A small note, not blocking: words.ts is a broad name for a module that holds one concept, why a run waits for a builder. If more sentences arrive, a name like builder_waits.ts would keep it to that one concept. The issue fixed the name, so it stays as it is here.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs