2026-08-23 - 2026-09-23

Overview

26 Active Pull Requests
55 Active Issues
Excluding merges, 0 authors have pushed 0 commits to main and 25 commits to all branches. On main, 0 files have changed and there have been 0 additions and 0 deletions.

23 Pull requests merged by 1 user

Merged #320 Say max_retries is the total attempt count, not a retry count 2026-09-21 18:33:10 +02:00

Merged #318 Consolidate the data directory mode into one owner 2026-09-21 10:01:51 +02:00

Merged #302 State the UUID-is-the-credential rule as a rule (closes #301) 2026-08-30 04:05:38 +02:00

Merged #111 Milestone 1.0.0: internet-facing readiness 2026-08-30 04:05:00 +02:00

Merged #300 Render unknown for a zero CreatedAt in Slack/Mattermost messages (closes #298) 2026-08-24 17:52:26 +02:00

Merged #297 Carry the event's receipt time into every delivery (closes #257) 2026-08-24 06:44:24 +02:00

Merged #296 Correct four documentation claims ahead of the 1.0.0 tag 2026-08-24 06:25:09 +02:00

Merged #292 Close the two remaining delivery terminal-state gaps (closes #107) 2026-08-24 05:12:03 +02:00

Merged #287 Create every SQLite file 0600 (closes #255) 2026-08-24 04:33:40 +02:00

Merged #289 Fail loudly on an unparseable SENTRY_DSN and a malformed .env (closes #283) 2026-08-24 04:25:30 +02:00

Merged #286 Derive the source detail BaseURL scheme from reqtls (closes #272) 2026-08-24 04:04:04 +02:00

Merged #263 Make SQLite durable under concurrent readers and stop re-delivering stranded webhooks (closes #256) 2026-08-24 03:49:18 +02:00

Merged #284 Record landed 1.0.0 work and drop the removed signing roadmap in TODO.md 2026-08-24 03:43:17 +02:00

Merged #277 Bind the app port deliberately and document the proxy deployment (closes #268) 2026-08-24 03:38:44 +02:00

Merged #281 Remove inbound request signature verification (closes #279) 2026-08-24 03:25:10 +02:00

Merged #260 Stamp the build version into the binary (closes #253) 2026-08-24 03:15:21 +02:00

Merged #276 Decide request TLS in one place, per request (closes #269) 2026-08-24 03:01:38 +02:00

Merged #273 Check every statement in the webhook deletion transaction (closes #262) 2026-08-24 03:01:34 +02:00

Merged #266 Name a deleted target on its historical deliveries (closes #211) 2026-08-24 02:03:23 +02:00

Merged #264 Bound the /metrics method label (closes #261) 2026-08-24 02:03:19 +02:00

Merged #259 Validate max_retries on both target forms (closes #221) 2026-08-24 01:32:48 +02:00

Merged #258 Label HTTP metrics with the chi route pattern (closes #254) 2026-08-24 01:32:45 +02:00

Merged #251 Resubmit a stored event as a new undelivered event (closes #250) 2026-08-24 00:53:38 +02:00

3 Pull requests proposed by 1 user

Proposed #319 Index the event-tier columns the sweeps, event log and retention scan 2026-09-21 09:53:44 +02:00

Proposed #321 1.0.0 milestone: next into main 2026-09-21 14:56:25 +02:00

Proposed #322 Default WEBHOOKER_ENVIRONMENT to prod 2026-09-21 15:05:23 +02:00

31 Issues closed from 1 user

Closed #316 max_retries=N means N attempts in total, but the form label and the field name say retries 2026-09-21 18:33:22 +02:00

Closed #288 Two constants define the data directory mode, in two packages that both create it 2026-09-21 10:01:52 +02:00

Closed #303 Independent code audit 2026-09-21 09:20:59 +02:00

Closed #310 Replay/redelivery does not exist and the UI shows no per-attempt results, despite README promises 2026-09-21 09:19:47 +02:00

Closed #309 SSRF blocking has no opt-out: cannot deliver to RFC1918/LAN targets — needs ALLOWED_TARGET_CIDRS 2026-09-21 09:19:47 +02:00

Closed #308 Listener bind failure leaves the process running with no listener instead of exiting non-zero 2026-09-21 09:19:47 +02:00

Closed #305 Notify drops tasks on full channel; pending deliveries only recover on process restart 2026-09-21 09:19:47 +02:00

Closed #278 Changing the password neither regenerates the current session nor invalidates any other one 2026-09-21 09:19:47 +02:00

Closed #304 SQLite concurrency: cache=shared, no busy_timeout, no WAL, unbounded pool — concurrent writers get SQLITE_BUSY, deliveries stick pending 2026-08-30 06:11:52 +02:00

Closed #301 Document that the entrypoint UUID is the authentication and shared secrets are never used 2026-08-30 04:05:38 +02:00

Closed #147 CI gate follow-ups: script/cibuild has drifted from the model script, and the status-rewrite context string is hardcoded 2026-08-30 04:05:01 +02:00

Closed #298 The reaped-row fallback renders the exact zero timestamp that #257 was filed against 2026-08-24 17:52:26 +02:00

Closed #257 Every Slack message shows a zero timestamp of 0001-01-01T00:00:00Z 2026-08-24 06:44:24 +02:00

Closed #107 Two remaining delivery terminal-state gaps: opaque failure and deletion-orphaned retries 2026-08-24 05:12:03 +02:00

Closed #255 SQLite files are created 0644 with plaintext credentials, and the documented Docker deployment supplies the parent directory 0755 2026-08-24 04:33:41 +02:00

Closed #283 Two config paths fail silently: an unparseable SENTRY_DSN starts anyway, and a malformed .env is discarded whole 2026-08-24 04:25:30 +02:00

Closed #272 BaseURL on the source detail page uses the raw X-Forwarded-Proto value as the URL scheme 2026-08-24 04:04:05 +02:00

Closed #256 A concurrent reader wedges the per-webhook database, stranding delivered webhooks at pending and re-delivering them on restart 2026-08-24 03:49:18 +02:00

Closed #226 SIGTERM during startup panics on a nil httpServer, and cleanShutdown reads two fields with no happens-before edge 2026-08-24 03:39:13 +02:00

Closed #268 The plaintext app port binds all interfaces and the README has no reverse-proxy deployment section 2026-08-24 03:38:44 +02:00

Closed #241 README understates who can replay a signed request: forwarding X-Hub-Signature-256 hands every target a valid (body, signature) pair 2026-08-24 03:25:28 +02:00

Closed #279 Remove inbound request signature verification: the entrypoint UUID is the authentication secret 2026-08-24 03:25:10 +02:00

Closed #253 The shipped binary reports version "dev": no -X ldflags in the Makefile or Dockerfile 2026-08-24 03:15:21 +02:00

Closed #269 The session cookie silently loses Secure in the default environment, and X-Forwarded-Proto parsing is exact-match 2026-08-24 03:01:38 +02:00

Closed #262 Webhook deletion commits a partial delete and reports success when a delete statement fails 2026-08-24 03:01:34 +02:00

Closed #211 Deleting a target blanks its name on every historical delivery in the event log 2026-08-24 02:03:24 +02:00

Closed #261 The /metrics method label is still unbounded: 300 requests with random method tokens mint 7,525 permanent series 2026-08-24 02:03:19 +02:00

Closed #221 max_retries is unbounded at target creation, and unparseable input silently becomes 0 2026-08-24 01:32:48 +02:00

Closed #254 Enabling /metrics lets an unauthenticated client grow the process without bound, and publishes live entrypoint UUIDs 2026-08-24 01:32:45 +02:00

Closed #247 Invalid target header name error no longer indicates which line was rejected 2026-08-24 00:58:35 +02:00

Closed #250 Resubmit a stored event as a new undelivered event, so backends can be tested against real captured traffic 2026-08-24 00:53:38 +02:00

48 Issues created by 1 user

Opened #250 Resubmit a stored event as a new undelivered event, so backends can be tested against real captured traffic 2026-08-24 00:23:54 +02:00

Opened #252 Follow-ups from the PR 251 review: two comments state the wrong mechanism, and the resubmit route's middleware is untested 2026-08-24 00:53:49 +02:00

Opened #253 The shipped binary reports version "dev": no -X ldflags in the Makefile or Dockerfile 2026-08-24 00:56:09 +02:00

Opened #254 Enabling /metrics lets an unauthenticated client grow the process without bound, and publishes live entrypoint UUIDs 2026-08-24 00:56:31 +02:00

Opened #255 SQLite files are created 0644 with plaintext credentials, and the documented Docker deployment supplies the parent directory 0755 2026-08-24 00:56:47 +02:00

Opened #256 A concurrent reader wedges the per-webhook database, stranding delivered webhooks at pending and re-delivering them on restart 2026-08-24 00:58:15 +02:00

Opened #257 Every Slack message shows a zero timestamp of 0001-01-01T00:00:00Z 2026-08-24 00:58:32 +02:00

Opened #261 The /metrics method label is still unbounded: 300 requests with random method tokens mint 7,525 permanent series 2026-08-24 01:33:03 +02:00

Opened #262 Webhook deletion commits a partial delete and reports success when a delete statement fails 2026-08-24 01:39:43 +02:00

Opened #265 script/docker is no longer byte-identical to the model script, and CI-built images stamp version "unknown" 2026-08-24 01:48:03 +02:00

Opened #267 webhooker_delivery_duration_seconds is absent from a scrape until the first delivery occurs 2026-08-24 02:00:12 +02:00

Opened #268 The plaintext app port binds all interfaces and the README has no reverse-proxy deployment section 2026-08-24 02:11:12 +02:00

Opened #269 The session cookie silently loses Secure in the default environment, and X-Forwarded-Proto parsing is exact-match 2026-08-24 02:11:31 +02:00

Opened #270 The access log records the proxy's address, never the client's, so abuse cannot be traced from webhooker's own logs 2026-08-24 02:11:49 +02:00

Opened #271 HSTS is a hardcoded 2-year includeSubDomains preload commitment with no opt-out and no documentation of its value 2026-08-24 02:11:58 +02:00

Opened #272 BaseURL on the source detail page uses the raw X-Forwarded-Proto value as the URL scheme 2026-08-24 02:15:44 +02:00

Opened #274 Split internal/handlers/source_management.go along its three CRUD seams 2026-08-24 02:18:07 +02:00

Opened #275 DeleteDB returns on the first failing suffix, so it can report a leftover file when the history is already destroyed 2026-08-24 02:28:48 +02:00

Opened #278 Changing the password neither regenerates the current session nor invalidates any other one 2026-08-24 02:48:41 +02:00

Opened #279 Remove inbound request signature verification: the entrypoint UUID is the authentication secret 2026-08-24 02:58:36 +02:00

Opened #280 Archive writers are never closed at shutdown, so their -wal survives a clean stop 2026-08-24 03:05:51 +02:00

Opened #282 make check fails on a fresh clone because script/check does not fetch the vendored assets 2026-08-24 03:15:04 +02:00

Opened #283 Two config paths fail silently: an unparseable SENTRY_DSN starts anyway, and a malformed .env is discarded whole 2026-08-24 03:17:05 +02:00

Opened #285 The withRetry bookkeeping-failure branch is unpinned: removing its error check leaves the suite green 2026-08-24 03:49:30 +02:00

Opened #288 Two constants define the data directory mode, in two packages that both create it 2026-08-24 04:14:25 +02:00

Opened #290 File-sourced configuration paths have never been audited for silent defaults 2026-08-24 04:25:42 +02:00

Opened #291 GetDB can open the same event database twice, and closing the loser drops the winner's file locks 2026-08-24 04:29:13 +02:00

Opened #293 A pending delivery whose target was deleted is stranded forever 2026-08-24 04:33:12 +02:00

Opened #294 TestProcessRetryTask_LargeBody_FetchFromDB stays green when the fetch it exists to exercise is deleted 2026-08-24 05:13:05 +02:00

Opened #295 Observation, not a defect: one unreproducible SQLITE_IOERR_SHORT_READ storm under load on ZFS-backed storage 2026-08-24 06:17:39 +02:00

Opened #298 The reaped-row fallback renders the exact zero timestamp that #257 was filed against 2026-08-24 06:44:38 +02:00

Opened #299 Startup recovery races the receiver and can deliver a fresh event twice 2026-08-24 06:44:52 +02:00

Opened #301 Document that the entrypoint UUID is the authentication and shared secrets are never used 2026-08-25 22:34:36 +02:00

Opened #303 Independent code audit 2026-08-30 03:48:37 +02:00

Opened #304 SQLite concurrency: cache=shared, no busy_timeout, no WAL, unbounded pool — concurrent writers get SQLITE_BUSY, deliveries stick pending 2026-08-30 03:57:12 +02:00

Opened #305 Notify drops tasks on full channel; pending deliveries only recover on process restart 2026-08-30 03:57:14 +02:00

Opened #306 Circuit breaker half-open state busy-loops queued tasks with a DB write per spin 2026-08-30 03:57:20 +02:00

Opened #307 WEBHOOKER_ENVIRONMENT defaults to dev, silently shipping insecure prod (no Secure cookies, CORS *) 2026-08-30 03:57:23 +02:00

Opened #308 Listener bind failure leaves the process running with no listener instead of exiting non-zero 2026-08-30 03:57:27 +02:00

Opened #309 SSRF blocking has no opt-out: cannot deliver to RFC1918/LAN targets — needs ALLOWED_TARGET_CIDRS 2026-08-30 03:57:30 +02:00

Opened #310 Replay/redelivery does not exist and the UI shows no per-attempt results, despite README promises 2026-08-30 03:57:36 +02:00

Opened #311 Review toward 1.0: identify and file all next steps 2026-09-21 09:13:49 +02:00

Opened #312 The inbound query string is discarded: a sender's URL parameters never reach storage, the UI or a target 2026-09-21 09:20:19 +02:00

Opened #313 Outbound User-Agent is the hardcoded webhooker/1.0, not the stamped build version 2026-09-21 09:20:20 +02:00

Opened #314 No index on the columns the sweeps, recovery and the event log filter by 2026-09-21 09:20:20 +02:00

Opened #315 script/test always runs verbose and never measures coverage, against the policy pattern 2026-09-21 09:20:20 +02:00

Opened #316 max_retries=N means N attempts in total, but the form label and the field name say retries 2026-09-21 09:20:20 +02:00

Opened #317 MAINTENANCE_MODE is a documented no-op configuration variable 2026-09-21 09:20:20 +02:00

17 Unresolved Conversations

Open #98 Deprecated gomodguard linter in the org-standard .golangci.yml (needs an upstream decision) 2026-09-23 07:59:11 +02:00

Open #246 A delivery can carry Content-Type twice when the inbound event also supplied one 2026-09-21 09:20:33 +02:00

Open #215 make fmt does not format Markdown, so the org prettier settings are unenforced here 2026-08-24 06:24:04 +02:00

Open #212 Encrypt credential-bearing target config at rest in webhooker.db 2026-08-24 04:13:02 +02:00

Open #248 Migrate .golangci.yml from the deprecated gomodguard to gomodguard_v2 2026-08-24 03:34:45 +02:00

Open #245 Default-block the public-unicast cloud metadata endpoints (Azure WireServer, Equinix Metal) 2026-08-24 03:34:45 +02:00

Open #198 make test is past the org 20s target and arguably past the 60s hard cap, driven almost entirely by internal/handlers 2026-08-24 03:34:45 +02:00

Open #193 Headers set before an uncommitted panic survive onto the recovered 500, including Set-Cookie 2026-08-24 03:34:45 +02:00

Open #112 Decision: TODO.md Completed Steps guarantees a merge conflict on every unit landing on next 2026-08-24 03:34:45 +02:00

Open #175 The CI workflow step is named "runs make check", which the image has never done 2026-08-24 01:48:03 +02:00

Open #177 Target.Webhook and Webhook.Targets form a reference cycle that will recurse once anything marshals a preloaded model 2026-08-24 00:59:13 +02:00

Open #169 Restrict /s/* to GET and HEAD — it currently answers POST, PUT and DELETE with 200 2026-08-24 00:59:13 +02:00

Open #225 internal/handlers tests are load-fragile: both the fx start budget and the 90s package timeout blow under host load, so the gate reports failures unrelated to the change 2026-08-24 00:59:13 +02:00

Open #238 The event-DB sweep marker is monotonic and trusts itself, so a downgrade re-leaks target rows permanently 2026-08-24 00:59:13 +02:00

Open #244 blockedNetworks does not cover in-cloud provider service networks on public unicast, e.g. IBM Cloud 161.26.0.0/16 and 166.8.0.0/14 2026-08-24 00:59:13 +02:00

Open #117 Page {{define "title"}} blocks never render; every browser tab reads "Webhooker" 2026-08-24 00:59:13 +02:00

Open #33 1.0/mvp 2026-08-24 00:59:13 +02:00