manage-adr — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited manage-adr (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.
This project stores ADRs in docs/decisions/ following MADR 4.0 with project-specific conventions documented below.
docs/decisions/NNNN-kebab-case-title.mddocs/decisions/README.md contains a table of all ADRs. Update it after every create, rename, or status change.Script paths in this document (e.g. scripts/) are resolved relative to this SKILL.md file, not to your current working directory. If a relative command fails to resolve, prefix it with the path your platform loaded this SKILL.md from.
Fallback. If python3 cannot be located, analyze the script's purpose and logic and execute its intent with available tools, but warn the user that python is not available and the logic was executed with a fallback approach that may not be perfect.
Script paths in this document (e.g. scripts/) are resolved relative to this SKILL.md file, not to your current working directory. If a relative command fails to resolve, prefix it with the path your platform loaded this SKILL.md from.
Use assets/adr-template.md as the starting point. The template contains the exact frontmatter and section structure. Copy it, fill in the content, remove sections marked optional if unused.
Key rules:
status and date are required. decision-makers is required for accepted decisions.status values: proposed, accepted, deprecated, superseded by NNNNdate format: YYYY-MM-DD (date of last status change)Chosen option: **X**, because Y1. **Label.** DescriptionAn accepted ADR is immutable: a permanent record of a decision at a point in time, not edited afterward. Everything in it must stay true and legible for years without depending on anything that changes. Apply these rules to Context, Drivers, Consequences, and rationale:
Section 5.3.5, §8.4), file line numbers, or any pointer into a doc that will be renumbered, rewritten, or deleted. The ADR cannot be edited to follow the move, so the reference rots into a lie. The reader also cannot resolve a bare Section 5.3.5 with no document named. State the fact directly in the ADR's own voice instead.#240, Jira keys), and never frame the ADR's reason for existing as "Issue #N requests X." An ADR records an architect's decision in response to a force in the system, not a response to a ticket. Open Context with the problem and its stakes.agent.max_sessions), table names (run_history), environment variables, tool names, and event field names change rarely and are meaningful without a lookup. Prefer them over document coordinates.session_metadata kept only the latest session"). A present-tense claim about the pre-decision state ("run_history has no token columns") becomes false the day the decision ships, in a document you cannot edit.Two strategies depending on context:
Pre-assigned number (passed by caller or human): Use it directly. Do not call the script - this prevents duplicate numbers when multiple ADRs are created in parallel.
No number assigned (standalone use) python3 scripts/next_adr_number.py to get the next available number:
# Output: 0004For batch allocation (multiple ADRs in one session) python3 scripts/next_adr_number.py --count 3 to reserve a block of numbers:
# Output:
# 0004
# 0005
# 0006Allocate all numbers upfront before creating any files. This avoids the script returning the same number twice when files haven't been written yet.
By default the script resolves docs/decisions/ relative to its own location. If your ADRs live elsewhere - or the default path does not match the layout this skill was loaded from - pass --decision-dir <path> to override:
python3 scripts/next_adr_number.py --decision-dir docs/decisions
python3 scripts/next_adr_number.py --decision-dir docs/decisions --count 3assets/adr-template.md to docs/decisions/NNNN-kebab-case-title.md.status: proposed, date: <today>, decision-makers: <name>.docs/decisions/README.md - add a row to the table.status field in frontmatter.date to today.status: superseded by NNNN and link to the replacement ADR.docs/decisions/README.md.Check every file in docs/decisions/ (excluding README.md):
NNNN-kebab-case-title.mdstatus, date fieldsdate is valid YYYY-MM-DDstatus is one of: proposed, accepted, deprecated, superseded by NNNNdecision-makers is present and non-empty when status is acceptedChosen option: ** patternSection N.N, §N), no file line numbers, no tracker issue/ticket IDs, and the rationale is not framed around a ticketdocs/decisions/README.md table has a row for this ADR with correct title and statusReport all violations. Do not auto-fix without confirmation.
Regenerate the table in docs/decisions/README.md by scanning all ADR files:
| ADR | Title | Status |
| -------------------------------- | ------------- | ------ |
| [NNNN](NNNN-kebab-case-title.md) | H1 title text | Status |status frontmatter value, capitalized.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.