Skip to content
Back to skills

Rota Work

ASecurity

Use when backlog items already exist and need implementation ("implement 42", "build these", or "implement [B07]" on the file backend), or with no argument to reconcile active work and pick the next item. A parallel round with standing workers is /rota-orchestrate, not this skill; an item not yet captured goes through /rota-capture first.

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

Security analysis

A100/100

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

Scanned October 7, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Rota Work?

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

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

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-work
description: Use when backlog items already exist and need implementation ("implement 42", "build these", or "implement [B07]" on the file backend), or with no argument to reconcile active work and pick the next item. A parallel round with standing workers is /rota-orchestrate, not this skill; an item not yet captured goes through /rota-capture first.
---

# rota-work

Main-session-driven implementation with per-task verification and commits. Subagents are in-process `Agent` calls that write files; the main session commits.

**Rounds are not this skill** (standing workers, merge gate, relays: `/rota-orchestrate` and the `rota round` verbs). If `work.dispatch` is `"tmux"` or `"herdr"`, this skill still dispatches subagents; say so once and continue, or point the user at `/rota-orchestrate` for a multi-issue round.

## Configuration

Read `.rota/config.json`:

- `models.orchestrator`: main session model: planning and verification (default `opus`)
- `models.worker`: the `standard` tier: implementation subagents (default `sonnet`)
- `work.isolation`: `"branch"` (default) or `"worktree"`
- `work.mergeStrategy`: `"direct"` (default) or `"pr"`

## Flow

Copy this checklist and track your progress:

```
- [ ] Step 1 — Guard
- [ ] Step 2 — Clarify Ambiguous Briefs (only when needed)
- [ ] Step 2.5 — Detect Knowledge-vs-Correction Contradictions
- [ ] Step 3 — Name the Branch
- [ ] Step 4 — Plan Tasks
- [ ] Step 4.5 — Umbrella Pre-Flight
- [ ] Step 5 — Create Branch or Worktree
- [ ] Step 6 — Dispatch Subagents
- [ ] Step 7 — Verify Each Completion
- [ ] Step 7.5 — Commit per Task (main session)
- [ ] Step 8 — Sequential Waves
- [ ] Step 8.5 — Sweep Tool-Generated Siblings
- [ ] Step 9 — Close the Items
- [ ] Step 10 — Merge or PR
- [ ] Step 11 — Update Status and Report
- [ ] Step 12 — After-Work QA
- [ ] Step 13 — After the Cycle
```

## No-Argument Mode (reconcile, suggest, then work)

With no item, ID or brief, read [`no-argument-mode.md`](no-argument-mode.md) and follow it: it reconciles active streams, suggests one item and continues into Step 1.

## Preview Mode (`--preview <target>`)

`--preview <target>` (flag anywhere in the args) prints a read-only approach peek and stops: no writes, no commits, no status. Procedure in [`references/work-preview.md`](references/work-preview.md); context per [`references/context-load-protocol.md`](references/context-load-protocol.md) and [`references/knowledge-consult.md`](references/knowledge-consult.md).

## Step 1 — Guard

```bash
rota git guard clean --context "/rota-work"
```

Exit 0: continue. Exit 3: not a repo, surface and stop. Exit 1 (dirty tree): when every dirty path is a tool-generated sibling, sweep them into a `chore:` commit and continue; any user change stops with the guard's message. Procedure and sibling list: [`sibling-sweep.md`](sibling-sweep.md).

## Step 2 — Clarify Ambiguous Briefs (only when needed)

Only when the brief is too thin to plan concrete tasks (scope hits 2+ incompatible areas, a requirement could yield opposite implementations, captured items imply different orderings), ask one `AskUserQuestion` of 1-3 questions before touching code. Otherwise proceed. Don't ask to confirm understanding, for preferences inferable from `KNOWLEDGE.md` or the codebase, or for style inside an agreed scope.

Each question gets a short `header`, options that map to concrete plans with the likeliest marked `(Recommended)`, and `multiSelect: true` for conflicting items. On ambiguity, default to Recommended and state it in the dispatch brief.

## Step 2.5 — Detect Knowledge-vs-Correction Contradictions

When Step 2 produced a non-Recommended answer that pushes back on a stated assumption, read [`contradictions.md`](contradictions.md). Skip silently otherwise.

## Step 3 — Name the Branch

Pick a descriptive branch name (`rota/quick-switch`). Step 5 creates the branch and registers it once. When items carry `Repos:` (umbrella mode) or the backend is issues, read [`umbrella-and-issue-mode.md`](umbrella-and-issue-mode.md) at each step it names.

## Step 4 — Plan Tasks

**Plan-as-artifact check (first, including resume).** For every item or slice, read [`plan-artifact.md`](plan-artifact.md) and resolve its supported backend key before decomposing. An issue plan needs no milestone. Use the stored tasks, constraints and verify steps when a plan exists; a plan that fails `rota plan check` stops the run before dispatch; the check is skipped on the file backend and for plans with no `Serves:` line (see that file).

**Planning level.** With no stored plan, apply [`references/planning-dial.md`](references/planning-dial.md) and state the level in one line to the user. Level 1 (pointers) decomposes ad hoc as below, unchanged. Level 2 or higher: stop and offer `/rota-brainstorm`, `/rota-spike` or `/rota-plan` first; proceed ad hoc only if the user says so. A round worker (branch `<agent>/<issue>-<slug>`) does not stop: the issue's acceptance criteria are its spec, so it states the level and proceeds, and escalates with `ROTA-BLOCKED` only for an open product question. A stored plan already carries its level; skip this.

1. **Consult knowledge and decisions** with the canonical K+D pattern (`references/knowledge-consult.md`), topics inferred from the planned work. Run `rota glossary read <terms in the item>…` too; call out drift from a canonical term. Carry matches into Step 6 briefs as `**Known gotchas:**` (relevant bullets only) and `**Hard boundaries:**` (full entries: rule, *Why*, **Forbids**, **Permits**). If a planned task would violate a decision, **stop and surface it** before dispatching. Run `rota map stats --cap` (one-line nudge; never blocks).

   > **REQUIRED — Register hits on consumed bullets.** After writing the briefs, apply *Hit-register after consumption* in `references/knowledge-consult.md`: one `rota knowledge hit --topic "<T>" --title "<first-line-of-bullet>"` per bullet that landed in a brief's `**Known gotchas:**`, all in one parallel batch. Bullets pruned before the briefs earn no credit.

2. Identify tasks from the loaded plan, preserving its key and task numbers; only decompose ad hoc when no plan exists. Include files, what changes and acceptance criteria.
3. **Resuming** (a branch with commits past the base): apply the resume rule in [`references/task-ledger.md`](references/task-ledger.md) to those tasks, skip committed task IDs and plan only the unfinished tasks. Do not silently re-decompose or renumber a saved plan.
4. **Absorb file collisions** before grouping: any two tasks whose modified-file sets intersect, and shared-symbol changes that disjoint file sets hide. Rules and the rename check in [`references/work-wave-planning.md`](references/work-wave-planning.md).
5. Group into dependency waves: wave 1 is independent files (parallel); wave 2+ depends on earlier output.

## Step 4.5 — Umbrella Pre-Flight

Skip when `rota repo umbrella` exits 1 (single-repo). When it exits 0, read [`umbrella-and-issue-mode.md`](umbrella-and-issue-mode.md), *Step 4.5*, and carry the resolved repo set into Steps 5 and 10.

## Step 5 — Create Branch or Worktree

Use the Step 3 name; `references/isolation-patterns.md` has the pattern per `work.isolation`. Single-repo, branch isolation:

```bash
git checkout -b <branch>
rota status add <branch> --items <ID>[,<ID>...]
```

The only `rota status add` of the cycle: create the branch or worktree first, then register once (`--worktree <path>` for a worktree). Idempotent on `(branch, repo)`.

When umbrella, read *Step 5* in `umbrella-and-issue-mode.md` (registration, branches). When `backlog.backend` is `"issues"`, read the same section for the claim flow before planning tasks.

The main session stays at the repo root; subagents `cd` into their assigned directory first and use absolute paths.

## Step 6 — Dispatch Subagents

Dispatch one `standard`-tier subagent per independent task, all in one message; don't announce. Subagents write files and never stage or commit (no `.git/index` races). Fill the brief from [`dispatch-brief.md`](dispatch-brief.md). Umbrella: read *Step 6* in `umbrella-and-issue-mode.md`.

## Step 7 — Verify Each Completion

Verify silently. Trust the diff, not the subagent's narrative.

1. `git status --porcelain`, then `git diff` for the files the subagent reported.
2. Read the modified files: do they match the brief?
3. Structural checks: grep for expected patterns, no regressions.
4. **Rename validation.** Re-run `git grep -l "<old-name>" -- <scope>`; files outside the subagent's set get a fix-up dispatch before staging.
5. Claim-weight check on gap-fills, and treat a subagent's dispute of its brief as a FAIL on the plan (see `references/work-wave-planning.md`, *Verifying a completion*).
6. When `test.fast` is set, run `rota test run fast`; a FAIL is a FAIL. Use it as the PASS proof `--check`.

**PASS** → move on. **FAIL** → dispatch a fix agent and re-verify; repeat until PASS, and surface only persistent failures. Commit (Step 7.5) only on PASS.

**Record proof** (facts about what ran, not acceptance). Per task:

- **PASS:** one row per item the task resolves, run through the verb so the row is measured: `rota proof record <ID> -- <verify command or grep>` (exit 0 writes PASS, non-zero writes FAIL and exits 1). Never type a PASS you did not run.
- **Persistent FAIL:** `rota proof record` already wrote the FAIL row.
- **Behavior task** (skip the RED half when `rota config show work.tdd` is `false`; PASS rows stay): run the new test through `rota proof record <ID> -- <test command>` before the change (the FAIL row is the RED; the verb exits 1, expected), then again after for the PASS row. A subagent that reports no RED gets a fix dispatch (a FAIL above). So does one whose RED evidence is a build, compile or setup failure (`undefined:`, `cannot find`, `no such file`, `command not found`, import or syntax error): the test must fail on an assertion, so the fix agent repairs the test until it does.
- **Docs or skill-only task:** no RED, and no command to run. Use `rota proof add` with `no test seam: docs/skill change` in the row's `--check`.
- **Acceptance:** `rota item complete` (Step 9) writes it and exits 4 when an item has no proof. Never pass `--no-proof` on your own; an unproven item stays open and is surfaced.

Issue mode keeps the rows in the item's proof note.

## Step 7.5 — Commit per Task (main session)

One commit per task, sequential, in dispatch order, staging only that task's files:

```bash
git add <task-N-files>
git commit -m "<suggested-message-from-task-N-brief>" -m "Task: <key>/<N>"
```

- Every task commit ends with the `Task: <key>/<N>` trailer ([`references/task-ledger.md`](references/task-ledger.md)); a resumed session skips finished tasks by it.
- Stage exactly the files named in the task's brief. Never `git add -A` or `git add .`.
- Use the brief's suggested message verbatim, unless a FAIL→re-dispatch loop changed what landed.
- **Same-file carve-out.** Two parallel subagents editing different ranges of one file get ONE commit naming both task IDs; granularity lives in the message.
- Worktree isolation: commit against the worktree's index (`git -C <worktree-path>`). Umbrella: *Step 7.5* in `umbrella-and-issue-mode.md`.


## Step 8 — Sequential Waves

Wait for wave 1 to complete, verify and commit (Step 7.5), then dispatch wave 2 with updated context.

## Step 8.5 — Sweep Tool-Generated Siblings

When the toolchain left untracked siblings after the task commits, sweep them per [`sibling-sweep.md`](sibling-sweep.md), *Step 8.5*. Otherwise skip.

## Step 9 — Close the Items

**Issue backend:** skip; the issue closes when its PR merges (`umbrella-and-issue-mode.md`, *Step 9*).

**File backend:** follow [`file-backend-close.md`](file-backend-close.md) per resolved item: it tombstones the item's plan, runs `rota item complete <ID> --commit <commit-hash>` (the only write to the backlog), then commits `.rota/BACKLOG.md` and the removed plan by name.

## Step 10 — Merge or PR

`work.mergeStrategy` picks `rota ship merge` (direct, the default and when unset) or `rota ship pr`. Don't ask. Invocations (umbrella `--repo`, exit-4 verdict, merge-approval handling) are in `rota-ship` Steps 6a/6b. Opening a PR is a manual gate. The issue backend forces the PR path: read *Step 10* in `umbrella-and-issue-mode.md` and `references/issue-mode.md`.

## Step 11 — Update Status and Report

```bash
rota status rm <branch>                  # umbrella: add --repo <repo>
```

Umbrella: see *Step 11* in `umbrella-and-issue-mode.md`. Then one compact summary, no plan recap or verification list: `Done — merged <branch> into main.`, one `- #<n> <title> — <what changed>` line per item, `Commit: <sha>`.

## Step 12 — After-Work QA

When `rota config show qa.afterWork` is `true`, read [`after-work-qa.md`](after-work-qa.md). `false` (default) → skip silently.

## Step 13 — After the Cycle

One line, only when `references/post-cycle-trigger-gate.md` fires: *"Run `/rota-learn` to save what this cycle taught; `/rota-decide`, `/rota-ship --docs` and `/rota-refactor` are there when you want them."* Never auto-invoke any of them. If the cycle touched files in a `.rota/map/<name>.md` entry's `Key files / dirs`, bump its `touched:` and run `rota map index`.

## Gates: Thought → Reality

| Thought | Reality |
|---|---|
| "The subagent said it passed." | Step 7 trusts the diff: `git status`, `git diff` and the read files, never the subagent's narrative. |
| "The check is obvious, skip the proof row." | `rota item complete` exits 4 without one. An unproven item stays open and is surfaced. |
| "The new test passes, that's enough." | A test that never failed may not test the change. A behavior task needs a RED run first, recorded as a FAIL row, then the PASS row. |
| "Pass `--no-proof`, the code is fine." | Never on your own. The row records what ran; the flag records that nothing did. |
| "A subagent disputing its brief is noise." | A dispute is a FAIL on the plan. Fix the plan, then re-dispatch. |
| "Open the PR now, the user wants it shipped." | Opening a PR is a manual gate whatever `autonomy.level` says (Step 10, `/rota-ship` Step 6a). |
| "Run the full smoke after each task." | Per-task checks stay structural. The full suite runs in `/rota-ship` and `/rota-review`. |

## Key Principles

- **No noise.** Report results, not process.
- **The main session owns `.rota/` state** (`status.json`, backlog via `rota item` verbs).
- **Never work directly on main.**

## References

- [`references/knowledge-consult.md`](references/knowledge-consult.md): canonical K+D query pattern and hit-register rule.
- [`references/context-load-protocol.md`](references/context-load-protocol.md): shared parallel context load (Preview Mode).
- [`references/work-preview.md`](references/work-preview.md): `--preview` procedure.
- [`references/task-ledger.md`](references/task-ledger.md): `Task:` trailer and resume rule.
- [`references/work-wave-planning.md`](references/work-wave-planning.md): file collisions, brief-writing rules, verifying a completion.
- [`references/isolation-patterns.md`](references/isolation-patterns.md): branch, worktree and umbrella layouts.
- [`references/issue-mode.md`](references/issue-mode.md): issue backend: claim, proof note, PR path.
- [`references/umbrella-mode.md`](references/umbrella-mode.md): umbrella registry and `Repos:` semantics.
- [`references/post-cycle-trigger-gate.md`](references/post-cycle-trigger-gate.md): when the Step 13 learn nudge fires.
- [`references/worker-contract.md`](references/worker-contract.md): round-worker rules and review-feedback handling.
- [`plan-artifact.md`](plan-artifact.md): Step 4 backend keys, saved tasks and resume identity for item and slice plans.
- [`no-argument-mode.md`](no-argument-mode.md): reconcile, suggest, then work.
- [`sibling-sweep.md`](sibling-sweep.md): Step 1 / 8.5 tool-generated sibling sweep.
- [`contradictions.md`](contradictions.md): Step 2.5 contradiction logging.
- [`umbrella-and-issue-mode.md`](umbrella-and-issue-mode.md): umbrella and issue-backend branches of Steps 3–11.
- [`dispatch-brief.md`](dispatch-brief.md): Step 6 brief template.
- [`file-backend-close.md`](file-backend-close.md): Step 9 on the file backend.
- [`after-work-qa.md`](after-work-qa.md): Step 12.

Files in this skill

  • SKILL.md14.8 KB
  • after-work-qa.md631 B
  • contradictions.md511 B
  • dispatch-brief.md2.4 KB
  • file-backend-close.md887 B
  • no-argument-mode.md3.3 KB
  • plan-artifact.md1.7 KB
  • sibling-sweep.md1.3 KB
  • umbrella-and-issue-mode.md4.1 KB

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.