Describe what is kept on the data volume, and SQLite's upkeep
Configuration says what fetch_geonames leaves behind and when postulo.W003
is raised, and gains a section on looking after a SQLite database with
manage.py compact_database. Files and Backups name the .partial file an
export is built under and the gzip level of a backup.
Refs postulo/postulo#1124
Refs postulo/postulo#1125
Refs postulo/postulo#1127
Refs postulo/postulo#1128
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Say how a killed backup, a failing sync and a silent worker behave
Backups gain the .partial file an archive is written under and the ten-minute
claim of a running backup; Background work says when an interrupted errand is
marked failed and what its page says while no worker is seen. Syncs gain the
back-off of a failing connection, for the person and for a plugin author, and
what add_reminder returns.
Refs postulo/postulo#1123
Refs postulo/postulo#1131
Refs postulo/postulo#1122
Refs postulo/postulo#1162
Refs postulo/postulo#1164
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Writing a plugin names MessagingService, MessagingServicePlugin and messaging_service_of
and says the kind registers in postulo.messaging_services. Refs postulo/postulo#682 #672#665#658#656#333
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Installing, Backups: source builds have their own image name, a PostgreSQL restore is all or nothing
Installing-Postulo: the install checks out the latest release tag; a source build is the base
file plus the build override and is tagged postulo:local, so one upgrade path per kind of
install and a pull can never replace a source build. Backups-and-your-data: on PostgreSQL a
restore runs in one transaction that stops at the first error and leaves the database as it was.
Refs postulo/postulo#403postulo/postulo#477
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Backups and your data: the archive's new contents, the spreadsheet import's rules, restore onto a fresh database, the key check
Backups-and-your-data: reminders about no application, the files an application went out with
and where a sent document went travel in the archive, an older archive restores without them,
and every record is built only from the fields Postulo writes. A spreadsheet status is matched as
whole words, a row with no status is decided by its date, a listing keeps its deadline and tags.
Expired export archives are also deleted by the export page. Restore counts a never-migrated
database as empty and counts every secret under the field key. Accounts-and-invitations: what an
account deletion removes from disk.
Refs postulo/postulo#467postulo/postulo#468postulo/postulo#471postulo/postulo#394
Refs postulo/postulo#334postulo/postulo#469postulo/postulo#354postulo/postulo#476
Refs postulo/postulo#481postulo/postulo#539postulo/postulo#355
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Say how an instance defines identifier schemes of its own
Configuration: the JSON, the pattern language and its budget, what is refused and how it
is said, what deleting or changing a scheme does to what is stored, where the text is
kept. Writing a plugin: what a reader of the registry now meets. Design: a dialog with a
page behind it, and a box of code. Backups, the API, Your career record and Tracking
applications: what happens to identifiers of a kind this instance lacks.
Refs postulo/postulo#311
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say how a postal address is checked against its country
Your career record: a section on the address rows -- what is refused, that a street is
never required and a town and a country are enough, how a postcode is put right, the
forces and territory forms, and that a stored or imported address is marked and left
alone. The same said shortly in Configuration, Getting started and Backups; the
address-line grid in Design; and in Writing a plugin, what postal-rules governs and
that a word shared with Postulo needs a context.
Refs postulo/postulo#306
Refs postulo/postulo#635
Refs postulo/postulo#458
Refs postulo/postulo#651
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A language code is a BCP 47 tag in its canonical form, said where one is met
Postulo writes `pt-BR` wherever it writes a language, and Serbian is `sr-Cyrl`.
The pages that show or describe a code say so where a reader meets one: the
webhook payload, the API's `language` and `record_language`, what a notifier
and a store are handed, and the catalogue directories of a plugin, which are
gettext's names and the one place an underscore is written.
*Writing a plugin* names the four calls that are on the surface for it:
`language_tag`, `is_language_tag`, `language_match` and `language_matches`,
Postulo's own writer, shape check and comparison, so that a plugin does not
grow its own way of lower-casing a code.
Also: what an older archive's codes become when it is put back, that a
language menu keeps a language it does not list, that Django's admin says its
own language in lower case, and the working catalogues in the design rules.
Refs postulo/postulo#337
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say that each CV chooses which of your details it prints
A menu per kind on a CV's settings, the default following Your details
and a choice pinning a row; the form of address and pronouns printed
only where a CV says so; PATCH /cvs/{id} in the API; and what an archive
carries of the choice.
Refs postulo/postulo#308
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say what a fetch refuses, how long it waits, and what an import does with a username
Addresses that carry a private one are refused; a page, its robots.txt
and a logo are held to a whole-download time as well as a size; only
gzip and deflate are unpacked; an archive's username is taken only when
the rules allow it; and Python 3.12.4 is the oldest Python.
Refs postulo/postulo#321
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say how a page with no standard is read, and how a site learns from your corrections
Capturing postings says what the fallback reads now (a title line split
only where the page vouches for a part, a salary and a closing date
after the words the page's own language uses) and gains *Sites you
capture from often*: where a correction is remembered, what teaches and
what does not, how a field says it came from a remembered place, how a
place forgets itself and how you forget it. The capture API documents
`hinted` on a preview and that corrections sent with a capture teach
the same way. Writing a plugin says what the fallback source does, that
remembered places go only to Postulo's own sources, and names the two
new names on the surface. Backups says the export carries them.
Refs postulo/postulo#267
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say why an application ended, who put it forward, and how two records become one
Tracking applications gains four sections: why an application ended
(the reason, added then or later, and the last stage read from the
timeline), who referred you and the agency it went through, the notice
of possible duplicates, and merging two companies or two contacts, with
what moves, what the kept record takes and what cannot be undone.
Insights gains the widget *Where and why applications end* and the two
tables *By referrer* and *By agency* under *Where they came from*.
Reports lists the four columns the spreadsheet gains, and why the page
and the PDF do not. The API page names the new fields on an
application, `end_reason` on the status call, and the two ids a new
application may carry. Backups says the archive now holds the people
recorded at no company.
Your career record stops pinning the archive's format number, which
#236 and #239 have both moved since #181 wrote it down.
Refs postulo/postulo#239
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say how one person's own record is taken out as a file and read back
Your career record gains the section on the candidate file: what it
holds and leaves out, the two steps of putting one back, the rule that
it merges and never replaces, what makes two entries the same entry,
and what it refuses. Its two headings that repeated the Europass
section's are worded apart, so each keeps its own anchor.
Backups and your data points to it from taking everything out, from
bringing a career record in, and from putting an archive back, which
that page does not read. Hardening lists the file's 1 MB cap beside
the other upload caps, and Roadmap keeps the whole-archive importer as
still wanted.
Refs postulo/postulo#181
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Say what losing the secret key costs, and how to restore without breaking things
The backup page said losing POSTULO_SECRET_KEY "will not lose your data, but it
will log everyone out", which was half of it. Unless POSTULO_FIELD_KEY is set,
that key is what every stored connection credential and the Web Push signing key
are derived from, so losing it leaves the rows in place with passwords and tokens
in them that nothing can read. The configuration page has said so for a while;
the page somebody reads while planning their backups contradicted it.
Restoring was worse. The steps said to restore onto an empty instance and run
nothing else, and then gave a uv run command — so in a container the only route
left was exec into the running web container, with gunicorn and the scheduler live
while the database underneath them is overwritten. There is now a container
section that stops the services first and uses compose run with
POSTULO_SKIP_MIGRATE=1, an explanation of what the new refusal in `restore` can
and cannot see, and an afterwards section covering the key warning and prune_media
for the files an archive never carried and a restore never deletes.
Restoring by hand was missing the step that matters most under WAL: the -wal and
-shm beside the database belong to the file that was there, and leaving them next
to one you have just swapped in means SQLite replays a log written against a
different database. The plugins directory joins the database and the media in
everything here that lists what has to be copied together.
Refs postulo/postulo#234
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>