diff --git a/.veritas-kanban/notifications.json b/.veritas-kanban/notifications.json index 4fb8f7fa..9e7488f5 100644 --- a/.veritas-kanban/notifications.json +++ b/.veritas-kanban/notifications.json @@ -14,5 +14,26 @@ "id": "notif_1769423660779_4zehvs", "timestamp": "2026-01-26T10:34:20.779Z", "sent": true + }, + { + "type": "agent_failed", + "title": "Agent Run Failed", + "message": "**test-agent** failed on \"US-1009: Failure alerts to Teams\"\n\n**Error:** Test error for failure alert", + "taskId": "task_20260128_XGU2QA", + "taskTitle": "US-1009: Failure alerts to Teams", + "project": "veritas-kanban", + "id": "notif_1769608558978_viws7i", + "timestamp": "2026-01-28T13:55:58.978Z", + "sent": true + }, + { + "type": "agent_failed", + "title": "Agent Run Failed", + "message": "**claude-code** failed on \"US-1004: Token & cost tracking integration\"\n\n**Error:** Task failed due to compilation errors", + "taskId": "task_20260128_bDBHgJ", + "taskTitle": "US-1004: Token & cost tracking integration", + "id": "notif_1769608574350_bibh40", + "timestamp": "2026-01-28T13:56:14.350Z", + "sent": false } ] \ No newline at end of file diff --git a/.veritas-kanban/telemetry/events-2026-01-28.ndjson b/.veritas-kanban/telemetry/events-2026-01-28.ndjson index f3a880c8..f746639d 100644 --- a/.veritas-kanban/telemetry/events-2026-01-28.ndjson +++ b/.veritas-kanban/telemetry/events-2026-01-28.ndjson @@ -849,3 +849,73 @@ {"type":"task.created","taskId":"task_20260128_PSE8I7","project":"project-b","status":"todo","id":"evt_yAprRzM4HNCq","timestamp":"2026-01-28T13:54:44.968Z"} {"type":"task.created","taskId":"task_20260128_fgcujz","status":"todo","id":"evt_LQBJCGzoqBI0","timestamp":"2026-01-28T13:54:44.975Z"} {"type":"task.status_changed","taskId":"task_20260128_bDBHgJ","project":"veritas-kanban","status":"done","previousStatus":"in-progress","id":"evt_H7lh5oervWqX","timestamp":"2026-01-28T13:55:36.904Z"} +{"type":"task.status_changed","taskId":"task_20260126_legacy1","status":"blocked","previousStatus":"review","id":"evt_aT63YQJjM_I0","timestamp":"2026-01-28T13:55:43.424Z"} +{"type":"task.created","taskId":"task_20260128_S7Oyq-","project":"my-project","status":"todo","id":"evt_WZzmDgM5X9J_","timestamp":"2026-01-28T13:55:43.434Z"} +{"type":"task.created","taskId":"task_20260128_9DSTYn","status":"todo","id":"evt_GRoGa97cqKoc","timestamp":"2026-01-28T13:55:43.436Z"} +{"type":"task.created","taskId":"task_20260128_PfTGB7","status":"todo","id":"evt_KuhnxMWdUta-","timestamp":"2026-01-28T13:55:43.440Z"} +{"type":"task.created","taskId":"task_20260128_GDvwcK","status":"todo","id":"evt_SthK5g1x92dS","timestamp":"2026-01-28T13:55:43.440Z"} +{"type":"task.status_changed","taskId":"task_20260128_PfTGB7","status":"in-progress","previousStatus":"todo","id":"evt_mTlpNpWuM2fK","timestamp":"2026-01-28T13:55:43.442Z"} +{"type":"task.created","taskId":"task_20260128_yAL9va","status":"todo","id":"evt_bvc_EbVGqmB2","timestamp":"2026-01-28T13:55:43.443Z"} +{"type":"task.status_changed","taskId":"task_20260128_yAL9va","status":"blocked","previousStatus":"todo","id":"evt_GMv5Nff2hrLt","timestamp":"2026-01-28T13:55:43.446Z"} +{"type":"task.created","taskId":"task_20260128_ltr7Rh","status":"todo","id":"evt_u2H7fbwIOebT","timestamp":"2026-01-28T13:55:43.446Z"} +{"type":"task.created","taskId":"task_20260128_O_hvyi","status":"todo","id":"evt_kje4VQ2QmxMc","timestamp":"2026-01-28T13:55:43.447Z"} +{"type":"task.status_changed","taskId":"task_20260128_O_hvyi","status":"done","previousStatus":"todo","id":"evt_SSU_pow33hb5","timestamp":"2026-01-28T13:55:43.452Z"} +{"type":"task.created","taskId":"task_20260128_guik3b","status":"todo","id":"evt_GV7mM-VzVtjX","timestamp":"2026-01-28T13:55:43.452Z"} +{"type":"task.created","taskId":"task_20260128_PWpdLM","status":"todo","id":"evt_RbIi7woh3EjF","timestamp":"2026-01-28T13:55:43.453Z"} +{"type":"task.status_changed","taskId":"task_20260126_idem1","status":"blocked","previousStatus":"review","id":"evt_5D0nCY8e1-aw","timestamp":"2026-01-28T13:55:43.462Z"} +{"type":"task.created","taskId":"task_20260128_0np1C7","status":"todo","id":"evt_IeSjRFURmCAU","timestamp":"2026-01-28T13:55:43.465Z"} +{"type":"task.status_changed","taskId":"task_20260128_guik3b","status":"in-progress","previousStatus":"todo","id":"evt_0O7j1Jx8Ft5R","timestamp":"2026-01-28T13:55:43.466Z"} +{"type":"task.created","taskId":"task_20260128_edl2EE","status":"todo","id":"evt_ClJ2l8CzyN5l","timestamp":"2026-01-28T13:55:43.472Z"} +{"type":"task.created","taskId":"task_20260128_v26wy5","status":"todo","id":"evt_r9DqvmrHV5__","timestamp":"2026-01-28T13:55:43.475Z"} +{"type":"task.created","taskId":"task_20260128_2aDSQb","status":"todo","id":"evt_Xf4mSLPrnNFG","timestamp":"2026-01-28T13:55:43.475Z"} +{"type":"task.status_changed","taskId":"task_20260126_multi1","status":"blocked","previousStatus":"review","id":"evt_GcYnLVlW5oZR","timestamp":"2026-01-28T13:55:43.479Z"} +{"type":"task.created","taskId":"task_20260128_o-t91f","status":"todo","id":"evt_5jDYGkuLqHE1","timestamp":"2026-01-28T13:55:43.481Z"} +{"type":"task.status_changed","taskId":"task_20260126_multi2","status":"blocked","previousStatus":"review","id":"evt_AK0_idGkpWiP","timestamp":"2026-01-28T13:55:43.483Z"} +{"type":"task.created","taskId":"task_20260128_NCOa9n","status":"todo","id":"evt_f10y2PLMrzBV","timestamp":"2026-01-28T13:55:43.484Z"} +{"type":"task.created","taskId":"task_20260128_Yy44yW","status":"todo","id":"evt_XkSYpbnURQPi","timestamp":"2026-01-28T13:55:43.493Z"} +{"type":"task.created","taskId":"task_20260128_lqGktg","status":"todo","id":"evt_kwFzmbGTz-9Y","timestamp":"2026-01-28T13:55:43.494Z"} +{"type":"task.created","taskId":"task_20260128_bPIrW_","status":"todo","id":"evt_ayi6HmkNhb0i","timestamp":"2026-01-28T13:55:43.498Z"} +{"type":"task.created","taskId":"task_20260128_wrcyj2","project":"test-project","status":"todo","id":"evt_X37clakx2Ouu","timestamp":"2026-01-28T13:55:43.502Z"} +{"type":"task.created","taskId":"task_20260128_ZniydC","status":"todo","id":"evt_BW-odyjRXaHU","timestamp":"2026-01-28T13:55:43.508Z"} +{"type":"task.restored","taskId":"task_20260126_arch1","status":"done","id":"evt_sBlry7tV6xp7","timestamp":"2026-01-28T13:55:43.510Z"} +{"type":"task.created","taskId":"task_20260128_QuPAL4","status":"todo","id":"evt_GtPnYC9Bi1DF","timestamp":"2026-01-28T13:55:43.514Z"} +{"type":"task.status_changed","taskId":"task_20260126_arch1","status":"blocked","previousStatus":"done","id":"evt_Sp17a5k40Ylk","timestamp":"2026-01-28T13:55:43.514Z"} +{"type":"task.archived","taskId":"task_20260126_arch1","status":"blocked","id":"evt_Caf3Ez8itp8t","timestamp":"2026-01-28T13:55:43.515Z"} +{"type":"task.created","taskId":"task_20260128_wDvO1r","status":"todo","id":"evt_HKhvvxz7RHpS","timestamp":"2026-01-28T13:55:43.518Z"} +{"type":"task.archived","taskId":"task_20260128_wDvO1r","status":"todo","id":"evt_tRsGr2tpphqC","timestamp":"2026-01-28T13:55:43.522Z"} +{"type":"task.created","taskId":"task_20260128_Z6ajmB","status":"todo","id":"evt_UOc6uiHCY6pQ","timestamp":"2026-01-28T13:55:43.523Z"} +{"type":"task.created","taskId":"task_20260128_yDZmGt","status":"todo","id":"evt_APhlUAms7CDq","timestamp":"2026-01-28T13:55:43.524Z"} +{"type":"task.created","taskId":"task_20260128_6ZhYPN","status":"todo","id":"evt_gxUbm0PyeN6l","timestamp":"2026-01-28T13:55:43.531Z"} +{"type":"task.status_changed","taskId":"task_20260128_yDZmGt","status":"in-progress","previousStatus":"todo","id":"evt_Smg0yKVGgZSM","timestamp":"2026-01-28T13:55:43.531Z"} +{"type":"task.created","taskId":"task_20260128_Tm7RyF","status":"todo","id":"evt_WWJjNU9n4gKX","timestamp":"2026-01-28T13:55:43.536Z"} +{"type":"task.created","taskId":"task_20260128_cjEdie","status":"todo","id":"evt_cI6Z0TE4PxiH","timestamp":"2026-01-28T13:55:43.539Z"} +{"type":"task.created","taskId":"task_20260128_b6rQJ_","status":"todo","id":"evt_64di4D_Lj3Ti","timestamp":"2026-01-28T13:55:43.544Z"} +{"type":"task.created","taskId":"task_20260128_vx4hv7","status":"todo","id":"evt_M2nZ7wGLR25o","timestamp":"2026-01-28T13:55:43.544Z"} +{"type":"task.created","taskId":"task_20260128_-w5ykJ","status":"todo","id":"evt_kO7j-xAAquJJ","timestamp":"2026-01-28T13:55:43.554Z"} +{"type":"task.created","taskId":"task_20260128_CGpCs0","status":"todo","id":"evt_v2WKecYkuCCN","timestamp":"2026-01-28T13:55:43.557Z"} +{"type":"task.created","taskId":"task_20260128_Eb02GZ","status":"todo","id":"evt_cM5rsjiPOe41","timestamp":"2026-01-28T13:55:43.562Z"} +{"type":"task.created","taskId":"task_20260128_Gdymw4","status":"todo","id":"evt_N8Xk-_3ExE-c","timestamp":"2026-01-28T13:55:43.565Z"} +{"type":"task.created","taskId":"task_20260128_0w7CpK","status":"todo","id":"evt_GClD534d17-w","timestamp":"2026-01-28T13:55:43.568Z"} +{"type":"task.created","taskId":"task_20260128_8rGTfJ","status":"todo","id":"evt_wK2VDKt0w00N","timestamp":"2026-01-28T13:55:43.572Z"} +{"type":"task.created","taskId":"task_20260128_wUqIEl","status":"todo","id":"evt_5seTnh-fUhaW","timestamp":"2026-01-28T13:55:43.572Z"} +{"type":"task.created","taskId":"task_20260128_nMcZKB","status":"todo","id":"evt_NMf9nMAx0z_x","timestamp":"2026-01-28T13:55:43.573Z"} +{"type":"task.created","taskId":"task_20260128_Fk5RPb","status":"todo","id":"evt__gaGbQ54BN2z","timestamp":"2026-01-28T13:55:43.574Z"} +{"type":"task.created","taskId":"task_20260128_DrbUKY","status":"todo","id":"evt_n8MNsWFuT0jT","timestamp":"2026-01-28T13:55:43.576Z"} +{"type":"task.created","taskId":"task_20260128_CdpV7M","status":"todo","id":"evt_KX0hSQTMPuz0","timestamp":"2026-01-28T13:55:43.578Z"} +{"type":"task.created","taskId":"task_20260128_rlOWHi","status":"todo","id":"evt_ctykuPoDKlKk","timestamp":"2026-01-28T13:55:43.586Z"} +{"type":"task.created","taskId":"task_20260128_ch9PnD","status":"todo","id":"evt_tVkiHxy0o8Pl","timestamp":"2026-01-28T13:55:43.589Z"} +{"type":"task.created","taskId":"task_20260128_om84xq","status":"todo","id":"evt_qcyeNrWnZMcS","timestamp":"2026-01-28T13:55:43.599Z"} +{"type":"task.created","taskId":"task_20260128_Fdndgw","status":"todo","id":"evt_28ZaHXgcSG08","timestamp":"2026-01-28T13:55:43.605Z"} +{"type":"task.created","taskId":"task_20260128_U0F3AW","status":"todo","id":"evt_SlEJwb29gxD1","timestamp":"2026-01-28T13:55:43.612Z"} +{"type":"task.created","taskId":"task_20260128_JvMGU-","project":"project-a","status":"todo","id":"evt_i8bzJxNLpIeL","timestamp":"2026-01-28T13:55:43.621Z"} +{"type":"task.created","taskId":"task_20260128_fDDB5h","project":"project-a","status":"todo","id":"evt_tPj-kpQdMTNs","timestamp":"2026-01-28T13:55:43.622Z"} +{"type":"task.created","taskId":"task_20260128_fgT8PX","project":"project-b","status":"todo","id":"evt_2BVzEq9uU7SC","timestamp":"2026-01-28T13:55:43.623Z"} +{"type":"task.created","taskId":"task_20260128_6jmQK2","status":"todo","id":"evt_a4MLluDMPq6p","timestamp":"2026-01-28T13:55:43.638Z"} +{"type":"task.status_changed","taskId":"task_20260128_eib_Vw","project":"veritas-kanban","status":"done","previousStatus":"in-progress","id":"evt_XQoFQ58o8X4x","timestamp":"2026-01-28T13:55:51.293Z"} +{"type":"task.status_changed","taskId":"task_20260128_jpuZZy","project":"veritas-kanban","status":"done","previousStatus":"in-progress","id":"evt_urlZmnrsLyL9","timestamp":"2026-01-28T13:55:58.538Z"} +{"taskId":"task_20260128_XGU2QA","project":"veritas-kanban","type":"run.error","agent":"test-agent","error":"Test error for failure alert","id":"evt_mSBur0mYgAc3","timestamp":"2026-01-28T13:55:58.974Z"} +{"type":"task.status_changed","taskId":"task_20260128_hdcQAe","project":"veritas-kanban","status":"in-progress","previousStatus":"todo","id":"evt_Sh3Suv0iatXn","timestamp":"2026-01-28T13:56:03.568Z"} +{"taskId":"task_20260128_XGU2QA","project":"veritas-kanban","type":"run.error","agent":"test-agent","error":"Another error - should be deduplicated","id":"evt_w3U_HJqjBYqa","timestamp":"2026-01-28T13:56:08.061Z"} +{"taskId":"task_20260128_bDBHgJ","type":"run.completed","agent":"claude-code","success":false,"durationMs":45000,"error":"Task failed due to compilation errors","id":"evt_CV0y0Ybk-V7b","timestamp":"2026-01-28T13:56:14.346Z"} +{"taskId":"task_new_test","type":"run.completed","agent":"claude-code","success":true,"durationMs":30000,"id":"evt_uqLGglXXyHoa","timestamp":"2026-01-28T13:56:19.099Z"} +{"type":"task.status_changed","taskId":"task_20260128_hdcQAe","project":"veritas-kanban","status":"done","previousStatus":"in-progress","id":"evt_3zn09ACfnoVR","timestamp":"2026-01-28T13:56:21.106Z"} diff --git a/scripts/update-status.sh b/scripts/update-status.sh new file mode 100755 index 00000000..43d64cf2 --- /dev/null +++ b/scripts/update-status.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# update-status.sh - Agent status reporting for Veritas Kanban +# Usage: +# update-status.sh working [taskId] [taskTitle] +# update-status.sh thinking +# update-status.sh sub-agent [count] +# update-status.sh idle +# update-status.sh error [message] + +set -e + +API_URL="${VERITAS_API_URL:-http://localhost:3001}/api/agent/status" +TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + +status="${1:-idle}" +shift 2>/dev/null || true + +build_payload() { + local json="{\"status\":\"$status\",\"timestamp\":\"$TIMESTAMP\"" + + case "$status" in + working) + if [[ -n "$1" ]]; then + json+=",\"taskId\":\"$1\"" + fi + if [[ -n "$2" ]]; then + json+=",\"taskTitle\":\"$2\"" + fi + ;; + sub-agent) + if [[ -n "$1" ]]; then + json+=",\"count\":$1" + fi + ;; + error) + if [[ -n "$1" ]]; then + # Escape double quotes in message + local escaped_msg="${1//\"/\\\"}" + json+=",\"message\":\"$escaped_msg\"" + fi + ;; + esac + + json+="}" + echo "$json" +} + +payload=$(build_payload "$@") + +# POST to API, fail silently (don't block workflow if status update fails) +curl -s -X POST "$API_URL" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + --connect-timeout 2 \ + --max-time 5 \ + >/dev/null 2>&1 || true + +exit 0 diff --git a/server/.veritas-kanban/activity.json b/server/.veritas-kanban/activity.json index f3f32430..a44dbf21 100644 --- a/server/.veritas-kanban/activity.json +++ b/server/.veritas-kanban/activity.json @@ -1,4 +1,92 @@ [ + { + "id": "activity_1769608581121_ujw4262bu", + "type": "comment_added", + "taskId": "task_20260128_hdcQAe", + "taskTitle": "US-1304: Veritas status reporting integration", + "details": { + "author": "Veritas", + "preview": "Created scripts/update-status.sh with support for ..." + }, + "timestamp": "2026-01-28T13:56:21.121Z" + }, + { + "id": "activity_1769608581106_6m8xn709e", + "type": "status_changed", + "taskId": "task_20260128_hdcQAe", + "taskTitle": "US-1304: Veritas status reporting integration", + "details": { + "from": "in-progress", + "status": "done" + }, + "timestamp": "2026-01-28T13:56:21.106Z" + }, + { + "id": "activity_1769608563569_om3ptc6cq", + "type": "status_changed", + "taskId": "task_20260128_hdcQAe", + "taskTitle": "US-1304: Veritas status reporting integration", + "details": { + "from": "todo", + "status": "in-progress" + }, + "timestamp": "2026-01-28T13:56:03.569Z" + }, + { + "id": "activity_1769608558562_kjuwi9y5q", + "type": "comment_added", + "taskId": "task_20260128_jpuZZy", + "taskTitle": "US-1002: Task metrics panel", + "details": { + "author": "Veritas", + "preview": "Added Task Metrics Panel to TaskDetailPanel. New M..." + }, + "timestamp": "2026-01-28T13:55:58.562Z" + }, + { + "id": "activity_1769608558539_ola8jqmyv", + "type": "status_changed", + "taskId": "task_20260128_jpuZZy", + "taskTitle": "US-1002: Task metrics panel", + "details": { + "from": "in-progress", + "status": "done" + }, + "timestamp": "2026-01-28T13:55:58.539Z" + }, + { + "id": "activity_1769608551314_0deh1lqd6", + "type": "comment_added", + "taskId": "task_20260128_eib_Vw", + "taskTitle": "RF-04: Add Comprehensive Test Suite", + "details": { + "author": "Veritas", + "preview": "Added comprehensive integration tests for critical..." + }, + "timestamp": "2026-01-28T13:55:51.314Z" + }, + { + "id": "activity_1769608551294_epq3nwhkp", + "type": "status_changed", + "taskId": "task_20260128_eib_Vw", + "taskTitle": "RF-04: Add Comprehensive Test Suite", + "details": { + "from": "in-progress", + "status": "done" + }, + "timestamp": "2026-01-28T13:55:51.294Z" + }, + { + "id": "activity_1769608542757_7tyo9v50s", + "type": "comment_added", + "taskId": "task_20260128_bDBHgJ", + "taskTitle": "US-1004: Token & cost tracking integration", + "details": { + "author": "Veritas", + "preview": "Created scripts/get-session-tokens.sh - extracts t..." + }, + "timestamp": "2026-01-28T13:55:42.757Z" + }, { "id": "activity_1769608536904_avd2nslq0", "type": "status_changed",