# Read strategy

Shared policy for how data-pulling skills gather evidence. Pick the cheapest path that answers the question; never push deterministic truth or verbatim quotes through a model.

## The three paths

1. **`context_assemble` for a known entity.** One call resolves identity, fans out across sources, hydrates top hits, deduplicates, reranks, and returns a `working_set` plus per-source `coverage`. Use it for a person, account, ticket, or operator.
2. **`cse-sweep` for an opt-in deep narrative.** Use it for broad thematic gathers or an explicitly requested synthesized dossier. It is never the implicit read layer and never the source of board truth.
3. **Direct named reads for precision, board state, and verbatim evidence.** Interactive `/mcp/full` exposes `jira_search`, `get_salesforce_account`, `get_communications`, `jira_get_issue`, `granola_get_notes`, `confluence_get_page`, `google_file_text`, and the other named operations directly. Existing `cse_read` facade calls remain valid on the full plane.

```text
known entity (person/account/ticket/operator) -> context_assemble
open-ended topic or explicit deep dossier -> cse-sweep
board pull / exact field / verbatim quote -> direct named read
mutation -> dry-run, then execute:true + justification + preview_digest
```

## Hard rules

- **Writes stay guarded.** Every mutation is two-phase and preserves canonical guards such as `/tmp` body paths, snapshots, digests, and idempotency.
- **Ownership, status, score, and field decisions never key off model output.** Board truth comes directly from Jira. Field writes cite a real source id. Deterministic rubrics own computed scores.
- **Verbatim quotes use direct source reads.** Hydrate the full source with `get_communications`, `jira_get_issue`, or the appropriate named read and retain human-readable provenance.
- **Participant-scoped Slack reads use `slack_find_conversations`.** Put all known people in one call. Use its coverage receipt to qualify omission claims; do not fan out identity, search, unread, and channel reads in the model loop.
- **Context budgets are real bounds.** `latency_ms` applies to the whole assembly and `max_tokens` bounds ranked evidence. Treat `provenance.partial` or `coverage.status: timeout` as an incomplete gather and hydrate any required source directly; deadline-partial packs are not cached.
- **Model investigators are advisory.** Structured model findings may explain or bound a deterministic result; they do not own it.

If a named entity would otherwise require identity resolution plus two or more source searches, use `context_assemble`. If you need an exact value, literal board state, or a quote, use a direct named read.
