Refuse a source file that does not carry the licence it is under [#18] - #188
Merged
Merged
Conversation
The licence at the root says what this repository is under and travels with nothing. A file lifted out of this tree into another one arrived carrying no terms, and read as something anybody may do anything with. The header is what makes the terms a property of the file rather than of the place it was found. `internal/licence` holds the identifier and reads the comment a source file opens with. The identifier is `AGPL-3.0-or-later`, settled in entry 1 of #7 and carried fleet-wide by Flowfin/hub#1. The bare `AGPL-3.0` the platform reports is deprecated on the published list, and `AGPL-3.0-only` is a different permission rather than a different spelling, so the row refuses both as well as an absent header. The row is `source-carries-its-licence-header` and it reads every tracked source file, which is 55 of them today. It passes a body that is not source, and that is the difference between it and every other row in the table: the others refuse the presence of something, so a body of the wrong kind passes without being asked, and this one refuses an absence. The population is cut by extension and the shape is read a second time from the bytes, so a file of a language nobody has taught it to recognise is passed silently; the suite carries a case over the tree that reports one. README.md states the identifier and what the two current spellings differ on. GOVERNANCE.md said nobody may fork this repository, on a reading taken while there was no licence file; the reading is re-taken and the paragraph says the opposite of what it said. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.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.
What was wrong
The licence text is at the root and nothing else in this repository said what it
is. No source file carried the identifier, and the README said so in its own
words while pointing at the entry that had to settle it first:
Run 2026-08-25.
65353c6is the mainline this branch is cut from, and it isnamed in the command so the reading reproduces from anywhere rather than from a
working tree.
That leaves the terms a property of the place a file was found rather than of
the file. A file lifted out of this tree into another one arrives carrying
nothing, and reads as something anybody may do anything with.
GOVERNANCE.md carried the same gap one step worse. Its continuity section said
that nobody may fork this repository, on a reading of a licence file that did
not exist when the reading was taken, and the file has existed since
2138d27.The entry that had to answer first has answered. Entry 1 of #7 is settled as
copyleft, and the spelling is
AGPL-3.0-or-later, decided fleet-wide andcarried on Flowfin/hub#1:
Run 2026-08-25.
What this does
internal/licenceholds the identifier and reads the comment a source fileopens with. Two answers rather than one, because a file carrying no header and a
file carrying the wrong one are different mistakes with different repairs.
The invariant table gains
source-carries-its-licence-headerover a newpopulation, every tracked source file. It refuses an absent header and it
refuses one naming an identifier this repository does not publish under, which
is the near miss worth paying for: the bare
AGPL-3.0the platform reports isdeprecated on the published list, and
AGPL-3.0-onlyis a different permissionrather than a different spelling.
Every tracked source file gains the header, 55 of them, and the run reads them.
README.md states the identifier and what the two current spellings differ on.
GOVERNANCE.md's paragraph is re-taken against the file that now exists.
One thing about this row that is unlike every other row in the table, and it
is stated here rather than found later. The others refuse the PRESENCE of
something, so a body of the wrong population carries none of it and passes
without being asked. This one refuses an ABSENCE, and an absence is what a
produced page, a copy of the design tokens and a document all have. So the row
reads the shape of the body a second time and passes what is not source. The
population is cut by extension and the shape is read from the bytes, and a file
of a language nobody has taught it to recognise is passed silently. That bound
is in the package's own words and the suite carries a case over this tree that
reports one, shown red below.
Closes
Closes #18.
What was run
The gate, at the commit being pushed,
2a73e8b8e58303612dddd1c6f681bb7662bbcf51:The row over the tree:
No test was skipped, and none needed a display or elevation.
The row bites, in both directions it is written for
The header taken off one file, which is what a new file looks like:
The same file carrying the
onlyspelling, which is the near miss a presencecheck misses:
Both edits reverted; the diff against them is empty.
The suite goes red when the row is switched off
The row's decide made to return nothing:
The floor under the shape reading goes red too
The recogniser made to miss the interpreter line, which is the case that exists
so the bound above is reported rather than silent:
All runs 2026-08-25, each edit reverted before the next.
The means
Go, and the invariant table this repository already carries, because the rule is
a property of tracked bytes and that is what the table reads. It carries a rule
a machine refuses, the guard is shown to bite above by switching it off and
watching three cases redden, and every claim here carries the command behind it.
Nothing is added to the module graph: the package imports
bytesand nothingelse, and the suite imports the toolchain and this module.
The alternative considered and refused was a REUSE-style external checker, which
would add a runtime and a dependency this tree does not carry, for a property
one function decides.
On the size of the diff. 59 files and 522 insertions, and 55 of the files
are the same two lines. One property holds across every changed byte, which is
the shape a reader checks instead of the diff: each source file opens with the
identifier this repository publishes under. The rule and its suite are the part
to read.
Who read it
Nobody but me. The ruleset requires no approving review, so this is merged by
whoever opened it, and the evidence above stands in place of a second reader.