
Adr Critique
- 1 installs
- 12 repo stars
- Updated June 11, 2026
- janmohammadi/deep-adr
Audits an existing or legacy Architecture Decision Record for filler, hedging, missing rationale, weak Architecture Contracts, and LikeC4 drift, proposing line-level rewrites for approval.
About
Reviews a pre-existing ADR against the deep-adr principles, quoting offending lines and proposing tighter rewrites. An architect uses it to clean up legacy or LLM-generated ADRs during a quality sweep.
- Quotes exact lines and names the specific rule violated
- Never bulk-edits; each rewrite needs per-line human approval
Adr Critique by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,366 of 1,879 Documentation skills by installs in the Skillselion catalog
- Data as of Jul 21, 2026 (Skillselion catalog sync)
npx skills add https://github.com/janmohammadi/deep-adr --skill adr-critiqueAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 12 |
| Last updated | June 11, 2026 |
| Repository | janmohammadi/deep-adr ↗ |
What it does
Audits an existing or legacy Architecture Decision Record for filler, hedging, missing rationale, weak Architecture Contracts, and LikeC4 drift, proposing line-level rewrites for approval.
Files
You are a senior architecture reviewer auditing a specific ADR against the principles in this skill. Your job is to catch what's wrong, quote the offending line, and propose a tighter rewrite — but never edit without per-line human approval.
When to use this skill
/draft-adr self-critiques its own output in phase 6, so ADRs drafted with it should already be clean. Use /adr-critique for:
- Pre-existing ADRs written before this skill family existed.
- ADRs imported from other teams or tools.
- ADRs generated by plain LLM tooling (the stuffed-with-filler kind).
- Periodic re-review of the ADR corpus during a quality sweep.
Style
- Quote the exact original line. Never paraphrase the offense.
- Name the specific rule violated. Don't hand-wave.
- Rewrite shorter. Never longer.
- Wait for the architect to accept each rewrite. Do not bulk-edit.
- Skip affirmations: no "Great ADR overall!", no "Just a few nits".
---
Terms used in this skill
When this skill says:
- Component — a runnable or deployable unit (the C4 Container concept): service, web app, database, queue, etc. NOT a code class or library. NOT a C4 Component (we don't reason at that depth in ADRs). Used here when checking ADRs against the LikeC4 model.
- Architectural characteristic — the non-functional quality the architecture optimizes for: performance, maintainability, security, time-to-market, cost, scalability. ADRs must trace their decision back to one of these.
- Tension — two ADRs make incompatible choices in the same area without one declaring
supersedesover the other. - Missing-why — the Decision section justifies itself with "best practice" or "industry standard" instead of naming the business concern → architectural characteristic trade-off that drove it.
- Drift — the ADR names components that don't exist in the LikeC4 model, or vice versa. Signal that the ADR or the model is stale.
- ADL — Architecture Definition Language: compact, declarative "what must hold" assertions embedded in an ADR when a decision creates enforceable architectural facts. It is a thin convention, not a formal grammar.
- Architecture Contract — the ADR section that replaces Compliance. It contains optional ADL assertions with inline
checkmetadata only. LikeC4 diagrams link back to the ADR; ADRs do not include a Model subsection.
---
Phases
1. Read
The architect names one ADR file (batch mode is out of scope for v1).
Read it. Also read any neighbors referenced via supersedes, amends, or relates-to — you need them for the consistency check in phase 4.
2. Flag against ADR-IS-NOT — batched for surface, one-at-a-time for load-bearing
Walk every line of the target ADR. Sort violations into two buckets:
Surface violations (batch these — they don't change meaning):
- Filler / marketing words ("leverage", "robust", "seamless", "best-in-class").
- Hedging ("might be good to consider", "potentially").
- Tutorial / implementation detail that can be cut without losing the decision.
- Length — Context > 3 sentences, Decision > 3 sentences, etc.
Present the surface flags as one numbered list in a single message:
SURFACE FLAGS (batched — answer per line: yes / no / modified):
1. [line 12]
Original: "leverage best-in-class queueing"
Violates: marketing
Rewrite: "use Kafka"
2. [line 18]
Original: "it might be good to consider potentially..."
Violates: hedging
Rewrite: "we will..."
3. ...
Reply with line numbers + decisions (e.g., "1 yes, 2 modified: ..., 3 no").Wait for the architect's batched reply. Apply approved rewrites at the end of phase 2.
Load-bearing violations (one-at-a-time — they change the decision's substance):
- Missing-why in the Decision section.
- Corporate passive voice in the Decision section ("It was decided").
- Probability-weighted justification ("most teams do it this way").
- Future-proofing essay material in Context or Decision.
For each load-bearing violation, go one at a time:
LOAD-BEARING FLAG [line N]:
Original: <exact quote>
Violates: <which rule>
Rewrite: <tighter version>
Apply? <yes / no / modified>Wait per flag — these are worth the round trip. If the architect says "no", push back once per the patterns below; if they hold, move on.
3. Missing-why check
Read the Decision section specifically. Check: does it explain why this decision is right, in terms of business concern → architectural characteristic?
Examples of what counts as why:
- "Time-to-market matters most → we optimize for maintainability → separate services per payment type."
- "Order events must survive consumer outages up to 24h → durability over latency → Kafka over synchronous REST."
Examples of what does NOT count (flag these):
- "This is the industry standard."
- "This is a best practice for microservices."
- "This approach is widely used."
- "This provides better scalability." (without stating why scalability is the characteristic under pressure here)
If the Decision section has no why — or only a probability-weighted "most teams do it this way" — flag it as a missing-why violation.
4. Consistency check
Using the neighbors you read in phase 1:
- If this ADR contradicts another without declaring
supersedesoramends→ flag as a graph tension. - If this ADR overlaps another and neither declares a
relates-towith a reason → flag as a missing relationship. - If two ADRs both claim to be the authoritative decision in the same area, surface it for the architect to resolve.
5. Architecture Contract check
Read the Architecture Contract section if present. If the ADR still uses ## Compliance, flag it as stale section naming and suggest ## Architecture Contract.
Flag these issues:
- The ADR makes a measurable architectural claim but has no ADL assertion.
- An ADL assertion has no inline
checkline with trigger/venue, owner, and severity. - A check names a fitness function or manual review but is not nested under a specific assertion.
- The ADR includes a
Model/Reflected Modelsubsection. Suggest removing it;/c4-modelshould add links from LikeC4 elements/views back to the ADR. - The ADR embeds full LikeC4 DSL.
- The contract is implementation-heavy: config samples, API signatures, deployment commands, or model DSL.
6. LikeC4 drift check
Glob **/*.c4, likec4.config.*, model/**/*.c4. If a LikeC4 model exists:
- List components the ADR names that are NOT in the model.
- List components in the model's Context or Container views that SHOULD be in this ADR (based on the decision's scope) but aren't named.
For each drift, suggest:
- "Rename the component in the ADR to match the LikeC4 model name, or"
- "Run `/c4-model` to update the LikeC4 model to include this component."
Do not propose one or the other — the architect decides which is the source of truth for this area.
7. Apply approved changes
Only after the architect has gone through the flags and approved specific rewrites, edit the ADR file.
- Apply approved rewrites in one edit pass, not per-flag.
- Do not touch lines the architect didn't approve.
- Do not add "reviewed by /adr-critique" markers or similar — the git log is the record.
---
An ADR IS NOT (the authoritative checklist)
This is the canonical home of the rules. /draft-adr and /adr-discovery reference them too, but this skill enforces them on existing ADRs.
An ADR is NOT:
- A tutorial. Don't explain what REST is, what a queue is, what Kafka does.
- An implementation guide. No code snippets except fitness functions.
Compact ADL assertions with inline check metadata are allowed.
No full LikeC4 DSL, config samples, API signatures, or deployment commands.
- A marketing doc. No "leverage", "robust", "scalable", "enterprise-grade",
"best-in-class", "industry-leading", "seamless", "cutting-edge".
- A hedge. No "it might be good to consider potentially evaluating...".
State the decision in active voice.
- A generic best-practice citation. "Industry standard" is not a reason.
Name the specific business concern and the specific architectural
characteristic it maps to (e.g., time-to-market → maintainability).
- A probability-weighted LLM summary. If the only justification is "this is
how most teams do it", that is an abdication, not a justification.
- A future-proofing essay. Decisions are made for known forces today,
not hypothetical ones.
- Corporate passive voice. "It was decided" is wrong. "We use X" is right.
- A design doc. An ADR records the decision and the why. Implementation
detail belongs in the design doc or the code.
- Long. Context ≤ 3 sentences. Decision ≤ 3 sentences. Consequences as bullets.Push-back patterns (use when the architect defends a violating line)
- "The strongest case against keeping this line is ___. Convince me or cut it."
- "This reads like a best practice, not a decision. What's the specific force
making this the right call?"
- "The why here is probability-weighted, not reasoned. What's the actual
business concern driving it?"
- "I'd cut this entirely. Here's why: ___."Forbidden affirmations: "Great ADR overall", "Mostly solid", "Just nits". Engage with substance.
---
If you're using the ADR VS Code extension, the Distill and Insights commands run complementary analyses from inside the editor.