chore: make the internal changelog ours and clarify what the licence covers - #102
Merged
donislawdev merged 2 commits intoAug 2, 2026
Merged
Conversation
CHANGELOG-INTERNAL.md is ours: it records ADRs, rejected variants, measured dead ends and every added test. It belongs next to the notes it argues with, not in a public checkout. Owner's decision; older revisions stay in git history and that is accepted. Consequences handled here rather than discovered later: - tests/test_version_and_release.py can no longer read it, so the shared CHANGELOG_FILES tuple and test_breaking_sections_come_first now cover only the shipped changelog. A test that reads an absent file would redden CI for a reason no CI could fix. The dated-section test lost the word "both" from its name because it is no longer true. - release.yml checks one changelog at tag time instead of two. - The PR template no longer asks outside contributors to edit a file they cannot see. - Two comments pointed readers at it from engine.py and test_inject_batch.py; both now say what happened instead of where to read about it. - The repository scanners skip it, so they keep measuring the same set here and in CI. Its structure is still guarded, just not from here: BREAKING-comes-first and the dated section for VERSION.txt moved into the Stop hook, which runs where the file exists. What that costs is worth stating: at the moment of tagging, nothing in CI can see this file any more. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A reader can reasonably wonder whether writing a scenario file with a GPLv3 program puts that scenario under the GPL. It does not, and both READMEs now say so in the licence section: scenarios you write, saved profiles and config files, reproduction reports, CSV exports, logs and screenshots are your own work, and using the tool obliges you to publish nothing. The distinction that would be misleading to leave out: the example scenarios shipped in scenarios/ ARE part of the project and stay GPLv3. One you wrote yourself is not, even if you started from one of them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two commits, plus one question answered by measurement that produced no change.
1.
CHANGELOG-INTERNAL.mdleaves the repositoryIt records ADRs, rejected variants, measured dead ends and every added test. That belongs next to the notes it argues with, not in a public checkout. Older revisions stay in git history and that is accepted.
The interesting part is what had to move with it, because a
git rm --cachedalone would have broken three things quietly:tests/test_version_and_release.pyread it in three places. A test that reads a file absent from every checkout reddens CI for a reason no CI can fix, so the changelog checks now cover only the shippedCHANGELOG.md, and the dated-section test lost the word "both" from its name because it stopped being true.release.ymlchecked both files at tag time and now checks one.engine.pyandtest_inject_batch.pypointed readers at it; they now say what happened instead of where to read about it.The structural guards did not disappear, they moved into the maintainer's Stop hook, which runs where the file exists: BREAKING-comes-first, and a dated section for whatever version
VERSION.txtnames. Both mutation-checked after the move.Two things worth stating plainly rather than leaving to be discovered:
### ADR 2026-07-29: Nuitka ...), so two### Fixedblocks in one version are normal - and 0.4.0 already has them. Ported blindly, the check fired on the existing file within a minute of being written. The right answer was to drop the check, not to reshape a published section to satisfy it.2. Both READMEs say that what you make with the tool is yours
A reader can reasonably wonder whether writing a scenario file with a GPLv3 program puts that scenario under the GPL. It does not. Scenarios you write, saved profiles and config files, reproduction reports, CSV exports, logs and screenshots are your own work, and using the tool obliges you to publish nothing.
The distinction it would be misleading to omit: the example scenarios shipped in
scenarios/are part of the project and stay GPLv3. One you wrote yourself is not, even if you started from one of them and changed the numbers.3. Is the CI build a release build? Yes, and the one remaining lever was measured and rejected
PyInstaller has no debug/release split. What exists is already set:
debug=False,upx=False(packed binaries get flagged by scanners) andstrip=False. The only untouched lever isAnalysis(optimize=), which defaults to-1meaning "inherit the building process", so today's builds are level 0.Two real builds, startup paired and interleaved over 14 pairs:
--version), medianThe difference of medians is +0.3 ms against a 34 ms spread, so there is no difference. The gain is 0.62 MB, or 2.7%.
Rejected even so.
-OOstrips docstrings and asserts from the whole bundle including dependencies -beantester/has none and never reads__doc__, pydivert's production code has none either (its 466 asserts are in its tests), but psutil ships 18 in_common.py. The stronger reason: it creates a source-versus-frozen divergence no test can see, because the suite runs from source where docstrings exist. That is the same class the Nuitka ADR already listed among its three defects. 2.7% of size is not worth silent differences in the shipped artefact that nothing guards.No code change from this section. The measurement is written down so nobody re-opens it from a hunch.
Testing
python -m pytest tests: 918 passed, exit 0.python smoke_gui.py: OK. Both built exes were smoke-tested (--version,--license,--simulatewith NDJSON output) before the comparison.🤖 Generated with Claude Code