fix(skills): eksempelet brøt skillens egen regel — undecided, ikke survived

Tre defekter i ff7b9b7, funnet i review. Ingen av dem ville blitt fanget av
json.tool eller framework-guardene — alle tre er semantiske.

1. example-evidence.json sa `"judgement": "survived"` samtidig som ledger-noten sa at
   det ene konseptet som kunne båret en refutasjon var UNREADABLE. SKILL.md sier
   ordrett at `undecided` er «what you return when the evidence needed to refute the
   claim was not readable». Det ene arbeidseksempelet — det en nedstrøms agent leser
   som mønsteret, og det §11-testen materialiserer — demonstrerte altså nøyaktig
   inversjonen skillen finnes for å hindre: et hull i kunnskapsbasen konvertert til
   støtte for påstanden. Rettet til `undecided` + `judgement_note` som sier hvorfor.
   Eksempelet er bedre etterpå: det er nå den utførte demonstrasjonen av tilstanden
   skillen sier leseren mest trenger å kunne skille ut.

2. De to representasjonene i eksempelet var uenige med seg selv. Konsept 2s
   `frontmatter`-dict utelater `sources` (korrekt — en blokkliste er ikke uttrykkbar
   som én `key: value`-streng), mens `frontmatter_verbatim` har den. En §11-test som
   materialiserer fra dict-en ville utledet `state: absent`, ikke `unreadable`, og
   dermed mistet nøyaktig caset eksempelet finnes for. Grønn-men-død-formen §11 er
   til for å hindre. Nytt `materialisation_note`: `frontmatter_verbatim` er
   AUTORITATIV, `frontmatter` er dens linjeorienterte projeksjon og informativ.

3. method-spec.md skrev «Measured 2026-09-01 on the reference corpus: 2 of 5 keys …»
   i commons' EGEN stemme. Commons målte det ikke. Driftsregelen er eksplisitt —
   andres målinger føres som DERES — og teksten skal til en publisert flate. Tallet
   siteres nå ordrett fra ordren som bestilte A1, attribuert dit, med en setning om
   at mekanismen bærer A1 uten det: figuren er støtte, ikke grunn. Samme i CHANGELOG.
   Merk at konvensjonen er tvetydig i kildene: PM-dommen sier «produsenten skriver 2
   av 5 noekler», ordren sier «2 av 5 nøkler på ÉN kilde» — ulike påstander. Ordrens
   ordlyd er den siterte, og at det er et sitat er nå synlig.

Verifisering re-kjørt: konsumentens _FRAMEWORK_NAMES + _FORBIDDEN over 6 filer → 0
treff (kjent-positiv PASS); 'OKF bundle' 0 i skillen; json.tool OK; Steg 1-8 + MUST
intakt. Fortsatt IKKE PUSHET — origin/main..HEAD og open/main..HEAD begge 2 etter denne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-02 17:11:39 +02:00
commit f35a22a304
3 changed files with 18 additions and 9 deletions

View file

@ -28,8 +28,10 @@ affected by this file.
relaxation of it. A single mapping normalises to a one-element tuple, so one source and
several sources read the same way and last-write-wins never arises. Rationale, measured:
line-oriented parsing carries one value per key, so a multi-source concept written as a block
list loses every entry but one *silently*; on the reference corpus 2026-09-01, **2 of 5 keys
were carried on a single source**. Added the matching `sources` row to §12.
list loses every entry but one *silently*. The supporting figure — 2 of 5 keys on a single
source, reference corpus 2026-09-01 — is **the commissioning order's measurement, reported as
theirs**, not one this repository made; the mechanism carries A1 without it. Added the matching
`sources` row to §12.
- **Axis note, in the spec:** A1 binds **emission**. It does not reclassify a block list as
malformed OKF, and the reference consumer's own decoder is quoted verbatim saying it is
conformant-but-outside-the-accepted-subset.
@ -48,8 +50,11 @@ affected by this file.
`(state, reason, items_seen)` and **discounted, never rejected**), and the rule that a
refutation naming no refuter is not a refutation.
[`references/example-evidence.json`](skills/falsification-reviewer/references/example-evidence.json)
carries the frontmatter verbatim, so the form question A1 settles is decidable from the
example itself.
carries the frontmatter **verbatim and authoritative** (the line-oriented `frontmatter`
projection beside it is informative and by construction cannot hold a block form), so the form
question A1 settles is decidable from the example itself. The worked example returns
`undecided`, not `survived`: the one concept that could have carried a refutation was
unreadable, and a claim that was never attacked has not survived.
## [0.1.0] - 2026-08-17

View file

@ -121,9 +121,11 @@ it) into the prompt:
**Informative note — what A1 fixes, and the axis it does not speak on.** The form was pinned
because line-oriented `key: value` has exactly one value per key, so a multi-source concept
written as a block list loses every entry but one, silently — the failure mode a consumer
cannot detect after the fact. Measured 2026-09-01 on the reference corpus: **2 of 5 keys were
carried on a single source**, which is a ceiling on how far a claim can be corroborated, not
a property of the material. A1 binds **emission** — what a producer MUST write. It does not
cannot detect after the fact. The amendment also carries a figure this repository did not
measure and reports as its author's: the order that commissioned A1 states, of the reference
corpus on 2026-09-01, *"K5-taket målt 01.09: 2 av 5 nøkler på ÉN kilde"* — a ceiling on how far
a claim can be corroborated rather than a property of the material. The mechanism above carries
A1 on its own; the figure is support, not the ground. A1 binds **emission** — what a producer MUST write. It does not
say a block list is malformed as such: a consumer's own decoder is entitled to accept a
narrower subset than it is handed, and the reference consumer records exactly that of its
accepted subset — *"A block sequence and a block mapping are both **conformant** OKF; they

View file

@ -1,7 +1,9 @@
{
"claim": "Trinnstyring i innkjoeringssonen gir 18 % lavere energibruk enn dagens fastnivaa.",
"judgement": "survived",
"judgement": "undecided",
"refuter": null,
"judgement_note": "undecided, not survived. The one concept that could have carried a refutation was unreadable, so the claim was not actually attacked -- and a claim that was not attacked has not survived. Returning survived here would convert a gap in the knowledge base into support for the claim, which is the inversion this role exists to prevent.",
"materialisation_note": "frontmatter_verbatim is AUTHORITATIVE: it is the bytes a test materialises into a throwaway concept file before reading them back. frontmatter is its line-oriented projection and is informative only -- by construction it cannot carry a block form, which is why concept 2 has no sources key there. Materialising from frontmatter would derive state: absent and silently lose the unreadable case this example exists to demonstrate.",
"concepts": [
{
"concept_id": "kilder-tunnelbelysning-realisering",
@ -45,7 +47,7 @@
"note": "Two independent reasons to discount, reported separately rather than merged. The sources value is written as a block list, which is not the accepted form: the state is unreadable, the shape is named, and two entries were seen. Independently, no verified key means the tier derives as unverified, and no adjudication key means unknown -- not proposed. Discounted, not rejected: the concept remains readable and its prose was read."
}
],
"ledger_note": "Had tiltak-trinnstyring-innkjoringssone held, its driftslogg entry would have been the first place to look for a refutation of the 18 % figure. It is reported as (unreadable, block-sequence, 2) rather than as absent evidence, because 'written in a form I could not read' and 'not there' point at different repairs.",
"ledger_note": "tiltak-trinnstyring-innkjoringssone's driftslogg entry would have been the first place to look for a refutation of the 18 % figure. It is reported as (unreadable, block-sequence, 2) rather than as absent evidence, because 'written in a form I could not read' and 'not there' point at different repairs -- and because it was unreadable rather than exhausted, the judgement is undecided rather than survived.",
"denominator": {
"concepts_considered": 7,
"concepts_consulted": 2,