WIP: chore(agents): the shared sign-in, forge.py, team chat and shared skills move to MagicBeanDev/Tooling, and a game change opens only once it has run in the game #915

Draft
HumanBean wants to merge 1 commit from HumanBean/Longshot:chore/tooling-repo into main
Owner

Type: chore · Risk: medium · Tested on: Linux (the forwarder and Tooling's forge.py, opening this PR) · Needs: any OS: the game-free checks, by hand

Why

The sign-in, forge.py, the team chat and the team-updates and release skills are used by every MagicBeanDev repository, but they live here, so the launcher, Beanstalk and Site send people to "run it in a Longshot checkout", and the release skill is copied in two repositories and drifting. They move to MagicBeanDev/Tooling (Tooling#1, merge it first; the launcher, Beanstalk and Site point there in LongshotLauncher#114, Beanstalk#14 and Site#20), which agents clone beside their checkout and pull each session. What is Longshot's own stays here. Also: a change the game runs now has to have run in the game before its PR opens.

What changed

Longshot points at Tooling for the shared parts and keeps its own: test requests (scripts/test_requests.py, the request-testing and testing skills, docs/test-requests.md), prior-work, fix-with-test, measure, and its PR rules. scripts/forge.py is now a forwarder to Tooling's, so every git credential helper set up before the move keeps working.

  • scripts: forge.py, magicbean_login.py, team_chat.py removed (now Tooling's); forge.py forwards to ../Tooling/scripts/forge.py (scripts/tooling.py finds it: MAGICBEAN_TOOLING, else Tooling beside the checkout, and says how to clone it when missing). test_requests.py and hardware_report.py import the sign-in and the API client from there.
  • scripts/check_pr_description.py: TITLE, the Conventional Commit regex (was forge.py's), and GAME_PATHS (gpu/, host/, nx2/, assets/, third_party/): Tooling's pr create refuses a branch that changes one until --tested-in-game "where it ran and what you saw", unless --force.
  • .forgejo/workflows/ci.yml: the title job loads check_pr_description.py instead of forge.py.
  • tests: test_forge_pr.py, test_forge_session_lock.py, test_team_chat.py moved to Tooling; test_test_requests.py skips, saying so, without Tooling beside the checkout; test_check_pr_description.py covers TITLE, GAME_PATHS and the title job.
  • skills: team-updates and release removed (Tooling's plugin: /magicbean:team-updates, /magicbean:release); request-testing, testing, measure, prior-work run forge.py and team_chat.py from ../Tooling.
  • docs: AGENTS.md opens with getting Tooling and reading its AGENTS.md, and the in-game rule; CONTRIBUTING.md's step 2 clones Tooling, and step 4 has the in-game rule; docs/forge.md removed (Tooling's); agent-pull-requests.md, test-requests.md, workflow.md and RELEASING.md point there.

Measurements

Verdict: nothing to measure: scripts, checks and docs only; the game is untouched.

Flags and settings

None (MAGICBEAN_TOOLING is an environment variable for where Tooling is, not a game switch).

Testing

Tested: this PR was opened through the forwarder (python -I scripts/forge.py pr create here ran Tooling's forge.py, which found MagicBeanDev/Longshot from the remotes, loaded this branch's check_pr_description.py and let a docs/scripts branch open without --tested-in-game). Linux.

Not tested: no test was run on this PC (the person I work for asked for none here): tests/run_all.py hasn't run on this branch.

Must be tested:

  • Linux or Windows, any GPU: with Tooling#1's branch cloned beside this one, python -I -B tests/run_all.py here and python -I -B tests/run_all.py in Tooling, expecting both to pass (by hand: no game needed).

Risks

What could break: anyone without Tooling beside their checkout gets "MagicBeanDev/Tooling is not beside this checkout ... git clone ..." from scripts/forge.py and test_requests.py until they clone it (git's credential helper too, so pushes ask for a password until then). CircleCI doesn't clone Tooling, so test_test_requests.py skips there. Open PRs that change forge.py, team_chat.py or magicbean_login.py here (#905, /891, /831, /640, /310, /298) need to move to Tooling.

Turning it off: revert the commit.

Compatibility: Nothing changes for players. The sign-in in ~/.config/longshot/ is unchanged and keeps working.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named). (not run here; Must be tested)
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Docs updated.

🤖 Generated with Claude Code

**Type:** chore · **Risk:** medium · **Tested on:** Linux (the forwarder and Tooling's forge.py, opening this PR) · **Needs:** any OS: the game-free checks, by hand ## Why The sign-in, `forge.py`, the team chat and the team-updates and release skills are used by every MagicBeanDev repository, but they live here, so the launcher, Beanstalk and Site send people to "run it in a Longshot checkout", and the release skill is copied in two repositories and drifting. They move to [MagicBeanDev/Tooling](https://git.magicbean.dev/MagicBeanDev/Tooling) ([Tooling#1](https://git.magicbean.dev/MagicBeanDev/Tooling/pulls/1), merge it first; the launcher, Beanstalk and Site point there in [LongshotLauncher#114](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/114), [Beanstalk#14](https://git.magicbean.dev/MagicBeanDev/Beanstalk/pulls/14) and [Site#20](https://git.magicbean.dev/MagicBeanDev/Site/pulls/20)), which agents clone beside their checkout and pull each session. What is Longshot's own stays here. Also: a change the game runs now has to have run in the game before its PR opens. ## What changed Longshot points at Tooling for the shared parts and keeps its own: test requests (`scripts/test_requests.py`, the `request-testing` and `testing` skills, docs/test-requests.md), prior-work, fix-with-test, measure, and its PR rules. `scripts/forge.py` is now a forwarder to Tooling's, so every git credential helper set up before the move keeps working. - scripts: `forge.py`, `magicbean_login.py`, `team_chat.py` removed (now Tooling's); `forge.py` forwards to `../Tooling/scripts/forge.py` (`scripts/tooling.py` finds it: `MAGICBEAN_TOOLING`, else `Tooling` beside the checkout, and says how to clone it when missing). `test_requests.py` and `hardware_report.py` import the sign-in and the API client from there. - `scripts/check_pr_description.py`: `TITLE`, the Conventional Commit regex (was forge.py's), and `GAME_PATHS` (`gpu/`, `host/`, `nx2/`, `assets/`, `third_party/`): Tooling's `pr create` refuses a branch that changes one until `--tested-in-game "where it ran and what you saw"`, unless `--force`. - `.forgejo/workflows/ci.yml`: the title job loads `check_pr_description.py` instead of `forge.py`. - tests: `test_forge_pr.py`, `test_forge_session_lock.py`, `test_team_chat.py` moved to Tooling; `test_test_requests.py` skips, saying so, without Tooling beside the checkout; `test_check_pr_description.py` covers `TITLE`, `GAME_PATHS` and the title job. - skills: `team-updates` and `release` removed (Tooling's plugin: `/magicbean:team-updates`, `/magicbean:release`); `request-testing`, `testing`, `measure`, `prior-work` run forge.py and team_chat.py from `../Tooling`. - docs: AGENTS.md opens with getting Tooling and reading its AGENTS.md, and the in-game rule; CONTRIBUTING.md's step 2 clones Tooling, and step 4 has the in-game rule; docs/forge.md removed (Tooling's); agent-pull-requests.md, test-requests.md, workflow.md and RELEASING.md point there. ## Measurements **Verdict:** nothing to measure: scripts, checks and docs only; the game is untouched. ### Flags and settings None (`MAGICBEAN_TOOLING` is an environment variable for where Tooling is, not a game switch). ## Testing **Tested:** this PR was opened through the forwarder (`python -I scripts/forge.py pr create` here ran Tooling's forge.py, which found `MagicBeanDev/Longshot` from the remotes, loaded this branch's `check_pr_description.py` and let a docs/scripts branch open without `--tested-in-game`). Linux. **Not tested:** no test was run on this PC (the person I work for asked for none here): `tests/run_all.py` hasn't run on this branch. **Must be tested:** - Linux or Windows, any GPU: with [Tooling#1](https://git.magicbean.dev/MagicBeanDev/Tooling/pulls/1)'s branch cloned beside this one, `python -I -B tests/run_all.py` here and `python -I -B tests/run_all.py` in Tooling, expecting both to pass (by hand: no game needed). ## Risks **What could break:** anyone without Tooling beside their checkout gets "MagicBeanDev/Tooling is not beside this checkout ... git clone ..." from `scripts/forge.py` and `test_requests.py` until they clone it (git's credential helper too, so pushes ask for a password until then). CircleCI doesn't clone Tooling, so `test_test_requests.py` skips there. Open PRs that change `forge.py`, `team_chat.py` or `magicbean_login.py` here (https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/905, /891, /831, /640, /310, /298) need to move to Tooling. **Turning it off:** revert the commit. **Compatibility:** Nothing changes for players. The sign-in in `~/.config/longshot/` is unchanged and keeps working. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). (not run here; Must be tested) - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore(agents): the shared sign-in, forge.py, team chat and shared skills move to MagicBeanDev/Tooling
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request_target) Has been skipped
CI / Conventional Commit title (pull_request) Failing after 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 6s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 5s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
69d0598013
Longshot keeps what is its own (test requests and the request-testing
and testing skills, the PR rules), and scripts/forge.py forwards to
Tooling's so that git credential helpers set up before the move keep
working. check_pr_description.py gains TITLE (the CI title job no longer
loads forge.py) and GAME_PATHS (pr create wants a run in the game for a
change to the game's files).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request_target) Has been skipped
CI / Conventional Commit title (pull_request) Failing after 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 6s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 5s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
This pull request has changes conflicting with the target branch.
  • scripts/forge.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'chore/tooling-repo:HumanBean-chore/tooling-repo'
git switch 'HumanBean-chore/tooling-repo'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!915
No description provided.