name: kanban-audit description: 4 óránkénti kanban-tábla audit. Tisztítás (7+ napos done archiválás) + beakadt task-ok számon kérése (előző audit óta nem mozdult in_progress -> ping az assignee-nek).
Kanban 4 órás audit
Mikor fut
- 8:00, 12:00, 16:00, 20:00 (kanban-audit cron 0 8,12,16,20)
Autonómia-szint (config-vezérelt, KÖTELEZŐ ELŐSZÖR)
Olvasd be: jq -r '.categories[]|select(.key=="kanban_archive_done" or .key=="kanban_stuck_nudge")|"\(.key) \(.level)"' {{INSTALL_DIR}}/store/autonomy-config.json
A két kategória szintje szabályozza a 2. és 4. lépést:
kanban_archive_done(2. lépés): level 3 → archiváld magától (alapért). level 2 → NE archiválj, Telegramon javasold ("X db 7+ napos done archiválásra vár, mehet?") és várj jóváhagyást. level 1 → csak jelezd a számot.kanban_stuck_nudge(4. lépés): level 3 → pingeld az assignee-t magától, és CSAK 2 eredménytelen audit-kör után eszkalálj a tulajdonoshoz ({{OWNER_NAME}}) (a komment-történetből látod hányszor pingelted). level 2 → ne pingelj magadtól, Telegramon javasold a tulajdonosnak ({{OWNER_NAME}}). level 1 → csak listázd a beakadt taskokat.
Ha a config hiányzik vagy a kulcs nincs benne → default level 3 (régi viselkedés).
Eljárás
State-fájl beolvasás:
store/kanban-audit-state.jsontartalmazzalast_audit_atUnix timestampet. Első futáskor null -> ne pingelj senkit, csak állítsd be a state-et.Tisztítás: 7+ napos done kártyák archiválása:
sqlite3 {{INSTALL_DIR}}/store/claudeclaw.db "UPDATE kanban_cards SET archived_at=unixepoch() WHERE status='done' AND archived_at IS NULL AND updated_at < strftime('%s','now','-7 days')"Beakadt task detection (előző audit óta nem mozdult): in_progress kártyák amik
updated_at < last_audit_at:LAST=$(jq -r .last_audit_at store/kanban-audit-state.json 2>/dev/null || echo 0) sqlite3 store/claudeclaw.db "SELECT id, title, assignee, ROUND((strftime('%s','now')-updated_at)/3600.0,1) as hours_stale FROM kanban_cards WHERE status='in_progress' AND archived_at IS NULL AND updated_at < $LAST ORDER BY hours_stale DESC"Beakadt task -> ping: minden beakadt kártyához küldj inter-agent message-t az assignee-nek (kivéve {{MAIN_AGENT_ID}}-nek és üres assignee-nek):
"Kanban-audit: a {card_id} ({title}) {hours_stale}h-ja in_progress mozgás nélkül (előző audit óta). Frissítsd a státuszt (done/waiting) vagy adj komment-et hogy mit blokkol."State-fájl frissítés (a futás VÉGÉN):
store/kanban-audit-state.json->{"last_audit_at": <current Unix timestamp>}.Delegálatlan kártyák: in_progress/waiting/planned amiknek assignee NULL/üres -> log + Telegram csak akkor ha 3+ ilyen van.
Telegram csak akkor írj ha:
- 3+ beakadt task van (kritikus)
- Új blokker (waiting > 48h)
- Egyébként csendben (heartbeat-stílus)
Buktatók
- Az "előző audit óta nem mozdult" feltétel azt jelenti:
updated_at < last_audit_at. NE használj abszolút 24h-os küszöböt. - Ne archiválj done-t ha <7 nap (a felhasználó még látni akarja).
- NE pingelj saját magadat (skip ha assignee='{{MAIN_AGENT_ID}}').
- Ne re-pingelj 4 órán belül ugyanazt: a state-fájlban tárolt
last_audit_atautomatikusan kezeli ezt. - Első futáskor (state-fájl üres) -> ne pingelj, csak inicializáld a state-et.
- A státuszváltozás (in_progress -> done) is updated_at frissítést jelent, így a következő audit nem fogja megfogni a most-még-aktív taskokat.
Ellenőrzés
- A state-fájl frissült a futás végén.
- Inter-agent message-ek sikeresek (200 response).