Upstream Manifests¶
TrustSight never fetches what a package declares (A2) and never extracts an upstream archive (A8): the cargo stays sealed. But the dependency manifests that ship beside a recipe are committed to the repository, so the existing tree walk and diff already read them. A manifest whose contents changed between sailings is evidence without a single seal being broken, and the manifest is exactly the document a reviewer is entitled to read.
This layer sits between the declared source=() surface and the
unpinned_build_deps boundary: the committed manifests are the one window
the build-time registry blind spot has, and these rules are the sensor in
that window.
Adding a dependency is ordinary packaging, so most of the series is a weight-0 ledger. Only fetch-surface extension (a new remote source) and a redirected resolver score.
This is a reference page. For how weight and scope work, see Rule System.
Reading a U finding¶
- U003 and U004 are MEDIUM floors, not ceilings: corpus measurement
decides the published rate, as with the X-series. A git dependency is
normal in Rust
-gitpackaging; a redirected resolver is not. - U001, U002 and U005 are weight 0 and never move a number. U002 is a declared-surface ledger - it says what the recipe's committed manifests changed, not that any of it is malicious (B10). U005's primary consumer is the correlation feed.
- A manifest that cannot be parsed is named by W009, never skipped.
Rules on this page¶
| Rule | Name | Severity |
|---|---|---|
| U001 | Manifest Added Or Removed | INFO |
| U002 | Upstream Dependency Delta | INFO |
| U003 | New Remote Source In Manifest | MEDIUM |
| U004 | Registry Redirect | MEDIUM |
| U005 | Dependency Surface Jump | INFO |
| U006 | Manifest Changed Without Its Lockfile | INFO |
U001: Manifest Added Or Removed¶
- Target: committed manifest files
- Severity: INFO (weight 0)
- Category:
dependency-manifest - Condition: A known manifest (from
[patterns] manifest_filenames) is added to or removed from the repository in the diff.
Ledger only. A new or removed manifest changes what the committed dependency surface is, but its mere presence is not a claim about intent.
U002: Upstream Dependency Delta¶
- Target: committed manifest files
- Severity: INFO (weight 0)
- Category:
dependency-manifest - Condition: A manifest's parsed dependency set gains or loses a name.
A declared-surface ledger entry, presented with its own group and the "TrustSight does not verify these" line: it reports the names the committed manifest added or removed, never scores them (B10). Lockfile churn is reported as counts and named top-level dependencies, not a full delta.
U003: New Remote Source In Manifest¶
- Target: committed manifest files
- Severity: MEDIUM (weight 15)
- Category:
dependency-manifest - Condition: A manifest gains a
source_kind=gitdependency, or a non-default-registry dependency, whose canonical host was not present in the old manifest.
The scored core. The gained hosts are run through the same host
canonicalization as a source=() URL and join the run's hosts_gained
view, so host-novelty tiers, source buckets and the G-series treat a
manifest-introduced host exactly like a declared one. The claim is precise:
"the build will now fetch from a host the recipe did not declare."
U004: Registry Redirect¶
- Target: committed manifest files
- Severity: MEDIUM (weight 15)
- Category:
dependency-manifest - Condition: A committed file redirects the resolver away from its
default: a pip
--index-url/--extra-index-url,pip.conf/pip.inior.pypirc; an npmregistryoverride or.yarnrc.yml; a cargo[source]replacement or[registries]; a uv/poetry/pdm index; a composerrepositoriesentry; a Maven<repository>; a NuGet package source; a conda/pixi channel; a Podfilesource- added by this change.
A redirected resolver sends every dependency the build installs somewhere other than the default registry, which is the destination a reviewer has no other way to see.
U005: Dependency Surface Jump¶
- Target: committed manifest files
- Severity: INFO (weight 0)
- Category:
dependency-manifest - Condition: A manifest's dependency count multiplies past
[thresholds] u005.jump_factor(default 3x) in one update.
Ledger only, and its primary consumer is the correlation feed: a dependency surface that multiplies in one update is a campaign shape the G-series joins across packages, not a per-package verdict.
U006: Manifest Changed Without Its Lockfile¶
- Target: committed manifest files
- Severity: INFO (weight 0)
- Category:
dependency-manifest - Condition: A declaration manifest (
go.mod,Cargo.toml,package.json,pyproject.toml/requirements*.txt,pubspec.yaml,mix.exs,stack.yaml,shard.yml,Package.swift,*.cabal) changed in the diff but no lockfile that pins it did.
A real integrity signal (spec section 7.2): the resolved dependency set is not committed alongside the declaration, so what the build will actually fetch is unstated. It stays weight 0 because VCS and library packaging legitimately omit lockfiles - the corpus must adjudicate a scored rate before it can be promoted.