fix: issue forms and a pull request template for Forgejo, and a bug report link that fills the form #18

Merged
HumanBean merged 1 commit from HumanBean/Longshot:forgejo-templates into main 2026-11-12 23:32:47 +00:00
Owner

Why

The issue forms were still Hookshot's GitHub forms: they pointed at Hookshot's releases, and the in-game bug report's link did not fill anything in on Forgejo. Pull requests also had no template, so measurements and checks were spelled out only in CONTRIBUTING.md.

What changed

  • Issue forms move to .forgejo/ISSUE_TEMPLATE/ (Forgejo reads it first), and .github/ISSUE_TEMPLATE/ is gone:
    • 1-game-problem.yml: crash, graphics, fps/stutter, sound, controls. Version, update track (release / rc / nightly / source), GPU and driver, CPU/RAM/OS, settings and hooked-in tools, the log, steps. Points at the Insert menu's Bug report. Label bug, title Game: .
    • 2-install-problem.yml: the launcher, the builder, the AppImage or make_game.py; which step failed, the error as text, OS and free space, toolchain. Label bug, title Install: .
    • 3-save-problem.yml: a lost save, or an import from Hookshot or an emulator gone wrong; how it was copied, the script's output, never the save itself. Label bug, title Saves: .
    • 4-idea.yml: label enhancement, title Idea: .
    • config.yml: no blank issues; links to issue #14 (pipeline lists), the releases page and Discord.
    • Only keys Forgejo 17 supports (name, about, title, labels, and the markdown/input/textarea/dropdown/checkboxes fields). All five files pass Forgejo 17.0.1's own validator (modules/issue/template, built locally).
  • Bug report link. Forgejo fills a form field from field:<id> in the query, not <id> (routers/web/repo/issue.go, setTemplateIfExists, v17.0.1). The link now uses &field:version=, &field:where=, &field:gpu=, &field:system=, &field:settings=, and the new path .forgejo/ISSUE_TEMPLATE/1-game-problem.yml. Dropdowns can't be filled from the URL, so the update track stays for the player to choose. report.txt still tells the player to copy the answers and drag in the files.
  • .forgejo/pull_request_template.md: Why, What changed, Measurements (Before: main @, After:, hardware, scene, method, a | | Before | After | table, the log lines), Not tested, Screenshots, Issues, and a checklist: For everyone and If applicable.
  • CONTRIBUTING.md: "Commits and pull requests" points at the template rather than repeating it. A new Measurements section covers what counts for each kind of change, the rules that make before and after comparable, and a real example (RTX 3080, main 87991bc8 against nightly 55b976c0). The "Pull request titles" version rules are unchanged. docs/workflow.md step 5 points at CONTRIBUTING.
  • tests/test_bug_report.py reads the new form. It checks that every part of the link is a field:<id> the form has, and that the old folder is gone.

Measurements

Before: main @ d3bd2805
After: forgejo-templates @ 014158c9
Hardware: Linux (CachyOS), no game run needed
Scene: none (templates, a link and docs)
Method: LONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py, once on the branch; main's numbers as recorded for d3bd2805

Before After
tests/run_all.py 488 passed, 2 failed, 38 skipped 488 passed, 2 failed, 38 skipped
issue forms in .forgejo/ISSUE_TEMPLATE, passing Forgejo 17.0.1's validator 0 4, and config.yml
bug report link fields Forgejo fills 0 of 5 5 of 5 (by Forgejo's source)
489 passed, 2 failed, 38 skipped   (with the follow-up's test included)
488 passed, 2 failed, 38 skipped   (this branch)
FAIL tests/test_bake_portability.py      (zstandard missing here; fails on main too)
FAIL tests/test_builder_log_read_only.py (libtk missing here; fails on main too)

Not tested

  • The forms on the server: Forgejo reads templates from the default branch only, so the new forms show up on issues/new/choose only after this merges. Check after the merge that the chooser shows four forms, and that the bug report's link fills in the five fields.
  • The bug-report link was not opened in the game. The prefill comes from reading Forgejo's source; the web UI doesn't take an API token, so I couldn't try it on the server.
  • A player who isn't signed in goes to the sign-in page first. Forgejo keeps the address in a redirect_to cookie, but the trip back to the filled-in form after a Discord sign-in wasn't tried.

Screenshots

Nothing in the game changes on screen. The forms render only after merge (see above).

Issues

See #14 (the pipeline-list contact link).

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or this PR is a draft. (No game-side behaviour to test beyond the link text, covered by the test.)
  • Measurements before and after, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (Test output; one run each.)
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • AI assistance, if any, recorded with Assisted-by: / Co-Authored-By: trailers. (Made with an AI agent; no trailers, by the maintainer's rule for this account.)
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

If applicable

  • Screenshots for a change that shows on screen.
  • A row in docs/tested-configurations.md for each measured run.
  • MKWVK_API_VERSION bumped (gpu/vk/vk_api.h's MkwVkHost or MkwVkRenderer changed).
  • The SPIR-V headers regenerated with glslang (a shader changed).
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths.
  • Docs updated.
## Why The issue forms were still Hookshot's GitHub forms: they pointed at Hookshot's releases, and the in-game bug report's link did not fill anything in on Forgejo. Pull requests also had no template, so measurements and checks were spelled out only in CONTRIBUTING.md. ## What changed - **Issue forms** move to `.forgejo/ISSUE_TEMPLATE/` (Forgejo reads it first), and `.github/ISSUE_TEMPLATE/` is gone: - `1-game-problem.yml`: crash, graphics, fps/stutter, sound, controls. Version, update track (release / rc / nightly / source), GPU and driver, CPU/RAM/OS, settings and hooked-in tools, the log, steps. Points at the Insert menu's Bug report. Label `bug`, title `Game: `. - `2-install-problem.yml`: the launcher, the builder, the AppImage or make_game.py; which step failed, the error as text, OS and free space, toolchain. Label `bug`, title `Install: `. - `3-save-problem.yml`: a lost save, or an import from Hookshot or an emulator gone wrong; how it was copied, the script's output, never the save itself. Label `bug`, title `Saves: `. - `4-idea.yml`: label `enhancement`, title `Idea: `. - `config.yml`: no blank issues; links to issue #14 (pipeline lists), the releases page and Discord. - Only keys Forgejo 17 supports (`name`, `about`, `title`, `labels`, and the `markdown`/`input`/`textarea`/`dropdown`/`checkboxes` fields). All five files pass Forgejo 17.0.1's own validator (`modules/issue/template`, built locally). - **Bug report link.** Forgejo fills a form field from `field:<id>` in the query, not `<id>` (`routers/web/repo/issue.go`, `setTemplateIfExists`, v17.0.1). The link now uses `&field:version=`, `&field:where=`, `&field:gpu=`, `&field:system=`, `&field:settings=`, and the new path `.forgejo/ISSUE_TEMPLATE/1-game-problem.yml`. Dropdowns can't be filled from the URL, so the update track stays for the player to choose. report.txt still tells the player to copy the answers and drag in the files. - **`.forgejo/pull_request_template.md`**: Why, What changed, Measurements (`Before: main @`, `After:`, hardware, scene, method, a `| | Before | After |` table, the log lines), Not tested, Screenshots, Issues, and a checklist: *For everyone* and *If applicable*. - **CONTRIBUTING.md**: "Commits and pull requests" points at the template rather than repeating it. A new **Measurements** section covers what counts for each kind of change, the rules that make before and after comparable, and a real example (RTX 3080, main 87991bc8 against nightly 55b976c0). The "Pull request titles" version rules are unchanged. `docs/workflow.md` step 5 points at CONTRIBUTING. - `tests/test_bug_report.py` reads the new form. It checks that every part of the link is a `field:<id>` the form has, and that the old folder is gone. ## Measurements Before: main @ d3bd2805 After: forgejo-templates @ 014158c9 Hardware: Linux (CachyOS), no game run needed Scene: none (templates, a link and docs) Method: `LONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py`, once on the branch; main's numbers as recorded for d3bd2805 | | Before | After | |---|---|---| | tests/run_all.py | 488 passed, 2 failed, 38 skipped | 488 passed, 2 failed, 38 skipped | | issue forms in `.forgejo/ISSUE_TEMPLATE`, passing Forgejo 17.0.1's validator | 0 | 4, and config.yml | | bug report link fields Forgejo fills | 0 of 5 | 5 of 5 (by Forgejo's source) | ``` 489 passed, 2 failed, 38 skipped (with the follow-up's test included) 488 passed, 2 failed, 38 skipped (this branch) FAIL tests/test_bake_portability.py (zstandard missing here; fails on main too) FAIL tests/test_builder_log_read_only.py (libtk missing here; fails on main too) ``` ## Not tested - The forms on the server: Forgejo reads templates from the default branch only, so the new forms show up on `issues/new/choose` only after this merges. Check after the merge that the chooser shows four forms, and that the bug report's link fills in the five fields. - The bug-report link was not opened in the game. The prefill comes from reading Forgejo's source; the web UI doesn't take an API token, so I couldn't try it on the server. - A player who isn't signed in goes to the sign-in page first. Forgejo keeps the address in a `redirect_to` cookie, but the trip back to the filled-in form after a Discord sign-in wasn't tried. ## Screenshots Nothing in the game changes on screen. The forms render only after merge (see above). ## Issues See #14 (the pipeline-list contact link). ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or this PR is a draft. (No game-side behaviour to test beyond the link text, covered by the test.) - [x] Measurements before and after, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (Test output; one run each.) - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [ ] AI assistance, if any, recorded with `Assisted-by:` / `Co-Authored-By:` trailers. (Made with an AI agent; no trailers, by the maintainer's rule for this account.) - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### If applicable - [ ] Screenshots for a change that shows on screen. - [ ] A row in `docs/tested-configurations.md` for each measured run. - [ ] `MKWVK_API_VERSION` bumped (`gpu/vk/vk_api.h`'s `MkwVkHost` or `MkwVkRenderer` changed). - [ ] The SPIR-V headers regenerated with glslang (a shader changed). - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [ ] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. - [x] Docs updated.
The issue forms were GitHub's, in .github/ISSUE_TEMPLATE, and pointed at Hookshot's releases. Forgejo
reads .forgejo/ISSUE_TEMPLATE first, so the new set lives there: game problem, install or build
problem, save problem, idea, and contact links to issue 14 (pipeline lists), the releases and Discord.

The Insert menu's bug report opened the form with &version=... parameters, which Forgejo ignores: it
fills a form field from field:<id> (routers/web/repo/issue.go, setTemplateIfExists). The link now
uses those, for the new form's path.

.forgejo/pull_request_template.md asks for why, what changed, measurements before and after, what
was not tested, screenshots and a checklist; CONTRIBUTING.md points at it and says what counts as
a measurement for each kind of change.
HumanBean deleted branch forgejo-templates 2026-11-12 23:32:47 +00:00
Sign in to join this conversation.
No description provided.