Skip to content

v0.7.0 ·

Before the lifecycle ran itself: v0.2.0 to v0.7.0

The problem

Every other post on this blog was generated from lifecycle state: the problem statement written during ideation, the options weighed during design, the summary recorded at deployment. The generator reads those documents and composes the post.

This one could not be generated, because for the first seven releases the framework was not yet keeping records about itself.

Seven tags shipped in six days — v0.2.0, v0.3.1, v0.3.2, v0.3.3, v0.4.0, v0.6.0, v0.7.0. There is no v0.5.0 and no v1.0.0; the version numbers have gaps because they were being cut by hand, sometimes twice in an hour. The framework existed: a lifecycle engine, a CLI, platform adapters, a setup wizard. What it did not have was any instance of itself. It could give an agent phases and gates for your project while its own development was ordinary commits on main.

That is not a criticism of how it started. You cannot dogfood a lifecycle before the lifecycle works. But it does mean the historical record for this period is what git happens to remember, which is a commit log — accurate about what changed, silent about why.

How it could be solved

There were three honest options for this era.

Leave a hole. The trail simply starts at v1.1.0, the first release with a real instance behind it. Defensible, and it has the advantage of never implying more rigor than existed.

Reconstruct posts from git history. Read the commits, infer the problems they were solving, and write seven retrospective posts in the voice of the generated ones. Rejected, and firmly: it would produce documents indistinguishable from the generated posts while resting on inference rather than record. The entire premise of this trail is that the posts are evidence, and a reconstructed post is not evidence of anything except that someone read a commit log.

Write one post, by hand, that says what actually happened. That is this.

How AIDLC solves it

The manifest that drives this blog has a single entry covering all seven pre-self-hosting tags, marked unpublished, with a note explaining that no lifecycle state exists for them. The generator refuses to invent a post for a release it cannot fill — a missing act is a hard failure, not a placeholder — so the only way this era gets a page is a human writing one and marking it hand-written.

Which is the useful part. This post is labelled generated: false in its frontmatter, and its metrics card shows nothing recorded, because there is no instance to attribute cost or lead time to. Compare that to any post after it, which carries a real dollar figure and a real elapsed time. The difference between this page and the next one is exactly what the framework started keeping track of on 2026-08-15.

The gap is the record. Leaving it visible is more informative than filling it in.