Configuration
Tiago Águeda edited this page 2026-09-24 19:45:43 +02:00

Page revisions

20 Commits

Author SHA1 Message Date
4a169ac203
Document where the map's city table lives, and how the container gets it 2026-09-24 19:45:43 +02:00
4efa789f60
Configuration, logs and troubleshooting: request ids, POSTULO_LOG_FORMAT, the start-up checks
Refs postulo/postulo#233

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 15:51:02 +02:00
d9045d28ec
Webhooks: the request, the events, verifying the signature, a sample receiver
Refs postulo/postulo#240

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 15:26:23 +02:00
7cd6bd1648
Deadlines, closing dates, and reminders that can be changed
The calendar draws four kinds of entry now and the key along the top is
also the filter; the diary file carries deadlines and closing dates as
all-day entries. A listing you are considering can tell you before it
closes, under Settings. A reminder can be put off, edited or deleted,
from its row and from the API — which is the first and only thing the
API deletes, so the scope table says which is which (#238).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 13:47:00 +02:00
3c45357d65
Say that a worker can do the slow things, and how to run one
Refs postulo/postulo#247

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 14:30:42 +02:00
485c096f1f
Document the opt-in update check
Refs postulo/postulo#272

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 12:50:46 +02:00
6409fa3c56
Say the offered-languages list carries flags now
Refs postulo/postulo#208

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 12:17:02 +02:00
b814e6b839
Say how a plugin asks for the person, and name the Test bound
Refs postulo/postulo#232

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 10:58:16 +02:00
705adf4886
Name the proxy: only this host is trusted by default now
Refs postulo/postulo#232

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 10:51:56 +02:00
db090b0722
Say how the container's web server is told to run
Nothing in the wiki mentioned gunicorn, and the image has just acquired an
opinion about it that an operator may well want to change: two minutes for a
request rather than gunicorn's thirty seconds, because thirty is a budget for a
page and not for drawing a PDF on a small machine, and a worker retired every
five hundred requests so that a process answering one person's instance does not
run for months.

GUNICORN_CMD_ARGS is the one lever over any of that, so the page says what it
holds by default, that setting it replaces the whole string rather than adding
to it, and which flags live in the image's command instead and are therefore not
affected. It also answers the question an operator asks next, which is whether
more workers would help: they would not, and what actually keeps one slow
request from blocking the others is that the slow views no longer hold the
database while they work.

Closes #220

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:48:55 +02:00
b6fa8c0488
Say how to notice that the scheduler has stopped
The scheduler fails quietly: nothing errors, reminders simply stop arriving, and
the first person to find out is the one who missed a deadline. It now writes the
time of each finished pass where both its own container healthcheck and the
metrics endpoint in the web container can read it, so *Health, metrics and logs*
gains the heartbeat, the two new numbers beside it, and three alerting rules --
one for the loop having stopped, one for it running but not getting through, and
one for deliveries that have been failing for an hour. The reminder count there
also changed meaning: it was every reminder anybody had ever set and not done,
which grows because the instance is being used and so could not be alerted on.

Refs postulo/postulo#221

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:15:14 +02:00
268278ee79
The capture rate limit counts fetches, on the form and on the API alike
POSTULO_CAPTURE_RATE was described as bounding "captures, per account", and until now it
bounded the capture form and nothing else -- so the page that documents the capture API
said nothing about a limit that did not apply to it. It applies now, and what it counts
is the fetch: a capture sent without html spends it, a capture that brings its own page
does not and answers to POSTULO_API_RATE as before. That distinction is the thing a
client author has to know, so it is written where they are reading: in the capture
section, and again beside the other statuses, where 429 was missing entirely.

Refs postulo/postulo#194

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 10:00:22 +02:00
55fd912bda
Configuration: the scheduler on PostgreSQL
compose.postgres.yml now carries a scheduler of its own, so a PostgreSQL
instance no longer has to go without reminders, gone-quiet notices, store
copies and syncs. The commands here named only the SQLite file, which would
have started a scheduler reading a database that is not the one the instance
uses. (#219)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 08:50:27 +02:00
cce3ba6128
Configuration, Writing a plugin: the Browser notifier and form_attributes()
Configuration gains "In the browser" under Notifications: the two ways a
browser notification arrives, which third party the push way involves and
what it can and cannot read, what the notifier needs (HTTPS, scripts,
outbound HTTPS, the scheduler), and why rotating the field key ends every
subscription. Writing a plugin documents the optional form_attributes()
method, and why a plugin still cannot ship JavaScript of its own.

Refs postulo/postulo#209

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 21:09:31 +02:00
56894773ed
Configuration: how a SQLite file is opened, and the files beside it
Refs postulo/postulo#206

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 17:39:04 +02:00
d95b27d240
Document the whole API surface: every call, the machine endpoints, the plugin API
The API named every call, but the scope each needs lived in prose, and
the discard reasons and what /me answers were not written anywhere. It
gains both, and one list of all 39 calls with method, path and scope,
generated from the API's own routers.

/healthz, /metrics and /logs answer machines about the instance and
were only rows in Configuration. Health, metrics and logs says what
each returns, how it is switched on and guarded, the rate limit, the
parameters /logs takes, and every metric with its labels.

The plugin guide was postulo's docs/PLUGINS.md and never reached the
wiki. It is Writing a plugin now, opening with every kind of plugin,
its entry-point group and the interface it satisfies, and carrying a
reference of all 37 names postulo.plugins.api promises -- eight of
which the guide had never named. It also says plainly that a
notifier's Notification, and the client's DestinationRefused, are used
from outside the surface today.

The sidebar gains a Building on it group for the API and the plugin
guide, and the three pages that linked to docs/PLUGINS.md link here.
postulo's tests/test_wiki_surface.py now reads these three pages
against the code.

Refs postulo/postulo#170

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 14:36:50 +02:00
2d4c0c70de
Take the pages over from postulo/wiki, which this repository now replaces
Until now this was a copy of postulo/wiki, refreshed by postulo's
scripts/publish-wiki.sh whenever somebody remembered to run it. The last
time was 5 September (postulo@9645ee1). This brings it to postulo@b6cfb8f7:

- the four pages that never arrived: Accessibility, Hardening, Listings
  and Reports;
- the seventeen that had changed since;
- the images, which the script never copied because it copied *.md and
  nothing else, so Home has shown its logo and its Buy me a coffee button
  broken since the day they were added.

Nothing here was lost: every earlier commit is a publish, and the pages
they left matched postulo/wiki at 9645ee1 exactly.

From here pages are written in this repository and nowhere else.

Refs postulo/postulo#169

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 13:55:38 +02:00
64680b440f
Update wiki from postulo@ad6c142 2026-09-05 12:57:27 +02:00
8587879b04
Update wiki from postulo@e19350f 2026-09-04 20:35:10 +02:00
ef61de01eb
Update wiki from postulo@036d3d3 2026-09-04 19:54:11 +02:00