portfolio-optimiser/tests/test_value_report_loadbearing.py
Kjell Tore Guttormsen 37547fe292
refactor(examples): replace sector-specific example material with generic, fictitious examples
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>
2026-09-23 15:04:21 +02:00

71 lines
3.2 KiB
Python

"""Load-bearing seam for the S5.4 value report's overlap flagging (målbilde §7).
DETACH POINTS THAT TURN THIS RED (documented, not stubbed — the assertions ARE the seam lock):
1. Drop the ``overlaps=ledger.overlaps()`` surfacing in ``build_value_report`` -> the marker
overlap key vanishes from BOTH the text and the JSON output -> the positive arm goes RED.
2. Bypass the ledger's dimension-free dedup (``_dedup_amount`` / ``_sum_key``) -> the same
candidate realized under two dimensions is double-counted -> ``portfolio_total_ore`` doubles to
``2 * _MARKER_ORE`` -> the control arm goes RED.
The MARKER amount + identity appear NOWHERE else in the repo (marker convention,
``tests/test_run_cli_loadbearing.py:25``; absence grep-verified before choosing), so a rendered
match is provably caused by THIS ledger flowing through the report, not by incidental repo text.
Reuses the same-candidate-two-dimensions construction from
``tests/test_ledger_loadbearing.py:52-66``, rendered through the report.
"""
from __future__ import annotations
import json
from portfolio_optimiser.ledger import LedgerEntry, SavingsLedger
from portfolio_optimiser.value_report import (
build_value_report,
dump_report_json,
format_report_text,
)
_MARKER_ORE = 58917 # marker: appears nowhere else in the codebase
_MARKER_ID = "c-marker-overlap-s54" # marker: appears nowhere else in the codebase
def _overlap_ledger() -> SavingsLedger:
"""One candidate (``_MARKER_ID``) realized under TWO dimensions (energi + lisens) in P1 — a
distinct FULL storage key each, so both are stored (the overlap is visible), while the
dimension-free dedup counts the ``_MARKER_ORE`` amount ONCE."""
led = SavingsLedger()
for dimension in ("energi", "lisens"):
led.add_realized(
LedgerEntry(
project_id="P1",
dimension=dimension,
candidate_identity=_MARKER_ID,
amount_ore=_MARKER_ORE,
verdict_id="v-marker",
provenance="marker-prov",
)
)
return led
def test_overlap_marker_is_flagged_in_both_renderings() -> None:
"""POSITIVE: the marker overlap key ``(P1, _MARKER_ID)`` reaches BOTH the human table AND the
JSON ``overlaps`` list. RED if ``build_value_report`` stops surfacing ``ledger.overlaps()``."""
report = build_value_report(_overlap_ledger())
assert ("P1", _MARKER_ID) in report.overlaps
assert _MARKER_ID in format_report_text(report) # flagged in the rendered table
payload = json.loads(dump_report_json(report))
assert ["P1", _MARKER_ID] in payload["overlaps"] # flagged in the JSON (tuple -> list)
def test_overlap_amount_counted_once_not_doubled() -> None:
"""CONTROL: the cross-dimension overlap is counted ONCE in the portfolio total, never doubled.
RED if the ledger's dimension-free dedup is bypassed (the total would become ``2 * _MARKER_ORE``
= 117834). This is the exact double-count the ledger's dedup was built to prevent."""
report = build_value_report(_overlap_ledger())
assert report.portfolio_total_ore == _MARKER_ORE # once, NOT 2 * _MARKER_ORE
assert report.per_project["P1"] == _MARKER_ORE