Efficiency and reliability audit of 2026-10-30: index #1108
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#1108
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The efficiency and reliability audit of 2026-10-30: everything in Postulo and its plugins that could use fewer resources (server, CI and build, the developer's machine, the browser), be more reliable, or make the work easier, with no loss of features and none of accessibility. Not a security review.
Three scouts read the core, the CI and image, the front end and the plugins on 2026-10-30 and proposed 104 candidates. Each was then verified against the code, measured where that was cheap, and checked against the tracker. The maintainer settled the 20 decisions that were theirs on 2026-10-31; each issue says what was decided. Every issue carries the
performancelabel.Filed
PRAGMA optimizeand no way to compact the fileuv runafteruv sync --no-group e2einstalls the browser group againcompileparses every catalogue twice and builds each .mo by repeated byte concatenationwiki_site.py stale --strictor builds the translated pages, so a moved English source is noticed only by handproposejob has a job-levelif, which this runner turns into a failuregit add -Acommits 30 MBadd_reminderrewrites an unchanged entry on every sync, so the dashboard's figures are worked out again each hourextract --checkfinds the catalogue sets 29 times, andextractrewrites all 2,352 catalogues even when none changedprimary_forignores rows already prefetched, so a sync pays two queries per contactAlready tracked
Refuted
npm citakes about 4 s; a cache or an axe-only install saves nothing worth having.pytest -n 2without loadgroup ran green until #1085; the only out-of-memory kill was with three workers.mainuv is pinned by version and sha256 in every plugin.ifwithoutneeds:works on this runner.node:22-bookwormwith--lockedon the server'smain.messages_tool.selected()from the pinned core (#347).Recorded, not filed
Already good, so the next audit need not look again
.part; file deletes after commit; a sweep that refuses to delete most of the store; retention that keeps what the offsite copy lacks; SQLite in WAL with IMMEDIATE and a 20 s timeout; a bounded rotating log; everything else pruned; no naive datetimes.--durations; sign-in by cookie; the long walks first; thestepmarker; uv, zizmor and pip-audit pinned; the multi-stage Dockerfile; the dev image waits for CI.Retry-Afterhonoured; postulo-mcp one call per tool; postulo-imap fetches in batches and marks mail with a keyword; postulo-dav writes only on a matching ETag; postulo-apprise caps its deadlines; postulo-francetravail caches its tables.Checked against
mainatdaee30b15(2026-10-30).PRAGMA optimizeand no way to compact the file #1128uv runafteruv sync --no-group e2einstalls the browser group again #1135compileparses every catalogue twice and builds each .mo by repeated byte concatenation #1145wiki_site.py stale --strictor builds the translated pages, so a moved English source is noticed only by hand #1147proposejob has a job-levelif, which this runner turns into a failure #1159git add -Acommits 30 MB #1161add_reminderrewrites an unchanged entry on every sync, so the dashboard's figures are worked out again each hour #1164extract --checkfinds the catalogue sets 29 times, andextractrewrites all 2,352 catalogues even when none changed #1169primary_forignores rows already prefetched, so a sync pays two queries per contact #1171