portfolio-optimiser/docs/2026-09-11-p12-maf-gjeld.md
Kjell Tore Guttormsen 6eb58e5a26 docs(p12): MAF debt re-measured U1-U19 - 6/5/8 unchanged row for row, the pin bump moved U5's premise not its status [skip-docs]
Re-measured all 19 rows of the prior-art register 15.1 against ce22b0e with the
review's grep-then-read-the-call-site method (37 modules / 17 747 lines). No row
moved in either direction over the 109 commits since 29.08; in-row changes (debate
got four Function Tools and an observing FunctionMiddleware, da5f10f) move no
status. Of the six "ja" only U3 is on the default CLI path. SkillsProvider is no
longer @experimental in installed core 1.16.0 and MAF's own FileSkillsSource loads
po's two skills 2/2, so one of three reasons behind "SkillsProvider AVVIST" is dead.
okf 0.8.3: 5 rows tried, 0 moved. A/B/C formulated, not decided. src untouched, NOK 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 10:50:14 +02:00

40 KiB
Raw Blame History

P12 — MAF-gjelden re-målt: U1U19 mot dagens kode (2026-09-11)

Ordre: 20260911T082410Z-5561027910-from-.claude. Mandat: re-mål de 19 radene i docs/research/2026-06-23-prior-art-platform.md § 15.1 mot koden på ce22b0e, si hva som mangler per rad, prøv hva okf 0.8.3 muliggjør, og formuler (A)/(B)/(C) på nytt uten å avgjøre dem. Ingen kode er endret (git diff --stat ce22b0e -- src er tom). NOK 0. Ingen push. Hvert tall under kommer fra en kommando kjørt i DENNE økten (§ 9); der et eldre dokument siteres, står fil og linje.

§ 0 Hva som ER målt og hva som IKKE er det

Målt:

  • Ny telling: 6 ja · 5 delvis · 8 nei av 19 — UENDRET fra 29.08, rad for rad. Ingen rad har flyttet status, verken opp eller ned, over de 109 commitene siden 29.08 (57 av dem rører src).
  • Av de 6 «ja» er ÉN på CLI-ens default-sti uten flagg (U3). U18 er default på den hostede flaten og opt-in på CLI-en. U4, U6, U12 og U14 er opt-in bak et flagg eller en miljøvariabel som er AV som default (§ 3, kolonnen «I DAG»).
  • Innenfor-rad-endringer finnes, men ingen flytter en status. Debatten fikk fire Function Tools og en observerende FunctionMiddleware på den normative stien (da5f10f, U7/U8). Et nytt @tool er definert, men har 0 kallere i src (ccd65d3, U7).
  • Pinne-løftet (ef2f1cb, 1.9.0 → 1.16.0) har FJERNET ett premiss uten at po endret en linje: SkillsProvider er ikke lenger @experimental i installert core 1.16.0. De tre markørene i _skills.py sitter nå på MCPSkillResource/MCPSkill/MCPSkillsSource (:4187/:4229/:4862, alle MCP_SKILLS). MAFs egen FileSkillsSource laster 2/2 av po sine SKILL.md (§ 6). U5 forblir nei (0 kallsteder). Men én av de tre begrunnelsene i avvisningen (plan 23.08 § D.2) er død, og det er et veivalg (§ 7, D).
  • MiddlewareTermination finnes i installert 1.16.0 (_middleware.py:75, ingen @experimental på den) og brukes ikke av po: 0 treff over 37 filer / 17 747 linjer.
  • okf 0.8.3: 5 U-rader prøvd, 0 flyttet (§ 6). PATH-okf er nå 0.8.3, ikke 0.8.1 som ordren sa, og den er byte-lik taggen v0.8.3.
  • Innboksen: 2/2 lukket. Begge meldingenes premiss «tagget lokalt, upushet» holder ikke lenger: okf main og alle fire taggene v0.8.0v0.8.3 ligger på Forgejo.

IKKE målt:

  • Ingen rad er bekreftet LEVENDE. Et grep-tall måler kallsteder, ikke om kapabiliteten virker mot en modell.
  • Innholdet i MAF-releasene 1.101.16 utover de konstruktene radene navngir, som ContextWindowCompactionStrategy (_compaction.py:1624). Den er sett, men ikke målt.
  • Om Microsoft Learn fortsatt kaller SkillsProvider eller compaction «experimental» i prosa. Kilden her er den INSTALLERTE koden, ikke dokumentasjonen.

TEST NÅ

uv pip list | grep agent-framework                      # core 1.16.0 · foundry 1.8.2 · openai 1.8.2 · orch 1.1.1
grep -rn --include="*.py" -F 'MiddlewareTermination' src | wc -l   # 0  (kjent-positiv: samme stavemåte i .venv → 7 filer)
git log -S'FileCheckpointStorage(' --oneline -- src    # c08ae91 — U12s nei→ja-flytt (siste flytt noen rad har hatt)
git log -S'debate_middleware' --oneline -- src         # da5f10f — innenfor-rad-endring U8 (ingen statusflytt)
bash scratchpad/p12/u_grep.sh                           # hele konstrukt-tabellen, src-treff + venv-kjent-positiv
uv run pytest -q && git status --porcelain              # 1577 passed / 5 skipped; kun de to utrackede

§ 1 Premisser, med utfall per rad

# Premiss (ordren) Utfall Kommando
(i) HEAD ce22b0e, ls-remote origin main = d8dadbf, upushet = 1 AVVIK: HEAD ce22b0e , men ls-remote origin main = ce22b0e → upushet = 0 før denne økta. Noen har pushet siden PM målte git rev-parse HEAD; git ls-remote origin main
(ii) nøyaktig to utrackede docs/presentasjon-portfolio-optimiser.html + scratchpad/. HTML-en er ikke rørt, ikke lest og ikke staget git status --porcelain
(iii) wc -l STATE.md = 117 117 wc -l STATE.md
(iv) 1577/5, ruff/format/mypy rene, golden ea8c534… 1577 passed, 5 skipped (294,85 s), ruff «All checks passed!», format «199 files already formatted», mypy «no issues found in 37 source files», golden ea8c534773acdbe41ae68f2c55724d69aaf8be4f (av INNHOLDET) uv run pytest -q; uv run ruff check src tests; uv run ruff format --check src tests; uv run mypy src; shasum -a 1 tests/golden/demo-transcript.stdout
(v) nevneren er 19 19, på linje 271289 `grep -c '^
(vi) 29.08: 6/5/8 ordrett i docs/2026-08-29-maf-gjelden-omfang.md l. 1617 lest
(vii) 37 filer / 17 747 linjer 37 / 17 747 (på 3bdc5c1, 29.08-dokets commit: 34 / 12 873) ls src/portfolio_optimiser/*.py | wc -l; wc -l src/portfolio_optimiser/*.py | tail -1; git ls-tree -r --name-only 3bdc5c1 src + git show
(viii) core 1.16.0 · foundry 1.8.2 · openai 1.8.2 · orch 1.1.1 identisk; pinnen pyproject.toml l. 1217 uv pip list | grep agent-framework
(ix) okf på PATH = 0.8.1 AVVIK: PATH-okf er 0.8.3 (uv tool list → «llm-ingestion-okf v0.8.3»; …/tools/llm-ingestion-okf/bin/python -c "…__version__"0.8.3; uv-receipt: git = "…/open/llm-ingestion-okf.git?rev=v0.8.3"). Operatøren har installert på nytt siden PM målte. Den er LEST og ikke rørt uv tool list; __version__; ~/.local/share/uv/tools/llm-ingestion-okf/uv-receipt.toml
(x) v0.8.3 = 0963dfa…, kun lokal tagg v0.8.0v0.8.3, rev-list -n1 v0.8.3 = 0963dfa5e5be6282cdbc41b08d85460b8fd309ef. AVVIK: «kun lokal» holder IKKE. ls-remote --tags origin | grep -c 'v0\.8' = 8 (4 annoterte tagger × 2 linjer), og ls-remote origin main = 0308169 = lokal main git -C ~/repos/llm-ingestion-okf ls-remote …
(xi) --source-quota/--stem-prefix er i --help, ikke CHANGELOG begge i okf consume --help (PATH-0.8.3) okf consume --help
(xii) P9/P10/P11 re-måles ikke ingen re-måling. Tall derfra er sitert med linje
(xiii) A/B/C ordrett alle tre linjene funnet der ordren sier (§ 7) sed -n på de tre filene
(xiv) innboks 2, kø 0 utenom ordren inbox = 2 (rc 0), orders maxdepth 1 = 0 find … -type f | wc -l
«109 commits siden 29.08» 109 med --since='2026-08-29 00:00'. Uten klokkeslett ga samme kommando 108, fordi git leser en dato uten tid som «den datoen, på nåværende klokkeslett», så tallet flytter seg med tid på døgnet git log --oneline --since='2026-08-29 00:00' | wc -l

§ 2 Versjonsmålingen

Hva Tall Kommando
MAF installert core 1.16.0, orchestrations 1.1.1, foundry 1.8.2, openai 1.8.2 uv pip list | grep -i agent-framework; importlib.metadata.version(...)
@experimental i _skills.py (U5) 3: :4187 MCPSkillResource, :4229 MCPSkill, :4862 MCPSkillsSource (alle MCP_SKILLS). SkillsProvider (:1831) og FileSkillsSource (:2790) har ingen. Reviewen målte @experimental(SKILLS):76/:120 i 1.9.0 grep -n -A2 '@experimental' .venv/…/agent_framework/_skills.py
@experimental i _evaluation.py (U15) 20 (reviewen: 20 i 1.9.0) grep -c '@experimental' …/_evaluation.py
@experimental i _compaction.py (U16) 0 (29.08 så 0 i en scratch-1.16.0; nå installert) grep -c '@experimental' …/_compaction.py
@experimental i _harness/ (U19) 16 (29.08 § 6 l. 36: 16) grep -rh '@experimental' …/_harness | wc -l
@experimental i _magentic.py (U4) 0 grep -c '@experimental' …/agent_framework_orchestrations/_magentic.py
MiddlewareTermination (U8) finnes, _middleware.py:75. Fila har 3 markører, på :353 add_tools, :390 remove_tools og :745 MiddlewareBundle, ingen på den. MiddlewareFailure finnes på :85. Begge eksportert fra agent_framework grep -rn 'class MiddlewareTermination|class MiddlewareFailure'; grep -n -A1 '@experimental' …/_middleware.py; hasattr(agent_framework, …)
okf på PATH 0.8.3, to målemåter: uv tool list og __version__. which okf = ~/.local/bin/okf se § 1 (ix)
okf eksport-0.8.3 git archive v0.8.3 pakket ut under scratchpad/p12/okf-083-export/. diff -rq -x __pycache__ export/src/llm_ingestion_okf <PATH-site-packages> → eneste avvik er Only in <PATH>: _data (pakkedata: consumption-contract.md, okf-consume-template.md). PATH-0.8.3 ≡ tagg-0.8.3 i kildekode git -C ~/repos/llm-ingestion-okf archive v0.8.3 | tar -x; diff -rq
okf check-regler 16 på PATH-0.8.3 og 16 fra eksporten. STATE sa «regel 16 kun på main». Den er nå i taggene python -c "from llm_ingestion_okf import contract_check as c; print(len(c.RULES))"
okf-pinnen po selv bruker v0.3.2 = f14c075 (uendret, HOLDT) grep -n llm-ingestion-okf pyproject.toml uv.lock

Hvilken okf som målte hva: alt i § 6 er målt med PATH-0.8.3, bortsett fra SKILL.md-proben, som leser eksport-0.8.3-katalogen skills/. Den katalogen følger ikke med pakken, men de to er bevist like i kildekode.

§ 3 U1U19 mot dagens kode

Metode (ordrett fra docs/2026-08-25-fable-misjonsreview.md § 2): «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.» Min nevner: 37 moduler / 17 747 linjer (ls src/portfolio_optimiser/*.py | wc -l; wc -l src/portfolio_optimiser/*.py | tail -1).

Kjent-positiv per null: hvert konstrukt er grepet med SAMME -F-stavemåte over de fire installerte agent_framework*-pakkene (venv-tallet i scratchpad/p12/u_grep.sh). En src=0 teller bare som null når venv > 0, altså når stavemåten finnes. Konstrukter med venv = 0 er registerets C#- eller ikke-installerte navn. De er validert på det Python-navnet som faktisk finnes, og det står i raden.

Kapabilitets-kolonnen siterer § 15.1 ORDRETT: «Kapabilitet» — «MAF-konstrukt / API».

ID Kapabilitet (§ 15.1, l. 271289, ordrett) 29.08 I DAG Bevis (kallsted, fil:linje) Endring siden 29.08, og hvorfor
U1 Orkestrator fan-out per prosjekt — ConcurrentBuilder / AgentWorkflowBuilder.BuildConcurrent() + FanIn-aggregering nei nei ConcurrentBuilder src 0 (venv 4). Håndrullet: run.py:2004 wave_results = await asyncio.gather( Ingen. Forekomster 0 → 0 (git grep -c3bdc5c1 mot nå)
U2 Per-prosjekt graf-workflow — WorkflowBuilder (fan-out/fan-in, conditional/switch-case-edges, superstep, typesikkerhet) nei nei WorkflowBuilder src 0 (venv 14) Ingen. 0 → 0
U3 Debatt-mønster (maker-checker) — GroupChatBuilder; C# RoundRobinGroupChatManager.ShouldTerminateAsync + MaximumIterationCount; Python termination_condition-lambda ja ja (default-stien, hver kjøring) workflow.py:104 builder = GroupChatBuilder( · :108 termination_condition=make_termination(...), kalt fra run.py:1265 debate = fresh_workflow( Ingen. 1 → 1. Debatten fikk verktøy og middleware (se U7/U8), men byggeren er den samme
U4 Åpne delsteg (kun ved behov) — Magentic: MagenticBuilder/StandardMagenticManager; max_round_count/max_stall_count/max_reset_count; progress ledger ja ja (opt-in: --explore, default None, run.py:2469) explore.py:1361 builder = MagenticBuilder( · :1364 max_round_count=contract.max_rounds, nådd fra run.py:3603 explore( / :3589 resume_exploration( Ingen. 2 → 2. _magentic.py har 0 @experimental i orch 1.1.1
U5 Brukerleverte metoder — Agent Skills: skills/<navn>/SKILL.md + scripts/ + references/ + assets/; SkillsProvider (Py) / AgentSkillsProvider (C#); McpSkillsSource (Py 1.8.0) nei nei SkillsProvider src 0 (venv 3), MCPSkillsSource 0 (venv 3). Eneste SKILL.md-treff er prosa: persona.py:3 Status uendret, premisset flyttet av pinnen (ef2f1cb): SkillsProvider er ikke lenger @experimental i 1.16.0 (§ 2), og MAFs FileSkillsSource laster po sine to skills 2/2 (§ 6). Avvisningens tre grunner (plan 23.08 § D.2: «ExperimentalFeature.SKILLS; egen loader virker; commons eier innholdet») er nå én død, to står. → veivalg D
U6 Datatilgang — MCP-tools: MCPStdioTool / MCPStreamableHTTPTool / MCPWebsocketTool; eksponer agent som server via as_mcp_server() ja ja (opt-in: --mcp-config, default None, run.py:2577) mcp_tools.py:154 MCPStdioTool( · :170 MCPStreamableHTTPTool(, wiret run.py:1235 build_mcp_tools(mcp_servers) if mcp_servers else []. MCPWebsocketTool 0 (venv 3), as_mcp_server 0 (venv 1) Ingen. 1 → 1
U7 Solver/validator/Monte Carlo som verktøy — Function Tools (alle store providere, inkl. Anthropic) delvis delvis @tool: datasource.py:108 retrieve_cost_docs (veg-stien, run.py:1204) · explore.py:1033/1066/1095/1113 list_bundles/read_bundle/read_dir/read_filenå på debattens default bundle-sti run.py:1187 debate_tools = list(navigator_tools([bundle_dir], ...)) · explore.py:1230 quick_validate (kun utforskning, rådgivende). Validatoren på den normative stien er IKKE et verktøy (kalles etter generering) Innenfor raden: @tool 5 → 7 (baa6f45 read_dir, ccd65d3 concept_adjudication_state). navigator_tools 2 → 6 (da5f10f S2c: debatten navigerer, 76b939b). Status uendret: registerets formål er solver/validator/MC som verktøy, og det er fortsatt bare den rådgivende quick_validate. make_adjudication_tool (tools.py:43) har 0 kallere i src (1 i tests), altså et definert verktøy uten wiring
U8 Intercept av tool-calls (blokkerende validator) — Middleware-pipeline .Use(); FunctionMiddleware (InvokingAsync/InvokedAsync) delvis delvis budget.py:228 class BudgetMiddleware(ChatMiddleware) · mcp_tools.py:197 class ToolCallRecorder(FunctionMiddleware) · explore.py:352 class ExplorationToolRecorder(FunctionMiddleware), nå også på debatten run.py:1262 debate_middleware = [budget_mw, ExplorationToolRecorder(debate_tool_calls)]. MiddlewareTermination src 0 (venv 7), MiddlewareFailure 0 (venv 4) Innenfor raden: FunctionMiddleware 2 → 4 (4aa4f9c klassen, da5f10f på debatten). Ny middleware OBSERVERER, ingen blokkerer. Primitiven for å blokkere finnes i installert 1.16.0 (§ 2) og er ubrukt
U9 Læringssløyfe-injeksjon — Custom ContextProvider / HistoryProvider delvis delvis verdicts.py:340 class ExpeLContextProvider(ContextProvider). Bærende bruk: run.py:1385 fewshot = ExpeLContextProvider(...).format_fewshot() string-konkatenert inn i gen_context. Dekorativ bruk: run.py:15631565 before_run inn i en kastet SessionContext (run.py:1560: «is NOT what reaches the prompt»). context_providers src 0 (venv 11); proposeren kaller rått generate.py:630 chat_client.get_response( Ingen. ContextProvider 8 → 8. F3 (29.08 § 1) står uendret
U10 Vektorlagre — Azure AI Search, Cosmos, Qdrant, Redis, Postgres (innebygde abstraksjoner) nei nei QdrantCollection/CosmosNoSql/RedisCollection venv 0: integrasjonspakkene er ikke installert (uv pip list viser kun de fire agent-framework*). Bred kontroll grep -rniE 'qdrant|redis|cosmos|postgres|azure_ai_search|vectorstore|vector_store' src = 2, begge egne: semretrieval.py:355 save_vector_store / :393 load_vector_store (numpy, «MAF-free», D-C) Ingen
U11 Citation-aware RAG-injeksjon — Custom AIContextProvider; TextSearchProvider (C#, SourceName/SourceLink); Azure AI Search agentic retrieval (GA 2026-04-01) delvis delvis provenance.py:18 from agent_framework import Annotation, TextSpanRegion · :100 TextSpanRegion( inne i ProvenanceStamp.to_annotations() (:93, «for display only»). Egen sitatbæring: datasource.Citation, bundle_citations, bundle_excerpt_citations (7aa06d5). AIContextProvider/TextSearchProvider er C#-navn (venv 0) Ingen statusflytt, men et forbehold: to_annotations() har 0 kallere i src (1 i tests/test_provenance.py:49), og slik var det også på 3bdc5c1 (2 → 2 forekomster). MAF-typen bor altså bare på et bibliotek-API for visning. «Delvis» hviler på po sin EGEN sitatbæring, som vokste (pre-passets utdrags-siteringer), ikke på en MAF-provider
U12 Persistens / kræsj-overlevelse — Checkpointing (InMemory/File/Cosmos), pending HITL re-emitteres ved resume; Durable Task-extension for langvarig HITL ja (opt-in) ja (opt-in: --checkpoint-dir, default None, run.py:2546) explore.py:1375 builder = builder.with_checkpointing(checkpoint_storage(checkpoint_dir)) · :687 return FileCheckpointStorage( · resume :2076 checkpoint_storage=checkpoint_storage(checkpoint_dir). InMemoryCheckpointStorage 0 (venv 4) Innenfor raden: ef2f1cb (F15) flyttet park-vakten til det deklarerte feltet pending_request_info_events (explore.py:1931). Tellingen 1 → 1. Siste FLYTT noen rad har hatt er fortsatt c08ae91 (26.08)
U13 HITL-gates — Tool approval (@tool(approval_mode='always_require') Py / ApprovalRequiredAIFunction C#); RequestPort/request_info(); MagenticPlanReviewRequest/.approve()/.revise() delvis delvis Plan review: explore.py:674 MagenticPlanReviewRequest i _ALLOWED_CHECKPOINT_TYPES · :1624 filtrerer request_info-events. CLI-dør --plan-review (store_true, av, run.py:2490) + asynkron via --checkpoint-dir/--resume. Layer-1: workflow.py:116 with_request_info(...) bak enable_layer1_hitl=False (workflow.py:78, run.py:1009), enable_layer1_hitl=True i src = 0, så biblioteket er eneste dør. approval_mode src 0 (venv 16). Hosting nekter: hosting.py:200 Ingen statusflytt. MAJOR-2s --proposal-review (59f3fce, fedf989) er en EGEN terminal-reviewer: proposal_review.py har 0 agent_framework-importer (de to treffene :1112 er prosa). Den er HITL i misjonens forstand, men ikke et MAF-konstrukt, så den flytter ikke raden
U14 Observabilitet (deploy-gate) — OpenTelemetry (GenAI-konvensjoner) ja ja (opt-in: PORTFOLIO_OTEL på truthiness, av når uset, tracing.py:63/:153) tracing.py:160162 configure = configure_otel_providers:196 configure(enable_console_exporters=False, exporters=exporters). Tre kallsteder: run.py:2727, simulation.py:1061, hosting.py:375 Ingen. 4 → 4
U15 Evaluering — LocalEvaluator, evaluate_workflow(), Foundry Adaptive Evals nei nei LocalEvaluator 0 (venv 2), evaluate_workflow 0 (venv 3), evaluate_agent 0 (venv 3) Ingen. Avvisningens vilkår («MAF-flaten NEI inntil EVALS forlater ExperimentalFeature», plan 23.08 § D.3) er ikke oppfylt: 20 markører i 1.16.0
U16 Kontekst-kompaktering — CompactionProvider (SlidingWindow/Truncation/summarization) nei nei CompactionProvider 0 (venv 4), compaction_strategy 0 (venv 10), apply_compaction 0 (venv 3), SlidingWindowStrategy 0 (venv 2) Ingen. _compaction.py har 0 @experimental installert. Vilkårene fra 29.08 § 4 er ikke inntruffet (§ 5)
U17 Agent-som-verktøy — AsAIFunction() (C#) / as_tool() (Py) — IKKE AIFunctionFactory.Create() nei nei as_tool( 0, .as_tool 0 (venv 1) Ingen. LUKKET 29.08 § 4 (l. 141147), ingen gjeld
U18 Modell-backend + per-agent modellvalg — FoundryChatClient(project_endpoint, model, credential); Responses Agent vs Foundry Agent ja ja (default på den hostede flaten, hosting.py:79 _HOSTED_DEFAULT_PROFILE = "azure"; opt-in på CLI-en, --profile default "local", run.py:2441) backends.py:150 return FoundryChatClient(project_endpoint=endpoint, model=model, credential=credential) i AzureFoundryBackend (:125) Ingen. 1 → 1. Distinksjonen default/opt-in er ny i denne tabellen, ikke i koden
U19 Harness-mønstre (bakgrunn/loop) — Agent Harness: ShellExecutor, FileMemoryStore, ToolApprovalAgent (Py 1.7.0) nei nei Python-navnene: create_harness_agent 0 (venv 4), ToolApprovalMiddleware 0 (venv 5), AgentLoopMiddleware 0 (venv 5). FileMemoryStore/ToolApprovalAgent finnes ikke i Python (venv 0, jf. reviewen § 3.1) Ingen. LUKKET 29.08 § 4 (l. 149160), ingen gjeld. Revisit-vilkåret «mister @experimental» er ikke oppfylt: 16 markører

§ 4 Ny telling og diff mot 29.08

Ny telling, 11.09 på ce22b0e: 6 ja (U3, U4, U6, U12, U14, U18) · 5 delvis (U7, U8, U9, U11, U13) · 8 nei (U1, U2, U5, U10, U15, U16, U17, U19) — av 19. Nevner: 19 rader (grep -c '^| U[0-9]'), 37 moduler / 17 747 linjer.

Av de 6 «ja», etter hvor de gjelder:

Rad Normativ default-sti Bak hva Default
U3 hver kjøring
U18 på hostet flate, på CLI --profile azure (CLI) CLI: local; hosting: azure
U4 --explore None
U6 --mcp-config None
U12 --checkpoint-dir None
U14 PORTFOLIO_OTEL uset = av

Diff mot 29.08, rad for rad: 0 av 19 har flyttet status. For hver rad er den bærende konstruktens forekomster målt på 3bdc5c1 (29.08-dokets commit) og i dag, og git log -S'<konstrukt>' --since='2026-08-29 00:00' -- src er kjørt. Kolonnen «Endring» i § 3 bærer tallet. De eneste konstruktene med commits i vinduet:

Konstrukt Forekomster 29.08 → nå Commits (git log -S) Rad Flytter status?
@tool 5 → 7 baa6f45, ccd65d3 U7 nei — navigasjon/adjudikasjon, ikke validator
navigator_tools 2 → 6 76b939b, da5f10f U7 nei — samme grunn
FunctionMiddleware 2 → 4 4aa4f9c U8 nei — observerer, blokkerer ikke
ExplorationToolRecorder / debate_middleware 0 → 6 / — 4aa4f9c, da5f10f U8 nei
pending_request_info_events ef2f1cb U12 nei — vakt re-forankret
alle andre 20 konstrukter i skriptet uendret ingen

Symmetrisk sjekk: ingen konstrukt har FÆRRE forekomster i dag enn på 3bdc5c1. Ingen rad har flyttet nedover.

Én rad flyttet PREMISS uten at po endret kode: U5. Pinne-løftet ef2f1cb (02.09) fjernet @experimental(SKILLS) fra SkillsProvider, men statusen er fortsatt nei fordi po ikke kaller den.

§ 5 Hva som mangler, per rad som ikke er «ja»

Estimatskalaen, forankret i målte commits (git show --stat). Estimatene under er VURDERINGER, ikke målinger:

  • liten4aa4f9c (MAJOR-1 a): 1 src-fil, +82/4 src-linjer (2 filer / +218 4 totalt), under én økt.
  • middelsc08ae91 (flyttet U12 nei→ja): 4 src-filer, +987/91 src-linjer (7 filer / +1 754 91 totalt), én økt.
  • stor = mer enn én økt, ELLER rører proposer-kallstien (generate.py:630) eller den obligatoriske validator-invarianten. Referanse: 29.08 § 5 anslo F3 + F16 TIER 2 til 2,54 økter, og det tallet er selv en vurdering.
ID I DAG Hva som mangler (én setning) Estimat (vurdering)
U1 nei Fan-out via ConcurrentBuilder med samme admission-reservasjon som bølgemodellen bærer (S3.4). Et begrunnet avvik, plan 23.08 § D.2 middels
U2 nei En per-prosjekt WorkflowBuilder-graf. P10 «eksplisitt NULL», plan 23.08 § D.2 («Magentic ER graf-laget») stor
U5 nei SkillsProvider wiret på agentene, så SKILL.md-prosaen når en agent via MAF og ikke via egen loader middels (wiringen i seg selv er liten; bevis på budsjett og hva hver rolle får se er det som koster)
U7 delvis Validatoren eksponert som Function Tool på den normative stien, ved siden av den blokkerende gaten og ikke i stedet for den middels
U8 delvis En middleware som BLOKKERER (MiddlewareTermination). Forutsetter at proposeren går via Agent og ikke rå get_response() (F3/F16, 29.08 § 3) stor
U9 delvis Injeksjonen båret av context_providers= på en Agent i stedet for string-konkatenering. Samme forutsetnings-refaktor som U8 (29.08 § 1) stor (delt med U8, ikke additivt)
U10 nei En MAF-vektorintegrasjon (egen pakke) i stedet for numpy brute-force. D-C/D7 er et bevisst valg middels
U11 delvis En MAF-ContextProvider som injiserer siterte utdrag. «Navigate, never stuff» (plan 23.08 § D.2) avviser query-time retrieval middels
U13 delvis approval_mode på et verktøy og en ikke-bibliotek-dør til Layer-1 with_request_info. Hosting nekter fortsatt review med vilje middels
U15 nei LocalEvaluator/evaluate_workflow tatt i bruk. Blokkert av avvisningens eget vilkår: 20 @experimental middels (når vilkåret faller)
U16 nei compaction_strategy= på utforskningsagentene, uten at kompaktering kan kutte en frø-tilnærming (§ C.6 dør 1) uestimert per 29.08 § 4. Vurdering: middels, forutsatt egen scoping-økt
U17 nei ingen gjeld. LUKKET 29.08 § 4 l. 141147: kryss-prosjekt er non-goal 2
U19 nei ingen gjeld. LUKKET 29.08 § 4 l. 149160: harness er fortsatt eksperimentell (16 markører)

U16-vilkårene (29.08 § 4 l. 176177), sjekket: IKKE inntruffet, nei på begge.

  1. «en --explore-kjøring mot en levende modell treffer et kontekstvindu-avslag»: 0 observert. Den ene levende utforsknings-400-en er ChatClientException: Error code: 400 — No tool call found for function call output (docs/2026-09-07-prepass-mater-q5b-k2.md l. 215), et tool-call-parings-avslag og ikke et vindus-avslag. grep -rliE 'context_length_exceeded|maximum context length' docs scratchpad gir 0 filer. Mønsteret er validert mot kontekstvindu, som gir treff i docs/. De to 03.09-treffene (2026-09-03-syretest-s7a-k2.md l. 92, …-s7a2-k2.md l. 126) er REGNET («mer enn noe kontekstvindu») for den gamle read_bundle-formen, ikke observerte avslag.
  2. «operatøren ønsker å bygge lange (>10 runder) utforskningsløp»: ingen bestilling. Alle 4/4 levende utforsknings-konfiger har "max_rounds": 3 (scratchpad/q5b/live/*.json).

Rader som bare kan bekreftes LEVENDE: statusene over er grep-målinger og krever ingen betalt kjøring. Det eneste som bare kan observeres levende er U16-vilkår 1. Det krever en betalt --explore som faktisk sprenger vinduet. Krever betalt kjøring, ikke målt. Referansen er Q5=B, tre levende utforskningsarmer til NOK 2,78 (0,17 / 1,46 / 1,15), det dyreste kallet 80 713 input-tokens (samme dok l. 233240). Et forsøk på å sprenge vinduet må ligge over det, så anslaget er ≥ NOK 1,5 og ~1030 min per arm, uten garanti for at avslaget oppstår. Anslaget er selv en vurdering. Ikke kjørt: NOK 0 er bindende.

§ 6 Hva okf 0.8.3 muliggjør — smalt, med nevner

5 U-rader prøvd (U5, U11, U16, U7, U13), 0 flyttet. Alt målt med PATH-0.8.3, som er kilde-identisk med eksport-0.8.3 (§ 2). SKILL.md-proben leser eksport-0.8.3-katalogen skills/.

Rad Hva ble prøvd Tall Flytter raden? Hvorfor
U5 Laster MAFs EGEN FileSkillsSource (1.16.0) SKILL.md-katalogene? Probe: scratchpad/p12/skills_probe.py, uv run --project <po> python, med search_depth=1 po shared/skills: 2/2 (expert-reviewer, falsification-reviewer). okf eksport-0.8.3 skills/: 2/3 (okf-consume-template, okf-prosjekt). okf-consume ble avvist med MAFs egen melding: «frontmatter name 'b-golden-segmented-okf-v0-2-consume' that does not match the directory name 'okf-consume'; skipping». Kjent-negativ (katalog uten SKILL.md): 0. Alle fem beskrivelser er innenfor MAX_DESCRIPTION_LENGTH = 1 024 (335490 tegn) nei Formatene er forenlige. Det ene avslaget er en navneregel: okf skill navngir skillen <bundle>-consume, og --out lar kalleren velge katalognavnet. Men po kaller ingen SkillsProvider (0 i src), så forenligheten gjør U5 billigere å bygge, ikke bygget
U11 Flytter 0.8.3s STS-sources[0].title, description fra første spec-punkt og okf build --frontmatter KEY=VALUE noe for provenance.py? provenance.py leser 0 av nøklene sources/description/bundle_id/title. po leser "sources" (okf.py 1, prepass.py 1), "title" (okf.py 2), "bundle_id" (okf.py:926) og description 0. --help: --frontmatter «REPLACES only sources and description» nei Metadataen når po via pre-passets utdragsfelt (P3), men U11 spør etter en MAF-provider for sitatbærende injeksjon. Ingen okf-flate kan få po til å kalle en
U16 Er --source-quota / prepass-kuttet en delvis erstatning for compaction? --source-quota N: «cap how many DELIVERED places one source document may take» (konsum, FØR kjøringen). CompactionStrategy: «Protocol for in-place message compaction strategies» (_compaction.py:61), anvendt på den LØPENDE samtalen via apply_compaction(messages, strategy=…) (:1475) eller Agent(compaction_strategy=…) (_agents.py:824). P11s kvote-tall siteres og re-produseres ikke: docs/2026-09-11-p11-okf-081.md l. 109, l. 123, l. 134136 nei Ortogonale: kvoten avgrenser hva som KOMMER INN i ett payload, compaction avgrenser hva som BLIR LIGGENDE i en samtale som vokser. Et payload-kutt kan ikke hindre at en utforskningsløkke vokser forbi vinduet, som er 29.08s U16-risiko
U7 / U13 Gir en ny okf-flate (okf check regel 16, --frontmatter, consume) en naturlig Function Tool- eller HITL-form? po kaller okf-CLI-en 0 ganger (grep -rnE 'import subprocess|subprocess\.|shutil\.which' src = 3 treff, alle prosa). po importerer kun den pinnede biblioteks-API-en: 9 importlinjer i ingest.py/ingest_mcp.py, pyproject.toml:58 rev = "v0.3.2" nei Den nye flaten er en CLI i 0.8.x. Å gjøre den til et verktøy krever enten en subprosess mot en PATH som git archive HEAD ikke bærer, eller et løft av okf-pinnen v0.3.2 → 0.8.x (HOLDT, utenfor scope)

§ 7 A/B/C — formulert på nytt, ALDRI avgjort

Det ferske tallgrunnlaget som premiss, felles for alle tre: gjeldsoversikten er 6/5/8, uendret rad for rad. Ingen MAF-primitiv har blitt tatt i bruk eller forsvunnet siden 29.08. okf 0.8.3 flytter 0 av 5 prøvde rader. Tallene som A, B og C ble besluttet på (P6/P7/P8) er ikke rørt.

(A) Prosa-skanningen

Beslutningen, ordrett (docs/2026-09-09-p7-forankrede-identifikatorer.md l. 189191; ordren sa l. 188190, men teksten står én linje lenger ned): «Prosa-skanningen er valgt bort med tallene i § 3, ikke bygget. Ufanget forblir: en ugrunnet identifikator som kun står i agent-/debatt-prosa og aldri blir en affected_item-kode — målt 2 av 4 (P6), 2 av 4 (S7c), 1 av 2 (P4).»

Ferskt premiss: debatten har nå en middleware-liste på den normative stien (run.py:1262, U8, da5f10f). Hvis A noen gang bygges, finnes altså søm-stedet uten F3-refaktoren. Tallene som avgjorde A (2/4, 2/4, 1/2) er uendret.

Alternativ Koster Låser Gjør umulig
(a1) urørt 0 ingenting å fange den ufangede klassen (2/4, 2/4, 1/2)
(a2) bygg prosa-skanning som GATE middels (vurdering) et identifikator-MØNSTER over prosa, som P7 § 3 avviste fordi korpusene har heterogene former «ingen skjønn»-regelen for prosa. Falske treff på tokens som aldri nådde en dom (P7: fire slike)
(a3) prosa-TELLING som rapport (P8-formen: si, ikke nekt) litenmiddels (vurdering) et mønster, men bare for under-telling ingenting blokkerer. Klassen forblir ufanget, bare synlig

Påvirker tallene PM-anbefalingen «urørt»? Nei. Gjeldsoversikten sier bare hvor A kunne bodd, ikke at den er verdt å bygge.

(B) Blindsone-VALGET

Beslutningen, ordrett (docs/2026-09-09-p6-betalt-k2-etter-kollaps.md l. 210211): «Blindsonen har flyttet seg videre: fra RANGERINGEN (S7c) til LESNINGEN (funn 5) til VALGET — hvilket dokument modellen bestemmer seg for å bygge på.» Og l. 202204: modellen «bygde likevel forslaget sitt utelukkende på merkekravene i de generelle tekniske kravene — det ENE utdraget den navngir — og myntet kostkoder for det».

Ferskt premiss: ingen U-rad adresserer valget. U11 (sitatbærende injeksjon) er delvis med egen kode og med en MAF-type uten kallsted. U16 og okf-kvoten avgrenser volum, ikke valg (§ 6). P11 målte dessuten at 0.8.1 som levert ikke leverer prisskjemaet i noen arm, og P11 ble ikke re-målt her.

Alternativ Koster Låser Gjør umulig
(b1) urørt 0 ingenting. P8-rapporten informerer å vite om valget endrer seg når prisskjemaet faktisk leveres
(b2) bestill en BETALT måling av valget med prisskjemaet levert ≈ NOK 0,21,5 per arm (Q5=B-referansen, vurdering) ingenting i kode — (den krever en okf-leveranse som inneholder prisskjemaet, og P11 viser at default ikke gjør det)
(b3) styr valget i rendering/rangering (prioriter prisskjema-formede utdrag) middels (vurdering) et domene-skjønn i po, som funn 5 og collapse_padding er skrevet for å unngå po som generisk rammeverk for dette domenet

Påvirker tallene PM-anbefalingen «urørt»? Nei.

(C) Fixtur-publiseringen

Beslutningen, ordrett (docs/2026-09-09-p8-forankringstilbudet.md l. 162166): «De leverte KUTTENE (10 kB N100, 96 kB K2) er ikke sporet: å committe verbatim anbudstekst og standardtekst inn i et repo som publiseres på open/ er en publiseringsbeslutning som tilhører operatøren, ikke denne ordren.»

Ferskt premiss: gjeldsoversikten berører ikke C. Den eneste relaterte målingen er at testene P7/P8 bruker (tests/fixtures/p7-grounding/) fortsatt er det suiten gater på, og den er 1577/5 grønn.

Alternativ Koster Låser Gjør umulig
(c1) nei 0 ingenting at 8-/435-distinkt-tallene gates. De står som målinger i P8 § 4
(c2) ja, spor kuttene i open/-repoet liten (vurdering) verbatim anbuds- og standardtekst i offentlig historikk. En push til open/ kan ikke trekkes tilbake. Rettighetsspørsmålet er operatørens å vurdere, ikke målt her å angre publiseringen
(c3) gate mot kuttene der de ligger (~/corpora/…), skip når de mangler liten (vurdering) en gate som er stille fraværende i en fersk klon at gaten beviser noe i git archive HEAD-pakka. Det er repoets «skip = stille fravær»-fellen

Påvirker tallene PM-anbefalingen «nei»? Nei.

(D) Nytt veivalg målingen avdekket: SkillsProvider-avvisningens premiss

Beslutningen, ordrett (STATE.md, låste beslutninger): «MAF-evals + SkillsProvider AVVIST som flate.» Begrunnelsen for U5 (docs/plan/2026-08-23-magentic-utforskningssloeyfe.md, § D.2-tabellen): «NEI — ExperimentalFeature.SKILLS; egen loader virker; commons eier innholdet».

Ferskt premiss: den første av tre grunner er død i installert 1.16.0 (§ 2). FileSkillsSource laster po sine to skills 2/2 (§ 6). Evals-halvdelen står uendret: 20 markører, og vilkåret i plan 23.08 § D.3 er ikke oppfylt.

Alternativ Koster Låser Gjør umulig
(d1) avvisningen står, med oppdatert begrunnelse (egen loader + commons-eierskap) 0 (én setning i STATE) ingenting at CLAUDE.md-konvensjonen «Metode kodifiseres som Agent Skill» nås av en agent via MAF
(d2) re-åpne U5 som en egen, målt ordre middels (vurdering, § 5) ingenting før den er bestilt

§ 8 Honesty limits

  • Ingen betalt kjøring, NOK 0. Ingen rad er bekreftet LEVENDE. U16-vilkår 1 kan bare observeres levende og er IKKE målt (§ 5).
  • Et grep-tall måler KALLSTEDER, ikke om kapabiliteten virker. «ja (opt-in)» betyr at et kallsted finnes bak et flagg, ikke at flagget har vært kjørt mot en modell i dette vinduet.
  • Estimatene i § 5 og § 7 er VURDERINGER, forankret i to målte commits, men ikke målinger.
  • En rad kan flytte seg av en pinne-bump og ikke av po sin egen kode. U5s premiss gjorde nettopp det (ef2f1cb). @experimental-tallene er målt i INSTALLERT kode, ikke i Microsoft Learn-prosa.
  • Nevneren er ETT repo i ÉN commit (ce22b0e, 37 moduler / 17 747 linjer).
  • U11-statusen hviler på et forbehold som står i raden: MAF-typen konstrueres bare i en metode med 0 kallere i src. Samme grunnlag som 25.08 og 29.08 ga «delvis», så statusen er holdt for å måle endring og ikke skifte linjal. Med en strengere lesning av metoden ville U11 vært «nei» (6/4/9).
  • FileSkillsSource-proben beviser LASTING, ikke at en agent bruker skillen godt. Ingen agent er konstruert med SkillsProvider.
  • (A), (B) og (C) forblir operatørens og ble ikke flyttet av denne økta. (D) er formulert, ikke avgjort.

§ 9 Verifiseringslogg (kjørt i denne økten, 2026-09-11)

# Påstand Kommando → resultat
1 Innboks 2, kø 0 find ~/.claude/coord/portfolio-optimiser/inbox -type f | wc -l → 2 (rc 0); …/orders -maxdepth 1 -type f → 0
2 okf pushet git -C ~/repos/llm-ingestion-okf ls-remote origin main0308169 (= lokal main); ls-remote --tags origin | grep -c 'v0\.8' → 8
3 Innboks lukket coord-done.sh <begge> → «2 message(s) archived» (rc 0); inbox → 0
4 po-remote git ls-remote origin maince22b0e… = HEAD
5 Kontroll uv run pytest -q -p no:cacheprovider → 1577 passed, 5 skipped, 294,85 s; ruff/format/mypy rene; golden ea8c534…
6 Nevner ls src/portfolio_optimiser/*.py | wc -l → 37; wc -l … | tail -1 → 17 747; på 3bdc5c1: 34 / 12 873
7 Konstrukt-tabellen bash scratchpad/p12/u_grep.sh (61 konstrukter, src + venv-kjent-positiv)
8 Kallsteder grep -rn --include="*.py" -F <konstrukt> src per treff, deretter sed -n på kallstedet
9 Diff per konstrukt git log -S'<c>' --since='2026-08-29 00:00' -- src + git grep -F -c <c> 3bdc5c1 -- src mot nå
10 @experimental grep -c/grep -n -A2 '@experimental'_skills.py, _evaluation.py, _compaction.py, _middleware.py, _harness/*, _magentic.py
11 U5-probe PYTHONDONTWRITEBYTECODE=1 uv run --project <po> python scratchpad/p12/skills_probe.py → 2/2, 2/3 (+ 1 avslag ved navn), kjent-negativ 0
12 okf-ekvivalens git archive v0.8.3 | tar -x; diff -rq → kun _data
13 okf-regler contract_check.RULES → 16 (PATH og eksport)
14 U16-vilkår grep -rliE 'context_length_exceeded|maximum context length' docs scratchpad → 0 filer (mønster-kontroll kontekstvindu → treff); grep '"max_rounds"' scratchpad/q5b/live/*.json → 3 i 4/4
15 Skala git show --stat c08ae91 / 4aa4f9c (-- src og totalt)
16 src urørt git diff --stat ce22b0e -- src → tom

§ 10 Avvik fra ordren, uttalt

  • Linje-sitatet for (A) står på l. 189191, ikke l. 188190. Teksten er ordrett den ordren siterte.
  • okf-eksporten ble bygget som ordren sa, men målingene i § 6 er kjørt med PATH-0.8.3, fordi PATH nå ER 0.8.3 og er bevist kilde-identisk med taggen (§ 2). Ingen scratch-venv ble bygget. Det ville resolvert fritt og vært den svakere av de to målemåtene.
  • Innboks-grunnen («premisset upushet holder ikke, 8 tagg-linjer på remote») står i sluttrapporten og her. coord-done.sh har ingen grunn-parameter (--help lest først).
  • Et fjerde veivalg (D) er lagt til under § 7. Ordren ba om «ethvert ekte veivalg målingen avdekket».