feat(forge): pull requests open as WIP until measured, with pr ready, wip, edit, update, status and a description check #48
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
needs measurements
question
testing wanted
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!48
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:pr-workflow"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Pull requests were opened for review before they were measured, and their descriptions went stale as they changed, so reviewers couldn't tell what was ready or what a PR does now. This makes a PR work in progress until it is measured, keeps its description current with a comment for each change, and gives the command line and a check to do it.
What changed
needs measurements) and Measurements (columns namedmain @ <hash>andthis PR @ <hash>, never a bare Before/After; another baseline named exactly); one-line reminders in the template,docs/workflow.md's PR and review steps andAGENTS.md..forgejo/pull_request_template.mdin the order Why, What changed, Flags and settings (a table, one row per switch, menu row, ini key or build flag, or "None"), Measurements (with How to reproduce), Not tested / Tested but not measured, Screenshots, Risk and rollback, Reviewer notes, Issues, the checklists; a line of guidance under each heading as a comment. The AI trailers box moved to If applicable, and a box for the Flags table and the switch reference joined it.scripts/check_pr_description.py(from the localpr-description-checkwork, adapted): every required section filled in with no<...>stand-in left, a Measurements table whose columns each carry a label and a hash, one the change (this PR @ <hash>, or a named build that carries it) and one the baseline (main @ <hash>, or a named build), with aBaseline: <its column>line whenever it isn't main against this PR (nothis PR, <anything>columns), and themain:/this PR:lines on their columns' commits, the Flags table or "None", everyRX_*/HOS_*/LONGSHOT_*name the PR's diff adds listed there, every For everyone box ticked. Warnings only: avk_menu.cppchange with Flags "None", and a PR rebased onto a newer main than the one measured. WIP PRs pass with a notice..forgejo/workflows/pr-description.ymlruns it onpull_request_target(opened, edited, synchronize, reopened), reading only the description and the diff from the API, with #13's runner label and pinned checkout.scripts/forge.py:pr createopens as WIP from the template with main's and the branch's commits filled in (--readychecks first);pr ready,pr wip,pr edit,pr update,pr status;pr comment --body-fileas before.tests/test_check_pr_description.py(14),tests/test_forge_pr.py(18, the HTTP layer stood in, no network), the sampletests/pr_description/good.md.docs/forge.mddocuments the commands;docs/development.md's switches section points at the Flags table.Flags and settings
forge.py pr create --readyforge.py pr create --draft--wipcheck_pr_description.py --wip(--draft),--diff--filedescription as WIP; check it against a diffMeasurements
main:
d4a69456(2026-11-12)this PR: pr-workflow @
bcaf516bHardware: Ryzen desktop, CachyOS (Linux 7.3), Python 3.13
Scene: no game run: the game-free checks only
Method:
LONGSHOT_VULKAN_HEADERS=/usr/include python -I -B tests/run_all.py, two interleaved runs each (main, this PR, main, this PR), the whole run; the two new tests by themselves;forge.py pr status 18and this PR, opened withforge.py pr createand filled withpr update, against git.magicbean.devHow to reproduce:
jj new main@forge(or this branch), then the command above;python -I -B tests/test_forge_pr.py;python -I scripts/forge.py pr status 48d4a69456bcaf516bThe two failures are the known ones on
mainhere (test_bake_portability: no zstandard;test_builder_log_read_only: no libtk).Not tested
Not tested: Windows (forge.py and the check are standard library only, paths through
pathlib/os.path); the workflow itself, since Actions are off and no runner serves the repository yet.Tested but not measured:
forge.py pr create,pr update,pr statusandpr readyagainst git.magicbean.dev on this PR, andpr status 18on a merged one.Screenshots
Nothing on screen.
Risk and rollback
.forgejo/workflows,.gitea/workflows,.github/workflowsthat exists: merged before #13 moves the others, this PR's.forgejo/workflowswould shadow.github/workflows. Actions are off on the repository, so nothing runs today either way; it takes effect with #13's move and the runner setup.Reviewer notes
Start with
review()inscripts/check_pr_description.py, thencmd_pr_readyandfill_commitsinscripts/forge.py. Left for a follow-up: #13'spr-title.ymlstrips onlyWIP:before checking the title, not[WIP]; menu rows and ini keys are only a warning (spotting them in a diff surely would need the menu's row table read).Issues
See #13
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.docs/tested-configurations.mdfor each measured run.MKWVK_API_VERSIONbumped (gpu/vk/vk_api.h'sMkwVkHostorMkwVkRendererchanged).mainand passing here.tests/that reads changed source updated in this PR, not weakened.Filled in the description: the rules, the commands, the check, and the test runs on main @
d4a69456and this PR @6b92b9d2, two interleaved runs each (489 and 491 passed, the same 2 known failures).WIP: feat(forge): pull requests open as WIP until measured, with pr ready, wip, edit, update, status and a description checkto feat(forge): pull requests open as WIP until measured, with pr ready, wip, edit, update, status and a description checkPushed
bcaf516bon top: a measurement now names its baseline. The check takes one column as the change (this PR @ , or a named build that carries it) and one as a labelled baseline (main @ , or a named build with its hash). main against this PR needs nothing more; anything else needs a 'Baseline: ' line, and a 'this PR, ' column is refused. CONTRIBUTING's RTX 3080 example was the wrong way round: it now reads nightly @55b976c0(the last nightly before #2602, the baseline) against main @87991bc8(with #2602), noting that main also carried about 50 other merges. In the description: the commits are nowbcaf516b, the test runs are measured again (main, this PR, main, this PR: 489 and 491 passed, the same 2 known failures), and the Windows host-code box is unticked, since this PR has no host code and nothing ran on Windows.