1
0
Fork 0
Commit graph

2 commits

Author SHA1 Message Date
73136eb6ea fix(persona): example-verdict begrunnet domene-nøytralt — «i tilsvarende anlegg»
Den kanoniske eksempel-dommen sa «...av en timeplan-stipulert LED-besparelse
i kontorbygg (realiseringsgrad=0.79)». `portfolio-optimiser` printer `rationale`
ordrett i demoens Steg 7, som ga en kontorbygg-begrunnelse på et veglys-prosjekt.
Personaen er framework-nøytral og artefakt-drevet; da kan den kanoniske
eksempel-dommen heller ikke bære ett domene.

`marker` er byte-uendret (`realiseringsgrad=0.79`), og strengen står fortsatt
ordrett i `rationale` — verdien er sporet gjennom hele demoen deres og gjennom
deres `test_persona_skill_loadbearing`.

Kontekst-bindingen svekkes ikke: SKILL.md sin «Discipline» instruerer fortsatt
å oppgi konteksten korreksjonen holder for (bygningstype + HOU-kilde). Den
instruksjonen er urørt; eksempelet demonstrerer formen, ikke ett domene.

Én fil, én linje. JSON fortsatt ASCII-ren (0 ikke-ASCII).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017rR19kzEM3YFV7svztMYX9
2026-08-10 14:41:02 +02:00
976a2e88d2 feat(persona): build the shared expert-reviewer persona as a framework-neutral Agent Skill
The expert reviewer was only a hardcoded verdict_input dict inside the offline
simulation. Build it as the real, shared artifact target picture §8 calls for:
shared/skills/expert-reviewer/ — a SKILL.md persona prompt (energy-advisor / M&V
role + the realization-gap methodology the validator cannot compute) plus a
canonical references/example-verdict.json. shared/ stays pure data; the MAF side
reads it via portfolio_optimiser.persona.load_persona_example (call-time,
fail-fast) and the Claude-SDK sibling reads the same JSON with its own loader.

This de-stubs the simulation: its persona judgement (decision + rationale + traced
marker) is now sourced from the artifact at call time, not an inline literal — so
the shared persona is genuinely consumed and cannot rot silently. decision is
binary (approved/rejected, the FeedbackContract the run path accepts);
approved_with_adjustment is rejected there and lives only in the bundle seed
frontmatter + the promotion gate, so the realization correction is carried in the
rationale prose.

Load-bearing trio (tests/test_persona_skill_loadbearing.py), each proven RED on its
own detach: structure + framework-neutrality, the example is valid pipeline input
(incl. FeedbackContract, on a throwaway copy), and the simulation's marker follows
the artifact file. Suite 149->152.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHR8iKxJRxDiDfNw8HZmWE
2026-06-30 13:59:42 +02:00