From cf6969733c6d576e16a6807b1d5f81e1767b9676 Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Wed, 6 May 2026 04:36:43 +0200 Subject: [PATCH] feat(M13): worker-loop pre-flight quota-check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drukt M13 pre-flight quota-gate op de batch-loop: - ALLOWED_TOOLS in run-agent.sh uitgebreid met mcp__scrum4me__get_worker_settings + worker_heartbeat (anders mag Claude ze niet aanroepen ondanks dat ze geregistreerd zijn). - CLAUDE.md operationele loop krijgt stap 0 vóór wait_for_job: get_worker_settings → bin/worker-quota-probe.sh → worker_heartbeat → sleep-tot-reset bij low quota. Hierna draait de complete keten end-to-end: worker meet quota, rapporteert aan server, NavBar toont stand-by-badge wanneer pct < user.min_quota_pct. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 11 +++++++++++ bin/run-agent.sh | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index cadeabc..3ffe6e7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,6 +26,17 @@ in de Scrum4Me-repo. Wanneer je geseed wordt met *"Pak de volgende job uit de Scrum4Me-queue"* of equivalent: +0. **Pre-flight quota-check** (M13). Vóór elke `wait_for_job`-aanroep: + 1. `mcp__scrum4me__get_worker_settings()` → `{ min_quota_pct }` + 2. `bash /opt/agent/bin/worker-quota-probe.sh` → JSON + `{ pct, reset_at_iso, ... }` + 3. `mcp__scrum4me__worker_heartbeat({ last_quota_pct: pct, + last_quota_check_at })` — server stuurt SSE-event zodat NavBar + stand-by-badge live updatet + 4. **Als `pct < min_quota_pct`**: log "stand-by, wachten tot + `reset_at_iso`", sleep tot dat tijdstip (cap op 1 uur), spring + terug naar stap 0.2 + 5. **Anders**: ga door naar stap 1 1. Roep `mcp__scrum4me__wait_for_job` aan. Geen argumenten, geen wait-time tweaken — de tool blokt zelf tot 600 s. 2. Als er een job geclaimd wordt: diff --git a/bin/run-agent.sh b/bin/run-agent.sh index d392c9c..9097261 100644 --- a/bin/run-agent.sh +++ b/bin/run-agent.sh @@ -46,7 +46,7 @@ SEED_PROMPT='Pak de volgende job uit de Scrum4Me-queue en draai de queue leeg vo # Tools-allowlist: alle MCP-tools die scrum4me-mcp aanbiedt + standaard # file/bash-tools. Geen WebFetch, geen WebSearch — de agent heeft die # niet nodig en uitsluiting verkleint het surface. -ALLOWED_TOOLS='Read,Edit,Write,Bash,Grep,Glob,mcp__scrum4me__health,mcp__scrum4me__list_products,mcp__scrum4me__get_claude_context,mcp__scrum4me__wait_for_job,mcp__scrum4me__check_queue_empty,mcp__scrum4me__update_job_status,mcp__scrum4me__update_task_status,mcp__scrum4me__update_task_plan,mcp__scrum4me__log_implementation,mcp__scrum4me__log_test_result,mcp__scrum4me__log_commit,mcp__scrum4me__create_pbi,mcp__scrum4me__create_story,mcp__scrum4me__create_task,mcp__scrum4me__create_todo,mcp__scrum4me__ask_user_question,mcp__scrum4me__get_question_answer,mcp__scrum4me__list_open_questions,mcp__scrum4me__cancel_question' +ALLOWED_TOOLS='Read,Edit,Write,Bash,Grep,Glob,mcp__scrum4me__health,mcp__scrum4me__list_products,mcp__scrum4me__get_claude_context,mcp__scrum4me__wait_for_job,mcp__scrum4me__check_queue_empty,mcp__scrum4me__update_job_status,mcp__scrum4me__update_task_status,mcp__scrum4me__update_task_plan,mcp__scrum4me__log_implementation,mcp__scrum4me__log_test_result,mcp__scrum4me__log_commit,mcp__scrum4me__create_pbi,mcp__scrum4me__create_story,mcp__scrum4me__create_task,mcp__scrum4me__create_todo,mcp__scrum4me__ask_user_question,mcp__scrum4me__get_question_answer,mcp__scrum4me__list_open_questions,mcp__scrum4me__cancel_question,mcp__scrum4me__get_worker_settings,mcp__scrum4me__worker_heartbeat' CONSEC_FAILURES=0 BACKOFF=${AGENT_BACKOFF_START}