# description
A derived map of the agentic-research ecosystem. Authored fields are statements a maintainer makes; derived fields were read from a repository's own manifests. `schema_version` is the compatibility promise and increments only when a field is removed or its meaning changes, so adding one never breaks a pinned consumer. Cross-references this schema cannot express — `resolved_by` naming a key in `resolution`, edge endpoints naming entity ids, `ownership.repo` naming an entity — are enforced instead by `task deps:check`, which re-derives the whole document from its sources and fails on any difference.

# properties.collected_at.description
When the collection this was derived from ran, RFC 3339. The map is a point-in-time reading of moving sources; without this a cached copy is indistinguishable from a current one.

# $defs.Edge.properties.resolved_by.description
Names a key in this document's top-level `resolution` map, which states the rule and its confidence. JSON Schema cannot express that cross-reference; `deps:check` does, by re-deriving the document.

# $defs.Edge.properties.matched.description
The coordinate this edge's target was found under in `ownership` — the join key. Null when the resolution consulted no index (git-url, github-ref, release-url read the repository straight out of a URL).

# $defs.Edge.properties.resolves_via.description
The override target verbatim, as a filesystem path, when `resolves_from` is not `published` — e.g. `../signet`. Null otherwise, and null on a redacted edge because a path describes someone's disk.

# $defs.Edge.properties.detail.description
Human-readable identifier for the coupling as the source writes it — a module path, an image reference, a bundle entrypoint. NOT the index key: see `matched`. Null when redacted.

# $defs.Edge.properties.redacted.description
True when an endpoint is non-public and the edge has been stripped to its endpoints and kind. Always present: absent-versus-false is a distinction with no meaning, and redaction changes how a null detail should be read.

# $defs.Edge.description
One coupling between two repositories. `edges` and `weak_edges` share this shape and differ only in how the target was resolved: an entry in `edges` was identified exactly, one in `weak_edges` only by a name match. Both are real declarations the sources make; the split exists so a name match cannot reach an answer that decides what a release breaks.

# $defs.Evidence.properties.line.description
1-based line in `path`, when the format carries one.

# $defs.Evidence.description
Where a coupling was read from. `repo`/`path`/`format` are always present; the rest are format-specific locators — the Cargo table, the cluster input key, the bundle or wire name, the _meta key. Enumerated rather than open so `additionalProperties: false` keeps meaning that the generator and the contract have drifted apart.