From 5aff87d3d138a05cb4831c05306532583b604a79 Mon Sep 17 00:00:00 2001 From: Roberto Cano <3525807+robercano@users.noreply.github.com> Date: Thu, 30 Jul 2026 11:41:26 +0200 Subject: [PATCH] chore(self): wire ntfy push notifications into the notify seam (issue #99 follow-up) Set the self-adapter's notify command to a curl one-liner posting to ntfy.sh. The topic name is machine-local (untracked .claude/state/ntfy-topic, so no secret lands in the repo per CLAUDE.md); a missing topic file degrades to a silent no-op, preserving notify.sh's offline/CI-safe contract. Co-Authored-By: Claude Fable 5 --- self/gates.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/self/gates.json b/self/gates.json index 19227d5..5668805 100644 --- a/self/gates.json +++ b/self/gates.json @@ -74,7 +74,7 @@ "baseBranch": "main" }, "_notify_note": "issue #99 — needs-human push-notification seam, read by .claude/scripts/notify.sh (GATES_FILE-aware, same empty-means-skip convention as `gates`/`budget`). Empty string here = disabled (offline/CI-safe no-op); left EMPTY deliberately for this repo's own dogfooding — the owner picks a default later. Contract: severity/title/body-line reach the configured command BOTH as positional args ($1/$2/$3) and as NOTIFY_SEVERITY/NOTIFY_TITLE/NOTIFY_BODY env vars. Called by .claude/scripts/needs-human.sh's needs_human_flag() at every loop block-on-owner point (attempt-budget/stall escalation in loop-tick.sh, PR-ready-for-review/re-approval-needed in merge-ready.sh, CHANGES_REQUESTED-addressed-awaiting-re-review in pr-feedback.sh), throttled to one notification per (kind,target) per window (default 1800s, see notify.sh). Example commands (uncomment/adapt ONE):\n ntfy: curl -s -d \"$NOTIFY_BODY\" -H \"Title: $NOTIFY_TITLE\" -H \"Priority: $NOTIFY_SEVERITY\" ntfy.sh/\n notify-send: notify-send \"$NOTIFY_TITLE\" \"$NOTIFY_BODY\"\n webhook: curl -s -X POST -H 'Content-Type: application/json' -d \"{\\\"severity\\\":\\\"$NOTIFY_SEVERITY\\\",\\\"title\\\":\\\"$NOTIFY_TITLE\\\",\\\"body\\\":\\\"$NOTIFY_BODY\\\"}\" https://example.invalid/hook", - "notify": "", + "notify": "curl -s --max-time 10 -d \"$NOTIFY_BODY\" -H \"Title: [reCode loop] $NOTIFY_TITLE\" -H \"Priority: $NOTIFY_SEVERITY\" \"ntfy.sh/$(cat .claude/state/ntfy-topic 2>/dev/null)\"", "_commentFix_note": "issue #96 (part 2) — bot-commenter allowlist for the comment-fix reaction, read by .claude/scripts/pr-comment-fix.sh. commentFix.botAllowlist: bot GitHub logins whose inline PR review comments ALSO qualify a thread for automated comment-fix, in addition to the repo owner (who always qualifies). Empty array = disabled (only the owner's own review threads trigger it) — left empty here, same as the root adapter; the owner picks a default later.", "commentFix": { "botAllowlist": []