Skip to content

0.8.2 — the ruler, and the three readings taken under it

Choose a tag to compare

@MichaelYcJo MichaelYcJo released this 06 Sep 09:13
· 14 commits to main since this release
39f5cad

The ruler first, then the three readings taken under it. docs/flow.md set
that order and said why: the first item is what measures the other three, so
anything built beside it is built without it.

A run's report carries one comparison table (#170)

session-cost prints a token line — turns, output, cache write, cache read
— summed over a run's main transcript and every segment beside it, in one
command:

tokens        18 transcripts, 1,617 turns
  output              792,908
  cache write       7,688,414
  cache read      480,245,207

Every way it degrades prints a smaller number rather than raising, so the
line also says how many transcripts it covered — that count is what a reader
holds it against.

skills/verify/SKILL.md now states the nine-row table a run's report carries
and where each row comes from. The two documents that carry it point at the
owner instead of copying the rows, because two copies are two things to keep in
step.

The repository ships a command for its own suite (#156)

bin/test builds a virtualenv on first use and reuses it: 5.24 s cold,
0.60 s warm.
The claim is not that the first call is cheap — it is that the
expensive call is only the first.

CONTRIBUTING.md names it first. The old uvx --with pytest form stays as a
labelled no-write fallback, carrying the 55–58 s per call that demoted it,
because a fallback named without its cost gets promoted back. agents/smith.md
and agents/warden.md now tell a spawned segment to look for a runner the
repository ships instead of assembling one — in language that names no
repository's own command, since those files ship to every install.

The flow log's roll fires when a version has shipped (#155)

It guessed the next version by bumping a minor. At 0.8.1 that closed a log
opened for 0.9.0 that nothing had used, and opened a second issue with the same
title.

Now a log is titled by the version it rolls fromchore: flow measurement — after 0.8.2 — which is a fact at the moment it is written rather than a
prediction, and a roll happens only when a new version has shipped. This
release is the migration
: the old-convention log read as naming no version,
rolled, and the first log under the new convention is open.

A fence may not close past a section the record needs (#169)

round_record.py new accepted a fenced block that closed after a later
heading, and wrote a record with that section silently gone. The rule is one
sentence — a fence must close, and its span must not cross a line the generator
reads out of the report — and the guard derives that line list from two
constants the module already used to declare what it looks up.

Upgrading

Nothing to do. bin/test is new and optional; every other change is in the
skills, agents and documents the plugin ships, and takes effect at your next
plugin update.

One thing to know if you write review records by hand: round_record.py
now refuses a report whose fenced block, or whose HTML comment, would take a
section out of the record. The refusal names the heading it would have lost and
what to do about it.

Known, and scheduled

Four issues came out of this release's own runs and are on 0.8.3 and 0.9.0:

  • #177 — an unwritable .venv turns bin/test's refusal sentence into a
    traceback.
  • #179 — a loaded file naming a real version is a timer: green today, red
    at the release that ships it.
  • #182 — the fence guard's enumeration names three copies where the
    property is every copy taken out of raw, and there are four.
  • #180 — three rules that were already written down were each re-broken
    inside one run. Written down and arriving at the moment of the act are
    different states, and a fourth copy of the rule is the failure mode rather
    than the fix.

Full changelog: https://github.com/MichaelYcJo/SpecSeal/blob/v0.8.2/CHANGELOG.md