Skip to content
Back to skills

Rota Decide

ASecurity

Use on "decide on X", "we're committing to X", "lock in the boundary that Y", or when a session has produced a constraint future work must respect. Manual only, never auto-invoked.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 6, 2026
developmentgobashtestinggit

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add l4ci/rota --skill rota-decide --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Rota Decide?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Rota Decide
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/l4ci-rota-decide/badge)](https://www.skillsdirectory.com/skills/l4ci-rota-decide)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: rota-decide
description: Use on "decide on X", "we're committing to X", "lock in the boundary that Y", or when a session has produced a constraint future work must respect. Manual only, never auto-invoked.
---

# rota-decide — Capture Hard-Boundary Decisions

Distill an active commitment from the session into `.rota/DECISIONS.md`, by topic, so future work treats it as a hard constraint. Decisions are *active* (boundaries with forbids/permits); `/rota-learn` captures *passive* knowledge (gotchas, conventions).

Copy this checklist and track your progress:
```
- [ ] Step 1 — Mode (default vs source-prefill)
- [ ] Step 2 — Identify the Candidate Decision
- [ ] Step 3 — Compose the Four Parts
- [ ] Step 4 — Classify by Topic
- [ ] Step 5 — Confirmation Gate
- [ ] Step 6 — Merge into DECISIONS.md
- [ ] Step 7 — Update the Decisions Index
- [ ] Step 8 — Confirm
```

## Step 1 — Mode (default vs source-prefill)

- **No flag** — default mode: Step 2 elicits the candidate conversationally.
- **`--from-learning <topic>`** — Source-Prefill Mode (Learning): Step 2 seeds the draft from `.rota/KNOWLEDGE.md`.
- **`--from-spike <name>`** — Source-Prefill Mode (Spike): Step 2 seeds the draft from `.rota/spikes/<name>.md`.

Both flags together is invalid: error with *"`/rota-decide` accepts at most one of `--from-learning <topic>` or `--from-spike <name>` per invocation."* and stop.

## Step 2 — Identify the Candidate Decision

A decision must be **active** (committed; violating it is a regression), **bounded** (forbids X, permits Y) and **justified** (a why: incident, deadline, stakeholder ask).

**Three-gate trigger (pre-write check).** **All three must pass** to proceed past Step 2, in every mode (default, `--from-learning`, `--from-spike`):

(a) **Hard to reverse.** Undoing needs coordinated edits across many files, retraining habits or data migration. `git revert` plus a small refactor means preference, not decision.

(b) **Surprising without context.** A future contributor would not infer the rule from existing patterns. If the codebase already documents it, it's a convention.

(c) **Real trade-off.** Genuine alternatives existed and the project deliberately passed on them. One option only means a default, not a decision.

If **any** gate fails, do **not** write to `DECISIONS.md`. Surface to the user:

> "This reads like a [preference / convention / default] rather than a hard boundary — gate (X) failed. Run `/rota-learn` to capture it as durable knowledge instead, or leave it inline at the call site."

Substitute the failing gate's letter for `(X)`; suggest `/rota-learn` if a learning is worth keeping, else "leave inline", and stop. **Do not auto-invoke `/rota-learn`**: same manual-gate policy as the no-forbids/no-permits redirect below.

**Default mode.**

Surface a clear candidate from the conversation; if none, ask:

> "What boundary do you want to lock in? State it as one sentence — what the decision says."

Ground the boundary with `references/grilling.md`: pin the rule's terms, then grill forbids and permits as numbered questions with a recommended answer each, answering from code first and testing the edges with a scenario. Stop at an empty frontier.

If after one round the user can't articulate **forbids** *or* **permits**, it's a learning, not a decision: suggest `/rota-learn` and stop. **Do not auto-invoke `/rota-learn`**; the user re-runs it deliberately.

When invoked with `--from-learning <topic>` or `--from-spike <name>`, read [`source-prefill-modes.md`](source-prefill-modes.md), then continue to Step 3.

## Step 3 — Compose the Four Parts

Every decision entry has four parts:

1. **Rule** — one-sentence statement of what the decision says
2. **Why** — one paragraph (incident, constraint, deadline, ask)
3. **Forbids** — concrete patterns, files, approaches ruled out
4. **Permits** — what this still allows (keeps the boundary from over-applying)

**Draft all four from conversation context.** One `AskUserQuestion` only when a part is genuinely ambiguous; otherwise show the draft and let Step 5 handle approval. In source-prefill modes Step 3 is the user's chance to redline.

## Step 4 — Classify by Topic

Reuse existing `## Topic` headings in `.rota/DECISIONS.md`, then `KNOWLEDGE.md` topics (`Architecture`, `Testing`, `Build & Tooling`, …) so one name maps to both files. New topic only if nothing fits; keep topics coarser than learnings.

## Step 5 — Confirmation Gate

Present the assembled entry to the user via `AskUserQuestion`:

- **Header:** `"Decide"`
- **Question:** *"Lock in this decision?"*
- **Options** (single-select):
  1. *"Write it (Recommended)"* — *"Append to `.rota/DECISIONS.md` under `<topic>` and update the decisions index."*
  2. *"Edit first"* — *"Show the draft inline so you can rewrite any of the four parts before writing."*
  3. *"Cancel"* — *"Skip — nothing is written."*

Show the full draft (rule, why, forbids, permits) above the question. Write only on an explicit "Write it"; anything else cancels. **Edit first** takes revisions and re-asks. **Cancel** stops with *"Decision not captured."*

## Step 6 — Merge into DECISIONS.md

Format of `.rota/DECISIONS.md`:

```markdown
# Decisions

Hard boundaries for this project. Each entry is a commitment, not a preference — re-read before proposing changes that touch its area.

## <Topic>

### <Decision title>

<One-sentence rule.>

*Why.* <One paragraph rationale.>

**Forbids.** <Concrete patterns/files/approaches.>

**Permits.** <What this still allows.>

<!-- 2026-05-01 -->
```

**Merge rules:**

- Never rewrite sections you didn't change; use `Edit`, not `Write`.
- Insert new `### Decision title` blocks at the **top** of their topic (newest first).
- Stamp today's absolute date as `<!-- YYYY-MM-DD -->`.
- New topics go alphabetically, except `Architecture` and `Build & Tooling` may be pinned near the top (as in `KNOWLEDGE.md`).

## Step 7 — Update the Decisions Index

```bash
rota block decisions
```

Updates the managed `<!-- rota-decisions-start -->` block in the project instructions file (`AGENTS.md` if present, else `CLAUDE.md`; the verb resolves it, never hardcode). The read-site skills (`/rota-work`, `/rota-debug`, `/rota-plan`, `/rota-refactor`, `/rota-review`, `/rota-vision`) read this block to know when to consult `DECISIONS.md`.

## Step 8 — Confirm

Report in one compact block:

```
Captured 1 decision into .rota/DECISIONS.md:
  Architecture — "Background jobs run in-process, never via external queue"

Updated the decisions index in <AGENTS.md|CLAUDE.md> — /rota-work, /rota-debug, /rota-plan, /rota-refactor, /rota-review, /rota-vision will consult it.
```

If the entry created a new topic, prepend a line: *"New topic: `<topic>`."*

## Key Principles

- **Never auto-invoked.** Regardless of `autonomy.level`; Step 5's confirmation is the only gate. Manual confirmation is the verification: no verifier runs.
- **One sentence rule, one paragraph why.** More: link a plan or knowledge entry.

## References

- [`references/grilling.md`](references/grilling.md) — Frontier-round questioning for forbids/permits.
- [`references/subagent-dispatch.md`](references/subagent-dispatch.md) — the `light` subagent that grilling sends for broad reads.
- [`references/persistence-skills.md`](references/persistence-skills.md) — Shared spine and divergence axes for the persistence duo (`/rota-learn`, `/rota-decide`), including `/rota-learn --term` for Glossary entries.
- [`references/source-prefill.md`](references/source-prefill.md) — Source-prefill / promote-between-artifacts semantics for `/rota-decide`.
- [`source-prefill-modes.md`](source-prefill-modes.md) — Source-prefill seeding rules and mode-to-section table.

Files in this skill

  • SKILL.md7.6 KB
  • source-prefill-modes.md861 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.