Some checks failed
API and SemVer surface / api-surface (push) Failing after 13m11s
Native code generation / deterministic (push) Failing after 2m9s
Documentation / documentation (push) Failing after 1m39s
Imaging and meshing gate / native (push) Failing after 2m58s
Release platform and feature matrix / audit (push) Successful in 44s
Native Rust workspace compile / compile (push) Failing after 55s
Dependency and supply-chain audit / audit (push) Failing after 9m14s
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Failing after 9m22s
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
100 lines
5.4 KiB
Markdown
100 lines
5.4 KiB
Markdown
# Release license, provenance, and asset audit
|
|
|
|
MetaCrate treats every source-derived file, generated output, fixture, bundled
|
|
asset, locked Rust package, and native component as release input. The
|
|
canonical hand-reviewed policy is
|
|
[`ci/provenance-policy.json`](../ci/provenance-policy.json); the native Rust
|
|
`metacrate-ci-matrix` tool turns that policy and `Cargo.lock` into deterministic
|
|
notices and distribution manifests.
|
|
|
|
## Ownership model
|
|
|
|
Files authored for MetaCrate are BSD-3-Clause under
|
|
[`LICENSE.md`](../LICENSE.md). That license retains the BSD attribution for the
|
|
pinned LibreMetaverse public API, behavior, translated tests, fixtures, and
|
|
algorithms. The exact upstream repository and commit are recorded in the
|
|
policy, source-generator inventory, API ledgers, parity ledgers, and
|
|
distribution manifest. The pinned upstream BSD text is shipped verbatim as
|
|
[`licenses/LibreMetaverse-BSD-3-Clause.txt`](../licenses/LibreMetaverse-BSD-3-Clause.txt)
|
|
and verified against its recorded source hash.
|
|
|
|
The audit requires three independently generated provenance ledgers—compiled
|
|
public API, upstream program sources, and upstream tests/fixtures—to identify
|
|
that same pinned commit. This binds rewritten code and documentation mappings
|
|
to the BSD source attribution instead of relying on filename conventions.
|
|
|
|
Exceptions to the default project-owned classification must be explicit
|
|
materials in the policy. The audit recursively inventories every non-README
|
|
file below `codegen/inputs`, `tests/fixtures`, and `fuzz/corpus`, rejects a
|
|
missing or extra entry, validates its SHA-256, origin, license, and distribution
|
|
class, and scans the complete release file list for binary/asset extensions.
|
|
An image, mesh, audio file, native library, or viewer asset therefore cannot be
|
|
added as an unreviewed opaque file.
|
|
|
|
The seven required inputs copied from LibreMetaverse's `linden/` directory are
|
|
CC-BY-SA-3.0, not BSD-3-Clause. They remain unmodified, are attributed to
|
|
Linden Lab in [`NOTICE.md`](../NOTICE.md), and carry their exact hashes and
|
|
license through the generated Rust headers. MetaCrate deliberately excludes
|
|
the neighboring Linden textures, meshes, animations, gestures, clothing, body
|
|
parts, and viewer binaries. The legal-code URI and hash of the upstream legal
|
|
code are recorded in
|
|
[`licenses/CC-BY-SA-3.0-NOTICE.md`](../licenses/CC-BY-SA-3.0-NOTICE.md).
|
|
|
|
## Locked dependency notices
|
|
|
|
`provenance-report` obtains the complete all-feature package graph from
|
|
`cargo metadata --locked`, joins every registry package to its crates.io
|
|
checksum in `Cargo.lock`, and reads license, copyright, copying, and notice
|
|
files from the downloaded crate archives. Identical texts are stored once in
|
|
the consolidated notice while every package records the filenames and hashes
|
|
that apply to it. When a split package omits a repository-wide license file,
|
|
the report uses a matching sibling package from the same repository. If an
|
|
archive supplies no usable notice at all, the report emits a visible generated
|
|
notice containing its declared SPDX expression, authors, repository, and SPDX
|
|
legal-text links; packages are never silently omitted.
|
|
|
|
The generated artifacts are:
|
|
|
|
- [`release/DEPENDENCY-LICENSES.json`](../release/DEPENDENCY-LICENSES.json):
|
|
locked package, checksum, license-expression, repository, and notice hashes;
|
|
- [`release/THIRD-PARTY-NOTICES.md`](../release/THIRD-PARTY-NOTICES.md): package
|
|
index and the complete deduplicated notice/license texts;
|
|
- [`release/NATIVE-LICENSES.md`](../release/NATIVE-LICENSES.md): native version,
|
|
license, linkage, bundling, source, and downstream obligation review;
|
|
- [`release/DISTRIBUTION-MANIFEST.json`](../release/DISTRIBUTION-MANIFEST.json):
|
|
every source file's byte length and SHA-256, all governed materials and
|
|
generated outputs, the hashes of generated notice artifacts, and the exact
|
|
notice set required beside source and binary distributions.
|
|
|
|
OpenJPEG, Opus, and ALSA are system libraries and are not redistributed by
|
|
MetaCrate. Skia and the optional aoTuV/Lancer Vorbis/libogg sources can enter a
|
|
binary through feature builds, so their package notices are included in the
|
|
locked third-party notice. A downstream distributor that supplies a system
|
|
library must add the exact notice belonging to the native package it ships.
|
|
|
|
## Reproduction and gate
|
|
|
|
Fetch the immutable locked crate archives, regenerate, then audit:
|
|
|
|
```sh
|
|
cargo fetch --locked
|
|
cargo run --locked -p metacrate-ci-matrix -- provenance-report
|
|
cargo run --locked -p metacrate-ci-matrix -- \
|
|
provenance-audit --evidence /tmp/metacrate-provenance-audit.json
|
|
```
|
|
|
|
The audit regenerates every report in memory and requires byte-for-byte
|
|
identity with the checked-in files. Its JSON evidence records the source,
|
|
material, generated-output, dependency, unique-notice, and native-component
|
|
counts plus every generated report hash. Evidence creation is exclusive and
|
|
never overwrites an earlier run. A reviewed representative result is retained
|
|
at [`ci/evidence/provenance-audit.json`](../ci/evidence/provenance-audit.json);
|
|
CI writes a fresh result into its uploaded artifact directory.
|
|
|
|
The Gitea supply-chain job runs only on `ubuntu-latest`, fetches the locked
|
|
archives, runs this audit, then keeps the existing `cargo-deny` and
|
|
`cargo-machete` gates. It runs for every source change because the distribution
|
|
manifest intentionally covers the whole release source tree. Live-grid
|
|
credentials, `.env`, network services, fuzz runners, and physical devices are
|
|
not used by this deterministic issue gate.
|