Skip to content

v0.15.0

Choose a tag to compare

@jcanton jcanton released this 23 Aug 21:39
· 623 commits to main since this release
2fc3398

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_body dropped one of two edits beginning on the same line and answered merged. 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 200 with no way to say the commit had not left the instance. pushed was 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 goal field, so an eleven-slide deck printed on twelve sheets.

Two performance fixes, both invisible until something measured them

  • Environment.from_string recompiled fourteen Jinja templates per record — a 479-record export made 6,739 compile() calls. One served /detail went 60 ms → 5 ms; a full export 43.6 s → 0.74 s.
  • _detail_rows built 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