BibliotekSammanhängande läsvyEPUB
Del III — Förändring under kontroll · Kapitel 11

Agentiska system och Coordinatorn

Nordics operatör öppnar Matrix och ser RUNNING. Ett systemd-unit för en worker håller samtidigt på att starta. Tokenräknaren stiger. Är arbetet friskt?

Det går inte att avgöra från någon av uppgifterna ensam. RUNNING kan betyda att en lease finns. Ett färskt heartbeat kan betyda att en process fortfarande har kontakt. Ett aktivt unit kan betyda att operativsystemet håller processen vid liv. Tokens kan betyda att en modell producerar text. Inget av detta bevisar att rätt uppgift gör framsteg eller att resultatet blir användbart.

Kapitlets kärnfråga är:

Hur kan Matrix förklara vad dess eget kontrollplan gör, varför det gör det, vad som faktiskt lever och om arbetet ger verifierbar nytta?

1. Kontrollplan, inte agentlista

Coordinatorn omvandlar efterfrågan till kontrollerad exekvering. Den behöver veta vilket arbete som är körbart, vem som får claima det, hur länge ägarskapet är trovärdigt, när ett försök ska återvinnas och vilken kapacitet som får startas. Agenten utför; kontrollplanet tilldelar, begränsar och förklarar.

Matrix implementation har redan huvuddelarna:

  • en PostgreSQL-kö med beslut, beroenden, surface-lock och atomisk claim,
  • lease och heartbeat med reap och redispatch,
  • separata köepisoder i work_queue_runs,
  • ett agent-run-register även för arbete utanför kön,
  • stage- och journeyvyer för överlämningar,
  • en stage-kedja som föds vid dispatch och skiljer bygg, oberoende granskning och bevakad landing,
  • en fleet-supervisor som reapar, mäter READY-djup och startar workers,
  • append-only arbetshändelser och explicita progressmarkörer,
  • ett runtime-passport som jämför körande kod, checkout, main och schema,
  • agentanvändning och modellförbrukning,
  • en bred health-yta för units, prober, timers och larm.

Styrkan är att delarna inte låtsas vara samma sak. Produktluckan är att de ännu inte samlas till en operativ förklaring (CLAIM-AGENT-009).

2. Identiteter som aldrig får kollapsas

Figur FIG-11-01 visar kontrollplanet som flera korrelerade tidslinjer.

Från arbete via eventdriven review till förklarad landning
Visa diagramdefinition
flowchart TB
    subgraph FLOW["Operativ huvudväg"]
        direction LR
        T[Agenttyp + policy<br/>modell + verktyg]
        W[Work item + lease<br/>heartbeat + episode]
        R[Build run + stages<br/>handovers + receipts]
        N[Stage completion<br/>bokför + NOTIFY]
        Q[Wake-up listener]
        H[Scheduling assessment<br/>demand + supply + cap<br/>health + ekonomi + eval]
        B[Review claim + bokförd dom<br/>head + actor + verdict]
        G{Landing gate<br/>non-FAIL + head + oberoende?}
        M[Merge / landning]
        D[Vägran / skuld]

        W -->|claim / reap / redispatch| R
        T -->|binder agent, modell och verktyg| R
        R --> N
        N -. NOTIFY, ej sanningskälla .-> Q
        Q --> H
        H -->|coverage + freshness| B
        B --> G
        G -->|ja| M
        G -->|nej| D
    end

    subgraph EXPLANATION["Separat läsmodell — inte en ny exekveringsväg"]
        direction LR
        S[Bokförda tillstånd som läses:<br/>work item · run · stage · receipt<br/>verdict · gate · health]
        X[Coordinator explanation<br/>validAt + coverage + unknowns]
        S -->|projektion| X
    end

    G -. bokförda tillstånd .-> S
Objekt Fråga det besvarar Exempelidentitet
agenttyp/manifest vilken roll och policy finns? agent:appworks
agentinstans/run vilken startad process arbetar? agent_run_id
arbetsobjekt vad ska bli gjort? backlog-/post-ID
lease vem äger arbetet just nu? post + assignee + heartbeat
köepisod vilket READY→RUNNING-försök är detta? work_queue_run_id
stage/handover vilket delsteg eller överlämnande sker? stage-/task-ID
modellanrop vilken inference förbrukade resurser? call/run/trace-ID
supervisorbeslut varför startades eller startades inte en worker? tick/decision-ID
evaluation var utfallet korrekt och nyttigt? eval-ID + rubricversion

Ett manifest är en definition, inte en process. En process kan finnas utan en köpost. En köpost kan redispatchas över flera processer. En process kan göra flera modellanrop och lämna flera stages. Därför behöver Matrix stabila korrelationsfält i stället för att använda assignee som universell identitet (CLAIM-AGENT-001). W3C Trace Context ger ett standardiserat sätt att föra traceidentitet över tjänstegränser, men ersätter inte Matrix domän-ID:n (w3c-trace-context).

3. Arbetsstatus är inte processstatus

Det lagrade köfältet innehåller fortfarande QUEUED, READY, RUNNING, BLOCKED, ERROR, DONE och PARKED, men den nya read-path-modellen slutar behandla dem som en enda livscykel. Itemlagrets projektion är exakt OPEN, DONE eller PARKED. [!] blir flaggan blocked_in_item på en öppen post. Readiness får startable och den maskinkodade förklaringen startable_unmet; runtime, stage, beslut och lease behåller sina egna axlar. Det lagrade sjugradsfältet krymper först i en senare migration när alla writers har flyttats. Detta är en läsmodell, inte bevis för genomförd schemamigration.

Agentinstansen behöver i sin tur tillstånd som starting, running, draining, paused, contact-lost, finished och terminated. Ett supervisor-unit har systemdstatus och en kontrolltick ett eget utfall.

PARKED är medvetet nedprioriterat av användaren och räknas därför som ett uppfyllt beroende: det ska inte hålla efterföljande arbete gisslan. Producenten måste samtidigt ange CODE_DEPENDENCY_PARKED; den får inte översätta detta till det falska påståendet att alla beroenden är klara. BLOCKED väntar på ett namngivet villkor eller en aktör. ERROR betyder att ett försök misslyckats. contact-lost betyder att en lease inte längre kan litas på. Den tidigare beslutsdomen defer är nu pensionerad för nya skrivningar; parkering sker på itemaxeln medan gamla defer-domar förblir läsbar historik. Dessa begrepp får inte slås ihop till rött eftersom nästa handling är olika (CLAIM-AGENT-010).

En särskild stage-risk är självgranskning. Om ändringen träffar stage- mekanikens testlåsta yta kan den automatiska profilen inte trovärdigt godkänna sin egen grind. Jake-implementationen detekterar därför filytan före claim, stämplar stage BLOCKED och låter tillståndet stoppa kedjans avancemang. Vid landing godtas denna yta endast när den bokförda domen kommer från den särskilda cc:independent-review-*-klassen. Den automatiska reviewvägen får inte själv mynta ett namn i den klassen. En exception handler bör fortfarande häva blockeringen och claima arbetet i samma transaktion; writerparet verkställer inte denna samtidighet, och namnrymden är klassificering snarare än kryptografiskt identitetsbevis (CLAIM-AGENT-015).

En annan oberoendevakt ligger direkt i Jakes stage-claim. _refuse_run_author läser tidigare stage-raders run_id och vägrar den länkade körningsepisodens assignee från att claima ett senare steg i samma kedjeinstans. Det stoppar A→B→A när run-länken finns, men är inte ett generellt personhistoriskt förbud: en ny attempt saknar tidigare run-historik, borttagna runs lämnar nullable länkar, jämförelsen gäller assignee snarare än claimed_by, och reviewvägen kan claima utan run_id. Regeln är därför en värdefull episodvakt med uttryckliga identitets- och coveragegränser (CLAIM-AGENT-016).

Användarens tillfälliga “väg till DONE” behövs inte som produktens informationsarkitektur. Coordinatorns permanenta frågor är efterfrågan, ägarskap, kontakt, kapacitet, progress, blockerare, effekt och ansvar.

4. Lease, heartbeat och död

En worker claimar atomiskt med FOR UPDATE SKIP LOCKED. Coordinatorn sätter lease och heartbeat; exekveraren äger inte sanningen om sitt eget liv. Vid claim kör dispatchern reap_stale(). En faktisk lease vars heartbeat passerat budget redispatchas, upp till ett tak på tre, och försökshistoriken bevaras (MATRIX-QUEUE-DISPATCH).

Claimen öppnar dessutom ett köförsök och claimar kedjans aktuella stage i samma transaktion. Leasefält och surface är en odelbar grupp. Efter en godkänd build-handover stängs build-stage och köepisoden, hela gruppen rensas och posten stannar RUNNING men dormant i väntan på granskning. Den saknar då avsiktligt lease, ska inte reapas och låser inte sin surface (MATRIX-QUEUE-READINESS, MATRIX-QUEUE-CHAIN-LIFECYCLE). Därför betyder RUNNING utan lease inte alltid korruption; vyn måste först skilja dormant handover från en oförklarad mismatch.

Detta ger precisa men begränsade claims:

fresh heartbeat  ⇒ kontakt observerad inom budget
expired heartbeat ⇒ lease ej längre betrodd
active process   ⇒ operativsystemet ser en process
none of these    ⇒ rätt resultat eller meningsfull progress

“Död agent” bör därför bara användas när en namngiven detector och tidsbudget stöder det. Annars heter läget contact-lost, process-exited eller measurement-unknown. Heartbeat bevisar liveness, inte kvalitet (CLAIM-AGENT-002, CLAIM-AGENT-003).

5. Två slags försök och två skilda tak

Reap gör kön till at-least-once. Om worker A gör effekt men tappar heartbeat kan worker B få samma arbete. Kapitel 10 visade varför externa side effects då behöver idempotency key, receipt eller read-back. Coordinatorn måste dessutom visa varje försök separat:

work item
  attempt 1: agent A, started, last heartbeat, lease expired, outcome unknown
  attempt 2: agent B, started, stages..., verified outcome

En slutlig grön arbetsrad får inte skriva över det osäkra första försöket. work_queue_runs har rätt grund: en rad per READY→RUNNING-episod, öppnad och stängd i samma transaktion som köövergången. Den bör korreleras med agent-run, trace, action receipt och evaluation (CLAIM-AGENT-004).

Köepisoden får inte blandas ihop med stage-kedjans round. Reap-/leasetaket (standard tre) begränsar återtaganden efter tappad kontakt. Kedjetaket COORDINATOR_CHAIN_ATTEMPT_CAP (standard två) begränsar rundor som en FAIL-verdict har pensionerat. Ett granskningsfel dödar alltså rundan, inte arbetsobjektet: posten öppnas igen som READY eller QUEUED beroende på sina beroenden. Efter loop-guard-blockering finns en uttrycklig requeue_after_review för namngiven granskare och motivering. Den vägen gäller inte blockering från backloggens [!] eller ett förbrukat verdicttak. De två försöksdimensionerna får därför aldrig summeras i ett enda attempt utan typ och orsak (CLAIM-AGENT-011).

6. Fleet-supervisorn som autonom controller

Den nuvarande kontrollslingan gör i ordning:

  1. reapa döda leases,
  2. pausa ny spawn vid kredit-/sessionsentinel,
  3. läs READY-djup och levande workers,
  4. beräkna desired = min(cap, ready),
  5. starta fria slots.

Det versionerade byggtaket är nu åtta och reviewtaket fyra. Supervisorn dödar inte workers; nedskalning sker passivt när one-shot-workers avslutas. Read-only-kontroll den 11 augusti 2026 visade att matrix-fleet-supervisor.timer var enabled och aktiv, tickade ungefär var annan minut och senast avslutades grönt. Det motbevisar arkitekturdokumentets äldre uppgift att supervisorn ännu inte var byggd.

Varje kontrolltick bör sparas som ett förklarbart beslut:

observedAt + input revisions
ready depth + live/starting/draining workers
stale leases + reap result
cap + pause sentinel + policy version
desired + chosen action + refusal/reason
spawn result + next evaluation + controller health

Om reap misslyckas men spawn fortsätter ska UI visa båda sanningarna. “Tick grön” får inte dölja att en delobservation föll. En autonom controller måste kunna svara “varför tre workers?” och “varför ingen ny?” (CLAIM-AGENT-005).

7. Stage-kedjan är både kontroll och progressbevis

Elapsed time, CPU, tokens och loggrader är aktivitetssignaler. Progress kräver en förväntad kedja och observerade predicates:

implemented chain: build → code_review → landing
completed: build
current: code_review
post state: RUNNING, dormant, no lease
blocked predicate: attended landing by an independent actor
evidence: build verdict + review verdict + main-branch checkmark

Kedjan skapas vid dispatch, inte först när arbetet påstås vara färdigt. queue_journey kan sammanfoga köepisoder, stages och agentregister och låter otypade episoder vara ärligt otypade när registret saknas. Landing kräver en human:-namngiven aktör, huvudgrenens [x] och en annan aktör än föregående reviewer. human: är dock bara en strukturell namnregel; trovärdig personidentitet måste senare bindas från autentiserad ingress och policyreader (MATRIX-QUEUE-LANDING, RESEARCH-032). För andra arbetsklasser återstår att deklarera start-/slutpredicate, expected population och verifieringsbevis. Procent får endast visas när nämnaren är definierad (CLAIM-AGENT-007).

Coordinatorn har nu dessutom work_queue_events: ett append-only-spår för subaktivitet, kompletterat med last_progress som cache på arbetsposten. Progressmarkörer färdas med heartbeat men skrivs i samma transaktion som händelsen. Det är en viktig separation: heartbeat säger kontakt, medan en markör som build_started, suite_green, suite_red, review_round eller evidence_written säger att en namngiven milstolpe rapporterats. Vokabulären är liten och kodregistrerad, aktörsnamnen är självdeklarerade och någon retention är ännu inte definierad. Append-only-egenskapen verkställs i den aktuella modulen och dess tester, inte av en databastrigger, och de granskade produktionsskrivarna skickar ännu inga progressmarkörer. UI ska därför visa “progress ej observerad” i stället för en fabricerad tidslinje eller procent: spåret är varken komplett processmodell eller kvalitetsbevis (CLAIM-AGENT-017).

8. Prestanda, kostnad och effekt

jake_inference_economics bokför ett anrop per completion med flow, run-ID, agent, modell, input-, output- och cachetokens. Svar utan usage räknas som usage_unknown; modell utan prisrad visas utan fabricerad kostnad. Det är en stark täckningsprincip.

Nuvarande schema saknar dock anropslatens, error type och domänutfall. Tokens per agent kan därför besvara förbrukning men inte:

  • genomströmning och kötid per arbetsklass,
  • p50/p95/p99-latens per stage och modell,
  • fel- och timeoutandel,
  • verifierad success rate och regressionsfrekvens,
  • kostnad per korrekt resultat eller uppnått verksamhetsmål.

NIST AI 800-4 skiljer funktionalitets-, operations-, human factors-, security-, compliance- och storskalig impact-monitorering och framhåller att pre-deployment-evals inte fångar verklig dynamik (nistai8004). Därför behöver Matrix två axlar: effektivitet (tid, kö, tokens, kostnad, resurser) och effekt (verifierat resultat, eval, mänsklig override, incident och nytta). Billigare fel är inte bättre (CLAIM-AGENT-008).

9. Mättäckning och osynliga agenter

Agent-run-registret inkluderar arbete utanför kön och har running och finished. Registreringen är ändå frivillig. En startad process som inte registrerar sig är osynlig för den populationen.

ask_agent har nu en per-session fanoutbudget som är avstängd som standard och faller stängt vid felaktig konfiguration. En valfri handover-stamping kan skriva payloadhash — inte innehållet eller en fabricerad completed-post — men endast för verifierad människa och bara när storekopplingen är konfigurerad. Detta minskar kedjeexplosion och förbättrar spårbarhet, men är inte ett universellt bevis för all delegering (MATRIX-ASK-AGENT-FANOUT, MATRIX-HANDOVER-STAMPING).

agent_usage gör rätt när det bara säger zero_usage om delegationer, agent-runs och inferencekällan alla kan läsas. En onåbar källa ger unknown. Rapportens nämnare är de 49 registrerade agenttyperna i den låsta revisionen: 7 kategori B, 3 kategori C och 39 kategori D. Alla har actionpolicy; ingen deklarerar modell eller tools i manifestet. Det äldre arkitekturdokumentets 45 och tio saknade policies är historiska observationer, inte nuläge.

Gränssnittet behöver alltid visa:

observed / expected / unknown / stale / unregistered
source status + validAt + sourceRevision

Annars blir ett tomt diagram falskt lugnande (CLAIM-AGENT-006).

10. Ett korrelerat nuläge, inte global magi

Kö, agent-run-register, systemd, SQLite-ekonomi, health-prober och evalstore uppdateras inte atomiskt. Coordinator-översikten ska därför inte märka sin sammanställning “sanningen kl. 12:42:12”. Den ska visa per källa:

  • observerad tid och revision,
  • freshnessbudget,
  • korrelationsgrad,
  • konflikter och luckor,
  • om data är direkt observation, härledning eller konfiguration.

OpenTelemetry semantic conventions kan ge gemensamma namn för spans, metrics, fel och messagingkorrelation. Både messaging- och GenAI-delarna är under utveckling eller migration, så Matrix bör versionspinna en exportprofil och behålla sina domänkontrakt (otel-semconv143, otel-messaging-spans).

11. Den konkreta 8181- och runtime-luckan

En live snapshot från den tillfälliga localhostytan den 11 augusti 2026 visade 564 DONE, 27 BLOCKED, 34 PARKED, 20 QUEUED och en RUNNING-post claimad av cc:build-pass. Snapshoten är inte en produktbaslinje; värdena är flyktiga.

Den viktiga observationen är formen. RUNNING-raden exponerade assignee och updated men inte heartbeattid/-ålder, stalegräns, run-ID, försöksnummer, workerstatus eller fleetbeslut. Coordinatorns vanliga build_view har redan run_seconds, heartbeat_age_s, stale, stale_after_s och redispatch_count; den tillfälliga ytan förenklar bort dem. Två interna ytor kan därmed berätta olika mycket om samma arbete. RESEARCH-029 gör detta till en rekommenderad backlogkandidat.

Sedan snapshoten togs har en operativ köcockpit landat i Jake med KPI-rad, arbetstabell och ett chain-deriverat pipelineflöde. Den bevarar unknown när stagekedjan inte kan läsas. Den 13 augusti var även 8181-sidan installerad som versionerad user service med loopbroms, men den svarade fortfarande med rubriken “Kön — tillfällig sanningssida”. Den är alltså en ärligare och mer driftbar brygga, inte den permanenta produktvyn.

Samma kontroll gav ett ännu tydligare självförklaringsbevis. Vid den första läsningen rapporterade /health körande Jake, checkout och main på a8e1d4a. Några minuter senare hade main flyttat två commits till c82ee2e, medan den körande processen och serve-checkouten stod kvar på a8e1d4a. Koden förväntade migration 0022_elicitation_split_out, live-databasen stod på 0021_finding_improvement_class och serve-stämpeln saknades. Passportets Coordinatorfält visade källrepots nya HEAD d0f02e4, men implementationen läser repo-HEAD vid frågetillfället och bevisar därför inte att den redan startade processen laddat den revisionen. Processen var levande samtidigt som source freshness, schema och utrullningskvitto avvek. Passportet gör en verklig lucka synlig och avslöjar samtidigt behovet av striktare fältsemantik (CLAIM-OPS-011).

En ny read-only-observation den 13 augusti cirka 22:12 CEST visade samma mönster med större avstånd: processen körde a8e1d4a, checkout och main var c8f69b6, serve-stämpeln saknades och 0022 var fortfarande landad men inte applicerad över live-schemats 0021. Samtidigt svarade paneltjänstens egen /health endast {"status":"ok"}. Service-passportet är alltså ett lokalt bevis för bridgeprocessen, inte ännu ett servicefamiljekontrakt.

Eventdriven granskning är en styrslinga, inte en notifieringsfunktion

Stage completion emitterar nu en PostgreSQL-notis som väcker en resident listener. Notisen är uttryckligen en otrustad hint: listenern claimar inget och använder inte payloaden som sanning. Kapacitetsticket återläser bokförda READY- steg, jämför demand med levande review-workers och tillämpar ett tak per profil [CLAIM-AGENT-012].

stage completion → NOTIFY → listener → capacity tick
→ återläs READY + levande reviewers → eventuellt spawn
→ claim ur Coordinator → review → bokförd dom

Slingan är avsiktligt parkerad när JAKE_REVIEW_FLEET_MAX saknas: cap blir noll. I den versionerade servicekonfigurationen vid bokens aktuella lås är profilcap däremot fyra och listenern var aktiv i read-only-kontrollen den 13 augusti. Kontrollplanet måste ändå visa listener connected, senaste notice, senaste tick, demand, supply, cap, parkeringsorsak och återanslutningar separat. Ett positivt tak bevisar inte att någon reviewer kör [CLAIM-AGENT-013].

12. Funktioner och use cases

UC11.1 — Förstå kontrollplanets nuläge

Operatören öppnar översikten och ser arbetsdemand, färska/starting/draining/ contact-lost agentinstanser, fleet-cap, pausorsak, senaste controllertick, fel, blockers och mättäckning. Varje siffra visar validAt och kan öppnas till populationen bakom.

UC11.2 — Inspektera ett aktivt arbete

Operatören öppnar arbetsobjektet och ser beslut, beroenden, current lease, heartbeatålder, stalebudget, köepisoder, stages, expected population, agent-run, traces, actions och verification. Dormant handover visas uttryckligt som väntan mellan stages, inte som död lease. Leaseförsök och kedjerundor visas var för sig; tidigare försök skrivs inte över.

UC11.3 — Inspektera en agentinstans

Användaren ser agenttyp, process/unit, launcher, purpose, owner, starttid, senaste heartbeat, aktuella leases, stages, modellcalls, resursbruk och terminalt utfall. Saknad registrering eller korrelation visas som lucka.

UC11.4 — Skilja pausad, blockerad, parkerad och tappad kontakt

Matrix klassificerar arbetsstatus, processstatus och beslutsstatus separat. Vyn anger detector, orsak, ägare och nästa handling. Användaren kan inte “återuppta agent” när det egentligen är arbetet som väntar på extern input. Ett parkerat beroende visas som avsiktligt accepterat, inte som DONE.

UC11.5 — Förklara fleetbeslut

Operatören öppnar en tick och ser READY-djup, live supply, cap, sentinel, stale leases, policyversion, desired count och spawn/refusalresultat. En kontrafaktisk simulering visar vad en annan cap skulle ha gjort utan att ändra drift.

UC11.6 — Pausa, dränera och återuppta kapacitet

Behörig operatör skapar ett intent för att pausa nya claims eller dränera en worker. Matrix visar berörda leases och blast radius. Den nuvarande supervisorn har ingen kill-väg; framtida stop/cancel får inte låtsas finnas innan explicit action-, receipt- och recoverykontrakt har byggts.

UC11.7 — Reapa och redispatcha stale lease

Automatik eller operatör ser expired heartbeat, tidigare attempts och idempotensprofil. Matrix reapar bara en verklig lease, bevarar episoden och redispatchar inom tak. Okänt actionutfall blockerar osäker retry.

UC11.7a — Hantera handover och granskningsrunda

Build lämnar över med verdict och släpper hela leasen. Reviewer claimar nästa stage oberoende. FAIL pensionerar rundan och öppnar ny inom kedjetaket; loop-guard-blockering kan återöppnas först efter namngiven review. UI blandar aldrig ihop denna runda med stale-lease-redispatch.

UC11.8 — Följa progress och blockerare

Användaren ser completed/current/expected stages, täckt population, predicatebevis, väntande beslut och extern dependency. Loggrader och elapsed time visas som signaler, aldrig som fabricerad procent.

UC11.9 — Mäta prestanda och kapacitet

Operatören jämför queue wait, run duration, throughput, error rate, latency, reap rate, saturation och resursbruk per arbetsklass, agenttyp och version. Okända mätvärden och hög kardinalitet redovisas.

UC11.10 — Mäta kostnad och effekt

Produktägaren följer tokens, cache, priscoverage och kostnad per run och verifierat utfall, tillsammans med eval, override och incident. Modeller utan pris eller calls utan usage ingår i coverage men får ingen påhittad kostnad.

UC11.11 — Förvalta agentkatalog och policy

Arkitekten ser alla registrerade typer, kategori, ägare, capability, actionpolicy, faktisk användning och versionsdrift. Modell- och toolpolicy visas som “ej deklarerad” där manifestet saknar dem, inte infererat från namn.

UC11.12 — Upptäcka osynlig och oanvänd kapacitet

Matrix jämför registrerad population med delegations-, run-, queue- och inferencekällor. Den skiljer verifierat oanvänd, unregistered activity, claim mismatch och measurement unknown.

UC11.13 — Granska delegering och överlämning

Revisorn följer mål, DoD, grindnivå, actionpolicy, source/target-agent, submitted/completed/failed, stages och evidensbasis. Handoverpayload och promptinnehåll skyddas efter dataklass.

UC11.14 — Jämföra agent- och modellversioner

Evaluatorn grupperar likvärdiga uppgifter efter agent-, prompt-, policy- och modellversion. Matrix visar outcome- och coveragefördelning och vägrar kalla ojämförbara populationer en regression.

UC11.15 — Hantera controllerfel

När reap, registry, database, systemd eller model meter faller visar Matrix vilken del av kontrollslingan som är blind, vilka beslut som ändå togs och om nya claims/spawns bör fail-closed. Controller health har egen ägare och SLA.

UC11.16 — Matrix förklarar Matrix

Användaren ställer “varför kör detta?”, “varför står det still?”, “vad vet du inte?” eller “vad ändrades sedan förra bilden?”. Svaret binds till work-, run-, lease-, stage-, decision-, telemetry- och evalreferenser med per-källa validAt.

UC11.17 — Jämför landad kod med verklig runtime

Operatören öppnar ett service-passport och ser processrevision, checkout, main-tip, utrullningsstämpel, komponenternas processbundna eller uttryckligt icke processbundna revisioner samt landad och applicerad migrationsrevision. Varje mismatch får egen konsekvens och åtgärd. Okänd stämpel eller laddad komponentrevision visas som okänd, inte som lyckad deploy.

UC11.18 — Följa faktisk progress utan att förväxla den med heartbeat

Användaren ser senaste heartbeat och senaste progressmarkör sida vid sida och kan öppna den append-only tidslinjen. En okänd eller otillåten markör vägras, men frånvaro av markör betyder “progress ej observerad” och inte automatiskt att arbetet står still.

13. Gränssnittshierarki

Två helvyer gör skillnaden mellan arbete och plattformsdrift konkret. SCREEN-11-01 visar arbetsöversikten med lifecycle, readiness, runtime och stage som separata axlar.

Arbetsöversikt med separata lifecycle-, readiness-, runtime- och stageaxlar

SCREEN-11-02 visar Control Plane med passport per tjänst och enforcement per repo och DONE-dörr. Båda är konceptvyer byggda från daterade observationer, inte live-UI.

Control Plane med service-passports och enforcement per repo och DONE-väg

Coordinatorns permanenta produktområde bör ha följande nivåer:

  1. Control plane overview: demand, supply, active/contact-lost, blockers, fleet decision, alarms och measurement coverage.
  2. Work: queue states, leases, queue episodes, chain rounds, dependencies, dormant handovers, stages och progress.
  3. Agents & runs: instanser, purpose, owner, liveness, process och aktuellt arbete; agentkatalogen är en separat typvy.
  4. Fleet & capacity: cap, pause/drain, slots, controller ticks, reap och kontrafaktisk capacity simulation.
  5. Performance & economics: queue/run latency, throughput, saturation, tokens, cache, cost coverage, evals och kostnad per verifierat utfall.
  6. Decisions & recovery: blockers, approvals, stale leases, unknown outcomes, redispatch, cancel/drain och manual-required.
  7. Catalog & policy: agenttyper, capabilities, actionpolicy, modeller, tools, ägare, version och faktisk användning.
  8. Audit & coverage: journeys, handovers, traces, source freshness, unregistered activity, mismatch och dokumentationsdrift.
  9. Runtime & deployment: service-passports, process/checkout/main, utrullningsstämplar, migrationsdrift och komponentvis coverage.

Översikten ska prioritera avvikelser och nästa aktör, inte skapa ett övervakningsrum av dekorativa grafer. Rå logg, JSON, SQL och systemd är drill-down; förklaringen är primär.

14. Datakontrakt för en CoordinatorSnapshot

En framtida additiv snapshot bör minst bära:

snapshotId + assembledAt + assemblerVersion
sourceObservations[] {source, validAt, revision, freshness, status, error}
workSummary + workItems[] + leases[] + queueEpisodes[] + chainRounds[]
agentTypes[] + agentRuns[] + processObservations[]
stages[] + handovers[] + supervisorDecisions[]
inferenceCalls/aggregates + resourceMetrics + evaluations[]
correlationCoverage + measurementCoverage + conflicts[] + unknowns[]

Detta är en sammanställning, inte en ny auktoritativ databas. Varje detalj pekar tillbaka till sin ägande källa. Ett gemensamt trace-ID förbättrar korrelation; det ger inte global transaktion eller full population.

15. Nordic som kontrollplansutredning

  1. Frys översiktens per-källa validAt och revision.
  2. Öppna RUNNING-postens lease, dormant-förklaring, queue episodes och kedjerundor.
  3. Korrelera assignee mot agent-run och faktisk process/unit.
  4. Bedöm heartbeatålder mot uttrycklig stalebudget.
  5. Läs stages och expected population; markera progress unknown om nämnare saknas.
  6. Öppna senaste supervisorbeslut och dess inputs, inklusive reaperesultat.
  7. Korrelera inference med run och beräkna usage-/pricecoverage.
  8. Läs verifierat utfall/eval; separera effektivitet från effekt.
  9. Om kontakten tappats, bedöm actionernas idempotens före redispatch.
  10. Spara förklaringen med luckor och nästa ansvariga aktör.

Resultatet är inte “grönt” eller “rött”. Det är ett evidensbundet svar på vad som arbetar, vad som väntar, vad som inte längre kan betros och vad Matrix ännu inte kan veta.

Sammanfattning

Ett agentiskt kontrollplan blir trovärdigt när det kan beskriva sina egna identiteter, försök, tidsbudgetar, beslut, resurser, utfall och luckor. Matrix har redan starka byggstenar: atomisk claim, leases, episoder, agentregister, journey, fleet-controller, health och ekonomimätning. Nästa steg är inte fler statusbrickor. Det är en korrelerad, tidsmedveten och ärlig Coordinator-förklaring där kontakt inte förväxlas med progress, kostnad inte förväxlas med nytta och mätbortfall aldrig blir noll.

Fördjupningsmaterial

Övningar och laboration

Övningar och laboration

Övning 1: separera identiteterna

Rita agenttyp, agent-run, work item, lease, queue episode, stage, model call och evaluation för en uppgift som redispatchas efter stale heartbeat. Ange vilka relationer som är säkra och vilka som kräver tidsöverlapp eller explicit ID.

Övning 2: klassificera status

Klassificera tolv scenarier som arbetsstatus, processstatus, beslutstatus eller mätstatus. Inkludera parked, external blocked, paused spawning, process exited, contact lost, outcome unknown och registry unavailable. Ange nästa aktör.

Övning 3: bygg ett fleetbeslut

Givet READY=6, live=2, starting=1, cap=4, en stale lease och aktiv creditsentinel: beräkna controllerbeslutet. Visa vilka observationer och policyfält som krävs för att en revisor ska kunna återskapa det.

Övning 4: effektivitet mot effekt

Två agentversioner har olika tokens, latens, felandel och evalresultat. Definiera jämförbar population, coverage och mått för kostnad per verifierat utfall. Förklara varför lägst tokenkostnad inte automatiskt vinner.

Laboration: den självförklarande Coordinatorn

Scenario

Nordic-fixturen innehåller 18 work items, tre agenttyper, fem agent-runs, sex queue episodes, stages, fleet ticks, inference calls, evals och source observations. Några samband saknas avsiktligt. En worker gör effekt, tappar heartbeat och arbetet redispatchas.

Leverabler

  1. versionsbundet CoordinatorSnapshot med per-källa validAt,
  2. separata modeller för work, lease, episode, run, process och agenttyp,
  3. state taxonomy med next actor,
  4. fleet decision receipt och kontrafaktisk simulering,
  5. progressmodell med expected stages/population,
  6. at-least-once attempt history och outcome unknown,
  7. prestanda-, ekonomi- och effectscorecard,
  8. mättäckning och korrelationscoverage,
  9. gränssnittshierarki för UC11.1–UC11.16,
  10. förklaring av “varför kör/står detta?” med evidensreferenser,
  11. säkerhets- och cardinalitybedömning för telemetry,
  12. mutationsrapport med ägare och nästa säkra handling.

Obligatoriska mutationer

  • märk agentmanifest som en levande instans,
  • återanvänd assignee som run-ID över två försök,
  • visa RUNNING utan lease,
  • feltolka en legitim dormant build-handover som stale eller korrupt,
  • låt heartbeat vara färskt men stagepopulationen oförändrad,
  • låt process vara active efter expired heartbeat,
  • låt registrerad run sakna köpost,
  • starta en oregistrerad worker,
  • låt registrykällan falla men rapportera noll agenter,
  • låt inferencekällan falla men rapportera zero usage,
  • skriv över första queue episode vid redispatch,
  • slå ihop leaseförsök och FAIL-pensionerade kedjerundor till samma räknare,
  • låt ett PARKED beroende blockera för evigt eller beskrivas som DONE,
  • låt human:valfri-text behandlas som kryptografiskt identitetsbevis,
  • låt första försöket ha outcome unknown och retrya en non-repeatable action,
  • låt reap misslyckas men supervisor tick visas helt grön,
  • ändra cap efter observation men före beslut utan policyversion,
  • låt READY-snapshot vara äldre än worker-snapshot,
  • fabricera 75 procent progress utan expected population,
  • visa låg tokenkostnad som hög kvalitet utan eval,
  • utelämna usage_unknown från kostnadscoverage,
  • korrelera fel agenttyp enbart på överlappande label,
  • skicka prompt/tool arguments till telemetry utan dataklassning,
  • publicera ett globalt snapshot timestamp trots olika validAt,
  • låt arkitekturdokumentets agentantal överstyra aktuellt register,
  • döp parked till blocked och föreslå automatisk resume.

Varje mutation ska ge explicit kontraktsfel, evidenslucka, ansvarig aktör och nästa säkra handling. Generiskt “agent dead” eller “system error” är inte godtagbart.

Acceptanskriterier

  • Agenttyp, run, lease, episode och call kan frågas oberoende.
  • RUNNING utan trovärdig lease kräver antingen evidens för dormant handover eller flaggas som mismatch.
  • Heartbeat kan aldrig ensamt skapa progress eller quality success.
  • At-least-once bevarar samtliga attempts och blockerar osäker side-effect- retry.
  • Fleetbeslut kan återskapas från tidsbundna inputs och policyversion.
  • Okänd källa blir unknown och påverkar coverage, aldrig noll.
  • Performance visar queue wait, run duration, throughput, latency och errors.
  • Effekt visar verifierat outcome/eval separat från tokens och cost.
  • Varje aggregering kan öppnas till populationen bakom.
  • Sammanställningen påstår inte global atomicitet.

Bedömning, 24 poäng

Del Poäng
Identitet, korrelation och tidsmodell 4
Lease, liveness, attempts och recovery 4
Fleetbeslut, capacity och controller health 4
Progress, blockers och next actor 4
Performance, ekonomi, eval och coverage 4
UI-förklaring, audit, privacy och mutationer 4

Godkänt kräver minst 15 poäng samt att false-running, invisible-agent, unknown-as-zero, lost-attempt och cost-as-quality fångas.

Källor och begränsningar

Kapitelkällor

Cite-key/käll-ID Funktion Begränsning
nistai8004 Sex kategorier för post-deployment AI-monitorering och identifierade monitoreringsluckor. Forsknings-/taxonomirapport; specificerar inte Matrix metrics eller UI.
otel-semconv143 Gemensamma namn och stabilitetsmodell för telemetry. GenAI har flyttats till separat repo; flera relevanta grupper är inte stabila.
otel-messaging-spans Send/receive/process, conversation och trace links för köarbete. Status development; PostgreSQL-kön är inte automatiskt ett message broker-API.
w3c-trace-context Standardiserad traceidentitet över tjänstegränser. Ersätter inte work-, run-, tenant- eller auditidentitet.
MATRIX-COORDINATOR-QUEUE Köorganisation, A/B/C-beslut och leasesemantik. Dokumentets fleet/reap- och registermätningar är delvis passerade.
MATRIX-QUEUE-DISPATCH Atomisk claim, stale reap, redispatchtak och leasekrav. At-least-once kräver idempotent/reconcilerbar executor.
MATRIX-QUEUE-VIEW Runtimefält, stalehärledning, agent- och mismatchsummering. Frivillig agentregistrering ger ofullständig population.
MATRIX-QUEUE-RUN-HISTORY Separata READY→RUNNING-episoder. Korrelerar inte ensam hela process-, inference- och actionkedjan.
MATRIX-QUEUE-READINESS Gemensam readiness, attended/unattended consent, lease- och surface-regler. Okända chain facts bevarar äldre beteende och behöver synas som coveragebegränsning.
MATRIX-QUEUE-LIFECYCLE-PROJECTION Item lifecycle OPEN/DONE/PARKED, blocked-flagga och maskinkodad startable_unmet. Read-path-projektion; lagrat sjugradsfält och writers migreras först i senare etapp.
MATRIX-QUEUE-CHAIN-LIFECYCLE Dormant build-handover, FAIL-retirement, ny runda och separat kedjetak. Reap- och kedjeförsök är olika populationer och får inte aggregeras som ett attemptfält.
MATRIX-QUEUE-STAGE-RULINGS BLOCKED-ruling, self-reference-halt och exception-handlerns väg tillbaka. Skyddar stagekedjan men tvingar inte ensam samtliga Git-mergevägar.
MATRIX-SELF-REFERENCE-GUARD Testlåst mekanikyta, claim-blockering och landingkontroll för självrefererande ändringar. Oberoende namnrymd är mekanisk klassificering, inte autentiserad personidentitet.
MATRIX-QUEUE-PROGRESS Append-only aktivitetshändelser och explicit progressmarkör på heartbeat. Begränsad vokabulär, självdeklarerad aktör och ännu ingen retention.
MATRIX-ELICITATION-PHASE-STORAGE Lagringsgrindar för decide-utfall, skäl, decision-FK och komplett godkännare. Migrationen är en deployartefakt; kodexistens bevisar inte applicerad live-schema eller användarväg.
MATRIX-QUEUE-LANDING Attended landing, oberoende aktör och main-branch-checkmark. human: är namnstruktur, inte verifierad identitet; autentiserad ingress återstår.
MATRIX-QUEUE-STAFFING Versionsbunden bemanning för kedjan. Policy/ruling är beskrivande tills claim har policy→principal-reader.
MATRIX-QUEUE-JOURNEY Episoder, stages och agenttyp via tidsöverlapp. Otypad när register saknas; label/tid är svagare än explicit ID.
MATRIX-AGENT-RUN-STORE Agentinstanser även utanför kön, heartbeat och terminalt utfall. Registrering är frivillig; osynliga processer kan finnas.
MATRIX-FLEET-SUPERVISOR Reap, pause, READY/live/cap och worker spawn. Dödar inte workers och sparar inte full decision history som produktobjekt.
MATRIX-AGENT-USAGE Tre källor, registered denominator och unknown-not-zero. Usage är inte kvalitet eller capabilitybevis.
MATRIX-INFERENCE-ECONOMICS Tokens, cache, kostnad och usage/pricing coverage. Saknar latency, error type och domänutfall per call.
MATRIX-HEALTH-SURFACE Units, timers, prober och ägda larm. Är inte ensam en korrelerad Coordinator control-plane snapshot.
MATRIX-AGENT-REGISTRY 49 aktuella agenttyper och actionpolicy. Model/tools deklareras inte; manifest är definition, inte process.
MATRIX-COORDINATOR-DELEGATION Handoverkontrakt och resolved actionPolicy vid delegation. Körspårning behöver fortsatt knytas till queue/run/trace/eval.
MATRIX-ASK-AGENT-FANOUT Per-session-budget för levererade personas. Avstängd som standard och täcker endast denna fanoutväg.
MATRIX-HANDOVER-STAMPING Valfri verified-human-stamping med payloadhash. Frånvaro av konfiguration betyder avstängd funktion, inte bevisad handovercoverage.
MATRIX-STAGE-LISTENER LISTEN/NOTIFY som otrustad väckningshint med reconnect och status. Notis betyder inte claim, reviewstart eller capacity.
MATRIX-REVIEW-CAPACITY Demand/supply/cap för review-workers via gemensam fleetpolicy. Cap är noll när variabeln saknas; positivt cap bevisar inte aktiv worker.
MATRIX-STAGE-GATE Bokförd oberoende dom som täcker branch-head före merge. Domen är en del av landningskontrollen, inte ensam hela enforcementkedjan.
MATRIX-MERGE-LANDING-HOOK Sanktionerad no-ff-landning med head-bunden engångstoken, hooks och pre-push-backstopp. Lokal kontroll med uttalade no-verify-, fast-forward- och server-side-gränser.
MATRIX-LANDING-FINDINGS-GATE Vägrar landing när namngivna fynd är öppna eller saknas. Täcker bara fynd som faktiskt bokats och refererats.
MATRIX-RUNTIME-PROVENANCE Service-passport för process/checkout/main/stamp och landad/applicerad migration. Första passportet; Coordinatorfältets repo-HEAD är inte processbundet bevis för redan laddad kod.
MATRIX-QUEUE-COCKPIT KPI-rad, arbetstabell och chain-deriverad pipeline. Taktisk kövy, inte komplett korrelerad CoordinatorSnapshot.
Argumentkarta

Argumentkarta: agentiska system och Coordinatorn

Huvudtes

Coordinatorn är inte en lista över agenter utan kontrollplanet för arbete, kapacitet och ansvar. Matrix kan inte trovärdigt förklara andra system om det inte kan förklara sitt eget tillstånd, sina beslut och sin mättäckning med samma evidensdisciplin.

Kedja

  1. Agenttyp, instans, lease, köepisod, steg och modellanrop är olika identiteter (CLAIM-AGENT-001).
  2. RUNNING och heartbeat visar ägarskap och kontakt, inte nyttig progress eller kvalitet (CLAIM-AGENT-002).
  3. Liveness måste tidsbedömas och mätbortfall får inte bli noll (CLAIM-AGENT-003).
  4. Reap och redispatch ger at-least-once, vilket kräver synliga försök och idempotent eller reconcilerbar verkställighet (CLAIM-AGENT-004).
  5. En autonom fleet-controller måste redovisa input, policy, beslut, effekt och egen freshness (CLAIM-AGENT-005).
  6. Agentanvändning kräver en känd population; okänd källa ger unknown, inte zero usage (CLAIM-AGENT-006).
  7. Progress kräver domänsteg eller predicates, inte elapsed time eller loggaktivitet (CLAIM-AGENT-007).
  8. Tokens, latens och kostnad mäter effektivitet men inte nytta utan utfall och eval (CLAIM-AGENT-008).
  9. Självförklaring är en korrelerad tidsbild, inte en påhittad globalt atomisk snapshot (CLAIM-AGENT-009).
  10. Blocked, parked, waiting, error, contact-lost och finished skiljs eftersom nästa aktör och nästa handling skiljer sig (CLAIM-AGENT-010).

Motbevisande test

Om RUNNING bevisar en frisk agent och meningsfull progress ska en RUNNING-rad utan heartbeatålder, stalegräns, run-ID eller workerstatus räcka för ett operativt beslut. Den levande 8181-ytan visar just en sådan rad. Den kan säga vem som claimat arbetet men inte om kontakten är färsk, om processen lever eller vilket försök som pågår; antagandet faller.

Faktagranskning och öppna beslut

Kapitelgranskning

Status: första manusutkast 2026-08-11. Intern implementations-, operations-, distributed systems-, AI governance-, produkt- och pedagogisk granskning genomförd. Extern SRE/AI-observability-granskning och körbar CoordinatorSnapshot- fixture återstår.

Faktagranskning

  • Queue claim är atomisk och claim_next() kör stale reap före ny claim.
  • Reap kräver faktisk lease, använder heartbeatbudget och redispatchtak tre.
  • work_queue_runs bevarar en rad per READY→RUNNING-episod.
  • Stage-kedjan föds vid dispatch; build-handover lämnar posten dormant RUNNING utan lease och utan surface-lock.
  • Reap-/leaseförsök (tak tre) och FAIL-pensionerade kedjerundor (tak två) är olika räknare med olika recoveryvägar.
  • PARKED uppfyller beroenden men producenten anger det explicit och påstår inte att beroendet är DONE.
  • Loop-guard-blockering har en namngiven review-requeue; backlog [!] och förbrukat verdicttak kan inte kringgås den vägen.
  • Agent-run-registret har både running och finished men registrering är frivillig.
  • Queue journey behåller episoder otypade när registerkorrelation saknas.
  • Fleet-supervisorn reapar, respekterar sentinel, skalar mot READY och dödar inte workers.
  • Live systemd-observation bekräftade enabled/active timer och grön senaste tick.
  • Agentregistret har 49 typer; alla har actionPolicy, inga deklarerar model/tools.
  • Inference economics sparar tokens/usage coverage men inte latency/error/outcome.
  • 8181 förenklar bort livenessfält som Coordinatorns build_view redan har.
  • Landingens human:-krav är en namnregel; principalbindning från autentiserad ingress och policy→capability-reader är fortfarande en säkerhetslucka.

Teststatus

  • Käll- och levande observationer är read-only; inga Matrix-repon ändrades.
  • Fokuserade Coordinator-sviter för readiness, chain lifecycle, landing, stages, stage birth, PARKED dependencies och review-requeue passerade sina hermetiska fall; PostgreSQL-fall hoppades över utan scratch-DSN.
  • Jake queue/onboarding/journey/status-sviter: 156 passerade, två hoppades över och två HTTP-wiringfall deselectades eftersom OpenJarvis försöker chmod read-only /home/jonas/.openjarvis.
  • Platform id-token, stamping, fanout och API contract governance: 90 tester passerade och nio mutationer dödades via node --import tsx.

Käll- och teknikgranskning

  • Arkitekturdokumentens tidsbundna mätningar skiljs från aktuell implementation.
  • NIST AI 800-4 används som monitoreringstaxonomi, inte produktstandard.
  • W3C Trace Context används för transportabel korrelation, inte global identitet.
  • OpenTelemetry används som exportprofilhypotes. Messaging- och GenAI- konventionernas utvecklings/migrationsstatus kräver versionspinning.
  • OpenLineage och durable workflows förblir forskningsspår, inte beslut.

Säkerhets- och privacygranskning

  • Prompt, tool arguments/results och purpose kan innehålla känslig information.
  • Metrics ska ha kontrollerad cardinality; run-ID hör primärt i trace/logg.
  • Tenantfilter måste appliceras före aggregering och drill-down.
  • Pause, drain, reap, redispatch och framtida kill/cancel är actions med policy, audit och verifiering, inte fria dashboardknappar.
  • Telemetrybortfall måste synas utan att automatiskt exponera secret/payload.

Pedagogisk granskning

  • Nordic-fallet tvingar studenten att separera åtta identiteter.
  • Sexton use cases täcker overview, work, agents, fleet, recovery, performance, economics, catalog, audit och självförklaring.
  • Tjugosex mutationer angriper vanliga falska slutsatser.

Öppna beslut

  1. Vilka korrelations-ID:n ska vara obligatoriska mellan queue episode, agent-run, handover, inference och action receipt?
  2. Ska agentregistrering bli obligatorisk i launchergränsen?
  3. När ska controllerfel stoppa nya claims eller spawns fail-closed?
  4. Vilka progresspredicates kan göras generiska och vilka är domänspecifika?
  5. Vilken evalpopulation krävs innan kostnad per korrekt utfall visas?
  6. Hur migreras 8181 utan att den tillfälliga “väg till DONE”-vyn blir produktens permanenta informationsarkitektur?
Kapitelkontrakt

Syfte

Förklara Coordinatorn som Matrix kontrollplan: hur arbete, leases, agentinstanser, körförsök, steg, modellförbrukning, utfall och kontrollslingans egna beslut hänger ihop utan att blandas samman. Kapitlet omsätter modellen i en operativ gränssnittshierarki och fullständiga use cases.

Lärandemål

Studenten ska kunna skilja agenttyp från agentinstans och kölease, bedöma liveness utan att förväxla den med progress eller kvalitet, utforma en at-least-once-säker körmodell, förklara fleet-supervisorns beslut, mäta både effektivitet och effekt samt redovisa mättäckning och okänt tillstånd.

Fallstudiehändelse

Nordic ser en post som RUNNING samtidigt som ett fleet-worker-unit startar, en annan agent saknar färsk heartbeat och tokenkostnaden stiger. Operatören måste avgöra om systemet arbetar, väntar, har tappat kontakt eller bara saknar mätning — och besluta nästa säkra handling utan att förlora försökshistorik.