Commit graph

7 commits

Author SHA1 Message Date
Janpeter Visser
a051bb00d4 fix(worker): TOKEN_EXPIRED-detectie alleen bij non-zero Claude-exit
run-one-job.ts scant de volledige stream-json output (incl. álle
tool-results) op auth-error-patronen, en run-agent.sh grept hetzelfde
over het complete run-log — beide zonder de exit-code te checken.

Daardoor legt een geslaagde job (exit 0, result.is_error=false) de
worker plat zodra z'n output toevallig iets als "401 unauthorized"
bevat — bv. wanneer de agent een doc over route-handler-auth leest of
een endpoint test. run-agent.sh doet dan touch TOKEN_EXPIRED + sleep
infinity en de worker draait pas na een rebuild weer.

Fix: detectie gaten op een niet-nul exit. Een echte credential-fout
laat 'claude' non-zero exiten, dus echte expiries worden nog steeds
gevangen — alleen de false positives op geslaagde runs verdwijnen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 00:43:32 +02:00
Janpeter Visser
0b5a044ea5 feat(logs): per-job log-symlink jobs/<job_id>.log -> runs/<ts>.log (IDEA-063)
Run-logs in /var/log/agent/runs/ zijn timestamp-named, dus de output van
een specifieke job was alleen via grep te vinden. De map jobs/ bestond al
maar werd niet gevuld.

- run-agent.sh: geeft het run-log-pad door als RUN_LOG env-var aan
  run-one-job.ts.
- run-one-job.ts: legt direct na de claim een symlink
  jobs/<job_id>.log -> ../runs/<ts>.log. Relatief pad (overleeft de
  host bind-mount), best-effort (faalt de job nooit over een log-gemak).
- log-cleanup.sh: ruimt dangling per-job symlinks op met `find -xtype l`
  — nodig omdat rotate-logs.sh het doel na 24u gzipt (.log -> .log.gz)
  of na 30d verwijdert, en de bestaande `-type f` cleanup symlinks niet
  raakt.

Functioneel geverifieerd: symlink resolveert, dangling-prune werkt,
`-type f` negeert de symlink (geen voortijdige delete). run-one-job.ts
parseert schoon (node --check + type-strip).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 19:22:40 +02:00
Madhura68
a6079892d7 feat(PBI-4/ST-005): runner haalt queue-loop uit Claude (één invocation per job)
Vervangt de lange seed-prompt-loop door een Node-runner die per iteratie
precies één geclaimde job afhandelt. Eén Claude-invocation = één job met
de juiste per-kind config (model/permission-mode/effort/allowed_tools)
volgens PBI-67's resolveJobConfig.

- T-18/19/20/21: bin/run-one-job.ts (nieuw, ESM tsx). Imports direct uit
  /opt/scrum4me-mcp/src/. Stappen: auth → quota-probe → claim met
  LISTEN-fallback 270s → getFullJobContext → attachWorktreeToJob (TASK)
  → payload schrijven → CLI-args bouwen + mapBudgetToEffort → spawn claude
  → token-expiry detection → rollbackClaim bij exit≠0 zonder
  update_job_status → cleanup. Logging met ISO-timestamps voor elke fase.
  setInterval(60s) lease-renewal alleen voor SPRINT_IMPLEMENTATION.
- T-22: bin/run-agent.sh — SEED_PROMPT + ALLOWED_TOOLS verwijderd; claude
  -p vervangen door `tsx /opt/agent/bin/run-one-job.ts`. TOKEN_EXPIRED
  detectie uitgebreid met exit_code==3 trigger.
- T-23: CLAUDE.md herschreven — operationele loop weg, architectuur-
  uitleg toegevoegd, hardstop-regels (geen wait_for_job, check_queue_empty,
  job_heartbeat, git push).

T-24 smoke-test gedeferd tot na merge scrum4me-mcp PR (Dockerfile clone't
via MCP_GIT_REF, default 'main'); zie test_result-log voor verificatie-
commando's.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:22:43 +02:00
Madhura68
cf6969733c feat(M13): worker-loop pre-flight quota-check
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) <noreply@anthropic.com>
2026-05-06 04:36:43 +02:00
Madhura68
847ba96870 fix(entrypoint): ensure_writable bind-mounts + add log-cleanup (>2d)
- entrypoint.sh: chown → chmod a+rwX → fail-fast met diagnostiek voor
  AGENT_STATE_DIR en AGENT_LOG_DIR. Lost stille state.json permission
  denied op QNAP-share op (NAS-ACL blokkeert chown vanuit container).
- bin/log-cleanup.sh: nieuwe hard-delete >2d (env-tunable) naast de
  conservatievere rotate-logs.sh (gzip 24u, delete 30d).
- run-agent.sh: roept log-cleanup.sh aan bij startup en elke iteratie.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 16:18:10 +02:00
Janpeter Visser
834e7912e7 feat(ST-mmuwreer): add check_queue_empty stap + allowedTools
CLAUDE.md: nieuwe stap 8 in operationele loop — agent roept
check_queue_empty aan na update_job_status('done'). Bij empty=true
exit batch direct ipv 600s wait_for_job-poll.

bin/run-agent.sh: voeg mcp__scrum4me__check_queue_empty toe aan
ALLOWED_TOOLS zodat de agent de tool ook daadwerkelijk mag aanroepen.

Vereist: scrum4me-mcp v0.3.0+ in MCP_GIT_REF (na merge bumpen + rebuild).

Re-doet werk uit `bd6b91e` dat in eerdere agent-run verloren ging
omdat verify_task_against_plan errorde (origin/main hard-coded; bug
in scrum4me-mcp opgevangen in PBI cmoq1j2e2001dvt17scif1flj).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 19:37:43 +02:00
47b1de93db fix: lokale Docker build werkend krijgen
Drie fixes om de container lokaal (en op de NAS) te kunnen builden en draaien:

- Dockerfile: clone scrum4me-mcp zonder --recurse-submodules. De Prisma-
  schema zit al gecommit in het scrum4me-mcp repo; de vendor/scrum4me
  submodule is alleen nodig voor schema-updates en wijst naar een
  privaat repo dat tijdens docker build niet bereikbaar is.

- Dockerfile: voeg /usr/sbin en /sbin toe aan PATH zodat gosu (in
  /usr/sbin/gosu na apt-install) gevonden wordt door entrypoint.sh.
  Zonder dit faalt de container in een restart loop.

- Verplaats alle runner scripts naar bin/ en maak etc/ aan, zodat
  COPY bin/ en COPY etc/ in de Dockerfile bestanden vinden.

Verder:
- .gitattributes om CRLF-corruptie van shell scripts op Windows te
  voorkomen (core.autocrlf=true is default actief).
- .gitignore: docker-compose.override.yml uitsluiten zodat lokale
  dev-overrides niet worden gecommit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-02 19:18:35 +02:00
Renamed from run-agent.sh (Browse further)