2026-09-21 - 2026-10-21

Overview

150 Active Pull Requests
156 Active Issues
Excluding merges, 2 authors have pushed 2 commits to main and 143 commits to all branches. On main, 6 files have changed and there have been 81 additions and 3 deletions.

2 Releases published by 1 user

Published v1.0.0-rc2 2026-10-16 00:57:16 +02:00

Published v1.0.0-rc1 2026-10-13 10:53:36 +02:00

149 Pull requests merged by 2 users

Merged #555 Store events and create deliveries in the delivery engine (closes #544) 2026-10-16 00:51:27 +02:00

Merged #554 Store a target's settings as columns (closes #543) 2026-10-15 23:02:40 +02:00

Merged #553 Use one recovery routine at start and on every sweep tick (closes #542) 2026-10-15 21:57:06 +02:00

Merged #552 Move the archive files into their own package (closes #541) 2026-10-15 21:03:43 +02:00

Merged #546 Store a webhook's retention as a plain day count, 0 meaning forever (closes #539) 2026-10-15 20:03:33 +02:00

Merged #547 Store a target's number of delivery attempts, at least one 2026-10-15 19:38:14 +02:00

Merged #551 Say the query logger drops bound values 2026-10-15 18:57:59 +02:00

Merged #549 Send only the Referer's scheme and host to Sentry 2026-10-15 18:07:22 +02:00

Merged #550 Build the binary without cgo 2026-10-15 17:36:36 +02:00

Merged #537 Drop unsafe-inline from the Content-Security-Policy 2026-10-15 16:18:27 +02:00

Merged #536 Bind 0.0.0.0 to IPv4 only 2026-10-15 15:44:43 +02:00

Merged #534 Keep the entrypoint UUID out of webhooker's own logs 2026-10-15 14:58:35 +02:00

Merged #532 Leave a delivery cut off by a stop for the next start 2026-10-15 12:29:17 +02:00

Merged #380 Milestone: next into main 2026-10-15 11:36:39 +02:00

Merged #533 Store delivery and archive times without the monotonic clock reading 2026-10-15 11:15:36 +02:00

Merged #526 Build the image's static binary with netgo, osusergo and sqlite_omit_load_extension (closes #525) 2026-10-13 10:43:47 +02:00

Merged #524 Describe code in its own terms, not by an earlier build's data (closes #522) 2026-10-13 09:57:24 +02:00

Merged #523 Escape the database path in the SQLite connection string (closes #518) 2026-10-13 09:30:25 +02:00

Merged #521 Remove upgrade and older-build text from the README (closes #520) 2026-10-13 08:31:52 +02:00

Merged #517 Drop Completed Steps from TODO.md; the tracker is the record (closes #112) 2026-10-13 07:18:50 +02:00

Merged #519 Build every database's schema from embedded SQL files (closes #56) 2026-10-13 06:34:06 +02:00

Merged #516 Name Sentry transactions after the route they matched (closes #185) 2026-10-13 05:47:28 +02:00

Merged #515 Make the HSTS max-age configurable with HSTS_MAX_AGE (closes #271) 2026-10-13 03:27:26 +02:00

Merged #514 Document that DATA_DIR must be on a local filesystem (closes #295) 2026-10-13 01:29:44 +02:00

Merged #512 Keep test helpers out of the shipped binary (closes #506) 2026-10-06 14:29:49 +02:00

Merged #513 Read the export test's heap only after pools drop their caches (closes #511) 2026-10-06 10:56:50 +02:00

Merged #510 Make the load-sensitive tests wait for what they check (closes #507) 2026-10-06 08:51:37 +02:00

Merged #509 Refresh the package lists before installing in script/bootstrap (closes #508) 2026-10-06 07:21:31 +02:00

Merged #505 Re-vendor the shared files from sneak/prompts at dd4027b (closes #504) 2026-10-06 06:05:43 +02:00

Merged #502 Mask a target URL's query string when the URL has no path (closes #500) 2026-10-04 03:31:38 +02:00

Merged #501 Store and show an event's query string, and pass it on to an HTTP target when set (closes #312) 2026-10-04 03:00:36 +02:00

Merged #498 Merge main into next after 416 (closes #497) 2026-10-03 14:29:51 +02:00

Merged #416 main side of 414: cheaper test hashing, and failing tests visible in the build log (closes #414) 2026-10-03 14:08:52 +02:00

Merged #496 Install ESLint and prettier with yarn 4 through corepack (closes #493) 2026-10-03 07:03:32 +02:00

Merged #495 Break long values on the webhook page and event log at phone width (closes #391) 2026-10-03 06:56:44 +02:00

Merged #492 Format the Markdown with prettier in make fmt and make fmt-check (closes #215) 2026-10-03 06:32:28 +02:00

Merged #494 Split source_management.go along its CRUD seams (closes #274) 2026-10-03 06:19:47 +02:00

Merged #490 Event log: show only the events with a failed or a pending delivery (closes #390) 2026-10-03 05:40:35 +02:00

Merged #489 Show an event's entrypoint and request headers in the event log and on its page (closes #389) 2026-10-03 05:22:15 +02:00

Merged #491 Use one name for each thing the UI shows (closes #399) 2026-10-03 05:07:42 +02:00

Merged #486 Lint static/js/ with ESLint in Docker (closes #120) 2026-10-03 04:24:11 +02:00

Merged #482 Rotate a database target's archive monthly, daily or hourly (closes #379) 2026-10-03 04:18:38 +02:00

Merged #487 Event log: show attempt and delivery times, label replays, zone event times (closes #386) 2026-10-03 04:12:27 +02:00

Merged #488 Event log: only the newest event expanded, and only the 50 most recent (closes #349) 2026-10-03 03:43:28 +02:00

Merged #485 Name the item and what is lost in each delete prompt (closes #400) 2026-10-03 03:33:15 +02:00

Merged #484 Say what a database or log target's attempt did, without a status (closes #388) 2026-10-03 02:41:17 +02:00

Merged #471 Event log: an event's ID can be selected without toggling it (closes #348) 2026-10-03 02:32:10 +02:00

Merged #483 Offer no Replay for a delivery to a deleted target (closes #387) 2026-10-03 02:13:18 +02:00

Merged #478 Show a target paused by its circuit breaker (closes #385) 2026-10-03 02:06:20 +02:00

Merged #481 Remove an http target's max_queue_size (closes #477) 2026-10-03 01:39:13 +02:00

Merged #480 Show each page's own title in the browser tab (closes #117) 2026-10-03 01:30:03 +02:00

Merged #479 Offer archive expiry choices on the target forms, show plain units (closes #396) 2026-10-03 01:16:15 +02:00

Merged #474 Keep what was typed when a target or webhook edit is refused (closes #381) 2026-10-03 00:51:56 +02:00

Merged #473 Pin tailwindcss and check the committed stylesheet against it (closes #231) 2026-10-03 00:30:57 +02:00

Merged #476 New-webhook page: optional HTTP target URL and archive with pruning (closes #373) 2026-10-03 00:21:56 +02:00

Merged #475 Show a slack target's retry setting in the target list (closes #395) 2026-10-03 00:19:13 +02:00

Merged #472 Show each target's delivered and failed deliveries in the target list (closes #372) 2026-10-02 23:47:17 +02:00

Merged #470 Show each entrypoint's last event and event count on the webhook page (closes #393) 2026-10-02 23:16:08 +02:00

Merged #463 Targets section: one Add, then a target type and Next, then that type's fields (closes #370) 2026-10-02 22:24:39 +02:00

Merged #465 Give each event its own page and show bodies the same everywhere (closes #369) 2026-10-02 22:00:42 +02:00

Merged #460 Report or refuse each unusable file webhooker reads (closes #290) 2026-10-02 21:38:48 +02:00

Merged #464 Let an entrypoint's description be edited in place (closes #392) 2026-10-02 21:32:43 +02:00

Merged #468 Index the event log's resubmit count with deleted_at (closes #325) 2026-10-02 21:23:34 +02:00

Merged #469 Show a database target's archive file, size and last write in the target list (closes #397) 2026-10-02 21:22:34 +02:00

Merged #467 Name each embedded static file so a missing Alpine.js fails the build (closes #166) 2026-10-02 20:56:36 +02:00

Merged #439 Add a Download button that exports a database target's archive as gzipped JSON (closes #374) 2026-10-02 20:32:09 +02:00

Merged #466 Route the delivery tests' gorm.Open through gormlog (closes #462) 2026-10-02 20:20:49 +02:00

Merged #454 Clamp the HTTP drain by the tail-hook reserve (closes #170) 2026-10-02 20:11:43 +02:00

Merged #458 Pin the HTTP target's unpinned error checks (closes #285) 2026-10-02 19:37:36 +02:00

Merged #461 Name the reaper's hard delete in the event body comments (closes #455) 2026-10-02 19:36:30 +02:00

Merged #457 Fix two resubmit comments and test the resubmit route's middleware (closes #252) 2026-10-02 19:20:40 +02:00

Merged #456 Harden the (*gorm.DB).Scan guard test (closes #232) 2026-10-02 19:19:46 +02:00

Merged #451 Try every event database file on delete and say which was left (closes #275) 2026-10-02 18:42:29 +02:00

Merged #447 Make every clickable control look clickable, in two shared styles (closes #375) 2026-10-02 18:32:19 +02:00

Merged #445 Pin the close before the reopen in the archive sweep (closes #103) 2026-10-02 18:16:32 +02:00

Merged #453 Clear the environment in the cmd/webhooker tests that build a Config (closes #452) 2026-10-02 18:03:32 +02:00

Merged #450 Assert the body a retry delivers, not only its status (closes #294) 2026-10-02 18:03:20 +02:00

Merged #449 Pin the body cap's order in every page route group (closes #93) 2026-10-02 17:53:21 +02:00

Merged #442 Check the log charge against every code point (closes #172) 2026-10-02 17:53:11 +02:00

Merged #444 Isolate config tests from the shell; any out-of-range PORT is ErrInvalidPort (closes #94) 2026-10-02 17:44:30 +02:00

Merged #443 Send fx's own events through the service's logger (closes #183) 2026-10-02 17:22:06 +02:00

Merged #448 Pin the rate-limit key for an empty RemoteAddr (closes #168) 2026-10-02 17:09:23 +02:00

Merged #446 Close the retention follow-ups from the August review (closes #99) 2026-10-02 16:50:34 +02:00

Merged #440 Log the client address next to the peer address (closes #270) 2026-10-02 16:50:23 +02:00

Merged #441 Seed the retention tests 50 rows per insert, not 500 (closes #198) 2026-10-02 16:27:01 +02:00

Merged #411 Load Alpine's CSP build so the UI's directives run (closes #371) 2026-10-02 16:09:04 +02:00

Merged #438 Drive the archive reopen debounce test from a clock (closes #190) 2026-10-02 16:03:02 +02:00

Merged #433 Keep each model's parent out of its JSON (closes #177) 2026-10-02 15:43:07 +02:00

Merged #436 Write a form-error page's status only after it renders (closes #128) 2026-10-02 15:34:02 +02:00

Merged #435 Name the CI build step after what the image runs (closes #175) 2026-10-02 15:15:09 +02:00

Merged #437 Toggle only a target's active state, so it cannot undo an edit (closes #431) 2026-10-02 14:43:01 +02:00

Merged #434 Build the middleware test cookie stores with the production constructor (closes #154) 2026-10-02 14:30:52 +02:00

Merged #432 Justify the handlers tests' start limit with a measurement (closes #225) 2026-10-02 14:08:55 +02:00

Merged #417 Show each webhook's activity in the webhook list (closes #394) 2026-10-02 13:57:43 +02:00

Merged #429 Say at the receiver route where its 1 MB body cap lives (closes #173) 2026-10-02 13:40:01 +02:00

Merged #418 Name each database target's archive for its webhook and target (closes #376) 2026-10-02 13:28:50 +02:00

Merged #430 Remove the no-op MAINTENANCE_MODE setting (closes #317) 2026-10-02 13:27:43 +02:00

Merged #428 Let a handler flush or set a write deadline through the access log and metrics (closes #191) 2026-10-02 13:08:55 +02:00

Merged #427 Serve the delivery duration histogram from boot (closes #267) 2026-10-02 12:45:06 +02:00

Merged #409 Add a read-only Settings page for the loaded configuration (closes #402) 2026-10-02 12:30:22 +02:00

Merged #425 Run script/test quietly with coverage, rerun failed tests verbosely (closes #315) 2026-10-02 11:58:43 +02:00

Merged #422 Refuse [::], 0.0.0.0, IPv6 multicast and documentation space (closes #341) 2026-10-02 11:22:31 +02:00

Merged #426 Discard fx's own log in tests that build an fx app (closes #230) 2026-10-02 11:08:38 +02:00

Merged #420 Say what each action did in a one-line notice (closes #383) 2026-10-02 10:30:32 +02:00

Merged #424 Drop TODO.md's stale docs-only cache caveat (closes #421) 2026-10-02 10:14:41 +02:00

Merged #419 Widen the webhook page by half so an entrypoint URL fits on one line (closes #350) 2026-10-02 09:49:34 +02:00

Merged #423 Send the build version in the outbound User-Agent (closes #313) 2026-10-02 09:48:35 +02:00

Merged #346 Serve /metrics from a registry of its own (closes #227) 2026-10-02 09:06:21 +02:00

Merged #410 Derive the image's version from the .git in the build context (closes #366) 2026-10-02 08:41:21 +02:00

Merged #408 Render admin page errors in the normal layout (closes #382) 2026-10-02 08:15:13 +02:00

Merged #407 Say how to allow a refused private target address (closes #398) 2026-10-02 07:52:51 +02:00

Merged #406 Logging in returns to the page that was asked for (closes #384) 2026-10-02 06:57:52 +02:00

Merged #403 Add a statistics pane to the webhook page (closes #368) 2026-10-02 06:41:00 +02:00

Merged #378 Move webhook pages to /hook/ID and inbound URLs to /h/UUID (closes #367) 2026-10-02 06:32:15 +02:00

Merged #415 Run the test suite without -v so a failure shows in the build log (closes #414) 2026-10-02 06:31:53 +02:00

Merged #404 Keep make test under 2 GB of memory (closes #344) 2026-10-02 03:02:29 +02:00

Merged #413 Reword the build-architecture history line in TODO.md (closes #412) 2026-10-02 01:08:23 +02:00

Merged #336 Trust the RFC 1918 ranges as proxies when TRUSTED_PROXIES is unset (closes #333) 2026-10-02 00:41:37 +02:00

Merged #339 State what the default blocklist covers (closes #244) 2026-10-02 00:21:36 +02:00

Merged #361 Show 50 recent events with size, processing time and status (closes #347) 2026-10-01 23:50:01 +02:00

Merged #405 Remove the fixed Account Type row from the profile page (closes #401) 2026-10-01 23:24:42 +02:00

Merged #351 Commit the Alpine.js tarball in 3p/ and extract it at build time (closes #345) 2026-10-01 22:44:42 +02:00

Merged #338 Bound username length at creation (closes #184) 2026-10-01 21:38:48 +02:00

Merged #365 deploy 2026-09-29 13:06:27 +02:00

Merged #364 Next 2026-09-29 13:05:58 +02:00

Merged #353 Container sets its data directory's owner and mode itself 2026-09-29 13:05:17 +02:00

Merged #362 Let a browser with cookies from an earlier database log in (closes #359) 2026-09-29 12:58:44 +02:00

Merged #360 Fast-forward next to main 2026-09-29 12:19:02 +02:00

Merged #357 deployment to prod 2026-09-29 12:01:57 +02:00

Merged #356 Sneak/testdeploy 2026-09-29 12:01:33 +02:00

Merged #355 deployment 2026-09-29 11:54:07 +02:00

Merged #342 Milestone: next into main 2026-09-29 11:53:19 +02:00

Merged #343 Deploy: main into prod 2026-09-29 11:46:50 +02:00

Merged #335 Restrict /s/* to GET and HEAD (closes #169) 2026-09-29 11:10:27 +02:00

Merged #321 1.0.0 milestone: next into main 2026-09-29 11:04:58 +02:00

Merged #337 Drop Set-Cookie from the recovered 500 (closes #193) 2026-09-29 10:30:27 +02:00

Merged #334 Default-block Azure WireServer's public address (closes #245) 2026-09-29 10:22:08 +02:00

Merged #332 Close archive writers when the delivery engine stops (closes #280) 2026-09-29 08:30:24 +02:00

Merged #331 Send Content-Type once on a delivery 2026-09-29 07:11:56 +02:00

Merged #329 Fail a pending delivery whose target was deleted (closes #293) 2026-09-29 06:48:20 +02:00

Merged #330 Make deliveries refused while half-open wait a cooldown (closes #306) 2026-09-29 05:48:21 +02:00

Merged #327 Open each event database once when callers race 2026-09-29 04:37:31 +02:00

Merged #326 Say make check needs make bootstrap on a fresh clone 2026-09-29 04:30:15 +02:00

Merged #328 Do not resend a delivery that restart recovery already sent 2026-09-29 04:12:15 +02:00

Merged #319 Index the event-tier columns the sweeps, event log and retention scan 2026-09-28 14:13:23 +02:00

Merged #322 Default WEBHOOKER_ENVIRONMENT to prod (closes #307) 2026-09-28 12:47:32 +02:00

Merged #324 Document running webhooker under upaas (closes #323) 2026-09-28 12:30:33 +02:00

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

1 Pull request proposed by 1 user

Proposed #556 next into main 2026-10-16 04:07:32 +02:00

154 Issues closed from 1 user

Closed #544 Move storing an event and creating its deliveries from the handlers into the delivery engine 2026-10-16 00:51:27 +02:00

Closed #543 Store a target's settings as columns instead of a per-type JSON string 2026-10-15 23:02:40 +02:00

Closed #542 Use one recovery routine at start and on every sweep tick 2026-10-15 21:57:06 +02:00

Closed #541 Move the archive files into their own package 2026-10-15 21:03:44 +02:00

Closed #539 Store a webhook's retention as a plain day count, 0 meaning forever 2026-10-15 20:03:34 +02:00

Closed #540 Store a target's number of delivery attempts, at least one, instead of its retries 2026-10-15 19:38:15 +02:00

Closed #535 A comment in the middleware says the query logger writes client values into statements; it drops them 2026-10-15 18:57:59 +02:00

Closed #548 Sentry events can carry the entrypoint URL in the Referer header 2026-10-15 18:07:22 +02:00

Closed #545 Build the binary without cgo 2026-10-15 17:36:36 +02:00

Closed #530 CSP allows unsafe-inline scripts and styles and the README never says why 2026-10-15 16:18:27 +02:00

Closed #528 BIND_ADDRESS=0.0.0.0 binds IPv6 too; the README describes it as IPv4-only and distinct from :: 2026-10-15 15:44:43 +02:00

Closed #531 webhooker logs the entrypoint UUID at INFO although the README says to keep it out of logs 2026-10-15 14:58:36 +02:00

Closed #527 A clean stop cancels in-flight delivery attempts and records them as failed; fire-and-forget deliveries are lost to a restart 2026-10-15 12:29:18 +02:00

Closed #529 finished_at and archived_at are stored with Go's monotonic clock reading appended (m=+365.03) 2026-10-15 11:15:37 +02:00

Closed #311 Review toward 1.0: identify and file all next steps 2026-10-13 11:35:45 +02:00

Closed #525 The static image build links glibc's getaddrinfo and dlopen, which the Alpine runtime cannot satisfy 2026-10-13 10:43:48 +02:00

Closed #522 Two code comments explain behaviour by what an earlier build left behind 2026-10-13 09:57:25 +02:00

Closed #518 A # or ? in DATA_DIR makes every database open the same, shorter path 2026-10-13 09:30:25 +02:00

Closed #520 The README describes an upgrade path that does not exist before 1.0 2026-10-13 08:31:53 +02:00

Closed #112 Decision: TODO.md Completed Steps guarantees a merge conflict on every unit landing on next 2026-10-13 07:18:50 +02:00

Closed #56 Move schema_migrations table creation into 000.sql with INTEGER version column 2026-10-13 06:34:07 +02:00

Closed #185 If tracing is ever enabled, every Sentry transaction will collapse into one bucket named POST /(redacted) 2026-10-13 05:47:29 +02:00

Closed #271 HSTS is a hardcoded 2-year includeSubDomains preload commitment with no opt-out and no documentation of its value 2026-10-13 03:27:26 +02:00

Closed #85 Design: should delivery targets own their recovery/sweep loop, not just backoff? 2026-10-13 03:15:17 +02:00

Closed #295 Observation, not a defect: one unreproducible SQLITE_IOERR_SHORT_READ storm under load on ZFS-backed storage 2026-10-13 01:29:45 +02:00

Closed #506 Test helpers are compiled into the shipped binary 2026-10-06 14:29:49 +02:00

Closed #511 Make next green: TestArchiveExport_Streams measures the shared heap and fails go test on noise 2026-10-06 10:56:50 +02:00

Closed #507 Tests that fail at random under load 2026-10-06 08:51:37 +02:00

Closed #508 CI fails at bootstrap: the runner cannot install Go 2026-10-06 07:21:32 +02:00

Closed #504 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 06:05:44 +02:00

Closed #98 Deprecated gomodguard linter in the org-standard .golangci.yml (needs an upstream decision) 2026-10-06 01:42:40 +02:00

Closed #265 script/docker is no longer byte-identical to the model script, and CI-built images stamp version "unknown" 2026-10-06 01:42:40 +02:00

Closed #248 Migrate .golangci.yml from the deprecated gomodguard to gomodguard_v2 2026-10-06 01:22:53 +02:00

Closed #500 The Redactor misses an echoed request line when the target URL has a query string but no path 2026-10-04 03:31:38 +02:00

Closed #312 The inbound query string is discarded: a sender's URL parameters never reach storage, the UI or a target 2026-10-04 03:00:36 +02:00

Closed #497 Merge main into next so the milestone PR merges again after 416 2026-10-03 14:29:51 +02:00

Closed #414 Make main and next green: make test fails in the Docker build, and its output is cut off before the failure 2026-10-03 14:08:52 +02:00

Closed #493 yarn 1 prints a url.parse() deprecation warning in the js-deps stage 2026-10-03 07:03:32 +02:00

Closed #377 Audit: missing basic functionality and information across the whole UI 2026-10-03 06:57:00 +02:00

Closed #391 At phone width the event log and the target list cut off statuses and controls 2026-10-03 06:56:44 +02:00

Closed #215 make fmt does not format Markdown, so the org prettier settings are unenforced here 2026-10-03 06:32:28 +02:00

Closed #274 Split internal/handlers/source_management.go along its three CRUD seams 2026-10-03 06:19:47 +02:00

Closed #390 Event log cannot show only the events whose delivery failed 2026-10-03 05:40:35 +02:00

Closed #389 The event log never shows an event's request headers or the entrypoint it arrived at 2026-10-03 05:22:15 +02:00

Closed #399 The UI names the same things in different ways 2026-10-03 05:07:42 +02:00

Closed #120 No JS linting, so the styleguide REPO_POLICIES binds us to is unenforced 2026-10-03 04:24:11 +02:00

Closed #379 Archive database target: rotation setting puts year-month, day or hour in the filename 2026-10-03 04:18:38 +02:00

Closed #386 Event log: attempts and deliveries show no time, event times have no zone, replays look like originals 2026-10-03 04:12:28 +02:00

Closed #349 Event log: only the newest event expanded on load, and only the 50 most recent events 2026-10-03 03:43:29 +02:00

Closed #400 Delete confirmations do not name the item or say what is lost 2026-10-03 03:33:15 +02:00

Closed #388 Database and log target deliveries read "Status: — (no response)" 2026-10-03 02:41:17 +02:00

Closed #348 Log viewer: the caret does not collapse an event; clicking the row should toggle it 2026-10-03 02:32:10 +02:00

Closed #387 Replay is offered for a deleted target, and its refusal gives advice that cannot work 2026-10-03 02:13:18 +02:00

Closed #385 A target paused by its circuit breaker is not shown as paused 2026-10-03 02:06:20 +02:00

Closed #477 An http target's max_queue_size is stored and shown but nothing enforces it 2026-10-03 01:39:13 +02:00

Closed #117 Page {{define "title"}} blocks never render; every browser tab reads "Webhooker" 2026-10-03 01:30:03 +02:00

Closed #396 Archive expiry is a raw duration typed by hand (720h) 2026-10-03 01:16:15 +02:00

Closed #381 Target and webhook edit pages lose what was typed when a save is rejected 2026-10-03 00:51:57 +02:00

Closed #231 tailwindcss is unpinned, so the committed static/css/tailwind.css is not reproducible from the repo's own tooling 2026-10-03 00:30:58 +02:00

Closed #373 New-webhook page: optional HTTP target URL and archive checkbox with pruning choice, creating those targets 2026-10-03 00:21:56 +02:00

Closed #395 The slack target's retry setting is not shown in the target list 2026-10-03 00:19:13 +02:00

Closed #372 Target list: successful and failed deliveries per target, in total and in the last 24h 2026-10-02 23:47:17 +02:00

Closed #393 Entrypoints do not show when they last received an event 2026-10-02 23:16:08 +02:00

Closed #370 Targets on the webhook page: one + Add, then pick a target type, then that type's settings 2026-10-02 22:24:39 +02:00

Closed #369 Event bodies: per-event page, expandable recent events, full bodies under 32k, JSON formatted, scroll well over 200 lines 2026-10-02 22:00:42 +02:00

Closed #290 File-sourced configuration paths have never been audited for silent defaults 2026-10-02 21:38:48 +02:00

Closed #459 The main database's open errors do not name the file 2026-10-02 21:38:48 +02:00

Closed #392 An entrypoint's description cannot be changed 2026-10-02 21:32:43 +02:00

Closed #325 The event log's resubmit count reads every live event instead of using the resubmitted_from_id index 2026-10-02 21:23:34 +02:00

Closed #397 A database target does not show its archive file, size or last write 2026-10-02 21:22:34 +02:00

Closed #166 static.go embeds the js directory, so a missing fetched asset silently produces a binary with no Alpine 2026-10-02 20:56:36 +02:00

Closed #374 Database targets: a Download button that exports the SQLite contents as gzipped JSON 2026-10-02 20:32:09 +02:00

Closed #462 Six test-only gorm.Open calls still pass a bare gorm.Config 2026-10-02 20:20:49 +02:00

Closed #170 Clamp the HTTP drain by the tail-hook reserve, not just the Sentry flush 2026-10-02 20:11:44 +02:00

Closed #285 The withRetry bookkeeping-failure branch is unpinned: removing its error check leaves the suite green 2026-10-02 19:37:36 +02:00

Closed #455 The eventBodyQuery comment credits the soft-delete predicate for refusing a reaped event 2026-10-02 19:36:30 +02:00

Closed #252 Follow-ups from the PR 251 review: two comments state the wrong mechanism, and the resubmit route's middleware is untested 2026-10-02 19:20:40 +02:00

Closed #232 Harden the (*gorm.DB).Scan guard test: three evasions, an overstated doc comment, and a weak file-count floor 2026-10-02 19:19:46 +02:00

Closed #275 DeleteDB returns on the first failing suffix, so it can report a leftover file when the history is already destroyed 2026-10-02 18:42:29 +02:00

Closed #375 Clickable things must look clickable: the entrypoint URL "copy" control, "+ Add", and every other one 2026-10-02 18:32:19 +02:00

Closed #103 Pin the pre-reopen close in archiveWriter.sweepExpired (unprotected connection-leak guard) 2026-10-02 18:16:32 +02:00

Closed #452 Tests outside the config package still read the developer's shell when they build a Config 2026-10-02 18:03:32 +02:00

Closed #294 TestProcessRetryTask_LargeBody_FetchFromDB stays green when the fetch it exists to exercise is deleted 2026-10-02 18:03:20 +02:00

Closed #93 Follow-ups from the PR #91 review: body-limit docs and route-ordering test coverage 2026-10-02 17:53:21 +02:00

Closed #172 Assert the access-log encoded-byte charge against every Unicode code point 2026-10-02 17:53:11 +02:00

Closed #94 Follow-ups from the PR #92 review: config test hygiene and env docs 2026-10-02 17:44:30 +02:00

Closed #183 Two writers bypass internal/logger: fx's console logger and the Go runtime 2026-10-02 17:22:06 +02:00

Closed #238 The event-DB sweep marker is monotonic and trusts itself, so a downgrade re-leaks target rows permanently 2026-10-02 17:09:59 +02:00

Closed #168 Rate-limit key collapses every peer with an empty RemoteAddr into one bucket 2026-10-02 17:09:24 +02:00

Closed #99 Follow-ups from the PR #96 re-review: retention bound docs and untested normalisation 2026-10-02 16:50:34 +02:00

Closed #270 The access log records the proxy's address, never the client's, so abuse cannot be traced from webhooker's own logs 2026-10-02 16:50:23 +02:00

Closed #198 make test is past the org 20s target and arguably past the 60s hard cap, driven almost entirely by internal/handlers 2026-10-02 16:27:01 +02:00

Closed #371 The UI's Alpine.js never runs: the Content-Security-Policy forbids the eval it needs 2026-10-02 16:09:04 +02:00

Closed #190 Last wall-clock-dependent test: two writes must land inside a real 2s debounce window or correct code reds 2026-10-02 16:03:02 +02:00

Closed #101 Archive sweep repeats open/prune/close once per database target instead of once per webhook 2026-10-02 15:43:30 +02:00

Closed #177 Target.Webhook and Webhook.Targets form a reference cycle that will recurse once anything marshals a preloaded model 2026-10-02 15:43:07 +02:00

Closed #128 Form-error paths commit a 4xx before rendering, so a failed render there cannot report 500 2026-10-02 15:34:03 +02:00

Closed #175 The CI workflow step is named "runs make check", which the image has never done 2026-10-02 15:15:09 +02:00

Closed #431 The target toggle saves the whole row, so it can undo an edit of the same target 2026-10-02 14:43:01 +02:00

Closed #154 middleware tests construct cookie stores by hand, so they no longer match the production store 2026-10-02 14:30:52 +02:00

Closed #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-10-02 14:08:55 +02:00

Closed #394 Webhook list does not show which webhooks are receiving or failing 2026-10-02 13:57:43 +02:00

Closed #173 The receiver's 1 MB body cap lives in the handler, not the middleware the other route groups use 2026-10-02 13:40:01 +02:00

Closed #376 Archive database filename includes the webhook name and the target name 2026-10-02 13:28:50 +02:00

Closed #317 MAINTENANCE_MODE is a documented no-op configuration variable 2026-10-02 13:27:44 +02:00

Closed #191 loggingResponseWriter has no Unwrap, so http.ResponseController cannot reach the real writer through the shipped chain 2026-10-02 13:08:55 +02:00

Closed #267 webhooker_delivery_duration_seconds is absent from a scrape until the first delivery occurs 2026-10-02 12:45:06 +02:00

Closed #402 No page shows the server's settings 2026-10-02 12:30:22 +02:00

Closed #315 script/test always runs verbose and never measures coverage, against the policy pattern 2026-10-02 11:58:43 +02:00

Closed #341 The SSRF guard lets a delivery reach [::], which is the host itself on Linux 2026-10-02 11:22:31 +02:00

Closed #230 Data race in internal/handlers/logbound_test.go: fx testutil.WriteSyncer calls t.Logf from a start hook after the test goroutine has finished 2026-10-02 11:08:38 +02:00

Closed #383 No message after saving, deleting, activating or signing out 2026-10-02 10:30:32 +02:00

Closed #421 TODO.md says a docs-only commit replays from the layer cache, which is no longer true 2026-10-02 10:14:41 +02:00

Closed #350 Webhook page: widen the entrypoints container by 50-100% so the URL does not wrap 2026-10-02 09:49:34 +02:00

Closed #313 Outbound User-Agent is the hardcoded webhooker/1.0, not the stamped build version 2026-10-02 09:48:35 +02:00

Closed #227 go test -count=2 ./internal/server/... panics on duplicate metrics collector registration 2026-10-02 09:06:21 +02:00

Closed #366 Image built by upaas stamps version "unknown" into the binary 2026-10-02 08:41:21 +02:00

Closed #382 Error pages outside forms are bare text with no way back 2026-10-02 08:15:13 +02:00

Closed #398 Refusing a private target address does not say how to allow it 2026-10-02 07:52:51 +02:00

Closed #384 Signing in does not return to the page that was asked for 2026-10-02 06:57:52 +02:00

Closed #368 Per-webhook page: statistics pane at the top (lifetime and per retention period) 2026-10-02 06:41:01 +02:00

Closed #367 Routes: per-webhook page under /webhook/ (not /source/), its log at .../events, inbound URLs under /h/UUID or /ingest/UUID 2026-10-02 06:32:15 +02:00

Closed #344 make test needs up to 6.7 GiB of RAM (handlers and database tests under -race) 2026-10-02 03:02:29 +02:00

Closed #412 Remove buildarch mentions: the architecture is read at runtime 2026-10-02 01:08:23 +02:00

Closed #333 Trust the RFC 1918 ranges as proxies when TRUSTED_PROXIES is unset 2026-10-02 00:41:37 +02:00

Closed #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-10-02 00:21:36 +02:00

Closed #347 Recent events on a webhook page: 50 rows, relative times, size, processing time, delivery status 2026-10-01 23:50:01 +02:00

Closed #401 Profile page says "Account Type: Standard User" for the admin account 2026-10-01 23:24:42 +02:00

Closed #345 Commit the Alpine.js tarball in 3p/ instead of downloading it at build time 2026-10-01 22:44:42 +02:00

Closed #184 Nothing bounds username length, and an account with a multi-KB username cannot log in at all 2026-10-01 21:38:48 +02:00

Closed #363 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:14 +02:00

Closed #340 The container sets its data directory permissions itself before startup 2026-09-29 13:05:17 +02:00

Closed #359 After a restart under upaas: new admin password, and logging in with it returns 500 2026-09-29 12:58:45 +02:00

Closed #169 Restrict /s/* to GET and HEAD — it currently answers POST, PUT and DELETE with 200 2026-09-29 11:10:27 +02:00

Closed #193 Headers set before an uncommitted panic survive onto the recovered 500, including Set-Cookie 2026-09-29 10:30:27 +02:00

Closed #245 Default-block the public-unicast cloud metadata endpoints (Azure WireServer, Equinix Metal) 2026-09-29 10:22:08 +02:00

Closed #280 Archive writers are never closed at shutdown, so their -wal survives a clean stop 2026-09-29 08:30:25 +02:00

Closed #246 A delivery can carry Content-Type twice when the inbound event also supplied one 2026-09-29 07:11:56 +02:00

Closed #293 A pending delivery whose target was deleted is stranded forever 2026-09-29 06:48:20 +02:00

Closed #306 Circuit breaker half-open state busy-loops queued tasks with a DB write per spin 2026-09-29 05:48:22 +02:00

Closed #291 GetDB can open the same event database twice, and closing the loser drops the winner's file locks 2026-09-29 04:37:31 +02:00

Closed #282 make check fails on a fresh clone because script/check does not fetch the vendored assets 2026-09-29 04:30:15 +02:00

Closed #299 Startup recovery races the receiver and can deliver a fresh event twice 2026-09-29 04:12:15 +02:00

Closed #314 No index on the columns the sweeps, recovery and the event log filter by 2026-09-28 14:13:30 +02:00

Closed #307 WEBHOOKER_ENVIRONMENT defaults to dev, silently shipping insecure prod (no Secure cookies, CORS *) 2026-09-28 12:47:32 +02:00

Closed #323 Ready to run under upaas: prod branch, one data volume, env configuration, README section 2026-09-28 12:30:33 +02:00

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 #278 Changing the password neither regenerates the current session nor invalidates any other one 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 #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 #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 #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

92 Issues created by 2 users

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 #314 No index on the columns the sweeps, recovery and the event log filter by 2026-09-21 09:20:20 +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 #317 MAINTENANCE_MODE is a documented no-op configuration variable 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 #323 Ready to run under upaas: prod branch, one data volume, env configuration, README section 2026-09-24 17:58:59 +02:00

Opened #325 The event log's resubmit count reads every live event instead of using the resubmitted_from_id index 2026-09-28 13:36:41 +02:00

Opened #333 Trust the RFC 1918 ranges as proxies when TRUSTED_PROXIES is unset 2026-09-29 09:11:35 +02:00

Opened #340 The container sets its data directory permissions itself before startup 2026-09-29 11:07:46 +02:00

Opened #341 The SSRF guard lets a delivery reach [::], which is the host itself on Linux 2026-09-29 11:10:38 +02:00

Opened #344 make test needs up to 6.7 GiB of RAM (handlers and database tests under -race) 2026-09-29 11:11:27 +02:00

Opened #345 Commit the Alpine.js tarball in 3p/ instead of downloading it at build time 2026-09-29 11:21:49 +02:00

Opened #347 Recent events on a webhook page: 50 rows, relative times, size, processing time, delivery status 2026-09-29 11:33:06 +02:00

Opened #348 Log viewer: the caret does not collapse an event; clicking the row should toggle it 2026-09-29 11:34:51 +02:00

Opened #349 Event log: only the newest event expanded on load, and only the 50 most recent events 2026-09-29 11:36:00 +02:00

Opened #350 Webhook page: widen the entrypoints container by 50-100% so the URL does not wrap 2026-09-29 11:37:07 +02:00

Opened #359 After a restart under upaas: new admin password, and logging in with it returns 500 2026-09-29 12:11:40 +02:00

Opened #363 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:22 +02:00

Opened #366 Image built by upaas stamps version "unknown" into the binary 2026-10-01 20:38:56 +02:00

Opened #367 Routes: per-webhook page under /webhook/ (not /source/), its log at .../events, inbound URLs under /h/UUID or /ingest/UUID 2026-10-01 20:54:35 +02:00

Opened #368 Per-webhook page: statistics pane at the top (lifetime and per retention period) 2026-10-01 20:54:39 +02:00

Opened #369 Event bodies: per-event page, expandable recent events, full bodies under 32k, JSON formatted, scroll well over 200 lines 2026-10-01 20:55:44 +02:00

Opened #370 Targets on the webhook page: one + Add, then pick a target type, then that type's settings 2026-10-01 21:00:17 +02:00

Opened #371 The UI's Alpine.js never runs: the Content-Security-Policy forbids the eval it needs 2026-10-01 21:03:30 +02:00

Opened #372 Target list: successful and failed deliveries per target, in total and in the last 24h 2026-10-01 21:04:39 +02:00

Opened #373 New-webhook page: optional HTTP target URL and archive checkbox with pruning choice, creating those targets 2026-10-01 21:12:41 +02:00

Opened #374 Database targets: a Download button that exports the SQLite contents as gzipped JSON 2026-10-01 21:14:28 +02:00

Opened #375 Clickable things must look clickable: the entrypoint URL "copy" control, "+ Add", and every other one 2026-10-01 21:17:33 +02:00

Opened #376 Archive database filename includes the webhook name and the target name 2026-10-01 21:18:21 +02:00

Opened #377 Audit: missing basic functionality and information across the whole UI 2026-10-01 21:21:22 +02:00

Opened #379 Archive database target: rotation setting puts year-month, day or hour in the filename 2026-10-01 21:25:25 +02:00

Opened #381 Target and webhook edit pages lose what was typed when a save is rejected 2026-10-01 22:04:46 +02:00

Opened #384 Signing in does not return to the page that was asked for 2026-10-01 22:06:18 +02:00

Opened #383 No message after saving, deleting, activating or signing out 2026-10-01 22:06:18 +02:00

Opened #382 Error pages outside forms are bare text with no way back 2026-10-01 22:06:18 +02:00

Opened #385 A target paused by its circuit breaker is not shown as paused 2026-10-01 22:06:19 +02:00

Opened #386 Event log: attempts and deliveries show no time, event times have no zone, replays look like originals 2026-10-01 22:06:19 +02:00

Opened #387 Replay is offered for a deleted target, and its refusal gives advice that cannot work 2026-10-01 22:06:19 +02:00

Opened #388 Database and log target deliveries read "Status: — (no response)" 2026-10-01 22:06:19 +02:00

Opened #389 The event log never shows an event's request headers or the entrypoint it arrived at 2026-10-01 22:06:20 +02:00

Opened #390 Event log cannot show only the events whose delivery failed 2026-10-01 22:06:20 +02:00

Opened #391 At phone width the event log and the target list cut off statuses and controls 2026-10-01 22:06:21 +02:00

Opened #392 An entrypoint's description cannot be changed 2026-10-01 22:06:21 +02:00

Opened #396 Archive expiry is a raw duration typed by hand (720h) 2026-10-01 22:06:25 +02:00

Opened #394 Webhook list does not show which webhooks are receiving or failing 2026-10-01 22:06:25 +02:00

Opened #393 Entrypoints do not show when they last received an event 2026-10-01 22:06:25 +02:00

Opened #395 The slack target's retry setting is not shown in the target list 2026-10-01 22:06:25 +02:00

Opened #398 Refusing a private target address does not say how to allow it 2026-10-01 22:06:26 +02:00

Opened #399 The UI names the same things in different ways 2026-10-01 22:06:26 +02:00

Opened #400 Delete confirmations do not name the item or say what is lost 2026-10-01 22:06:26 +02:00

Opened #401 Profile page says "Account Type: Standard User" for the admin account 2026-10-01 22:06:26 +02:00

Opened #397 A database target does not show its archive file, size or last write 2026-10-01 22:06:26 +02:00

Opened #402 No page shows the server's settings 2026-10-01 22:06:27 +02:00

Opened #412 Remove buildarch mentions: the architecture is read at runtime 2026-10-02 00:44:08 +02:00

Opened #414 Make main and next green: make test fails in the Docker build, and its output is cut off before the failure 2026-10-02 02:26:36 +02:00

Opened #421 TODO.md says a docs-only commit replays from the layer cache, which is no longer true 2026-10-02 09:13:26 +02:00

Opened #431 The target toggle saves the whole row, so it can undo an edit of the same target 2026-10-02 12:59:48 +02:00

Opened #452 Tests outside the config package still read the developer's shell when they build a Config 2026-10-02 17:44:42 +02:00

Opened #455 The eventBodyQuery comment credits the soft-delete predicate for refusing a reaped event 2026-10-02 18:12:33 +02:00

Opened #459 The main database's open errors do not name the file 2026-10-02 18:29:55 +02:00

Opened #462 Six test-only gorm.Open calls still pass a bare gorm.Config 2026-10-02 18:54:20 +02:00

Opened #477 An http target's max_queue_size is stored and shown but nothing enforces it 2026-10-03 00:01:40 +02:00

Opened #493 yarn 1 prints a url.parse() deprecation warning in the js-deps stage 2026-10-03 05:47:47 +02:00

Opened #497 Merge main into next so the milestone PR merges again after 416 2026-10-03 14:16:27 +02:00

Opened #499 Recommendations for a clearer, simpler object and data model 2026-10-03 14:31:04 +02:00

Opened #500 The Redactor misses an echoed request line when the target URL has a query string but no path 2026-10-04 02:15:36 +02:00

Opened #504 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:31:07 +02:00

Opened #506 Test helpers are compiled into the shipped binary 2026-10-06 03:26:35 +02:00

Opened #507 Tests that fail at random under load 2026-10-06 06:06:39 +02:00

Opened #508 CI fails at bootstrap: the runner cannot install Go 2026-10-06 06:28:29 +02:00

Opened #511 Make next green: TestArchiveExport_Streams measures the shared heap and fails go test on noise 2026-10-06 09:04:50 +02:00

Opened #518 A # or ? in DATA_DIR makes every database open the same, shorter path 2026-10-13 04:46:37 +02:00

Opened #520 The README describes an upgrade path that does not exist before 1.0 2026-10-13 06:34:37 +02:00

Opened #522 Two code comments explain behaviour by what an earlier build left behind 2026-10-13 07:10:38 +02:00

Opened #525 The static image build links glibc's getaddrinfo and dlopen, which the Alpine runtime cannot satisfy 2026-10-13 09:58:00 +02:00

Opened #527 A clean stop cancels in-flight delivery attempts and records them as failed; fire-and-forget deliveries are lost to a restart 2026-10-13 11:32:24 +02:00

Opened #528 BIND_ADDRESS=0.0.0.0 binds IPv6 too; the README describes it as IPv4-only and distinct from :: 2026-10-13 11:32:24 +02:00

Opened #529 finished_at and archived_at are stored with Go's monotonic clock reading appended (m=+365.03) 2026-10-13 11:32:25 +02:00

Opened #530 CSP allows unsafe-inline scripts and styles and the README never says why 2026-10-13 11:32:25 +02:00

Opened #531 webhooker logs the entrypoint UUID at INFO although the README says to keep it out of logs 2026-10-13 11:35:27 +02:00

Opened #535 A comment in the middleware says the query logger writes client values into statements; it drops them 2026-10-15 10:49:38 +02:00

Opened #538 why is CGO being used? 2026-10-15 11:37:30 +02:00

Opened #539 Store a webhook's retention as a plain day count, 0 meaning forever 2026-10-15 11:57:18 +02:00

Opened #540 Store a target's number of delivery attempts, at least one, instead of its retries 2026-10-15 11:57:18 +02:00

Opened #541 Move the archive files into their own package 2026-10-15 11:57:19 +02:00

Opened #542 Use one recovery routine at start and on every sweep tick 2026-10-15 11:57:19 +02:00

Opened #543 Store a target's settings as columns instead of a per-type JSON string 2026-10-15 11:57:19 +02:00

Opened #544 Move storing an event and creating its deliveries from the handlers into the delivery engine 2026-10-15 11:57:20 +02:00

Opened #545 Build the binary without cgo 2026-10-15 11:57:39 +02:00

Opened #548 Sentry events can carry the entrypoint URL in the Referer header 2026-10-15 14:44:40 +02:00

2 Unresolved Conversations

Open #33 1.0/mvp 2026-10-16 00:57:27 +02:00

Open #212 Encrypt credential-bearing target config at rest in webhooker.db 2026-10-03 14:31:04 +02:00