Knowledge base.
The retained corpus the Co-Analyst cites from — documents, the chunks it actually retrieves, and the reliability grading attached to both.
Why a corpus rather than a live search
An answer is only auditable if the thing it cites still exists in the form it was read. So documents are retained: fetched, stored with their fetch time, and cited by id. If an upstream page changes or disappears, the citation still resolves to what was actually used.
Documents and chunks
A document is the unit of provenance. A chunk is the unit of retrieval. Splitting matters because a 40-page report has one source but many independently relevant passages.
| Level | Table | Carries |
|---|---|---|
| Source | kb_sources | Where documents come from, reliability grade, enabled flag |
| Document | kb_documents | Title, source URL, fetched_at, confidence, quarantine flag, tenant_id |
| Chunk | kb_chunks | Passage text plus its pgvector embedding |
Admiralty reliability codes
Sources are graded on the Admiralty scale, which separates how reliable the source is from how credible this particular claim is. Both travel with the evidence, so a high-confidence claim from a weak source is not silently laundered into a strong one.
| Axis | Range | Means |
|---|---|---|
| Source reliability | A | Completely reliable — through F, cannot be judged |
| Information credibility | 1 | Confirmed by other sources — through 6, cannot be judged |
So A1 is a reliable source with a corroborated claim; F6 is neither. The grade appears in the source catalogue and on the KB coverage surfaces.
Quarantine
Not everything fetched should be retrievable. A document can be quarantined, which keeps it stored for review but excludes it from retrieval, so it cannot end up cited under an answer.
- Quarantined documents are filtered out of every retrieval path, not ranked lower.
- The row is kept, so a review decision has something to act on.
- Coverage reporting counts them separately from live documents.
Tenant scope
kb_documents.tenant_id is NULL for the shared global corpus and set for tenant-owned documents. A retrieval reads the global corpus plus the caller's own tenant rows — enforced by row-level security rather than by a filter the query has to remember.
What the retrieval path guarantees
Every answer is built from documents that were retained, hashed and scored before they were retrievable. Retrieval returns the chunk it matched, not a summary of it, so a claim can always be traced back to a specific stored document and the source it came from.
Capabilities land in the retrieval path only once they hold across the whole corpus rather than a sample. Where a limitation exists today it is stated on the page that covers it, rather than implied by silence.