Skip to content

docs: re-anchor ADR 0152's rotted citations by symbol, and correct a Fail verdict PHI.md no longer had - #158

Merged
wshallwshall merged 3 commits into
mainfrom
asvs-0152-citations
Aug 3, 2026
Merged

docs: re-anchor ADR 0152's rotted citations by symbol, and correct a Fail verdict PHI.md no longer had#158
wshallwshall merged 3 commits into
mainfrom
asvs-0152-citations

Conversation

@wshallwshall

Copy link
Copy Markdown
Collaborator

Two docs-only corrections. Both are live inaccuracies on main, and neither depends on any verdict decision still in flight.

1. ADR 0152''s code citations pointed at each other (15f64510)

Authored by the ASVS summary session; I am driving it. Not merely stale line numbers — two citations were wrong about each other: :43 cited store/crypto.py:163 for _secure_zero while :44 cited :185-199 for mlock residency, and the two had swapped. A line-number check would call both "close enough"; only a content check finds it.

Re-anchored by symbol_secure_zero(), _lock_memory() / _unlock_memory(), _install_key() — so they resolve by grep and stop rotting when the file moves. Same principle ADR 0158 prescribes.

2. PHI.md reported a Fail the record no longer carried (653fb069)

The paragraph stated:

11.7.1 is scored on the ASVS L3 assessment of record (ASVS-L3-ASSESSMENT-2026-07-22.md), which still reads Fail

Two defects in one sentence, both live:

  • The verdict was false. docs/ASVS-ASSESSMENT-METHOD.md:65 on the same main reads `na` under rule 1. PHI.md publicly contradicted the rubric.
  • It named a dated prose file as "the record." ADR 0156 retired that lineage — the record is docs/security/asvs-scorecard.toml, rendered and CI-gated. Citing a dated assessment as the verdict of record is precisely the failure 0156 exists to stop: prose asserts facts about code, and the code moves.

The replacement states the verdict, names the real record, and explains the scope reasoning (the verb is a property of the hosting substrate, which §2 places outside the assessed software). Per §2.1 it keeps the operational point explicit: an out-of-scope verdict buys nothing — the CPython-heap residual is unchanged and a deployment still needs the host-side control. The old wording is described rather than silently dropped, so the correction is legible to a reader who saw the previous version.

Verification

  • still reads **Fail**0; assessment of record0; ASVS-L3-ASSESSMENT-2026-07-220; scorecard named as record → 1.
  • Three-dot vs main before the PHI commit: 1 file, 13 insertions, 6 deletions — the citation fix alone, nothing reverted.
  • Merged origin/main cleanly; no conflicts.
  • Pre-commit: ledger gate, forbidden-content leak guard, and secret scan all Passed. No --no-verify.

Docs only. No code, no verdict changes to the register — that stays with the vault and its owner decision.

🤖 Generated with Claude Code

…ted at each other's code

Every line citation in the memory-hygiene paragraph had rotted, and this class of
rot is silent by construction: they render as markdown link text over a target
carrying no line fragment, so the link always resolves and no link checker can
ever see it.

  :163      claimed _secure_zero     -> prose inside cell_aad()'s docstring; _secure_zero is :187
  :185-199  claimed mlock residency  -> _secure_zero's own body; _lock_memory is :207-225
  :314-325  claimed DEK zeroization  -> _install_key is :391-411
  :462      claimed plaintext wipe   -> self._write_v2 = write_v2; the wipes are :713 and :782

The first two had come to point at each other's code. A renumber would not have
surfaced that -- only opening both targets does. Re-anchored by SYMBOL rather
than by corrected line numbers, since new numbers rot identically at the next
refactor.

Also in the rung-1 row: "four" posture fields is seven (three _self_reported_*,
plus _readout_source, _operator_declared, _readout_contradicts_declaration and
_note), and the present-tense "ENGINE_UI_SEAM 12 -> 13" reads as current state
when the seam is 16 today -- retained as release history and marked as such.

Verified against origin/main 5ad42ac: the cited source files are byte-identical
between that tree and this base, so the symbol anchors hold on either.

No claim in the ADR changed. Only the pointers were wrong.
…rd is the scorecard

Two defects in one paragraph, both live on main.

1. It stated 11.7.1 "still reads **Fail**". The rubric on the same main reads `na` under
   rule 1 -- so PHI.md publicly contradicted ASVS-ASSESSMENT-METHOD.md.
2. It named a dated prose file as "the ASVS L3 assessment of record". ADR 0156 retired that
   lineage: the record is docs/security/asvs-scorecard.toml, rendered and CI-gated. Citing a
   dated assessment as the verdict of record is the exact failure 0156 exists to stop --
   prose asserts facts about code, and the code moves.

The replacement states the verdict, names the real record, and says why the cell is out of
scope (the verb is a property of the hosting substrate, which ASSESSMENT-METHOD §2 places
outside the assessed software). It also keeps the operational point explicit, per §2.1: an
out-of-scope verdict buys nothing -- the CPython-heap residual is unchanged either way and a
deployment still needs the host-side control.

The old wording is described rather than silently dropped, so the correction is legible.
@wshallwshall
wshallwshall enabled auto-merge (squash) August 3, 2026 00:48
@wshallwshall
wshallwshall merged commit 4fe743a into main Aug 3, 2026
31 checks passed
@wshallwshall
wshallwshall deleted the asvs-0152-citations branch August 3, 2026 00:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant