Skip to content
tongsv1.1.0
GitHub
docsprojectv1.0.4

tongs 1.0.4

Released 2026-10-10. This patch release fixes review submissions that could get stuck after the forge rejected them, merge requests that GitLab reports as having “1000+” changes, and several terminal keys that most terminals never delivered. Release tags now publish only after the release passes its checks. Nothing in your configuration or drafts changes, and older versions of tongs can still open your drafts.

Terminal window
pipx install tongs==1.0.4

pip install tongs==1.0.4 and uv tool install tongs==1.0.4 work the same way. To upgrade an existing installation, run pipx upgrade tongs, or uv tool upgrade tongs, or pip install --upgrade tongs. If you use the per-user desktop app, install the matching desktop release after the core:

Terminal window
tongs desktop update
  • A paused submission can return to editing. When the forge rejects a step of a submission, for example GitHub refusing to let you approve your own pull request, or GitLab answering with a 400 error, tongs pauses the submission. Until now the only way forward was to resume, which sent the same rejected step again, and the draft stayed locked until you restarted tongs. Both apps now let you return the draft to editing. If nothing reached the forge, the attempt is cancelled and the whole draft is editable again. If some steps were confirmed, they stay on the forge and only the remaining text comes back. (#300, #390)
  • Drafts that stayed marked as out of date are usable again. Whether a draft is out of date is now worked out against the merge request’s current revision each time it is read, instead of being stored once. (#300)
  • Interrupting the start of a submission, or a retry, can no longer leave the draft locked. A “retry remaining” that fails its first check goes back to the unknown-outcome choices instead of pausing. (#300)
  • The submit dialog says why a submission paused. The dialog and the draft bar show the forge’s reason, and offer r to resume only when resuming can help. Press 2 twice to return the draft to editing, the same confirmation as for an unknown outcome. (#307)
  • Escape and q no longer leave the screen while a submission or a draft change is in progress, so the write is not abandoned halfway. Leaving a pipeline job view still works. Ctrl+Q still quits at any time; if a submission is in progress, its outcome is recorded as unknown, so check the forge before you retry it. (#307)
  • A failed reload after a submission error no longer closes the app. (#307)
  • Shift+N moves to the previous file in the diff viewer. It was bound to a key most terminals never send. (#323)
  • Cycling to the next recovered review draft of a merge request is now Ctrl+N instead of Alt+], which most terminals and tmux never delivered. The footer shows it when a merge request has more than one draft. (#323)
  • ? shows or hides the keybindings panel instead of a short hint, and the command palette also lists the built-in commands, such as changing the theme. (#323)
  • Ctrl+Y copies the merge request URL through the terminal, so it also works over SSH in terminals that support clipboard access. (#323)
  • The Your review drawer offers Return draft to editing next to Resume confirmed attempt for a paused submission. (#300)
  • A paused submission stays listed for recovery when you close and reopen the review drawer, and the drawer reloads the draft after a submission fails to start. (#300)
  • GitLab merge requests whose change count GitLab reports as “1000+” open in both apps. They used to fail to load. Showing that such a diff is incomplete is planned separately. (#297, #386)
  • When GitHub rejects an approval for a reason other than approving your own pull request, tongs shows GitHub’s message instead of saying you cannot approve your own pull request. (#343, #350)
  • Tags publish only from a checked release. A version tag now publishes to PyPI and the GitHub Release only when its commit is on main, its release notes exist, and continuous integration passed on main for that commit. (#320)
  • The desktop archive builder uses the current Fedora 44 builds of expat and Python 3.12, after Fedora replaced the ones it had pinned, and its build evidence keeps the builder’s full installed package list. (#340, #351, #388)
  • Each pull request runs the checks for the files it changes, and every test runs in exactly one job. A change that is hard to classify still runs everything. (#354)
  • The test suite keeps the tests that a realistic code change can break, and new tests cover the diff parser, the scanner, the forge clients, the MCP server, the desktop installer and the packaging checks. (#348, #368 to #378)
  • Lint covers every Python script and repository Markdown file that CI checks. (#302)

The GitHub Release carries the same set of assets as 1.0.3, for version 1.0.4: the per-user archive with its release manifest and Sigstore attestation, the unsigned Fedora 44 RPMs with their source-built companion packages, the archive SBOM with its attestation, and SHA256SUMS. Install the RPMs together with dnf install ./*.rpm.

Known issues lists the defects known in 1.0.4, with the issue and milestone for each fix.

Thanks to @rd4398 for the terminal key fixes, their first contribution to tongs, and to @tayfuryldz for the approval message fix and most of the new tests.