/rite-quick: express lane for small changes
The full DevRites lifecycle is right for real features; it is ceremony for a typo, a
copy tweak, a one-function fix, or a small config change. /rite-quick keeps the
discipline that matters (idiom, TDD, evidence, escape-to-full-lifecycle) and drops the
artifacts that don't, in a single pass. Senior-engineer "right step, right time" made
executable, not advisory. This lane uses the Quick depth profile from
devrites-lib/reference/orchestration-profiles.md.
The significance gate (the whole safety story)
Run this first. If ANY of these holds, STOP and route to /rite-spec. Do NOT use the
express lane:
- Touches auth / authz, a data migration, a public API contract, or any
destructive / data-loss path in the irreversible-risk list. See
../devrites-lib/reference/standards/afk-hitl.md.
- Spans more than one vertical slice, or more than a couple of files of real logic.
- Ambiguous scope: you'd have to guess what "done" means, or the ask hides a design
decision (data model, new dependency, second design system).
- Security-sensitive input handling, or a measurable performance-critical path.
- Would break a declared project principle (
.devrites/principles.md) with no recorded,
human-approved exception: the express lane never relaxes a project gate; a needed exception is
a deliberate human decision, so route it to /rite-spec.
If none hold, the change is small + reversible + unambiguous → proceed. When in doubt,
escalate: the cost of the full lifecycle on a small change is minutes; the cost of the
express lane on a risky one is the failure mode the lifecycle exists to prevent.
Rules consulted (read on demand from .claude/skills/devrites-lib/reference/standards/)
Load this lane's conditional standards when needed:
coding-style.md: naming, guard clauses, reuse-first.
testing.md: TDD, completeness (every touched behavior/element asserted) +
assertion strength (no tautological tests; see it fail first), scaled to the change.
error-handling.md / security.md: only if the change touches input/errors.
principles.md: when .devrites/principles.md exists; a change that breaks an invariant is a gate, not a quick fix.
definition-of-done.md: standing Done bar: acceptance mapped, fresh proof, no open hard gates, scoped edits, rollback/docs where needed.
Workflow
- Orient. Read
core.md. If a .devrites/ workspace is active, read its
state.md directly; /rite-quick does not require
a workspace and does not create the full tree.
- Significance gate (above). Fail → STOP, tell the user to run
/rite-spec <feature>.
- One-line contract. Restate in 1-3 lines: the change, its acceptance (how you'll
know it works), and the scope boundary (what you will NOT touch). This is the entire
"spec + plan" for a quick change: keep it in the chat; optionally drop a
brief.md +
evidence.md under an unused .devrites/work/<slug>/ (no state.md; not a workspace
cursor) if the user wants a record. This is the
/rite-frame FRAME move: if the acceptance won't reduce to a check that could be false,
the ask is ambiguous → escalate per the significance gate. Its AUDIT pass is the diff
self-review in step 5.
- Build with TDD. Failing test first when behavior changes (see it fail for the right
reason) → smallest complete change in the project's idiom (reuse before you write,
anti-AI-slop) → cover every touched behavior / interactive element with a real
assertion. UI → check the states + a browser glance.
- Prove (scoped). Run the targeted tests + typecheck / lint for what changed (not
the whole suite) → green. Record the command + output. A tautological test that can't
fail is not proof.
- Review-lite + ship. Self-review the diff for correctness, scope, and idiom. If
.devrites/principles.md exists, confirm that no declared invariant is broken. This is
/rite-frame's AUDIT pass: one pass, no subagent fan-out. Show the diff, then on the user's confirm commit it
(Conventional Commits, atomic), or hand to /rite-ship only when the change belongs to the active
feature's candidate; otherwise commit standalone. Never push
without the user asking.
Escalation (mid-flight): the Spec Drift Guard still applies
If the "small" change turns out to be not small: a second slice appears, a real design
decision surfaces, scope grows past the boundary, or you hit an irreversible-risk item:
STOP, say so, and route to /rite-spec / /rite-define. Don't quietly grow a quick
fix into an unreviewed feature; that's the exact drift the lifecycle guards against.
If the quick boundary does not hold or an escalation remains, use Stopped / blocked
and route to the full lifecycle; do not render Done.
DO NOT use this lane to dodge the gate: the express lane is for changes that are
genuinely small, not for shipping risky work faster.
1---2name: rite-quick3description: Rite Quick4---56# /rite-quick: express lane for small changes78The full DevRites lifecycle is right for real features; it is **ceremony** for a typo, a9copy tweak, a one-function fix, or a small config change. `/rite-quick` keeps the10discipline that matters (idiom, TDD, evidence, escape-to-full-lifecycle) and drops the11artifacts that don't, in a **single pass**. Senior-engineer "right step, right time" made12executable, not advisory. This lane uses the **Quick** depth profile from13[`devrites-lib/reference/orchestration-profiles.md`](../devrites-lib/reference/orchestration-profiles.md).1415## The significance gate (the whole safety story)1617**Run this first. If ANY of these holds, STOP and route to `/rite-spec`. Do NOT use the18express lane:**19- Touches **auth / authz**, a **data migration**, a **public API contract**, or any20 **destructive / data-loss** path in the irreversible-risk list. See `../devrites-lib/reference/standards/afk-hitl.md`.21- Spans **more than one vertical slice**, or more than a couple of files of real logic.22- **Ambiguous scope:** you'd have to guess what "done" means, or the ask hides a design23 decision (data model, new dependency, second design system).24- Security-sensitive input handling, or a measurable performance-critical path.25- Would **break a declared project principle** (`.devrites/principles.md`) with no recorded,26 human-approved exception: the express lane never relaxes a project gate; a needed exception is27 a deliberate human decision, so route it to `/rite-spec`.2829If none hold, the change is small + reversible + unambiguous → proceed. **When in doubt,30escalate**: the cost of the full lifecycle on a small change is minutes; the cost of the31express lane on a risky one is the failure mode the lifecycle exists to prevent.3233## Rules consulted (read on demand from `.claude/skills/devrites-lib/reference/standards/`)34Load this lane's conditional standards when needed:35- `coding-style.md`: naming, guard clauses, reuse-first.36- `testing.md`: TDD, **completeness** (every touched behavior/element asserted) +37 **assertion strength** (no tautological tests; see it fail first), scaled to the change.38- `error-handling.md` / `security.md`: only if the change touches input/errors.39- `principles.md`: when `.devrites/principles.md` exists; a change that breaks an invariant is a gate, not a quick fix.40- `definition-of-done.md`: standing Done bar: acceptance mapped, fresh proof, no open hard gates, scoped edits, rollback/docs where needed.414243## Workflow440. **Orient.** Read `core.md`. If a `.devrites/` workspace is active, read its45 `state.md` directly; `/rite-quick` does **not** require46 a workspace and does **not** create the full tree.471. **Significance gate** (above). Fail → STOP, tell the user to run `/rite-spec <feature>`.482. **One-line contract.** Restate in 1-3 lines: the change, its **acceptance** (how you'll49 know it works), and the **scope boundary** (what you will NOT touch). This is the entire50 "spec + plan" for a quick change: keep it in the chat; optionally drop a `brief.md` +51 `evidence.md` under an unused `.devrites/work/<slug>/` (no `state.md`; not a workspace52 cursor) if the user wants a record. This is the53 `/rite-frame` FRAME move: if the acceptance won't reduce to a check that could be *false*,54 the ask is ambiguous → escalate per the significance gate. Its AUDIT pass is the diff55 self-review in step 5.563. **Build with TDD.** Failing test first when behavior changes (see it fail for the right57 reason) → smallest complete change in the **project's idiom** (reuse before you write,58 anti-AI-slop) → cover every touched behavior / interactive element with a **real**59 assertion. UI → check the states + a browser glance.604. **Prove (scoped).** Run the **targeted** tests + typecheck / lint for what changed (not61 the whole suite) → green. Record the command + output. A tautological test that can't62 fail is not proof.635. **Review-lite + ship.** Self-review the diff for correctness, scope, and idiom. If64 `.devrites/principles.md` exists, confirm that no declared invariant is broken. This is65 `/rite-frame`'s AUDIT pass: one pass, no subagent fan-out. Show the diff, then on the user's confirm commit it66 (Conventional Commits, atomic), or hand to `/rite-ship` only when the change belongs to the active67 feature's candidate; otherwise commit standalone. **Never push68 without the user asking.**6970## Escalation (mid-flight): the Spec Drift Guard still applies71If the "small" change turns out to be not small: a second slice appears, a real design72decision surfaces, scope grows past the boundary, or you hit an irreversible-risk item:73**STOP, say so, and route to `/rite-spec` / `/rite-define`**. Don't quietly grow a quick74fix into an unreviewed feature; that's the exact drift the lifecycle guards against.7576If the quick boundary does not hold or an escalation remains, use `Stopped / blocked`77and route to the full lifecycle; do not render `Done`.7879**DO NOT** use this lane to dodge the gate: the express lane is for changes that are80genuinely small, not for shipping risky work faster.