<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/claude-rules, 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-06-13T05:40:25+00:00</updated>
<entry>
<title>docs(rules): manual-verification code steps go in org src blocks</title>
<updated>2026-06-13T05:40:25+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-13T05:40:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=e8d1640dcb853fc71be4df7e3f149ec19f4b4fe0'/>
<id>urn:sha1:e8d1640dcb853fc71be4df7e3f149ec19f4b4fe0</id>
<content type='text'>
A checklist step that is code the user runs (verification setup, bug repro, walkthrough wiring) now goes in an org src block instead of a list bullet, so the user executes it in place with C-c C-c and reads the result in the buffer rather than copy-pasting. Manual actions, prose context, and Expected lines stay as bullets between the blocks.

I scoped the Steps bullet in the same edit: it had said "one action per item" with the command as a bullet, which the new rule would contradict. It now names manual actions as the bullet case and points code steps at the src block.

From the smoke handoff 2026-06-12, worked out on its manual-verification walkthroughs.
</content>
</entry>
<entry>
<title>docs(rules): clarify proactive inbox-send vs the stop-and-ask rule</title>
<updated>2026-06-13T00:33:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-13T00:33:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=4fa8fd739a09e4ddd424e434fe174e3180d2f233'/>
<id>urn:sha1:4fa8fd739a09e4ddd424e434fe174e3180d2f233</id>
<content type='text'>
A literal reading of cross-project.md could see its new propagation section (send synced-file edits to rulesets without being told) as conflicting with the file's stop-and-ask rule. One sentence reconciles them: ask-first governs work inside another project's scope, and an inbox drop is the sanctioned alternative to that, so it needs no confirmation.
</content>
</entry>
<entry>
<title>docs(rules): codify propagating synced-file edits back to rulesets</title>
<updated>2026-06-13T00:15:22+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-13T00:15:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=f058b4c15a67ce3b54e306e8b4778aa3cb540c7c'/>
<id>urn:sha1:f058b4c15a67ce3b54e306e8b4778aa3cb540c7c</id>
<content type='text'>
A downstream edit to a rulesets-owned synced file (workflows, scripts, rules, protocols.org) is a stopgap the next template sync reverts. cross-project.md now documents the three-step propagation (edit locally, inbox-send the file to rulesets, include an intro note with the why and any companions to reconcile) so agents propagate a synced-file edit without being told.

From the .emacs.d handoff 2026-06-12.
</content>
</entry>
<entry>
<title>docs(todo): require a per-project Priority Scheme header</title>
<updated>2026-06-12T19:08:52+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-12T19:08:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=81395a7c8473fb2e0ad8239f02825c29288404e9'/>
<id>urn:sha1:81395a7c8473fb2e0ad8239f02825c29288404e9</id>
<content type='text'>
Every project's task list now opens with a "[Projectname] Priority Scheme" section declaring both the [#A]-[#D] semantics and the tag vocabulary. The concept already lived in the tooling (task-audit enforces a declared tag set, process-inbox checks for the scheme before filing), but nothing required the section or fixed its name, so a list could leave [#A] and its tags undefined.

The set is declared, not fixed. A project adapts the priorities and tags to its own work. The floor is that both are spelled out.
</content>
</entry>
<entry>
<title>feat(org): table standard as a rule, reflow helper, and lint check</title>
<updated>2026-06-11T19:25:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-11T19:25:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=8d790f371e54a8cc3e79a5ce72cd4dd5b3fa4513'/>
<id>urn:sha1:8d790f371e54a8cc3e79a5ce72cd4dd5b3fa4513</id>
<content type='text'>
Wide org tables overflow the page in exported PDF/docx, and hand-wrapping a cell into continuation rows is tedious and error-prone. The standard existed only as a work-project convention with nothing enforcing it.

claude-rules/org-tables.md carries the generalized standard: 120-column budget measured at render width (a link counts as its visible label and is never split), over-budget cells wrap onto continuation rows, and a rule sits under the header and every logical row.

wrap-org-table.el reflows a table to that shape mechanically. Columns shrink from natural width toward a floor of their widest atomic token, cells wrap link-safe, and rule-delimited continuation groups merge back into their logical row before re-wrapping, which makes the reflow idempotent. A table whose floors still exceed the budget reflows best-effort and stays flagged for restructuring.

lint-org.el gains an org-table-standard judgment check: width overruns and missing rules surface during the sweep with a pointer to the helper. Conformant wrapped tables don't false-flag, since the check reuses the helper's continuation-group reading. The check is judgment-only by design: reflowing is a visible layout change the sweep shouldn't make silently.
</content>
</entry>
<entry>
<title>feat: insights follow-ups — empirical-first debugging, staging guard, invariants</title>
<updated>2026-06-11T06:36:35+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-11T06:36:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=63b9a5f6b451f63e7f18381c47f4464bda993ead'/>
<id>urn:sha1:63b9a5f6b451f63e7f18381c47f4464bda993ead</id>
<content type='text'>
From the 2026-06-11 usage report. The debug skill gains a hypothesis-discipline contract (rank candidate causes by cheapest empirical test, run probes in parallel, report only confirmed findings) targeting the serial theory-cycling the report flagged. commits.md's pre-commit checklist gains a staged-files guard covering the untracked-set and canonical-vs-mirror conventions. A small tracked CLAUDE.md carries the rulesets mirror invariant at turn zero. Two [#C] pilots filed: a read-only morning ops orchestrator and a monthly session-harvest workflow.

The report's 500-token-cap finding was a mislabel: the underlying transcripts show 529 Overloaded and stream-idle-timeout errors with no token cap configured anywhere, so nothing to change there.
</content>
</entry>
<entry>
<title>feat(rules): render-merge guard for inline numbered options</title>
<updated>2026-06-10T23:28:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T23:28:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=d5d5448d9dfdc85c4bfa020fe7e4a74d7edb6ef4'/>
<id>urn:sha1:d5d5448d9dfdc85c4bfa020fe7e4a74d7edb6ef4</id>
<content type='text'>
GFM renderers merge adjacent ordered lists and renumber them — a 1-3 content list followed by a 1-3 options list rendered as options 4-6, and the user's pick ("4") didn't exist in the author's numbering. Numerals now belong to the options list only, other enumerations in the same message use dashes or prose, and a prose lead-in sits directly above the options. An out-of-range pick is treated as a suspected render-merge, not an error.
</content>
</entry>
<entry>
<title>feat(rules): knowledge-base.md — the agent KB pointer rule</title>
<updated>2026-06-10T23:14:16+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T23:14:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=d071f1f51ae3e381b4366f005a5c55d9dc2e6a85'/>
<id>urn:sha1:d071f1f51ae3e381b4366f005a5c55d9dc2e6a85</id>
<content type='text'>
Phase 1 of the agent KB spec. The rule carries the KB path and git discipline (pull before query, commit and push after write), the canonical rg commands, the one-node-per-fact write schema under agents/, the work-root denylist with the refusal contract, the inclusion criteria, and the capture-then-promote cadence. The existing Makefile RULES glob links it machine-wide; verified the link, a known-note query, and the conflict-file exclusion.
</content>
</entry>
<entry>
<title>feat(voice): expand skill to 45 patterns with attestation receipts and artifact budgets</title>
<updated>2026-06-10T15:12:22+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T15:12:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=571669583e634a90f9c96e7073d5e91658e1119c'/>
<id>urn:sha1:571669583e634a90f9c96e7073d5e91658e1119c</id>
<content type='text'>
Two patterns kept failing in practice despite being documented (#40 praise asymmetry and the #38 terse cut), so I made the walk verifiable and closed the content gap behind tangled review text.

The high-recurrence set (#13, #37, #38, #40, #42) now gets per-pattern attestation receipts. The anti-AI audit runs after the terse pass so the audited text is the text that ships. Short personal-mode artifacts get a compact output format, and a write-back step puts the voiced text in the file the publish flow posts from.

Four patterns are new: #42 finding stems (one claim per sentence in review findings), #43 single-sentence paragraph cadence, #44 parenthetical asides, #45 declarative register marker. #37 exempts verdict formulas. #40 covers verification narration. #13 and #33 carry the self-discipline framing. A per-artifact budgets table makes terse a checkable budget instead of an adjective.

The profile gains paired entries with the approved worked examples, and commits.md plus no-approvals.org drop hardcoded pattern counts so the next addition doesn't re-drift them.
</content>
</entry>
<entry>
<title>docs(verification): flag that enumerated lint/test gates skip new files</title>
<updated>2026-06-10T06:38:27+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-10T06:38:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=43a2a5e6e20bce3392f2b959425942e5e3930f09'/>
<id>urn:sha1:43a2a5e6e20bce3392f2b959425942e5e3930f09</id>
<content type='text'>
A green check only covers the files the gate actually ran on. When a lint, test, or format gate uses a hand-maintained file list instead of a glob, a newly-added file is silently skipped and the gate still reports clean. Added a subsection naming the failure mode (a Makefile path list, a pre-commit files: regex, a CI matrix, a coverage include list) and the check it calls for: when you add a file, confirm each gate discovers it before trusting the green.
</content>
</entry>
</feed>
