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

    Interface DynamicAccessAssertion

    One developer-declared runtime.VariableEvidenceDocs.dynamicAccess citation's current acknowledgment state -- a claim, never an observation. Kept fully separate from VariableAccessStatus (which stays exactly 3-valued and purely AST-derived) so a developer's assertion can never make env-cap claim it observed something it didn't. See evidence-snapshot.ts's computeDynamicAccessAcknowledgments() (where this is computed) and ADR 0037.

    interface DynamicAccessAssertion {
        acknowledgment: "fresh" | "stale" | "missing";
        column: number;
        contentHash: string | undefined;
        file: string;
        line: number;
    }

    Hierarchy (View Summary)

    Index
    acknowledgment: "fresh" | "stale" | "missing"

    "fresh" -- the cited file currently exists and either matches the committed baseline hash or has no baseline yet (a brand-new citation, nothing to contradict it yet). "stale" -- the cited file exists but its content has changed since the committed baseline. "missing" -- the cited file no longer exists at all. Re-derived from scratch every run; never cached across runs.

    column: number

    1-indexed column number.

    contentHash: string | undefined

    SHA-256 hex digest of the cited file's content as observed this run -- undefined iff acknowledgment === "missing" (nothing to hash). This is the one field that makes freshness checking possible without a snapshot-only shadow type: the live EvidenceModel.dependency a caller gets back and the persisted evidence snapshot a later run reads back as its baseline are the exact same shape -- this run's contentHash becomes next run's comparison target directly. See evidence-snapshot.ts and ADR 0037.

    file: string

    Root-relative, POSIX-separated.

    line: number

    1-indexed line number.