Investigation findings:
t1200 (IP reputation check agent) was broken into 6 subtasks, all of which merged successfully:
| Subtask | PR | Status |
|---|---|---|
| t1200.1 Core orchestrator + free-tier providers | #1856 | MERGED |
| t1200.2 Keyed providers + SQLite cache + batch mode | #1860 | MERGED |
| t1200.3 Agent doc + slash command + index updates | #1867 | MERGED |
| t1200.4 Core IP reputation lookup module | #1871 | MERGED |
| t1200.5 CLI and agent framework integration | #1883 | MERGED |
| t1200.6 Output formatting, caching layer, rate limit handling | #1911 | MERGED |
Deliverables verified on main:
.agents/scripts/ip-reputation-helper.sh— present.agents/tools/security/ip-reputation.md— present
Root cause of t1274 dispatch: The supervisor recorded blocked:merge_conflict for the
parent t1200 task. This was a false alarm — the parent branch (feature/t1200) had no
divergent commits (it was at the same SHA as origin/main). All feature work was
implemented via subtask branches. The parent t1200 task simply needs to be marked [x]
complete by the supervisor since all subtasks have pr: proof-log entries.
Action taken: No code changes needed. This PR serves as the proof-log entry for t1274.
The supervisor should mark t1200 complete based on all subtasks being [x] with merged PRs.
t1274 verified:2026-02-20 pr:#2020
t1255 requested investigation of 15 webapp subtasks not being dispatched, with 3 verification points: (1) supervisor pulse scans all registered repos, (2) webapp tasks have correct repo path in supervisor DB, (3) cross-repo concurrency fairness (t1188.2) is functioning.
All 3 points were fully investigated and resolved by t1253 (merged PR #1959, 2026-02-19T11:11:21Z).
cmd_next in state.sh:1004-1017 filtered subtasks whose earlier siblings were "still
active" using status NOT IN ('verified','cancelled','deployed','complete'). This omitted
failed and blocked — both terminal states for sibling ordering purposes:
t007.1wasfailed(3/3 retries exhausted), blocking t007.2-t007.8t004.2andt005.1wereblocked, preventing t004.3-t004.5 and t005.2-t005.6
Fix: Added 'failed' and 'blocked' to the NOT IN terminal states list in the
sibling ordering SQL query (consistent with todo-sync.sh:1443 which already included both).
| Verification Point | Finding |
|---|---|
| Supervisor pulse scans all registered repos | TRUE — pulse scans all repos; issue was upstream in sibling filter |
| webapp tasks have correct repo path in supervisor DB | TRUE — all 15 subtasks were in batch-20260218143815-69271 |
| Cross-repo concurrency fairness (t1188.2) functioning | TRUE — fairness logic in cmd_next is correct; sibling filter eliminated all webapp candidates before fairness ran |
- webapp tasks not in supervisor batch — FALSE
- Cross-repo fairness not routing to webapp — FALSE
- Parent task
@marcusassignee blocking subtask dispatch — FALSE (cmd_auto_pickupchecks subtask's own line, not parent's) - Subtasks lack
#auto-dispatchtags — FALSE (all subtasks had#auto-dispatchand werequeuedin supervisor DB)
Closes #1960
t1181 requested a cooldown mechanism to prevent the supervisor from acting on the same target within N cycles when the target's state hasn't changed. This requirement is fully satisfied by t1179 (cycle-aware dedup), which was merged in PR #1779.
t1179 delivers every capability t1181 specified:
| t1181 Requirement | t1179 Implementation | Location |
|---|---|---|
last_acted map in supervisor DB |
state_hash column in action_dedup_log |
database.sh:153 |
| Compute target state fingerprint | _compute_target_state_hash() |
ai-actions.sh:103-199 |
| Skip if same (target, action_type) with no state change | _is_duplicate_action() cycle-aware check |
ai-actions.sh:278-311 |
| Allow action if state changed | State hash comparison, return 1 if changed | ai-actions.sh:300-303 |
| Configurable window | AI_ACTION_DEDUP_WINDOW (default 5 cycles) |
ai-actions.sh:33 |
| Stats/reporting | dedup-stats subcommand with state change tracking |
ai-actions.sh:1774-1833 |
t1181 proposed a "third safety net" with a 2-cycle window alongside the 5-cycle dedup window. Since the dedup window (5 cycles) is a superset of the cooldown window (2 cycles), any action suppressed by a 2-cycle cooldown would already be suppressed by the 5-cycle dedup. The cycle-aware dedup IS the cooldown mechanism — it just uses a single, wider window instead of two overlapping windows.
ai-actions.sh: 0 errors, 0 warnings (5 info-level SC2016/SC1091 — intentional)
database.sh: 0 errors, 0 warnings, 0 info
VERIFY_COMPLETE — t1179 (PR #1779) fully satisfies the t1181 requirement. No additional code changes needed. The prior t1181 branch commits (3 commits on origin/feature/t1181) are superseded and should not be merged.
All 4 subtasks verified with merged PRs. Parent task t1081 is fully satisfied.
| Subtask | Description | PR | Merged | Files Changed |
|---|---|---|---|---|
| t1081.1 | Add daily skill check to auto-update-helper.sh cmd_check() | #1591 | 2026-02-17 23:57 UTC | auto-update-helper.sh (+488/-339) |
| t1081.2 | Add --non-interactive support to skill-update-helper.sh | #1630 | 2026-02-18 03:21 UTC | skill-update-helper.sh (+106/-27) |
| t1081.3 | Update auto-update state file schema | #1638 | 2026-02-18 03:28 UTC | auto-update-helper.sh (+23/-8) |
| t1081.4 | Update AGENTS.md and auto-update docs | #1639 | 2026-02-18 03:37 UTC | AGENTS.md (+7/-1) |
| Requirement | Delivered By | Verified |
|---|---|---|
| 24h freshness gate in auto-update-helper.sh | t1081.1 (#1591) | Yes — check_skill_freshness() with configurable AIDEVOPS_SKILL_FRESHNESS_HOURS |
| Call skill-update-helper.sh --auto-update --quiet | t1081.1 (#1591) | Yes — called in cmd_check() after version check |
| --auto-update and --quiet flags in skill-update-helper.sh | t1081.2 (#1630) | Yes — plus --non-interactive for full headless support |
| State file: last_skill_check, skill_updates_applied | t1081.3 (#1638) | Yes — in auto-update-state.json, displayed in cmd_status() |
| Documentation updated | t1081.4 (#1639) | Yes — AGENTS.md documents daily skill refresh and repo version wins |
No additional integration work needed. The subtasks collectively deliver:
- Layer 1 (t1081): Users get fresh skill docs locally within 24h via cron auto-update
- Opt-out:
AIDEVOPS_SKILL_AUTO_UPDATE=false - Configurable frequency:
AIDEVOPS_SKILL_FRESHNESS_HOURS=<hours>
- t1082: Maintainer skill-update PR pipeline (blocked-by:t1081)
t1081 verified:2026-02-18 pr:#1591,#1630,#1638,#1639
Root Cause (Strategy 4 head -50 bug):
cmd_auto_pickup() Strategy 4 collected parent IDs with head -50 | sort -u. With 242 #auto-dispatch parents in TODO.md (mostly completed), open parents with subtasks (t1120, t1264) were beyond position 50 and never processed. Their subtasks (t1120.1, t1120.2, t1120.4, t1264.2) were invisible to the dispatcher despite the parent having #auto-dispatch.
Deliverables:
| Deliverable | File | PR | Status |
|---|---|---|---|
| Fix Strategy 4 head -50 limit | .agents/scripts/supervisor/cron.sh |
#2026 | MERGED |
| Subtask-aware runners-check queue depth | .agents/scripts/commands/runners-check.md |
#2026 | MERGED |
| 3 orphan issue TODO entries (t1277-t1279) | TODO.md |
#2026 | MERGED |
| 3 stale GH issues closed (GH#1970, #1973, #2014) | TODO.md (pr: refs added) |
#2026 | MERGED |
Fix verification:
cron.shStrategy 4 now usesgrep -oE 't[0-9]+' | sort -uwith noheadlimit- Comment at line 764 documents the previous bug and fix
runners-check.mdreports: total open (parents + subtasks), dispatchable (tagged + inherited), blocked, claimed
Stale GH issues closed:
| Issue | Task | State |
|---|---|---|
| GH#1970 | t1260: Fix setup.sh launchd schedulers | CLOSED |
| GH#1973 | t1261: Fix dispatch stall | CLOSED |
| GH#2014 | t1273: Supervisor sanity-check | CLOSED |
t1276 verified:2026-02-21 pr:#2026