Skip to content

Tracing: modell-proveniens på hvert ledd + tomkjøringer skal feile høyt #71

Description

@olebhansen

Bakgrunn

2026-07-22 feilet tre proxy-kjøringer på rad på måter som var vanskelige å se og umulige å attribuere:

  • Et event ga en 0 bytes logg med exit 0 — resultatlinja ble en tom «ok», broen postet ingenting, og ingen varsel ble gitt (oppgaven «kokte bort»).
  • To kjøringer hallusinerte fullføring («jeg har implementert …») uten ett eneste verktøykall — og postet påstanden som issue-kommentar.

Samtidig byttes modeller hyppig i eksperimentering (proxy: gemma4 → ornith; router: 26b-a4b → e4b → …). I dag stemples ikke modell på noe ledd, så historikken kan ikke svare på «hvilken modell ga dette svaret?» — og modelleksperimenter blir anekdoter i stedet for data.

Foreslått løsning

Ikke noe sporingssystem — stemple metadata på linjene som allerede flyter, og gjør stille tomkjøringer til feil.

  1. Agentene stempler resultatlinjene (results.jsonl): "model", "endpoint" (kun host — aldri nøkler/tokens), "duration_s", "log_bytes". Pi-entrypointet har alt i env (LLM_MODEL_ID/PI_MODEL, LLM_BASE_URL); Claude Code-agentene instrueres i CLAUDE.md-protokollen (modell fra ANTHROPIC_MODEL). Stemples ved kjøretid — poenget er at historikken forblir riktig når modellen byttes midt på dagen.
  2. Routeren stempler annoteringen: router_meta: {model, latency_ms} på eventet ved siden av classification (utfyller tuning-loggingen i Router-drift: liten klassifiseringsmodell, romsligere timeout og tuning-logging #66).
  3. Huben logger kjeden: integrations ser alle hopp (event inn → router → kø → resultat → delegering → levering) og har korrelasjonsnøkkelen (event-id via payload.origin). Én logglinje per hopp med faste felter (event= agent= model= intent= duration=) slik at docker logs … | grep <event-id> gir hele kjeden. (Maskinlesbar state/trace.jsonl kan komme senere — grep-bare logger først.)
  4. Tomkjørings-vakt i entrypointet: tom logg eller manglende ===AGENT-RESULT===-blokk ⇒ status: "error" med forklarende reply (f.eks. «agenten produserte ingen output — sjekk modell/endepunkt»), aldri en tom ok-linje. Broen poster dermed en synlig feil i stedet for stillhet.
  5. Læringsløkka: debrief-events og retro-læringer tar med modell-id, slik at syntesen kan skille modellene fra hverandre over tid.

Bevisst utelatt: OpenTelemetry/spans — overkill for tre containere og to JSONL-filer.

Steg

  1. Entrypoint: metadata på resultatlinja + tomkjørings-vakt.
  2. CLAUDE.md-protokollene (senior + junior): samme felter i resultatlinja.
  3. Integrations: router_meta på eventet; hopp-logging med faste felter; ta med model i delegerings-/debrief-events.
  4. README/doc: jq/grep-oppskrifter for å følge et event ende-til-ende.

Berørte filer

  • agents/proxy-agent/docker/entrypoint.sh — metadata + tomkjørings-vakt
  • agents/local-cc-coding-agent/CLAUDE.md, agents/local-cc-jr-developer/CLAUDE.md — resultatkontrakt
  • integrations/src/router/router.ts — router_meta
  • integrations/src/agent/queue.ts — hopp-logging, modell i debrief
  • integrations/src/agent/types.ts, integrations/README.md, doc/

Akseptansekriterier

  • Hver resultatlinje fra hver agent bærer model, endpoint (host), duration_s og log_bytes; ingen hemmeligheter i noen av feltene.
  • Et event kan følges ende-til-ende i integrations-loggene på event-id, med modell synlig i hvert ledd.
  • En kjøring med tom logg eller uten resultatblokk gir status: "error" og en synlig feilmelding til opphavet — aldri stille suksess.
  • Debrief-/delegeringsevents bærer modell-id for læringsløkka.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions