operations capa

operations-repo-inventory

Source-repository inventory: project discovery, technology-stack detection, git facts behind an injectable seam, and incremental re-scan watermarks. Assessment, not mutation.

Source-repository inventory: project discovery, technology-stack detection, git facts behind an injectable seam, and incremental re-scan watermarks. Assessment, not mutation.

Tieroperations
Roleunclassified (baselined)
Pathcrates/operations/repo-inventory
Edition2021
Targetsscan_report, operations_repo_inventory
Public items97 across 10 modules
Tests95

What it is for

Source-repository inventory: discover project directories, detect their technology stack, read git facts through an injectable seam, and compute watermarks so an unchanged repository is skipped on re-scan.

# Posture: assessment, not mutation

This crate never writes to a scanned repository. No commit, no checkout, no config change, no hook execution, no network fetch. Every git subcommand it invokes is read-only and drawn from an allowlist. This mirrors operations-net-discovery's "assessment, not exploitation" invariant (ADR 0001).

# Shape

Pure models and pure functions, with exactly one I/O seam (GitRunner, landing in T-1.3.1). default = — the crate compiles and unit-tests with --no-default-features and performs zero I/O, so detect_stack and the watermark logic are testable without a filesystem or a git binary.

# Two levels, deliberately

A repository and a working tree are not the same thing. Repository holds stable logical identity; Worktree holds mutable per-checkout state. Repository carries no head, branch, or dirty field at all — with several worktrees on divergent branches, any single such field on the parent would be false. See ADR 0001 A-2.

GitRunner: https://docs.rs/operations-repo-inventory detect_stack: crate::detect_stack

Capabilities

Discovery

Project discovery: enumerate every directory under a scan root and say what each one is.

Item
pub struct Discovery
Discovery :: fn degraded_count(& self) -> usize
fn discover <H : ScanHost>(host : & H, root : & Path) -> Result <Discovery, ScanError>

RepoKind

Project discovery: enumerate every directory under a scan root and say what each one is.

Item
pub enum RepoKind

RepoRef

Project discovery: enumerate every directory under a scan root and say what each one is.

Item
pub struct RepoRef

ScanError

Errors raised while scanning.

Item
pub enum ScanError
ScanError :: fn is_systemic(& self) -> bool

git (other)

Git fact collection over the GitRunner seam.

Item
pub const MAX_LOG_COMMITS: usize
pub const MAX_STATUS_ENTRIES: usize
fn fingerprint_status(stdout : & u8) -> String
fn status_args() -> Vec <& 'static str>
fn log_args(max_commits : usize) -> Vec <String>

GitFacts

Git fact collection over the GitRunner seam.

Item
pub struct GitFacts
fn git_facts <R : GitRunner>(runner : & R, worktree : & Path) -> Result <GitFacts, ScanError>

StatusEntry

Git fact collection over the GitRunner seam.

Item
pub struct StatusEntry

DirEntryInfo

The ScanHost seam: every filesystem read flows through this trait.

Item
pub struct DirEntryInfo

EntryKind

The ScanHost seam: every filesystem read flows through this trait.

Item
pub enum EntryKind

ScanHost

The ScanHost seam: every filesystem read flows through this trait.

Item
pub trait ScanHost

SystemScanHost

The ScanHost seam: every filesystem read flows through this trait.

Item
pub struct SystemScanHost
SystemScanHost :: fn canonicalize(& self, path : & Path) -> Result <PathBuf, ScanError>
SystemScanHost :: fn list_dir(& self, path : & Path) -> Result <Vec <DirEntryInfo>, ScanError>
SystemScanHost :: fn entry_kind(& self, path : & Path) -> Result <EntryKind, ScanError>
SystemScanHost :: fn identity(& self, path : & Path) -> Result <String, ScanError>
SystemScanHost :: fn read_file_bounded(& self, path : & Path, max_bytes : usize) -> Result <String, ScanError>

BranchState

The two-level repository model and the completeness vocabulary.

Item
pub enum BranchState

Completeness

The two-level repository model and the completeness vocabulary.

Item
pub enum Completeness

Oid

The two-level repository model and the completeness vocabulary.

Item
pub struct Oid
Oid :: fn new(sha : impl Into <String>) -> Self
Oid :: fn as_str(& self) -> & str

RepoIdentity

The two-level repository model and the completeness vocabulary.

Item
pub struct RepoIdentity
RepoIdentity :: fn new(id : impl Into <String>) -> Self
RepoIdentity :: fn as_str(& self) -> & str

Repository

The two-level repository model and the completeness vocabulary.

Item
pub struct Repository

RunOutcome

The two-level repository model and the completeness vocabulary.

Item
pub enum RunOutcome

Worktree

The two-level repository model and the completeness vocabulary.

Item
pub struct Worktree

runner (other)

The GitRunner seam: every git invocation flows through this trait.

Item
pub const READ_ONLY_SUBCOMMANDS: & & str
pub const STRIPPED_ENV: & & str
pub const SAFETY_CONFIG: & & str
pub const MAX_OUTPUT_BYTES: usize
pub const DEFAULT_TIMEOUT: Duration
fn check_read_only(args : & & str) -> Result <(), ScanError>

GitOutput

The GitRunner seam: every git invocation flows through this trait.

Item
pub struct GitOutput

GitRunner

The GitRunner seam: every git invocation flows through this trait.

Item
pub trait GitRunner

SystemGitRunner

The GitRunner seam: every git invocation flows through this trait.

Item
pub struct SystemGitRunner
SystemGitRunner :: fn discover() -> Result <Self, ScanError>
SystemGitRunner :: fn with_binary(path : impl Into <PathBuf>) -> Result <Self, ScanError>
SystemGitRunner :: fn with_timeout(mut self, timeout : Duration) -> Self
SystemGitRunner :: fn binary(& self) -> & Path
SystemGitRunner :: fn run(& self, cwd : & Path, args : & & str) -> Result <GitOutput, ScanError>

scan (other)

Tying it together: discover, collect facts, roll worktrees up, and decide the run outcome.

Item
fn common_git_dir(parent_git_dir : & Path) -> PathBuf
fn collect_facts <R : GitRunner>(runner : & R, worktree : & Path, verify_stability : bool,) -> Result <GitFacts, ScanError>

Repository

The two-level repository model and the completeness vocabulary.

Item
Repository :: fn divergent_heads(& self) -> bool
Repository :: fn head_count(& self) -> usize
Repository :: fn worktree_count(& self) -> usize
Repository :: fn dirty_worktree_count(& self) -> usize

ScanReport

Tying it together: discover, collect facts, roll worktrees up, and decide the run outcome.

Item
pub struct ScanReport
fn scan <R : GitRunner>(discovery : & Discovery, runner : & R, verify_stability : bool,) -> Result <ScanReport, ScanError>

DetectedStack

Technology-stack detection: a pure function over a file listing.

Item
pub struct DetectedStack

FileEntry

Technology-stack detection: a pure function over a file listing.

Item
pub struct FileEntry
FileEntry :: fn file(relative_path : impl Into <String>) -> Self
FileEntry :: fn dir(relative_path : impl Into <String>) -> Self

ManifestIssue

Technology-stack detection: a pure function over a file listing.

Item
pub struct ManifestIssue

Stack

Technology-stack detection: a pure function over a file listing.

Item
pub enum Stack
fn detect_stack_detailed(entries : & FileEntry, contents : & BTreeMap <String, String>,) -> StackReport
fn detect_stack(entries : & FileEntry) -> Vec <DetectedStack>

StackReport

Technology-stack detection: a pure function over a file listing.

Item
pub struct StackReport

FixtureGitRunner

Fixtures for testing consumers of the seams, without touching a real filesystem.

Item
pub struct FixtureGitRunner
FixtureGitRunner :: fn new() -> Self
FixtureGitRunner :: fn with_response(mut self, subcommand : & str, stdout : impl Into <Vec <u8>>) -> Self
FixtureGitRunner :: fn with_truncated_response(mut self, subcommand : & str, stdout : impl Into <Vec <u8>>) -> Self
FixtureGitRunner :: fn with_failure(mut self, subcommand : & str, stderr : impl Into <String>) -> Self
FixtureGitRunner :: fn with_head_sequence(self, heads : & & str) -> Self
FixtureGitRunner :: fn call_count(& self) -> usize
FixtureGitRunner :: fn calls(& self) -> Vec <Vec <String>>
FixtureGitRunner :: fn run(& self, _cwd : & StdPath, args : & & str) -> Result <GitOutput, ScanError>

FixtureScanHost

Fixtures for testing consumers of the seams, without touching a real filesystem.

Item
pub struct FixtureScanHost
FixtureScanHost :: fn new() -> Self
FixtureScanHost :: fn with(mut self, path : impl Into <PathBuf>, entries : Vec <DirEntryInfo>) -> Self
FixtureScanHost :: fn with_file(mut self, path : impl Into <PathBuf>, contents : impl Into <String>) -> Self
FixtureScanHost :: fn with_link(mut self, path : impl Into <PathBuf>, target : impl Into <PathBuf>) -> Self
FixtureScanHost :: fn unreadable(mut self, path : impl Into <PathBuf>) -> Self
FixtureScanHost :: fn with_identity_sequence(self, path : impl Into <PathBuf>, ids : & & str) -> Self
FixtureScanHost :: fn canonicalize(& self, path : & Path) -> Result <PathBuf, ScanError>
FixtureScanHost :: fn list_dir(& self, path : & Path) -> Result <Vec <DirEntryInfo>, ScanError>
FixtureScanHost :: fn entry_kind(& self, path : & Path) -> Result <EntryKind, ScanError>
FixtureScanHost :: fn identity(& self, path : & Path) -> Result <String, ScanError>
FixtureScanHost :: fn read_file_bounded(& self, path : & Path, max_bytes : usize) -> Result <String, ScanError>

watermark (other)

Incremental re-scan watermarks.

Item
pub const SCANNER_VERSION: u32
pub const MAX_DIGEST_ENTRIES: usize
pub const MAX_DIGEST_BYTES: usize
fn status_digest(entries : & StatusEntry, contents : & BTreeMap <String, Vec <u8>>,) ->(String, bool, Option <String>)
fn inventory_watermark(repo_identity : RepoIdentity, worktree_path : impl Into <String>, facts : & GitFacts, status_contents : & BTreeMap <String, Vec <u8>>, manifests : & HashInput,) -> InventoryWatermark
fn decide(previous : Option <& InventoryWatermark>, current : & InventoryWatermark) -> ScanDecision

HashInput

Incremental re-scan watermarks.

Item
pub struct HashInput
fn manifest_digest(manifests : & HashInput) ->(String, bool, Option <String>)

InventoryWatermark

Incremental re-scan watermarks.

Item
pub struct InventoryWatermark

ScanDecision

Incremental re-scan watermarks.

Item
pub enum ScanDecision

How to use it

From `examples/scan_report.rs`:


use std::collections::BTreeMap;
use std::path::PathBuf;

use operations_repo_inventory::{
    discover, scan, Completeness, RepoKind, SystemGitRunner, SystemScanHost,
};

fn main() {
    let root: PathBuf = std::env::args_os()
        .nth(1)
        .map_or_else(|| PathBuf::from("."), PathBuf::from);

    let host = SystemScanHost;
    let discovery = match discover(&host, &root) {
        Ok(d) => d,
        Err(e) => {
            eprintln!("scan failed: {e}");

Module structure

operations_repo_inventory

flowchart TD
  n_operations_repo_inventory["operations_repo_inventory"]
  n_operations_repo_inventory --> n_discover["discover"]
  n_operations_repo_inventory --> n_error["error"]
  n_operations_repo_inventory --> n_git["git"]
  n_operations_repo_inventory --> n_host["host"]
  n_operations_repo_inventory --> n_model["model"]
  n_operations_repo_inventory --> n_runner["runner"]
  n_operations_repo_inventory --> n_scan["scan"]
  n_operations_repo_inventory --> n_stack["stack"]
  n_operations_repo_inventory --> n_testkit["testkit"]
  n_operations_repo_inventory --> n_watermark["watermark"]

Public surface

`discover`

ItemWhat it is
pub enum RepoKindWhat a discovered directory turned out to be.
pub struct RepoRefOne discovered directory.
pub struct DiscoveryThe result of walking a scan root.
Discovery :: fn degraded_count(& self) -> usizeHow many entries are less than Complete.
fn discover <H : ScanHost>(host : & H, root : & Path) -> Result <Discovery, ScanError>Walk root and classify every immediate child directory

`error`

ItemWhat it is
pub enum ScanErrorWhy a directory could not be fully inventoried.
ScanError :: fn is_systemic(& self) -> boolWhether this error invalidates the whole run rather than one entry

`git`

ItemWhat it is
pub const MAX_LOG_COMMITS: usizeMaximum commits read from git log before the tally is declared incomplete.
pub const MAX_STATUS_ENTRIES: usizeMaximum status entries recorded before the dirty-tree picture is declared incomplete.
pub struct StatusEntryOne entry from git status --porcelain=v2
pub struct GitFactsDeterministic facts about one working tree.
fn fingerprint_status(stdout : & u8) -> StringDigest raw status output, for the bookended stability comparison
fn status_args() -> Vec <& 'static str>The status argument vector
fn log_args(max_commits : usize) -> Vec <String>The log argument vector, bounded to max_commits + 1 so truncation is detectable
fn git_facts <R : GitRunner>(runner : & R, worktree : & Path) -> Result <GitFacts, ScanError>Collect every deterministic git fact for one working tree, in two invocations

`host`

ItemWhat it is
pub enum EntryKindWhat a directory entry is, determined without following symlinks.
pub struct DirEntryInfoOne entry in a directory listing.
pub trait ScanHostRead-only filesystem access
pub struct SystemScanHostReal filesystem access via std::fs.
SystemScanHost :: fn canonicalize(& self, path : & Path) -> Result <PathBuf, ScanError>
SystemScanHost :: fn list_dir(& self, path : & Path) -> Result <Vec <DirEntryInfo>, ScanError>
SystemScanHost :: fn entry_kind(& self, path : & Path) -> Result <EntryKind, ScanError>
SystemScanHost :: fn identity(& self, path : & Path) -> Result <String, ScanError>
SystemScanHost :: fn read_file_bounded(& self, path : & Path, max_bytes : usize) -> Result <String, ScanError>

`model`

ItemWhat it is
pub struct OidA git object id
Oid :: fn new(sha : impl Into <String>) -> SelfWrap a git object id.
Oid :: fn as_str(& self) -> & strThe underlying hex string.
pub struct RepoIdentityStable logical identity of a repository, independent of any checkout
RepoIdentity :: fn new(id : impl Into <String>) -> SelfWrap a repository identity.
RepoIdentity :: fn as_str(& self) -> & strThe underlying identity string.
pub enum BranchStateWhich branch a working tree is on, if any
pub enum CompletenessHow much of a record could actually be established
pub enum RunOutcomeHow a whole scan ended
pub struct WorktreeA single working tree: the mutable, per-checkout half of the model.
pub struct RepositoryA repository: the stable, logical half of the model

`runner`

ItemWhat it is
pub struct GitOutputCaptured output of one git invocation.
pub const READ_ONLY_SUBCOMMANDS: & & strSubcommands this crate is permitted to invoke
pub const STRIPPED_ENV: & & strEnvironment variables that must never be inherited by a git child process
pub const SAFETY_CONFIG: & & str-c overrides that disable anything a scanned repository could use to run its own code
pub const MAX_OUTPUT_BYTES: usizeHard cap on captured stdout per invocation.
pub const DEFAULT_TIMEOUT: DurationWall-clock cap on one invocation.
pub trait GitRunnerRun read-only git subcommands against a working tree
pub struct SystemGitRunnerReal git invocation via std::process::Command.
SystemGitRunner :: fn discover() -> Result <Self, ScanError>Build a runner using the first allowlisted git binary that exists
SystemGitRunner :: fn with_binary(path : impl Into <PathBuf>) -> Result <Self, ScanError>Build a runner with an explicit binary path
SystemGitRunner :: fn with_timeout(mut self, timeout : Duration) -> SelfOverride the per-invocation wall-clock cap.
SystemGitRunner :: fn binary(& self) -> & PathThe pinned binary path.
fn check_read_only(args : & & str) -> Result <(), ScanError>Reject a subcommand that is not on the read-only allowlist
SystemGitRunner :: fn run(& self, cwd : & Path, args : & & str) -> Result <GitOutput, ScanError>

`scan`

ItemWhat it is
pub struct ScanReportThe result of a whole sweep.
Repository :: fn divergent_heads(& self) -> boolWhether the checkouts disagree about where HEAD is.
Repository :: fn head_count(& self) -> usizeHow many distinct HEADs the checkouts are on.
Repository :: fn worktree_count(& self) -> usizeHow many checkouts this repository has.
Repository :: fn dirty_worktree_count(& self) -> usizeHow many checkouts have uncommitted changes.
fn common_git_dir(parent_git_dir : & Path) -> PathBufReduce a worktree's gitdir: pointer to the common git directory it belongs to
fn collect_facts <R : GitRunner>(runner : & R, worktree : & Path, verify_stability : bool,) -> Result <GitFacts, ScanError>Collect facts for one working tree, optionally verifying the tree held still
fn scan <R : GitRunner>(discovery : & Discovery, runner : & R, verify_stability : bool,) -> Result <ScanReport, ScanError>Roll a Discovery up into the two-level model, collecting git facts as it goes

`stack`

ItemWhat it is
pub struct FileEntryOne entry from a directory listing, as observed by the caller.
FileEntry :: fn file(relative_path : impl Into <String>) -> SelfA regular file at relative_path.
FileEntry :: fn dir(relative_path : impl Into <String>) -> SelfA directory at relative_path.
pub enum StackA recognized technology stack.
pub struct DetectedStackA detected stack and the evidence for it
pub struct ManifestIssueA manifest that was found but could not be parsed
pub struct StackReportThe full result of stack detection: what was found, and what would not parse.
fn detect_stack_detailed(entries : & FileEntry, contents : & BTreeMap <String, String>,) -> StackReportDetect stacks and report manifests that do not parse
fn detect_stack(entries : & FileEntry) -> Vec <DetectedStack>Detect the technology stacks a project uses, from a listing of its files

`testkit`

ItemWhat it is
pub struct FixtureScanHostAn in-memory filesystem for tests
FixtureScanHost :: fn new() -> SelfA fixture with nothing in it.
FixtureScanHost :: fn with(mut self, path : impl Into <PathBuf>, entries : Vec <DirEntryInfo>) -> SelfDeclare a directory and its entries.
FixtureScanHost :: fn with_file(mut self, path : impl Into <PathBuf>, contents : impl Into <String>) -> SelfDeclare a regular file's contents.
FixtureScanHost :: fn with_link(mut self, path : impl Into <PathBuf>, target : impl Into <PathBuf>) -> SelfDeclare a symlink and where it resolves to.
FixtureScanHost :: fn unreadable(mut self, path : impl Into <PathBuf>) -> SelfMark a path as unreadable, so reads of it fail.
FixtureScanHost :: fn with_identity_sequence(self, path : impl Into <PathBuf>, ids : & & str) -> SelfSuccessive identities a path reports on repeated observation
FixtureScanHost :: fn canonicalize(& self, path : & Path) -> Result <PathBuf, ScanError>
FixtureScanHost :: fn list_dir(& self, path : & Path) -> Result <Vec <DirEntryInfo>, ScanError>
FixtureScanHost :: fn entry_kind(& self, path : & Path) -> Result <EntryKind, ScanError>
FixtureScanHost :: fn identity(& self, path : & Path) -> Result <String, ScanError>
FixtureScanHost :: fn read_file_bounded(& self, path : & Path, max_bytes : usize) -> Result <String, ScanError>
pub struct FixtureGitRunnerA GitRunner that replays canned output and counts invocations
FixtureGitRunner :: fn new() -> SelfA runner with no canned responses.
FixtureGitRunner :: fn with_response(mut self, subcommand : & str, stdout : impl Into <Vec <u8>>) -> SelfCanned successful stdout for a subcommand.
FixtureGitRunner :: fn with_truncated_response(mut self, subcommand : & str, stdout : impl Into <Vec <u8>>) -> SelfCanned truncated stdout, simulating an output cap being hit.
FixtureGitRunner :: fn with_failure(mut self, subcommand : & str, stderr : impl Into <String>) -> SelfCanned failure for a subcommand.
FixtureGitRunner :: fn with_head_sequence(self, heads : & & str) -> SelfSuccessive HEAD values returned by rev-parse, to simulate mid-scan mutation.
FixtureGitRunner :: fn call_count(& self) -> usizeHow many times GitRunner::run was called.
FixtureGitRunner :: fn calls(& self) -> Vec <Vec <String>>Every argument vector seen, in order.
FixtureGitRunner :: fn run(& self, _cwd : & StdPath, args : & & str) -> Result <GitOutput, ScanError>

`watermark`

ItemWhat it is
pub const SCANNER_VERSION: u32Bumped only when the meaning of a collected fact changes, forcing re-collection.
pub const MAX_DIGEST_ENTRIES: usizeMaximum status entries folded into a digest before it is declared incomplete.
pub const MAX_DIGEST_BYTES: usizeMaximum bytes of content hashed into one digest before it is declared incomplete.
pub struct InventoryWatermarkThe deterministic half of the re-scan decision.
pub enum ScanDecisionWhether a re-scan needs to do work.
pub struct HashInputContent supplied for hashing: a path and the bytes at it.
fn status_digest(entries : & StatusEntry, contents : & BTreeMap <String, Vec <u8>>,) ->(String, bool, Option <String>)Digest the dirty-tree picture
fn manifest_digest(manifests : & HashInput) ->(String, bool, Option <String>)Digest the manifest set.
fn inventory_watermark(repo_identity : RepoIdentity, worktree_path : impl Into <String>, facts : & GitFacts, status_contents : & BTreeMap <String, Vec <u8>>, manifests : & HashInput,) -> InventoryWatermarkBuild the watermark for one working tree.
fn decide(previous : Option <& InventoryWatermark>, current : & InventoryWatermark) -> ScanDecisionDecide whether a re-scan must do work, naming what changed

Re-exports. Exported here, defined elsewhere.

ExportDefined in
ScanErrorerror::ScanError
{BranchState,Completeness,Oid,RepoIdentity,Repository,RunOutcome,Worktree}model::{BranchState,Completeness,Oid,RepoIdentity,Repository,RunOutcome,Worktree}
{DirEntryInfo,EntryKind,ScanHost,SystemScanHost}host::{DirEntryInfo,EntryKind,ScanHost,SystemScanHost}
{GitOutput,GitRunner,SystemGitRunner}runner::{GitOutput,GitRunner,SystemGitRunner}
{decide,inventory_watermark,HashInput,InventoryWatermark,ScanDecision,SCANNER_VERSION,}watermark::{decide,inventory_watermark,HashInput,InventoryWatermark,ScanDecision,SCANNER_VERSION,}
{detect_stack,detect_stack_detailed,DetectedStack,FileEntry,ManifestIssue,Stack,StackReport,}stack::{detect_stack,detect_stack_detailed,DetectedStack,FileEntry,ManifestIssue,Stack,StackReport,}
{discover,Discovery,RepoKind,RepoRef}discover::{discover,Discovery,RepoKind,RepoRef}
{git_facts,GitFacts,StatusEntry}git::{git_facts,GitFacts,StatusEntry}
{scan,ScanReport}scan::{scan,ScanReport}

Boundary

Depends on no other workspace tier.

Shares tier operations with 40 other crates: operations-approval-workflow, operations-assessments, operations-block-imaging, operations-boot-media, operations-browser-agent-worker, operations-camera-discovery, operations-camera-liveview, operations-camera-registry, … (40 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)operations
Architectural role (taxonomy)unclassified (baselined)
Locationcrates/operations/repo-inventory
Vocabulary in force (lexicon)current

Dependencies

Runtime, from outside the workspace.

CrateRequirementFeaturesOptionalOnly on
hex^0.4noalways
serde^1derivenoalways
serde_json^1noalways
sha2^0.10noalways
thiserror^2noalways
toml^0.8noalways

Development, from outside the workspace.

CrateRequirementFeaturesOptionalOnly on
serde_json^1noalways

Build. None.

Depended on by. Nothing in this workspace.

Feature flags

FeatureEnablesOn by default
defaultyes
flowchart LR
  n_default["default"]

Targets

KindNameSource
examplescan_report`examples/scan_report.rs`
liboperations_repo_inventory`src/lib.rs`

Error model

Error typeNamed by
ScanErrorcheck_read_only, collect_facts, discover, git_facts, scan

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/runner.rs

No workspace crate depends on this one.

Verification

KindCount
Unit tests95
Integration tests0
Examples1
Doctests0

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

ModuleTestsExamplesConsumers
discover420
error100
git810
host420
model720
runner920
scan420
stack700
testkit200
watermark1000

What the tests establish, by name:

Documentation coverage

MeasureDocumentedTotal
Public items with rustdoc8597
Public modules with a //! block1010
pie showData
    title Public items with rustdoc
    "Documented" : 85
    "No rustdoc detected" : 12

Metrics

MetricValue
Rust source files11
Source lines4117
Code lines2899
Public API items97
Public modules10
Tests95
Examples1
Cargo features1
Direct runtime dependencies6
Workspace reverse dependencies0
pie showData
    title Public API by kind
    "constant" : 10
    "enum" : 8
    "function" : 15
    "method" : 41
    "struct" : 21
    "trait" : 2
pie showData
    title Rust source composition
    "Code" : 2899
    "Blank or comment" : 1218

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 operations · Manual