docs/PLAN.md has not been revised since before 0.3.0 and now says untrue things #255
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#255
Loading…
Add table
Add a link
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?
docs/PLAN.mdcalls itself "a living document, revised as milestones land and assumptionsmeet reality". Its last revision is
b3b7adfa1, 2026-09-09 — before the 0.2.0 release,before 0.3.0 and its 107 issues, before the wiki moved out, before the audit. A plan that
is a week behind is not a plan, it is a record of what somebody used to intend, and this
one is the document that explains why the code is shaped the way it is. That is the part
nobody can reconstruct from the repository, which is exactly why it has to be kept true.
Concretely, what is wrong now:
The status line and the milestone tables
progress". 0.2.0 was released 2026-09-07 and 0.3.0 on 2026-09-16.
milestones are closed in Forgejo — 72 and 107 issues.
promised for 0.3.0 against what 0.3.0 actually was: the row says right-to-left layout, the
languages of Africa, parent and child companies, and reports on the regularity of a search,
and the African catalogues did not land there. The numbered table should say what each
milestone holds, or stop restating the tracker and point at it — the banner already says
the tracker is the authority.
Section 4, the repository layout
browser,builtin,email,email_addresses,employer_structure,europass,identifiers,localstore,own_mail,phone_numbers,postal_rules,repositories,smtp,social_profiles,websites. The tree names four of them.notifications/is missing from the tree, and it is not a small app.docs/is listed as holdingINSTALL.md, which does not exist; the directory holdsPLAN.md,PLUGINS.md,THREAT-MODEL.mdandTRANSLATING.md.THREAT-MODEL.mdis theone worth naming, given how much of 0.3.0 answered to it.
so did the plugins that live outside —
postulo-imap,-apprise,-dav,-paperless,-mcp, the two browser extensions,postulo-helloworldandpostulo-templates. A readerof the layout section has no way to learn any of that exists.
Section 9, the open assumptions
django_tasks_dbis in
INSTALLED_APPS,TASKSnames the database backend,core/scheduler.pyholds thelease and the heartbeat, and
db_workeris enough of a fixture thatconfig/sqlite.pyanddocuments/views.pyboth reason about not blocking it. The thing the assumption said tore-check when something queued work has happened; the entry should record the answer.
every catalogue complete, none read by a speaker. Since 2026-09-16 that review has a place
to happen: Weblate at translate.tiagoagueda.com, 21 components, pulling read-only from
Forgejo. That belongs in the plan, and so does the consequence the assumption did not
foresee: translations now accumulate somewhere that is not the repository, and somebody has
to bring them back.
draft.What would keep it true
Revising it once now leaves it a week stale again by 0.5.0. Two candidates worth choosing
between while doing the revision:
CONTRIBUTING.md, beside the READMEand wiki status lines that already get updated at a tag. The plan's own banner is the same
kind of line.
which Forgejo already answers and answers correctly. If they went, what remains — mission,
product decisions, stack, layout, data model, plugin architecture, assumptions — goes stale
slowly and for real reasons, which is the kind of staleness a revision can catch.
Related: #254, which is about the same failure in the other direction — the changelog says
too much because nothing decided what it was for.
Notice which parts went stale
Every error listed above is in a part of the document that is derivable from the
repository: seven plugins where there are fifteen, a missing
notifications/, anINSTALL.mdthat does not exist, a wiki and eight sibling repositories that are notmentioned. Sections 1, 2, 6 and 7 — mission, product decisions, self-hosting, plugin
architecture — are the parts a person has to write, and they did not rot.
That is the useful pattern here. Revising section 4 by hand fixes it until the sixteenth
plugin lands, and then it is wrong again, silently, and nobody finds out for a week.
This project already knows what to do about that.
tests/test_changelog.pyguards theshape of a file nobody would otherwise check, and
tests/test_stylesheet.pyfails when thecommitted CSS goes stale against its source. The same move applies:
src/postulo/plugins/and fails when section 4's list is not the set ondisk;
docs/.Small tests, and they turn "revise the plan" from a recurring chore into a one-off.
Where a package might come in, and why it is the weaker half
django-extensionsshipsgraph_models, which renders the model graph from the ORM. It isthe obvious suggestion for section 5 (Data model) — and on inspection PLAN.md has no
diagram at all today, so this would be adding something rather than automating something.
That makes it a real but separate proposal: if section 5 would be clearer with a generated
diagram,
graph_modelsproduces one and it never goes stale. If it would not, the packageearns nothing here, because everything else it offers (
shell_plus,show_urls,runserver_plus) is developer convenience with no bearing on this issue.Recommendation: fix the prose, and add the three tests. Treat the diagram as its own
decision, and do not add a dependency for it unless section 5 actually wants one.