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

Write-access and gone-pull refusals live in one module, read by conflicts, edit and the pull page #5598

Merged opened this

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

Merged

The two refusals said when someone acts on a pull now live in one new module, `src/actions/pull_words.ts`. No existing module covered these sentences: `src/checks/words.ts`, `src/flow/kpi_words.ts` and `src/web/studio/words.ts` each hold words for something else. The module exports:

shipped production is serving it deploy 405fa2a

opened this

The two refusals said when someone acts on a pull now live in one new module, src/actions/pull_words.ts. No existing module covered these sentences: src/checks/words.ts, src/flow/kpi_words.ts and src/web/studio/words.ts each hold words for something else. The module exports:

  • NO_WRITE_ACCESS: "You do not have write access to this repository."
  • PULL_GONE: "That pull request is no longer here."

It's a pure move. The only lines changed are the ones with the sentences on them, plus one import line in each file:

  • src/actions/finish-conflicts.ts: the forbidden and not_found entries in FINISH_REFUSALS.
  • src/web/pages/edit.ts: the forbidden/unauthorized branch of editErrorText.
  • src/web/pages/pull.ts: the last two returns of the merge-refusal text, and the fallback on the approval refusal.

grep -rn for either sentence under src/ now finds only pull_words.ts.

test/pull-words.test.ts checks that each exported sentence is a non-empty string and has the exact wording. It also reads each of the three files as text and fails if either sentence is typed back into one of them.

Checks run:

  • test/pull-words.test.ts: 9 pass.
  • Every test that touches these three files or contains these sentences, plus the conflict, finish, edit and pull-* suites: 138 tests across 25 files, all pass, none changed.
  • bun x tsc --noEmit is clean, and bun scripts/design-lint.ts reports nothing added.

To try it, run bun test test/pull-words.test.ts, then type either sentence back into src/web/pages/pull.ts and run it again: it fails.

🤖 Generated with Claude Code

Closes #5590

commented

The two refusals said when someone acts on a pull now live in one new module, src/actions/pull_words.ts. No existing module covered these sentences: src/checks/words.ts, src/flow/kpi_words.ts and src/web/studio/words.ts each hold words for something else. The module exports:

  • NO_WRITE_ACCESS: "You do not have write access to this repository."
  • PULL_GONE: "That pull request is no longer here."

It's a pure move. The only lines changed are the ones with the sentences on them, plus one import line in each file:

  • src/actions/finish-conflicts.ts: the forbidden and not_found entries in FINISH_REFUSALS.
  • src/web/pages/edit.ts: the forbidden/unauthorized branch of editErrorText.
  • src/web/pages/pull.ts: the last two returns of the merge-refusal text, and the fallback on the approval refusal.

grep -rn for either sentence under src/ now finds only pull_words.ts.

test/pull-words.test.ts checks that each exported sentence is a non-empty string and has the exact wording. It also reads each of the three files as text and fails if either sentence is typed back into one of them.

Checks run:

  • test/pull-words.test.ts: 9 pass.
  • Every test that touches these three files or contains these sentences, plus the conflict, finish, edit and pull-* suites: 138 tests across 25 files, all pass, none changed.
  • bun x tsc --noEmit is clean, and bun scripts/design-lint.ts reports nothing added.

To try it, run bun test test/pull-words.test.ts, then type either sentence back into src/web/pages/pull.ts and run it again: it fails.

🤖 Generated with Claude Code

Approved

A pure move: the two refusals now live in src/actions/pull_words.ts and the three readers import them. The wording is unchanged, so no page, API or terminal behaviour moves. That includes the finish-conflicts refusals, which the terminal shares. No new dependency, no markup or CSS change, nothing for JavaScript-off or the phone. The new test fails if a sentence is typed back into a reader. I did not run the preview or the tests; I read the diff and grepped the base for the sentences. Two things I would do next: (1) the guard test greps source text, so it is brittle. Assert on the rendered refusal from editErrorText, mergeFailure and FINISH_REFUSALS instead, or fold it into an existing suite. (2) Put the next refactor behind the arm-stability work (#4496, #4486, #3319, #4482), which the direction ranks first.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs