0.23.1 — the pin says what it links, and the ladder says draft
A small release, and both fixes are the same mistake wearing different clothes: a label that had drifted from the thing it names.
A small release, and both fixes are the same mistake wearing different clothes: a label that had drifted from the thing it names.
Every ladder in this repository models evidence flowing inward: something was observed, and an artifact's status records what we now know.
An outbound claim runs the other way. A number in a customer's inbox. A status page saying "resolved". An availability figure in a renewal deck. Those are assertions that already left the boundary, and nothing here modelled them.
Four mechanisms, each closing a gap where the rule existed and nothing enforced it.
0.15.0 let a rung cost evidence. This release is how the evidence gets there.
$ protocol artifact evidence outbound-claim:q3-uptime \
--kind approval --source "legal review" --ref https://example.invalid/approvals/814
outbound-claim:q3-uptime: approval recorded from legal review
on hand: approval=1
$ protocol artifact move outbound-claim:q3-uptime --to cleared
outbound-claim:q3-uptime moved draft -> cleared (revision 2)
The planning store is markdown files in git, so its history was always there — as git log, in a
form you had to reconstruct. This release makes it a question you can ask.
$ protocol artifact history outbound-claim:q3-uptime
2026-08-26T00:08:16Z operator created as draft (revision 1)
2026-08-26T00:08:20Z operator approval recorded from legal review (https://example.invalid/approvals/814) (revision 1)
2026-08-26T00:08:20Z operator moved draft -> cleared (revision 2)
2026-08-26T00:08:20Z operator moved cleared -> sent (revision 3)
$ protocol artifact lifecycle blocker
blocker starts at open
cleared -> nothing
open -> cleared
Two rungs. The value is entirely in the type: a blocker is typed by what would clear it, so blocked stops being a label on a card and becomes a statement with a named exit.
An obligation is a commitment on a clock nobody here controls: a customer's deadline, a
regulator's window, a partner's delivery date.
$ protocol artifact lifecycle obligation
obligation starts at open
met -> nothing
open -> met, slipped
slipped -> met
Some rungs should not open yet. A review window. A cooling-off period. A notice period somebody agreed to in a contract.
This release adds date and duration operators to the condition language, so a ladder can say so.
0.13.0 made the status ladder data. This is the first release that spends it.
A ladder that only says what may follow what models permission, not earning. Anybody could
move a story to implemented; the ladder had no opinion about whether anything was implemented.
Every worked example on this site starts from documents that already exist. That is the wrong end for anybody deciding whether to adopt: your repository has a README, a test layout, a CI file and six years of git history, and none of it was written with a protocol in mind.
0.14.0 adds protocol reverse — four verbs that read what a repository already says about
itself. Three of the four write nothing at all, which is the part that matters when you are
evaluating a tool you do not trust yet: the worst case is a report you disagree with.