ASVS V3 is in scope — the exclusion contradicted the scorecard - #105
Merged
Conversation
This was referenced Aug 1, 2026
wshallwshall
force-pushed
the
claude/docs-factual-drift
branch
from
August 1, 2026 02:00
3da0f26 to
1f9184c
Compare
The Secure Development Standards excluded ASVS 5.0 chapter V3 (Web Frontend
Security) on the stated grounds that there is no browser-delivered UI:
| V3 | Web Frontend Security | **No** | No browser-delivered UI (PySide6
desktop + APIs); documented exclusion. Re-scope if a web/admin UI is added |
Both halves of that premise are dead. BACKLOG #103 deleted the PySide6 desktop
console on 2026-07-13 and made the browser console at /ui the sole operator UI;
ADR 0143 defaulted it on 2026-07-21. The row's own re-scope trigger had fired.
What settles it is not that argument but the assessment itself. The exclusion
was never carried into the scoring lineage: ASVS-L3-ASSESSMENT-MERCY-2026-07-22
scores a full `## V3 — Web Frontend Security` chapter (31 cells) with real code
anchors, and contains no V3 exclusion claim anywhere. The older assessments have
no V3 chapter at all. So the exclusion was real historically and was abandoned
in scoring without the prose ever catching up — this row was the last place it
survived, and it contradicted the scorecard it summarizes.
Corrected the row and the chapter roll-up that restates it, so a fix to one
cannot leave the other asserting the opposite. V17 (WebRTC) remains a sound
exclusion and is now the only one.
The row now cites the console's shipped controls rather than a verdict: the
per-response nonce CSP with 'strict-dynamic', COOP/CORP same-origin, the HttpOnly
SameSite=Strict session cookie (__Host--prefixed and Secure in an effective-https
context), and the server-side Sec-Fetch-Site/Origin check on state-changing /ui
POSTs. Each verified in messagefoundry_webconsole/_security.py and _auth.py.
`frame-ancestors` was in the draft wording and is NOT asserted — I could not find
it in the console source.
**No pass/fail count is published**, per the standing policy. That matters more
than usual here: 175/50/2/118 is superseded twice over, and the two sessions with
vault access quote different V3 cell tallies (23/4/0/4 over 31 cells in the
2026-07-22 assessment I read; 18/3/4 over 25 cells from a 2026-07-31 rescore I
cannot reach). The scope claim does not depend on either.
The roll-up's arithmetic was also wrong before this change: it said "12 chapters
active (V1, V2, V4–V8, V11–V16)", which is 13. With V3 it is 14.
Closes the documentation audit at 65 of 65.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
wshallwshall
force-pushed
the
claude/asvs-v3-scope-stale
branch
from
August 1, 2026 02:01
61a5e63 to
d8ef41d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The Secure Development Standards excluded ASVS 5.0 chapter V3 (Web Frontend Security) on the
stated grounds that no browser-delivered UI exists:
Both halves of that premise are dead — BACKLOG #103 deleted the PySide6 desktop console on
2026-07-13 and made the browser console at
/uithe sole operator UI; ADR 0143 defaulted it on2026-07-21. The row's own re-scope trigger had fired.
Why this is a doc fix, not a scoping decision
That argument is not what settles it. The exclusion was never carried into the scoring lineage.
ASVS-L3-ASSESSMENT-MERCY-2026-07-22.md:459scores a full## V3 — Web Frontend Securitychapter —31 cells, with code anchors — and contains no V3 exclusion claim anywhere. The older assessments
(
ASVS-L3-ASSESSMENT-2026-07-09.md,ASVS-L3-ASSESSMENT.md) have no V3 chapter at all.So the exclusion was genuine historically, was abandoned in scoring, and the prose never caught up.
This row was the last place it survived — contradicting the scorecard it purports to summarize.
Correcting it moves no requirements and changes no denominator.
What changed
Both the row and the chapter roll-up that restates it — fixing one alone would leave the other
asserting the opposite. V17 (WebRTC) remains a sound exclusion and is now the only one.
The row now cites the console's shipped controls rather than a verdict:
script-src 'nonce-…' 'strict-dynamic'_security.py:9-10same-origin_security.py:12-13SameSite=Strictsession cookie,__Host--prefixed +Secureon effective-https_auth.py:325,_security.py:23-25Sec-Fetch-Site/Origincheck on state-changing/uiPOSTs_auth.py:146,304frame-ancestors 'none'was in the draft wording and is not asserted — I could not find it inthe console source, so it was dropped rather than shipped unverified.
No count is published
Per the standing no-numbers policy, and it matters more than usual here.
175/50/2/118issuperseded twice over — that was the retired A/B-posture figure, and its N/A count of 118 against
today's 61 is the measure of how much moved into scope when the split was dropped.
V3's own tally has moved three times since the assessment that settles this PR, which is the best
argument for not printing one: 23 Pass / 4 Partial / 0 Fail / 4 N/A across 31 cells at 2026-07-22
(read directly); 3.5.1 and 3.7.5 flipped to Pass in the 2026-07-24 interim (PR #286, verified);
3.4.1 was downgraded to Partial in the 2026-07-31 re-anchor — giving 24 / 3 / 0 / 4, still 31
cells. The scope claim depends on none of it, and the rendered PDF was checked to confirm no tally
leaked in.
Also corrected in passing: the roll-up's arithmetic was already wrong. "12 chapters active
(V1, V2, V4–V8, V11–V16)" is 13. With V3 it is 14.
Verification
v0.3.2/July 2026, zero mojibake, zero localfile://links.No browser-delivered UIandDocumented exclusions: V3both confirmed absent from therendered artifact; the new in-scope wording confirmed present.
neutral 17-chapter list.
🤖 Generated with Claude Code