tools capa

tools-advisory-reach

Narrows a cargo-audit/RustSec finding from 'this crate is somewhere in the dependency tree' to 'these are the exact call sites in OUR source that reference it' -- cargo audit only version-matches Cargo.lock and cannot tell you whether the vulnerable API is ever actually invoked (this repo's own deny.toml ignore-list comments document that gap being closed by hand via `cargo tree` for 9 advisories already). Caches findings locally (.advisory-reach-cache/) and hands them to a fix pass one pseudonymized call site at a time, same small-pieces discipline as boundary-scan (whose classify/find_functions/pseudonym machinery this reuses rather than duplicating).

Narrows a cargo-audit/RustSec finding from 'this crate is somewhere in the dependency tree' to 'these are the exact call sites in OUR source that reference it' -- cargo audit only version-matches Cargo.lock and cannot tell you whether the vulnerable API is ever actually invoked (this repo's own deny.toml ignore-list comments document that gap being closed by hand via `cargo tree` for 9 advisories already). Caches findings locally (.advisory-reach-cache/) and hands them to a fix pass one pseudonymized call site at a time, same small-pieces discipline as boundary-scan (whose classify/find_functions/pseudonym machinery this reuses rather than duplicating).

Tiertools
Roleunclassified (baselined)
Pathcrates/tools/advisory-reach
Edition2021
Targetstools-advisory-reach, tools_advisory_reach
Public items9 across 0 modules
Tests3

What it is for

Narrows a cargo audit finding to real call sites.

cargo audit only version-matches Cargo.lock against the RustSec advisory database, then prints the dependency graph back to workspace members — it never checks whether the vulnerable API is actually called. This repo's own deny.toml/audit.toml ignore-list comments document that gap being closed by hand, per-advisory, via cargo tree (9 entries, each with a written "verified unreachable because ..." rationale). This tool makes that step repeatable instead of ad-hoc.

Note the identifier you search for is usually NOT the advisory's own crate (which may be several hops down and never imported directly) but the crate your code actually depends on and calls — e.g. RUSTSEC-2026-0119 is in hickory-proto, but nothing in this workspace imports hickory_proto directly; what's actually called is hickory_resolver, which internally exercises the vulnerable encoding path on every resolution. Pass --crate as whatever your code really imports.

Two-step, same shape as tools-boundary-scan: 1. scan: find every workspace crate that directly depends on --crate (via cargo metadata, not a lockfile graph walk — direct edges only, a transitive dependent's own source won't mention the identifier), then find every real (non-comment, non-string) reference to that crate's Rust identifier in their src/. Cached to .advisory-reach-cache/<crate>.json — "keeps those pieces for after" rather than dumping everything to stdout immediately. 2. shard: pull ONE cached site, pseudonymize its enclosing function via tools_boundary_scan::pseudonym (the same engine, same per-finding local map), and return a small packet sized to hand to a fix pass.

Capabilities

crate root

Narrows a cargo audit finding to real call sites.

Item
fn cache_path(workspace_root : & Path, crate_name : & str) -> PathBuf

ReachSite

Narrows a cargo audit finding to real call sites.

Item
pub struct ReachSite
ReachSite :: fn to_envelope(& self, tool : & str) -> tools_boundary_scan::report::Envelope

ScanResult

Narrows a cargo audit finding to real call sites.

Item
pub struct ScanResult
fn scan(workspace_root : & Path, crate_name : & str, advisory : Option <& str>) -> Result <ScanResult>
fn save_scan(workspace_root : & Path, crate_name : & str, result : & ScanResult) -> Result <()>
fn load_scan(workspace_root : & Path, crate_name : & str) -> Result <ScanResult>

Shard

Narrows a cargo audit finding to real call sites.

Item
pub struct Shard
fn shard(workspace_root : & Path, crate_name : & str, index : usize) -> Result <Shard>

How to use it

No examples/ target and no doctest in this crate's rustdoc. The tests listed under Verification are the closest executable usage.

Module structure

No public modules: the crate root is its whole surface.

Public surface

`crate root`

ItemWhat it is
pub struct ReachSite
ReachSite :: fn to_envelope(& self, tool : & str) -> tools_boundary_scan::report::EnvelopeThe standardized cross-tool reporting shape — see tools_boundary_scan::report
pub struct ScanResult
fn scan(workspace_root : & Path, crate_name : & str, advisory : Option <& str>) -> Result <ScanResult>
fn cache_path(workspace_root : & Path, crate_name : & str) -> PathBuf
fn save_scan(workspace_root : & Path, crate_name : & str, result : & ScanResult) -> Result <()>
fn load_scan(workspace_root : & Path, crate_name : & str) -> Result <ScanResult>
pub struct ShardOne pseudonymized shard for a single cached site — small enough to hand to a fix pass without the rest of the file.
fn shard(workspace_root : & Path, crate_name : & str, index : usize) -> Result <Shard>

No pub use re-exports: every item above is declared in this crate.

Boundary

Depends on no other workspace tier.

Shares tier tools with 84 other crates: tools-archive-guard, tools-artifact-scaffold, tools-ask-ai-core, tools-ask-ais, tools-ask-gemini, tools-book, tools-book-report, tools-boundary-scan, … (84 total).

_What this crate deliberately does NOT own is a judgment. No committed registry records one for it, so none is stated here._

Where it sits

Tier (ontology)tools
Architectural role (taxonomy)unclassified (baselined)
Locationcrates/tools/advisory-reach
Vocabulary in force (lexicon)current

Dependencies

Runtime, in this workspace.

CrateTierOptionalOnly on
`tools-boundary-scan`toolsnoalways

Runtime, from outside the workspace.

CrateRequirementFeaturesOptionalOnly on
anyhow^1noalways
serde^1derivenoalways
serde_json^1noalways

Development. None.

Build. None.

Depended on by. Nothing in this workspace.

Signal flow — what reaches this crate, and what it reaches.

flowchart LR
  SELF["tools-advisory-reach"]
  SELF -->|runtime| n_tools_boundary_scan["tools-boundary-scan"]
  classDef self fill:#1f883d,stroke:#1f883d,color:#fff;
  class SELF self;

Feature flags

No Cargo features are defined: every capability is unconditional, so no consumer can receive a half-wired crate.

Targets

KindNameSource
bintools-advisory-reach`src/main.rs`
libtools_advisory_reach`src/lib.rs`

Error model

No public error type was detected: no public item declares a type named *Error, and no public signature returns one.

Operational characteristics

PropertyEvidence
async public surfacenone detected
async runtimenone detected
database accessnone detected
network I/Onone detected
unsafe codenone detected
environment variablesyes

No unsafe block, unsafe fn, unsafe impl or unsafe trait was found by the parser anywhere in this crate's source.

Configuration

VariableRead in
CARGO_MANIFEST_DIRsrc/main.rs

No workspace crate depends on this one.

Verification

KindCount
Unit tests3
Integration tests0
Examples0
Doctests0

Evidence by module. How often each public module is named by something executable.

ModuleTestsExamplesConsumers
crate root800

What the tests establish, by name:

Documentation coverage

MeasureDocumentedTotal
Public items with rustdoc29
Public modules with a //! block00
pie showData
    title Public items with rustdoc
    "Documented" : 2
    "No rustdoc detected" : 7

Metrics

MetricValue
Rust source files2
Source lines626
Code lines506
Public API items9
Public modules0
Tests3
Examples0
Cargo features0
Direct runtime dependencies4
Workspace reverse dependencies0
pie showData
    title Public API by kind
    "function" : 5
    "method" : 1
    "struct" : 3
pie showData
    title Rust source composition
    "Code" : 506
    "Blank or comment" : 120

Generation

Rendered by tools-corpus corpus readme from repository evidence alone, renderer schema 2, lexicon current. No model, network service or database was consulted. Regenerate with tools-corpus corpus readme --write; verify with --check.

Todas las tools · Manual