v1.9.1 ·
The lifecycle tells its own story: a generated release trail
AIDLC ships every day or two. Fifteen tags in the first ten days, and none of that history was visible outside the repo. The GitHub release notes are auto-generated one-liners. v1.7.0 shipped the whole closed feedback loop, and its release body is a "Full Changelog" link.
The repo already held the story. Every finished instance has an idea file with the problem and the options, a requirements file, and a deployment record of what shipped, plus cost and lead time. Nobody read any of it.
A trail generated from the lifecycle
This release adds a blog to the site: one post per release, built from that state by packages/website/scripts/generate-blog-post.mjs. It brings a /blog/ listing, post pages, an RSS feed at /feed.xml, a nav entry, the latest post on the home page, and a Blog section in site search. The release script generates the post and commits it with the release. Six generated posts cover v1.1.0 through v1.6.0. v1.7.0, v1.8.0, v1.8.1 and v1.9.0 are deliberately unpublished, each with a recorded reason.
I chose generation over hand-writing because a chore goes stale within a few releases, and these posts are meant as evidence that the lifecycle leaves a durable record. That claim only holds if generating them is mechanical. The price is that extraction gives structure, not voice. Problem statements written for a requirements reader read like internal documentation when pasted verbatim. So a sidecar file can replace any generated section, and the generator refuses to emit a stub when it cannot extract an act. A missing post beats a post with a blank third act.
Which release covers which instance comes from a committed manifest, validated as a whole, so a new tag fails at once instead of going uncovered.
The cost numbers were wrong
The same release fixed a bug about money. Every claim the framework had recorded said agent: "unknown". Cost sync looks up a provider by that name, finds none, and skips the session for good, so usage landed in an unattributed file. Eight instances were affected. aidlc cost showed $0.00 for features that had cost real money, and aidlc metrics showed null.
Nothing ever set the AIDLC_AGENT environment variable. A search found four places that read it and none that wrote it, so the fallback was the only path any session took. The backup lookup had disabled itself. It matched by repo rather than by session and required exactly one match, and the stash had collected 21 entries for the same directory, because entries were removed only by a 48-hour timer.
I now resolve the platform at claim time, while the process that knows is still alive. Reading it at sync time was too late, because the evidence is gone.
What it does not fix
Recovering the stranded usage went wrong the first time. A reconciliation reported 1043 segments attributed while it had silently written 950 transcript entries into two ledgers twice. Deduplication was keyed on session, and the collision was across sessions. Any attribution figure that becomes money needs an audit for duplicate source records across every destination before I trust it.