Originally created by: fu351
Most of the adaptive red-team harness shipped in [#241]: a seeded, offline corpus of Unicode-smuggling mutations (zero-width chars, bidi overrides, homoglyph/confusable substitutions, tag-block chars, NFKC tricks), GCG-style adversarial-suffix fixtures, a per-channel ASR/FPR harness, and a CI regression gate. See tests/corpus/detection_corpus.jsonl and tests/integration/test_corpus_gate.py.
One channel never made it in: whole_script_confusable. A WIP branch exists (commit 8bd64d0, not on main). This issue is now just that merge.
What to build
whole_script_confusable channel onto main as one detection channel under the existing harness.tests/corpus/detection_corpus.jsonl so the existing ASR/FPR gate covers it.Not here: the model-agnostic perplexity_fn threshold-calibration helper is its own issue (#234).
Where to start: src/doberman/engine/detectors/token_channels.py, tests/corpus/detection_corpus.jsonl, tests/integration/test_corpus_gate.py, and the WIP at 8bd64d0.
Building this? A few project invariants any change must respect:
New here? See CONTRIBUTING.md (github.com), and come chat in the Discord — happy to help you scope any of this.
Originally posted by: fu351
Rescoping — most of this shipped. [#241] landed the seeded corpus, the per-channel ASR/FPR harness, and the CI regression gate (
tests/corpus/detection_corpus.jsonl,tests/integration/test_corpus_gate.py).Two things were left over. The
perplexity_fnthreshold-calibration helper is its own issue (#234). And the in-flightwhole_script_confusablechannel (WIP at8bd64d0, not yet on main) still needs to land. That merge is the only unique work left here, so I've narrowed the title and body to it and dropped it from level-8 to level-5.Related
Tickets:
#241