<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/inbox, 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-29T11:38:34+00:00</updated>
<entry>
<title>chore: archive completed work and refresh the lint follow-up queue</title>
<updated>2026-07-29T11:38:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-29T11:38:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=73e8c01fa49f48766a283e2db933e38951f656ab'/>
<id>urn:sha1:73e8c01fa49f48766a283e2db933e38951f656ab</id>
<content type='text'>
Three finished tasks moved to Resolved: the sentry cycle rename, the
references/ link removal, and the parked telegram down-is-launch fix.
The lint sweep re-ran and its judgment items were refreshed.
</content>
</entry>
<entry>
<title>feat: add peer-reasoning contract and fix two silent probe defects</title>
<updated>2026-07-27T15:48:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-27T15:48:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=6c1ea8bbc3775fe7c481f41b4f30e0c0110a9339'/>
<id>urn:sha1:6c1ea8bbc3775fe7c481f41b4f30e0c0110a9339</id>
<content type='text'>
I added a Collaborative Peer Reasoning section to the interaction rules. It governs how an interpretation forms before any rule about presenting choices: infer first and clarify only at material forks, test a conclusion against its strongest alternative, let a correction update the downstream model instead of just the wording. The file's framing line widened to match.

Two probes were failing silently. The startup KB nudge looked up the best-practices node by grepping file content for its slug. A roam node's slug lives in its filename, so the lookup always returned empty. The nudge pointed at nothing in every project and every session, for as long as it shipped. It matches the filename now, through find rather than a glob so zsh doesn't abort on no match.

The browser rule told agents to open URLs with a form ending in &amp;&gt;/dev/null &amp;. That discards the "Opening in existing browser session." line confirming the tab opened. Warm and cold start now split: foreground and read the confirmation when Chrome is already up, detach only when it isn't. The confirmation is on stdout, verified rather than assumed.

I filed two tasks from handoffs. The sentry triage split needs a work-vs-personal classification mechanism before its wording can move, because the current rule excludes by category and category can't express that split. The publish-lock design is approved but carries three open gaps. The load-bearing one is a lock held across an unbounded human approval pause.

I also swept the old processed handoffs out of inbox/. History keeps them.
</content>
</entry>
<entry>
<title>feat: enforce clean wraps and inbox-safe sync</title>
<updated>2026-07-25T20:35:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-25T20:35:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=f2609d9f9ad33486bef43211d753ba53e1e24181'/>
<id>urn:sha1:f2609d9f9ad33486bef43211d753ba53e1e24181</id>
<content type='text'>
Centralize repository-state checks, bind teardown to a certified clean HEAD, and allow inbox-only refreshes. Guard installed symlinks from cross-project writes and add regression coverage.
</content>
</entry>
<entry>
<title>chore: close the invalid-block bug and stamp a task-review cycle</title>
<updated>2026-07-25T14:24:43+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-25T14:24:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=243c5dbc35ab1c535919e592bde36969dd8483f2'/>
<id>urn:sha1:243c5dbc35ab1c535919e592bde36969dd8483f2</id>
<content type='text'>
Archives the fixed lint-org bug into Resolved and records seven review
stamps from the day's cycle. The lint sweep's deferred judgments ride
along in the follow-ups file.
</content>
</entry>
<entry>
<title>feat(voice): add recipient-priority ordering, calibrate the paragraph rule</title>
<updated>2026-07-24T04:27:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-24T04:27:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=37c6fe6c99ae713177a43cd2416fd8ba64356c72'/>
<id>urn:sha1:37c6fe6c99ae713177a43cd2416fd8ba64356c72</id>
<content type='text'>
Adds pattern #47: in a reply, lead with what matters most to the recipient, not the easiest answer or the order they wrote it. Correspondence-scoped, so it fires on email, Signal, and letters and nowhere else. It's the one pattern that doesn't carry into personal mode, since a commit or PR review isn't a reply to someone's news.

Recalibrates #43 in the same edit. "Shifts angle" now means shifts topic: break between topics, consolidate within one, up to a five-or-six-sentence ceiling. The never-merge line was being read at sentence granularity, which fragmented single topics across paragraphs. #43 and #47 are one rule seen from both sides, the break between topics and the order of them, not a rule in tension with its neighbor.

Both land in SKILL.md and the profile per the pairing rule, with the worked before/after in the profile. From a home session drafting a Signal reply; the design is Craig's.
</content>
</entry>
<entry>
<title>chore: file eight bug findings and stage four shared-asset proposals</title>
<updated>2026-07-23T13:25:40+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-23T13:25:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=01356fa036847f9d216dd92a006049105c2d5461'/>
<id>urn:sha1:01356fa036847f9d216dd92a006049105c2d5461</id>
<content type='text'>
Overnight hygiene sweep of this repo. Everything here is a finding or a staged proposal. No rule, workflow, script, or bundle file was modified.

The one that matters: the python and typescript language bundles ship no pre-commit hook, so a project installing either gets no credential scan on commit. Both bundles predate the hook rollout that swept go and bash, and install-lang skips missing components without a word, so it went unnoticed for two months. Live on two projects, one of them work. Filed [#A].

Seven more findings landed. The largest is a non-atomic write in the cross-project inbox tool, which can strand an empty handoff in another project's inbox and block a turn there. The rest are lint noise and two gaps in the Signal channel. An eighth was filed and then retracted the same night, once a retest showed I had compared two different files and read the difference as a bug.

Four proposals from other projects are staged under working/ with verified diffs, each behind a VERIFY task, waiting on a decision.
</content>
</entry>
<entry>
<title>feat(sentry): exclude mail and messengers, add a bug-finding pass</title>
<updated>2026-07-23T07:41:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-23T07:41:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=33949c50b7d2b3ab01af4fe91119cc290fae9f01'/>
<id>urn:sha1:33949c50b7d2b3ab01af4fe91119cc290fae9f01</id>
<content type='text'>
Sentry no longer checks email or messengers. Pass 3 loads only the calendar and PR/ticketing triage plugins. The mail and messenger ones stay out: cmail, Gmail, Telegram, Signal, chat DMs. A manual triage intake still scans everything. The probe follows, so a project whose only declared sources are mail or messengers now skips the pass instead of running it empty.

New pass 11 hunts bugs. It runs linters and static analysis, checks config sanity, and reads one rotating code area per fire so coverage builds over a night. Verified findings get filed as graded bug tasks. It never fixes unattended.

I dropped the suite run the order called for. Running the suite every fire is the per-pass anti-pattern this same file forbids, and the entry baseline already has the result.

The KB personal-project roots now cover ~/.dotfiles, which was classifying Unknown and blocking writes from there.
</content>
</entry>
<entry>
<title>chore(todo): archive resolved tasks, log review-health followup</title>
<updated>2026-07-21T04:39:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T04:39:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=50fc7ca0d15455f508a50e7d227047a8b3664b9d'/>
<id>urn:sha1:50fc7ca0d15455f508a50e7d227047a8b3664b9d</id>
<content type='text'>
Moved 5 completed level-2 tasks into Resolved. Logged one review-health followup: a top-level task has gone unreviewed past 30 days.
</content>
</entry>
<entry>
<title>chore(inbox): mark archsetup comma-budget handoff processed</title>
<updated>2026-07-21T04:27:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T04:27:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=9721a49206af1e107f1e820e54ecd0cfdeb839c2'/>
<id>urn:sha1:9721a49206af1e107f1e820e54ecd0cfdeb839c2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: mark work's triage-sources migration confirmation processed</title>
<updated>2026-07-20T18:47:46+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T18:47:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=1288fc16f0601df88806ea6e16e864df89ff5913'/>
<id>urn:sha1:1288fc16f0601df88806ea6e16e864df89ff5913</id>
<content type='text'>
</content>
</entry>
</feed>
