docs(spec): Amendment A1 — sources som flow-sekvens + falsification-reviewer-persona
Ordre 20260902T113745Z-1250119413-from-.claude (S4), inkl. PM-amendmentet 02.09 14:20Z
som flyttet punkt 2 fra blokkliste til flow-sekvens.
1. skills/falsification-reviewer/ — andre framework-nøytrale persona ved siden av
expert-reviewer, ordrett etter Handoff-specen (portfolio-optimiser plan.md § Handoff).
Bærer evidens-trikotomien present/absent/unreadable der unreadable NAVNGIR formen den
ikke kunne lese + items_seen; adjudication med `unknown` og `proposed` eksplisitt
navngitt og aldri kollapset; K5-terskelen (B3) som skillens regel — en dom hviler på et
konsept KUN når state == present OG trust_tier != unverified, alt annet rapporteres som
(state, reason, items_seen) og DISKONTERES, aldri avvises (consumption-contract § 6.3:
trust tiers er rådgivende signaler, ikke access control; machine-confirmed klarerer
terskelen). En refutasjon som ikke navngir en refuter er ingen refutasjon.
example-evidence.json bærer frontmatteren ORDRETT, ikke bare som dict — formspørsmålet
A1 avgjør er ikke avgjørbart fra {"sources": [{...}]} alene.
2. method-spec.md § 3 Steg 1: Amendment A1. Linjeorientert parsing RESTATED som normativ
(ikke relaksert); `sources` pinnes som énlinjes flow-sekvens av én eller flere
flow-mappinger, blokkliste MÅ IKKE emitteres, og en konsument som møter en rapporterer
den som unreadable med form + antall. Ny rad i § 12. Begrunnelse målt: linjeorientert
parsing har én verdi per nøkkel, så en blokkliste mister alle oppføringer unntatt én
STILLE; K5-taket målt 01.09 = 2 av 5 nøkler på ÉN kilde.
AKSE-NOTE, skrevet inn i spec-en: A1 binder EMISJON. Konsumentens egen plan sier
ordrett «A block sequence and a block mapping are both conformant OKF; they are simply
outside the accepted subset, and the decoder is not entitled to an opinion about whether
the author erred» — sitert verbatim i spec-en. Et flatt forbud uten denne noten ville
gjort konsumentens egen SPEC-kanoniske fikstur ikke-konform.
ÅPENT FUNN, målt 02.09 mot llm-ingestion-guard 1.2.0 (kjent-positiv: title PASS,
verified flow-mapping PASS): porten AVVISER BEGGE former — flow-sekvens med
«disallowed YAML indicator '['», blokkliste med «a mapping is not expressible». A1
pinner altså en form ingen shippet versjon av porten leser i dag. Ført i spec-en og
CHANGELOG, ikke omgått: alternativet feiler av en verre grunn (mister data).
3. De to køplasserte postene fra 25.08 STÅR (§ 10.1 og § 11.1). Ordren spurte på
SCOPE-aksen; avslaget ligger på RATIFIKASJONS-aksen — begge er ren spec-tekst, men
løsningen er fortsatt operatørens å velge blant åpne opsjoner (D-A/D-F), og
:29-referenten endrer en konformans-MUST to konsumenter måles mot. Premisser re-målt:
git log --since=2026-08-25 tomt, ingen ordre i arkivet mellom 25.08 og 02.09,
ingest-spec.md:29 ordrett uendret.
Verifisering kjørt (commons eier ingen kjørbar kode — nevner: 69 filer, 0 .py/.sh/CI):
konsumentens egne guards kjørt mot artefaktene her — _FRAMEWORK_NAMES (14 navn,
IGNORECASE) og persona-testens _FORBIDDEN over 6 filer: 0 treff, kjent-positiv PASS.
grep -c 'OKF bundle' i skillen: 0 (kjent-positiv 'knowledge bundle': 1). json.tool OK.
Steg 1-8-markørene og MUST-språket intakt etter amendmentet.
IKKE PUSHET (open/ krever operatørtoken). Ingen versjonsbump, ingen tag.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
b2205b95e2
commit
ff7b9b7c73
6 changed files with 328 additions and 0 deletions
|
|
@ -102,6 +102,43 @@ it) into the prompt:
|
|||
in-/out-of-bundle test.
|
||||
- Frontmatter is the leading `---`-delimited block, parsed line-oriented as `key: value`
|
||||
strings; the single required field is `type`; unknown fields MUST be preserved.
|
||||
**Line-oriented parsing is normative and is not relaxed by the amendment below:** a value is
|
||||
what follows the first `: ` on its own line, and a value continued onto a following line is
|
||||
not read.
|
||||
- **Amendment A1 (2026-09-02) — multi-source provenance.** A concept MAY derive from more than
|
||||
one source, and `sources` is the field that records it. Its normative written form is a
|
||||
**single-line flow sequence of one or more flow mappings** — `sources: [{ k: v, … }]` or
|
||||
`sources: [{ k: v, … }, { k: v, … }]` — read as an **ordered tuple of entries**, one entry
|
||||
per mapping, in written order. Entry keys are read **as written**, never against a closed
|
||||
set, so a profile that adds entry keys stays readable. A **block list** (`sources:` followed
|
||||
by indented `- ` items) MUST NOT be emitted; a consumer that encounters one MUST report it as
|
||||
**unreadable, naming the shape and the number of entries seen**, and MUST NOT silently keep
|
||||
one entry. A single-mapping flow value normalises to a one-element tuple, so *one source* and
|
||||
*several sources* are the same shape read the same way, and last-write-wins never arises.
|
||||
*(Amendments carry the date they were decided; the version record is in
|
||||
[CHANGELOG.md](CHANGELOG.md).)*
|
||||
|
||||
**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
|
||||
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
|
||||
are simply outside the accepted subset, and the decoder is not entitled to an opinion about
|
||||
whether the author erred."* The two statements sit on different axes and neither overrides
|
||||
the other: A1 forbids **writing** the block form here; it does not reclassify text already
|
||||
written elsewhere.
|
||||
|
||||
**Open finding, measured 2026-09-02, not resolved by A1.** The `llm-ingestion-guard` gate at
|
||||
version 1.2.0 rejects **both** forms — `sources: [{ … }]` with `OKFFrontmatterError: value
|
||||
begins with a disallowed YAML indicator '['`, and the block list with `a mapping is not
|
||||
expressible in OKF frontmatter`. Known-positive control: a single-line `title` passes, and
|
||||
`verified: { by: …, at: … }` passes as a flow mapping. So A1 pins a form no shipped version
|
||||
of that gate reads today. This is recorded here rather than worked around, because the
|
||||
alternative form fails for a worse reason: it loses data instead of raising.
|
||||
- The rendered read-context is the index body (the summary) followed by each non-index
|
||||
concept file as a `## {type}: {title}` section; empty sections are dropped. Rendering is
|
||||
**flat regardless of nesting depth** — directory structure is navigation, not presentation,
|
||||
|
|
@ -474,4 +511,5 @@ is enforced by the spec-integrity test):
|
|||
| `approved`, `rejected` | decision vocabulary (run path, binary) | §4, §4.1 |
|
||||
| `approved_with_adjustment` | decision vocabulary (seed frontmatter + gate only) | §4, §6 |
|
||||
| `type` | OKF frontmatter (required field) | §2, §3 Step 1 |
|
||||
| `sources` | OKF frontmatter (multi-source provenance, Amendment A1) | §3 Step 1 |
|
||||
| `realization_rate` (frontmatter) | bundle seed (structured learning fields) | §3 Step 1, §6 |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue