Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
554d9cd
docs: mark E1-T1 remediation complete
aatuh May 26, 2026
bbe93c6
test: enforce OpenAPI route parity
aatuh May 26, 2026
a749f72
docs: mark E1-T2 remediation complete
aatuh May 26, 2026
a857afd
test: strengthen evidence export coverage
aatuh May 26, 2026
ab2ee89
docs: mark E1 remediation complete
aatuh May 26, 2026
4e88bd1
feat: add central authorization service
aatuh May 26, 2026
2727454
docs: mark E2-T1 remediation complete
aatuh May 26, 2026
4778f02
fix: enforce central authorization on control paths
aatuh May 26, 2026
5c3151d
docs: mark E2-T2 remediation complete
aatuh May 26, 2026
5396c48
test: add resource policy regressions
aatuh May 26, 2026
cb84dc0
docs: mark E2 remediation complete
aatuh May 26, 2026
4a3e81e
refactor: split control store ports
aatuh May 26, 2026
a95727b
docs: mark E3-T1 remediation complete
aatuh May 26, 2026
12ffc33
refactor: move delivery fanout into app service
aatuh May 26, 2026
0d8de8c
docs: mark E3-T2 remediation complete
aatuh May 26, 2026
3d05957
refactor: move reconciliation orchestration into app service
aatuh May 26, 2026
f84b715
docs: mark E3-T3 remediation complete
aatuh May 26, 2026
c23d35f
refactor: split HTTP and CLI entrypoints
aatuh May 26, 2026
3b04f45
docs: mark E3 remediation complete
aatuh May 26, 2026
22b4118
fix: isolate worker phase failures
aatuh May 26, 2026
0aa7e13
docs: mark E4-T1 remediation complete
aatuh May 26, 2026
ef50e2d
fix: make audit chain backfill explicit
aatuh May 26, 2026
68f4434
docs: mark E4-T2 remediation complete
aatuh May 26, 2026
dba4b55
fix: require trusted proxies for session metadata
aatuh May 26, 2026
527a620
docs: mark E4 remediation complete
aatuh May 26, 2026
9e0c382
test: replace static persistence checks with db coverage
aatuh May 26, 2026
c53710d
docs: mark E5-T1 remediation complete
aatuh May 26, 2026
03e5f61
test: add migration idempotence coverage
aatuh May 26, 2026
fd1b86f
docs: mark E5-T2 remediation complete
aatuh May 26, 2026
5f87a14
ci: upload integration evidence artifact
aatuh May 26, 2026
7f668c0
docs: mark E5 remediation complete
aatuh May 26, 2026
a8bdb69
fix: keep unsigned cloudevents untrusted
aatuh May 26, 2026
cbfbfc8
chore: mark E1-T1 remediation complete
aatuh May 26, 2026
c4c6c63
test: cover cloudevents evidence-only routing
aatuh May 26, 2026
1ccce53
chore: mark E1 remediation complete
aatuh May 26, 2026
d45c581
feat: add pinned egress transport
aatuh May 26, 2026
ab41436
chore: mark E2-T1 remediation complete
aatuh May 26, 2026
4db8c75
fix: pin egress transports for deliveries
aatuh May 26, 2026
4db8322
chore: mark E2 remediation complete
aatuh May 26, 2026
30b84a2
fix: require audit evidence for sensitive actions
aatuh May 26, 2026
5a7af5e
chore: mark E3-T1 remediation complete
aatuh May 26, 2026
ecdf306
test: inject audit persistence failures
aatuh May 26, 2026
93dba18
chore: mark E3 remediation complete
aatuh May 26, 2026
e07f157
fix: make inbound dedupe capture atomic
aatuh May 26, 2026
d4f9bf3
chore: mark E4-T1 remediation complete
aatuh May 26, 2026
872c28f
test: cover concurrent duplicate capture
aatuh May 26, 2026
357daab
chore: mark E4 remediation complete
aatuh May 26, 2026
67b32e2
refactor: split postgres ingest store
aatuh May 26, 2026
bff9d1c
chore: mark E5-T1 remediation complete
aatuh May 26, 2026
73265ed
chore: document live postgres quality gate
aatuh May 26, 2026
41c9b42
chore: mark E5 remediation complete
aatuh May 26, 2026
91ad86c
docs: mark E1-T1 remediation complete
aatuh May 26, 2026
cc95dbb
docs: rewrite README entry point
aatuh May 26, 2026
5dfba16
docs: mark E1-T2 remediation complete
aatuh May 26, 2026
5b9229e
docs: add documentation source map
aatuh May 26, 2026
1ba89ad
docs: mark E1-T3 remediation complete
aatuh May 26, 2026
025da25
docs: classify initial design archive
aatuh May 26, 2026
f2c0db4
docs: mark E1 remediation complete
aatuh May 26, 2026
3ada130
docs: add canonical configuration reference
aatuh May 26, 2026
d8de602
docs: mark E2-T1 remediation complete
aatuh May 26, 2026
d58dbf4
docs: restructure operations runbook
aatuh May 26, 2026
ed3ebf7
docs: mark E2-T2 remediation complete
aatuh May 26, 2026
aab9f12
docs: add feature behavior reference
aatuh May 26, 2026
49897b4
docs: mark E2-T3 remediation complete
aatuh May 26, 2026
3691817
docs: consolidate security promise language
aatuh May 26, 2026
3f6a5d8
docs: mark E2 remediation complete
aatuh May 26, 2026
0871bda
docs: improve OpenAPI navigation
aatuh May 26, 2026
82ad73e
docs: mark E3-T1 remediation complete
aatuh May 26, 2026
c27a3f5
docs: organize CLI reference by risk
aatuh May 26, 2026
025b004
docs: mark E3-T2 remediation complete
aatuh May 26, 2026
aaf06b1
docs: expand SDK usage guide
aatuh May 26, 2026
2e2a266
docs: mark E3-T3 remediation complete
aatuh May 26, 2026
ae7030c
docs: document request collection smoke paths
aatuh May 26, 2026
7133ab2
docs: mark E3 remediation complete
aatuh May 26, 2026
84959b5
docs: add deployment posture guide
aatuh May 26, 2026
0f54e77
docs: mark E4-T1 remediation complete
aatuh May 26, 2026
0ac41bc
docs: clarify deployment profile guidance
aatuh May 26, 2026
0481b7e
docs: mark E4-T2 remediation complete
aatuh May 26, 2026
26b0863
docs: normalize release evidence guidance
aatuh May 26, 2026
96baf15
docs: mark E4-T3 remediation complete
aatuh May 26, 2026
e809763
docs: add schema migration operations guide
aatuh May 26, 2026
d3d85a2
docs: mark E4 remediation complete
aatuh May 26, 2026
4a2a079
docs: add provider claim freshness rules
aatuh May 26, 2026
5478478
docs: mark E5-T1 remediation complete
aatuh May 26, 2026
a2268a0
docs: add documentation review checklist
aatuh May 26, 2026
75b6e5f
docs: mark E5-T2 remediation complete
aatuh May 26, 2026
7a1d002
docs: align documentation validation checks
aatuh May 26, 2026
9536089
docs: mark E5 remediation complete
aatuh May 26, 2026
3bab2ad
docs(release): add stability policy
aatuh May 27, 2026
80e793e
chore(release): align docker go toolchain
aatuh May 27, 2026
c9c6d9c
test(rc): add performance smoke harness
aatuh May 27, 2026
842bd2a
docs(ops): document performance envelope
aatuh May 27, 2026
4d681e9
test(rc): extend production failure drills
aatuh May 27, 2026
8029bc4
docs(provider): add conformance evidence gate
aatuh May 27, 2026
a315118
docs(ops): add production adoption package
aatuh May 27, 2026
08f20c1
docs(release): add external review evidence tracking
aatuh May 27, 2026
feebb75
docs(release): add v0.1.0-rc1 notes
aatuh May 27, 2026
1a197a0
chore(release): require rc release evidence docs
aatuh May 27, 2026
423f2d4
docs(examples): add webhook evidence demo
aatuh May 27, 2026
271cd8d
docs(quickstart): add evaluator evidence path
aatuh May 27, 2026
324d86c
docs(demo): add safe media checklist
aatuh May 27, 2026
e5366be
docs(site): add static product landing page
aatuh May 27, 2026
8fd840a
docs(commercial): add evaluation and support packages
aatuh May 27, 2026
c9369d3
docs(readme): route evaluator and buyer paths
aatuh May 27, 2026
bb7bbf7
docs(comparison): add build-vs-buy guide
aatuh May 27, 2026
71fb99b
docs(comparison): add webhook platform comparisons
aatuh May 27, 2026
a365483
docs(education): add webhook evidence articles
aatuh May 27, 2026
bd99c93
docs(launch): add public launch copy templates
aatuh May 27, 2026
84e4afd
docs(launch): add launch metrics plan
aatuh May 27, 2026
376d7b3
docs(pilot): add feedback template
aatuh May 27, 2026
7478ded
docs(roadmap): add intake policy
aatuh May 27, 2026
681c90a
docs(pilot): add review checklist
aatuh May 27, 2026
d9011c6
chore(docs): enforce productization docs
aatuh May 27, 2026
f613d75
ci(release): fix trivy action tag
aatuh May 27, 2026
e5d8b68
ci(release): pin current trivy scanner
aatuh May 27, 2026
9f473e2
chore(toolchain): pin patched go release
aatuh May 27, 2026
4e72b2e
docs(product): complete next steps evidence package
aatuh May 27, 2026
51b4553
ci(release): keep acceptance fast check non-live
aatuh May 27, 2026
0d55d46
test(demo): generate evidence packet artifacts
aatuh May 27, 2026
648ec25
docs: center quickstart on evidence packet
aatuh May 27, 2026
a08fbd4
docs: define evidence pilot package
aatuh May 27, 2026
353b341
feat(evidence): version bundle manifests
aatuh May 27, 2026
fafa79f
feat(replay): require reason codes
aatuh May 27, 2026
8016f88
feat(events): stabilize timeline output
aatuh May 27, 2026
1f89f6e
fix(ssrf): disable copied client redirects
aatuh May 27, 2026
5ec49b9
feat(events): require raw payload access reasons
aatuh May 27, 2026
ca1233b
test(security): expand secret redaction coverage
aatuh May 27, 2026
198abd7
test(replay): codify replay invariants
aatuh May 27, 2026
e0e1bd1
docs(providers): add stripe and github proof guides
aatuh May 27, 2026
ee6be13
docs(providers): add shopify proof guide
aatuh May 27, 2026
ea17b0a
docs(release): add v0.2 pilot checklist
aatuh May 27, 2026
398d545
feat(doctor): add pilot readiness checks
aatuh May 27, 2026
b294a67
feat(events): add forensic search filters
aatuh May 27, 2026
dc84fb8
docs: add evidence positioning guides
aatuh May 27, 2026
3c337c6
feat(ops): add pilot failure drill tooling
aatuh May 27, 2026
228b8f8
feat(api): add stable problem codes
aatuh May 27, 2026
29b9fcf
test(evidence): cover bundle compatibility edges
aatuh May 27, 2026
af1a237
docs(sdk): add evidence workflow examples
aatuh May 27, 2026
08d9463
docs(comparisons): refresh verification dates
aatuh May 27, 2026
3cf9b8c
feat(ui): add investigation views
aatuh May 27, 2026
1e3e594
feat(replay): add preview alias
aatuh May 27, 2026
600caeb
feat(demo): add media preparation script
aatuh May 27, 2026
2288592
feat(evidence): add offline bundle viewer
aatuh May 27, 2026
2b5d0be
fix(lint): clear finalize findings
aatuh May 27, 2026
4cf39ed
test: strengthen webhookery regression coverage
aatuh May 28, 2026
3940b1a
test: broaden control plane coverage
aatuh May 28, 2026
1635072
test: expand postgres integration coverage
aatuh May 28, 2026
887efe2
test: cover cli command dispatch
aatuh May 28, 2026
f0bb5b4
test: broaden cli and adapter coverage
aatuh May 28, 2026
cf6f14a
test: expand http mutation coverage
aatuh May 28, 2026
6691480
feat(incidents): add incident reports
aatuh May 27, 2026
b9808ca
test(provider): add signature vector registry
aatuh Jun 4, 2026
226adf6
feat(replay): enforce approval expiry
aatuh Jun 4, 2026
a22a06d
feat(replay): add approval policies
aatuh Jun 4, 2026
d9fe8c8
test(security): cover tenant isolation evidence paths
aatuh Jun 4, 2026
52f86b6
test(e2e): guard restore evidence authority checks
aatuh Jun 4, 2026
1bf8ceb
docs(launch): add private metrics tracker template
aatuh Jun 4, 2026
10ef68e
docs(provider): add live proof run record template
aatuh Jun 4, 2026
c43dc1d
chore(security): ignore private proof artifacts
aatuh Jun 4, 2026
391e02d
chore(meta): add public trust metadata
aatuh Jun 8, 2026
71856d7
ci(release): publish verifiable release assets
aatuh Jun 8, 2026
e39421e
ci(meta): add honest coverage gate
aatuh Jun 8, 2026
a4dd292
chore(meta): harden openapi generator permissions
aatuh Jun 8, 2026
3270277
chore(deps): bump golang from 1.25.11-alpine to 1.26.4-alpine
dependabot[bot] Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .api.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ WEBHOOKERY_OBJECT_STORAGE_USE_SSL=false
WEBHOOKERY_BOOTSTRAP_TENANT_ID=ten_dev
WEBHOOKERY_BOOTSTRAP_API_KEY_HASH=sha256:5350c25a055e9bcd7668ea2145021dfb2be8d6c774228143f1cafc8e5f2d47c6
WEBHOOKERY_BOOTSTRAP_API_KEY_PREFIX=dev-bootstrap-key-change-me
WEBHOOKERY_TRUSTED_PROXY_CIDRS=
285 changes: 285 additions & 0 deletions .audits/codebase_audit_v1/remediation_backlog.md

Large diffs are not rendered by default.

218 changes: 218 additions & 0 deletions .audits/codebase_audit_v2/remediation_backlog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
# Backlog

Project: Webhookery

Status legend:

- [ ] not done
- [x] done

## Epic E1 - Ingress Trust Semantics [x]

Description: Ensure public provider ingress never turns structural payload validity into trusted side-effecting work without cryptographic verification or an explicit unsafe policy.

### Ticket E1-T1 - Separate CloudEvents Validity From Verification [x]

Description: Change CloudEvents handling so a structurally valid unsigned CloudEvents payload is captured as evidence but is not marked `signature_verified=true` and cannot fan out as trusted work by default.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Cover `internal/provider/provider.go`, `internal/app/service.go`, and `internal/app/delivery_fanout.go`.
- Preserve durable capture for malformed or unsigned CloudEvents where current ack policy allows evidence capture.

### Ticket E1-T2 - Add Explicit Unsafe Routing Policy Tests [x]

Description: Add negative tests proving unsigned CloudEvents do not create deliveries, plus policy tests for any intentionally allowed unsafe/archive-only routing mode.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Include provider-level, ingest-service, and delivery-fanout coverage.
- Update OpenAPI/docs only if the public contract changes.

## Epic E2 - SSRF-Safe Egress Dialing [x]

Description: Bind SSRF validation to the actual outbound connection for customer-controlled endpoint, notification, and SIEM URLs.

### Ticket E2-T1 - Implement Pinned-IP HTTP Transport [x]

Description: Add an egress transport that resolves the hostname, validates every resolved IP against policy, dials an allowed IP, and preserves the original Host/SNI semantics.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Keep redirects disabled or revalidate every redirect target before following it.
- Include DNS rebinding, private CIDR, metadata IP, IPv4-mapped IPv6, and IDNA cases.

### Ticket E2-T2 - Use Shared Safe Egress In Delivery And Signal Clients [x]

Description: Wire the pinned egress transport into `deliveryhttp` and `signalhttp`, including worker runtime construction.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Cover customer deliveries, notification channels, and SIEM sinks.
- Keep response truncation and signing behavior unchanged.

## Epic E3 - Durable Audit Evidence [x]

Description: Make audit evidence for sensitive control-plane actions required, transactional, or durably recoverable.

### Ticket E3-T1 - Replace Best-Effort Audit Writes For Sensitive Actions [x]

Description: Update state-changing and evidence-sensitive store methods so audit write failure is returned or captured through a durable audit outbox instead of ignored.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Prioritize API key revocation, delivery retry/cancel, audit export download, dead-letter release, quarantine approval/rejection, and replay state changes.
- Keep read-only audit behavior explicit if reads intentionally remain best-effort.

### Ticket E3-T2 - Add Audit Failure Injection Tests [x]

Description: Add tests that force audit persistence failure and assert sensitive actions do not silently succeed without audit evidence.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Prefer focused fake-store tests for app behavior and live Postgres tests for transaction behavior.
- Ensure audit-chain updates remain compatible with existing chain verification.

## Epic E4 - Concurrent Duplicate Capture [x]

Description: Preserve raw duplicate evidence and provider receipts even when duplicate webhook deliveries arrive concurrently.

### Ticket E4-T1 - Make Dedupe Capture Atomic [x]

Description: Refactor inbound capture to avoid the select-then-insert race on `(tenant_id, dedupe_key)` while still linking duplicate raw payloads and receipts to the first event.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Consider `INSERT ... ON CONFLICT`, row-level locks, or an idempotency/dedupe record lock.
- Preserve one routing outbox item for the canonical event and evidence rows for every receipt.

### Ticket E4-T2 - Add Live Postgres Concurrency Regression Test [x]

Description: Add an integration test that sends concurrent duplicate captures and verifies one event, multiple raw payloads, multiple provider receipts, and no failed duplicate response.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Use `WEBHOOKERY_TEST_DATABASE_URL`.
- Keep the test deterministic and isolated by tenant/source identifiers.

## Epic E5 - Maintainability And Persistence Test Depth [x]

Description: Reduce future change risk around the largest modules and improve the live persistence safety net.

### Ticket E5-T1 - Split PostgreSQL Store By Resource Family [x]

Description: Move related PostgreSQL methods into smaller files by resource family while preserving public store interfaces and behavior.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Do this after the audit, SSRF, and dedupe fixes have tests.
- Avoid behavior changes in the file split.

### Ticket E5-T2 - Add A Documented Live-Postgres Quality Gate [x]

Description: Make live PostgreSQL integration coverage easier to run consistently and document exactly when it is required.

Implementation rules:

- implement the ticket in the smallest sensible step
- run `make finalize` after completing the ticket, or an equivalent quality toolkit if `make finalize` is unavailable
- ensure the quality check covers testing, formatting, linting, and other relevant validation for the repository
- create a git commit immediately after the ticket is complete
- use Conventional Commits style for the commit message
- update the ticket checkmark from `[ ]` to `[x]` only after the ticket is actually complete
- update the epic checkmark from `[ ]` to `[x]` only when all child tickets are complete

Notes:

- Align docs, Makefile, and CI naming around `WEBHOOKERY_TEST_DATABASE_URL`.
- Keep non-live `make fast-check` usable for local iteration.
Loading
Loading