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 wrong: a database target's archive expiry is typed by hand as "never" or a raw duration such as 720h. That is true of both the add form (templates/source_detail.html) and the edit form (templates/target_edit.html). The target list shows the value back raw, as "Archive Expiry: 720h". Typing "30 days" is rejected with a parser error. Right beside it, the webhook's own retention is entered in days and shown as "7 days".
#373 already gives the new-webhook page a list of choices for archive pruning: never, 1h, 12h, 24h, 30d, 90d and 365d.
Definition of done:
Adding or editing a database target offers the same list of choices as 373 instead of a text field. The edit form starts on the target's stored value.
The list of choices is defined once and shared with 373.
The target list shows the expiry in plain units, for example "30 days", "12 hours" or "never".
Tests: each choice saves and is shown in plain units, and the edit form starts on the stored value.
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 wrong: a `database` target's archive expiry is typed by hand as "never" or a raw duration such as `720h`. That is true of both the add form (`templates/source_detail.html`) and the edit form (`templates/target_edit.html`). The target list shows the value back raw, as "Archive Expiry: 720h". Typing "30 days" is rejected with a parser error. Right beside it, the webhook's own retention is entered in days and shown as "7 days".
https://git.eeqj.de/sneak/webhooker/issues/373 already gives the new-webhook page a list of choices for archive pruning: never, 1h, 12h, 24h, 30d, 90d and 365d.
Definition of done:
- Adding or editing a `database` target offers the same list of choices as 373 instead of a text field. The edit form starts on the target's stored value.
- The list of choices is defined once and shared with 373.
- The target list shows the expiry in plain units, for example "30 days", "12 hours" or "never".
- Tests: each choice saves and is shown in plain units, and the edit form starts on the stored value.
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:26 +02:00
One list of archive pruning choices (never, 1h, 12h, 24h, 30d, 90d, 365d, with the stored values #476 uses), defined once and used by the new-webhook page, the add target form and the target edit form.
Adding or editing a database target offers that list instead of a text field. The edit form starts on the stored value, or on the submitted one after a refused save (#381). A stored value that is not one of the choices (set before this change) is shown as its own selected entry, so an edit does not silently change it; pre-1.0, nothing converts stored values.
The target list shows the expiry in plain units: "never", "12 hours", "30 days".
Tests: each choice saves and is shown in plain units; the edit form starts on the stored value.
Model: opus-5-5
Plan.
- One list of archive pruning choices (never, 1h, 12h, 24h, 30d, 90d, 365d, with the stored values https://git.eeqj.de/sneak/webhooker/pulls/476 uses), defined once and used by the new-webhook page, the add target form and the target edit form.
- Adding or editing a `database` target offers that list instead of a text field. The edit form starts on the stored value, or on the submitted one after a refused save (https://git.eeqj.de/sneak/webhooker/issues/381). A stored value that is not one of the choices (set before this change) is shown as its own selected entry, so an edit does not silently change it; pre-1.0, nothing converts stored values.
- The target list shows the expiry in plain units: "never", "12 hours", "30 days".
- Tests: each choice saves and is shown in plain units; the edit form starts on the stored value.
Model: opus-5-5
Done in #479. Adding or editing a database target now offers the new webhook page's archive expiry choices instead of a text field. The list is defined once and all three forms use it. The edit form starts on the stored expiry, and the target list shows it in plain units ("30 days", "12 hours", "never").
Judgement call: a stored expiry that is not one of the choices is listed first in the edit form under its stored value, such as 36h, so saving unchanged keeps it.
Unverified: #474 had not landed, so the edit form starting on the submitted value after a refused save waits on it.
Model: opus-5-5
Done in https://git.eeqj.de/sneak/webhooker/pulls/479. Adding or editing a `database` target now offers the new webhook page's archive expiry choices instead of a text field. The list is defined once and all three forms use it. The edit form starts on the stored expiry, and the target list shows it in plain units ("30 days", "12 hours", "never").
- Judgement call: a stored expiry that is not one of the choices is listed first in the edit form under its stored value, such as `36h`, so saving unchanged keeps it.
- Unverified: https://git.eeqj.de/sneak/webhooker/pulls/474 had not landed, so the edit form starting on the submitted value after a refused save waits on it.
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 wrong: a
databasetarget's archive expiry is typed by hand as "never" or a raw duration such as720h. That is true of both the add form (templates/source_detail.html) and the edit form (templates/target_edit.html). The target list shows the value back raw, as "Archive Expiry: 720h". Typing "30 days" is rejected with a parser error. Right beside it, the webhook's own retention is entered in days and shown as "7 days".#373 already gives the new-webhook page a list of choices for archive pruning: never, 1h, 12h, 24h, 30d, 90d and 365d.
Definition of done:
databasetarget offers the same list of choices as 373 instead of a text field. The edit form starts on the target's stored value.PRIORITY: from the owner's audit request of 1 October (#377), in the tier of #367 to #376.
Model: opus-5-5
Plan.
databasetarget offers that list instead of a text field. The edit form starts on the stored value, or on the submitted one after a refused save (#381). A stored value that is not one of the choices (set before this change) is shown as its own selected entry, so an edit does not silently change it; pre-1.0, nothing converts stored values.Model: opus-5-5
Done in #479. Adding or editing a
databasetarget now offers the new webhook page's archive expiry choices instead of a text field. The list is defined once and all three forms use it. The edit form starts on the stored expiry, and the target list shows it in plain units ("30 days", "12 hours", "never").36h, so saving unchanged keeps it.Model: opus-5-5