portfolio-optimiser/docs/2026-08-25-fable-misjonsreview.md
Kjell Tore Guttormsen d01a157986 docs: Fable 5 misjons-review — nærmer systemet seg faktisk målet? (ORDRE 20260825T104711Z)
Uavhengig adversarial review av hele repoet mot README-løftet, non-goals,
status-advarselen, operatørens målbilde (23.08) og §15.1 U1–U19. Konklusjon:
DELVIS — mekanismen er komplett og målt grønn (1021/5, ruff, mypy, golden
ea8c534), misjonsbeviset mangler (null validerte forslag mot levende modell,
null ekte ekspertdommer, ingen måling av utforskningens verdi), og
MAF-dekningen er 5 fullt / 5 delvis / 9 nei av 19 på en versjon seks
minor-releaser bak. Ingen kodeendringer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014hWpJms7fLyC1BtwAmffFg
2026-08-25 14:12:23 +02:00

40 KiB
Raw Permalink Blame History

Misjons-review — nærmer portfolio-optimiser seg faktisk målet? (2026-08-25)

Reviewer: Fable 5 (xhigh, uten advisor), ordre 20260825T104711Z-7149413623-from-.claude. Mandat: uavhengig, adversarial review av om det LEVERTE systemet gjør det README og operatøren har sagt det skal gjøre — ikke en kodekorrekthets-review. Ingen kodeendringer. Metode: hvert tall under kommer fra en kommando kjørt i denne økten (verifiseringslogg i § 6); hvert U-punkt er grep-et mot src/ og kallstedet lest; ingen tall er sitert fra STATE.md. Målestokkene er sitert ordrett fra kildene ordren navngir. Eksterne MAF-påstander (§ 3) er verifisert av en egen Opus-agent mot Microsoft Learn / PyPI / GitHub der det står «[ekstern]»; alt annet er lokalt målt.

1. Sammendrag — er «nærmer seg mål» rettferdig?

DELVIS. Tre setninger, én per akse:

  • Mekanisme (README-løftet, steg 18): JA. Alle åtte steg finnes i kode, er load-bearing-testet, og suiten er grønn målt i dag: 1021 passed / 5 skipped (166 s), ruff ren, mypy ren (34 filer), golden-transkriptet ea8c534773acdbe41ae68f2c55724d69aaf8be4f (målt shasum).
  • Misjonsbevis (operatørens målbilde, pkt. 4): NEI. Null validerte forslag mot en levende modell (den ene levende fullkjøringen 14.08 KONKLUDERTE med rejected — korrekt, men modellen fant opp en kostkode), null ekte ekspertdommer (hver dom i treet er merket SYNTHETIC / «AI-forfattet»), null kunnskapsbase materialisert fra en levende kilde, og null måling av at utforskningen finner noe debatten ikke finner (planens rad 4 er ugjort). «Stille spørsmål, be om svar, bruke svarene» er ikke nåbart fra noen operatørflate — kun fra bibliotek-APIet.
  • MAF-ekspertise (§15.1, 19 punkter): LAV mot en ærlig telling. 5 fullt brukt, 5 delvis, 9 ikke — og av de fem fullt brukte er to opt-in utenfor den normative stien (Magentic, MCP). Alt som er bærende — fan-out, blokkerende validator, HITL, læringsinjeksjon — er håndrullet rundt MAF, ikke bygget i MAF. Det er i stor grad bevisst og begrunnet (§ 3), men det gjør «eksperter på bruken av MAF» til en påstand om tre orkestrerings-konstrukter og én chat-klient — på en versjon (1.9.0, 18.06) som ligger seks minor-releaser bak dagens 1.15.0 (21.08), og som allerede shipper en primitiv (MiddlewareTermination) registeret ba om under U8 og repoet ikke bruker.

Kort: repoet er nær målet «en komplett, ærlig, testet mekanisme». Det er ikke nær målet «finner innsparinger mennesker ikke ser» — for det målet finnes det i dag ingen måling, og den offentlige README-statusen er stale i begge retninger (§ 5, F1).

2. U1U19 mot faktisk kildekode

Nevner: grep -rn --include="*.py" -F <konstrukt> src over 34 moduler / 11 650 linjer (wc -l), deretter kallstedet lest. tests/ og spikes/ teller IKKE som bruk. «Bevis» er der konstruktet faktisk kalles, ikke der det nevnes i prosa.

ID Kapabilitet (§15.1) Brukt Bevis (fil:linje) Kommentar
U1 ConcurrentBuilder fan-out nei run.py:1274 await asyncio.gather( Håndrullet bølgemodell. Begrunnet (docs/plan/2026-08-23-…:368: bølgen bærer budsjett-reservasjon S3.4). Ikke B-listet — et bevisst avvik fra USE, dokumentert.
U2 WorkflowBuilder graf nei 0 treff i src P10 «Eksplisitt NULL» (docs/plan/2026-08-09-egnethetsreview-plan.md:534). Begrunnet.
U3 GroupChatBuilder maker-checker ja workflow.py:24 import · :104 GroupChatBuilder( · :108 termination_condition= · :113 .with_max_rounds Eneste MAF-orkestrering på den normative stien. Debatten er en fast 2-agent round-robin på 3 runder; hver kjøring ender i «forcing completion» (docs/2026-08-14-…:59, målt live).
U4 Magentic (åpne delsteg) ja (opt-in) explore.py:32-37 import · :596-603 MagenticBuilder(…).build() Landet økt 5658 OVER den normative sløyfa. Ikke eksperimentell i installert orchestrations 1.0.1 (0 @experimental-treff i _magentic.py) — §15 G8/A2 sin premiss er utdatert.
U5 Agent Skills / SkillsProvider nei 0 treff; persona.py:27/:47-51 leser KUN references/example-verdict.json med egen loader SKILL.md-prosaen når aldri en agent. Metode-skillen finnes ikke (find shared -name SKILL.md → kun expert-reviewer). SkillsProvider er @experimental i installert core (_skills.py:76/:120). Begrunnet (…2026-08-23:370), men CLAUDE.md-konvensjonen «Metode kodifiseres som Agent Skill» er uoppfylt.
U6 MCP-tools ja (opt-in) mcp_tools.py:154 MCPStdioTool( · :170 MCPStreamableHTTPTool( Null nettverkskall uten --mcp-config. as_mcp_server(): 0 treff (ikke savnet).
U7 Solver/validator/MC som Function Tools delvis datasource.py:65/:69 @tool retrieval · explore.py:461/:487 quick_validate Retrieval ER et Function Tool. Validatoren er det IKKE på den normative stien — den kalles etter generering i run.py; kun den RÅDGIVENDE quick_validate i utforskningen er et tool. Registerets formål er ikke realisert slik det ble skrevet; B1-valget forklarer hvorfor (§ 3).
U8 Middleware (intercept av tool-calls → blokkerende validator) delvis budget.py:228 class BudgetMiddleware(ChatMiddleware) · mcp_tools.py:197 class ToolCallRecorder(FunctionMiddleware) Middleware brukes — til budsjett og til OBSERVASJON av tool-kall. Ingen middleware blokkerer noe; validatoren gater utenfor grafen. Konstruktet: ja. Formålet i U8: nei.
U9 Læringssløyfe-injeksjon via ContextProvider delvis verdicts.py:319 class ExpeLContextProvider(ContextProvider) · :353 extend_instructions — MEN run.py:736-739 kaller .format_fewshot() direkte og string-konkatenerer inn i prompten; :848-857 kjører before_run inn i en SessionContext som (egen kommentar) «is NOT what reaches the prompt» MAF-hooken er dekorativ: konstruktet subklasses, men injeksjonen som bærer læringen går utenom MAF. Fungerer — men er ikke «bruk av ContextProvider» i MAF-forstand.
U10 Vektorlagre (MAF-integrasjoner) nei semretrieval.py:1-70: numpy brute-force, «MAF-free (D7-portable)» Begrunnet (D-C / D7). Shippet embedder er «a semantics-free sha256 projection» (run.py:1681-hjelpetekst) — utvidelsespunkt, ikke semantisk gjenfinning.
U11 Citation-aware RAG (TextSearchProvider/agentic retrieval) delvis provenance.py:18 from agent_framework import Annotation, TextSpanRegion (display only); egen datasource.retrieve_chunks Sitatbæring finnes, med MAF-TYPER. MAF-providerne: 0 treff. Begrunnet («navigate, never stuff», …2026-08-23:371).
U12 Checkpointing / kræsj-overlevelse nei 0 kode-treff; workflow.py:14 prosa «no checkpoint» P10 sa NULL; gjenåpnet 23.08 som planens rad 3 = STATE-ens NESTE. Spike spikes/e_magentic_resume.py MÅLT grønn (fersk interpreter). Ikke bygget.
U13 HITL-gates (request_info / plan review / tool approval) delvis, uøvd workflow.py:116 with_request_info(agents=[agents[-1]]) bak enable_layer1_hitl=False (run.py:536, intet CLI-flagg); explore.py:363 PlanReviewer, :849 plan_reviewer=; approval_mode: 0 treff Layer-1 er «green-but-dead»: ENESTE test er tests/test_workflow.py:58 som bygger, aldri kjører gaten. Plan review er bibliotek-only: CLI nekter (run.py:1975-1988), hosting nekter (hosting.py:167-172).
U14 OpenTelemetry ja (opt-in) tracing.py:160 configure_otel_providers · :265 get_tracer; span-events i explore.py PORTFOLIO_OTEL på truthiness; OTLP-pakker bevisst ikke deklarert.
U15 Evaluering (LocalEvaluator/evaluate_workflow) nei 0 treff «AVVIST som flate» (STATE.md:99); begrunnelse …2026-08-23:390 (@experimental, 20 dekoratorer målt i installert _evaluation.py; «feil form»). Egen sammenligning (rad 4) IKKE gjort → ingen måling finnes.
U16 CompactionProvider nei 0 treff Uadressert: kun telt (…2026-08-23:58 «Utenfor de 15»), ingen beslutning noe sted. Relevant for lange Magentic-løp der token-taket er eneste vern.
U17 Agent-som-verktøy as_tool() nei 0 treff Uadressert. Lav relevans: A3 knyttet det til kryss-prosjekt, som er non-goal 2.
U18 FoundryChatClient + modell-map ja backends.py:29 import · :150 FoundryChatClient(project_endpoint=…, model=…, credential=…); B12 model_map 24 treff Bevist mot levende Foundry 14.08 (docs/2026-08-14-…:42).
U19 Agent Harness (HarnessAgent, FileMemoryStore, …) nei 0 treff Uadressert. Installert pakke sier selv [HARNESS] MemoryStore is experimental (pytest-warning målt) — legitimt å hoppe over, men ingen har sagt det.

Telling: ja 5 (U3, U4, U6, U14, U18) · delvis 5 (U7, U8, U9, U11, U13) · nei 9 (U1, U2, U5, U10, U12, U15, U16, U17, U19). Av de ni: 6 med skriftlig begrunnelse i repoet, 3 uten (U16, U17, U19). Nevneren er 19, ikke 15: «6 av 15» stammer fra docs/plan/2026-08-23-magentic-utforskningssloeyfe.md:58, som teller U1U15 og setter U16U19 «utenfor» — filen docs/research/2026-06-23-prior-art-platform.md har én commit (ec9ac74) og 19 rader (awk-lest i dag).

3. B-lista re-eksaminert — er «SKAL bygges selv» fortsatt riktig på 1.9.0?

Installert (uv pip list): agent-framework-core 1.9.0, -orchestrations 1.0.1, -foundry 1.8.2, -openai 1.8.2; uv.lock pinner de samme. Registeret er datert 23.06; MAF-status i dag er sjekket mot installert pakke (lokalt) og mot offisielle kilder ([ekstern] — se § 3.1).

ID BUILD-valget Status i kode Fortsatt riktig?
B1 Blokkerende hybrid-validator validator.py:31 import pulp · :106 PULP_CBC_CMD · :127 seedet MC; kalles i run.py ETTER generering, utenfor grafen HALVVEIS. Tall-halvdelen (solver + MC + baseline-avstemming + Rejection som VERDI med provenance) er fortsatt ikke en MAF-primitiv — riktig egenbygg. Men emisjons-halvdelen («svaret forlater ikke agenten uten sjekk») ER nå en MAF-primitiv: MiddlewareTermination finnes i installert 1.9.0 uten experimental-markør (§ 3.1). Registerets U8 beskrev nøyaktig den formen; repoet har den ikke (0 treff). response_format (brukt, generate.py) gir FORM, ikke VERDI-kontroll.
B2 VerdictStore + ExpeL verdicts.py + run.py:736-739 (fold) + run.py:1331 _merge_wave (kryss-prosjekt) JA, men med et forbehold: kravet i misjonen er «learns from their verdicts across runs» — MENNESKE-dommer om TIDLIGERE OUTPUT, hentet strukturelt. Ingen MAF-memory-provider gjør det (de lagrer samtalehistorikk/fakta, ikke dommer nøklet på kandidat-features). Forbeholdet er at koden i dag ikke bruker MAF-hooken for injeksjonen (U9) — så B2 er «bygg selv» i sterkere grad enn registeret sa.
B3 To-lags HITL Layer-1 with_request_info (uøvd, § 2 U13); Layer-2 = fil-innboks (verdicts.load_verdicts_from_dir, Steg 7) + verdict_input-argumentet DELVIS RIKTIG. Den asynkrone fil-innboksen er riktig egenbygg (MAF gir ingen fler-dagers HITL uten checkpoint + ekstern varsling). Men verdict_input (dom gitt FØR forslaget finnes) er ikke HITL — se F2.
B4 Termineringskontrakt + budsjett-breakers contracts.py TerminationContract · budget.py Budget/TokenMeter/PortfolioMeter · explore.py:50-87 ExplorationContract (alle felt påkrevd) JA. Magentic defaulter fortsatt max_round_count/max_reset_count til None (målt, explore.py:54-56).
B5 Generisk data-source-konfig mcp_tools.McpServerConfig (pydantic), datasource.py; jsonschema: 0 treff JA (pydantic i stedet for JSON Schema — form, ikke prinsipp).
B6 Provenance provenance.py:18 MAF-typer for display; egen ProvenanceStamp JA. Ingen MAF-native provenance.
B7 State-isolasjon i fan-out workflow.py fresh_workflow; explore.py manager_agent_factory JA (G2 målt i spikes).
B8 Sandboxing av skill-scripts 0 treff (sandbox, Subprocess) IKKE AKTUELT — ingen brukerleverte scripts kjøres, fordi U5 ikke er bygget. Blir aktuelt den dagen metode-skillen finnes.
B9 Onboarding-intervju preflight.py (operatørverktøy) DELVIS. Preflight sjekker konfig; det finnes intet intervju som tvinger fram termineringskontrakt + feedback-skjema FØR første kjøring — --decision defaulter til approved i stedet (F2).
B10 Feedback-skjema + rejection-taksonomi + konfliktregel contracts.FeedbackContract (binær approved/rejected); taksonomi: 0 treff (wrong_assumption, overestimated); verdicts.py:313-314 «deliberately deferred until real experts produce conflicting verdicts» UTSATT, uttalt. Riktig å vente på ekte dommer — men det betyr at læringssignalet i dag er én bit + fri prosa.
B11 Ekstern varsling notify.py:117 webhook-notifier (fail-closed opt-in) JA — levert, ikke lenger stub.
B12 Modell-map backends.py resolve_model, data/model_map.json JA.

3.1 Ekstern verifisering (MAF-status per 25.08.2026) [ekstern]

Utført av en Opus-agent (xhigh) mot learn.microsoft.com (WebFetch — microsoft-learn-MCP-en var utilgjengelig i agentens økt), PyPI (to uavhengige hentinger, samsvar) og GitHub-releases (delvis summert av fetch-laget → merket LAVERE KONFIDENS). Hver rad under er deretter kryss-sjekket LOKALT mot installert pakke der det var mulig (grep i .venv).

Tema Ekstern kilde (verbatim-utdrag) Lokalt målt i installert 1.9.0 Konsekvens
Versjoner agent-framework-core siste = 1.15.0 (2026-08-21); i vinduet 23.06→25.08: 1.10.0, 1.11.0, 1.12.0, 1.12.1, 1.13.0, 1.14.0, 1.15.0. Pinnet 1.9.0 er fra 18.06 — FØR registeret ble skrevet. orchestrations siste = 1.1.1, krever core>=1.15.0. (pypi.org/pypi/agent-framework-core/json) uv pip list: core 1.9.0, orch 1.0.1 Repoet er seks minor-versjoner bak, og STATE.md:99 kaller pinnen «ENDELIG, operatørbekreftet 23.08» — ni dager etter at 1.14.0 kom. Se F15. Upgrade-guiden (python-2026-significant-changes) stopper angivelig ved 1.8.0 — IKKE VERIFISERT (summert fetch).
B2 — læring fra menneskedommer på tvers av kjøringer «ContextProvider and HistoryProvider are the canonical Python base classes.» FileMemoryProvider: «the model should decide what to store and recall». Foundry Memory: «Memory (preview) … subject to terms applicable to "Previews"», typene er «User profile / Chat summary / Procedural memory». NOT FOUND: verdict-store, experience replay, feedback-API. B2 står som BUILD. Ingen MAF-mekanisme lagrer eller henter menneskedommer om tidligere output. G5 (Foundry memory = preview) står.
B1 — blokkér output uten deterministisk sjekk Side «Termination & Guardrails»: «middleware stops execution by setting context.result when needed and raising MiddlewareTermination, or by short-circuiting the chain without calling call_next().» «Post-termination middleware — Middleware that terminates after agent execution — useful for validating responses». response_format «parses but does not reject». (learn.microsoft.com/…/agents/middleware/termination) class MiddlewareTermination finnes i agent_framework/_middleware.py, uten @experimental (de to markørene i fila gjelder PROGRESSIVE_TOOLS) B1 er DELVIS flippet — i den installerte versjonen. Halvdelen «nekt at svaret forlater agenten» er nå en MAF-primitiv; halvdelen «avgjør TALLENE mot ekstern baseline og stemple provenance» er fortsatt vår. Registerets U8 beskrev nøyaktig denne formen. Ikke brukt (0 treff src). Se F16.
Magentic Konseptsiden (oppdatert 2026-08-10) har ingen experimental-admonisjon for Python; eneste markør er i C#-eksempelet (MAAIW001). Python-API-referansen for MagenticBuilder er stale (2025-12-12, fluent form). Verbatim: «in Python, plan review is off by default (enable_plan_review=False)». 0 experimental-treff i agent_framework_orchestrations/_magentic.py §15 G8/A2 («Magentic er eksperimentell») er utdatert for Python. Økt 56-avgjørelsen om å legge Magentic OVER, ikke I, den normative stien hviler da på arkitektur (mandat-former), ikke lenger på modenhet. Riktig konklusjon, foreldet premiss.
U5 SkillsProvider «SkillsProvider (Python) is a context provider that exposes skills to an agent. It advertises the available skills in the system prompt and registers the tools the agent uses to load skills, read resources, and run scripts.» Fire stadier; «SKILL.md is NOT auto-loaded» — kroppen hentes kun via load_skill. Ingen preview-banner på siden; kun MCPSkillsSource er experimental. @experimental(feature_id=ExperimentalFeature.SKILLS) _skills.py:76/:120 Docs (1.15) og installert kode (1.9) er uenige om status — enda et argument for at pinnen koster. Avvisningen i …2026-08-23:370 var riktig FOR 1.9.0.
U15 Evals «In Python, the evaluation framework is part of the core agent_framework package … evaluate_agent() and evaluate_workflow()». LocalEvaluator «runs checks locally without API calls». Sjekker: keyword_check, tool_called_check, tool_calls_present, tool_call_args_match; custom via @evaluator. Foundry-siden: «agent evaluation remains in public preview». «Foundry Adaptive Evals» — NOT FOUND som produktnavn. 20 @experimental i _evaluation.py Registerets U15-tekst navngir et produkt som ikke finnes på Learn. tool_call_args_match er relevant for «kaller en levende modell faktisk quick_validate?» — nettopp grensen CLAUDE.md sier er ubevist. Avvisningen var riktig for 1.9.0; for 1.15 er den ikke re-vurdert.
U12 Checkpointing Tre providere (InMemory/File/Cosmos), samme protokoll, ingen preview-banner. Verbatim: «both providers use a restricted unpickler by default … Any unsupported type causes deserialization to fail with a WorkflowCheckpointException.» «pass them via the allowed_checkpoint_types parameter using "module:qualname" format». «Starting in Python version 1.13.0, workflows also create an entry checkpoint … when responses to request events are delivered … minor breaking changes». FileCheckpointStorage + allowed_checkpoint_types finnes i _workflows/_checkpoint.py STATE-ens «MÅLT FELLE» (STATE.md:27-29) er bekreftet av dokumentasjonen. Rad 3 (NESTE) bygger på en 1.9.0-form som 1.13.0 endret — en bump etter rad 3 vil kreve re-måling av resume-stien.
Sequential / Handoff Begge i agent_framework.orchestrations, ingen status-admonisjon (kun handoff «autonomous mode» er experimental). SequentialBuilder(...).with_request_info(agents=[…]) «pause[s] after specific agents respond, allowing external input (such as human review)». class SequentialBuilder / class HandoffBuilder finnes P10-nullen står (debatten er 2 agenter; Sequential gir ingen ny kapabilitet), men with_request_info finnes ALLEREDE på GroupChat (workflow.py:116) og er uøvd (F7).
U16 Kompaksjon «Important — The compaction framework is currently experimental in Python.» Python har INGEN CompactionProvider-klasse (C#-navn); Python-formen er Agent(..., compaction_strategy=..., tokenizer=...) / apply_compaction(...) med SlidingWindowStrategy, SummarizationStrategy, TokenBudgetComposedStrategy m.fl. SlidingWindowStrategy/SummarizationStrategy/apply_compaction finnes i _compaction.py, under @experimental Registerets U16 navngir C#-konstruktet. Grep-en i § 2 fant 0 fordi Python-navnet er et annet — re-grep på compaction_strategy|apply_compaction: fortsatt 0. Uadressert står.
U19 Harness «create_harness_agent is released. Background agents, file access, and looping remain experimental». HarnessAgent er .NET-only; ToolApprovalAgentNOT FOUND som Python-navn (Python: ToolApprovalMiddleware). create_harness_agent, ToolApprovalMiddleware, AgentLoopMiddleware finnes; 28 @experimental-markører på COMPACTION/HARNESS/LOOP Registerets U19 lister to navn som ikke finnes i Python. F5 i §15.6 korrigerte versjonen, ikke navnene.
Nytt siden 23.06, rangert av agenten (1) AgentLoopMiddleware «re-invokes an agent until a completion condition is satisfied … (continue, feedback) to pass feedback to the next iteration» — experimental; ≈ Steg 5. (2) Evals (over). (3) MiddlewareTermination (over). (4) Structured outputs som førsteklasses sti (response.value). (5) Entry-checkpoints + Cosmos (1.13/1.15). (6) SequentialBuilder.with_request_info. (7) SkillsProvider. LAVERE KONFIDENS (GitHub): 1.14.0 «provider-based Foundry state stores for agent sessions, checkpoints, and function approvals», 1.15.0 «process-wide workflow checkpoint type registry». AgentLoopMiddleware finnes alt i 1.9.0 (_harness/_loop.py, experimental) Steg 5s håndrullede max_attempts-løkke har nå en MAF-form med samme bindingsdisiplin («Always bound autonomous loops»). Experimental → riktig å ikke bygge på den; men den finnes, og ingen har målt den.

Konklusjon § 3: B2 står. B1 er halvveis flippet i den versjonen repoet allerede kjører. B3/B4/B6/B7/B12 står. B8/B9/B10 er uttalt utsatt. Fire av registerets U-rader (U15, U16, U19 og G8/A2 om Magentic) bærer premisser som ikke stemmer for Python i dag — og repoet har ingen rutine som re-verifiserer registeret mot MAF-releasene (målt: siste re-lesing var 23.08-planen, mot 1.9.0).

4. Misjonstekst-samsvar

4.1 README-løftet (første skjerm, README.md:9-13), ordrett

A generic, open framework — built on Microsoft Agent Framework (MAF) — that finds cost savings inside each project of a portfolio of independent projects. A swarm of agents generates candidate measures; a mandatory deterministic validator (solver + Monte Carlo) decides the numbers; domain experts judge the outcomes (human-in-the-loop); and the system learns from their verdicts across runs.

Løfte Kode Samsvar
«built on MAF» 12 moduler importerer agent_framework; 3 orkestrerings-konstrukter (GroupChat, Magentic, middleware) + 2 chat-klienter Delvis. Bygget rundt MAF (hosting.py:2 «a wrapper, never Workflow.as_agent()»). Riktig valg, men ordet «built on» lover mer MAF enn det er.
«A swarm of agents» Debatt: 2 agenter (workflow.py:26); utforskning: 3 (explore.py) Salgsspråk. To-tre agenter er ikke en sverm.
«mandatory deterministic validator (solver + Monte Carlo)» validator.py:106 CBC · :127 seedet MC · run.py kaller den ubetinget JA. Verifisert, blokkerende, forankret (S4.0) når baselinen finnes.
«domain experts judge the outcomes» Ekte kanal: Steg 7 innboks (docs/ekspert-svar.md). Parallell kanal: verdict_input PÅKREVD FØR kjøring (run.py:525; hosting.py:80; CLI-default approved, run.py:1691-1692) BRUTT på den parallelle kanalen — dommen gis før utfallet finnes (F2).
«learns from their verdicts across runs» run.py:736-739 fold; test_portfolio_learning_loadbearing.py JA mekanisk, men hver dom som finnes i treet er syntetisk (reference_projects.json:2; shared/examples/bygg-energi-mikro/verdict-led-fro.md «frø — AI-forfattet»). Ingen ekte dom har noen gang gått gjennom sløyfa.

4.2 Non-goals (README.md:248-262), fem punkter

  1. «Not a compliance product.» — Samsvar. Ingen compliance-funksjoner; disclaimer står.
  2. «Not a portfolio-level reallocator. … Moving budget between projects, ranking projects against one another and portfolio governance sit above the method and are out of scope.» — Samsvar med ett forbehold: --goals/--ledger (run.py:1669-1680) stopper et porteføljepass når et PORTEFØLJE-mål er nådd. Det er ikke reallokering eller rangering (bølgerekkefølge = konfigrekkefølge), men det er portefølje-nivå-logikk i metoden. Uttalt grense, ikke brudd.
  3. «Not autonomous decision-making. The deterministic validator can only block; approving a measure is a domain expert's call (human-in-the-loop), and the framework implements nothing on the agents' say-so.»BRUTT i én søm: portfolio-optimiser <PROJECT> uten flagg fanger en dom med decision="approved", rationale="reviewed by expert" (run.py:1691-1692:2231/:2289:861 capture_verdictstore.add). Ingen ekspert er involvert. I et porteføljepass når den dommen neste prosjekts hypotese-prompt (run.py:1331 _merge_wave; bevist av tests/test_portfolio_learning_loadbearing.py:108). Validatoren blokkerer fortsatt — men «godkjent» er defaulten, ikke en ekspertbeslutning.
  4. «Not a turnkey vertical solution.» — Samsvar.
  5. «Not a model benchmark. The end-to-end proof runs offline against a scripted stand-in client.» — Samsvar. (Planens rad 4 — utforskning vs. debatt — ville vært en METODE-måling, ikke en modell-benchmark, og er ikke gjort.)

4.3 README-ens status-advarsel (README.md:264-273), ordrett

Status: the full 8-step agentic loop is wired and proven with load-bearing tests, and the end-to-end proof is an offline simulation with a scripted stand-in client — no live-model run yet. The ingest layer (real data sources) is implemented — … — but exercised only against committed fixtures: no bundle has yet been materialized from a live source. … A sibling implementation of the same method on the Claude Agents SDK is built in parallel from the same shared spec.

Påstand Målt Samsvar
«no live-model run yet» docs/2026-08-14-fase1b-forste-levende-kjoring.md:42 «prosjektets første levende modellkall»; :217 outcome_type: rejected, 15 306 tokens, checker_verdict: approve, validator_decision: rejected STALE. Sist endret d8ee8d3 2026-07-04 (git log -L). En levende fullkjøring HAR konkludert. Det som fortsatt er sant: «ikke bevist at systemet produserer et validert forslag mot en levende modell» (:245).
«no bundle has yet been materialized from a live source» Ingen dokumentasjon på det motsatte funnet Står (ikke falsifisert i dag; nevner: docs/ grep).
«sibling … is built in parallel» STATE.md:103 «po-claude PARKERT» STALE / ikke verifiserbar herfra.

4.4 Operatørens målbilde (23.08, gjengitt av .claude), ordrett

«Vi skal bli EKSPERTER på bruken av Microsoft Agent Framework.» Målbildet: gitt EN prompt + OKF-bundles skal løsningen stille nødvendige spørsmål, teste hypoteser, be om svar, bruke svarene og utforske løsningsrommet — og finne innsparinger mennesker ikke ser, eller regne/utforske hypoteser fagpersoner leverer, langt raskere.

Delmål Kode Status
«gitt EN prompt + OKF-bundles» --explore "<prompt>" --explore-config F --bundle-dir D (run.py:1607-1627) Delvis: én base fra CLI/hosting; flere baser kun via run.run_mandate_across_bundles (bibliotek). Åpen operatørbeslutning (STATE).
«stille nødvendige spørsmål» Eneste spørsmål sløyfa kan stille et menneske er plan-review — én gang, før løpet (explore.py:837-838 _pending_plan_reviews) Nei fra operatørflatene. CLI nekter (run.py:1975-1988), hosting nekter (hosting.py:167-172).
«teste hypoteser» quick_validate (explore.py:461-500) — samme validator, rådgivende Ja (offline; at en levende modell faktisk kaller verktøyet er ikke bevist — uttalt i CLAUDE.md).
«be om svar, bruke svarene» plan_reviewer bibliotek-only; ingen «spør eksperten»-tool blant de fire (list_bundles/read_bundle/read_file/quick_validate) Nei. Planens rad 3 (U12 + asynkron U13) er nøyaktig dette, og er NESTE.
«utforske løsningsrommet» Magentic-manager + navigator (explore.py:596-603) Mekanisme ja, virkning umålt.
«finne innsparinger mennesker ikke ser» Ingen måling. Null validerte levende forslag; den ene levende kjøringen fant opp EL-LIGHTING-OP-HR (docs/2026-08-14-… § 6).
«regne/utforske hypoteser fagpersoner leverer» --mandate (run.py:1597) + seed_approaches (explore.py:848, bibliotek) Ja for regning (mandat-stien); utforskning av ekspertfrø kun via bibliotek.
«EKSPERTER på MAF» § 2: 5/19 fullt Nei. Ekspertisen som finnes er hvorfor MAF ikke passer (as_agent, evals, Skills, graf, Concurrent — alle målt og avvist). Det er kompetanse, men ikke den operatøren beskrev.

5. Funn, sortert etter alvorlighet

BLOCKER — ingen. Ingenting hindrer at systemet gjør det README lover mekanisk; problemene er påstander som ikke stemmer og misjonsmål uten måling.

MAJOR

F1 — README-status er stale, offentlig, i begge retninger. README.md:264-273. «no live-model run yet» — falsk siden 14.08 (docs/2026-08-14-fase1b-forste-levende-kjoring.md:217). «sibling … built in parallel» — STATE.md:103 sier parkert. Status-avsnittet sist endret 2026-07-04 (d8ee8d3). tests/test_public_surface_claims_loadbearing.py gater to andre påstander (credential-klasse, wheel-navn), ikke denne. Operatøren lever av tillit; en README som underrapporterer er mindre farlig enn en som overrapporterer, men den er fortsatt usann.

F2 — Ekspertdommen gis FØR forslaget finnes, og defaulter til approved. run.py:525 (verdict_input: dict[str, str] påkrevd), :861 capture_verdict(features, verdict_input["decision"], …), :1691-1692 (--decision default "approved", --rationale default "reviewed by expert"), hosting.py:80 (verdict_input i _REQUIRED_FIELDS), DEPLOY.md:198 («The expert verdict for this run»). reference_domain.py:48 kaller det selv «SYNTHETIC Layer-2». Konsekvens: (a) hver CLI-kjøring uten flagg produserer et RunResult.verdict med en ekspertgodkjenning ingen ekspert ga; (b) i run_portfolio når den dommen neste prosjekts prompt som «prior expert verdict» (run.py:1331; tests/test_portfolio_learning_loadbearing.py:108 beviser dataflyten); (c) på den hostede flaten MÅ en ekstern kaller dikte opp en dom for å få kjørt i det hele tatt — den når ikke svaret (hosting.py:181-190 legger kun verdict_id ut), men den er et påkrevd felt som ikke kan fylles ærlig. Dette er non-goal 3 brutt i én søm, på flaten som ble overlevert 14.08. Den ærlige kanalen (Steg 7-innboksen, docs/ekspert-svar.md) finnes ved siden av — F2 handler om at den uærlige ikke er fjernet.

F3 — ExpeLContextProvider er en MAF-hook som ikke bærer noe. run.py:736-739 folder læringen inn ved .format_fewshot() + string-konkatenering; run.py:848-857 kjører before_run inn i en SessionContext kommentaren selv kaller «NOT what reaches the prompt». For U9 betyr det at MAF-konstruktet subklasses for å se brukt ut, mens injeksjonen skjer utenom. Funksjonelt riktig; som MAF-ekspertise er det motsatt av registerets intensjon.

F4 — Målbildets «be om svar, bruke svarene» er ikke nåbart fra noen operatørflate. run.py:1975-1988, hosting.py:167-172: begge nekter enable_plan_review. Eneste dør er explore(…, plan_reviewer=…) i bibliotek-APIet (explore.py:849). Ingen mid-løp-spørsmål finnes overhodet — kun plan-review før løpet. Planlagt (rad 3), ikke bygget.

F5 — Ingen måling av misjonens kjernepåstand. «finner innsparinger mennesker ikke ser» har null belegg: null validerte forslag mot levende modell (docs/2026-08-14-…:245), null ekte ekspertdommer i treet (reference_projects.json:2; alle type: verdict-filer merket frø/AI), planens rad 4 (utforskning vs. debatt på golden-bundelen) ugjort. Systemet kan i dag ikke skille «mekanismen virker» fra «metoden gir verdi».

F15 — MAF-pinnen er erklært «ENDELIG» seks minor-releaser bak, uten re-verifisering. STATE.md:99 («orchestrations låst til 1.0.1 (core 1.9.0) — ENDELIG, operatørbekreftet 23.08»), pyproject.toml agent-framework-core>=1.9.0,<2. Målt [ekstern]: core 1.15.0 (21.08) og orchestrations 1.1.1 (krever core ≥1.15) var ute før bekreftelsen; 1.13.0 endret checkpoint-formen rad 3 skal bygges på. Pinnen er begrunnet (privat-API-premisser, tests/test_maf_version_guard.py), men den er ikke en MAF-ekspertise-posisjon — det er en frys. Ingen rutine i repoet re-leser §15 mot releasene; registeret har én commit (ec9ac74, 23.06). For målbildets «EKSPERTER på MAF» er dette det tyngste enkeltfunnet: ekspertisen er datert.

F16 — B1-premisset er halvveis foreldet i den installerte versjonen. Registeret (§15.2 B1): «Deterministisk verdikontroll er ikke en MAF-primitiv». Installert agent_framework/_middleware.py shipper class MiddlewareTermination uten @experimental; Learn (termination-siden): «Post-termination middleware — … useful for validating responses». Det er formen U8 ba om, og den ville gjort «forslaget forlater aldri agenten uvalidert» til en egenskap ved grafen i stedet for ved run.py. Tall-halvdelen (CBC/MC/baseline/provenance) står som egenbygg. 0 treff i src. Ikke et krav om å bygge om — et krav om at avvisningen av «graf-adopsjon» (P10) re-vurderes med dette premisset.

MINOR

F6 — U16/U17/U19 er uadresserte, ikke avviste. Eneste spor er en telling (docs/plan/2026-08-23-…:58). U16 (CompactionProvider) er den relevante: Magentic-løp har kun token-taket som vern mot kontekstvekst.

F7 — Layer-1 HITL er «green-but-dead». workflow.py:116 bak enable_layer1_hitl=False (run.py:536), intet CLI-flagg, eneste test tests/test_workflow.py:58 bygger uten å kjøre. Repoets egen defektklasse (CLAUDE.md «grønn-men-død»).

F8 — «Swarm» og «built on» er salgsspråk (README.md:9-10). To agenter i debatt, tre i utforskning; MAF er en klient + én orkestrering på den normative stien.

F9 — Metode-skillen finnes ikke. CLAUDE.md-konvensjon «Metode kodifiseres som Agent Skill»; find shared -name SKILL.md → kun expert-reviewer, og dens prosa lastes aldri (persona.py:27 leser kun JSON-eksempelet). U5 er dermed «nei» også som artefakt.

F10 — Privat-API-avhengighet er pinnet, ikke fjernet. explore.py:73/:152 siterer _magentic.py:1118/:1128-1131 linjenumre som premisser; tests/test_maf_version_guard.py:1-14 pinner _inner_get_response/_build_response_stream; orchestrations låst til 1.0.1. Riktig håndtert (tripwire + to-sidig pin), men det betyr at «MAF-ekspertise» her inkluderer avhengighet av interna som kan flytte seg ved neste minor.

F11 — Debatten er en fast sekvens som alltid tvinges ferdig. workflow.py:99-113 round-robin, terminerings-nett max_rounds*2+1 fyrer aldri; «forcing completion» i hver kjøring, også live (docs/2026-08-14-…:59). P9 i egnethetsplanen noterte det («Group Chat beholdes av byttekost») — det er ikke en debatt som konvergerer, det er tre tvungne turer.

F12 — Feil nevner har sirkulert. «6 av 15» kommer fra docs/plan/2026-08-23-…:58; registeret har 19 rader. Rett tall etter denne tellingen: 5 fullt / 5 delvis / 9 nei av 19.

F17 — Fire register-rader bærer premisser som ikke stemmer for Python i dag [ekstern + lokalt]: U15 navngir «Foundry Adaptive Evals» (ikke funnet på Learn); U16 navngir CompactionProvider (C#-navn — Python-formen er compaction_strategy=/apply_compaction, 0 treff i src også med det navnet); U19 navngir HarnessAgent/ToolApprovalAgent som Python 1.7.0 (.NET-only; Python er create_harness_agent/ToolApprovalMiddleware); G8/A2 kaller Magentic eksperimentell (0 markører i installert _magentic.py, ingen Python-admonisjon på Learn). §15.6 «FIX» korrigerte åtte påstander i juni; ingen av disse fire er blant dem.

NICE

F13 — Non-goal 2-grensen bør uttales i README. --goals/--ledger er portefølje-nivå-logikk (stopp, ikke reallokering). Én setning i Non-goals ville lukket tvetydigheten.

F14 — B10 er utsatt til ekte dommer finnes (verdicts.py:313-314) — riktig, men bør stå i README-status som en uttalt grense for hva «learns» betyr i dag (én bit + prosa).

6. Verifiseringslogg (kommandoer kjørt i denne økten, 2026-08-25)

# Påstand Kommando → resultat
1 Suiten grønn PYTHONIOENCODING=utf-8 uv run pytest -q1021 passed, 5 skipped, 2 warnings in 166.18s, EXIT=0
2 De 5 skip er env-gatede live-tester uv run pytest -q -rs tests/test_*_live.py → 4 SKIPPED med grunn (Foundry / PORTFOLIO_LIVE_FULL_RUN / LOCAL endpoint); den femte er i samme klasse (full kjøring ga 5)
3 Lint/typer rene uv run ruff check . → «All checks passed!»; ruff format --check → 168 filer formatert; uv run mypy src → «Success: no issues found in 34 source files»
4 Golden-hash shasum tests/golden/demo-transcript.stdoutea8c534773acdbe41ae68f2c55724d69aaf8be4f
5 Testomfang ls tests/*.py | wc -l → 115 filer; grep -rhE "^\s*(async )?def test_" tests | wc -l → 974 funksjoner
6 src-omfang find src -name "*.py" | xargs wc -l → 34 filer, 11 650 linjer
7 MAF-versjoner uv pip list → core 1.9.0, orchestrations 1.0.1, foundry 1.8.2, openai 1.8.2; uv.lock samme
8 §15 har 19 U-rader og én commit awk '/^## 15/,/^## 16/' → U1U19; git log --follow -- docs/research/2026-06-23-prior-art-platform.md → kun ec9ac74
9 Hvert U-konstrukt mot src for pat in …; grep -rn --include="*.py" -F "$pat" src — tabellen i § 2
10 README-status sist endret git log -L '/^> \*\*Status:\*\*/,+3:README.md'd8ee8d3 2026-07-04
11 Levende kjøring konkluderte sed -n '156,260p' docs/2026-08-14-fase1b-forste-levende-kjoring.mdoutcome_type: rejected, token_usage: 15 306
12 verdict_input-flyt grep -n verdict_input src/portfolio_optimiser/run.py:525/:861/:2231/:2289; grep -nE '"--decision"|"--rationale"':1691-1692; hosting.py:80
13 ExpeL-fold utenom hooken sed -n '700,760p;848,870p' src/portfolio_optimiser/run.py
14 Magentic ikke eksperimentell i installert pakke grep -n "experimental" .venv/…/agent_framework_orchestrations/_magentic.py → 0 treff; _skills.py@experimental :76/:120; _evaluation.py → 20
15 Multi-base-ordren arkivert (stoppbetingelse) find ~/.claude/coord/portfolio-optimiser -name "*080753Z*"orders/archive/…
16 Ingen ekte ekspertdom i treet grep -rl "type: verdict" shared/examples src/…/data/bundles → 12 filer; frontmatter provenance: "frø — AI-forfattet …"; reference_projects.json:2 «SYNTHETIC»
17 Nye MAF-konstrukter finnes i INSTALLERT 1.9.0 grep -rl -F "class MiddlewareTermination" .venv/…/agent_framework_middleware.py (kun PROGRESSIVE_TOOLS-markører i fila); AgentLoopMiddleware_harness/_loop.py; apply_compaction_compaction.py; create_harness_agent_harness/_agent.py; SequentialBuilder/HandoffBuilder → orchestrations; FileCheckpointStorage + allowed_checkpoint_types_workflows/_checkpoint.py; 28 @experimental på COMPACTION/HARNESS/LOOP
18 Ingen av dem brukt grep -rn --include="*.py" -E "compaction_strategy|apply_compaction|MiddlewareTermination|AgentLoopMiddleware|create_harness_agent" src → 0
19 MAF-versjoner på PyPI/Learn [ekstern] Opus-agent, WebFetch mot pypi.org/pypi/agent-framework-core/json (×2, samsvar) + learn.microsoft.com — rapporten er gjengitt i § 3.1; GitHub-release-punkter merket LAVERE KONFIDENS der fetch-laget summerte
20 Doc-gaten godtar det nye dokumentet (datert sti) uv run pytest -q tests/test_doc_constant_sync_loadbearing.py tests/test_public_surface_claims_loadbearing.py → 20 passed

Ikke verifisert i denne økten: at ingen bundle er materialisert fra en levende kilde (bare ikke funnet motbevis); Claude-SDK-søskenets faktiske tilstand (annet repo); at en levende modell faktisk kaller utforskningens verktøy (uttalt grense i CLAUDE.md, ikke målt her).