aboutsummaryrefslogtreecommitdiff
path: root/.ai/workflows/sentry.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-19 15:35:13 -0500
committerCraig Jennings <c@cjennings.net>2026-07-19 15:35:13 -0500
commitbeb7f0bb76eaf0da3afd07fb8617361361556882 (patch)
treed133908967f477ae352ed0c969616a147ccfb7c5 /.ai/workflows/sentry.org
parent8c0a56bf2d7e81e4876919f120004aa011365327 (diff)
downloadrulesets-beb7f0bb76eaf0da3afd07fb8617361361556882.tar.gz
rulesets-beb7f0bb76eaf0da3afd07fb8617361361556882.zip
fix(roam): scope the work-denylist to durable KB-node writes, not roam tidying
The sentry live trial surfaced this. A sentry inbox-zero pass running from the work project parked the whole 19-item roam inbox as a cross-project boundary crossing and refused to tidy it unattended, reading knowledge-base.md's work-denylist as "don't touch roam from work." That over-reads the rule. The denylist is a confidentiality guard on one thing: promoting a durable fact into a new agents/ node, so work-confidential material stays out of the personal cross-machine store. Roam is a shared resource, not another project's product scope. Reading it and tidying the shared roam inbox are housekeeping any project may do, work included. knowledge-base.md gains a "Scope of the denylist" paragraph stating that and naming the mis-park as the error it closes. sentry.org's inbox-zero pass and inbox.org's roam mode each get a one-line note pointing at the rule, so a future agent doesn't re-derive the refusal. Only durable-node promotion stays work-denylisted.
Diffstat (limited to '.ai/workflows/sentry.org')
-rw-r--r--.ai/workflows/sentry.org2
1 files changed, 1 insertions, 1 deletions
diff --git a/.ai/workflows/sentry.org b/.ai/workflows/sentry.org
index eb276df..56f0c96 100644
--- a/.ai/workflows/sentry.org
+++ b/.ai/workflows/sentry.org
@@ -127,7 +127,7 @@ In order. Each names its detection probe. A pass whose probe fails is one skip l
1. *Roam pull* — =git -C ~/org/roam pull --ff-only=. Probe: =~/org/roam= is a git clone. Skipped when the roam tree is dirty (roam-sync owns that case) or the clone is absent. Read-only and ff-only — the one narrow exception to "don't touch roam git," so later passes read a fresh tree.
-2. *Inbox zero* — run =inbox.org= roam mode under the no-approvals contract: quick+solo+agreed items execute, shared-asset and convention proposals park (prepared diff, =VERIFY= task, sender reply) in the approval queue. Edits to =~/org/roam/inbox.org= take the roam-write lock + =capture-guard=. Probe: the roam clone or a project =inbox/= exists.
+2. *Inbox zero* — run =inbox.org= roam mode under the no-approvals contract: quick+solo+agreed items execute, shared-asset and convention proposals park (prepared diff, =VERIFY= task, sender reply) in the approval queue. Edits to =~/org/roam/inbox.org= take the roam-write lock + =capture-guard=. Probe: the roam clone or a project =inbox/= exists. Tidying the shared roam inbox is allowed from *any* project session, work included — it's housekeeping on a shared resource, not a durable KB-node write, so the work-denylist doesn't gate it (=knowledge-base.md=). Never park it as a cross-project boundary crossing.
3. *Triage intake* — run =triage-intake.org=. Probe: triage source plugins present for this project. Destructive actions (deleting, archiving, sending) queue; they never fire unattended.