devrites 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +30 -17
- package/docs/architecture.md +30 -24
- package/docs/command-map.md +15 -6
- package/docs/flow.md +19 -5
- package/docs/orchestration.md +17 -7
- package/docs/skills.md +32 -8
- package/pack/.claude/agents/devrites-code-reviewer.md +6 -1
- package/pack/.claude/agents/devrites-devex-reviewer.md +94 -0
- package/pack/.claude/agents/devrites-forge-judge.md +92 -0
- package/pack/.claude/agents/devrites-frontend-reviewer.md +8 -0
- package/pack/.claude/agents/devrites-retrospector.md +91 -0
- package/pack/.claude/agents/devrites-slice-wright.md +18 -5
- package/pack/.claude/rules/README.md +5 -2
- package/pack/.claude/rules/agents.md +30 -2
- package/pack/.claude/rules/anti-patterns.md +11 -0
- package/pack/.claude/rules/code-review.md +16 -6
- package/pack/.claude/rules/core.md +13 -4
- package/pack/.claude/rules/developer-experience.md +119 -0
- package/pack/.claude/rules/principles.md +158 -0
- package/pack/.claude/rules/spec-grammar.md +106 -0
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +42 -3
- package/pack/.claude/skills/devrites-lib/SKILL.md +9 -2
- package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +8 -0
- package/pack/.claude/skills/devrites-lib/scripts/spec-validate.sh +130 -0
- package/pack/.claude/skills/rite-adopt/SKILL.md +13 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +3 -1
- package/pack/.claude/skills/rite-build/SKILL.md +36 -1
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +12 -0
- package/pack/.claude/skills/rite-build/reference/forge.md +171 -0
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +2 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +22 -2
- package/pack/.claude/skills/rite-define/SKILL.md +14 -1
- package/pack/.claude/skills/rite-frame/SKILL.md +7 -2
- package/pack/.claude/skills/rite-learn/SKILL.md +17 -4
- package/pack/.claude/skills/rite-polish/SKILL.md +3 -1
- package/pack/.claude/skills/rite-prove/SKILL.md +30 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +9 -4
- package/pack/.claude/skills/rite-review/SKILL.md +5 -2
- package/pack/.claude/skills/rite-seal/SKILL.md +22 -4
- package/pack/.claude/skills/rite-ship/SKILL.md +21 -0
- package/pack/.claude/skills/rite-spec/SKILL.md +29 -5
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +11 -1
- package/pack/.claude/skills/rite-status/SKILL.md +3 -1
- package/pack/.claude/skills/rite-vet/SKILL.md +46 -14
- package/package.json +1 -1
- package/scripts/check-cross-refs.py +4 -0
- package/scripts/run-behavioral-evals.sh +170 -0
- package/scripts/run-evals.sh +3 -0
- package/scripts/validate.sh +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [2.3.0](https://github.com/ViktorsBaikers/DevRites/compare/v2.2.0...v2.3.0) (2026-06-23)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
* **agents:** auto-firing devex-reviewer + retrospector ([425c582](https://github.com/ViktorsBaikers/DevRites/commit/425c582802b5efb18a463a31174420dfb96838fe))
|
|
10
|
+
* **rules:** add project invariants as a trusted gating layer ([e569d7e](https://github.com/ViktorsBaikers/DevRites/commit/e569d7e065d1baf4e974c274d921431cc3c6e26e))
|
|
11
|
+
* **skills:** add spec-grammar validator + scenario hooks ([765430c](https://github.com/ViktorsBaikers/DevRites/commit/765430c3f21bd9f139d9de9ecc4d73e292970505))
|
|
12
|
+
* **skills:** competitive forge builds + structured visual verdict ([c509519](https://github.com/ViktorsBaikers/DevRites/commit/c50951957525a5cbf673ee52d3fa573838092959))
|
|
13
|
+
* **tests:** behavioral evals for gating-skill discipline ([9cfde94](https://github.com/ViktorsBaikers/DevRites/commit/9cfde942cd6fa12d2f08d0cb4f8e3c11354b9355))
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
* **scripts:** allow forge-report.md as a runtime workspace artifact ([e01bd50](https://github.com/ViktorsBaikers/DevRites/commit/e01bd50dcc2d5767d8abd3a1f527ec762dc83583))
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
* **skills:** sync skill/agent/rule counts + catalogue with current pack ([57ea677](https://github.com/ViktorsBaikers/DevRites/commit/57ea6771b2040382b80848cd5c866952b46355c9))
|
|
22
|
+
|
|
5
23
|
## [2.2.0](https://github.com/ViktorsBaikers/DevRites/compare/v2.1.0...v2.2.0) (2026-06-23)
|
|
6
24
|
|
|
7
25
|
### Added
|
package/README.md
CHANGED
|
@@ -12,17 +12,24 @@ directory: `spec.md` → (`strategy.md`) → `plan.md` + `tasks.md` → (`eng-re
|
|
|
12
12
|
files — no chat-context summary required. **Spec Drift Guard** catches the wrong turn
|
|
13
13
|
before it costs you a day. **AFK mode** runs unattended without silently accepting
|
|
14
14
|
destructive migrations, auth changes, or red tests. **`type-GO`** demands a literal
|
|
15
|
-
typed confirmation before any irreversible commit / push / tag.
|
|
15
|
+
typed confirmation before any irreversible commit / push / tag. **Project principles**
|
|
16
|
+
(`.devrites/principles.md`) — the invariants you declare once ("money in integer cents",
|
|
17
|
+
"no PII in logs", "never break the v1 API") — then gate every plan, build, and seal, with a
|
|
18
|
+
recorded-exception escape hatch instead of silent work-arounds.
|
|
16
19
|
|
|
17
20
|
```
|
|
18
21
|
.devrites/
|
|
19
22
|
ACTIVE # which feature is active
|
|
20
23
|
AFK # presence = AFK mode; YAML body sets max_slices / notify / allow_gates
|
|
24
|
+
principles.md # project invariants — authored, prescriptive, GATING (the 4th knowledge layer)
|
|
25
|
+
conventions.md # learned project idioms — descriptive, an untrusted prior
|
|
26
|
+
learnings.md # dismissed-finding classes + dead ends — suppresses recurring false positives
|
|
21
27
|
work/<slug>/
|
|
22
28
|
brief.md spec.md references.md references/ # spec
|
|
23
29
|
strategy.md # temper (optional)
|
|
24
30
|
plan.md tasks.md # define
|
|
25
31
|
eng-review.md test-plan.md # vet
|
|
32
|
+
forge-report.md # build (only a Forge: yes slice — competed candidates → winner)
|
|
26
33
|
state.md questions.md decisions.md assumptions.md drift.md
|
|
27
34
|
touched-files.md evidence.md browser-evidence.md design-brief.md
|
|
28
35
|
polish-report.md review.md seal.md ship.md handoff.md
|
|
@@ -94,7 +101,7 @@ Full diagram set (lifecycle, polish orchestrator, review fan-out, debug loop,
|
|
|
94
101
|
rules carrier, workspace state, namespace map) →
|
|
95
102
|
[`docs/flow.md`](docs/flow.md).
|
|
96
103
|
|
|
97
|
-
**Status:** [`v2.
|
|
104
|
+
**Status:** [`v2.3.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v2.3.0) — see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
98
105
|
|
|
99
106
|
## Contents
|
|
100
107
|
|
|
@@ -102,7 +109,7 @@ rules carrier, workspace state, namespace map) →
|
|
|
102
109
|
- [Modes — HITL & AFK](#modes--hitl--afk)
|
|
103
110
|
- [Install](#install) — [npx / bash](#installing) · [upgrade](#upgrading-an-existing-install)
|
|
104
111
|
- [Recommended setup](#recommended-setup-optional-but-devrites-is-much-sharper-with-it) — codegraph · graphify · browser-harness
|
|
105
|
-
- [Skills](#skills) —
|
|
112
|
+
- [Skills](#skills) — 36 total · full catalogue in [`docs/skills.md`](docs/skills.md)
|
|
106
113
|
- [Typical workflow](#typical-workflow) · [Worked examples](docs/usage.md)
|
|
107
114
|
- [Engineering rules](#engineering-rules) · [Browser proof ladder](#browser-proof-ladder) · [Frontend & fullstack](#frontend--fullstack)
|
|
108
115
|
- [Safety & scope](#safety--scope) · [Security model](#security-model)
|
|
@@ -275,7 +282,7 @@ investigation, cheaper context, and real browser proof. None are required.
|
|
|
275
282
|
|
|
276
283
|
## Skills
|
|
277
284
|
|
|
278
|
-
The pack ships **
|
|
285
|
+
The pack ships **36 skills total** — 24 user-invocable `rite-*` workflow + utility skills, 11 model-invoked `devrites-*` specialists, plus the internal `devrites-lib` library (scripts the workflow skills run, not a command). **Prefix convention:** `rite-*` is the user-facing slash-command surface; `devrites-*` is internal (model-invoked, hidden from the menu). Each skill is a structured workflow with its own operating rules, anti-rationalization tables, and red flags. Engineering rules live at `.claude/rules/`; each `rite-*` skill Reads `.claude/rules/core.md` as its first step, and the other 22 rule files load on demand.
|
|
279
286
|
|
|
280
287
|
**Two invocation forms.** Every user-invocable skill responds to **both** `/rite <verb>` (menu form — type `/rite` to discover) and `/rite-<verb>` (direct shortcut — muscle memory). The forms are equivalent: `/rite build slice-2` ≡ `/rite-build slice-2`. Use whichever reads more naturally.
|
|
281
288
|
|
|
@@ -297,12 +304,12 @@ Pinned aliases live at `.claude/skills/<alias>/SKILL.md`. The script refuses `ri
|
|
|
297
304
|
| Group | Skills |
|
|
298
305
|
|---|---|
|
|
299
306
|
| Lifecycle (8) | `rite-spec` · `rite-define` · `rite-build` · `rite-prove` · `rite-polish` · `rite-review` · `rite-seal` · `rite-ship` |
|
|
300
|
-
| On-ramp (optional) | `rite-adopt` — onboard an existing codebase: reverse-derive `spec.md
|
|
307
|
+
| On-ramp (optional) | `rite-adopt` — onboard an existing codebase: reverse-derive `spec.md`, seed the conventions ledger + propose project principles, then hand off to the lifecycle |
|
|
301
308
|
| Strategic (optional) | `rite-temper` — strategic spec review between spec and define; mandatory in `rite-autocomplete` |
|
|
302
309
|
| Engineering (every feature) | `rite-vet` — engineering plan review between define and build; depth scales to stakes, never skipped; always in `rite-autocomplete` |
|
|
303
310
|
| Resume / replan | `rite-resolve` · `rite-plan` |
|
|
304
311
|
| Utility | `rite-status` · `rite-doctor` · `rite-zoom-out` · `rite-prototype` · `rite-handoff` · `rite-pressure-test` · `rite-autocomplete` |
|
|
305
|
-
| Learning (optional) | `rite-learn` — cross-feature learning loop: mine shipped features for recurring mistakes + dismissed-finding classes, propose project-local lessons into `.devrites/learnings.md` |
|
|
312
|
+
| Learning (optional) | `rite-learn` — cross-feature learning loop: mine shipped features for recurring mistakes + dismissed-finding classes, propose project-local lessons into `.devrites/learnings.md`, and promote recurring invariants to `.devrites/principles.md` |
|
|
306
313
|
| Menu | `rite` |
|
|
307
314
|
|
|
308
315
|
**Internal `devrites-*` specialists (9)** — model-invoked, hidden from menu:
|
|
@@ -312,13 +319,19 @@ Pinned aliases live at `.claude/skills/<alias>/SKILL.md`. The script refuses `ri
|
|
|
312
319
|
`devrites-debug-recovery` · `devrites-api-interface` ·
|
|
313
320
|
`devrites-audit` (axes: `security` · `perf` · `simplify`).
|
|
314
321
|
|
|
315
|
-
**Review agents (
|
|
322
|
+
**Review agents (12)** — fresh-context reviewers under `.claude/agents/`:
|
|
316
323
|
|
|
317
324
|
`devrites-strategy-reviewer` (pre-plan, via `/rite-temper`) ·
|
|
318
325
|
`devrites-plan-reviewer` (pre-build, via `/rite-vet`) · `devrites-spec-reviewer` ·
|
|
319
326
|
`devrites-code-reviewer` · `devrites-test-analyst` · `devrites-frontend-reviewer` ·
|
|
320
327
|
`devrites-security-auditor` · `devrites-performance-reviewer` ·
|
|
321
|
-
`devrites-
|
|
328
|
+
`devrites-devex-reviewer` (developer-facing surface, predict at `/rite-vet` + measure-the-boomerang at `/rite-seal`) ·
|
|
329
|
+
`devrites-doubt-reviewer` · `devrites-simplifier-reviewer` ·
|
|
330
|
+
`devrites-forge-judge` (build-time, via `/rite-build` — scores competing candidate builds on a `Forge: yes` slice, picks the winner).
|
|
331
|
+
|
|
332
|
+
**Cross-feature analyst (1)** — fresh-context, read-only, scope is the archive not a diff:
|
|
333
|
+
|
|
334
|
+
`devrites-retrospector` — dispatched at `/rite-ship` close (cadence-gated) to mine shipped features for recurring patterns + trends and **draft** graduation candidates for `/rite-learn`; proposes, never imposes.
|
|
322
335
|
|
|
323
336
|
**Executor agent (1)** — fresh-context, **write-capable** writer under `.claude/agents/`:
|
|
324
337
|
|
|
@@ -424,15 +437,15 @@ browser-harness, backend-only, polish modes, zoom-out, mid-flight handoff):
|
|
|
424
437
|
## Engineering rules
|
|
425
438
|
|
|
426
439
|
DevRites ships its own stack-agnostic engineering rules and installs them to
|
|
427
|
-
`.claude/rules/` —
|
|
428
|
-
(no language assumptions); a project's own conventions always win where they exist
|
|
429
|
-
|
|
430
|
-
`.claude/rules/core.md` as its first
|
|
431
|
-
demand via `Read` from the skill body that needs them.
|
|
440
|
+
`.claude/rules/` — 23 rule files plus a README index. They're **common** by design
|
|
441
|
+
(no language assumptions); a project's own conventions always win where they exist, and a
|
|
442
|
+
project's own **principles** (`.devrites/principles.md`) outrank both. Skip them with
|
|
443
|
+
`--no-rules`. Loading model: each `rite-*` skill Reads `.claude/rules/core.md` as its first
|
|
444
|
+
step; the other 22 rule files load on demand via `Read` from the skill body that needs them.
|
|
432
445
|
|
|
433
446
|
| Always-on | On-demand |
|
|
434
447
|
|---|---|
|
|
435
|
-
| `core.md` | `coding-style.md` · `error-handling.md` · `testing.md` · `code-review.md` · `security.md` · `performance.md` · `patterns.md` · `git-workflow.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md` · `anti-patterns.md` |
|
|
448
|
+
| `core.md` | `coding-style.md` · `prose-style.md` · `error-handling.md` · `testing.md` · `spec-grammar.md` · `code-review.md` · `principles.md` · `security.md` · `performance.md` · `observability.md` · `developer-experience.md` · `patterns.md` · `git-workflow.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `deprecation.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md` · `anti-patterns.md` · `tooling.md` |
|
|
436
449
|
|
|
437
450
|
Full index with phase mapping: [`pack/.claude/rules/README.md`](pack/.claude/rules/README.md);
|
|
438
451
|
diagram: [`docs/flow.md` § Engineering-rules loading](docs/flow.md#6-engineering-rules-carrier).
|
|
@@ -486,9 +499,9 @@ devrites/
|
|
|
486
499
|
# grade-feature · run-outcome-evals · devrites-detect · check-no-global-writes
|
|
487
500
|
# sync-version · build-release-tarball
|
|
488
501
|
mcp/ # devrites-mcp.mjs — MCP stdio server over the devrites CLI
|
|
489
|
-
pack/.claude/ # skills/
|
|
490
|
-
# agents/
|
|
491
|
-
# rules/
|
|
502
|
+
pack/.claude/ # skills/ 36 skills — 24 public + 12 internal ─┐
|
|
503
|
+
# agents/ 13 read-only + 1 writer (slice-wright) ├─ the pack
|
|
504
|
+
# rules/ 23 rule files + README index ┘
|
|
492
505
|
evals/ # trigger evals (20/skill) + golden/ outcome-eval fixtures
|
|
493
506
|
docs/ # architecture · skills · command-map · usage · flow · release · cli-mcp
|
|
494
507
|
internal/ # research, development notes (gitignored)
|
package/docs/architecture.md
CHANGED
|
@@ -46,22 +46,27 @@ ship.
|
|
|
46
46
|
4. **Supporting references** — `reference/*.md` inside each skill. Long checklists,
|
|
47
47
|
templates, and anti-rationalization tables loaded on demand (progressive
|
|
48
48
|
disclosure) so `SKILL.md` bodies stay small.
|
|
49
|
-
5. **Agents** — `.claude/agents/devrites-*` fresh-context subagents
|
|
50
|
-
|
|
51
|
-
(`devrites-spec-reviewer`, `-code-reviewer`, `-test-analyst`,
|
|
52
|
-
`-security-auditor`, `-performance-reviewer`, `-
|
|
53
|
-
|
|
54
|
-
**
|
|
55
|
-
|
|
49
|
+
5. **Agents** — `.claude/agents/devrites-*` fresh-context subagents: **13 read-only + 1
|
|
50
|
+
write-capable**. The read-only set is twelve reviewers — the post-build fan-out used by
|
|
51
|
+
`/rite-seal` and the doubt loop (`devrites-spec-reviewer`, `-code-reviewer`, `-test-analyst`,
|
|
52
|
+
`-frontend-reviewer`, `-security-auditor`, `-performance-reviewer`, `-devex-reviewer`,
|
|
53
|
+
`-doubt-reviewer`, `-simplifier-reviewer`), the **pre-plan** `devrites-strategy-reviewer`
|
|
54
|
+
(`/rite-temper`), the **pre-build** `devrites-plan-reviewer` (`/rite-vet`), and the
|
|
55
|
+
**build-time** `devrites-forge-judge` (scores competing candidate builds on a `Forge: yes`
|
|
56
|
+
slice) — plus the cross-feature `devrites-retrospector` (mines the shipped archive at
|
|
57
|
+
`/rite-ship` close). The one **write-capable** executor, `devrites-slice-wright`, is
|
|
58
|
+
dispatched by `/rite-build` to write one slice in a clean context (the write-side mirror of
|
|
59
|
+
the reviewers).
|
|
56
60
|
6. **Engineering rules** — DevRites' own stack-agnostic rules installed to
|
|
57
61
|
`.claude/rules/`. Each `rite-*` skill Reads `core.md` as its first step
|
|
58
|
-
(step 0);
|
|
59
|
-
- **Craft:** `coding-style.md` · `patterns.md` · `error-handling.md` ·
|
|
60
|
-
`testing.md` · `documentation.md`.
|
|
61
|
-
- **Quality / safety:** `code-review.md` · `security.md` ·
|
|
62
|
-
`performance.md` · `
|
|
62
|
+
(step 0); 22 on-demand files load by the phase that needs them:
|
|
63
|
+
- **Craft:** `coding-style.md` · `prose-style.md` · `patterns.md` · `error-handling.md` ·
|
|
64
|
+
`testing.md` · `spec-grammar.md` · `documentation.md`.
|
|
65
|
+
- **Quality / safety:** `code-review.md` · `principles.md` · `security.md` ·
|
|
66
|
+
`performance.md` · `observability.md` · `developer-experience.md` · `deprecation.md` ·
|
|
67
|
+
`anti-patterns.md`.
|
|
63
68
|
- **Workflow / ops:** `development-workflow.md` · `git-workflow.md` ·
|
|
64
|
-
`hooks.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md`.
|
|
69
|
+
`hooks.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md` · `tooling.md`.
|
|
65
70
|
- **Index:** `README.md` (phase mapping, loading model).
|
|
66
71
|
|
|
67
72
|
State lives in `.devrites/` as human-readable Markdown so it survives context
|
|
@@ -75,7 +80,7 @@ per-skill catalog with triggers + I/O.
|
|
|
75
80
|
### Why a shared orientation preamble (`devrites-lib`)
|
|
76
81
|
Every workspace-operating skill's first move is the same: orient on the active feature —
|
|
77
82
|
slug, phase, artifacts present, run mode, open-question tally — before acting. Re-deriving
|
|
78
|
-
that from raw Markdown in each skill was duplicated (step-0 prose across ~
|
|
83
|
+
that from raw Markdown in each skill was duplicated (step-0 prose across ~20 skills),
|
|
79
84
|
token-heavy (counting open gates meant re-reading the append-only `questions.md`, which
|
|
80
85
|
only grows), and error-prone (a missed AFK sentinel or a miscounted gate changes behavior).
|
|
81
86
|
So orientation is computed once by one read-only script, `devrites-lib/scripts/preamble.sh`,
|
|
@@ -211,20 +216,21 @@ contract.
|
|
|
211
216
|
|
|
212
217
|
## Design choices at a glance
|
|
213
218
|
|
|
214
|
-
- **Surface**:
|
|
219
|
+
- **Surface**: 24 public `rite-*` skills (36 total) — the thin `/rite` menu
|
|
215
220
|
(carries the routing) + 8 lifecycle phases (`rite-spec`, `rite-define`,
|
|
216
221
|
`rite-build`, `rite-prove`, `rite-polish`, `rite-review`, `rite-seal`,
|
|
217
222
|
`rite-ship` — seal **decides**, ship **executes + closes**) + the
|
|
218
223
|
`rite-temper` (strategic, optional) and `rite-vet` (engineering, every plan)
|
|
219
|
-
reviews +
|
|
220
|
-
`rite-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
`rite-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
224
|
+
reviews + the `rite-quick` express lane and `rite-frame` pre-flight/self-audit
|
|
225
|
+
lens + `rite-adopt` (onboard an existing codebase) + `rite-learn` (cross-feature
|
|
226
|
+
lessons) + `rite-status` + `rite-doctor` (install health) +
|
|
227
|
+
the `rite-plan` replan verb + the `rite-resolve` resume verb + 4 ideation /
|
|
228
|
+
handoff utilities (`rite-zoom-out`, `rite-prototype`, `rite-handoff`,
|
|
229
|
+
`rite-pressure-test`) + `rite-autocomplete` (the unattended full-lifecycle
|
|
230
|
+
orchestrator) — plus 11 internal model-invoked `devrites-*` specialists and the
|
|
231
|
+
`devrites-lib` library, not one mega-command. The `devrites-` prefix is a
|
|
232
|
+
namespace (collision avoidance), not a public/internal marker —
|
|
233
|
+
`user-invocable:` is. All `devrites-*` skills are model-invoked.
|
|
228
234
|
- **Selection**: the `/rite` menu skill carries the routing table; every
|
|
229
235
|
workflow skill enforces a "right skill, right time" rule in its body.
|
|
230
236
|
- **State**: durable `.devrites/` Markdown that survives compaction and new sessions.
|
package/docs/command-map.md
CHANGED
|
@@ -12,8 +12,9 @@ what it writes, and how the pieces interact.
|
|
|
12
12
|
`devrites-` is a **namespace prefix** chosen for collision avoidance against
|
|
13
13
|
bundled Claude Code skill names (`prototype`, `handoff`, `triage`, `diagnose`,
|
|
14
14
|
…). It does **not** signal "internal" — visibility is governed by the
|
|
15
|
-
`user-invocable:` flag in each `SKILL.md`. All
|
|
16
|
-
`rite-*` prefix (`rite-
|
|
15
|
+
`user-invocable:` flag in each `SKILL.md`. All public utilities use the
|
|
16
|
+
`rite-*` prefix (`rite-quick`, `rite-frame`, `rite-adopt`, `rite-learn`,
|
|
17
|
+
`rite-doctor`, `rite-zoom-out`, `rite-prototype`, `rite-handoff`,
|
|
17
18
|
`rite-pressure-test`, `rite-autocomplete`); every `devrites-*` skill is
|
|
18
19
|
model-invoked.
|
|
19
20
|
|
|
@@ -35,6 +36,8 @@ model-invoked.
|
|
|
35
36
|
| [`/rite-ship`](../pack/.claude/skills/rite-ship/SKILL.md) | ship | `[slug]` | Final phase. Requires a GO in `seal.md` → renders type-`GO` + runs the irreversible git ladder (commit → push → tag/PR) + closes the task (archive workspace → `.devrites/archive/<slug>/`, clear `ACTIVE`, phase `done`). Triggers: "ship it", "ship this", "push it out", "close the task". | `seal.md` + all artifacts + diff | `ship.md`, `state.md`, archive |
|
|
36
37
|
| [`/rite-autocomplete`](../pack/.claude/skills/rite-autocomplete/SKILL.md) | (orchestrator) | `[idea] [--ship\|--yolo] [--max-slices N]` | Full unattended lifecycle (spec → … → seal → ship), best option at each soft gate, rationale to `decisions.md`. Vague prompt → up-front interview; pauses on hard-risk / blocking / escalating / open-validating / NO-GO / budget-exhausted. Default stops at the final type-`GO`; `--ship` flag (alias `--yolo`) auto-confirms it. Triggers: "autocomplete", "do the whole thing". | idea + workspace | whole workspace (drives every phase) |
|
|
37
38
|
| [`/rite-quick`](../pack/.claude/skills/rite-quick/SKILL.md) | (express) | `<change>` | Express lane for a **small, reversible, unambiguous** change — one-line contract → TDD build → scoped prove → review-lite → ship, no full artifact tree. **Significance gate first**: auth / migration / public-API / destructive / multi-slice / ambiguous → escalates to `/rite-spec`. Triggers: "quick fix", "small change", "tiny tweak", "just do X". | the change + codebase | code + commit (optional `brief.md` / `evidence.md`) |
|
|
39
|
+
| [`/rite-frame`](../pack/.claude/skills/rite-frame/SKILL.md) | lens | `[ask \| diff]` | Pre-flight + self-audit lens for ad-hoc work the lifecycle gates never see — **FRAME** turns an imperative ask into a falsifiable success criterion + verify command before code; **AUDIT** checks a raw diff against the four LLM coding failure modes (silent assumption / overcomplication / out-of-scope edit / unverifiable goal). Top of `/rite-quick` or before a plain "just do X". | the ask / a raw diff | success criterion + verify command (inline) |
|
|
40
|
+
| [`/rite-adopt`](../pack/.claude/skills/rite-adopt/SKILL.md) | onboard | `[path]` | Bring an EXISTING codebase under DevRites — reverse-derive a `spec.md` of current behavior + placement + architecture, seed the conventions ledger from observed idioms, then hand off to the lifecycle. Triggers: "adopt this project", "onboard this codebase", "we already have code". | the codebase | `spec.md`, `.devrites/conventions.md`, `decisions.md`, `state.md` |
|
|
38
41
|
| [`/rite-status`](../pack/.claude/skills/rite-status/SKILL.md) | status | `[slug]` | Active feature: phase, run mode (AFK/HITL), status, next action, evidence, open questions by gate, risks, handoff readiness. Reads via the shared `devrites-lib` preamble (portable). | workspace + `.devrites/AFK` | — |
|
|
39
42
|
| [`/rite-resolve`](../pack/.claude/skills/rite-resolve/SKILL.md) | resume | `<qid> "<answer>"` \| `--drop <qid>` \| `--batch <file>` | Answer / drop / batch-resolve open `questions.md` entries; clears `state.md` `Awaiting human` and sets `Status: running`. Canonical writer for `status: open → answered`. | `questions.md` + `state.md` | `questions.md`, `state.md` |
|
|
40
43
|
| [`/rite-zoom-out`](../pack/.claude/skills/rite-zoom-out/SKILL.md) | utility | — | One-pass structural map of an unfamiliar area (modules, in-callers, out-calls, decisions) in project vocabulary. Prefers codegraph/graphify. | codebase + ADRs/CONTEXT.md | — |
|
|
@@ -42,6 +45,7 @@ model-invoked.
|
|
|
42
45
|
| [`/rite-handoff`](../pack/.claude/skills/rite-handoff/SKILL.md) | utility | `[next-session-focus]` | Compacts the chat into a handoff doc. Syncs chat-only context into workspace canonical files. References existing artifacts by path. | chat + workspace | `handoff.md` + sync into canonical files |
|
|
43
46
|
| [`/rite-learn`](../pack/.claude/skills/rite-learn/SKILL.md) | utility | `[--mine \| "<lesson>"]` | Mine archived features for recurring mistakes / dismissed-finding classes; propose project-local lessons into `.devrites/learnings.md` (loaded by the review skills before a fan-out). | archive + workspace | `.devrites/learnings.md` |
|
|
44
47
|
| [`/rite-pressure-test`](../pack/.claude/skills/rite-pressure-test/SKILL.md) | utility | `[idea]` | Pressure-test a rough idea: 3–5 genuinely different options → converge on one with trade-off + hinge. | spec / surrounding code | `decisions.md` (optional) |
|
|
48
|
+
| [`/rite-doctor`](../pack/.claude/skills/rite-doctor/SKILL.md) | diagnostic | — | Diagnose DevRites install + workspace health — install integrity, stale `.devrites/ACTIVE`, corrupt workspace, orphaned gates, broken hook wiring. Read-only report. Triggers: "rite doctor", "is DevRites healthy", "why isn't the workflow picking up my feature". | install + workspace | — |
|
|
45
49
|
|
|
46
50
|
## Internal skills (`user-invocable: false`, model-invoked)
|
|
47
51
|
|
|
@@ -52,7 +56,9 @@ model-invoked.
|
|
|
52
56
|
| [`devrites-doubt`](../pack/.claude/skills/devrites-doubt/SKILL.md) | non-trivial decision in build/review | CLAIM → EXTRACT → DOUBT → RECONCILE → STOP | adversarial; ask user if uncertain |
|
|
53
57
|
| [`devrites-ux-shape`](../pack/.claude/skills/devrites-ux-shape/SKILL.md) | UI detected in `/rite-spec` | Plan UX/UI before code → `design-brief.md` (direction, states, interaction, visual-direction probe) | the build target; refs: brief-template/visual-direction-probe |
|
|
54
58
|
| [`devrites-frontend-craft`](../pack/.claude/skills/devrites-frontend-craft/SKILL.md) | UI detected in build/polish | Build **to** `design-brief.md`: register, refine-per-slice, states, anti-slop | refs: shape/craft/design-references |
|
|
55
|
-
| [`devrites-
|
|
59
|
+
| [`devrites-prose-craft`](../pack/.claude/skills/devrites-prose-craft/SKILL.md) | a phase writes prose; `/rite-polish` Phase 1 catch | Human-voice writing — strip LLM tells, keep precise lists/terms | refs: banned-phrases, structures, examples |
|
|
60
|
+
| [`devrites-browser-proof`](../pack/.claude/skills/devrites-browser-proof/SKILL.md) | UI in prove/polish | Browser proof ladder + evidence schema + the structured **Visual Verdict** table | harness preferred |
|
|
61
|
+
| [`devrites-refresh-indexes`](../pack/.claude/skills/devrites-refresh-indexes/SKILL.md) | Stop hook (auto) or "reindex" | Keep codebase-memory-mcp / codegraph / graphify current after edits | manual force; no-ops when no index |
|
|
56
62
|
| [`devrites-debug-recovery`](../pack/.claude/skills/devrites-debug-recovery/SKILL.md) | failing tests/build/runtime | 6-phase: loop → reproduce → hypotheses → instrument → fix → cleanup | references split per phase |
|
|
57
63
|
| [`devrites-api-interface`](../pack/.claude/skills/devrites-api-interface/SKILL.md) | cross-boundary slice | Stable API/contract design | FE/BE split |
|
|
58
64
|
| [`devrites-audit simplify`](../pack/.claude/skills/devrites-audit/SKILL.md) | `/rite-polish` Phase 1 | Chesterton's Fence, behavior-preserving simplification | dispatches `devrites-simplifier-reviewer` |
|
|
@@ -62,21 +68,24 @@ model-invoked.
|
|
|
62
68
|
|
|
63
69
|
## Agents (`.claude/agents/devrites-*`, fresh-context subagents)
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
**13 read-only** (12 reviewers + the cross-feature `devrites-retrospector`) plus one **write-capable** executor (`devrites-slice-wright`).
|
|
66
72
|
|
|
67
73
|
| Agent | Spawned by | Purpose |
|
|
68
74
|
|---|---|---|
|
|
69
75
|
| [`devrites-slice-wright`](../pack/.claude/agents/devrites-slice-wright.md) | `/rite-build` (the build core) | **Write-capable** — turn one slice contract into clean, idiomatic, proven code (orient → TDD → verify, anti-slop); returns a structured artifact, writes no bookkeeping |
|
|
70
76
|
| [`devrites-strategy-reviewer`](../pack/.claude/agents/devrites-strategy-reviewer.md) | `/rite-temper` (pre-plan) | Spec-vs-rubric strategic review (ambition / scope / premise / pre-mortem / YAGNI / testability / irreversibility / cross-cutting / convention); read-only; **not** part of the seal fan-out |
|
|
71
77
|
| [`devrites-plan-reviewer`](../pack/.claude/agents/devrites-plan-reviewer.md) | `/rite-vet` (pre-build) | Plan-vs-rubric engineering review (architecture / scope-reuse / plan code-quality / test-coverage design / performance / reversibility / failure-mode coverage), confidence-banded with a quote-the-source verification gate; read-only; **not** part of the seal fan-out |
|
|
78
|
+
| [`devrites-forge-judge`](../pack/.claude/agents/devrites-forge-judge.md) | `/rite-build` on a `Forge: yes` slice | Comparative judge of K=2–3 competing candidate builds (acceptance / test strength / principle fit / simplicity / reuse / anti-slop); picks the single winner to land, names grafts; read-only |
|
|
72
79
|
| [`devrites-spec-reviewer`](../pack/.claude/agents/devrites-spec-reviewer.md) | `/rite-review` Spec axis; `/rite-seal` | Does the diff implement the spec? Missing/partial/wrong criteria; scope creep |
|
|
73
80
|
| [`devrites-code-reviewer`](../pack/.claude/agents/devrites-code-reviewer.md) | `/rite-review` Standards axis; `/rite-seal` | Correctness / readability / architecture / maintainability |
|
|
74
81
|
| [`devrites-test-analyst`](../pack/.claude/agents/devrites-test-analyst.md) | `/rite-seal` | Do the tests actually prove the acceptance criteria? |
|
|
75
|
-
| [`devrites-frontend-reviewer`](../pack/.claude/agents/devrites-frontend-reviewer.md) | `/rite-seal` on UI features | UX, a11y, responsive, design-system, anti-AI-slop |
|
|
82
|
+
| [`devrites-frontend-reviewer`](../pack/.claude/agents/devrites-frontend-reviewer.md) | `/rite-seal` on UI features | UX, a11y, responsive, design-system, anti-AI-slop; reads the **Visual Verdict** |
|
|
76
83
|
| [`devrites-security-auditor`](../pack/.claude/agents/devrites-security-auditor.md) | `/rite-seal` when input/auth/data in scope | OWASP Top 10, trust boundary, secrets, deps |
|
|
77
84
|
| [`devrites-performance-reviewer`](../pack/.claude/agents/devrites-performance-reviewer.md) | `/rite-seal` when perf relevant | N+1s, hot paths, payload size |
|
|
85
|
+
| [`devrites-devex-reviewer`](../pack/.claude/agents/devrites-devex-reviewer.md) | `/rite-vet` (predict) + `/rite-seal` (measure) when a developer-facing surface is in scope | Developer-experience scorecard + predict-vs-measure boomerang (TTHW, getting-started, error-message quality, ergonomics, docs) |
|
|
78
86
|
| [`devrites-doubt-reviewer`](../pack/.claude/agents/devrites-doubt-reviewer.md) | `devrites-doubt` loop | Adversarial check of a single claim/decision |
|
|
79
87
|
| [`devrites-simplifier-reviewer`](../pack/.claude/agents/devrites-simplifier-reviewer.md) | `devrites-audit simplify` | Independent simplification judgment |
|
|
88
|
+
| [`devrites-retrospector`](../pack/.claude/agents/devrites-retrospector.md) | `/rite-ship` close (cadence-gated) | Cross-feature retrospective — mines the shipped archive for recurring patterns + trends; **drafts** graduation candidates for `/rite-learn`; read-only |
|
|
80
89
|
|
|
81
90
|
## Engineering rules (`pack/.claude/rules/`)
|
|
82
91
|
|
|
@@ -85,7 +94,7 @@ first step (step 0); the rest are referenced on demand. Full index in
|
|
|
85
94
|
[`pack/.claude/rules/README.md`](../pack/.claude/rules/README.md).
|
|
86
95
|
|
|
87
96
|
- `core.md` (always-on) — operating rules + universal anti-rationalizations + 1-line craft disciplines + persistence-before-stopping summary.
|
|
88
|
-
- `coding-style.md` · `error-handling.md` · `testing.md` · `code-review.md` · `security.md` · `performance.md` · `patterns.md` · `git-workflow.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md`
|
|
97
|
+
- The other **22 on-demand** (read by the phase that needs them): `coding-style.md` · `prose-style.md` · `error-handling.md` · `testing.md` · `spec-grammar.md` · `code-review.md` · `principles.md` · `security.md` · `performance.md` · `observability.md` · `developer-experience.md` · `patterns.md` · `git-workflow.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `deprecation.md` · `agents.md` · `context-hygiene.md` · `afk-hitl.md` · `tooling.md`
|
|
89
98
|
- `anti-patterns.md` — pack-wide rationalizations + red flags. Loaded by each per-phase `rite-*/reference/anti-patterns.md`; can be loaded directly for cross-phase reluctance.
|
|
90
99
|
|
|
91
100
|
## Trigger conditions (auto-selection)
|
package/docs/flow.md
CHANGED
|
@@ -20,6 +20,8 @@ flowchart LR
|
|
|
20
20
|
Spec -->|spec.md ready| Define[/rite-define/]
|
|
21
21
|
Define -->|plan.md + tasks.md<br/>each slice tagged AFK/HITL| Build[/rite-build/]
|
|
22
22
|
Build -->|one slice done<br/>+ evidence| Build
|
|
23
|
+
Build -.->|"Forge: yes slice"| Forge[forge: K candidates<br/>→ devrites-forge-judge → 1 winner]
|
|
24
|
+
Forge -.->|winner lands<br/>forge-report.md| Build
|
|
23
25
|
Build -->|HITL gate fires| Await{{Awaiting human<br/>state.md + questions.md}}
|
|
24
26
|
Await -->|"/rite-resolve <qid> <answer>"| Build
|
|
25
27
|
Build -->|all slices built| Prove[/rite-prove/]
|
|
@@ -45,7 +47,7 @@ flowchart LR
|
|
|
45
47
|
class Shipped done
|
|
46
48
|
class Repair repair
|
|
47
49
|
class Await gate
|
|
48
|
-
class Shape internal
|
|
50
|
+
class Shape,Forge internal
|
|
49
51
|
```
|
|
50
52
|
|
|
51
53
|
## 2. `/rite-polish` orchestrator
|
|
@@ -117,6 +119,8 @@ flowchart TB
|
|
|
117
119
|
Walk -.->|UI only| FERev[devrites-frontend-reviewer]
|
|
118
120
|
Walk -.->|input/auth/data| SecRev[devrites-security-auditor]
|
|
119
121
|
Walk -.->|perf relevant| PerfRev[devrites-performance-reviewer]
|
|
122
|
+
VV[/browser-evidence.md<br/>Visual Verdict/] -.->|UI + design-brief.md| FERev
|
|
123
|
+
VV -.->|acceptance-mapped FAIL = NO-GO| Gate
|
|
120
124
|
SpecRev --> Gate
|
|
121
125
|
CodeRev --> Gate
|
|
122
126
|
TestRev --> Gate
|
|
@@ -141,6 +145,8 @@ flowchart TB
|
|
|
141
145
|
class Gate,YN gate
|
|
142
146
|
class Go,Ship ship
|
|
143
147
|
class NoGo stop
|
|
148
|
+
classDef artifact fill:#0f172a,stroke:#9ca3af,color:#f9fafb
|
|
149
|
+
class VV artifact
|
|
144
150
|
```
|
|
145
151
|
|
|
146
152
|
## 5. `devrites-debug-recovery` six-phase loop
|
|
@@ -286,7 +292,7 @@ skills (`prototype`, `handoff`, `triage`, `diagnose`). Visibility is the
|
|
|
286
292
|
|
|
287
293
|
```mermaid
|
|
288
294
|
flowchart TB
|
|
289
|
-
subgraph Public["Public (user-invocable: true) —
|
|
295
|
+
subgraph Public["Public (user-invocable: true) — 24 skills"]
|
|
290
296
|
direction TB
|
|
291
297
|
R1[/rite/]
|
|
292
298
|
R2[/rite-spec/]
|
|
@@ -303,12 +309,17 @@ flowchart TB
|
|
|
303
309
|
R13[/rite-autocomplete/]
|
|
304
310
|
R10[/rite-status/]
|
|
305
311
|
R11[/rite-resolve/]
|
|
312
|
+
RQ[/rite-quick/]
|
|
313
|
+
RF[/rite-frame/]
|
|
314
|
+
RA[/rite-adopt/]
|
|
315
|
+
RL[/rite-learn/]
|
|
316
|
+
RD[/rite-doctor/]
|
|
306
317
|
IPT[/rite-pressure-test/]
|
|
307
318
|
D1[/rite-zoom-out/]
|
|
308
319
|
D2[/rite-prototype/]
|
|
309
320
|
D3[/rite-handoff/]
|
|
310
321
|
end
|
|
311
|
-
subgraph Internal["Internal (user-invocable: false) —
|
|
322
|
+
subgraph Internal["Internal (user-invocable: false) — 12 skills (11 specialists + devrites-lib library)"]
|
|
312
323
|
direction TB
|
|
313
324
|
I1[devrites-api-interface]
|
|
314
325
|
I2[devrites-audit<br/>security · perf · simplify]
|
|
@@ -319,12 +330,15 @@ flowchart TB
|
|
|
319
330
|
I7[devrites-interview]
|
|
320
331
|
I8[devrites-source-driven]
|
|
321
332
|
I9[devrites-ux-shape]
|
|
333
|
+
I10[devrites-prose-craft]
|
|
334
|
+
I11[devrites-refresh-indexes]
|
|
335
|
+
I12[devrites-lib<br/>library scripts]
|
|
322
336
|
end
|
|
323
337
|
|
|
324
338
|
classDef pub fill:#064e3b,stroke:#34d399,color:#ecfdf5
|
|
325
339
|
classDef int fill:#1f2937,stroke:#9ca3af,color:#f9fafb
|
|
326
|
-
class R1,R2,RT,R3,RV,R4,R5,R6,R7,R8,R9,R12,R13,R10,R11,IPT,D1,D2,D3 pub
|
|
327
|
-
class I1,I2,I3,I4,I5,I6,I7,I8,I9 int
|
|
340
|
+
class R1,R2,RT,R3,RV,R4,R5,R6,R7,R8,R9,R12,R13,R10,R11,RQ,RF,RA,RL,RD,IPT,D1,D2,D3 pub
|
|
341
|
+
class I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12 int
|
|
328
342
|
```
|
|
329
343
|
|
|
330
344
|
## 9. AFK & HITL state machine
|
package/docs/orchestration.md
CHANGED
|
@@ -29,7 +29,12 @@ its judgment is independent.
|
|
|
29
29
|
the orchestrator reconciles — banding by confidence and surfacing genuine disagreement explicitly
|
|
30
30
|
rather than averaging it away.
|
|
31
31
|
3. **Single writer.** Exactly one `devrites-slice-wright` per slice, never a parallel fan-out of
|
|
32
|
-
writers — concurrent writers make conflicting implicit decisions
|
|
32
|
+
writers *sharing a tree* — concurrent writers on one tree make conflicting implicit decisions
|
|
33
|
+
that corrupt a coherent design. The one sanctioned exception is a **forge** slice
|
|
34
|
+
(`Forge: yes`, flagged by `/rite-vet`): K=2–3 candidate wrights build it on distinct strategies
|
|
35
|
+
in **isolated** worktrees, `devrites-forge-judge` scores them, and exactly one winner's diff
|
|
36
|
+
lands — no tree ever has two authors, so the invariant holds
|
|
37
|
+
([`rite-build/reference/forge.md`](../pack/.claude/skills/rite-build/reference/forge.md)).
|
|
33
38
|
4. **Lifecycle as user-driven verbs.** Each verb performs one mutation and stops; chaining is
|
|
34
39
|
explicit (the user types the next command), so there are no hidden side effects between phases.
|
|
35
40
|
`/rite-autocomplete` is the one deliberate exception — an opt-in unattended driver.
|
|
@@ -41,7 +46,8 @@ its judgment is independent.
|
|
|
41
46
|
- **A persona that paraphrases another.** Passing one agent's summary to the next is lossy telephone;
|
|
42
47
|
reviewers read the raw diff and contract, not a digest of the author's reasoning.
|
|
43
48
|
- **Parallel writers.** See single-writer above — two agents editing the same feature concurrently
|
|
44
|
-
is a merge of conflicting decisions, not a speed-up.
|
|
49
|
+
is a merge of conflicting decisions, not a speed-up. (Forge is *not* this: its candidates write in
|
|
50
|
+
**isolated** worktrees and exactly one lands, so no tree is ever co-authored.)
|
|
45
51
|
- **A router that does the work.** `/rite` is a *thin dispatcher* — it renders the menu, resolves a
|
|
46
52
|
verb to a skill, and gets out of the way. It holds no phase logic and produces no artifact itself.
|
|
47
53
|
(This is the distinction that makes a router fine: the anti-pattern is a "meta-orchestrator"
|
|
@@ -57,11 +63,15 @@ Two Claude Code capabilities sit adjacent to DevRites' model; the stance on each
|
|
|
57
63
|
plus fresh-context read-only fan-out already give independent context per agent without the
|
|
58
64
|
coordination overhead, and the lifecycle is intentionally single-slice / single-writer. Reach for
|
|
59
65
|
Agent Teams for work *outside* that discipline — competing-hypothesis debugging, or exploring
|
|
60
|
-
several genuinely different approaches in parallel — not to parallelise a DevRites build.
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
several genuinely different approaches in parallel — not to parallelise a DevRites build. The one
|
|
67
|
+
in-lifecycle form of "compete several approaches" is **forge** (a `Forge: yes` slice), and it is
|
|
68
|
+
deliberately bounded: vet-gated, K≤3, isolated, winner-takes-all.
|
|
69
|
+
- **Worktree isolation.** A single feature is single-writer on one branch by design, so DevRites
|
|
70
|
+
doesn't spawn worktrees for ordinary builds — but you can run DevRites *inside* a git worktree to
|
|
71
|
+
drive two features in parallel without them colliding (the `.devrites/ACTIVE` sentinel is
|
|
72
|
+
per-working-tree, so each carries its own active feature). The one place DevRites spawns worktrees
|
|
73
|
+
itself is a **forge** slice: each candidate build gets an ephemeral worktree, auto-removed after
|
|
74
|
+
the winner lands.
|
|
65
75
|
|
|
66
76
|
## See also
|
|
67
77
|
|
package/docs/skills.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# All
|
|
1
|
+
# All 36 skills
|
|
2
2
|
|
|
3
|
-
The pack ships **
|
|
3
|
+
The pack ships **36 skills total** — 24 user-invocable `rite-*` workflow + utility skills and 11 model-invoked `devrites-*` specialists, plus the internal `devrites-lib` library skill (`user-invocable: false`, not a command) that ships the cross-cutting scripts the workflow skills run: the read-only orientation preamble and the `readiness` / `evidence-fresh` / `acceptance` gate scripts, plus the `tick-afk` / `resolve` / `close-out` state mutators. Each skill is a structured workflow with its own operating rules, anti-rationalization tables, and red flags. Engineering rules live at `.claude/rules/`; each `rite-*` skill Reads `.claude/rules/core.md` as its first step (step 0) and pulls the other 22 rule files on demand (no carrier skill, no session-start autoload). A unified `devrites` CLI and an MCP server expose the `devrites-lib` ops to any tool (see [`cli-mcp.md`](cli-mcp.md)).
|
|
4
4
|
|
|
5
|
-
**Naming convention.** `rite-*` is the user-facing slash-command surface (lifecycle phases plus utilities — `rite-prototype`, `rite-handoff`, `rite-zoom-out`, `rite-pressure-test`). `devrites-*` is internal (model-invoked, hidden from the menu) and collision-avoiding against bundled Claude Code skill names. Visibility is governed by each skill's `user-invocable:` flag; the prefix mirrors it.
|
|
5
|
+
**Naming convention.** `rite-*` is the user-facing slash-command surface (lifecycle phases plus utilities — `rite-quick`, `rite-frame`, `rite-adopt`, `rite-learn`, `rite-doctor`, `rite-prototype`, `rite-handoff`, `rite-zoom-out`, `rite-pressure-test`). `devrites-*` is internal (model-invoked, hidden from the menu) and collision-avoiding against bundled Claude Code skill names. Visibility is governed by each skill's `user-invocable:` flag; the prefix mirrors it.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -54,8 +54,13 @@ Every user-invocable skill responds to **both** `/rite <verb>` (menu form — ty
|
|
|
54
54
|
| `/rite prototype` | `/rite-prototype` | utility | Throwaway code that answers ONE design question before committing — routes between a Logic harness (state/data model) and 2–4 radically different UI variations on one route. |
|
|
55
55
|
| `/rite handoff` | `/rite-handoff` | utility | Compact the chat session into a handoff doc a fresh agent can pick up — syncs to the workspace, references existing artifacts by path. |
|
|
56
56
|
| `/rite pressure-test` | `/rite-pressure-test` | utility | Diverge → converge on a rough idea before specifying. |
|
|
57
|
+
| `/rite quick` | `/rite-quick` | express | Express lane for a **small, reversible, unambiguous** change — one-line contract → TDD build → scoped prove → review-lite → ship, no full artifact tree. Significance gate first: auth / migration / public-API / destructive / multi-slice / ambiguous → escalates to `/rite-spec`. |
|
|
58
|
+
| `/rite frame` | `/rite-frame` | lens | Pre-flight + self-audit lens for ad-hoc work the lifecycle's gates never see — converts an imperative ask into a falsifiable success criterion + verify command (FRAME), then audits a raw diff against the four LLM coding failure modes (AUDIT). |
|
|
59
|
+
| `/rite adopt` | `/rite-adopt` | onboard | Bring an EXISTING codebase under DevRites — reverse-derive a `spec.md` of current behavior + placement + architecture, and seed the conventions ledger from the idioms the code already follows. |
|
|
60
|
+
| `/rite learn` | `/rite-learn` | utility | Cross-feature learning loop — mine shipped features for recurring mistakes + dismissed-finding classes, propose project-local lessons into `.devrites/learnings.md` (and graduate a recurring invariant to a project principle, human-gated). |
|
|
61
|
+
| `/rite doctor` | `/rite-doctor` | diagnostic | Diagnose DevRites install + workspace health — install integrity, a stale `.devrites/ACTIVE`, a corrupt workspace, orphaned gates, broken hook wiring. |
|
|
57
62
|
|
|
58
|
-
The
|
|
63
|
+
The 11 model-invoked internal specialists (hidden from the menu): `devrites-interview`, `-source-driven`, `-doubt`, `-ux-shape`, `-frontend-craft`, `-prose-craft`, `-browser-proof`, `-debug-recovery`, `-api-interface`, `-audit` (security / perf / simplify), `-refresh-indexes`. Plus the `devrites-lib` library skill (scripts, not a command). The `/rite` menu carries the routing, the user-invocable utilities all use the `rite-*` prefix (`rite-quick`, `rite-frame`, `rite-adopt`, `rite-learn`, `rite-doctor`, `rite-prototype`, `rite-handoff`, `rite-zoom-out`, `rite-pressure-test`, `rite-autocomplete`), and the `/rite-polish` phases live as references inside the same skill rather than as `rite-polish-code` / `rite-polish-ui`. Triggers and interactions are documented in [`command-map.md`](command-map.md); diagrams in [`flow.md`](flow.md).
|
|
59
64
|
|
|
60
65
|
---
|
|
61
66
|
|
|
@@ -68,6 +73,15 @@ The 9 model-invoked internal specialists (hidden from the menu): `devrites-inter
|
|
|
68
73
|
| [`rite`](../pack/.claude/skills/rite/SKILL.md) | Compact menu + active-feature status + suggested next command. Does not run a workflow. | You type `/rite`, ask "what DevRites commands exist", or "where am I". |
|
|
69
74
|
| [`rite-status`](../pack/.claude/skills/rite-status/SKILL.md) | Read-only report: phase, run mode (AFK/HITL), status, active slice, next action, evidence, open questions by gate, drift, risks. | You ask "where am I", "what's the status", "what's next". |
|
|
70
75
|
| [`rite-resolve`](../pack/.claude/skills/rite-resolve/SKILL.md) | Answer / drop / batch-resolve open `questions.md` entries; clears `state.md` `Awaiting human` and resumes the workflow. | A HITL checkpoint is open or AFK left blocking questions; you type `/rite-resolve <qid> "<answer>"`. |
|
|
76
|
+
| [`rite-doctor`](../pack/.claude/skills/rite-doctor/SKILL.md) | Diagnose DevRites install + workspace health — install integrity, stale `.devrites/ACTIVE`, corrupt workspace, orphaned gates, broken hook wiring. Read-only report. | "rite doctor", "is DevRites healthy", "why isn't the workflow picking up my feature". |
|
|
77
|
+
|
|
78
|
+
### Express & ad-hoc — small or unguarded work
|
|
79
|
+
|
|
80
|
+
| Skill | What It Does | Use When |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| [`rite-quick`](../pack/.claude/skills/rite-quick/SKILL.md) | Express lane for a **small, reversible, unambiguous** change — one-line contract → TDD build → scoped prove → review-lite → ship, collapsing the full lifecycle into one pass. Significance gate first: auth / migration / public-API / destructive / multi-slice / ambiguous **escalates to `/rite-spec`**. | "quick fix", "small change", "tiny tweak", "just do X" on a low-risk change. |
|
|
83
|
+
| [`rite-frame`](../pack/.claude/skills/rite-frame/SKILL.md) | Pre-flight + self-audit lens for ad-hoc work the lifecycle gates never see — FRAME converts an imperative ask into a falsifiable success criterion + verify command before code; AUDIT checks a raw diff against the four LLM coding failure modes (silent assumption / overcomplication / out-of-scope edit / unverifiable goal). | Top of `/rite-quick`, before a plain "just do X" edit, or to self-review a raw diff. |
|
|
84
|
+
| [`rite-adopt`](../pack/.claude/skills/rite-adopt/SKILL.md) | Bring an EXISTING codebase under DevRites — reverse-derive a `spec.md` of current behavior + placement + architecture, and seed the conventions ledger from the idioms the code already follows, then hand off to the lifecycle. | "adopt this project", "onboard this codebase", "we already have code", "reverse-engineer a spec from the existing app". |
|
|
71
85
|
|
|
72
86
|
### Spec — Understand the ask before any code
|
|
73
87
|
|
|
@@ -101,17 +115,18 @@ The 9 model-invoked internal specialists (hidden from the menu): `devrites-inter
|
|
|
101
115
|
|
|
102
116
|
| Skill | What It Does | Use When |
|
|
103
117
|
|---|---|---|
|
|
104
|
-
| [`rite-build`](../pack/.claude/skills/rite-build/SKILL.md) | Orchestrates **exactly one** vertical slice: pre-flight gates, then dispatches a fresh-context [`devrites-slice-wright`](../pack/.claude/agents/devrites-slice-wright.md) for the build core, then doubts / gates / records with evidence. | A plan exists and the next slice is ready. |
|
|
118
|
+
| [`rite-build`](../pack/.claude/skills/rite-build/SKILL.md) | Orchestrates **exactly one** vertical slice: pre-flight gates, then dispatches a fresh-context [`devrites-slice-wright`](../pack/.claude/agents/devrites-slice-wright.md) for the build core, then doubts / gates / records with evidence. A slice `/rite-vet` flagged `Forge: yes` competes K=2–3 isolated candidate builds judged by [`devrites-forge-judge`](../pack/.claude/agents/devrites-forge-judge.md), landing one winner (`forge-report.md`). | A plan exists and the next slice is ready. |
|
|
105
119
|
| [`devrites-source-driven`](../pack/.claude/skills/devrites-source-driven/SKILL.md) | Consult official docs / source before relying on framework behavior; record the source. | API, config, or framework behavior is assumed rather than known. |
|
|
106
120
|
| [`devrites-api-interface`](../pack/.claude/skills/devrites-api-interface/SKILL.md) | Design stable API / interface contracts — REST/GraphQL, module boundaries, type contracts, FE/BE split. | A slice crosses a boundary or defines a public interface. |
|
|
107
121
|
| [`devrites-debug-recovery`](../pack/.claude/skills/devrites-debug-recovery/SKILL.md) | Reproduce → ranked hypotheses → instrument → fix in scope → regression-test. Stops guess-and-retry. | Tests, builds, or runtime checks fail. |
|
|
122
|
+
| [`devrites-refresh-indexes`](../pack/.claude/skills/devrites-refresh-indexes/SKILL.md) | Keep the optional code-intelligence indexes (codebase-memory-mcp, codegraph, graphify) current so the next structural lookup reads live code, not a stale graph. The Stop hook runs it automatically; this skill is the manual force. | Index looks stale, after a large change before a structural query, or "reindex" / "the graph is stale". |
|
|
108
123
|
|
|
109
124
|
### Prove — Real evidence, including the browser
|
|
110
125
|
|
|
111
126
|
| Skill | What It Does | Use When |
|
|
112
127
|
|---|---|---|
|
|
113
128
|
| [`rite-prove`](../pack/.claude/skills/rite-prove/SKILL.md) | Tests + build + runtime + browser evidence for the current scope. | All slices built; ready for full verification. |
|
|
114
|
-
| [`devrites-browser-proof`](../pack/.claude/skills/devrites-browser-proof/SKILL.md) | Browser proof ladder: browser-harness → Chrome DevTools MCP → `/run`+`/verify` → project E2E → manual. | Scope touches UI. |
|
|
129
|
+
| [`devrites-browser-proof`](../pack/.claude/skills/devrites-browser-proof/SKILL.md) | Browser proof ladder: browser-harness → Chrome DevTools MCP → `/run`+`/verify` → project E2E → manual. Auto-emits the structured **Visual Verdict** (per-criterion PASS/FAIL vs `design-brief.md`) for UI slices — consumed by `devrites-frontend-reviewer` and gated at `/rite-seal`. | Scope touches UI. |
|
|
115
130
|
|
|
116
131
|
### Polish — Normalize, then ship-quality detail pass
|
|
117
132
|
|
|
@@ -119,6 +134,7 @@ The 9 model-invoked internal specialists (hidden from the menu): `devrites-inter
|
|
|
119
134
|
|---|---|---|
|
|
120
135
|
| [`rite-polish`](../pack/.claude/skills/rite-polish/SKILL.md) | Orchestrator. Always runs code polish (`reference/code.md`); detects UI scope and runs UI normalize + polish (`reference/ui.md`) when needed. Accepts mode tokens (`bolder`, `quieter`, `distill`, `harden`, `normalize-only`). | All slices proven; ready to finish. |
|
|
121
136
|
| [`devrites-frontend-craft`](../pack/.claude/skills/devrites-frontend-craft/SKILL.md) | Senior frontend craft — register, shape-before-code, all states, design system, anti-AI-slop, Core Web Vitals + WCAG 2.2. | A slice touches UI. |
|
|
137
|
+
| [`devrites-prose-craft`](../pack/.claude/skills/devrites-prose-craft/SKILL.md) | Human-voice writing for artifacts + replies — strips the LLM tells (filler openers, false contrasts, fake profundity, em-dash tics, hedging) while keeping precise lists, exact terms, and spec structure. The catch pass in `/rite-polish` Phase 1. | A phase writes prose (spec / plan / decisions / review / seal / commit / PR bodies) or a user-facing reply. |
|
|
122
138
|
|
|
123
139
|
### Review — Adversarial, scoped to the feature
|
|
124
140
|
|
|
@@ -154,27 +170,35 @@ The 9 model-invoked internal specialists (hidden from the menu): `devrites-inter
|
|
|
154
170
|
|
|
155
171
|
| Skill | What It Does | Use When |
|
|
156
172
|
|---|---|---|
|
|
157
|
-
| (engineering rules) | Live at `.claude/rules/` post-install — each `rite-*` skill Reads `.claude/rules/core.md` as its first step (step 0); the other
|
|
173
|
+
| (engineering rules) | Live at `.claude/rules/` post-install — each `rite-*` skill Reads `.claude/rules/core.md` as its first step (step 0); the other 22 rule files (`coding-style.md`, `prose-style.md`, `error-handling.md`, `testing.md`, `spec-grammar.md`, `code-review.md`, `principles.md`, `security.md`, `performance.md`, `observability.md`, `developer-experience.md`, `patterns.md`, `git-workflow.md`, `hooks.md`, `documentation.md`, `development-workflow.md`, `deprecation.md`, `agents.md`, `context-hygiene.md`, `anti-patterns.md`, `afk-hitl.md`, `tooling.md`) load on demand per skill body. No carrier skill, no session-start autoload. | n/a — step-0 core / on-demand by path. |
|
|
158
174
|
|
|
159
175
|
---
|
|
160
176
|
|
|
161
177
|
## Review agents — Fresh-context reviewers
|
|
162
178
|
|
|
163
|
-
Spawned by `/rite-review`, `/rite-seal` (post-build), `/rite-temper` (pre-plan),
|
|
179
|
+
Spawned by `/rite-review`, `/rite-seal` (post-build), `/rite-temper` (pre-plan), `/rite-vet` (pre-build), and `/rite-build` (the forge judge, on a `Forge: yes` slice) for independent judgment. Read-only; given only the artifact + rubric, never the author's reasoning. **13 read-only** in all (12 reviewers + the cross-feature `devrites-retrospector`); plus the one **write-capable** `devrites-slice-wright` below.
|
|
164
180
|
|
|
165
181
|
| Agent | Purpose |
|
|
166
182
|
|---|---|
|
|
167
183
|
| [`devrites-strategy-reviewer`](../pack/.claude/agents/devrites-strategy-reviewer.md) | **Pre-plan** spec-vs-rubric strategic review (ambition / scope / premise / pre-mortem / YAGNI / testability / irreversibility / cross-cutting / convention) — via `/rite-temper`, not the seal fan-out. |
|
|
168
184
|
| [`devrites-plan-reviewer`](../pack/.claude/agents/devrites-plan-reviewer.md) | **Pre-build** plan-vs-rubric engineering review (architecture / scope-reuse / plan code-quality / test-coverage design / performance / reversibility / failure-mode coverage), confidence-banded with a quote-the-source verification gate — via `/rite-vet`, not the seal fan-out. |
|
|
185
|
+
| [`devrites-forge-judge`](../pack/.claude/agents/devrites-forge-judge.md) | **Build-time** comparative judge of K=2–3 competing candidate builds of one slice (acceptance / test strength / principle fit / simplicity / reuse / anti-slop) — via `/rite-build` on a `Forge: yes` slice; picks the single winner to land, names grafts. |
|
|
169
186
|
| [`devrites-spec-reviewer`](../pack/.claude/agents/devrites-spec-reviewer.md) | Does the diff implement the spec? Missing / partial / wrong criteria; scope creep. |
|
|
170
187
|
| [`devrites-code-reviewer`](../pack/.claude/agents/devrites-code-reviewer.md) | Correctness / readability / architecture / maintainability. |
|
|
171
188
|
| [`devrites-test-analyst`](../pack/.claude/agents/devrites-test-analyst.md) | Do the tests actually prove the acceptance criteria? |
|
|
172
189
|
| [`devrites-frontend-reviewer`](../pack/.claude/agents/devrites-frontend-reviewer.md) | UX, a11y, responsive, design-system, anti-AI-slop. |
|
|
173
190
|
| [`devrites-security-auditor`](../pack/.claude/agents/devrites-security-auditor.md) | OWASP Top 10, trust boundary, secrets, deps. |
|
|
174
191
|
| [`devrites-performance-reviewer`](../pack/.claude/agents/devrites-performance-reviewer.md) | N+1s, hot paths, payload size. |
|
|
192
|
+
| [`devrites-devex-reviewer`](../pack/.claude/agents/devrites-devex-reviewer.md) | Developer-experience scorecard + the predict-vs-measure boomerang (TTHW, getting-started, error-message quality, ergonomics, docs) — predicts at `/rite-vet`, measures + reconciles at `/rite-seal`, when a developer-facing surface (API / CLI / SDK / webhook / config / errors / getting-started) is in scope. |
|
|
175
193
|
| [`devrites-doubt-reviewer`](../pack/.claude/agents/devrites-doubt-reviewer.md) | Adversarial check of a single claim/decision. |
|
|
176
194
|
| [`devrites-simplifier-reviewer`](../pack/.claude/agents/devrites-simplifier-reviewer.md) | Independent simplification judgment (called by `devrites-audit simplify`). |
|
|
177
195
|
|
|
196
|
+
**Cross-feature analyst** (read-only, scope is the archive not a diff):
|
|
197
|
+
|
|
198
|
+
| Agent | Purpose |
|
|
199
|
+
|---|---|
|
|
200
|
+
| [`devrites-retrospector`](../pack/.claude/agents/devrites-retrospector.md) | Mine the shipped `.devrites/archive/<slug>/` workspaces for recurring patterns + trends (repeated review findings, recurring drift, dead-ends, GO/NO-GO + rework signal) and **draft** graduation candidates for `/rite-learn`. Proposes, never imposes. Dispatched at `/rite-ship` close, cadence-gated. |
|
|
201
|
+
|
|
178
202
|
Seal fan-out diagram: [`flow.md` § /rite-seal fan-out](flow.md#4-rite-seal-fan-out).
|
|
179
203
|
|
|
180
204
|
---
|
|
@@ -19,7 +19,8 @@ what's wrong, not to approve.
|
|
|
19
19
|
## Inputs
|
|
20
20
|
You'll be given a feature slug / workspace path (`.devrites/work/<slug>/`) and the diff
|
|
21
21
|
scope. Read `spec.md` (objective + acceptance criteria), `tasks.md`, `decisions.md`,
|
|
22
|
-
`touched-files.md`,
|
|
22
|
+
`touched-files.md`, `.devrites/principles.md` if present (the project's binding invariants),
|
|
23
|
+
then run `git diff` for the feature scope and read the touched files.
|
|
23
24
|
|
|
24
25
|
## Review (feature scope only)
|
|
25
26
|
- **Tests first** — do they exist and would they fail if the code were wrong? Do they
|
|
@@ -42,6 +43,10 @@ scope. Read `spec.md` (objective + acceptance criteria), `tasks.md`, `decisions.
|
|
|
42
43
|
decompose-then-add.
|
|
43
44
|
- **Standards** — conformance to the project's conventions and the DevRites rules
|
|
44
45
|
(naming, error handling, security, git/commit hygiene where the diff touches them).
|
|
46
|
+
- **Principles** — a change that violates a declared project invariant
|
|
47
|
+
(`.devrites/principles.md`) with no recorded, human-approved exception is a **Critical**, the
|
|
48
|
+
same standing as a correctness defect — not a style nit. Check each principle's scope against
|
|
49
|
+
the diff; an absent or empty file means none are declared (nothing to check here).
|
|
45
50
|
|
|
46
51
|
## Structural depth — propose the move, not just the problem
|
|
47
52
|
When you flag a structural finding, name the **remedy**, don't stop at "this is complex" —
|