diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-12 20:04:05 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-12 20:04:05 -0500 |
| commit | 19829305721a327d07b6fe5b6dfba5bf34c8ed37 (patch) | |
| tree | 436a86299d8b88cde7c0fda56e034c38665fc478 /.ai/protocols.org | |
| parent | 4fa8fd739a09e4ddd424e434fe174e3180d2f233 (diff) | |
| download | rulesets-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.org | 54 |
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. |
