Overview
Wire up or remove the WEBHOOK_SIGNING_SECRET environment variable, which is documented in .env.example and README but reads nothing in the codebase.
Motivation
Per ASSUMPTIONS.md item 4, WEBHOOK_SIGNING_SECRET "is read by nothing in the codebase" — it's documented but unused. This causes confusion: operators may set a secret expecting webhook signatures to be validated, when in fact there is no signing component at all. This is a documentation/hygiene gap that could lead to a false sense of security.
Proposed Design
Two options:
Option A (preferred): Wire it up. Implement webhook signing so the secret is actually used:
- Add a signature header (X-Savitura-Signature) to outbound webhooks using HMAC-SHA256 of the body with WEBHOOK_SIGNING_SECRET
- Add a GET endpoint to introspect whether signing is enabled
- Document how consumers can verify signatures
Option B: Remove it. If signing is out of scope:
- Remove WEBHOOK_SIGNING_SECRET from .env.example
- Remove from README/env table
- Remove from ASSUMPTIONS.md item 4
- Add a note that webhook signing is not yet implemented
Acceptance Criteria
For Option A:
For Option B:
Overview
Wire up or remove the WEBHOOK_SIGNING_SECRET environment variable, which is documented in .env.example and README but reads nothing in the codebase.
Motivation
Per ASSUMPTIONS.md item 4, WEBHOOK_SIGNING_SECRET "is read by nothing in the codebase" — it's documented but unused. This causes confusion: operators may set a secret expecting webhook signatures to be validated, when in fact there is no signing component at all. This is a documentation/hygiene gap that could lead to a false sense of security.
Proposed Design
Two options:
Option A (preferred): Wire it up. Implement webhook signing so the secret is actually used:
Option B: Remove it. If signing is out of scope:
Acceptance Criteria
For Option A:
For Option B: