Re-measured all 19 rows of the prior-art register 15.1 againstce22b0ewith 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>
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 (veg-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: docs/2026-09-11-p11-okf-081.md l. 109, l. 123, l. 134–136 |
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 (docs/2026-09-09-p8-forankringstilbudet.md l. 162–166): «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 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».