1
0
Fork 0
Framework-neutral shared core of the portfolio-optimiser method: the normative specs, example bundles and golden fixtures vendored by both reference implementations.
Find a file
Kjell Tore Guttormsen 3174475ac4 docs(plan): §7.2 — feilanker-failuremoden var ikke hypotetisk, den inntraff
`portfolio-optimiser` stilte MCP-spørsmålet på nytt 2026-07-31, fem dager etter
at frossen tekst hadde avgjort det og vi hadde meldt kjennelsen. S2.2 var igjen
ført som blokkert på commons.

Kjennelsen var korrekt og allerede levert. Det som ikke overlevde pull-grensen
var ankeret: vår 19:09-melding siterte `:112-114`, som på konsumentenes pin
`7aa53fc` peker på `extractions`-feltabellen — troverdig nabotekst, ikke et
tomt treff. Korreksjonsrammen forutså nøyaktig dette utfallet som «den mest
sannsynlige konklusjonen»; det er nå observert, ikke antatt.

Fører de to generaliserbare punktene: et feil linjeanker svikter stille (begge
parter ser en uenighet som ikke finnes), og et gjentatt spørsmål er et signal om
egen formidling — les hva forrige melding faktisk bar før du svarer «det sa vi
allerede».

Ingen normativ tekst rørt; `ingest-spec.md` står uendret på `bfa5a9b`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYNzKdM7C1akruHv9bKuiT
2026-08-01 19:55:33 +02:00
docs/plan docs(plan): §7.2 — feilanker-failuremoden var ikke hypotetisk, den inntraff 2026-08-01 19:55:33 +02:00
examples docs(examples): nav-golden fixture class — bundle → read-context goldens 2026-07-21 10:22:50 +02:00
skills/expert-reviewer feat(persona): build the shared expert-reviewer persona as a framework-neutral Agent Skill 2026-06-30 13:59:42 +02:00
.gitignore docs(plan): llm-ingestion-guard adoption — planned at future untrusted ingest boundaries 2026-07-16 07:38:37 +02:00
CONCEPT.md docs(shared): konsept-notat til norsk (Forgejo-publikum = norsk marked) 2026-06-26 21:31:02 +02:00
ingest-spec.md docs(spec): ingest-spec — land ratified D1 stamp model 2026-07-21 09:16:09 +02:00
method-spec.md docs(spec): method-spec §3 Step 1 — Q3 navigation contract (hierarchy) 2026-07-21 09:26:43 +02:00
README.md docs(plan): operatøren avgjorde V1 (O2) og B1 (O1) — B1 utført, V1 gated 2026-07-31 17:16:41 +02:00

shared/ — framework-neutral core

This directory holds the parts of the project that are independent of any AI agent framework and are meant to be shared, unchanged, between both reference implementations:

  • this repository — the method built on Microsoft Agent Framework (MAF);
  • a sibling repository (built later, in sequence) — the same method on the Claude Agents SDK.

Sharing one identical core is what makes the two implementations a fair comparison: both consume the same concept, the same example data, and the same expected outcomes, so the only thing that differs is the agent framework itself.

Contents (growing)

  • CONCEPT.md — the business concept, written for a non-specialist (e.g. a business developer at another company).
  • examples/bygg-energi-mikro/ — the first example knowledge bundle (OKF / LLM-wiki): one office building, one LED-retrofit measure, with a seed expert verdict encoding the realization gap and a golden-suite of expected validator outcomes. A small dev fixture for exercising the agentic loop; a realistic full-scale example comes later.
  • examples/nav-golden-hierarchy/ and examples/nav-golden-escape/ — the nav-golden fixture class: bundle/ in, expected-read-context.md out, exercising the navigation contract (method-spec §3 Step 1) with one positive case (hierarchy, dedup, cycle termination, verdict exclusion) and one negative case (.. and root-relative escapes, so a gate built on them can actually go red). Each case documents itself in its own README.md. Informative listing only — no normative file refers to this class, and the comparison rule is deliberately not pinned (each case's README leaves a gate free to compare byte-exact or after trailing-whitespace normalization), so these are not ground truth in the sense method-spec §7 uses the word.
  • skills/expert-reviewer/ — the expert-reviewer persona as a framework-neutral Agent Skill: a SKILL.md persona prompt (energy-advisor / M&V role + the realization-gap methodology the validator cannot compute) and a canonical references/example-verdict.json. Both reference implementations instantiate the reviewer from this one artifact; shared/ stays pure data (each stack reads the JSON with its own loader).
  • method-spec.md — the normative method specification, framework-neutral (the prose never names a concrete agent toolkit — enforced by a guard test): the 8-step loop, the verdict JSON contract, the inbox/outbox folder contract, the promotion-gate semantics, the IR projection + golden suite as the only ground truth, and the budget/provenance requirements. The sibling implementation is built from this spec alone, without reverse-engineering the reference code.
  • ingest-spec.md — the normative ingest specification, framework-neutral (same guard rule as the method spec): the deterministic ingest step that materializes real data sources as OKF bundles BEFORE the loop — the polymorphic manifest schema (file/CSV, SQL, HTTP as extension point), the credential-reference rule, the verdict-layer reservation, the ingest provenance frontmatter with an explicit timestamp, the index-generation requirement, and the golden-extraction format.

Rules

  • Nothing in here may import or depend on a specific agent framework. If it does, it does not belong in shared/.
  • Repo layout (decision R1, realized 2026-07-03): the shared core lives in its own repository, portfolio-optimiser-commons — the source of truth. Each implementation repo consumes it as a git subtree at this unchanged shared/ path (so tests and the PORTFOLIO_SHARED_ROOT default resolver are unaffected). Do not edit commons content anywhere else without syncing.

Subtree sync (pull-only — run from the consuming repo's root)

The remote is registered as commons (ssh://git@git.fromaitochitta.com/ktg/portfolio-optimiser-commons.git).

All edits land in commons first (clone it, commit, push there), then each consuming repo pulls them in:

git subtree pull --prefix=shared commons main --squash

Never run git subtree push from a consuming repo. Observed 2026-07-03: because this repo's history contains commits that create/delete the shared/ prefix, the push re-split leaked the consumer's entire history into commons (cleaned up by force-push the same day). Pull-only keeps commons the clean source of truth.

See the target picture for the full architecture: docs/plan/2026-06-26-maalbilde-agentic-loop.md.