Upstream Manifests¶
Where these rules come from and what a finding means: Rule Nature.
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), an origin move, and a redirected resolver score. On the full-AUR watcher, complete normalized manifest and workflow state is compared between cycles; an incomplete read preserves the prior state instead of inventing a delta.
This is a reference page. For how weight and scope work, see Rule System.
Reading a U finding¶
- U003, U004 and U011 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 or origin is not. - U001, U002, U006 and U012 are weight 0 reader-facing ledgers and never move a number. U005 is also weight 0, but is feed-only: its primary consumer is the correlation feed rather than the default findings list.
- 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 |
| U011 | Upstream Origin Changed | - |
| U012 | Lockfile Integrity Weakened | - |
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.
U011: Upstream Origin Changed¶
- Condition: A dependency present in both the old and new manifest changes origin (source kind or registry/host) while at least one side names one.
The declared origin moved under a dependency that already existed: a registry entry became a git/VCS entry, or a lockfile entry started resolving from a different registry or host. The build now fetches the same name from a different place, which is the manifest-level counterpart of a source host move. A dependency that merely appears or disappears is owned by U001/U002.
U012: Lockfile Integrity Weakened¶
- Condition: A dependency in a committed lockfile loses its integrity value, or its integrity algorithm is downgraded (e.g.
sha512tosha256), or the lockfile itself is removed.
Verification of the dependency's bytes was weakened. INFO and weight 0: a lockfile can legitimately drop integrity for a path or workspace entry, and the finding is a review prompt rather than a scored change. The lockfile's removal is reported here because the file that pinned every dependency is gone.