org-ops census sweep 07 flagged CLAUDE.md:56 as LINK-FILE-URL (ERROR): the example link carried file:///Users/ktg/..., which is dead for every reader but the author and publishes the operator's directory layout on a public surface. The rule itself is unchanged — absolute file:// paths with a descriptive name are still what a response should use. Only the example is now a placeholder, with a note saying why it has to stay one. Note for the verify step: 'grep -n file:///' over this file cannot go empty by construction — line 48 specifies the link syntax and must contain the literal. The distinguishing check is 'grep -n file:///Users/', which is now empty.
57 lines
3.1 KiB
Markdown
57 lines
3.1 KiB
Markdown
# 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å **v0.7 (alpha)**: 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 bare `file:///...` 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):
|
|
|
|
- [Brief](file:///absolute/path/to/llm-ingestion-pipeline-security/docs/BRIEF.md)
|