iiRecord
Agentic AI Atlas · Coverage
page:qa-03-coveragea5c.ai
II.
Page JSON

page:qa-03-coverage

Structured · live

Coverage json

Inspect the normalized record payload exactly as the atlas UI reads it.

File · wiki/qa/03-coverage.mdCluster · wiki
Record JSON
{
  "id": "page:qa-03-coverage",
  "_kind": "Page",
  "_file": "wiki/qa/03-coverage.md",
  "_cluster": "wiki",
  "attributes": {
    "nodeKind": "Page",
    "title": "Coverage",
    "displayName": "Coverage",
    "slug": "qa/03-coverage",
    "articlePath": "wiki/qa/03-coverage.md",
    "article": "# Coverage\n\n> Phase-5 deliverable. Five distinct coverage measures. Each must be reportable as a percentage and tracked across releases. A regression in any of them fails CI gate 7 unless explicitly waived.\n\n## NodeKind coverage\n\n> \"What fraction of the schema's NodeKinds have real-world entities populated in the graph?\"\n\n```\nNodeKindCoverage = |{ kinds with ≥1 non-fixture node }| / |all NodeKinds|\n```\n\nFixture-only kinds count as 0. Excluded by waiver: kinds explicitly marked `populationDeferred` in the coverage checklist.\n\n## Edge coverage\n\n> \"What fraction of declared EdgeKinds are exercised by at least one edge in the graph?\"\n\n```\nEdgeCoverage = |{ edge kinds with ≥1 instance }| / |all EdgeKinds|\n```\n\nEdges in `ontology-schema.yaml` that have zero instances are flagged for either population or removal.\n\n## Capability coverage\n\n> \"What fraction of named `Capability` nodes have at least one `CapabilitySupport` binding?\"\n\n```\nCapabilityCoverage = |{ capabilities with ≥1 CapabilitySupport edge }| / |all Capability nodes|\n```\n\nA capability with no support binding is dead text. The threshold for new capabilities is 1 binding within 30 days of creation; missing the threshold opens a Gap.\n\n## Evidence freshness coverage\n\n> \"What fraction of fact-bearing claims have evidence within the freshness window?\"\n\n```\nFreshnessCoverage = |{ claims with all evidenceSources in-window }| / |all claims|\n```\n\nClaims with stale evidence count as not-fresh until refreshed. Long-lived stable facts (e.g. \"Claude Code is published as `@anthropic-ai/claude-code`\") get a longer `freshnessWindowDays` from their policy; volatile facts (pricing, model lineup) get shorter windows.\n\n## Generator coverage\n\n> \"What fraction of declared `Generator` nodes have an integration test and a passing run on the current graph?\"\n\n```\nGeneratorCoverage = |{ generators with passing integration test ∧ green run on current graph }| / |all Generator nodes|\n```\n\nA generator without a test is a future regression. A generator that fails on the current graph is a current regression. Both reduce coverage.\n\n## Composite\n\nA single weighted score is reported on the home page of the wiki's `/meta/coverage/`:\n\n```\nComposite = 0.20·NodeKind + 0.20·Edge + 0.20·Capability + 0.25·Freshness + 0.15·Generator\n```\n\nThe weights are chosen so that **freshness** dominates — drift between the world and the graph is the single most expensive failure mode. Composite is informational; the per-axis percentages are the real gates.\n",
    "documents": []
  },
  "outgoingEdges": [],
  "incomingEdges": []
}