aboutsummaryrefslogtreecommitdiff
path: root/.ai/protocols.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-12 20:04:05 -0500
committerCraig Jennings <c@cjennings.net>2026-06-12 20:04:05 -0500
commit19829305721a327d07b6fe5b6dfba5bf34c8ed37 (patch)
tree436a86299d8b88cde7c0fda56e034c38665fc478 /.ai/protocols.org
parent4fa8fd739a09e4ddd424e434fe174e3180d2f233 (diff)
downloadrulesets-19829305721a327d07b6fe5b6dfba5bf34c8ed37.tar.gz
rulesets-19829305721a327d07b6fe5b6dfba5bf34c8ed37.zip
feat(workflows): skeptical review gate for inbox change proposals
The value gate asks whether to take an inbox item, never whether the proposed change is right. process-inbox gains a Skeptical Review for proposals that change shared assets: a written question battery (fit for all consumers, conflicts elsewhere, effect on common activities, enhancement, simplification, plus at least three change-specific questions), ending in a summary and recommendation Craig approves before the change lands. In a no-approvals session, behavior-changing proposals park instead of self-applying: prepared diff in working/, a [#B] VERIFY carrying the decision package, a reply to the sender. Wording-only fixes proceed, logged. monitor-inbox's act-vs-file rule and protocols.org's act-now line gain the matching exception so all three statements of the rule agree. protocols.org's tables picked up the org-table-standard reflow in the same pass. The motivating case is today's spec-decisions handoff. I applied it as-is, and the after-the-fact review surfaced a lost state and a vacuous gate pass the battery would have caught up front.
Diffstat (limited to '.ai/protocols.org')
-rw-r--r--.ai/protocols.org54
1 files changed, 34 insertions, 20 deletions
diff --git a/.ai/protocols.org b/.ai/protocols.org
index 3fc7104..6b1d873 100644
--- a/.ai/protocols.org
+++ b/.ai/protocols.org
@@ -34,17 +34,26 @@ Every project using this template has an =.ai/= directory for Claude tooling and
Every file and directory has a defined purpose:
-| Item | Purpose |
-|------+---------|
-| =protocols.org= | Single entry point — behavioral instructions + directory map |
-| =notes.org= | Project state: context, active reminders, pending decisions |
-| =session-context.org= | Live session state (exists only during active sessions); renamed on wrap-up |
-| =sessions/= | Archived session files (one per session) — =YYYY-MM-DD-HH-MM-description.org= |
-| =workflows/= | Template workflows (synced from claude-templates, never edit in project) |
-| =project-workflows/= | Project-specific workflows (never touched by sync) |
-| =scripts/= | Template scripts (synced from claude-templates, never edit in project) |
-| =project-scripts/= | Project-specific scripts (never touched by sync; mirrors =project-workflows/=) |
-| =someday-maybe.org= | Project ideas backlog |
+| Item | Purpose |
+|-----------------------+--------------------------------------------------------------------------------|
+| =protocols.org= | Single entry point — behavioral instructions + directory map |
+|-----------------------+--------------------------------------------------------------------------------|
+| =notes.org= | Project state: context, active reminders, pending decisions |
+|-----------------------+--------------------------------------------------------------------------------|
+| =session-context.org= | Live session state (exists only during active sessions); renamed on wrap-up |
+|-----------------------+--------------------------------------------------------------------------------|
+| =sessions/= | Archived session files (one per session) — =YYYY-MM-DD-HH-MM-description.org= |
+|-----------------------+--------------------------------------------------------------------------------|
+| =workflows/= | Template workflows (synced from claude-templates, never edit in project) |
+|-----------------------+--------------------------------------------------------------------------------|
+| =project-workflows/= | Project-specific workflows (never touched by sync) |
+|-----------------------+--------------------------------------------------------------------------------|
+| =scripts/= | Template scripts (synced from claude-templates, never edit in project) |
+|-----------------------+--------------------------------------------------------------------------------|
+| =project-scripts/= | Project-specific scripts (never touched by sync; mirrors =project-workflows/=) |
+|-----------------------+--------------------------------------------------------------------------------|
+| =someday-maybe.org= | Project ideas backlog |
+|-----------------------+--------------------------------------------------------------------------------|
** =docs/= (visible, real project documentation)
@@ -188,7 +197,7 @@ Check =inbox/= at every task boundary (after finishing a unit of work, before re
.ai/scripts/inbox-status -q
#+end_src
-Exit 1 means handoffs are pending — process them per =process-inbox.org=. For each accepted handoff, the act-vs-file rule: *act now* when it's clear, bounded, low-risk, in-scope, and cheaper than deferring — just do it, no asking; *file* otherwise — ask first, with filing as option 1 and "do it now" as option 2; *ask* if unsure. Always reply to a handoff's sender (confirm on accept, the why on reject). Full process, the reply discipline, and the opt-in background-monitor =/loop= recipe live in =monitor-inbox.org=.
+Exit 1 means handoffs are pending — process them per =process-inbox.org=. For each accepted handoff, the act-vs-file rule: *act now* when it's clear, bounded, low-risk, in-scope, and cheaper than deferring — just do it, no asking; *file* otherwise — ask first, with filing as option 1 and "do it now" as option 2; *ask* if unsure. Exception: a proposal to change a shared asset (template workflow, rule, skill, synced script) or a substantive convention never silently acts now — it goes through process-inbox's Skeptical Review and its approval (or park) step. Always reply to a handoff's sender (confirm on accept, the why on reject). Full process, the reply discipline, and the opt-in background-monitor =/loop= recipe live in =monitor-inbox.org=.
** Recursive Reads — Honor =.aiignore=
@@ -240,10 +249,12 @@ For tool recipes, authentication details, and credentials, see [[file:references
Craig has two GPG key pairs configured:
-| Email | Key ID | Purpose |
-|-------+--------+---------|
-| =c@cjennings.net= | =3388FB17E147A563558F2CEC0E56F0A5B832F070= | Default key |
+| Email | Key ID | Purpose |
+|---------------------------------+--------------------------------------------+----------------|
+| =c@cjennings.net= | =3388FB17E147A563558F2CEC0E56F0A5B832F070= | Default key |
+|---------------------------------+--------------------------------------------+----------------|
| =craigmartinjennings@gmail.com= | =1A1F6932A25357793FB2B4C51C4D081632A5CDA7= | Gmail identity |
+|---------------------------------+--------------------------------------------+----------------|
Both are RSA 4096-bit, passphrase-protected, no expiry.
@@ -283,11 +294,14 @@ stamping it.
Craig has three mail accounts. *Default to cmail for personal / non-work email* — reach for it unless the message is work-related.
-| Account | Address | Use for |
-|---------+---------+---------|
-| =cmail= | =c@cjennings.net= (Proton Bridge) | *Default.* Personal / non-work mail. |
-| =dmail= | =craig.jennings@deepsat.com= (Gmail) | Work mail. |
-| =gmail= | =craigmartinjennings@gmail.com= | Third account, rarely the right one. |
+| Account | Address | Use for |
+|---------+--------------------------------------+--------------------------------------|
+| =cmail= | =c@cjennings.net= (Proton Bridge) | *Default.* Personal / non-work mail. |
+|---------+--------------------------------------+--------------------------------------|
+| =dmail= | =craig.jennings@deepsat.com= (Gmail) | Work mail. |
+|---------+--------------------------------------+--------------------------------------|
+| =gmail= | =craigmartinjennings@gmail.com= | Third account, rarely the right one. |
+|---------+--------------------------------------+--------------------------------------|
*The tool is =cmail-action send=* (symlinked into =~/.local/bin=, on PATH from any project). Don't hand-roll MIME or pipe raw messages through =msmtp= — the script builds the message, threading, and attachments for you.