<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/.ai/scripts/spec-sort, 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-02T04:07:38+00:00</updated>
<entry>
<title>feat(spec-sort): add the docs-pile retrofit helper</title>
<updated>2026-07-02T04:07:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T04:07:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=80ca5d00c4ddd481308ed8ce0c2f270bd34604c0'/>
<id>urn:sha1:80ca5d00c4ddd481308ed8ce0c2f270bd34604c0</id>
<content type='text'>
spec-sort is Phase 2 of the docs-lifecycle build. It proposes the sort (spine-predicate classification, an evidence panel per candidate, a conservative keyword proposal) and a human confirms every move with --confirm/--skip. Terminal states need an explicit --reason, recorded in the status history.

--apply is fail-safe. It refuses a dirty worktree, validates then writes from a recorded plan file, names applied and not-applied work with a git restore recovery recipe on mid-apply failure, and exits non-zero on post-apply residue. Moves land in docs/specs/ with the -spec.org suffix, a status heading carrying :ID: and a dated history line, and the two-sequence keyword header. file: links across the project-owned roots are recomputed, including a moved doc's own outbound links. Session archives and synced template paths are reported, never rewritten, with the canonical claude-templates file named. A successful run stamps :LAST_SPEC_SORT: in .ai/notes.org.

The 33-test bats suite is glob-discovered by make test. A dry run against rulesets' own pile matches the expected five candidates.
</content>
</entry>
</feed>
