<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/docs/specs/2026-07-01-docs-lifecycle-spec.org, branch main</title>
<subtitle>Claude Code skills, rules, and language bundles
</subtitle>
<id>https://git.cjennings.net/rulesets/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/rulesets/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/'/>
<updated>2026-07-02T09:14:39+00:00</updated>
<entry>
<title>feat(docs): convert spec-target file links to id form</title>
<updated>2026-07-02T09:14:39+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T09:14:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=78bbaae5d8634d52588c1a60d7b7f430bed238c7'/>
<id>urn:sha1:78bbaae5d8634d52588c1a60d7b7f430bed238c7</id>
<content type='text'>
All 13 file:docs/specs/ links lived in todo.org. Eleven converted directly. The two carrying a Review-findings search target now point at a new :ID: minted on that heading, since the id index scans whole files and heading-level ids stay rename-safe. The residue grep is zero and every id resolves to its target's :ID:.

The commit also carries the routine archive sweep of freshly-closed tasks and the speedrun pre-flight answer stamps.
</content>
</entry>
<entry>
<title>feat(startup): add the spec-sort nudge; notify .emacs.d the convention is live</title>
<updated>2026-07-02T04:24:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T04:24:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=21639cb395bd363f9406694adebd9a3675bf1096'/>
<id>urn:sha1:21639cb395bd363f9406694adebd9a3675bf1096</id>
<content type='text'>
The Phase A batch gains a read-only probe that prints one line when a project has an unsorted docs pile (a docs/design/ or stray docs/*-spec.org files) and no :LAST_SPEC_SORT: marker. Phase C surfaces the "run spec-sort" offer when the probe fired and stays silent otherwise.

The stray-root check uses find instead of the spec's compgen sketch: compgen is bash-only and zsh aborts on an unmatched glob, so the original snippet false-negatived on stray root specs under zsh. The spec's snippet is updated with a note, and the probe is fixture-verified in both shells across the four project shapes.

I also fixed startup.org's reference to the encourage-kb-contribution spec's pre-pilot path and sent .emacs.d the convention-live note with the id-index ask.
</content>
</entry>
<entry>
<title>docs(spec): decompose docs-lifecycle build into phase tasks; flip to DOING</title>
<updated>2026-07-02T03:35:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T03:35:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=328ca18a15c4dd14cc4898b483cc6b2681dbf7eb'/>
<id>urn:sha1:328ca18a15c4dd14cc4898b483cc6b2681dbf7eb</id>
<content type='text'>
The build parent carries the :SPEC_ID: binding, one task per phase plus the id-conversion follow-up, the tracked flip-to-IMPLEMENTED task, and a manual-testing child — the first live exercise of the spec's own transition-ownership table.
</content>
</entry>
<entry>
<title>docs(spec): record reviewer READY flip on the docs-lifecycle spec</title>
<updated>2026-07-02T03:33:31+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T03:33:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=6923bc42f7728ce1cb2955af1c2669b37f6cd7fb'/>
<id>urn:sha1:6923bc42f7728ce1cb2955af1c2669b37f6cd7fb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(spec): fold in verify-pass nits on the docs-lifecycle spec</title>
<updated>2026-07-02T02:55:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T02:55:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=43cecd4eec7d1c061ca546b50a3d095a6d01f524'/>
<id>urn:sha1:43cecd4eec7d1c061ca546b50a3d095a6d01f524</id>
<content type='text'>
Scope the zero-id-links acceptance check to links the sort actually rewrote (prose mentions of the syntax already exist and would false-positive a naive grep), add untracked-copy cleanup to the mid-apply recovery recipe, and refresh two stale prose spots (nudge skip condition, bats case list).
</content>
</entry>
<entry>
<title>docs(spec): fix the five re-review findings in the docs-lifecycle spec</title>
<updated>2026-07-02T02:52:25+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T02:52:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=b163637008996031f5a16d4703d384209c4ace76'/>
<id>urn:sha1:b163637008996031f5a16d4703d384209c4ace76</id>
<content type='text'>
Canonical placement contract for every synced artifact of the feature; a :SPEC_ID: property binds a spec to its build parent so task-audit can police DOING specs by the parent's keyword; spec-sort --apply gains a fail-safe contract (clean-tree preflight, validate-then-write from a recorded plan, named recovery); id-link conversion is staged behind the executable .emacs.d id-index mechanism so no unclickable-link window exists; status confirmation is evidence-based with terminal states requiring a stated reason. Status stays DRAFT pending reviewer sign-off.
</content>
</entry>
<entry>
<title>docs(spec): flip docs-lifecycle spec to READY after verify pass</title>
<updated>2026-07-02T02:43:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T02:43:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=642be351ae4dcc4807cb7f1e08745068ce041365'/>
<id>urn:sha1:642be351ae4dcc4807cb7f1e08745068ce041365</id>
<content type='text'>
The original reviewer re-checked all nine fixes against its findings: all held, verdict ready. Two minors folded in first — a refinement note under Decision 2 and a nudge probe that also fires on stray docs-root specs.
</content>
</entry>
<entry>
<title>docs(spec): fix all nine dual-review findings in the docs-lifecycle spec</title>
<updated>2026-07-02T02:35:00+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T02:35:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=09b880e1058549b0aa9751b81129d87b25372cee'/>
<id>urn:sha1:09b880e1058549b0aa9751b81129d87b25372cee</id>
<content type='text'>
Two independent reviews converged on the same blocker: the lifecycle keyword line replaced TODO/DONE, silently breaking the decision-task cookies — the spec's own [5/5] was hand-faked. The header is now two collision-free sequences and org computes the cookies. Also fixed: every status flip has a named owner (spec-response emits a tracked flip-to-IMPLEMENTED task, task-audit reconciles as the safety net), one classification predicate, spec-sort renames to -spec.org, an explicit relink data-safety contract, the .ai/notes.org marker + startup probe contract, a legacy-location grace rule so no spec is unreviewable mid-transition, the org-id resolution prerequisite, and the three-line transition definition.
</content>
</entry>
<entry>
<title>feat(docs): draft the docs-lifecycle spec from the settled decisions</title>
<updated>2026-07-02T02:16:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T02:16:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=ae485b471712424f117ca034f06024326302e859'/>
<id>urn:sha1:ae485b471712424f117ca034f06024326302e859</id>
<content type='text'>
Location split (docs/specs/ vs docs/design/), org-keyword status on a prepended top-level status heading (DRAFT READY DOING | IMPLEMENTED SUPERSEDED CANCELLED), org-id cross-doc links, a general docs-lifecycle rule, and a confirmed spec-sort retrofit with a startup nudge. The spec is the first resident of docs/specs/ and carries its own status heading. Status DRAFT pending review.
</content>
</entry>
</feed>
