feat(lexicon): publish a commons-owned pattern id with per-runtime aliases
A conformance fixture has to name a finding. The two runtimes that seed this repository do not name the same pattern the same way -- llm-security says "override: ignore previous instructions", the guard says "override:ignore-previous" -- so until now no expected.json could be written at all, including for the 64 patterns whose regex is byte-identical in both. Each pattern now carries `id` plus an `aliases` object naming what each seeding runtime calls it, and a top-level pattern_id_space block explains the field, its provenance and its stability contract. The id is adopted verbatim from the guard's port rather than invented here: that port already carries both names, so the mapping is read from source data. Matched by label <-> desc with em-dash normalised to hyphen, 83/83 one-to-one, 83 unique ids. No detection data moved, and that is proven rather than asserted: labels, patterns and flags are byte-identical in sequence, no flags key was invented (78 before, 78 after), and stripping id + aliases + pattern_id_space reproduces the previous committed file byte for byte -- 23566 bytes. All 83 patterns still compile in Node bare and under u (166/166) and in Python re (83/83). Neither consumer has ratified this id space; both were asked by coord today, and the file records it as a proposal rather than implying agreement. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FaYqid3mejFmd9ZHsiHgp3
This commit is contained in:
parent
22d3a78591
commit
7b70f5b52f
4 changed files with 552 additions and 89 deletions
|
|
@ -291,6 +291,13 @@ directions. They also disagree about pattern identity itself (`override:ignore-p
|
|||
file as a result — behaviour preservation holds, and the divergence is reported to the two
|
||||
owning repositories instead.
|
||||
|
||||
**Half of it is now cleared (operator decision, 2026-08-09).**
|
||||
`lexicon/injection-lexicon.json` 0.2.0 publishes a commons-owned `id` per pattern with an
|
||||
`aliases` object per runtime, adopted verbatim from the guard's port rather than invented.
|
||||
Findings can therefore be named. What still blocks the corpus is the other half: the 13
|
||||
divergent patterns have no agreed expected behaviour, and a fixture for them would have to
|
||||
pick a winner.
|
||||
|
||||
## Definition of done for v0.1.0
|
||||
|
||||
1. Repository initialized, Forgejo remote `open/llm-security-commons`, MIT, `STATE.md`
|
||||
|
|
|
|||
|
|
@ -137,3 +137,15 @@ So the id question is a **prerequisite** for the corpus, not a parallel task: un
|
|||
owns a pattern id both ports map to, no fixture can be written, including for the 64 patterns
|
||||
that are byte-identical. And for the 13 divergent patterns a fixture cannot be authored at all
|
||||
without first deciding whose recall cost is the contract.
|
||||
|
||||
**Resolved for the first half, 2026-08-09 (operator decision).** `lexicon/injection-lexicon.json`
|
||||
0.2.0 now carries a commons-owned `id` per pattern, plus an `aliases` object naming what each
|
||||
seeding runtime calls it. The id was **adopted verbatim from the guard's port**, not invented
|
||||
here — that port already carried both names, so the mapping came from source data. The
|
||||
detection data is provably unmoved: stripping `id`, `aliases` and the new `pattern_id_space`
|
||||
block reproduces the previous committed file **byte for byte** (23 566 bytes, identical).
|
||||
|
||||
Neither runtime has agreed to it yet — both were asked by coord the same day — so the file
|
||||
records it as this repository's proposal rather than a ratified contract. The second half of
|
||||
the blocker stands: the 13 divergent patterns still have no agreed expected behaviour, so
|
||||
their fixtures cannot be authored even now that they can be named.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue