feat: volledige afhankelijkheidsgraaf, supplier-veld, en een verouderingspoort die kan falen #545
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!545
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/sbom-diepte"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Closes #517 apart from the dependency upgrades, which stay out deliberately.
1. The graph was one layer deep
dependenciesentriesdependsOn/ SPDXDEPENDS_ON)Edges come from each resolved package's own
pubspec.yaml, narrowed to what pub actually resolved. Transitivedev_dependenciesstay out — they are in none of our artefacts. Bundled JS, fonts and SDKs hang off the root, so "shipped but named nowhere" no longer exists.Missing and empty are kept distinct: a component whose manifest could not be read gets no
dependenciesentry, which CycloneDX reads as "unknown" — not an empty list, which would claim it has none.It pays off immediately:
opencv_core@1.4.5 → dartcv4@1.1.8is now one query instead of a guess.Guarded by five new tests: no orphan component, graph deeper than the root entry, no edge to an unknown ref, SPDX edges == CDX edges.
2.
supplier— 194 of 200, and one deliberate gapDerived, never invented: declared
repository/homepageon a forge → the account; SDK packages → the SDK vendor; vendored forks → the upstream account; fonts → the rightsholder from their own OFL text; OciDeck → Stichting LibreKAT.A registry or CDN yields nothing: jsDelivr delivers DOMPurify, it does not supply it. So the six vendored JS/CSS bundles keep an empty supplier — locally we hold only their CDN URL. Typing
cure53in from memory would be writing down something nothing checks. If you want this closed, arepositoryfield belongs inassets/web_export/MANIFEST.jsonat the next bundle refresh.CycloneDX also carries the URL the supplier was derived from, so the derivation is checkable. SPDX 2.3 has no field for that; recorded in
docs/SBOM.mdrather than inventing anexternalRef.3. The gate that could not go red
Both halves were wrong. The bundled MIAUW "version" was
2026-07-16— the day we adopted the schema — while the probe returned2024-12-06, the date the source carries. Two different clocks compared with>. An adoption date is by definition later than the source change, solatest > bundledcould never be true.!=, not>. Any divergence alarms, including an upstream value that looks older — then our bookkeeping is wrong. This also realigns it withStandardFreshness.isOutdatedin the app, which the tool had drifted from;probePath: the probe watches the workbook itself, not releases (green through a workbook change without a release) and not the repo as a whole (red from a README typo). A path that no longer exists upstream is now a named finding, not a silent "unknown".Verified in both directions, twice over. Live: current data → clean; old bookkeeping restored → OUTDATED; renamed
probePath→ a finding that says so. And in the suite, via an injectableProberover the real register — one test is called "the old MIAUW bookkeeping is now actually seen", so if that ever goes green the comparison has been reverted.Not done
dartcv41.1.8 → 2.2.1+4 stays. Out of scope by instruction, and rightly: it is held byopencv_core: ^1.4.5— now visible as a single edge in the new graph — so the route runs throughopencv_core, not throughdartcv4. If noopencv_corerelease allows 2.x it becomes adependency_overrideacross a transitive boundary, which is a decision rather than maintenance. And it must be exercised withDARTCV_LIB_PATHset (otherwise the native half sleeps underflutter test) against malformed and truncated image data plus the goldens. A major on the layer that decodes untrusted image data is not flipped unattended.Verification
Built by a subagent in an isolated worktree; rebased onto current
mainby me, andmake checkre-run after the rebase: exit 0, 5510 tests, 86.2% coverage.make sbom-verifyandmake deps-checkboth clean.pubspec.yamluntouched;sbom/regenerated and committed.