docs(changelog,limitations): 0.3.3 named two behaviour-change classes, there were three
Measuring the same population against the v0.3.1 tag a consumer actually pins (scratch venv, git+file://@v0.3.1, resolved version asserted) returned 99 of 185 (53.5%) against the current tree's 98 (53.0%). Chasing the one document that moved corrected a published claim instead of confirming it. docs-en-fullscreen.txt disposed QUARANTINE_REVIEW at 0.3.1 and WARN now, because markdown:link-anchor-injection stopped matching 300 characters of ordinary prose -- a match that opened at one construct's [ and closed at a different construct's ](...), catching the word "execute" in between. The 0.3.3 ReDoS fix excluded [ from the anchor class and ( from the target class, which telescopes the runaway AND deletes that false-positive class. 0.3.3's "Known behaviour changes" said "None measured" and then named two exceptions, both about a literal (. It missed the third: an anchor can no longer span a [, so a match bridging two separate markdown constructs no longer forms. The correction is in our favour, but it was a behaviour change presented as none, and only a field sweep found it. Also lands two things the measurement needed and did not have: - The rate is now stated for the version consumers pin, not only for the tree that produced it. A number measured on one tree must not be sent as if it described another. - This repository's own eight published documents are 8 of 8 fail-secure at the upload door, reproducible from any clone with no private corpus. It is the first bullet of LIMITATIONS at full strength, and explicitly NOT a fourth population -- one eight-document corpus is an illustration, not a rate. The population -> local-path mapping the public script deliberately omits is recorded in docs/CONSUMER-MAP.local.md (gitignored, never reaches the mirror), so the next session reproduces the numbers instead of re-choosing populations. 717 tests, matrix 128/128 with 6/6 gaps, LIMITATIONS still 33 items.
This commit is contained in:
parent
d1bff6047d
commit
d3d0928c17
2 changed files with 39 additions and 0 deletions
24
CHANGELOG.md
24
CHANGELOG.md
|
|
@ -84,6 +84,30 @@ document already concedes rather than anything newly discovered.
|
|||
supported feature as of the axis separation above, so without this pin a
|
||||
consumer-facing number could change meaning with nothing failing.
|
||||
|
||||
### Corrected — 0.3.3 listed two behaviour-change classes and there were three
|
||||
|
||||
Sweeping the same population against the **v0.3.1 tag a consumer actually pins**
|
||||
(scratch venv, `git+file://…@v0.3.1`, resolved version asserted) returned 99 of
|
||||
185 (53.5%) where the current tree returns 98 (53.0%). One document moved, and
|
||||
chasing it corrects a claim rather than confirming one.
|
||||
|
||||
`docs-en-fullscreen.txt` disposed QUARANTINE_REVIEW at 0.3.1 and WARN now,
|
||||
because `markdown:link-anchor-injection` no longer fires on it. Under 0.3.1 that
|
||||
pattern matched **300 characters of ordinary prose**: it opened at a `[`, ran
|
||||
across intervening text containing the word *execute*, and closed at a distant
|
||||
`](…)` belonging to a different construct. The 0.3.3 ReDoS fix excluded `[` from
|
||||
the anchor class and `(` from the target class, which telescopes the runaway —
|
||||
and, as a side effect nobody measured at the time, deletes this false-positive
|
||||
class too.
|
||||
|
||||
0.3.3's *Known behaviour changes* said **"None measured"** and then named two
|
||||
exceptions: URLs with a literal `(` in the target, and comment bodies with a
|
||||
literal `(` before the keyword. It missed the third: an anchor can no longer span
|
||||
a `[`, so a match that used to bridge two separate markdown constructs no longer
|
||||
forms. The correction is in our favour — one fewer false positive per 185
|
||||
documents of vendor documentation — but it was a behaviour change presented as
|
||||
none, and it took a field sweep to find it.
|
||||
|
||||
### Fixed
|
||||
|
||||
- A **retracted** number was still living in a test comment.
|
||||
|
|
|
|||
|
|
@ -289,6 +289,21 @@ items; this is the full list, each with the mechanism.
|
|||
**Every population was swept twice and reproduced its counts exactly**, and the
|
||||
largest document in any of them is 362 kB — no document approached the 1 000 000-
|
||||
character input cap, so truncation confounds nothing here.
|
||||
**The sharpest datum needs no corpus at all: this repository's own eight published
|
||||
documents are 8 of 8 fail-secure at the upload door** (`python docs/fp-sweep.py
|
||||
self-docs=docs --ext=.md` on a clone, which also picks up any untracked local
|
||||
notes). It is the first bullet of this file at full strength — a document that
|
||||
*describes* attacks carries the constructs it describes — and anyone can reproduce
|
||||
it. It is deliberately **not** a fourth population in the claim above: one
|
||||
eight-document corpus, chosen because it is the worst case, is an illustration and
|
||||
not a rate.
|
||||
**The rate is stable across the versions consumers actually pin**: the same
|
||||
population measured against the **v0.3.1 tag** gives 99 of 185 (53.5%) — one
|
||||
document more than today's 98. That one document is a *removed* false positive,
|
||||
not a regression: `markdown:link-anchor-injection` used to match 300 characters of
|
||||
ordinary prose by opening at one construct's `[` and closing at another's `](…)`,
|
||||
and 0.3.3's ReDoS fix telescoped it shut. See the CHANGELOG correction — 0.3.3
|
||||
reported two behaviour-change classes and there were three.
|
||||
- **URL fragments are not graded.** A fragment is never sent to the server, so it
|
||||
cannot carry data to the host a renderer auto-fetches, and `…/overview#section` is
|
||||
the most common shape in real documentation. The residual: a *clicked* link to an
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue