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

Spend and budget range sentences live in one module, and the API and MCP read them from there #5559

shipped production is serving it opened this has it
opened this

For: A spend window or budget given out of range reads the same from every door, because every door reads it from one place. Today each sentence below is typed out separately in src/http/api.ts and src/http/mcp.ts (spend, usage, returns, model_ceiling as each applies), so the next edit to one door makes them drift. This is the fix pull #5504's reviewer asked for, applied to these words.

Done:

  • [ ] A new src/actions/spend_words.ts exports these sentences (a const object or small functions, plain data):

- "usdPerMonth is from 0.01 to 10000 dollars" - "dailyUsd and perRunUsd are each from 0.01 to 10000 dollars, or both null" - "days is a whole number from 1 to 30"

  • [ ] Each door (src/http/api.ts and src/http/mcp.ts (spend, usage, returns, model_ceiling as each applies)) imports them, and none of these sentences is typed out anywhere else under src/ (grep -rn for each finds only the module).
  • [ ] Answers are byte-for-byte unchanged: every existing test passes as it is.
  • [ ] A new test/spend-words.test.ts triggers one of the refusals through each door and asserts each answers the module's sentence. It fails if a door retypes the words.
  • [ ] Before pushing, run test/spend-words.test.ts, the tests of each door you touched and bun x tsc --noEmit. A red test elsewhere that main also has is named in the pull, not a reason to stop.

Files: src/actions/spend_words.ts (new), the doors named, test/spend-words.test.ts. Risk: a pure move; change no wording. Other MCP work edits src/http/mcp.ts in parallel, so keep each edit to the literal's own line.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs