Files
box/muse-choices-rules.json
T

45 lines
1.9 KiB
JSON
Raw Normal View History

{
"_schema": "muse-choices-rules/v1",
"_notes": [
"Deny/hold dictionary for the muse-choices daemon (decisions D0-D4).",
"First matching rule wins. Fields: id (required), kind (str|list, optional),",
"token (str|list, exact match on explicit-phrase key, optional), command",
"(regex on the approval $ block, approval kinds only, optional), text",
"(regex on cue+options, optional), decision (approve|deny|hold), reason.",
"Deny rules apply to permission kinds only (muse-approval, yn) and are",
"skipped for question kinds (D2). No match => approve top-choice (D4).",
"Seed policy: risky => hold (operator window, then approve). No active",
"deny rules yet -- add them from experience, one at a time, with tests."
],
"version": 1,
"rules": [
{
"id": "explicit-destructive-token",
"kind": "explicit-phrase",
"token": ["ABORT", "DELETE", "DESTROY", "WIPE", "KILL"],
"decision": "hold",
"reason": "destructive magic word; hold for operator eyes"
},
{
"id": "grill-interview-hold",
"kind": "numbered-plain",
"decision": "hold",
"reason": "grill interview question; coordinator sign-off required, never expires to approve"
},
{
"id": "cmd-destructive-shell",
"kind": ["muse-approval", "muse-approval-collapsed"],
"command": "\\brm\\s+-rf?\\b|\\bmkfs\\b|\\bdd\\s+[^\\n]*\\bof=|\\b(shutdown|reboot|halt|poweroff)\\b|git\\s+push\\S*\\s+--force\\b|git\\s+reset\\s+--hard\\b|\\bterraform\\s+(destroy|apply)\\b",
"decision": "hold",
"reason": "destructive shell command; hold for operator eyes"
},
{
"id": "cmd-database-drop",
"kind": ["muse-approval", "muse-approval-collapsed"],
"command": "(?i)\\bdrop\\s+(table|database|schema)\\b|\\btruncate\\s+table\\b",
"decision": "hold",
"reason": "destructive database statement; hold for operator eyes"
}
]
}