@maverickcer/env-cap
    Preparing search index...

    Function generateEvidenceModel

    • Node-only assembly orchestrator (ADR 0024, ADR 0031): runs schema discovery and linking once (via assembleProject(), shared with computeArtifacts()), then builds all seven canonical fact models by calling each model's own public builder directly -- this function introduces no derivation logic of its own, only sequencing and the shared discovery/linking every builder needs. The result is deepFreeze()-d before being returned.

      Parameters

      Returns Promise<EvidenceModel>

      Deliberately never throws on a data-quality finding (a compatibility issue, an undocumented variable, an abandoned contract, ...) -- every one of those becomes a Finding in the returned model's finding field instead. This is a real difference from generateEnvManifest(), which throws by default: that's a "should I write this artifact" gate, while Evidence Model assembly is a read-only snapshot whose entire purpose is representing such issues as data for a consumer's own projection to act on (see ADR 0024's mission statement). It still throws EnvProjectGenerationError for a genuine configuration error -- previousSnapshotLocation escaping root.

      The dependency-graph scan underlying Dependency Model (via buildDependencyModel()) and the one underlying Finding Model's ownership-related findings (via computeUsage()) each run their own, independent pass over the repository -- a real, accepted cost of calling each half's already-tested public building block directly rather than hand-deriving a second copy of either's logic here. Both are Node-only, dev/CI-time-only work (never a runtime hot path), so the redundant I/O is an honest tradeoff, not an oversight.