The context sets, the packaged knowledge bases and the example bundles are replaced by one fictitious example set about IT operations in an invented organisation: three context sets (serverrom-2027, driftsavtale-2027 and the two-base drift-og-avtale-2027), two synthetic knowledge bases under src/portfolio_optimiser/data/kunnskapsbaser and two example bundles under src/portfolio_optimiser/data/bundles. Numbers, codes and structural values in tests and fixtures are kept; names, ids and wording change. Dated measurement documents that only recorded runs on the replaced material are deleted. Gate figures measured on the new set are not comparable with earlier ones. The exclusion gate from the previous commit is green: 0 tracked files hit outside the shared/ subtree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
40 KiB
P12 — MAF-gjelden re-målt: U1–U19 mot dagens kode (2026-09-11)
Ordre:
20260911T082410Z-5561027910-from-.claude. Mandat: re-mål de 19 radene idocs/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 -- srcer 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
FunctionMiddlewarepå den normative stien (da5f10f, U7/U8). Et nytt@tooler definert, men har 0 kallere isrc(ccd65d3, U7). - Pinne-løftet (
ef2f1cb, 1.9.0 → 1.16.0) har FJERNET ett premiss uten at po endret en linje:SkillsProviderer ikke lenger@experimentali installert core 1.16.0. De tre markørene i_skills.pysitter nå påMCPSkillResource/MCPSkill/MCPSkillsSource(:4187/:4229/:4862, alleMCP_SKILLS). MAFs egenFileSkillsSourcelaster 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). MiddlewareTerminationfinnes i installert 1.16.0 (_middleware.py:75, ingen@experimentalpå 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
mainog alle fire taggene v0.8.0–v0.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.10–1.16 utover de konstruktene radene navngir, som
ContextWindowCompactionStrategy(_compaction.py:1624). Den er sett, men ikke målt. - Om Microsoft Learn fortsatt kaller
SkillsProvidereller 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 271–289 | `grep -c '^ |
| (vi) | 29.08: 6/5/8 | ✅ ordrett i docs/2026-08-29-maf-gjelden-omfang.md l. 16–17 |
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. 12–17 |
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.0–v0.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) på :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 U1–U19 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. 271–289, 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 -c på 3bdc5c1 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 (referanse-stien, run.py:1204) · explore.py:1033/1066/1095/1113 list_bundles/read_bundle/read_dir/read_file → nå 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:1563–1565 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 :11–12 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:160–162 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. 141–147), 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. 149–160), 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 | — | på |
| 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:
- liten ≈
4aa4f9c(MAJOR-1 a): 1 src-fil, +82/−4 src-linjer (2 filer / +218 −4 totalt), under én økt. - middels ≈
c08ae91(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,5–4 ø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. 141–147: kryss-prosjekt er non-goal 2 |
| U19 | nei | — | ingen gjeld. LUKKET 29.08 § 4 l. 149–160: harness er fortsatt eksperimentell (16 markører) |
U16-vilkårene (29.08 § 4 l. 176–177), sjekket: IKKE inntruffet, nei på begge.
- «en
--explore-kjøring mot en levende modell treffer et kontekstvindu-avslag»: 0 observert. Den ene levende utforsknings-400-en erChatClientException: Error code: 400 — No tool call found for function call output(docs/2026-09-07-prepass-mater-q5b-k2.mdl. 215), et tool-call-parings-avslag og ikke et vindus-avslag.grep -rliE 'context_length_exceeded|maximum context length' docs scratchpadgir 0 filer. Mønsteret er validert motkontekstvindu, som gir treff idocs/. De to 03.09-treffene (2026-09-03-syretest-s7a-k2.mdl. 92,…-s7a2-k2.mdl. 126) er REGNET («mer enn noe kontekstvindu») for den gamleread_bundle-formen, ikke observerte avslag. - «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. 233–240). Et forsøk på å sprenge vinduet må ligge over det, så anslaget
er ≥ NOK 1,5 og ~10–30 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 (335–490 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 (P11-rapporten er fjernet; invarianten står i docs/invarianter.md) |
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. 189–191; ordren sa
l. 188–190, 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) | liten–middels (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. 210–211): «Blindsonen har
flyttet seg videre: fra RANGERINGEN (S7c) til LESNINGEN (funn 5) til VALGET — hvilket dokument
modellen bestemmer seg for å bygge på.» Og l. 202–204: 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,2–1,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 (P8-rapporten, nå fjernet; invarianten står i docs/invarianter.md): «De leverte KUTTENE
(10 kB [kravbase], 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 medSkillsProvider.- (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 main → 0308169 (= 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 main → ce22b0e… = 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' på _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. 189–191, ikke l. 188–190. 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.shhar ingen grunn-parameter (--helplest først). - Et fjerde veivalg (D) er lagt til under § 7. Ordren ba om «ethvert ekte veivalg målingen avdekket».