Skip to content

feat(sink): catch-all capture → bounded store + GET /api/hooks (S1) #64

Description

@williamdewitt

Part of #49 (WebhookSink epic). Slice S1. One agent run, samples/** only.

Acceptance criteria

  • Catch-all POST /in/{bucket} (accept any verb) records method, headers, raw body, bucket, received-at into a bounded in-memory ring buffer (fixed capacity, oldest evicted; capacity configurable with a safe default).
  • GET /api/hooks returns captured hooks as JSON (newest first); GET /api/hooks/{id} returns one (404 if absent).
  • WebApplicationFactory test proves capture + retrieval + ring eviction at capacity.

Definition of done

  • Builds net10.0, 0 warnings; tests green; changes confined to samples/**.

Design: docs/design/webhook-sink-design.md (Architecture, S1). Builds on the merged S0 scaffold.

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentEligible for autonomous agent pickuparea:docsDocs bundle / samplespriority:p2Normal priorityreadyHas acceptance criteria + DoD; pickable by the looprisk:lowtests/samples; CI green + light approvaltype:featNew feature

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions