2026-08-05 - 2026-08-12
Overview
21 Pull requests merged by 1 user
Merged
#116 Clarify web UI terminology, copy, and the entrypoint URL (closes #57)
Merged
#121 Mask the target URL in delivery errors, SSRF logs and log page data (closes #118)
Merged
#87 Rate-limit the public webhook receiver endpoint (closes #64)
Merged
#91 Enforce the body size limit before CSRF parses the form (closes #90)
Merged
#114 Mask target config on the source detail page (closes #113)
Merged
#96 Allow retention_days of 0 to mean retain forever (closes #79)
Merged
#105 Add inactivity-based session timeout (closes #66)
Merged
#92 Fail loudly on set-but-unparseable env config values (closes #80)
Merged
#104 Terminally fail retrying deliveries with a non-retry target type (closes #82)
Merged
#95 Evict archive writers on deletion and sweep idle archives (closes #89)
Merged
#100 Root background loops at context.Background() (closes #97)
Merged
#83 Add admin password change flow (closes #65)
Merged
#86 Update golangci-lint to v2.12.2 with canonical config
Merged
#84 Implement the database archiving target (closes #43)
Merged
#81 Refactor delivery targets to a Target interface (closes #77)
Merged
#78 Add per-webhook event retention reaper (closes #63)
Merged
#75 Add NoCache middleware for authenticated pages (closes #61)
Merged
#73 Validate Slack target URLs at creation time (closes #68)
Merged
#74 Keep the SSRF-safe transport in clientForConfig (closes #69)
Merged
#71 Wrap /user/{username} in RequireAuth middleware (closes #60)
Merged
#72 Raise HTTP WriteTimeout above the request middleware timeout (closes #62)
2 Pull requests proposed by 1 user
Proposed
#111 WIP: Milestone: delivery lifecycle, retention, config and session hardening
Proposed
#122 Gate forwarded-header trust behind trusted-proxy config (closes #88)
22 Issues closed from 2 users
Closed
#57 Clean up and clarify the web UI
Closed
#118 Slack webhook credential still leaks via delivery errors, SSRF logs, and the source_logs template data
Closed
#64 Rate-limit the public webhook receiver endpoint
Closed
#90 Enforce request body size limit before CSRF middleware parses the form
Closed
#113 Source detail page renders raw target config, exposing the Slack webhook URL credential
Closed
#79 RetentionDays cannot be set to 0 (retain forever) via the normal create path
Closed
#110 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR
Closed
#66 Add inactivity-based session timeout
Closed
#80 Config parsing should fail loudly on set-but-unparseable env values (envInt, etc.)
Closed
#82 Recovery skips orphaned retrying deliveries whose target type changed to a non-retry type
Closed
#89 Archive writer lifecycle: evict writers on webhook deletion and sweep idle archives
Closed
#97 CRITICAL: delivery engine and retention reaper both die ~15s after startup (fx OnStart context)
Closed
#65 Add an admin password change flow in the web UI
Closed
#43 configure db target type for archiving
Closed
#77 Refactor delivery targets to a Target interface
Closed
#63 Enforce per-webhook event retention (RetentionDays reaper)
Closed
#61 Set Cache-Control: no-store on authenticated pages
Closed
#70 Implement the log delivery target
Closed
#68 Validate Slack target URLs at creation time (SSRF parity with HTTP targets)
Closed
#69 Keep the SSRF-safe Transport in clientForConfig when a per-target timeout is set
Closed
#60 Wrap the /user/{username} route in RequireAuth middleware
Closed
#62 Reconcile HTTP WriteTimeout with the request middleware timeout
40 Issues created by 1 user
Opened
#60 Wrap the /user/{username} route in RequireAuth middleware
Opened
#61 Set Cache-Control: no-store on authenticated pages
Opened
#62 Reconcile HTTP WriteTimeout with the request middleware timeout
Opened
#63 Enforce per-webhook event retention (RetentionDays reaper)
Opened
#64 Rate-limit the public webhook receiver endpoint
Opened
#65 Add an admin password change flow in the web UI
Opened
#66 Add inactivity-based session timeout
Opened
#67 Optional inbound webhook HMAC signature verification
Opened
#68 Validate Slack target URLs at creation time (SSRF parity with HTTP targets)
Opened
#69 Keep the SSRF-safe Transport in clientForConfig when a per-target timeout is set
Opened
#70 Implement the log delivery target
Opened
#77 Refactor delivery targets to a Target interface
Opened
#79 RetentionDays cannot be set to 0 (retain forever) via the normal create path
Opened
#80 Config parsing should fail loudly on set-but-unparseable env values (envInt, etc.)
Opened
#82 Recovery skips orphaned retrying deliveries whose target type changed to a non-retry type
Opened
#85 Design: should delivery targets own their recovery/sweep loop, not just backoff?
Opened
#88 Gate forwarded-header trust behind trusted-proxy config in rate limiters
Opened
#89 Archive writer lifecycle: evict writers on webhook deletion and sweep idle archives
Opened
#90 Enforce request body size limit before CSRF middleware parses the form
Opened
#93 Follow-ups from the PR #91 review: body-limit docs and route-ordering test coverage
Opened
#94 Follow-ups from the PR #92 review: config test hygiene and env docs
Opened
#97 CRITICAL: delivery engine and retention reaper both die ~15s after startup (fx OnStart context)
Opened
#98 Deprecated gomodguard linter in the org-standard .golangci.yml (needs an upstream decision)
Opened
#99 Follow-ups from the PR #96 re-review: retention bound docs and untested normalisation
Opened
#101 Archive sweep repeats open/prune/close once per database target instead of once per webhook
Opened
#102 Shutdown hooks ignore their context and wg.Wait() unbounded
Opened
#103 Pin the pre-reopen close in archiveWriter.sweepExpired (unprotected connection-leak guard)
Opened
#106 script/lint uses the host golangci-lint and a shared cache, so lint results can be wrong in either direction
Opened
#107 Two remaining delivery terminal-state gaps: opaque failure and deletion-orphaned retries
Opened
#108 Session codec max-age still 30 days: bring securecookie codecs in line with the 7-day cap
Opened
#109 Run all linting in Docker via Dockerfile.lint + script/lint
Opened
#110 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR
Opened
#112 Decision: TODO.md Completed Steps guarantees a merge conflict on every unit landing on next
Opened
#113 Source detail page renders raw target config, exposing the Slack webhook URL credential
Opened
#115 HTTP target destination URL is rendered in full and can itself be a bearer credential
Opened
#117 Page {{define "title"}} blocks never render; every browser tab reads "Webhooker"
Opened
#118 Slack webhook credential still leaks via delivery errors, SSRF logs, and the source_logs template data
Opened
#119 CI can report success without running lint or tests, because script/cibuild replays a cached image
Opened
#120 No JS linting, so the styleguide REPO_POLICIES binds us to is unenforced
Opened
#123 renderTemplate streams to the ResponseWriter, so a mid-render template error ships a partial page
2 Unresolved Conversations
Open
#33
1.0/mvp
Open
#56
Move schema_migrations table creation into 000.sql with INTEGER version column