fix(divergence): our own iframe number read 3x low, and the reported cause was not the cause
No data file changed and no pattern moved. A published figure was wrong. llm-ingestion-pipeline-security flagged it (coord, 2026-08-11T19:51:55Z) by measuring the hybrid-xss:iframe-src row themselves instead of citing ours, and got roughly 4x our number. They attributed the gap to measurement surface - their composed scan_lexicon() against our standalone regex - and said no re-measure was needed. Re-measured anyway, because the claim was about OUR number. Their diagnosis does not hold: our standalone 100 000-char figure is 7.86 s against their composed 8.95 s, so the two surfaces differ by far less than the error did. Standalone, Python 3.14.0, same unit the document claims: iframe-src [^>]* 822.7 ms @ 32k 51 477.4 ms @ 256k published 119.6 ms @ 32k 16 857 ms @ 256k script-tag [^>]* 87.4 ms @ 32k 5 222.6 ms @ 256k published 21 ms @ 32k 5 440 ms @ 256k So the Python script-tag figure at 256k reproduces and the one at 32k does not, and the iframe-src pair reproduces at neither point. Error ratios are not constant, so a single mis-sized input does not explain it, and the original harness lived in a previous session's scratchpad and is gone. Recorded as NOT DIAGNOSABLE rather than given a plausible cause - a guessed cause would read like a finding. Superseded figures are struck in place rather than overwritten. Anyone who cited the old number needs to be able to discover that they did. The 0.4.0 decision does not depend on this. Every corrected figure is larger, the shape is unchanged (quadratic, x4 per doubling), and both [^><]* forms stay flat. The 0.4.0 CHANGELOG section still quotes the old figure and is left alone: that section is the record of what was released, not a live claim. Verified: JSON well-formed, specs normative, charter clean, README vendoring examples and prose moved to v0.4.1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLEZ4XCSnSrQUFA8SzkQB4
This commit is contained in:
parent
daa7ba4c1c
commit
2d86151e3b
3 changed files with 67 additions and 5 deletions
32
CHANGELOG.md
32
CHANGELOG.md
|
|
@ -9,6 +9,38 @@ Versioning note: the repository tag versions **the contract** (file set, key nam
|
|||
case ids, disposition semantics). Each JSON file additionally carries its own
|
||||
`"version"` field, bumped when that file changes.
|
||||
|
||||
## [0.4.1] — 2026-08-11
|
||||
|
||||
**No data file changed and no pattern moved. A number this repository published was wrong, and
|
||||
it was wrong in our favour's opposite direction — the corrected figures are larger.** A runtime
|
||||
that passes `0.4.0` passes `0.4.1` unchanged.
|
||||
|
||||
### Fixed
|
||||
|
||||
- `docs/lexicon-port-divergence.md` (informative) — the ReDoS figures for
|
||||
`hybrid-xss:iframe-src` read **~3× low**, and the Python `script-tag` figure at 32 000 chars
|
||||
read ~4× low. Flagged by `llm-ingestion-pipeline-security` (coord, 2026-08-11T19:51:55Z), who
|
||||
measured the row themselves rather than citing ours.
|
||||
|
||||
Their diagnosis was measurement surface — their composed `scan_lexicon()` against our
|
||||
standalone regex. **Checked, and that is not the cause:** our standalone 100 000-char figure
|
||||
(7.86 s) sits close to their composed 8.95 s, so the two surfaces differ by far less than the
|
||||
error. Re-measured standalone, Python 3.14.0: `iframe-src` `[^>]*` is 822.7 ms at 32 000 chars
|
||||
and 51 477.4 ms at 256 000, against the published 119.6 ms and 16 857 ms. The Python
|
||||
`script-tag` figure at 256 000 chars *does* reproduce (5.44 s published, 5.22 s measured); the
|
||||
one at 32 000 chars does not (0.021 s against 0.087 s).
|
||||
|
||||
The error ratios are not constant, so a single mis-sized input does not explain it, and the
|
||||
original harness lived in a previous session's scratchpad and no longer exists. **The cause is
|
||||
recorded as not diagnosable rather than guessed at.** The correction is a box in the document
|
||||
carrying the re-measured table, and the superseded figures are struck in place rather than
|
||||
quietly overwritten — a consumer who cited the old number needs to find out that they did.
|
||||
|
||||
Nothing about the `0.4.0` decision depends on this. Every corrected figure is larger, the
|
||||
shape is unchanged (quadratic, ×4 per doubling), and both `[^><]*` forms remain flat under
|
||||
both engines. The `0.4.0` entry below still quotes the old `iframe-src` figure; it is left as
|
||||
published, because that section is the record of what was released.
|
||||
|
||||
## [0.4.0] — 2026-08-11
|
||||
|
||||
**Two detection values changed, by two different mechanisms, and the difference between those
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue