docs(github): review the non-workflow metadata under .github/ - #637
Conversation
Requested by the owner; no issue tracks this. - `release.yml` is live and stays. `create-release.yml:164` requests the generated notes and the action joins them after the body, so a pre-release carries them alone. Its catch-all was titled "Features" while 24 of the last 40 merged pull requests were `fix` and 2 were `feat`, so it is now "Changes"; the catch-all also moved last, so the dependency category no longer depends on an `exclude` to receive anything. - `bug_report.md` gains the reproduction section it never had, asks for the commit when the reporter is on a checkout, marks the traceback optional since most defects here are silent, and drops the pinned `1.5.0b4` example. - `ISSUE_TEMPLATE/config.yml` is new. `SECURITY.md` asks reporters not to file anything exploitable publicly, and the chooser offered no private route. - Both issue templates now self-label; no issue after #576 carries a label. - `PULL_REQUEST_TEMPLATE.md` replaces three purpose boxes that had no room for a `docs` or `test` change with the eight types `CONTRIBUTING.md` documents, and drops GitHub's retired `/search?q=` endpoint. - `FUNDING.yml` loses GitHub's commented-out platform roster, `otechie` among them. `dependabot.yml` is unchanged. Every YAML parses and matches GitHub's documented schema; every link resolves. No changelog entry -- repository metadata is not user-visible, as in #613.
Cross-review: NEEDS CHANGES → addressed, now GOOD TO GOAn independent cross-review ran on a different model (Sonnet) from the one that authored this PR (Opus), briefed to falsify rather than confirm, read-only. It returned NEEDS CHANGES on one claim. That claim was in this PR's description, not in the six changed files — the reviewer found nothing to change in any of them. What it refuted, and the correction
Refuted, and the reviewer was right. Two different placeholders were conflated when this description was written:
The figure 17 was real but belonged to the other section. Re-derived independently and the numbers agree exactly, including the three issue numbers. The description has been corrected; the template edit it supported stands on its own merits and is unchanged. Two further overclaims the reviewer flagged, both now fixed in the description:
No commit amend was needed: none of the three claims appears in the commit message. What it confirmed independently
Stated limits of the review
CIChecks are Verdict after the correction: GOOD TO GO. Unpublished judgement on merge remains the owner's. |
Requested by the owner, in their words: "let's have an agent to revise/cleanup the docs under .github path as well, like the release.yml (seems no longer needed per create-release GHA's update to read from changelog.md?) and issue templates and pr templates". No issue tracks this.
.github/workflows/**is untouched — #626 ownslint.yml, andcreate-release.yml/cron-vendor.ymlare the path about to be exercised for1.5.0b5. They were read, not edited.release.ymlis live — the hypothesis is the wrong way roundDo not delete it.
create-release.ymldoes not replace the generated notes withCHANGELOG.md; it prepends to them, and on the release about to be cut it contributes nothing at all.Read on this branch's base:
create-release.yml:121-147Select release bodystep, which decides whetherCHANGELOG.mdis usedcreate-release.yml:129-132CHANGELOG.mdabsent → exits without settingpath, so generated notes alonecreate-release.yml:137-140.postNvendor refresh, neither of which has a changelog entry of its own"create-release.yml:158-162<body>\n\n<generated>, so the hand-written entry leads and the pull-request list follows"create-release.yml:164generate_release_notes: true— unconditional, on both paths1.5.0b5is a pre-release, soCHANGELOG.md's heading (1.5.0) will not match and the release body comes entirely from the categories in this file. Deleting it would have degraded the notes on exactly that release.What
release.ymlactually neededTwo things, both measured.
The catch-all was mislabelled. Categorisation keys on pull-request labels and nothing else — GitHub's documentation has no title or conventional-commit matching, so the
type(scope):prefix this project uses cannot reach this file. And in practice nothing but Dependabot labels anything: all 20 most recently merged PRs carry zero labels, and only 8 of the last 40 issues carry any, none above #576. So every hand-authored PR falls through tolabels: ['*']— which was titled 🏕 Features. Across the last 40 merged PRs:fixtestdocsfeatperfA "Features" heading described 2 of 39 human PRs. It is now 🏕 Changes.
The catch-all was first, not last. GitHub documents
*as catching pull requests that "didn't match any of the previous categories" — so a*category placed first matches everything, and👒 Dependencieswas receiving PRs only because the Features entry carriedexclude: labels: [dependencies]. Ordering dependencies ahead of the catch-all makes theexcludeunnecessary, so it is gone.To be precise about provenance, since an earlier draft of this description overstated it: GitHub's own documentation example for a repository like this one uses the opposite form — catch-all first, with
exclude: dependencies— so the previous file was not wrong, and this is not "the documented idiom". Both orderings produce an identical partition: no PR lands in two categories and none is dropped. The reorder is kept because one fewer moving part is better, not because the old one misbehaved. The substantive fix here is the retitling above, which is independent of the ordering.Both
titleandlabelsare documented as Required and both are still present on both categories.ISSUE_TEMPLATE/config.yml— new, and this was a real gapSECURITY.md:25-30says "Please do not open a public issue for a security problem" and points athttps://github.com/JarryShaw/PyPCAPKit/security/advisories/new. The "New issue" chooser offered no route there — the only visible option was the public bug template, so the repository was inviting a vulnerability to be filed publicly.The new file adds that link plus Discussions (enabled on this repo) and the docs site.
blank_issues_enabled: trueis explicit and deliberate: the maintainer files most issues without a template and turning it off would remove that route.The templates, judged against how issues and PRs are really written
An important correction to the framing, because it changes the answer. The recent corpus is not external bug reports: of 175 issues, 134 are by the maintainer, and all 40 filed in the last ~45 hours are maintainer-filed via agents. Likewise 0 of the 20 most recent merged PRs use the PR template — every one is maintainer-authored with a bespoke body. External reporters did use the template headings, up to #240/#289.
So "recent issues ignore the template" is not evidence the template fails its audience; its audience is the external newcomer, who has largely stopped filing at all. Rewriting these templates to imitate agent-authored prose would optimise them for the people who bypass them. I did not do that. Also relevant: #613 reviewed all three templates two days ago — it de-staled
bug_report.md's Python versions, added thepcapkitversion field, added the PR checklist's test-run and changelog rows, and foundfeature_request.mdneeded nothing. That work is not redone or reversed here.What is left is audience-independent:
bug_report.mdReproductionsection. The template had none — no reproduction ask of any kind, which is the one field every bug template has. This is the substantive gap.__version__. An editable install can resolve well behind the branch; SeekableReader.truncate pads on the wrong side and returns fewer octets than requested #622 hit exactly that and said so.PCAPKIT_DEVMODE=trueis still valid (pcapkit/utilities/logging.py:64) and docs: repair the Code of Conduct's rendering and refresh CONTRIBUTING #613 checked it, so it stays — but the section assumed the bug crashes, and the current defect corpus is silent wrongness with nothing to paste. 0 of the last 40 issues mentionPCAPKIT_DEVMODE.1.5.0b4example, which goes stale the moment1.5.0b5ships, keeping the command that never does.Additional contextatfile:lineand at why existing tests miss it, instead of leaving an unnamed bucket — 3 of 175 issues left its placeholder text (Add any other context about the problem here.) in place verbatim, and 17 did the same with theSystem informationblock's (A clear and concise description of your system information.).PULL_REQUEST_TEMPLATE.mddocsortestchange — 12 of the last 39 human PRs. They are now the eight typesCONTRIBUTING.md:133documents (feat,fix,docs,test,perf,refactor,ci,chore)./search?q=link used GitHub's retired per-repo endpoint. It still works by redirect (302→github.com/search?q=repo%3A…), so this is tidying, not repair.feature_request.md— #613 found it needed nothing and that still holds. The only change is the label below; the body is byte-identical.Both issue templates now self-label (
labels: bug,labels: enhancement). Only 32 label applications exist across 175 issues and nothing after #576 carries one; the template is the cheapest place to fix that.Every reference verified
CONTRIBUTING.md#coding-style## Coding style,CONTRIBUTING.md:89CONTRIBUTING.md#changelog-entries## Changelog entries,CONTRIBUTING.md:60CONTRIBUTING.md#format-of-the-commit-message(new)### Format of the Commit Message,CONTRIBUTING.md:107make pylint/mypy/isort/testMakefile:134,:137,:124,:79docs/source/changelog/PCAPKIT_DEVMODEpcapkit/utilities/logging.py:64,trueis an accepted valuepcapkit.__version__pcapkit/__init__.py:132,1.5.0b4/pulls?q=is%3Apr(new)/security/advisories/new(new)/discussions(new)jarryshaw.github.io/PyPCAPKit/(new)README.rstanywhere under.github/No stale path was found in any template. The README rename did not leave a dangling reference here.
FUNDING.yml— cleaned, values untouchedNine of its twelve lines were GitHub's commented-out roster of every other platform, carrying "Replace with a single X username" instructions aimed at whoever adopted the file. Those are adopter instructions rather than configuration — the same reasoning #624 used to remove Contributor Covenant 3.0's
[NOTEplaceholder — and one of them,otechie, is no longer a platform GitHub documents. They are gone; the three live values are unchanged.Two findings I did not act on, because removing a funding route is the owner's call:
patreon: jarryshaw→patreon.com/jarryshawredirects topatreon.com/profile/creators?u=100037, a generic landing page rather than a creator page. Suggestive that the button leads nowhere useful, but Patreon redirects unauthenticated requests aggressively, so not conclusive.tidelift: pypi/pypcapkit→ redirects tosonarsource.com/solutions/security/?tidelift=tidelift-redirect. Tidelift was acquired by Sonar, so this funding button now lands on a vendor marketing page.dependabot.yml— unchanged, deliberatelyValid, and it parses. Two gaps exist and I recommend leaving both, on the evidence: of the last 15 Dependabot PRs, 14 were closed unmerged and the last activity was September 2024. Widening its scope would manufacture PRs the owner demonstrably rejects.
github-actionsecosystem, so action pins (actions/checkout@v7,softprops/action-gh-release@v3.0.2) are never updated. Thegithub_actionslabel exists in the repo, suggesting this once ran./condadirectory entry. The historical… in /condaPRs (Bump certifi from 2024.6.2 to 2024.7.4 in /conda #222, Bump urllib3 from 2.2.1 to 2.2.2 in /conda #217, Bump requests from 2.31.0 to 2.32.0 in /conda #207, Bump idna from 3.6 to 3.7 in /conda #197) were security updates, which ignoredependabot.ymlentirely — so they are not evidence the config once covered it.Verification
release.yml,FUNDING.yml,dependabot.ymland the newconfig.ymlall parse under PyYAML, andrelease.ymlis asserted against GitHub's documentedchangelogschema —titleandlabelspresent on every category, no key outside{title, labels, exclude}, catch-all last and unique. Both templates' front matter parses and uses only documented keys.python util/changelog_md.py --checkexits 0.No changelog entry. Nothing here changes the library, its API or its behaviour — it is repository metadata seen by contributors and by the release-notes generator. This follows #613, the closest precedent, which edited these same files and recorded "No changelog entry — this is contributor-facing documentation, not user-visible"; #626 does the same for CI tooling, though it is still open and so carries less weight as precedent. Flagging it because #624 went the other way, so the convention is genuinely unsettled and this is a judgement call rather than a rule.
No tests were run: nothing here touches
pcapkit/.Recommended, not done
.yml) instead of legacy Markdown. Forms give required fields and structured output, and would mechanically enforce the reproduction and version fields this PR merely asks for. I am not converting: it changes how every future reporter interacts with the repo, it cannot be partially adopted per-field, and on the evidence above the external-reporter population is small enough that the owner should weigh whether the friction is worth it. Your call.github-actions, only if action-pin updates are wanted — see the closure record above.bug/enhancement/dependencies), which is the only thing that would letrelease.ymlproduce genuinely categorised notes. Without labels, "🏕 Changes" is the most honest heading available.Workflow defect found, reported not fixed
create-release.yml:233-234has itsenvironment: releaseapproval gate commented out on thepypijob —## Specifying a GitHub environment is optional, but strongly encouragedfollowed by#environment: release— so the release publishes to PyPI with no manual approval. Out of scope here and left alone; flagging it for its own issue.