From d060e40ad7511119bf0c22cd0e4ebbc4478254f3 Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Sat, 21 Mar 2026 15:11:10 -0700 Subject: [PATCH] Require reason field for ignore actions --- src/void_tools/cli.py | 6 +++++- src/void_tools/constitutional_linter.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/void_tools/cli.py b/src/void_tools/cli.py index 3bdea01..bf33979 100644 --- a/src/void_tools/cli.py +++ b/src/void_tools/cli.py @@ -302,6 +302,7 @@ def cmd_sync(args): # 4. Ignore (Remove from inbox without replying) # - action: ignore # target_id: "notif_2" +# reason: "spam" # Required: spam, duplicate, irrelevant, admin_skip, etc. # """ template = { @@ -360,7 +361,10 @@ def cmd_dispatch(args): if action_type == "ignore": if target_id: processed_targets.add(target_id) - print(f"Ignoring {target_id}.") + reason = act.get("reason", "unspecified") + if reason == "unspecified": + print(f" Warning: Ignore action for {target_id} lacks required 'reason' field.") + print(f"Ignoring {target_id} (reason: {reason}).") continue posts = act.get("posts", []) diff --git a/src/void_tools/constitutional_linter.py b/src/void_tools/constitutional_linter.py index 6987012..e26b04c 100755 --- a/src/void_tools/constitutional_linter.py +++ b/src/void_tools/constitutional_linter.py @@ -51,6 +51,15 @@ def lint_outbox(filepath): has_errors = False for action in data['actions']: + # Validate ignore actions have reasons + if action.get('action') == 'ignore': + target_id = action.get('target_id', 'unknown') + reason = action.get('reason') + if not reason: + has_errors = True + logging.error(f"Target: {target_id} | Ignore action missing required 'reason' field.") + continue + if action.get('action') == 'reply' and 'posts' in action: # Check for contextual override override = action.get('override_tropes', False) -- 2.51.2