@@ -1357,3 +1357,37 @@ CHANGELOG. (2) Corrective docs added before this entry: `modules/mcp/README.md`
13571357` tutorial/15-quarkus.md ` §MCP servers on Quarkus — all JVM-scoped (no native, no
13581358sample). No automated gate detects "shipped-but-undocumented"; the bidirectional
13591359per-claim audit is the control.
1360+
1361+ ---
1362+
1363+ ## 2026-06-11 — Called a skipped XSS test suite an "open security hole" without reading the sanitizer
1364+
1365+ ### Factual drift (security severity asserted from an audit memo, not the code)
1366+
1367+ ** Claim (to the maintainer):** While triaging the deferral inventory I told the maintainer
1368+ the disabled ` xss-protection.spec.ts ` e2e suite was "a security hole hiding behind green" —
1369+ the security-embarrassing item tied to the known console v-html XSS blocker — and ranked
1370+ re-enabling it as the highest-urgency drain target.
1371+
1372+ ** Truth:** the console v-html XSS is already fixed and tested. ` markdown.ts ` routes every
1373+ render through ` DOMPurify.sanitize() ` ; both ` v-html ` sinks (` ChatMessage.vue ` via
1374+ ` renderMarkdown(message.content) ` , ` ToolCard.vue ` via ` renderMarkdown(text) ` ) use it; and a
1375+ LIVE (non-skipped) unit test ` markdown.test.ts ` asserts ` <script> ` , ` onerror ` , ` javascript: ` ,
1376+ and ` <iframe> ` are stripped. The skipped ` xss-protection.spec.ts ` is a browser-level coverage
1377+ gap, NOT an open vulnerability.
1378+
1379+ ** Slip path:** I inferred the severity from the 2026-06-11 deferral-audit memo (which filed
1380+ "XSS suite disabled" under test-debt) plus the older gap-analysis "console v-html XSS" blocker,
1381+ and propagated it to the maintainer BEFORE reading ` markdown.ts ` / the ` v-html ` sinks — the
1382+ exact "infer from the narrative instead of reading the code" failure the No-Hallucinations rule
1383+ names. Self-caught one turn later by reading the sink + sanitizer, and corrected the severity
1384+ to the maintainer in the same session.
1385+
1386+ ** Gate added:** before characterizing a skipped/quarantined SECURITY test as an open
1387+ vulnerability, verify the underlying control in code first — grep the sink, its
1388+ sanitizer/encoder, and any live unit test — and distinguish "control absent (real vuln)" from
1389+ "control present, e2e coverage skipped (hygiene gap)". Process gate; reading the code before
1390+ asserting severity is the control. (Same session also had a non-drift fix-quality lapse — an
1391+ LTM-disconnect timeout band-aid declared green that a re-test later failed — corrected by
1392+ root-causing the reaper-poisoning client close; noted here as context, not a separate
1393+ factual-drift entry.)
0 commit comments