feat(carriers): three cases minted, and the id is named rather than adopted
Both runtimes answered the 2026-08-11 decision request, and they did not ask for the same name. The guard ruled `sanitize:` names its `Finding.detector` and offered all three labels for verbatim adoption. llm-security, asked directly, answered that the name would make its conformance result read as a claim about neutralisation it does not perform. Two things decided it. The guard's own unprompted correction: prefix == detector holds for those six labels and is no general law in its runtime (`egress:*` carries detector="output"; decode-and-rescan yields two-part `decoded:lexicon:*`). A prefix whose meaning is recoverable only by reading one implementation cannot carry a shared id space. And a measurement taken here at be9759b: on the surface the guard's own ruling pinned, `sanitize()` returns changed text on all three carriers, so the counterargument's decisive case -- that `scan_output` mutates nothing -- does not reach this surface. Not a mediation. Neither runtime claimed the shared id must equal its label, and `override:ignore-previous` already carries two different alias strings. - carriers.json 0.1.0 -> 0.2.0: carrier:zero-width / :bidi-override / :unicode-tag, aliased to the guard's labels. No aliases.llm_security -- that runtime's carrier findings carry no id yet, and publishing the alias is the irreversible act that forces the table into its declared set. - manifest 0.3.4 -> 0.4.0: entry_points_by_scope, carrying findings accessor and fixture presentation per scope per runtime. This was objection (c), and it blocked minting harder than the name did. - Corpus 90 -> 93. Measured through sanitize(text, source=Source.INPUT) at guard v0.7.0; verified by a separate checker that re-derives everything from disk -- a generator agreeing with itself proves nothing. - CLAUDE.md gains the two rules that are not derivable from the data: a shared id space cannot rest on a one-runtime prefix, and publishing an alias -- not minting the case -- is the irreversible act. Not minted on purpose: no artifact-side id (the other runtime would only fail them), and no ZWJ-exemption case (U+200D between two emoji is exempt on both guard surfaces since v0.6.1; the fixture avoids it rather than trips it). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U3o4zSQ2kwLsgJNU7apK3Z
This commit is contained in:
parent
7ce0ba706c
commit
8f08e9ac73
11 changed files with 350 additions and 30 deletions
28
CLAUDE.md
28
CLAUDE.md
|
|
@ -65,6 +65,34 @@ Ingen. Data + prosa. Filformater: JSON (data + schema), Markdown (spec), rå tek
|
|||
- `expected.json` er ground truth. Er en runtime uenig med `expected.json`, er runtimen
|
||||
feil — med mindre fixturen selv bevises feil, og da endres fixturen i eget commit med
|
||||
begrunnelse.
|
||||
- **En case er ikke mintbar uten inngangspunkt for sitt scope.** Korpuset pinner ikke
|
||||
lenger ett inngangspunkt per runtime for alt — `manifest.json` →
|
||||
`entry_points_by_scope` bærer inngangspunkt, **findings-accessor** og
|
||||
**fixture-presentasjon** per scope per runtime. En runtime hvis flate er sti-basert kan
|
||||
ikke måle en løs `input.txt`, og en fixture den får som løs tekst måler ingenting
|
||||
samtidig som den ser ut som en pass. Nytt scope ⇒ fyll ut alle tre FØR første case.
|
||||
- **Generatoren verifiserer aldri seg selv.** En mint krever en separat sjekker som leser
|
||||
fixturene tilbake fra disk og utleder alt på nytt (digest, id fra case-id, scope,
|
||||
exact-within-scope). Ligger i scratchpad, aldri i repoet.
|
||||
|
||||
### Id-rom: adoptert vs. navngitt
|
||||
|
||||
Standard er **adopsjon verbatim** fra en runtimes egne labels (leksikonets 83, active
|
||||
contents 6). Å NAVNGI en id her er unntaket og krever at begge runtimes er spurt først —
|
||||
`carrier:*` er den eneste så langt, og `carriers.json` bærer begrunnelsen.
|
||||
|
||||
To regler som ikke er utledbare fra dataene:
|
||||
|
||||
- **Et prefiks som bare betyr noe inne i én runtime kan ikke bære et DELT id-rom.** Guarden
|
||||
korrigerte oss selv på at «prefiks == `detector`-feltet» gjelder seks carrier-labels og
|
||||
er ingen lov i deres runtime. Skriv aldri den generelle formen; skop påstanden til de
|
||||
konkrete id-ene.
|
||||
- **Å publisere `aliases.<runtime>` er den irreversible handlingen, ikke å minte casen.**
|
||||
Konsumentens testsuite utleder sitt registrerte tabellsett ved å gå gjennom HELE den
|
||||
vendorede fila og registrere tabellen om ÉN node bærer aliaset. Granulariteten er FILA.
|
||||
Ett alias tvinger tabellen inn i deres `DECLARED_TABLES` og forplikter dem på hver case
|
||||
scopet dit. Mangler alias-strengen: **la slotten stå tom og si det** — `not-applicable`
|
||||
som registrerer et manglende NAVN er ærlig; en gjettet alias-streng er det ikke.
|
||||
|
||||
### Sikkerhetskritiske tabeller — aldri fra hukommelse
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue