mirror of
https://github.com/Comfy-Org/github-workflows.git
synced 2026-11-05 00:17:37 +00:00
[PR #298] [MERGED] test(refresh-reviewers): two-way input-vs-docs drift test for the caller guide #299
Labels
No labels
cursor-review-catalog-drift
groom
groom
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/github-workflows#299
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/github-workflows/pull/298
Author: @mattmillerai
Created: 9/16/2026
Status: ✅ Merged
Merged: 9/17/2026
Merged by: @mattmillerai
Base:
main← Head:matt/be-14761-refresh-reviewers-inputs-docs-drift-test📝 Commits (4)
7e5f4d3docs(refresh-reviewers): add its own caller guide so the workflows_ref cross-check covers itfc9f7acdocs(refresh-reviewers): tighten guide accuracy from cursor-review panel1bbe0e7test(refresh-reviewers): pin workflow_call inputs against the docs/callers Inputs table2321bdctest(refresh-reviewers): run the drift test on the files it parses; harden its scanners📊 Changes
8 files changed (+320 additions, -11 deletions)
View changed files
📝
.github/bump-callers/README.md(+1 -0)➕
.github/refresh-reviewers/tests/test_inputs_docs.py(+148 -0)📝
.github/workflow-pins/check_workflow_pins.py(+9 -4)📝
.github/workflow-pins/tests/test_check_workflow_pins.py(+28 -2)📝
.github/workflows/test-refresh-reviewers.yml(+4 -0)📝
README.md(+1 -1)📝
docs/callers/README.md(+6 -4)➕
docs/callers/refresh-reviewers.md(+123 -0)📄 Description
ELI-5
The refresh-reviewers reusable workflow has a list of knobs (its
inputs:). Its brand-new setup guide has a table documenting those same knobs. If the two ever disagree — a knob documented but no longer real, or a real knob nobody wrote down — someone copying the guide gets a workflow that dies at startup with no logs, or a hidden feature nobody can find. This adds a tiny test that reads both lists and fails loudly the moment they drift apart, so the guide can never quietly go wrong.What & why
Adds
.github/refresh-reviewers/tests/test_inputs_docs.py: a stdlib-only (no PyYAML) two-set drift check pinning:on.workflow_call.inputsdeclared in.github/workflows/refresh-reviewers.yml, against## Inputstable indocs/callers/refresh-reviewers.md.This is the BE-4691 failure mode applied to the new refresh-reviewers caller guide, which had no such pin: a phantom documented input gives a copying caller a zero-job
startup_failurewith no logs; a deleted-but-documented or added-but-undocumented input drifts silently. The test is modeled directly on the cursor-review panel's.github/cursor-review/tests/test_workflow_inputs_docs.py(same scanners, same parser-sanity guard), reduced to two sets.Both sets currently resolve to the same 12 names:
reviewer_config_path, window_months, half_life_days, top_k, floor, min_touches, min_score, floor_min_touches, map_exclude, extra_exclude_paths, pr_branch, workflows_ref. The sets are derived by scanning, not hardcoded.Deliberately a TWO-set check
.github/refresh-reviewers/README.md's## Knob defaults (and why)table is not included. Verified against the file: it is intentionally partial (omitsreviewer_config_path,map_exclude,extra_exclude_paths,workflows_ref) and uses combined-cell rows (| \top_k` / `floor` |,| `min_touches` / `min_score` |`). The bare-name table regex would capture only 4 of the 12 declared inputs from it, so adding it as a third set would make the check permanently red or vacuous.Parser-sanity guard
Each scan is asserted non-empty AND to contain
workflows_ref, so a scanner that silently stops matching (a YAML/table structure change) fails loudly instead of comparing two empty sets and passing vacuously.Verification
python3 -m unittest discover -s .github/refresh-reviewers/tests -p 'test_*.py' -v— 50 tests pass (48 pre-existing + 2 new), run on this stacked branch (i.e. a checkout that has #296's doc present, per the ticket's verification instruction).top_k→top_kkin the doc table turned both new assertions red (missing: ['top_k']andphantom: ['top_kk']); reverted.test-refresh-reviewers.yml(path filter.github/refresh-reviewers/**+discover -p 'test_*.py'); no CI-wiring change needed.Provenance
python3 -m unittest discover -s .github/refresh-reviewers/tests -p 'test_*.py' -vgreen (50/50) on the stacked branch; negative case (renamed doc input) confirmed red then reverted.main(introduced by open PR #296), so rather than parking this blocked, I stacked on #296's branch per the ALWAYS-STACK protocol — see the banner and Residual.Residual
docs/callers/refresh-reviewers.mdis introduced by open PR #296, not yet onmain. This PR is stacked on #296's branch. If #296 is closed/abandoned rather than merged, this PR's base disappears and it should be closed too; if #296's branch is deleted on a squash-merge, re-open this againstmain(its diff is alreadymain-clean — one new file). Until #296 merges, this test cannot run onmain.## Inputstable is edited before merge such that a first-cell input name diverges fromrefresh-reviewers.yml, this test will correctly go red — that is the test doing its job, not a false failure, and would flag a real doc bug in #296.refresh-reviewers.yml, thedocs/callersguide on #296's branch) and the README knob table were read and exercised directly.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.