| name | decisions-and-adrs |
| description | Use this skill whenever you create, write, modify, or statue an entry under `.decisions/` or `.adrs/`, or when you need to know the difference between a tactical DECISION and a strategic ADR, the two-zone frontmatter format of DECISION-NNN-*.md (zone author + zone review with `revisit`/`reviewed_by`/`reviewed_at`/`outcome` fields), the R2 strict rules under which green is allowed to author a tactical DECISION (scope=tactical, revisit=true at creation, necessary to unblock current task, DECISION-NNN referenced in code or commit message), or the R6 three-level defence around the `Authored-By:` commit trailer (pre-commit format, CI git-blame ↔ trailer cross-check, reviewer pass DoD sanity check). Also covers the architect's three statuing outcomes (confirm / reformulate / supersede) for tactical DECISIONS surfaced in RETRO.md `decisions_to_statue:` from the previous sprint, and the strategic ADR format. Loaded only by `architect` (writes strategic, statues tactical, both ADRs and DECISIONS), `green` (writes tactical DECISIONS under R2), and `sprint-planner` (lists pending tactical DECISIONS in `decisions_to_statue:` for next sprint's Wave 1 task). Other agents (PM, red, e2e-tester, reviewer, bug-detective) can read DECISION / ADR files without this skill — they just need the `## Relevant decisions` section of FEATURE.md to know which apply to a feature. |
Decisions and ADRs
The decision log mechanism for the agile-team-v2 workflow. Two distinct stores — .decisions/ for tactical/strategic decisions with a review lifecycle, .adrs/ for strategic Architecture Decision Records — plus the Authored-By: commit trailer that audits write authority.
This skill is loaded only by the three agents that write to these stores: architect, green, sprint-planner. Other agents read DECISION/ADR files freely (they're public artifacts), but they don't need the format details, the R2 strict rules, or the statuing protocol.
The two stores
.adrs/ — strategic, multi-feature, project-direction
Architecture Decision Records. Format unchanged from v1. Strategic only — multi-feature impact, invariant changes, contracts that other features will depend on. The architect writes ADRs.
# ADR <NNN> — <short title>
Date: <YYYY-MM-DD>
Scope: strategic
Author: architect
Decided: [autonomously | with human input]
Revisit: [true | false]
## Context
## Decision
## Consequences
## Related
- Features: <links>
- Prior ADRs: <links or None>
- Superseded ADRs: <links or None>
Revisit: true indicates an autonomous decision under uncertainty — picked up at retro for human review.
Tactical decisions go to .decisions/, not .adrs/. Do not mix.
.decisions/ — tactical or strategic, with two-zone frontmatter and review lifecycle
The decision log distinct from strategic ADRs. The architect writes strategic DECISIONS directly. Green may write tactical DECISIONS during implementation under R2 strict rules (below). The architect statues every unstatued tactical DECISION at the start of the next sprint via a Wave 1 task placed by the sprint-planner.
.decisions/INDEX.md:
| ID | Scope | Status | Title | Date | Author |
|---------------|-----------|------------|----------------------------------|------------|-----------|
| DECISION-042 | strategic | ACTIVE | session storage backend | 2026-04-15 | architect |
| DECISION-051 | tactical | ACTIVE | session-id format choice | 2026-04-27 | green |
.decisions/DECISION-NNN-<slug>.md — two-zone frontmatter:
---
id: DECISION-051
date: 2026-04-27
scope: tactical
status: ACTIVE
author: green
affects: [internal/auth/session.go]
review:
revisit: true
reviewed_by: null
reviewed_at: null
outcome: null
---
(empty initially; filled at statue time if reformulating)
Every commit that creates or modifies anything under .decisions/ carries the Authored-By: trailer (R6).
R2 — Tactical DECISIONS by green
Green may write a tactical DECISION when all four hold:
scope: tactical (never strategic — reserved for the architect).
review.revisit: true at creation (never false initially).
- The decision is necessary to unblock the current task — not opportunistic. If green could finish the task without writing the DECISION, the DECISION should not be written. The architect picks up recurring patterns at retro time.
- The DECISION-NNN is referenced in the code (a
// see DECISION-NNN comment) or in the commit message body.
Strategic DECISIONS are forbidden for green — they require the architect's authority. If green encounters what feels like a strategic decision in flight, the right move is a dispute (escalation type E in the dispute protocol) so the architect can decide and write the strategic DECISION.
The sprint-planner surfaces each unstatued tactical DECISION in RETRO.md decisions_to_statue: at retro processing. The next sprint's plan starts with a Wave 1 task block for the architect to statue every entry. CI rejects a sprint that closes with review.revisit: true and review.reviewed_by: null on a DECISION older than one sprint window (check.sh enforces).
The architect's three statuing outcomes
For each unstatued tactical DECISION, the architect chooses exactly one outcome:
Confirm
The decision is sound as written.
review.outcome: confirmed
review.reviewed_by: architect
review.reviewed_at: <YYYY-MM-DD>
review.revisit: false
- Body untouched.
Reformulate
The fundamental decision is right, but the phrasing was incomplete or misleading.
- Same review fields as confirm with
outcome: reformulated.
- Rewrite
## Decision and/or ## Rationale to phrase it correctly.
- Keep the same
id and date.
- Fill
## Reformulated by architect explaining what was wrong and how it was fixed — this section is the audit trail.
Supersede
The decision is wrong.
- On the original DECISION:
status: SUPERSEDED
review.outcome: superseded
review.reviewed_by: architect
review.reviewed_at: <YYYY-MM-DD>
- Create a new
DECISION-MMM-<slug>.md that explicitly supersedes this one (mention the superseded id in ## Rationale).
- Update
.decisions/INDEX.md to reflect both: the original moves to SUPERSEDED, the new one is ACTIVE.
Escalation: tactical → strategic
If the decision's scope turned out larger than green originally judged (it affects multiple features or modifies an invariant assumed elsewhere), the architect may promote scope: tactical → scope: strategic during statuing. Note this in ## Reformulated by architect. Optionally migrate the entry into .adrs/ if it's genuinely a strategic ADR — in that case write a new ADR-NNN that consumes the DECISION's content, set the original DECISION's status: SUPERSEDED with outcome: superseded, and reference the new ADR.
R6 — Authored-By: trailer and three-level defence
The Authored-By: commit trailer audits write authority on .decisions/ and on the mechanical: flag in FEATURE.md frontmatter.
When the trailer is mandatory
Every commit that:
- Creates, modifies, or deletes any file under
.decisions/.
- Modifies the
mechanical: field in any FEATURE.md frontmatter (architect-only field per R1).
- Modifies the
review.reviewed_by field in any DECISION.
…must carry Authored-By: <agent-id> in the commit message body.
Values:
architect — for the architect's writes (strategic DECISIONS, statuing tactical DECISIONS, modifying mechanical:).
green — for green's tactical DECISIONS only.
Three-level defence
- Pre-commit hook — verifies YAML zone format on
.decisions/ files. Blocks creation without revisit: true. Blocks zone-review modification without all four fields (revisit, reviewed_by, reviewed_at, outcome). Blocks zone-author modification post-creation.
- CI bloquante (
check.sh --mode ci) — git blame on review.reviewed_by modifications must correspond to a commit with Authored-By: architect. Mismatch → CI block. Same for mechanical: ↔ Authored-By: architect.
- Reviewer pass DoD — sanity check final: iterates over commits in the sprint window touching
.decisions/, verifies trailer ↔ zone modification consistency. Mismatch → blocking finding.
This is declarative, not cryptographic. A buggy agent could write a false trailer. Mitigations: (a) agents follow their skill instructions, (b) git blame cross-checks the trailer against the commit identity, (c) the reviewer's pass DoD catches divergences before the sprint closes.
The cost of a forged trailer is high (blocking finding at pass DoD, sprint cannot close). The cost of honesty is zero (just write the right trailer). Incentive is correctly aligned.
Never bypass with --no-verify.
Commit examples
Architect creating a strategic DECISION
architect: DECISION-042 session storage backend choice
Feature: auth-login
Task: auth-login-decision-042
Authored-By: architect
Architect statuing a tactical DECISION (confirm)
architect: confirm DECISION-051
Feature: auth-login
Task: auth-login-decision-review
Authored-By: architect
Architect reformulating a tactical DECISION
architect: reformulate DECISION-051 — clarify session-id format
Feature: auth-login
Task: auth-login-decision-review
Authored-By: architect
Architect superseding a tactical DECISION
architect: supersede DECISION-051 with DECISION-067
Feature: auth-login
Task: auth-login-decision-review
Authored-By: architect
Green writing a tactical DECISION during implementation
green: implement Authenticate + DECISION-051 (session-id format)
Feature: auth-login
Task: auth-login-T001-green
Authored-By: green
Architect modifying mechanical: in FEATURE.md (during scaffolding)
architect: scaffold auth-login
Feature: auth-login
Task: auth-login-scaffold
Authored-By: architect
The mechanical: field is set as part of the scaffolding commit; the trailer audits the authority.
Anti-patterns
- Writing a strategic DECISION as green. Forbidden. Raise a dispute (escalation type E) and let the architect handle it.
- Writing
revisit: false at creation as green. Forbidden. Tactical DECISIONS must be reviewed; revisit: true is mandatory at first write.
- Writing a tactical DECISION opportunistically. If you can finish the task without the DECISION, don't write one. The architect picks up recurring patterns at retro.
- Editing an existing DECISION or ADR in place when superseding. Always write a new entry that supersedes; never overwrite. The audit trail requires the original to remain readable.
- Skipping the
Authored-By: trailer with --no-verify. CI catches it.
- Modifying zone author after creation. Author fields are immutable. If the metadata is wrong (e.g., wrong
affects: list), supersede with a corrected DECISION.
- Mixing tactical and strategic in
.adrs/. .adrs/ is strategic only. Tactical goes to .decisions/.
- Letting tactical DECISIONS pile up unstatued across sprints. CI rejects a sprint that closes with unstatued tactical DECISIONS older than one sprint window.
Quick reference table
| What | Who writes | Trailer | Where |
|---|
| Strategic ADR | architect | Authored-By: architect (only on .decisions/ + mechanical: changes — ADRs alone don't require it) | .adrs/NNN-*.md |
| Strategic DECISION | architect | Authored-By: architect | .decisions/DECISION-NNN-*.md |
| Tactical DECISION (R2) | green | Authored-By: green | .decisions/DECISION-NNN-*.md |
| Statuing a tactical DECISION (confirm/reformulate/supersede) | architect | Authored-By: architect | edits zone review of .decisions/DECISION-NNN-*.md; new DECISION on supersede |
Modifying mechanical: flag in FEATURE.md | architect | Authored-By: architect | .features/<slug>/FEATURE.md frontmatter |