Skip to content

Slice 120: every file attributed, every dependency licensed, and both checked - #91

Merged
HackTuah merged 2 commits into
mainfrom
slice/120-oss-hygiene-governance
Sep 24, 2026
Merged

HackTuah merged 2 commits into
mainfrom
slice/120-oss-hygiene-governance

Conversation

@HackTuah

Copy link
Copy Markdown
Member

reuse lint exits 0 against REUSE Specification 3.3 over all 613 files. It did not before: no LICENSES/ directory at all, 28 files carrying nothing, and two files carrying expressions the tool could not parse.

The part a linter cannot check is the part that mattered

Twenty-six of the uncovered files were src-tauri/icons/*. The obvious fix, sweeping every uncovered file under this project's copyright, would have passed the linter.

It would also have been false. git log --diff-filter=A names the commit that added them: "feat(s001): mix ex_tauri.install — the generator's output, nothing else". They are Tauri's template icons. Attributing them to Sudo Apt Holdings would have put a false copyright notice into the files whose entire purpose is to state copyright accurately, in the slice whose entire purpose is to make that statement checkable. They are attributed to the Tauri Programme within The Commons Conservancy under MIT OR Apache-2.0, and NOTICE says so.

Two dependencies had no licence in the bill, and the bill did not say so

THIRD_PARTY_LICENSES.md is generated from sbom.cdx.json, so the list and the bill cannot disagree. Building it found 2 of 132 components with no licenses key at all: daisyui and heroicons, both github: dependencies.

A Hex package carries its licences in its metadata; a git dependency carries nothing, and the sbom library emits such a component silently rather than with an error. The bill was not wrong, it was quiet, and nothing downstream could distinguish "MIT" from "nobody checked".

Both licences were read at the pinned commit, not at a branch, because a licence read from main is a statement about today rather than about the bytes this project builds against. A test asserts every declared entry's evidence URL contains a 40-character SHA. A component with a licence from neither source now fails the build, with no default: a licence nobody looked up is not a licence.

AC4 as written was unachievable, and the reason is what the certificate means

git log --all found 7 commits with no sign-off. All 7 are merge commits; 6 were made by GitHub itself on merging a PR. A sign-off certifies the right to submit the work; a forge's merge commit introduces none, has two already-signed parents, and is authored by whoever pressed the button. --no-merges is a correction, not a weakening, and the test fails rather than passes on a shallow checkout.

AC3 is recorded as unmet

It asks for the owner's word on the slice 024 signed field set, which 024 proposed for review and nothing since has cleared. Retagged [manual] with the question in the verification queue. Reporting it as met would be the exact failure this slice exists to prevent.

Where the checks run

reuse lint is a workflow step, not a mix gate row: it is a Python tool and the alias must stay runnable inside the FIPS container and on a machine with no Python environment this project controls. mix trinity.reuse stays in the alias as the subset every leg can run, and the division is written into the step so it is not tidied away later.

mix gate
Result: 730 passed, 18 excluded
trinity.coverage: 029 80.31% vs 028 80.31%: OK

🤖 Generated with Claude Code

…h checked

reuse lint exits 0 against REUSE Specification 3.3 over all 613 files. It did not
before: no LICENSES directory at all, 28 files carrying nothing, two files
carrying expressions the tool could not parse.

The part a linter cannot check is the part that mattered. Twenty-six of the
uncovered files were the desktop shell's icons, and the obvious fix, sweeping
every uncovered file under this project's copyright, would have passed. It would
also have been false: those icons are the output of Tauri's own installer, as the
commit that added them says. Attributing them to this project would have put a
false copyright notice into the files whose purpose is to state copyright
accurately, in the slice whose purpose is to make that statement checkable.

THIRD_PARTY_LICENSES.md is generated from the CycloneDX bill, so the list and the
bill cannot disagree. Building it found two dependencies with no licence in the
bill at all: a Hex package carries its licences in its metadata, a git dependency
carries nothing, and the bill emits such a component silently rather than with an
error. The bill was not wrong, it was quiet, and nothing downstream could tell MIT
from nobody checked. Both were read at the pinned commit rather than at a branch,
and a component with a licence from neither source now fails the build.

reuse lint is a workflow step rather than a gate row, because mix gate has to stay
runnable inside the FIPS container and on a machine with no Python environment
this project controls. mix trinity.reuse stays in the alias as the subset every
leg can run, and the division is written into the step so it is not tidied away.

One file cannot carry a header the formatter leaves alone: mix format joins the
last heex comment onto the doctype, so the tag parses as Apache-2.0 followed by
markup. Putting the doctype on its own line is undone every time. Resolved with
REUSE ignore markers and an annotation, with the tags left in the file for a
reader.

The DCO check reads the whole history and excludes merge commits. Measured first
without the exclusion: seven commits had no sign-off and all seven were merges,
six of them made by GitHub on merging a pull request. A sign-off certifies the
right to submit work; a forge's merge commit introduces none.

GOVERNANCE.md states the committer process as it stands rather than as written:
two of three maintainers joined by invitation, because there was no history of
outside contribution for the published path to apply to.

AC3 is retagged manual and recorded as unmet. It asks for the owner's word on the
024 signed field set, which slice 024 proposed for review and nothing since has
cleared. Reporting it as met would be the exact failure this slice exists to
prevent.

mix gate: 730 passed, 18 excluded; coverage 80.31%, unchanged.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
…makes

The postgres leg failed while gate and fips passed. Two of the new tests read
sbom.cdx.json, which is gitignored and generated by mix trinity.sbom as a row of
the mix gate alias. The postgres leg runs mix test directly, so the bill does not
exist there and both tests failed on a missing file rather than on anything they
were written to check.

Locally everything passed, because an earlier mix gate had left the bill in the
working tree. The tests were not wrong about licences; they were wrong about what
a test may assume exists, and only a leg that runs the suite on its own could show
it.

The task now takes --bom <path>, so the planted-dependency test hands it a file in
the temporary directory. That also removes a test that wrote over the real bill in
the repository root, which works right up until two tests run at once.

The completeness test reads THIRD_PARTY_LICENSES.md, the committed artifact, which
is what the criterion is about. A test that reads the generated bill passes or
fails depending on which leg runs it.

Verified as it should have been the first time: with sbom.cdx.json moved out of
the tree, mix test gives 730 passed, which reproduces the postgres leg's
condition. mix gate is 730 passed with the bill present.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
@HackTuah
HackTuah merged commit 25ec324 into main Sep 24, 2026
8 checks passed
@HackTuah
HackTuah deleted the slice/120-oss-hygiene-governance branch September 24, 2026 16:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant