feat(legal): land cargo-about + cargo-deny + Flutter license inventory
Closes engineering deliverables 1–3 from the open-work table in `docs/governance/legal-review-readiness.md` so the DEC-012 legal review can actually run. With this commit, the only remaining engineering item blocking sign-off is signed Windows / macOS / iOS build artefacts, deferrable per the DEC-002 staged release plan. Tooling ------- * `about.toml` + `about.hbs` + `about-md.hbs` configure cargo-about with the DEC-020 license posture and the five-target matrix (Linux, Android, Windows, macOS, iOS). One per-crate clarification for `allo-isolate` (`flutter_rust_bridge` transitive that ships Apache-2.0 via `license-file` rather than an SPDX `license` field). `cargo about generate` runs with zero warnings. * `deny.toml` mirrors the cargo-about allow-list and adds minimal bans / sources / advisories config. `cargo deny check` reports `advisories ok, bans ok, licenses ok, sources ok` for the workspace; multiple-versions of `windows_x86_64_msvc` produce advisory `warn` (no fail) because three windows-targets versions reach the graph via `jni`, `cpal`, and `keyring` respectively. * `tools/dump_flutter_licenses.sh` + `tools/dump_flutter_licenses.dart` walk `apps/chanora_flutter/pubspec.lock`, resolve each dependency to its local pub-cache directory, read the LICENSE file, and emit `docs/security/flutter-license-inventory.md`. SDK-sourced packages (`flutter`, `flutter_localizations`, `flutter_test`, `flutter_web_plugins`, `sky_engine`) resolve to the Flutter framework BSD-3-Clause LICENSE under `$FLUTTER_ROOT` (or `$HOME/sdks/flutter`). Artefacts --------- * `docs/security/license-inventory.md` — 364 transitive Rust crates with full license texts. Apache-2.0 (276), MIT (55), Unicode-3.0 (19), BSD-3-Clause (7), ISC (7). Zero copyleft. * `docs/security/license-inventory.html` — same data rendered as styled HTML for reviewer convenience. * `docs/security/flutter-license-inventory.md` — 94 Dart / Flutter packages with their LICENSE texts. Zero packages without a resolvable LICENSE in this RC. CI -- * New `supply-chain` job runs `cargo deny check --workspace --all-features` via `EmbarkStudios/cargo-deny-action@v2`. Fails the build on any GPL / LGPL / AGPL / commercial-source license surfacing transitively. * New `license-inventory` job installs `cargo-about --features cli` and regenerates `docs/security/license-inventory.md`; diffs against the committed copy and fails on drift. Forces contributors who touch the Cargo.lock to refresh the inventory. * New `flutter-license-inventory` job runs `tools/dump_flutter_licenses.sh` against the just-resolved pub cache; same diff-on-drift semantics. Governance ---------- * `docs/governance/legal-review-readiness.md` §5 cross-links the three new artefacts in a "Reviewer artefacts" subsection. * The open-work table at the bottom of the doc is rewritten as a status grid: items 1–3 now read **Done**; item 4 (signed iOS / macOS builds) remains the only open engineering blocker, with a pointer back to `staged-release-plan.md`. Verification ------------ * `CHANORA_DISABLE_KEYRING=1 cargo test --workspace`: all 49 unit + integration tests green (unchanged from v1.0.0-rc.1). * `cargo deny check`: advisories ok, bans ok, licenses ok, sources ok. * `cargo about generate --output-file …`: zero warnings. * `tools/dump_flutter_licenses.sh`: 94 packages, 0 without LICENSE. * `flutter analyze`: clean. No code changes touch the runtime; this is governance-tooling only.
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Chanora — Third-party license inventory</title>
|
||||
<style>
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
max-width: 80ch; margin: 2em auto; padding: 0 1em; line-height: 1.5; }
|
||||
h1, h2 { border-bottom: 1px solid #ccc; padding-bottom: 0.2em; }
|
||||
.crate { margin-bottom: 1.5em; padding: 0.6em 1em;
|
||||
border: 1px solid #ddd; border-radius: 4px; background: #fafafa; }
|
||||
.crate h3 { margin: 0 0 0.4em 0; font-size: 1em; }
|
||||
.license { font-family: ui-monospace, SFMono-Regular, monospace;
|
||||
background: #eef; padding: 0.1em 0.4em; border-radius: 3px; }
|
||||
pre { background: #f0f0f0; padding: 1em; overflow-x: auto;
|
||||
max-height: 30em; font-size: 0.85em; }
|
||||
.footer { margin-top: 3em; padding-top: 1em; border-top: 1px solid #ccc;
|
||||
color: #666; font-size: 0.85em; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Chanora — Third-party license inventory</h1>
|
||||
|
||||
<p>
|
||||
This page enumerates every third-party crate that ships in a release
|
||||
build of Chanora and the license under which Chanora redistributes
|
||||
it. Generated by <code>cargo about generate</code> from
|
||||
<code>about.toml</code> at the repository root; regenerate via the
|
||||
<code>just license-inventory</code> recipe.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Chanora itself is dual-licensed under
|
||||
<a href="../../LICENSE-APACHE">Apache License 2.0</a> or the
|
||||
<a href="../../LICENSE-MIT">MIT License</a> at the recipient's option
|
||||
(see DEC-020 in
|
||||
<code>docs/governance/product-decision-register.md</code>).
|
||||
The crates listed below carry their own licenses and are
|
||||
redistributed under those terms.
|
||||
</p>
|
||||
|
||||
<h2>Licenses in use</h2>
|
||||
<ul>
|
||||
{{#each overview}}
|
||||
<li><span class="license">{{name}}</span> — used by {{count}} crate(s).</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<h2>Crates</h2>
|
||||
{{#each licenses}}
|
||||
{{#each used_by}}
|
||||
<div class="crate">
|
||||
<h3>{{crate.name}} {{crate.version}}</h3>
|
||||
<p>License: <span class="license">{{../name}}</span></p>
|
||||
{{#if crate.repository}}<p>Source: <a href="{{crate.repository}}">{{crate.repository}}</a></p>{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
|
||||
<h2>Full license texts</h2>
|
||||
{{#each licenses}}
|
||||
<h3>{{name}}</h3>
|
||||
<pre>{{text}}</pre>
|
||||
{{/each}}
|
||||
|
||||
<div class="footer">
|
||||
Regenerate with <code>cargo about generate --output-file docs/security/license-inventory.html about.hbs</code>.
|
||||
This artefact supports the DEC-012 legal review handoff at
|
||||
<code>docs/governance/legal-review-readiness.md</code>.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user