contract: nothing refuses a direct CHANGELOG.md edit from a PR — the fragment convention is guidance without a fence
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- git, github-actions, go
- Domain
- build-system, ci-cd, tooling
Research direction
Read hooks/pre-commit around lines 60–66 and the existing check-changelog-duplicates.py contract check to understand the current fragment validation and CI pattern. Then trace how CI obtains the PR merge-base diff. Done means staged direct edits to CHANGELOG.md are refused with the documented override, and a CI check rejects PR diffs touching that file while allowing release-time fold commits.
Written by the indexing model from the issue text.
Description
Body:
#800 fixed the AGENTS.md/changelog.d-README split-brain ("mis-led three PRs in one week"), and hooks/pre-commit:60-66 now states "PRs do not edit the changelog directly" — but the enforcement gap is exactly where it was: the hook only validates fragments when staged, and no check anywhere refuses a PR diff that edits CHANGELOG.md directly. The convention is still guidance, not a fence, and the 2026-10-10 train proved the failure mode end to end:
- Four PRs in one night (#835/#837/#836/#842) hand-edited the same
[Unreleased] → Changed / Internalanchor — the precise hand-merge the fragment system exists to remove (#524/#531 history). - #835 merged first with its direct edit, instantly CONFLICTING the other three (verified by trial-merge: sole unmerged file
CHANGELOG.mdin each). - The one fragment-authoring PR of the four (#840) stayed MERGEABLE through the same merges — the convention's value, demonstrated by the accident.
- The review lane then had to rebase-and-swap all three manually (heads
e6741ea9/bc4b86a0/d595c569) — reviewer time spent on a class a check would have prevented atgit committime.
Per the drift doctrine, a rule you cannot remove gets a fence that EXECUTES and can fail. Proposal:
hooks/pre-commit: refuse staged paths matching^CHANGELOG.md$unless an explicit maintainer override is set (e.g.TOLLGATE_CHANGELOG_FOLD=1env), pointing atchangelog.d/README.md.- A small contract check (same family as
check-changelog-duplicates.py) that runs in CI on the PR diff: fail when the merge-base diff touchesCHANGELOG.md. The maintainer's release-time fold commits don't carry a merge-base diff against a PR base, so the allowlist comes for free.
Either half alone leaves the hole (the hook is bypassable with --no-verify; CI sees merged results, not local intent); both together close it the way the entry-port and SSID fences do.
- Dominant language
- Go
- Stars
- 12
- Forks
- 14
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 239
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from OpenTollGate/tollgate-module-basic-go
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
OpenTollGate/tollgate-module-basic-go#833 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
OpenTollGate/tollgate-module-basic-go#813 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
OpenTollGate/tollgate-module-basic-go#804 ·
Maintainers usually reply within 1 day
-
go-battery needs an ndsctl on PATH: TestPurchaseSessionGuardHoldsThroughTheOutcomeUnknownWindow fails on bare hosts (passes with stub)Possibly taken @Amperstrand claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
OpenTollGate/tollgate-module-basic-go#726 · 2 comments ·
Maintainers usually reply within 1 day
-
rebrand-literal-gutter: uhttpd section-vocabulary check trips on a COMMENT (uhttpd.luci in 92-tollgate-admin-setup:178)Possibly taken @Amperstrand claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
OpenTollGate/tollgate-module-basic-go#723 ·
Maintainers usually reply within 1 day
All issues in OpenTollGate/tollgate-module-basic-go
Similar issues
-
raised-by:verifier
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
medici-finance/assay#2718 ·
Maintainers usually reply within 1 day
-
connector good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
soma-intelligence/open-health-sync#60 ·
Maintainers usually reply within 1 day
-
automation models
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
microsoft/TypeScript#64758 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
SocialGouv/iterion#2369 ·
Maintainers usually reply within 1 day