Skip to content

fix(docs): add stable anchors to ADR-0073 decisions and correct 22 positional citations - #2930

Open
sei-ahouseholder wants to merge 3 commits into
mainfrom
task/2627-adr-0073-decision-anchors
Open

fix(docs): add stable anchors to ADR-0073 decisions and correct 22 positional citations#2930
sei-ahouseholder wants to merge 3 commits into
mainfrom
task/2627-adr-0073-decision-anchors

Conversation

@sei-ahouseholder

Copy link
Copy Markdown
Contributor

Summary

ADR-0073 had no numbered decisions, but 22 code comments cited ADR-0073 decision N using unresolvable positional numbers. This PR adds named HTML anchors to the ADR's 13 "Concretely:" bullets, rewrites all 22 citations to use ADR-0073#anchor-name references, and adds a lint rule that prevents recurrence.

Changes

  • docs/adr/0073-per-actor-storage-isolation.md: Added <a id="..."></a> anchors to all 13 bullets in the "Concretely:" section. Descriptive anchor names (#peer-records-in-knowers-store, #url-segment-computed-not-looked-up, #hosted-actors-list-only, #cross-actor-access-must-be-named, plus 9 others) survive list reordering.
  • 17 production/test files (22 citations): Replaced every ADR-0073 decision N comment with ADR-0073#anchor-name.
  • test/metadata/test_adr_decision_citations.py (new): Two live lint tests + 3 demonstration tests. test_no_positional_decision_citations rejects any ADR-NNNN decision N pattern. test_anchor_citations_resolve verifies every ADR-NNNN#anchor reference resolves to a declared anchor in the ADR file.

Acceptance criteria

  • AC-1: ADR-0073 Concretely bullets have <a id="..."> anchors
  • AC-2: All 22 positional citations replaced with named anchor references
  • AC-3: grep -rniE "adr-0073[^)]{0,40}decision [0-9]" (excluding docs/adr/0073) returns 0 results
  • AC-4: Lint rule detects bad citations; all 5 metadata tests pass

Deferred bugs (pre-existing, found in code review)

Three bugs discovered in passing — not introduced by this PR (none of the affected files are in this diff):

Verification

  • Unit suite: 7920 passed
  • Integration suite: 1248 passed
  • Metadata suite: 494 passed (5 new tests all pass)
  • black, flake8, mypy, pyright: clean

ahouseholder and others added 3 commits September 1, 2026 14:09
…sitional citations

Issue #2627: ADR-0073 had no numbered decisions but 22 comments cited
"ADR-0073 decision N" with positional numbers that were unresolvable.

- Add <a id="..."> named anchors to all 13 Concretely: bullets in
  docs/adr/0073-per-actor-storage-isolation.md
- Replace all 22 positional citations across 17 files with
  ADR-0073#anchor-name references
- Add test/metadata/test_adr_decision_citations.py lint rule with 5
  tests enforcing named-anchor citations and resolving anchors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…alled

- actionlint golang hook requires Go on PATH to build; devcontainer has none
- pre-commit hangs indefinitely trying to provision Go toolchain
- workaround: SKIP=actionlint for commits that don't touch .github/ workflows

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nditions.py

Fixes #2923, #2926, and partially addresses #2925.

- test_lifecycle.py:482,714 — stub read_case instead of read so that the
  ValidateEmbargoRevisionStateNode and SetEmbargoActiveNode ValueError
  regression guards are actually exercised (both were silently dead)
- test_suggest_actor_tree.py:521,870 — stub read_case in
  ActorAlreadyParticipantNode and EmitNoteDuplicateRecommendationToOwner
  helper; attributed_to and actor_participant_index now reach the nodes
- conditions.py:63 — ActorAlreadyParticipantNode calls read_case() not
  read(), consistent with every other case-reading node
- datalayer.py — read_case(raise_on_missing=True) now raises ValueError
  instead of silently returning None when the stored object is not a
  VulnerabilityCase (closes #2925)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@sei-ahouseholder sei-ahouseholder left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Triage: #2930 — fix(docs): add stable anchors to ADR-0073 decisions and correct 22 positional citations

Linked issues: #2627 (ADR-0073 decision citations point at numbers the ADR does not have)
Changed files: 25 files — docs/adr, test/metadata, adapters, core/behaviors, demo
CI status: ⏳ pending (2 jobs still running: fcvcv Demo Integration, Build; all completed checks ✅)
Merge state: ✅ MERGEABLE (BLOCKED — waiting on CI)
Base branch: main
Needs integration tests: yes (adapters, demo, core/behaviors changed)


Findings

# Phase Severity Description Outcome
phase2-missed-positional-citation-0 issue-linkage ❌ FAIL vultron/demo/helpers/verification.py:68-69 has a split-line positional citation (ADR-0073 decision\n5) — not in the original 22, not caught by the new lint rule fix-now
phase3-pr-body-stale-deferred-0 pr-body-format ⚠️ IMPROVE PR body "Deferred bugs" section claims "none of the affected files are in this diff" — false; conditions.py and datalayer.py are in the diff; add Closes #2923, #2925, #2926 fix-now

Total: 1 FAIL · 1 IMPROVE · 0 NEW-ISSUE


Notes

The 22 known citations are correctly fixed, all anchors resolve, and the lint rule works for single-line citations. The FAIL is a 23rd citation missed by the original single-line grep discovery in #2627: verification.py:68-69 wraps (ADR-0073 decision across a line break to 5), evading both the issue's grep and the new _POSITIONAL_CITATION_RE per-line scanner.

Fix for the FAIL has two parts:

  1. verification.py:68 → change to ADR-0073#peer-records-in-knowers-store (same anchor as the other "decision 5" sites)
  2. test_adr_decision_citations.py _collect_positional_citations → scan full-file text rather than iterating splitlines(), so split-line citations are caught

Bugs #2923, #2925, #2926 were all closed via commit 6bd53eb5 — the IMPROVE just asks for the PR body to reflect this.


Triage artifact: .claude/pr-2930-triage.json
Next step: run /pr-execute or /pr-ship to apply fixes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 301+ diff lines or 7+ ACs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(adr): ADR-0073 decision citations point at numbers the ADR does not have

2 participants