Everything an agent needs to reason about one topic’s coverage, collected
without any LLM call. The calling agent analyzes the brief with its own
model and reports back through record_gaps.
Persist agent-identified gaps for a topic and refresh the topic’s gap
counter. Descriptions must be unique enough to be useful; type defaults to
missing_literature when absent or unrecognized, priority clamps to 0..=1.