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.
This commit is contained in:
parent
56fcc844d6
commit
c4ecf0dba6
7 changed files with 973 additions and 4 deletions
64
docs/PLAN.md
64
docs/PLAN.md
|
|
@ -24,7 +24,7 @@ Lest slik (antakelser, ikke operatørens ord):
|
|||
- Ikke tatt med (operatøren valgte bort «bare rydding»): blokk-skalaren `a #b`,
|
||||
støyen i ReDoS-sveipet og repo-standard-sjekken. De står under § V.5.
|
||||
|
||||
**Dekket i:** katalogene over tid → § V.2 rad 1, økt 2 · hullene → rad 2, økt 1
|
||||
**Dekket i:** katalogene over tid → § V.2 rad 1, økt 2 (§ V.7) · hullene → rad 2, økt 1
|
||||
(måling) og økt 3 og utover (lukking) · ferdig → siste økt.
|
||||
|
||||
---
|
||||
|
|
@ -190,6 +190,68 @@ så de kommer med i samme release som den første lukkingen.
|
|||
|
||||
---
|
||||
|
||||
## V.7 Økt 2, vakten (01.11.2026, ingen release)
|
||||
|
||||
**Kildelista** er `docs/threat-2026/watch-sources.json`: de 16 i registeret, i vaktens
|
||||
egen form (en liste med ett `probe`-objekt per oppføring). Den er generert fra
|
||||
`catalogs.json`, og `tests/test_release_rule.py` holder dem like: samme id-er, samme
|
||||
`cited`, `latest`, `source` og `checked`. 12 oppføringer har en probe som gjør en
|
||||
forespørsel (A, B, F, L×2, O×7, som målt i § V.6). De 4 manuelle (unicode, rfc-3986,
|
||||
commons, Willison) står med klasse S. Det er vaktens egen form for «ingen maskin
|
||||
kan svare» (llm-security bruker den på 6 av sine 58). Hver har en begrunnelse som
|
||||
starter med `manual:`, og sjekkdatoen er registerets `checked`.
|
||||
|
||||
**Kjørt live 01.11** med vakten ved `45d3459`, med `--used` og en egen last-run-fil
|
||||
i scratch. llm-securitys stempel hadde samme sha256 før og etter.
|
||||
|
||||
| Liste | behind | watch | notVerified | current | Prober ok | exit |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `watch-sources.json` | 0 | 0 | 0 | 16 | 12 | 0 |
|
||||
| `watch-sources-v1.4.1.json` (frosset) | 1: owasp-llm-top10 (2025 → 2026) | 1: owasp-rag-cheat-sheet (41f67299 → 510ea484) | 0 | 12 | 10 | 1 |
|
||||
|
||||
Utdataene er committet som `watch-last.json` og `watch-v1.4.1-run.json`.
|
||||
|
||||
**Den frosne v1.4.1-kopien** inneholder bare det v1.4.1 (tagget 2026-09-23) siterte,
|
||||
og hver oppføring har utgaven utgiveren serverte den dagen. OWASP Agentic og ATLAS er
|
||||
utelatt fordi v1.4.1 ikke siterte dem. RAG-arket sto på `41f67299` (2026-05-06), lest
|
||||
fra GitHubs commit-API med `until=2026-09-23`. Uversjonerte arXiv-lenker gir de samme
|
||||
versjonene som nå, fordi alle ble publisert før tag-dagen. Fila er låst med sha256 i
|
||||
testen.
|
||||
|
||||
**Funn:** vakten melder Unicode 17.0 som `current`, fordi klasse S ikke spør. Det er
|
||||
bare 30-dagersregelen som fanger den. Positiv kontroll med alle seks problemene: 4
|
||||
manuelle sjekker fra 23.09, 1 behind og 1 watch.
|
||||
|
||||
**Release-regelen** (`tests/test_release_rule.py`) leser releasedatoen fra den
|
||||
nyeste CHANGELOG-overskriften. Den binder derfor på release-commiten og ikke på en
|
||||
vilkårlig dag mellom to releaser. En test holder overskriften lik versjonen i
|
||||
`pyproject.toml`. Regelen stopper når:
|
||||
- en manuell sjekk er mer enn 30 dager eldre enn releasedatoen;
|
||||
- vaktens siste kjøring er mer enn 30 dager eldre (den er sjekkdatoen for de 12);
|
||||
- utdataene ikke er en kjøring av denne lista;
|
||||
- det finnes en rad i `behind`, `notVerified` eller `watch`. En `watch`-rad teller
|
||||
aldri med i vaktens exit-kode, så regelen leser den for seg. Den ryddes av en
|
||||
sjekk for hånd som oppdaterer `known_value`, og deretter en ny kjøring.
|
||||
|
||||
Hver klausul er mutert bort én om gangen, og hver mutasjon gjorde en test rød (5 av 5).
|
||||
|
||||
**Før en release:** kjør
|
||||
`LLM_SECURITY_EDITION_WATCH_LAST_RUN=<scratch>/lr.json node <llm-security>/scripts/edition-watch.mjs --used docs/threat-2026/watch-sources.json > docs/threat-2026/watch-last.json`
|
||||
og commit utdataene. Uten den miljøvariabelen stempler kjøringen llm-securitys egen
|
||||
last-run-fil.
|
||||
|
||||
**Ukentlig kjøring:** foreslått til llm-security via coord 01.11. Det er deres jobb
|
||||
(`run.sh` i deres tilstandsmappe, launchd mandager 09:15), så den endres ikke herfra.
|
||||
Rad 1 er ikke framme før jobben har kjørt lista vår de siste 7 dagene.
|
||||
|
||||
**Sett, ikke endret:** commons-proben (N) svarer `ok` under llm-securitys jobb, som
|
||||
setter en ssh-remote. Deres `last.json` fra 26.10 har 0 i `notVerified`. Commons blir
|
||||
likevel stående manuell her. llm-securitys egen liste følger de samme commons-taggene
|
||||
hver uke. Under en annen kjøring uten ssh-remote ville proben her svare
|
||||
`auth-required`.
|
||||
|
||||
Ingen release, fordi ingenting i den utgitte pakken er endret.
|
||||
|
||||
## Forrige retning (godkjent av operatøren 28.10.2026, nådd 31.10)
|
||||
|
||||
> «llm-ingestion-guard bygger på nyeste utgave av hver trusselkatalog den viser til,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue