The session header is always present; result carries the mode-specific
payload, discriminated by a scope tag (spec.md#protocol). Flattened so a
client reads session / scope / payload fields off one object - no
session.session nesting.
Trimmed session header (spec.md#protocol): adapter-redundant options,
parent pointers (served by restore_lineage), and per-message session id
dropped to keep pond_get responses lean for agent context windows.
pond_ingest response (spec.md#protocol). accepted = inserted + matched,
rejected = error; both derived from results. Per-row results[] is
the contract clients rely on to reconcile retries (the PK is echoed so
the client can match outcomes back to its input even when index is not
enough). Each result reports the input event’s index, kind, pk,
status, and an error body when status = "error".
Compact per-part descriptor (spec.md#protocol): enough to tell what a
message carries without paying for full content. call_id is populated
for tool_call / tool_result only.
A Part as it rides a pond_get response (spec.md#protocol): the canonical
part minus session_id / message_id, which the enclosing session and
message already identify. Built from a canonical Part in the handler.
Whether a Part’s content is conversation or harness-injected scaffolding
(spec.md#model-part-provenance). No Default and no #[serde(default)] on the
Part.provenance field below: constructing a Part without classifying it
MUST be a compile error (spec.md#adapter-provenance-required).
Wire-level retrieval mode override (spec.md#search). Not normally set on
the wire - the server decides hybrid vs FTS-only from embedding
availability. The variant exists so operator tooling (pond search --mode,
the embeddings-benchmark harness) can force one arm without an env-var
backdoor.
Canonical part type names that yield a PartSummary - every kind except
text and reasoning (see PartSummary::for_kind, the source of truth).
The summary read paths filter the parts scan to these so a text/reasoning
heavy session never loads parts that would summarize to nothing.