Skip to content

v10.7.0 — the writes that earn nothing, cut

Choose a tag to compare

@alexherrero alexherrero released this 14 Oct 06:02
· 7 commits to main since this release

Task 190: the vault gains only the cards that earned their place, and a page is rewritten only when what it says changes. The write-quality audit of 2026-10-07 judged every file the vault wrote on 10-05 and 10-06. It found none of the 18 new memory cards earned: nine were traces of one unattended poll, and four of five crystallized lessons were under their own bar. It also found maps, trackers, needs-review and entity pages rewritten with nothing in them changed. A meter now measures that every morning, and each writer is held to it. Over the first three nights after the deploy (2026-10-10 to 10-12), new cards ran 1, 2 and 1 a night against 18 in the audit's two days, no unattended run left a trace, and no map, tracker, needs-review or entity page was rewritten with only the calendar or line order moved, against 9 such rewrites in the audit window. Enrichment appended no prose to a project doc, against 7 sections, and the weekly crystallize run wrote no lesson under its bar. This release also carries task 191's step 2 (under Internal), which ships ahead of that task's purge; task 191 releases on its own close-out.

Added

  • A write meter, in the morning note and the health scorecard (task 190 step 1, #885). write_meter.py reads the vault's git history and counts the following: new memory cards by class, with the self-probe apart; the vault's net notes; each rewrite of a map, project tracker, needs-review or entity page, and how many changed only the calendar (the updated: stamp, the dream cycle's date, a count of days) or only line order, while a date that is data, such as a project's last_worked, counts as a change (the operator's ruling of 2026-10-13); and enrichment restamps and Added by dreaming sections in project docs. It warns when cards pass the new thresholds.daily_card_budget (30 a day), on any rewrite that changed only dates or order, and when the committer is an hour behind. Over the audit's window it reads 18 cards plus 2 self-probes, as the audit found.

Changed

  • A session with no operator turn writes no episodic trace (task 190 step 2, the operator's ruling of 2026-10-07). A Desktop scheduled task and a headless claude -p run leave nothing unless you reply. The host stamps a scheduled run origin.kind: human, so it is read by its <scheduled-task> wrapper. A typed message or slash command is a turn.
  • Maps change only when their membership or text does (task 190 step 3). The daemon's self-probe is no longer a map member, and a regeneration that would move only updated writes nothing. The scorecard's class census counts the probe apart.
  • One write a night for a project tracker, and needs-review stops following the calendar (task 190 step 4). The night reads each project's activity before rendering its tracker, so the projects job has nothing left to edit. needs-review says "silent since " and moves updated only when its lists change.
  • An issue or release entity page needs three origins, and the builder is a page's one writer (task 190 step 5, the operator's ruling of 2026-10-07). The new thresholds.entity_min_sources_numbered is 3, and repositories keep 2. The task mover no longer edits entity pages, and the night builds them after it. A dry run on 2026-10-09 kept 290 of 527 pages and removes 237 through the journal.
  • Crystallize checks its bar on the lesson's own sources, counted in notes, and a source teaches one lesson (task 190 step 6). A ledger in the engine's state directory remembers the trackers and trace lines a lesson consumed. A draft restating a lesson links it rather than minting a second. A lesson's file is never written over. Four of the five 10-06 lessons fail the rechecked bar; they are listed for the operator, and none is removed.
  • Enrichment leaves designs, dead drafts and updated alone (task 190 step 7). A project's records take fields and stamps, never prose. updated stays the author's date, the one the age clock reads, and the pass's own date is enriched_at. A superseded note and a PROMPTS-*.md pack are not enriched.

Internal

  • The retrieval gate follows three gold questions to their keepers (task 191 step 2). The memory junk purge deletes rc09's gold card, a duplicate of the MarkTechPost article it is superseded_by, and archives the card rc10 and rc12 expect, whose finding lives in the kept aliases card. _PURGE_REMAPS in eval_retrieval_shipped.py points each question at the note that now answers it, the article in resources/topics/agent-memory/ (or in semantic/ until it moves). A row is taken only once the gold card is gone, so the gate scores the same questions before, during and after the purge instead of stopping with exit 4.

Pull requests: task 190 (#884) shipped in #885, #886, #888 and #891; task 191 step 2 in #890.