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
This commit is contained in:
parent
785261f229
commit
d01a157986
1 changed files with 327 additions and 0 deletions
327
docs/2026-08-25-fable-misjonsreview.md
Normal file
327
docs/2026-08-25-fable-misjonsreview.md
Normal file
|
|
@ -0,0 +1,327 @@
|
||||||
|
# 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 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)**, `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. 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
|
||||||
|
|
||||||
|
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_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 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 -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).
|
||||||
Loading…
Add table
Add a link
Reference in a new issue