ss-sdd-maintaining-adrs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ss-sdd-maintaining-adrs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Identify and capture architecturally significant decisions from a spec as Architecture Decision Records. Avoid duplicates with existing ADRs. Skip if the spec contains no decisions worth recording.
Core principle: Not every choice is an ADR. ADR-worthy = a decision a future engineer or reviewer would re-litigate without context — choices where the reason matters more than the outcome.
Returning "0 ADRs created" is a normal and common outcome. Execution-level specs often have nothing ADR-worthy. Don't manufacture ADRs to look productive.
Leaf skill — do not dispatch sub-subagents. If you find yourself wanting to delegate, you're either overthinking the task or it doesn't belong here.
Announce at start: "I'm using the ss-sdd-maintaining-adrs skill to capture architectural decisions."
The dispatch prompt includes:
SPEC_PATH — absolute path to the specADR_DIR — directory where ADRs live (hardcoded docs/adr; the coordinator passes the value into the dispatch)EXISTING_ADRS — list of paths to existing ADR files (may be empty if this is the project's first feature)DECISIONS_CAPTURED — list of decisions the coordinator flagged during discovery as ADR candidates (may be empty)Read SPEC_PATH. Pay attention to:
Then read every file in EXISTING_ADRS — you need to know:
highest + 1 (do not fill gaps from deleted ADRs)If EXISTING_ADRS is empty, this is the project's first ADR. Start at 0001.
A decision is ADR-worthy when all of these are true:
Examples of ADR-worthy:
NOT ADR-worthy:
For each candidate, check if an existing ADR already covers it:
Supersedes: ADR-NNNN, AND edit the existing ADR's status line: change Status: Accepted (or whatever it was) to Status: Superseded by ADR-NNNN. You write both file changes; the coordinator commits them together.Use this locked format (do not deviate):
# ADR-NNNN: <Title>
- **Status:** Proposed | Accepted | Superseded by ADR-NNNN | Deprecated
- **Date:** YYYY-MM-DD
- **Spec:** [NNN-short-name](../specs/NNN-short-name/spec.md)
- **Supersedes:** ADR-NNNN (optional, only when applicable)
## Context
<2-4 paragraphs: the situation we're in, the forces at play, what's driving the decision now. Use project domain vocabulary. Don't restate the spec — link to it.>
## Decision
<1-2 paragraphs: what we chose, stated clearly enough that someone could implement it from this alone.>
## Consequences
**Positive:**
- <Outcome we gain.>
- <Outcome we gain.>
**Negative:**
- <Cost we accept.>
- <Risk we take on.>
**Trade-offs accepted:**
- <Things we're explicitly giving up vs. alternatives.>
## Alternatives Considered
- **<Alt A>:** <What it was, why rejected (concretely).>
- **<Alt B>:** <What it was, why rejected.>
- <Add more only if there were genuine candidates. Two-three is typical.>Filename: <ADR_DIR>/<NNNN>-<kebab-title>.md
NNNN is zero-padded to 4 digitskebab-title is 2-5 kebab-case words from the ADR title (e.g., 0003-use-jwt-for-sessions.md)Status: Default to Proposed. The coordinator's user-approval stage will flip it to Accepted (or the user can during review).
Do NOT commit. Write the ADR files but do NOT run git commit. Stage 7 (ss-sdd-choosing-feature-branch) batch-commits all SDD planning artifacts — including these ADRs — on the user's chosen branch.
Date: Today in UTC: date -u +%Y-%m-%d. Don't use local time.
Numbering: Sequential across all ADRs in the project. If the highest existing is 0012, the next is 0013, even if 0007 was deleted (do not fill gaps). Multiple new ADRs from one spec are numbered sequentially in the order they were identified.
Alternatives Considered — minimum count: At least 1 alternative is required. If you cannot name a single genuine alternative, the decision isn't really architectural — reconsider whether it's ADR-worthy at all. Two or three is typical; padding with weak alternatives makes the ADR worse, not better.
Consequences — be concrete: "Adds ~50ms login latency" beats "may be slower." If you don't know a number, say what you do know ("Single-DB read replaced by token verify + DB read") rather than vaguely speculating ("might affect performance").
Return to the coordinator:
## ADR Maintenance Result
**ADRs created:** N
- ADR-NNNN — <title> (file: docs/adr/NNNN-kebab.md)
- ADR-NNNN — <title> (file: docs/adr/NNNN-kebab.md)
**ADRs updated (superseded markers):** N
- ADR-NNNN — marked superseded by ADR-NNNN
**Decisions skipped (already covered):**
- <decision>: covered by ADR-NNNN
**Decisions skipped (not ADR-worthy):**
- <decision>: <reason — e.g., "no alternative was considered", "stylistic only">
**Notes for coordinator:**
- <Anything the coordinator should bring to the user's attention before approval, e.g., a status-supersession conflict.>If no ADRs are warranted, return:
## ADR Maintenance Result
**ADRs created:** 0
No architecturally significant decisions warrant new ADRs. <One sentence explaining why — usually: the spec is execution-level, decisions are constrained by existing ADRs, or no real alternatives were in play.>| Mistake | Fix |
|---|---|
| Writing an ADR for every spec, even when nothing is ADR-worthy | Returning "0 ADRs" is normal and common |
| Restating the spec in the Context section | Link to the spec; Context is about what's forcing the decision now, not what the feature is |
| Vague Consequences ("might be slower", "could cause issues") | Quantify or remove. "Adds ~50ms login latency" beats "may be slower" |
| Padding Alternatives Considered with weak options | If A vs B wasn't a real choice, don't pad the section. Real alternatives only. |
| Marking ADR as Accepted prematurely | Default to Proposed; user approval flips it |
| Not updating the superseded ADR's status when writing a successor | Both files must be edited — they're a pair |
| Inconsistent kebab title vs ADR title | Title in the file should match the filename slug |
| Filling gaps in numbering (e.g., re-using 0007 after it was deleted) | Always use highest + 1; gaps are intentional history |
| Using local date instead of UTC | date -u +%Y-%m-%d everywhere |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.