fix(runner): arresta il servizio su config JSON invalida (no piu' loop muto) #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/runner-fatal-on-bad-config"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problema
Aggiungendo un progetto con un errore di sintassi nel
config.json, il runner partiva senza segnalare nulla ma non caricava progetti.La causa non era il parsing (
config.Loadfalliva gia' correttamente), ma due buchi a valle:main.go,config.Loadgira prima dell'init dirunlog, quindi illog.Fatalffiniva solo su stderr → invisibile sotto il servizio Windows (niente console).Fix
internal/exitcode(nuovo): codici convenzionali worker→launcher —75UpdateReady,78FatalConfig (EX_CONFIG).runner.log(oltre a stderr) ed esce con78.78come fatale non-recuperabile → logga e arresta il servizio. Inserito prima del check canary, cosi' un config error non viene scambiato per un binario difettoso da rollare.config.DefaultLogDiresportata (riuso inresolveLogDir+ worker).Test
internal/config: regressione su JSON malformati (leading-zero0000, virgola di troppo, chiave senza virgola) e campi obbligatori mancanti.cmd/launcher: i due exit-path (arresto su78, supervisione su crash generico).go vetegofmtpuliti, build linux + cross-Windows OK.Note
dist/config.jsonha ancora il placeholder"project_id": 0000(invalido): col fix ora il runner lo rifiuta esplicitamente invece di morire muto.version.Runnernon bumpato (resta 0.6.4): da fare al rilascio se serve.🤖 Generated with Claude Code
Il runner cadeva con "cannot unmarshal string into Inbound.ticket_id of type int" quando un client (es. i miei script .mjs del progetto sito) manda ticket_id come slug stringa ("site-webp-001"). Un singolo frame con ticket_id stringa buttava giu' l'intera connessione del runner -> retry-loop su tutti i progetti. - protocol: nuovo tipo TicketID (string) con UnmarshalJSON che accetta intero JSON, stringa, o null/assente. Inbound.TicketID e TaskStartedFrame adeguati. - runner: ticket_id ora stringa end-to-end (sessionState, runlog, nomi file transcript, attachmentsDirFor con sanitize, primo prompt). Retrocompat: un ticket_id intero (gw.py / ]po[) diventa "7777", invariato nei path/log. - version 0.6.5 -> 0.6.6 (la 0.6.6 include ANCHE il fix arresto-su-config-invalida). Test: nuovo protocol_test (int/stringa/slug/null) + adeguati runlog/helpers test. go vet/gofmt puliti, cross-build win/amd64. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>