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
40 KiB
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 motsrc/og kallstedet lest; ingen tall er sitert fraSTATE.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 1–8): 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),
ruffren,mypyren (34 filer), golden-transkriptetea8c534773acdbe41ae68f2c55724d69aaf8be4f(måltshasum). - 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 merketSYNTHETIC/ «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. U1–U19 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 56–58 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 U1–U15 og setter U16–U19 «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; ToolApprovalAgent — NOT 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
- «Not a compliance product.» — Samsvar. Ingen compliance-funksjoner; disclaimer står.
- «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. - «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 meddecision="approved",rationale="reviewed by expert"(run.py:1691-1692→:2231/:2289→:861capture_verdict→store.add). Ingen ekspert er involvert. I et porteføljepass når den dommen neste prosjekts hypotese-prompt (run.py:1331_merge_wave; bevist avtests/test_portfolio_learning_loadbearing.py:108). Validatoren blokkerer fortsatt — men «godkjent» er defaulten, ikke en ekspertbeslutning. - «Not a turnkey vertical solution.» — Samsvar.
- «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 -q → 1021 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.stdout → ea8c534773acdbe41ae68f2c55724d69aaf8be4f |
| 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/' → U1–U19; 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.md → outcome_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).