portfolio-optimiser/tests/fixtures
Kjell Tore Guttormsen ad9686517a feat(prepass): payload model, loader, shape gate and the binding to the mounted base [skip-docs]
[skip-docs]: ingen brukervendt flate ennaa -- CLI-flagget kommer i steg 6/7 med
README-blokka, og CLAUDE.md-raden i steg 8. Modulen er ikke naabar utenfra i denne
commiten.

Steg 1 og 2 av planen, committet sammen fordi begge armene bor i samme testfil og
ble skrevet mot samme ekte produsent-payload.

`prepass.py` konsumerer et OKF-konsumkontrakt-SS-8-payload som INPUT-fil (SS 2.4:
transporten er ikke del av kontrakten). po produserer ingen payload og vendrer ingen
produsent -- en subprosess mot produsentens checkout ville bundet pakka til en sti paa
en maskin og doedd i `git archive HEAD`, og en kopi ville vaert kø-(p)-driften.

`check_payload_shape` -- seks nekter, hver ved navn: ukjent revisjon (`==`, aldri
prefiks), nevnere som ikke lukker (SS 5.2, med DEKLARERT og OBSERVERT som to tall),
`len(excerpts)` og `len(withheld)` mot sine tellere (SS 8.1s to halvdeler), `spent >
limit` (SS 7.3) og en kjent-positiv som ikke ble reprodusert (SS 7.4). De to siste er
DEFENSIVE og uvitnet: produsenten nekter dem selv foer den emitterer.

`verify_against_bundle` -- fem sjekker mot den MONTERTE basen: erklaert id (aldri
mountet, S7a-3), joinen gjennom `safe_resolve` med `PathSecurityError` re-reist som
nekt, filas `sha256`, og -- baerende -- at `text` er RE-UTLEDBAR fra det monterte
dokumentet. Den siste lukker injeksjonsflaten: et payload kan ikke levere bytes basen
ikke holder. De to gatene som bodde i det tilbaketrukne `read_file` er reist paa nytt
her paa DOKUMENTET (verdict-laget og SS 4.1a), aldri delegert til produsentens egne
regler.

MAALT foer bygging, ikke antatt:
- Pre-passet nekter ALLE tre av repoets leverte baser ("declares no bundle_id") --
  S7a-3s egen maaling sett fra produsentsiden. `shared/` er pull-only, saa fixturen er
  bygget paa en KOPI med erklaert id, som ogsaa gir S7a-3s slakk-tilfelle gratis.
- `concept_id + ".md"`, `sha256` = HELE fila, og tekst-utledningen (frontmatter delt
  paa `splitlines()`, NFC, per-linje rstrip) holder for alle fire utdrag i et EKTE
  produsent-payload. En naiv `split("\n")` er UENIG med produsenten -- derfor er
  regelen transkribert fra kilden og gatet av fixturen, aldri gjettet.

Fixturen `tests/fixtures/prepass/` er produsentens output ORDRETT (okf `54a0bc2`), saa
ingen arm er groenn mot en form ingen pre-pass emitterer.

TO TEST-FIXTURER VAR FEIL, funnet ved aa kjoere roedt: excerpt/withheld-armene brakk
ogsaa nevnerne, saa lukke-sjekken fyrte foerst; og dimensjons-armen kjoerte mot et
umerket dokument, der `in_dimension` aldri dropper uskopet kunnskap. Begge armene ville
staatt groenne mot en implementasjon uten sjekken de er skrevet for.

1413 passed / 5 skipped (fra 1387/5, +26, 0 fjernet). ruff + mypy rene.

Co-Authored-By: Claude <claude-opus-5>
2026-09-07 10:52:20 +02:00
..
k2-prisskjema-SYNTETISK feat(okf): derive a cost baseline from a priced schedule, or refuse 2026-09-03 03:15:39 +02:00
k2-prisskjema-uprisert-SYNTETISK feat(okf): derive a cost baseline from a priced schedule, or refuse 2026-09-03 03:15:39 +02:00
prepass feat(prepass): payload model, loader, shape gate and the binding to the mounted base [skip-docs] 2026-09-07 10:52:20 +02:00
README.md feat(okf): derive a cost baseline from a priced schedule, or refuse 2026-09-03 03:15:39 +02:00

Test fixtures

k2-prisskjema-SYNTETISK/ and k2-prisskjema-uprisert-SYNTETISK/

SYNTETISK — every number in these bundles is invented. They copy the structure of a public-tender Prisskjema.xlsx (NS 3451 posts: code, description, unit, quantity, unit price, sum) and nothing else. No private tender document is reproduced here, and the unit prices in the priced variant are round synthetic values chosen to be obviously not a real bid — they must never be read as anyone's pricing. This is the first building block of the S7b corpus.

The two variants are the two halves of the same measurement:

bundle Enhetspris column what it stands for
k2-prisskjema-SYNTETISK/ filled a priced schedule a baseline CAN be derived from
k2-prisskjema-uprisert-SYNTETISK/ empty K2's actual pre-award state — codes and descriptions, no quantities or prices

The table form is MEASURED, not hand-typed

Both bodies are the verbatim output of the producer's own office conversion, so the fixture states something about the format rather than recording our own idea of it:

pandoc -f xlsx -t markdown --eol=lf --wrap=none <sheet>.xlsx

with pandoc 3.10.2 — the writer and the two arguments are llm_ingestion_okf.extract's _PANDOC_WRITER / _PANDOC_ARGS. That is a pandoc simple table (a dash rule whose groups define the column spans), NOT the pipe table render_table emits: measured in session 78, the xlsx path reaches a concept body through inbox.py's render_inbox_concept(sanitized_text, …) and never touches render_table at all. An empty spreadsheet cell therefore arrives as blank space inside its column span — which is exactly what the unpriced variant has to carry for the refusal it gates to be the real one.