audit the whole app for stupid cases of missing functionality or basic things like this (like the stats panel at the top that i requested).
What is missing: the entrypoint list on the webhook page (templates/source_detail.html) shows each entrypoint's description, URL and active state, but not whether anything is using it. It shows no count of events received and no time of the last one, even though each event records its entrypoint (Event.EntrypointID). With several entrypoints, an operator cannot tell which senders are live before deactivating or deleting one.
Definition of done:
Each entrypoint shows when its last event arrived (relative, with the full UTC time on hover), or "never".
Each entrypoint shows how many events arrived through it within the webhook's retention period.
No full scan per page view: one query, grouped by entrypoint, over an index on the entrypoint and the time received. Pre-1.0, so any new index is added to the schema in place.
Tests: two entrypoints with different traffic show their own figures, and an unused one shows "never".
PRIORITY: from the owner's audit request of 1 October (#377), in the tier of #367 to #376.
Model: opus-5-5
Owner's request, https://git.eeqj.de/sneak/webhooker/issues/377 (chat, 2026-10-01):
> audit the whole app for stupid cases of missing functionality or basic things like this (like the stats panel at the top that i requested).
What is missing: the entrypoint list on the webhook page (`templates/source_detail.html`) shows each entrypoint's description, URL and active state, but not whether anything is using it. It shows no count of events received and no time of the last one, even though each event records its entrypoint (`Event.EntrypointID`). With several entrypoints, an operator cannot tell which senders are live before deactivating or deleting one.
Definition of done:
- Each entrypoint shows when its last event arrived (relative, with the full UTC time on hover), or "never".
- Each entrypoint shows how many events arrived through it within the webhook's retention period.
- No full scan per page view: one query, grouped by entrypoint, over an index on the entrypoint and the time received. Pre-1.0, so any new index is added to the schema in place.
- Tests: two entrypoints with different traffic show their own figures, and an unused one shows "never".
PRIORITY: from the owner's audit request of 1 October (https://git.eeqj.de/sneak/webhooker/issues/377), in the tier of https://git.eeqj.de/sneak/webhooker/issues/367 to https://git.eeqj.de/sneak/webhooker/issues/376.
Model: opus-5-5
clawbot
self-assigned this 2026-10-01 22:06:25 +02:00
Each entrypoint in the webhook page's entrypoint list shows when its last event arrived (relative, with the full UTC time on hover), or "never", and how many events arrived through it within the webhook's retention period.
One query per page, grouped by entrypoint (entrypoint_id, count, latest received_at), over a new index on (entrypoint_id, received_at) in the per-webhook event database, with deleted_at as #468 placed it. Pre-1.0: the index goes into the schema in place, nothing for older databases. A test checks SQLite's plan for the statement as GORM builds it.
Tests: two entrypoints with different traffic show their own figures, an unused one shows "never", and an event older than retention is not counted.
Uses the shared styles; stays inside the entrypoint list, beside the Edit control from #464.
Model: opus-5-5
Plan.
- Each entrypoint in the webhook page's entrypoint list shows when its last event arrived (relative, with the full UTC time on hover), or "never", and how many events arrived through it within the webhook's retention period.
- One query per page, grouped by entrypoint (`entrypoint_id`, count, latest `received_at`), over a new index on `(entrypoint_id, received_at)` in the per-webhook event database, with `deleted_at` as https://git.eeqj.de/sneak/webhooker/pulls/468 placed it. Pre-1.0: the index goes into the schema in place, nothing for older databases. A test checks SQLite's plan for the statement as GORM builds it.
- Tests: two entrypoints with different traffic show their own figures, an unused one shows "never", and an event older than retention is not counted.
- Uses the shared styles; stays inside the entrypoint list, beside the Edit control from https://git.eeqj.de/sneak/webhooker/pulls/464.
Model: opus-5-5
Built in #470. Each entrypoint on the webhook page now shows when its last event arrived (relative, full UTC time on hover) or "never", and how many events arrived through it within the webhook's retention period. Both come from one query per page over a new events index on entrypoint_id, deleted_at, created_at, added to the schema in place.
Judgement call: the window starts at the reaper's own retention cutoff, so an entrypoint whose only events are past it but not yet removed by the next retention sweep shows "never" and 0.
Judgement call: if the figures cannot be read the page answers 500, as it already does for the recent events.
The plan's received_at is the events' created_at; there is no other column.
Model: opus-5-5
Built in https://git.eeqj.de/sneak/webhooker/pulls/470. Each entrypoint on the webhook page now shows when its last event arrived (relative, full UTC time on hover) or "never", and how many events arrived through it within the webhook's retention period. Both come from one query per page over a new events index on `entrypoint_id`, `deleted_at`, `created_at`, added to the schema in place.
- Judgement call: the window starts at the reaper's own retention cutoff, so an entrypoint whose only events are past it but not yet removed by the next retention sweep shows "never" and 0.
- Judgement call: if the figures cannot be read the page answers 500, as it already does for the recent events.
- The plan's `received_at` is the events' `created_at`; there is no other column.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Owner's request, #377 (chat, 2026-10-01):
What is missing: the entrypoint list on the webhook page (
templates/source_detail.html) shows each entrypoint's description, URL and active state, but not whether anything is using it. It shows no count of events received and no time of the last one, even though each event records its entrypoint (Event.EntrypointID). With several entrypoints, an operator cannot tell which senders are live before deactivating or deleting one.Definition of done:
PRIORITY: from the owner's audit request of 1 October (#377), in the tier of #367 to #376.
Model: opus-5-5
Plan.
entrypoint_id, count, latestreceived_at), over a new index on(entrypoint_id, received_at)in the per-webhook event database, withdeleted_atas #468 placed it. Pre-1.0: the index goes into the schema in place, nothing for older databases. A test checks SQLite's plan for the statement as GORM builds it.Model: opus-5-5
Built in #470. Each entrypoint on the webhook page now shows when its last event arrived (relative, full UTC time on hover) or "never", and how many events arrived through it within the webhook's retention period. Both come from one query per page over a new events index on
entrypoint_id,deleted_at,created_at, added to the schema in place.received_atis the events'created_at; there is no other column.Model: opus-5-5