Repository navigation
v0.15.0
Thirteen pull requests since v0.14.0, and the repository went public along the way.
| CI | 22m50s → ~2m30s |
render.py |
20,556 lines → a package of 19 modules, byte-identical output |
| vocabulary | no Entity anywhere; /api/record, no redirect |
| docs | 12,953 lines of archive retired, 146 folded into the live docs |
| corpus | 4 of 6 rungs → all six, with cycles and a promotion chain |
Three data-loss defects fixed
Each found by measurement rather than by reading:
_merge_bodydropped one of two edits beginning on the same line and answeredmerged. 48% of same-start pairs lost a line — half of them the line already in git, so a colleague's committed sentence was reverted with nothing shown. It refuses now.- Every HTTP write answered
200with no way to say the commit had not left the instance.pushedwas set honestly and read by exactly one caller in the application. - The deck's title slide printed the cycle's whole body where it meant the
goalfield, so an eleven-slide deck printed on twelve sheets.
Two performance fixes, both invisible until something measured them
Environment.from_stringrecompiled fourteen Jinja templates per record — a 479-record export made 6,739compile()calls. One served/detailwent 60 ms → 5 ms; a full export 43.6 s → 0.74 s._detail_rowsbuilt a full markdown render for every record in the plan and kept one: 63% of the server's CPU under twenty readers, discarded.
A concurrency audit
Six load scenarios and ~two dozen probes, committed under tests/load/, reported in docs/probes/concurrency-audit.md. The plan repository came through ~1,800 accepted writes with no conflict marker, no fork and nothing unpushed. It breaks first on CPU, on the read path — not on locks.
🤖 Written by an agent on behalf of @jcanton