Motivation
The channel-memory adapter should not pull from Discord independently. claw-wall already owns Discord channel surfaces, raw message identity, ACL checks, backfill/polling, and feed serving, so Phase 2 should use claw-wall as the source owner and push retained messages into channel-memory.
Depends on #265.
Scope
- Add optional compile-time/runtime wiring for claw-wall to discover a channel-memory ingest endpoint when the adapter is present.
- Push retained Discord messages from claw-wall to channel-memory after backfill and forward polling.
- Send stable channel/message identity, author metadata, timestamps, edit/delete state, content, and
content_hash.
- Make push ingest idempotent and retryable without blocking raw-window channel-awareness serving.
- Preserve channel allowlist/visibility boundaries; channel-memory must not become a bypass around claw-wall policy.
- Add a repair/backfill path that can replay retained raw messages through the same ingest contract.
Out of scope
- Implementing the SQLite adapter itself beyond whatever test fake is needed.
- Serving digest-backed channel awareness.
- Direct Discord gateway ingest inside channel-memory.
- Release pin, changelog, or nav changes.
Acceptance
- Unit tests prove claw-wall emits the expected ingest payload for backfilled and newly polled messages.
- Failure tests prove channel-awareness remains fail-open to the raw window when channel-memory ingest is unavailable.
- Authorization/allowlist tests prove pushed data is scoped to the channels claw-wall is allowed to serve.
- A Docker/fake-service spike proves messages cross the claw-wall to channel-memory boundary.
- Public docs and issue/PR text stay deployment-agnostic.
Refs #262
Refs #263
Motivation
The channel-memory adapter should not pull from Discord independently. claw-wall already owns Discord channel surfaces, raw message identity, ACL checks, backfill/polling, and feed serving, so Phase 2 should use claw-wall as the source owner and push retained messages into channel-memory.
Depends on #265.
Scope
content_hash.Out of scope
Acceptance
Refs #262
Refs #263