Six live version surfaces bumped by hand (no sed -- provenance is never bumped): pyproject.toml, __init__.__version__, README badge + Status + the pinned pip install tag, docs/BRIEF.md, docs/ADOPTION-BRIEF.md Status, and CLAUDE.md. ADOPTION-BRIEF's test count 792 -> 802. NOT bumped, and deliberately: SECURITY.md's two `1.0.0` references name the freeze BASELINE, not the current version -- "a payload that disposes WARN on 1.0.0 may dispose FAIL_SECURE on a later 1.x" is the promise this release instantiates, so rewriting it to 1.1.0 would erase what it promised. The GATE-G and PLAN-v1 numbers are the 1.0.0 gate record. The Forge repo description carries no version (verified against the API last session). This is the case SECURITY.md and the 1.0.0 CHANGELOG entry described in advance: the exported surface is frozen, detection behaviour is not. No exported name moved. A document that disposed WARN on 1.0.0 may dispose FAIL_SECURE here; a consumer whose frontmatter carries an unquoted ": " in a value will see those concepts refused at import, and quoting it parses. Re-measured after the bump, alone: 802 passed, 129/129 classes, 6/6 gaps hold, 35 limitations.
3.2 KiB
llm-ingestion-pipeline-security
Kontekst
Gjenbrukbar, minimal defensiv layer for LLM ingestion-pipelines (write-time), til forskjell fra query-time chatbot-guardrails. Pakker det arkitektoniske kontraktet — sanitize → fence → tool-less karantenert transform → per-stadium capability-isolasjon → scan output før commit → fail-secure — som komponerbar, framework-agnostisk kode.
Referanse-implementasjon: claude-code-llm-wiki Stage B (tools/wiki_ingest/).
Lexikon-seed: injection-patterns.mjs fra llm-security-pluginen.
Repoet er på v1.1.0 — den eksporterte Python-surfacen er frosset under semver
(deteksjonsatferd er det IKKE; kalibrering flytter seg i 1.x). Stdlib-kjernen er
bygget og testet (15 moduler +
topp-nivå wiring, showcase + korpus), inkl. OKF-adapter og aktivt-innhold-
detektor (EchoLeak-klassen) i output-gaten. Mode-b import_bundle skanner
reserverte strukturfiler (index.md/log.md) i mottatte bundles i stedet for å
path-avvise dem; upload-front-end beholder shadow-reject (allow_reserved=False).
Output-gatens decode-and-rescan mater dekodet base64-klartekst gjennom BÅDE lexicon
og secret-egress (LLM02), så en base64-innpakket credential fanges som
decoded:egress:* i stedet for å forsvinne; hex-innpakket er en dokumentert
restgap (entropy eksponerer kun base64-klartekst). active:raw-html krever et
EKSTERNT mål på URL-attributt-grenen, og <base> er ute av det aktive navnesettet;
scanner og mutator har hver sin predikat (is_active_tag / is_defangable_tag).
Rå HTML graderes nå også på BÆRER: <a>/<area> er klikk-krevende og rapporteres
som active:raw-html-link (MEDIUM), og en tagg hvis hele affordans ER en URL den
ikke bærer (</a>, <Frame>, <video />) er inert. Klassifisering skjer i
active_tag_class; is_active_tag er en tynn wrapper, og census patcher den
FØRSTE (en boolsk patch kan ikke uttrykke en regradering).
ZWJ (U+200D) dømmes på KONTEKST, ikke identitet — unntas kun mellom to emoji, på
begge flater (sanitize eier predikatet, output importerer det).
Start med docs/BRIEF.md for design, README.md for bruk, docs/PLAN.md for
byggerekkefølgen.
Konvensjoner
- Norsk for dialog og planer, engelsk for kode og innhold (repoet er publisert).
- Ingen GitHub — kun Forgejo (
git.fromaitochitta.com). - Remote satt: offentlig
open/-speil på Forgejo; push hver commit (durabelt autorisert). - Minimal-dependency: stdlib-first kjerne; ML/judge-detektorer bak extras.
Communication patterns
Linking to local files
When pointing to local files in responses, always use markdown link syntax with a descriptive name:
- Use
[Human-friendly name](file:///absolute/path)— never barefile:///...URLs or autolinks<file://...>. - Always use absolute paths. Never
~/or relative paths. - For multiple files, render as a bullet list of named markdown links.
Why: bare file:// URLs only render the first as clickable across multiple lines. Named markdown links make each entry independently clickable and look cleaner.
Example (the path is a placeholder — the checkout root is the reader's own, and this file is published, so it must not carry one machine's directory layout):