1
0
Fork 0
Commit graph

9 commits

Author SHA1 Message Date
2044ea3b72
chore(watch): re-run the edition watch before 1.10.0
16 current, 0 behind, 0 watch, 0 notVerified. Only lastRun changed.
2026-11-01 17:07:50 +01:00
6eae238261
chore(watch): re-run the edition watch before 1.9.0
16 current, 0 behind, 0 watch, 0 notVerified; only lastRun changed.
2026-11-01 14:57:11 +01:00
c4ecf0dba6
feat(watch): source list for the 16 catalogs and the 30-day release rule
docs/threat-2026/watch-sources.json is the catalog register in the edition
watch's input format: 12 entries probed (A, B, F, L x2, O x7), 4 manual as
class S with a reason. Run live on 2026-11-01: 16 current, 12 probes ok.

A frozen copy of the catalogs as v1.4.1 used them is reported behind
(OWASP LLM 2025) and on watch (RAG cheat sheet); the watch calls its Unicode
17.0 current, which only the 30-day clause catches.

tests/test_release_rule.py stops a release whose manual check or watch run
is more than 30 days older than the newest CHANGELOG date, or whose watch
output has a behind, notVerified or watch row. Each clause mutated away
turns a test red (5 of 5). No release: the package is unchanged.
2026-11-01 12:50:51 +01:00
0ed305e979
docs(plan): measure which watch probe answers each catalog and freeze the seven gaps
Row 1: 12 of 16 register entries answer through an existing probe class of
the reused edition watch (positive control 4 of 4); unicode and rfc-3986 need
a host on its list, the commons repository is private, and the Dual LLM post
has no edition.

Row 2: the seven documented gaps are frozen in gaps-frozen.tsv and held by
tests/test_gap_register.py. docs/gap-sweep.py measures the cheapest rule per
gap on the three false-positive corpora and the pinned OKF corpus before
anything is built: gaps 4, 1 and 6 are closable without new alarms; 2, 3, 5
and 7 get measured reasons.
2026-11-01 11:33:52 +01:00
61ee8d3445
feat(output): report an instruction in plain prose
Session 7 of the 2026 threat plan (attack row 3): A08, A09, A12, A16 and
A19 were red. Their payloads are ordinary English with no marker.

- indirect:prose-instruction (MEDIUM): a paragraph that combines two of
  four classes: it speaks to the model, it is meant to act later, it
  writes to the model's memory, it hides from the user. One class alone is
  ordinary prose. A keyword prefilter skips text where no non-address
  class can match. Catches A08, A09, A16 and A19.
- A12 (a task with no marker) is the seventh documented gap; a rule that
  caught it would be fitted to the payload's words.
- redos-sweep walked no dicts, so the new class patterns were swept by
  nothing. It walks dicts now: 168 patterns, 0 flagged; positive control
  flagged at x4.0.

Measured before building: 0 of 5494 benign documents fire (the three FP
corpora, 577 package READMEs, 1412 vendor-published agent skills). Guard
rule before/after: FP 106/198, 196/2918, 108/389 identical line for line;
OKF import 47/31 identical. Matrix 144/144 + 7/7 gaps, suite 1233 passed.
Row 3: 17 caught, 2 gaps, 0 open.
2026-10-31 21:20:32 +01:00
8f08b1906e
docs(catalogs): wire ASI06 and ATLAS v2026.10 into the README, date every source
Row 1 of the 2026 done-criterion: 16 of 16 register entries on the newest
edition, each with a check date and a source link, re-read at the publisher
on 2026-10-31.

- README: new subsection mapping OWASP ASI06 and seven MITRE ATLAS v2026.10
  techniques to what the guard stops at the write and what it does not;
  a dated catalog table; the threat-model anchors are linked.
- ATLAS moved to v2026.10 (2026-10-28) after session 1; AML.T0057 no longer
  exists there and is not linked.
- Register 1.1.0: `cited` beside `latest` on every entry; CleanBase added
  (cited in BRIEF, unregistered); unverifiable sources kept as candidates.
- tests/test_catalog_register.py fails on a missing date or link, an older
  cited edition, or a README ATLAS/ASI id the register has not verified.
- ZWJ measurement re-taken on Unicode 18.0 (1614 sequences, 122/122); the
  "458 unassigned" figure came from Python's Unicode 16.0, 406 in 18.0.
2026-10-31 16:29:35 +01:00
e4e18b38d7
test(threat-2026): one case per known 2025-2026 attack, red where not caught
Nineteen attacks that can reach an ingestion pipeline, verified against
primary sources, with four out of scope and their reasons. Each arrival
runs through the canonical wiring; twelve of 31 arrivals are red today
and marked strict xfail, so a fix fails until its marker is removed.
PoisonedRAG asserts that its documented gap still stands.
2026-10-28 21:27:33 +01:00
e702505312
docs(threat-2026): register the threat catalogs at their newest editions
Fifteen catalogs and sources, each with the edition cited at v1.4.1, the
newest edition read from its publisher, the check date and the link.
Behind: OWASP LLM Top 10 (2025 -> 2026) and Unicode (17.0 -> 18.0).

The invisible-character denominator for the next session is Unicode
18.0's own: Default_Ignorable_Code_Point, format (Cf) and private use
(Co), 141 674 code points, built from sha256-pinned UCD files.
2026-10-28 21:27:32 +01:00
2e3d33efb4
test(threat-2026): freeze the catalog-number census at v1.4.1
docs/catalog-census.py classifies every OWASP LLM number in tracked files:
old (2025 meaning, maps mechanically), wrong (a meaning no edition gave it,
each with its reason), same, current, history, migration-plan, self.
At 6702d7a the denominator is 95 sites in 23 files (82 old, 13 wrong);
the listing is frozen with its sha256 and a test reproduces it from git.
2026-10-28 21:27:31 +01:00