Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58ccb73ccb |
@@ -5,12 +5,14 @@ One issue per unit of work, and one branch and one PR per issue:
|
|||||||
- make sure a tracked issue exists with a definition of done
|
- make sure a tracked issue exists with a definition of done
|
||||||
- branch from `next`, never from `main`
|
- branch from `next`, never from `main`
|
||||||
- do the work, then open a PR with base `next`, never `main`
|
- do the work, then open a PR with base `next`, never `main`
|
||||||
- pass an independent review; the manager then squash-merges into `next`
|
- pass an independent review
|
||||||
|
- the repository manager, the role that merges every PR, then squash-merges it
|
||||||
|
into `next`
|
||||||
- push; nothing stays local-only
|
- push; nothing stays local-only
|
||||||
|
|
||||||
`next` is the branch for the next milestone. It must stay green and mergeable
|
`next` is the branch for the next milestone. It must stay green and mergeable
|
||||||
into `main` at all times. One PR from `next` into `main` accumulates the
|
into `main` at all times. A milestone's work reaches `main` through one PR from
|
||||||
milestone. Releases are cut from `main` separately.
|
`next`. Cutting a release from `main` is a separate step after that.
|
||||||
|
|
||||||
The tracker (https://git.eeqj.de/sneak/webhooker/issues) records what is done
|
The tracker (https://git.eeqj.de/sneak/webhooker/issues) records what is done
|
||||||
and what is under way. This file keeps no list of either.
|
and what is under way. This file keeps no list of either.
|
||||||
@@ -21,22 +23,25 @@ What is still open for 1.0.0 is in its milestone
|
|||||||
(https://git.eeqj.de/sneak/webhooker/milestone/9). `v1.0.0` is not tagged. Only
|
(https://git.eeqj.de/sneak/webhooker/milestone/9). `v1.0.0` is not tagged. Only
|
||||||
@sneak tags it.
|
@sneak tags it.
|
||||||
|
|
||||||
Delivery is at least once by design. A send whose result row does not land is
|
Delivery is at least once by design. When webhooker cannot record the outcome of
|
||||||
sent again, so a receiver can see a duplicate. The alternative is a silent lost
|
a delivery, it sends that delivery again. The target can then receive the same
|
||||||
delivery. The README says so under How it works. It is not a defect to re-file.
|
event twice. The alternative is a lost delivery that nothing reports. The README
|
||||||
|
says so under How it works. Such a duplicate is not a defect to re-file.
|
||||||
|
|
||||||
# Next Step
|
# Next Step
|
||||||
|
|
||||||
@sneak runs webhooker in limited production, then tags `v1.0.0`. Merging `next`
|
@sneak runs webhooker in limited production, then tags `v1.0.0`. Merging `next`
|
||||||
into `main` is a separate act from tagging and waits on neither. `next` is kept
|
into `main` is a separate act. It waits on neither the production run nor the
|
||||||
mergeable at all times; that is the point of the branch.
|
tag. `next` is kept mergeable at all times; that is the point of the branch.
|
||||||
|
|
||||||
# Future Steps
|
# Future Steps
|
||||||
|
|
||||||
- Per-webhook rate limits, set in the web UI and enforced in the receiver. Today
|
- Per-webhook rate limits, set in the web UI and enforced at the entrypoint.
|
||||||
`RECEIVER_RATE_LIMIT` sets one limit for every entrypoint on the server.
|
Today `RECEIVER_RATE_LIMIT` is the only setting. It is how many requests per
|
||||||
- API key authentication for programmatic access. The `APIKey` table exists, but
|
minute one client address may send to one entrypoint. The same address is also
|
||||||
nothing creates a key and nothing checks one.
|
capped at ten times that across all entrypoints together.
|
||||||
|
- API key authentication for programmatic access. The `APIKey` model and its
|
||||||
|
`api_keys` table exist. Nothing creates a key and nothing checks one.
|
||||||
- REST API v1. `/api/v1` is mounted with no routes today.
|
- REST API v1. `/api/v1` is mounted with no routes today.
|
||||||
- CRUD for webhooks, entrypoints and targets
|
- CRUD for webhooks, entrypoints and targets
|
||||||
- event viewing and filtering endpoints
|
- event viewing and filtering endpoints
|
||||||
@@ -48,21 +53,22 @@ mergeable at all times; that is the point of the branch.
|
|||||||
each target's deliveries. The event log shows every attempt's duration.
|
each target's deliveries. The event log shows every attempt's duration.
|
||||||
`/metrics` carries server-wide counts and delivery durations.
|
`/metrics` carries server-wide counts and delivery durations.
|
||||||
- A remember-me option at login. Today every session survives a browser restart.
|
- A remember-me option at login. Today every session survives a browser restart.
|
||||||
It lasts up to 7 days, and ends sooner after `SESSION_IDLE_TIMEOUT` (default
|
It lasts up to 7 days. It ends sooner after `SESSION_IDLE_TIMEOUT` (default 24
|
||||||
24 hours) without use.
|
hours) without use.
|
||||||
- Password reset over the web for a forgotten password. Today a signed-in user
|
- Password reset over the web for a forgotten password. Today a signed-in user
|
||||||
can change their password, and a lost password is reset from the console with
|
can change their password. A lost password is reset from the console with
|
||||||
`webhooker resetpw` (https://git.eeqj.de/sneak/webhooker/issues/208).
|
`webhooker resetpw` (https://git.eeqj.de/sneak/webhooker/issues/208).
|
||||||
- Later, nice to have
|
- Later, nice to have
|
||||||
- email delivery target type
|
- email delivery target type
|
||||||
- SNS and S3 delivery targets
|
- SNS and S3 delivery targets
|
||||||
- data transformations, such as a configurable Slack message format; the
|
- data transformations, such as a configurable Slack message format. The
|
||||||
Slack target sends one fixed format today
|
Slack target sends one fixed format today.
|
||||||
- JSONL file delivery with periodic S3 upload. Today the `database` target
|
- JSONL file delivery with periodic S3 upload. Today the `database` target
|
||||||
archives events to SQLite files, rotated hourly, daily or monthly if set,
|
archives events to SQLite files. A target can rotate those files hourly,
|
||||||
and the webhook page offers them as one gzipped JSON download.
|
daily or monthly. The webhook page offers them as one gzipped JSON
|
||||||
|
download.
|
||||||
- webhook event search, and filtering beyond the event log's failed and
|
- webhook event search, and filtering beyond the event log's failed and
|
||||||
pending views
|
pending views
|
||||||
- multi-user with role-based access control. Today each webhook belongs to
|
- multi-user with role-based access control. Today each webhook belongs to
|
||||||
one account, but only the account made at first boot exists and there is
|
one account. Only the account made at first boot exists. There is no way
|
||||||
no way to add another.
|
to add another.
|
||||||
|
|||||||
Reference in New Issue
Block a user