# Knowledge in Connect

Knowledge is the set of sources a workspace supplies for answers to be grounded in — an uploaded document, a fetched web page, or a short fact typed by hand. Each source carries an authority level that decides what it may be used to claim, and every question selects a handful of passages rather than the whole bank. There is no vector database behind this: selection is lexical scoring over the workspace's own text.

- **Status:** Available
- **Audience:** both
- **In the app:** #/knowledge
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/knowledge/

## Supplied truth and learned truth

Connect draws on two different stores and they are not interchangeable. **Knowledge** is what a person decided to put in — a price list, a warranty policy, a specification sheet, a page from the company website. **[Memory](/docs/memory/)** is what Connect worked out from conversations: that this caller prefers WhatsApp, that the owner wants quotes copied to them, that a correction was made last week.

The practical difference is who is accountable for the sentence. A claim traced to Knowledge is traceable to a document somebody uploaded and gave authority to. A behaviour traced to Memory is traceable to something that happened. Mixing the two produces the failure this section exists to prevent: a business fact asserted on the strength of an overheard remark.

> **Note** If a fact must never drift — a warranty term, a lead time, a commitment somebody signs — it belongs in Knowledge, not in a memory. Memory decays in relevance and is scored against the request; a Knowledge source with `verified_fact` authority does not.

## What a source is allowed to prove

Authority is set when a source is added and re-checked whenever it changes. It is the single most consequential field on the record, because it decides whether a passage can settle a question or merely colour an answer.

| Authority | What it may do |
|---|---|
| `verified_fact` | State a fact about the business as current and true |
| `owner_instruction` | State a fact **and** direct behaviour; the strongest level |
| `playbook` | Direct behaviour — how to handle a situation — but never prove a fact |
| `reference` | Give background and context only |
| `unverified` | Context only; never quoted as current |
| `roadmap` | Context only, and actively penalised in ranking |

Only `verified_fact` and `owner_instruction` count as fact authority. A question that needs a commercial commitment answered — a price, an SLA, a warranty, a delivery date, anything legal — is checked against those two alone. A playbook that describes how to talk about pricing does not license a number.

## From a question to an answer

1. Active sources are filtered to those whose scope covers the work in hand.
2. A source whose stored file no longer matches its SHA-256 hash is dropped and moved to `needs_review`.
3. A source with unreviewed warnings or unresolved conflicts is dropped the same way.
4. Every chunk of what survives is scored against the question.
5. Passages above the floor are sorted, capped, and grouped into three labelled blocks — fact evidence, owner playbook, and reference — so the model is told what each one is for.
6. Each passage carries a citation of the form `KB:<source>:<chunk>` that the answer can be traced back through.

The grouping matters as much as the ranking. Handing a model a flat wall of text invites it to treat a roadmap note and a signed warranty as the same kind of statement. Labelling the reference block *context only; do not state as current fact* is what stops that.

## The budget on a live call

On the phone, instruction size is a latency decision rather than a matter of taste. Every character of the brief is paid for before the first word: a 7,500-character brief measured 1.2–1.8 s to first token; 9,600 characters measured 2.3–3.4 s. So the call brief is rationed.

| Block | Budget |
|---|---|
| Knowledge | 4 entries, 2,000 characters |
| What Connect remembers | 700 characters |
| Who you are talking to | 600 characters |
| What has happened before | 500 characters |
| A human voice profile | about 2,500 characters |

A fifth relevant Knowledge entry does not reach the call. That is a deliberate trade and it is why [testing retrieval](/docs/knowledge/retrieval-test/) before a busy day is worth the two minutes it takes.

## Where it lives on screen

**`#/knowledge`** — Sources and facts together — the screen most people need.
**`#/knowledge-sources-advanced`** — The source bank: authority, scope, status, warnings, conflicts, re-index.
**`#/knowledge-facts-advanced`** — The facts editor, for short statements typed directly.
**The `knowledge` sheet in `#/data`** — The same records as rows, for sorting, filtering and bulk work.

## Everything in this section

12 pages, each with its own status and the date it was last checked against the running system.

| Page | What it covers |
|---|---|
| [Claims Knowledge does not support](/docs/knowledge/unsupported-claims/) | What happens when an answer would need something Knowledge does not carry: no draft is written, a person is asked, and the miss is recorded. |
| [Extracting text from a source](/docs/knowledge/extraction/) | How a file becomes text: direct decoding for Markdown and plain text, model reading for PDF, image and video, and the limits on both. |
| [How Knowledge is prepared for retrieval](/docs/knowledge/indexing/) | What Connect actually builds from a source: heading-aware passages in the same database, no vector store, and an optional embedding column. |
| [Instructions hidden in content](/docs/knowledge/prompt-injection/) | Received and fetched text is data, never instruction. What is stripped, what is flagged, what stops before any model runs, and what none of it guarantees. |
| [Knowledge and Fact are different things](/docs/knowledge/knowledge-vs-fact/) | Knowledge is the body of material a workspace supplies; a Fact is one statement inside it. Blurring the two produces confident, unsupported answers. |
| [Knowledge for the Owner and for a customer](/docs/knowledge/knowledge-owner-tenant/) | One Knowledge implementation reached by two routes: what is identical for both audiences, what a plan scopes, and where a customer workspace stops. |
| [Knowledge sources](/docs/knowledge/sources/) | What can be added as a Knowledge source, the size ceiling for each kind, the authority and scope it is given, and why one stops answering. |
| [Retrieving Knowledge for an answer](/docs/knowledge/retrieval/) | What is fetched for one question: eligibility, the scoring terms in order, the three labelled blocks, and why a live call gets only four entries. |
| [Testing retrieval](/docs/knowledge/retrieval-test/) | The search tool that shows what a question would actually fetch, how to read its score and authority columns, and what it cannot tell you. |
| [The facts editor](/docs/knowledge/facts/) | Typing a short grounded statement directly: the fields, what priority and keywords actually do, and when this beats uploading a document. |
| [When two sources disagree](/docs/knowledge/source-conflict/) | Contradiction detection when a source is added, why a conflicted source stops answering, and why nobody but a person may decide the winner. |
| [Who decides what is true](/docs/knowledge/owner-authority/) | Authority is set by a person and enforced in code before the model sees anything, which is why no document and no message can promote itself. |

## Questions

### Does Connect search the internet to answer a question?

No. An answer is grounded in what the workspace supplied. A public URL can be fetched and turned into a source deliberately, by a person, and it then behaves like any other source — but nothing is looked up live in the middle of a reply.

### How many sources is a sensible number?

Fewer, larger and better-scoped beats many small ones. Retrieval scores every chunk of every eligible source on every question, and near-duplicate entries crowd each other out of the small window a reply actually gets. Two entries saying the same thing cost twice and add nothing.

### Can a customer workspace and the operator see each other's Knowledge?

No. Every source belongs to exactly one workspace and is read through the same three isolation layers as any other record. See [Knowledge for the Owner and for a customer](/docs/knowledge/knowledge-owner-tenant/).

## Related

- [Knowledge sources](https://connectbyjbrh.com/docs/knowledge/sources/)
- [Retrieving Knowledge for an answer](https://connectbyjbrh.com/docs/knowledge/retrieval/)
- [Knowledge and Fact are different things](https://connectbyjbrh.com/docs/knowledge/knowledge-vs-fact/)
- [Who decides what is true](https://connectbyjbrh.com/docs/knowledge/owner-authority/)
- [Memory in Connect](https://connectbyjbrh.com/docs/memory/)
- [Grounding an answer without pretending to have a vector database](https://connectbyjbrh.com/research/grounding-without-a-vector-database/)

## What this page is based on

- `backend/app/knowledge_bank.py` — authority, scope, chunking and retrieval
- `backend/app/knowledge.py` — the facts editor, coverage and combined context
- `backend/app/voice_engine.py` — the realtime call brief and its budgets
- Connect capability registry (docs-source/facts.py)
