Motivation
PR #262 defines digest-backed channel awareness for issue #232 Phase 2. PR #264 landed the stable source-handle prerequisite. The next executable slice is a durable channel-message substrate; the current claw-wall store is an in-process retention window and cannot be the source of truth for digest provenance.
Scope
- Add an
examples/channel-memory adapter with a service descriptor and README.
- Use SQLite as the primary store for channel source messages and derived recall blocks.
- Store
source_messages keyed by (source_kind, channel_id, message_id, content_hash) so edited content creates a new source row while serving can select the current non-deleted version.
- Add tables for derived blocks, derived-block/source-message provenance, coverage gaps, and processor queue state.
- Implement idempotent ingest into the adapter and deterministic processing that works without an LLM key.
- Preserve hard events verbatim or near-verbatim; only mark rollups as sparse when they summarize or omit source content.
- Include edit/delete/tombstone and forget/visibility semantics in the data model, even if the first caller only exercises normal message ingest.
Out of scope
- Wiring claw-wall to push live Discord messages into the adapter.
- Serving
raw_window+digest from claw-wall.
- Async LLM digest generation and provider cost caps.
- Release pin, changelog, or nav changes.
Acceptance
- Unit tests cover idempotent ingest, content-hash edit identity, delete/tombstone state, source-message lookup, derived-block provenance, and coverage-gap records.
- Deterministic processor tests prove useful output with no provider credentials.
- The adapter can answer exact source-message queries for retained messages by channel and message id.
- Public docs and examples stay deployment-agnostic.
Refs #262
Refs #263
Motivation
PR #262 defines digest-backed channel awareness for issue #232 Phase 2. PR #264 landed the stable source-handle prerequisite. The next executable slice is a durable channel-message substrate; the current claw-wall store is an in-process retention window and cannot be the source of truth for digest provenance.
Scope
examples/channel-memoryadapter with a service descriptor and README.source_messageskeyed by(source_kind, channel_id, message_id, content_hash)so edited content creates a new source row while serving can select the current non-deleted version.Out of scope
raw_window+digestfrom claw-wall.Acceptance
Refs #262
Refs #263