devrites 1.19.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/.claude-plugin/marketplace.json +24 -0
- package/.claude-plugin/plugin.json +43 -0
- package/CHANGELOG.md +391 -0
- package/LICENSE +56 -0
- package/NOTICE.md +18 -0
- package/README.md +582 -0
- package/SECURITY.md +193 -0
- package/bin/devrites.mjs +100 -0
- package/docs/architecture.md +272 -0
- package/docs/cli-mcp.md +57 -0
- package/docs/command-map.md +143 -0
- package/docs/flow.md +360 -0
- package/docs/release.md +29 -0
- package/docs/skills.md +214 -0
- package/docs/usage.md +325 -0
- package/install.sh +359 -0
- package/mcp/devrites-mcp.mjs +103 -0
- package/pack/.claude/agents/devrites-code-reviewer.md +50 -0
- package/pack/.claude/agents/devrites-doubt-reviewer.md +55 -0
- package/pack/.claude/agents/devrites-frontend-reviewer.md +52 -0
- package/pack/.claude/agents/devrites-performance-reviewer.md +47 -0
- package/pack/.claude/agents/devrites-plan-reviewer.md +79 -0
- package/pack/.claude/agents/devrites-security-auditor.md +53 -0
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +75 -0
- package/pack/.claude/agents/devrites-slice-wright.md +181 -0
- package/pack/.claude/agents/devrites-spec-reviewer.md +72 -0
- package/pack/.claude/agents/devrites-strategy-reviewer.md +62 -0
- package/pack/.claude/agents/devrites-test-analyst.md +47 -0
- package/pack/.claude/hooks/devrites-a1-guard.sh +81 -0
- package/pack/.claude/hooks/devrites-allow.sh +44 -0
- package/pack/.claude/hooks/devrites-cursor.sh +28 -0
- package/pack/.claude/hooks/devrites-orient.sh +53 -0
- package/pack/.claude/hooks/devrites-redwatch.sh +39 -0
- package/pack/.claude/hooks/devrites-refresh-indexes.sh +127 -0
- package/pack/.claude/hooks/devrites-reviewer-readonly.sh +28 -0
- package/pack/.claude/hooks/devrites-statusline.sh +18 -0
- package/pack/.claude/hooks/devrites-stop-gate.sh +45 -0
- package/pack/.claude/hooks/devrites-wright-scope.sh +35 -0
- package/pack/.claude/hooks/hooks.json +52 -0
- package/pack/.claude/rules/README.md +48 -0
- package/pack/.claude/rules/afk-hitl.md +245 -0
- package/pack/.claude/rules/agents.md +98 -0
- package/pack/.claude/rules/anti-patterns.md +48 -0
- package/pack/.claude/rules/code-review.md +38 -0
- package/pack/.claude/rules/coding-style.md +55 -0
- package/pack/.claude/rules/context-hygiene.md +97 -0
- package/pack/.claude/rules/core.md +119 -0
- package/pack/.claude/rules/development-workflow.md +40 -0
- package/pack/.claude/rules/documentation.md +27 -0
- package/pack/.claude/rules/error-handling.md +33 -0
- package/pack/.claude/rules/git-workflow.md +35 -0
- package/pack/.claude/rules/hooks.md +38 -0
- package/pack/.claude/rules/patterns.md +45 -0
- package/pack/.claude/rules/performance.md +27 -0
- package/pack/.claude/rules/prose-style.md +101 -0
- package/pack/.claude/rules/security.md +63 -0
- package/pack/.claude/rules/testing.md +88 -0
- package/pack/.claude/rules/tooling.md +72 -0
- package/pack/.claude/settings.json +53 -0
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +45 -0
- package/pack/.claude/skills/devrites-audit/SKILL.md +73 -0
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +38 -0
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +50 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +47 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +31 -0
- package/pack/.claude/skills/devrites-doubt/SKILL.md +75 -0
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +96 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +59 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +215 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +60 -0
- package/pack/.claude/skills/devrites-interview/SKILL.md +81 -0
- package/pack/.claude/skills/devrites-lib/SKILL.md +76 -0
- package/pack/.claude/skills/devrites-lib/scripts/analyze.sh +78 -0
- package/pack/.claude/skills/devrites-lib/scripts/check-acceptance.sh +75 -0
- package/pack/.claude/skills/devrites-lib/scripts/close-out.sh +47 -0
- package/pack/.claude/skills/devrites-lib/scripts/conventions.py +273 -0
- package/pack/.claude/skills/devrites-lib/scripts/coverage.sh +51 -0
- package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +69 -0
- package/pack/.claude/skills/devrites-lib/scripts/doctor.sh +92 -0
- package/pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh +63 -0
- package/pack/.claude/skills/devrites-lib/scripts/footprint.sh +45 -0
- package/pack/.claude/skills/devrites-lib/scripts/learnings.sh +74 -0
- package/pack/.claude/skills/devrites-lib/scripts/mutation-gate.sh +52 -0
- package/pack/.claude/skills/devrites-lib/scripts/package-existence.sh +68 -0
- package/pack/.claude/skills/devrites-lib/scripts/preamble.sh +76 -0
- package/pack/.claude/skills/devrites-lib/scripts/progress.sh +103 -0
- package/pack/.claude/skills/devrites-lib/scripts/readiness.sh +62 -0
- package/pack/.claude/skills/devrites-lib/scripts/reconcile.sh +123 -0
- package/pack/.claude/skills/devrites-lib/scripts/resolve.sh +279 -0
- package/pack/.claude/skills/devrites-lib/scripts/stuck.sh +67 -0
- package/pack/.claude/skills/devrites-lib/scripts/test-integrity.sh +87 -0
- package/pack/.claude/skills/devrites-lib/scripts/tick-afk.sh +52 -0
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +105 -0
- package/pack/.claude/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
- package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +88 -0
- package/pack/.claude/skills/devrites-prose-craft/reference/structures.md +134 -0
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +54 -0
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +36 -0
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +121 -0
- package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +93 -0
- package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/.claude/skills/rite/SKILL.md +135 -0
- package/pack/.claude/skills/rite/reference/menu.md +32 -0
- package/pack/.claude/skills/rite-adopt/SKILL.md +83 -0
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +58 -0
- package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +96 -0
- package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +35 -0
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +54 -0
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
- package/pack/.claude/skills/rite-build/SKILL.md +261 -0
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +25 -0
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +149 -0
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +32 -0
- package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +38 -0
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +43 -0
- package/pack/.claude/skills/rite-build/reference/tdd.md +26 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +115 -0
- package/pack/.claude/skills/rite-define/SKILL.md +157 -0
- package/pack/.claude/skills/rite-define/reference/anti-patterns.md +25 -0
- package/pack/.claude/skills/rite-define/reference/gates.md +152 -0
- package/pack/.claude/skills/rite-define/reference/plan-template.md +65 -0
- package/pack/.claude/skills/rite-doctor/SKILL.md +50 -0
- package/pack/.claude/skills/rite-frame/SKILL.md +116 -0
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +68 -0
- package/pack/.claude/skills/rite-handoff/SKILL.md +95 -0
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +34 -0
- package/pack/.claude/skills/rite-learn/SKILL.md +82 -0
- package/pack/.claude/skills/rite-plan/SKILL.md +82 -0
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +24 -0
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +33 -0
- package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +42 -0
- package/pack/.claude/skills/rite-plan/reference/slicing.md +52 -0
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +34 -0
- package/pack/.claude/skills/rite-polish/SKILL.md +90 -0
- package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +177 -0
- package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +27 -0
- package/pack/.claude/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
- package/pack/.claude/skills/rite-polish/reference/code.md +85 -0
- package/pack/.claude/skills/rite-polish/reference/design-system-discovery.md +35 -0
- package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/.claude/skills/rite-polish/reference/ui.md +136 -0
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +43 -0
- package/pack/.claude/skills/rite-prototype/SKILL.md +87 -0
- package/pack/.claude/skills/rite-prove/SKILL.md +120 -0
- package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/.claude/skills/rite-prove/reference/browser-proof.md +26 -0
- package/pack/.claude/skills/rite-prove/reference/failure-triage.md +25 -0
- package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +26 -0
- package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/.claude/skills/rite-quick/SKILL.md +81 -0
- package/pack/.claude/skills/rite-resolve/SKILL.md +113 -0
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +114 -0
- package/pack/.claude/skills/rite-review/SKILL.md +170 -0
- package/pack/.claude/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/.claude/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/.claude/skills/rite-review/reference/five-axis-review.md +46 -0
- package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +130 -0
- package/pack/.claude/skills/rite-review/reference/parallel-dispatch.md +62 -0
- package/pack/.claude/skills/rite-review/reference/performance-review.md +28 -0
- package/pack/.claude/skills/rite-review/reference/security-review.md +32 -0
- package/pack/.claude/skills/rite-seal/SKILL.md +183 -0
- package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +27 -0
- package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +63 -0
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +72 -0
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +37 -0
- package/pack/.claude/skills/rite-seal/reference/parallel-dispatch.md +69 -0
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +30 -0
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +36 -0
- package/pack/.claude/skills/rite-ship/SKILL.md +120 -0
- package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +25 -0
- package/pack/.claude/skills/rite-ship/reference/close-out.md +31 -0
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +120 -0
- package/pack/.claude/skills/rite-ship/reference/git-ship.md +42 -0
- package/pack/.claude/skills/rite-ship/reference/ship-template.md +33 -0
- package/pack/.claude/skills/rite-spec/SKILL.md +126 -0
- package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +25 -0
- package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/.claude/skills/rite-spec/reference/investigation.md +64 -0
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +61 -0
- package/pack/.claude/skills/rite-spec/reference/references-intake.md +57 -0
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +73 -0
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +124 -0
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +159 -0
- package/pack/.claude/skills/rite-status/SKILL.md +101 -0
- package/pack/.claude/skills/rite-temper/SKILL.md +119 -0
- package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +65 -0
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/.claude/skills/rite-temper/reference/significance.md +46 -0
- package/pack/.claude/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/.claude/skills/rite-vet/SKILL.md +155 -0
- package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +29 -0
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +135 -0
- package/pack/.claude/skills/rite-vet/reference/cross-model.md +41 -0
- package/pack/.claude/skills/rite-vet/reference/depth.md +53 -0
- package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +167 -0
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +75 -0
- package/package.json +68 -0
- package/scripts/build-release-tarball.sh +74 -0
- package/scripts/check-cross-refs.py +121 -0
- package/scripts/check-no-global-writes.sh +44 -0
- package/scripts/check-rule-uniqueness.sh +73 -0
- package/scripts/devrites-detect.sh +175 -0
- package/scripts/eval-runner.py +273 -0
- package/scripts/grade-feature.sh +104 -0
- package/scripts/install-lib.sh +83 -0
- package/scripts/pin.sh +166 -0
- package/scripts/render-eval-summary.py +48 -0
- package/scripts/run-evals.sh +149 -0
- package/scripts/run-outcome-evals.sh +49 -0
- package/scripts/scan-pack-security.py +209 -0
- package/scripts/scan-supply-chain-iocs.py +127 -0
- package/scripts/supply-chain-iocs.json +11 -0
- package/scripts/sync-version.sh +56 -0
- package/scripts/validate-frontmatter.py +149 -0
- package/scripts/validate-workflow-security.py +86 -0
- package/scripts/validate.sh +234 -0
- package/uninstall.sh +137 -0
- package/update.sh +196 -0
package/README.md
ADDED
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="images/logo.png" alt="DevRites">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
**Per-feature workspace on disk.** Every feature gets its own `.devrites/work/<slug>/`
|
|
6
|
+
directory: `spec.md` → (`strategy.md`) → `plan.md` + `tasks.md` → (`eng-review.md` +
|
|
7
|
+
`test-plan.md`) → `state.md` → `evidence.md` (plus `decisions.md`, `assumptions.md`,
|
|
8
|
+
`drift.md`, `questions.md`, `touched-files.md`, `design-brief.md`, `review.md`, `seal.md`,
|
|
9
|
+
`ship.md`, `handoff.md`, and `references/`; `strategy.md` is from the optional `/rite-temper`,
|
|
10
|
+
`eng-review.md` + `test-plan.md` from `/rite-vet`). When the task ships it is archived intact to
|
|
11
|
+
`.devrites/archive/<slug>/`. When you `/clear`, the next agent picks up from those
|
|
12
|
+
files — no chat-context summary required. **Spec Drift Guard** catches the wrong turn
|
|
13
|
+
before it costs you a day. **AFK mode** runs unattended without silently accepting
|
|
14
|
+
destructive migrations, auth changes, or red tests. **`type-GO`** demands a literal
|
|
15
|
+
typed confirmation before any irreversible commit / push / tag.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
.devrites/
|
|
19
|
+
ACTIVE # which feature is active
|
|
20
|
+
AFK # presence = AFK mode; YAML body sets max_slices / notify / allow_gates
|
|
21
|
+
work/<slug>/
|
|
22
|
+
brief.md spec.md references.md references/ # spec
|
|
23
|
+
strategy.md # temper (optional)
|
|
24
|
+
plan.md tasks.md # define
|
|
25
|
+
eng-review.md test-plan.md # vet
|
|
26
|
+
state.md questions.md decisions.md assumptions.md drift.md
|
|
27
|
+
touched-files.md evidence.md browser-evidence.md design-brief.md
|
|
28
|
+
polish-report.md review.md seal.md ship.md handoff.md
|
|
29
|
+
archive/<slug>/ # shipped task, moved here intact (all .md preserved)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Stop your AI from shipping half-baked code.** DevRites turns Claude Code into a
|
|
33
|
+
disciplined senior engineer — one that asks the right questions before writing a line,
|
|
34
|
+
ships features you can actually trust, and refuses to claim "done" without proof.
|
|
35
|
+
|
|
36
|
+
**Two run modes, same workflow:**
|
|
37
|
+
|
|
38
|
+
- **HITL** (default, human-in-the-loop) — you're at the keyboard. Slices marked
|
|
39
|
+
`Mode: HITL` pause **before** code is written at a typed checkpoint (`advisory` /
|
|
40
|
+
`validating` / `blocking` / `escalating`); resume on
|
|
41
|
+
[`/rite-resolve <qid> "<answer>"`](pack/.claude/skills/rite-resolve/SKILL.md).
|
|
42
|
+
- **AFK** (away-from-keyboard) — drop `.devrites/AFK` in the project. AFK slices run
|
|
43
|
+
unattended; discretionary pauses downgrade to advisory entries in `questions.md` so
|
|
44
|
+
the loop keeps moving. **Destructive migrations, auth/authz changes, public-API
|
|
45
|
+
breaks, and red tests/types/lint always pause regardless** — AFK never silently
|
|
46
|
+
accepts irreversible risk. Optional `max_slices` caps the loop; optional `notify:`
|
|
47
|
+
pings your phone on a pause.
|
|
48
|
+
|
|
49
|
+
Jump to the full contract → [Modes — HITL & AFK](#modes--hitl--afk).
|
|
50
|
+
|
|
51
|
+
Every phase is available **two ways**: the menu form `/rite <verb>` (one entry,
|
|
52
|
+
discoverable from `/rite`) and the direct shortcut `/rite-<verb>` (muscle
|
|
53
|
+
memory). Both hit the same skill — `/rite spec foo` ≡ `/rite-spec foo`.
|
|
54
|
+
|
|
55
|
+
| # | Phase | Menu form | Direct shortcut | Does |
|
|
56
|
+
|---|---|---|---|---|
|
|
57
|
+
| 1 | SPEC | `/rite spec` | [`/rite-spec`](pack/.claude/skills/rite-spec/SKILL.md) | investigate + write spec.md |
|
|
58
|
+
| — | TEMPER | `/rite temper` | [`/rite-temper`](pack/.claude/skills/rite-temper/SKILL.md) | _optional, big features_ — strategic review: scope mode + pre-mortem, hardens the spec (mandatory in autocomplete) |
|
|
59
|
+
| 2 | PLAN | `/rite define` | [`/rite-define`](pack/.claude/skills/rite-define/SKILL.md) | spec → plan + slices (each tagged AFK \| HITL + gate) |
|
|
60
|
+
| — | VET | `/rite vet` | [`/rite-vet`](pack/.claude/skills/rite-vet/SKILL.md) | _recommended, every feature_ — engineering plan review: scope · architecture · tests · perf, hardens the plan + writes `test-plan.md`; depth scales to stakes, never skipped (always in autocomplete) |
|
|
61
|
+
| 3 | BUILD ×N | `/rite build` | [`/rite-build`](pack/.claude/skills/rite-build/SKILL.md) | one slice, then stop (HITL slices pause pre-code) |
|
|
62
|
+
| 4 | PROVE | `/rite prove` | [`/rite-prove`](pack/.claude/skills/rite-prove/SKILL.md) | tests + browser proof |
|
|
63
|
+
| 5 | POLISH | `/rite polish` | [`/rite-polish`](pack/.claude/skills/rite-polish/SKILL.md) | code + UI polish |
|
|
64
|
+
| 6 | REVIEW | `/rite review` | [`/rite-review`](pack/.claude/skills/rite-review/SKILL.md) | multi-axis, parallel |
|
|
65
|
+
| 7 | SEAL | `/rite seal` | [`/rite-seal`](pack/.claude/skills/rite-seal/SKILL.md) | GO / NO-GO decision (no git) |
|
|
66
|
+
| 8 | SHIP | `/rite ship` | [`/rite-ship`](pack/.claude/skills/rite-ship/SKILL.md) | type-GO + commit/push/tag, then archive + close |
|
|
67
|
+
| — | RESUME | `/rite resolve` | [`/rite-resolve`](pack/.claude/skills/rite-resolve/SKILL.md) | answer a HITL gate, clears `Awaiting human`, resumes |
|
|
68
|
+
| — | AUTO | `/rite autocomplete` | [`/rite-autocomplete`](pack/.claude/skills/rite-autocomplete/SKILL.md) | run the whole lifecycle unattended (`--ship` to push) |
|
|
69
|
+
|
|
70
|
+
If implementation reveals the plan is wrong, the **Spec Drift Guard** stops
|
|
71
|
+
the build, records the drift, asks you when product behavior changes, and
|
|
72
|
+
routes through [`/rite-plan repair`](pack/.claude/skills/rite-plan/SKILL.md)
|
|
73
|
+
before resuming.
|
|
74
|
+
|
|
75
|
+
```mermaid
|
|
76
|
+
flowchart LR
|
|
77
|
+
S[/rite-spec/] --> D[/rite-define/] --> B[/rite-build ×N/] --> P[/rite-prove/] --> Po[/rite-polish/] --> R[/rite-review/] --> Sl[/rite-seal/]
|
|
78
|
+
S -.->|big feature| T[/rite-temper/] -.-> D
|
|
79
|
+
D -.->|every feature| V[/rite-vet/] -.-> B
|
|
80
|
+
Sl -->|GO| Sh[/rite-ship/]
|
|
81
|
+
Sh -->|type-GO| Ship([ship: commit · push · tag])
|
|
82
|
+
B -.->|Spec Drift Guard| Re[/rite-plan repair/]
|
|
83
|
+
Re --> B
|
|
84
|
+
|
|
85
|
+
classDef phase fill:#1f2937,stroke:#60a5fa,color:#f9fafb
|
|
86
|
+
classDef ship fill:#064e3b,stroke:#34d399,color:#ecfdf5
|
|
87
|
+
classDef repair fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
|
|
88
|
+
class S,D,B,P,Po,R,Sl,Sh,T phase
|
|
89
|
+
class Ship ship
|
|
90
|
+
class Re repair
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Full diagram set (lifecycle, polish orchestrator, review fan-out, debug loop,
|
|
94
|
+
rules carrier, workspace state, namespace map) →
|
|
95
|
+
[`docs/flow.md`](docs/flow.md).
|
|
96
|
+
|
|
97
|
+
**Status:** [`v1.19.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v1.19.0) — see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
98
|
+
|
|
99
|
+
## Contents
|
|
100
|
+
|
|
101
|
+
- [Why distributed skills](#why-distributed-skills-not-one-engine)
|
|
102
|
+
- [Modes — HITL & AFK](#modes--hitl--afk)
|
|
103
|
+
- [Install](#install) — [npx / bash (A, recommended)](#option-a-npx--bash-installer-recommended-full-install) · [plugin (B, partial)](#option-b-claude-code-plugin-partial--skills--agents-only)
|
|
104
|
+
- [Recommended setup](#recommended-setup-optional-but-devrites-is-much-sharper-with-it) — codegraph · graphify · browser-harness
|
|
105
|
+
- [Skills](#skills) — 31 total · full catalogue in [`docs/skills.md`](docs/skills.md)
|
|
106
|
+
- [Typical workflow](#typical-workflow) · [Worked examples](docs/usage.md)
|
|
107
|
+
- [Engineering rules](#engineering-rules) · [Browser proof ladder](#browser-proof-ladder) · [Frontend & fullstack](#frontend--fullstack)
|
|
108
|
+
- [Safety & scope](#safety--scope) · [Security model](#security-model)
|
|
109
|
+
- [Layout](#layout) · [Community & quality](#community--quality) · [Release pipeline](docs/release.md) · [License](#license)
|
|
110
|
+
|
|
111
|
+
**Companion docs:**
|
|
112
|
+
[architecture](docs/architecture.md) ·
|
|
113
|
+
[skills catalogue](docs/skills.md) ·
|
|
114
|
+
[command map](docs/command-map.md) ·
|
|
115
|
+
[flow diagrams](docs/flow.md) ·
|
|
116
|
+
[usage examples](docs/usage.md) ·
|
|
117
|
+
[release pipeline](docs/release.md) ·
|
|
118
|
+
[engineering rules](pack/.claude/rules/README.md)
|
|
119
|
+
|
|
120
|
+
## Why distributed skills, not one `/engine`
|
|
121
|
+
|
|
122
|
+
A single command that does everything loads every phase's instructions at once, creates
|
|
123
|
+
constant context pressure, and hides the intent of each step. DevRites splits the
|
|
124
|
+
lifecycle into 21 small public skills (`rite-*`) that each own one phase and load only
|
|
125
|
+
what that phase needs — including [`/rite-autocomplete`](pack/.claude/skills/rite-autocomplete/SKILL.md),
|
|
126
|
+
the unattended orchestrator that drives the full cycle end-to-end — plus internal
|
|
127
|
+
specialists (`devrites-*`) that fire on triggers.
|
|
128
|
+
|
|
129
|
+
**Naming:** the `devrites-` prefix is a **namespace** for collision avoidance against
|
|
130
|
+
bundled Claude Code skill names (`prototype`, `handoff`, `triage`, `diagnose`, …) —
|
|
131
|
+
it does not signal "internal." Visibility is governed by each skill's
|
|
132
|
+
`user-invocable:` flag, not by the prefix. See
|
|
133
|
+
[`docs/flow.md` § Public vs internal namespace](docs/flow.md#8-public-vs-internal-namespace).
|
|
134
|
+
|
|
135
|
+
Full rationale: [`docs/architecture.md`](docs/architecture.md).
|
|
136
|
+
|
|
137
|
+
## Install
|
|
138
|
+
|
|
139
|
+
DevRites installs **into a project** (project-local only — it never writes to
|
|
140
|
+
`~/.claude`). Two install paths are supported:
|
|
141
|
+
|
|
142
|
+
| Path | Ships | When to use |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| **A. `npx` or bash installer** *(recommended)* | skills, agents, **rules**, aliases | full DevRites — `npx devrites@latest`, or `curl \| bash` on any Claude Code version |
|
|
145
|
+
| B. Claude Code plugin | skills, agents *(no rules)* | Claude Code 2.1+ if you want plugin-managed updates and don't need the engineering rules |
|
|
146
|
+
|
|
147
|
+
> **Heads-up:** the Claude Code plugin manifest only ships `skills/` and
|
|
148
|
+
> `agents/` — there is no plugin field for the DevRites engineering rules.
|
|
149
|
+
> If you install via the plugin you'll need a follow-up `--rules-only` bash
|
|
150
|
+
> run to drop the rules into `.claude/rules/` (see Option B below).
|
|
151
|
+
|
|
152
|
+
### Option A: npx / bash installer (recommended, full install)
|
|
153
|
+
|
|
154
|
+
**Fastest — `npx` (Node 18+):**
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Install the full pack into the current project
|
|
158
|
+
npx devrites@latest
|
|
159
|
+
|
|
160
|
+
# Into a specific project, or preview first
|
|
161
|
+
npx devrites@latest --target /path/to/your/project
|
|
162
|
+
npx devrites@latest --dry-run
|
|
163
|
+
|
|
164
|
+
# Upgrade or remove later
|
|
165
|
+
npx devrites@latest update
|
|
166
|
+
npx devrites@latest uninstall
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`npx devrites` is a thin wrapper over the same installer below — the pack is bundled in the
|
|
170
|
+
package, so the install runs **offline** and is **pinned** to the version you request
|
|
171
|
+
(`@latest`, `@1.18.0`, …). It accepts every flag the bash installer does and is still
|
|
172
|
+
project-local (it never writes to `~/.claude`). Requires `bash` — built in on macOS/Linux;
|
|
173
|
+
on Windows run it inside Git Bash or WSL, or use the `curl | bash` one-liner below.
|
|
174
|
+
|
|
175
|
+
**One-liner over the network** — no `git clone` or Node required:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Install latest release into the current directory
|
|
179
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | bash
|
|
180
|
+
|
|
181
|
+
# Install into a specific project
|
|
182
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | bash -s -- --target /path/to/your/project
|
|
183
|
+
|
|
184
|
+
# Preview (no changes)
|
|
185
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | bash -s -- --dry-run
|
|
186
|
+
|
|
187
|
+
# Pin to a specific release
|
|
188
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | DEVRITES_REF=v0.1.0 bash
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The script is self-bootstrapping: when piped through `bash` it auto-downloads the latest
|
|
192
|
+
release tarball (or the `main` source archive as fallback) into `/tmp` and re-execs from
|
|
193
|
+
there. Requires `curl` and `tar`. No global writes, ever — `~/.claude` is refused.
|
|
194
|
+
|
|
195
|
+
**From a local checkout** (same script, no network needed):
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
git clone https://github.com/ViktorsBaikers/DevRites devrites && cd devrites
|
|
199
|
+
./install.sh --target /path/to/your/project # or run from inside the project
|
|
200
|
+
./install.sh --dry-run # preview, change nothing
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Common flags:
|
|
204
|
+
|
|
205
|
+
| Flag | Effect |
|
|
206
|
+
|---|---|
|
|
207
|
+
| `--target DIR` | Install into DIR (default: current directory) |
|
|
208
|
+
| `--dry-run` | Show planned file operations and exit |
|
|
209
|
+
| `--force` | Overwrite existing non-DevRites files |
|
|
210
|
+
| `--no-rules` | Skip the engineering rules |
|
|
211
|
+
| `--no-agents` | Skip the review subagents |
|
|
212
|
+
| `--rules-only` | Install only the engineering rules — pair with Option B below |
|
|
213
|
+
| `--short-aliases=all` | Add `/define`, `/build`, `/prove`, `/seal` short aliases (off by default) |
|
|
214
|
+
|
|
215
|
+
Every installed file is recorded in `.claude/devrites.manifest` (with the installed
|
|
216
|
+
version and the original install flags in the header). `./uninstall.sh` removes
|
|
217
|
+
exactly those files (and prunes empty dirs) — your feature data in
|
|
218
|
+
`.devrites/work/` and `.devrites/ACTIVE` is preserved.
|
|
219
|
+
|
|
220
|
+
### Option B: Claude Code plugin (partial — skills + agents only)
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
claude plugin marketplace add ViktorsBaikers/DevRites
|
|
224
|
+
claude plugin install devrites@devrites-marketplace
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
The plugin runtime places **skills + agents** in their canonical Claude Code
|
|
228
|
+
locations and lets you manage updates with `claude plugin update devrites`.
|
|
229
|
+
Uninstall with `claude plugin uninstall devrites`.
|
|
230
|
+
|
|
231
|
+
**The plugin does not install the DevRites engineering rules.** The Claude
|
|
232
|
+
Code plugin manifest has no `rules` field — `core.md`, `afk-hitl.md`,
|
|
233
|
+
`coding-style.md`, `testing.md`, `security.md`, and the rest of
|
|
234
|
+
`.claude/rules/` won't be present. Many skills (`/rite-build`, `/rite-prove`,
|
|
235
|
+
`/rite-polish`, …) cite those rules at runtime and degrade noticeably without
|
|
236
|
+
them.
|
|
237
|
+
|
|
238
|
+
To add the rules after a plugin install, run the bash installer in
|
|
239
|
+
`--rules-only` mode:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Drop only the engineering rules into the current project's .claude/rules/
|
|
243
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | bash -s -- --rules-only
|
|
244
|
+
|
|
245
|
+
# Or target a specific project
|
|
246
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/install.sh | bash -s -- --target /path/to/your/project --rules-only
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
This writes nothing outside `.claude/rules/` and records the rule files in
|
|
250
|
+
`.claude/devrites.manifest`. Running `./uninstall.sh` later removes only
|
|
251
|
+
what's in the manifest (just the rules in this case) — the plugin's own
|
|
252
|
+
skills + agents are managed by `claude plugin uninstall devrites`.
|
|
253
|
+
|
|
254
|
+
### Upgrading an existing install
|
|
255
|
+
|
|
256
|
+
**One-liner over the network**:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Upgrade the install in the current directory
|
|
260
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/update.sh | bash
|
|
261
|
+
|
|
262
|
+
# Upgrade an install elsewhere
|
|
263
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/update.sh | bash -s -- --target /path/to/proj
|
|
264
|
+
|
|
265
|
+
# Just check (exit 10 = update available, 0 = current)
|
|
266
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/update.sh | bash -s -- --check
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
From a local checkout:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
./update.sh # upgrade install in current directory
|
|
273
|
+
./update.sh --target /path/to/proj # upgrade install elsewhere
|
|
274
|
+
./update.sh --check # report installed vs latest, change nothing
|
|
275
|
+
./update.sh --to v0.2.0 # pin to a specific tag
|
|
276
|
+
./update.sh --pre # allow pre-release tags
|
|
277
|
+
./update.sh --force # reinstall even when already current
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
`update.sh` reads the installed version + original flags from
|
|
281
|
+
`.claude/devrites.manifest`, asks the GitHub API for the latest release tag,
|
|
282
|
+
downloads the release tarball, and re-runs the bundled `install.sh` with the
|
|
283
|
+
same flags + `--force`. `.devrites/` (active feature, work) is preserved
|
|
284
|
+
because the installer only touches manifest-tracked paths.
|
|
285
|
+
|
|
286
|
+
### Uninstalling
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Network one-liner
|
|
290
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/uninstall.sh | bash
|
|
291
|
+
curl -fsSL https://raw.githubusercontent.com/ViktorsBaikers/DevRites/main/uninstall.sh | bash -s -- --target /path
|
|
292
|
+
|
|
293
|
+
# Local checkout
|
|
294
|
+
./uninstall.sh # remove DevRites from the current project
|
|
295
|
+
./uninstall.sh --target /path/to/proj
|
|
296
|
+
./uninstall.sh --dry-run # preview, change nothing
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Removes only files listed in `.claude/devrites.manifest` and prunes empty dirs.
|
|
300
|
+
`.devrites/work/` (your feature data) is always preserved.
|
|
301
|
+
|
|
302
|
+
## Recommended setup (optional, but DevRites is much sharper with it)
|
|
303
|
+
|
|
304
|
+
DevRites runs with zero extra tooling, but three tools make it meaningfully better.
|
|
305
|
+
**Install and configure them in your project before you start** — DevRites detects each
|
|
306
|
+
one and **degrades gracefully** when it's absent.
|
|
307
|
+
|
|
308
|
+
| Tool | What it gives DevRites | Set up |
|
|
309
|
+
|---|---|---|
|
|
310
|
+
| **codegraph** | A code-intelligence index. `/rite-spec`, `/rite-define`, and `/rite-plan` use it to understand structure, **placement**, callers, and **impact** cheaply — deeper investigation and sharper specs, at a fraction of the tokens of reading files. | Build the index in your project (e.g. `codegraph init`) so its `codegraph_*` tools / a `.codegraph/` are present. |
|
|
311
|
+
| **graphify** | A codebase → knowledge-graph (`graphify-out/`) — same benefit for "where is X / what calls Y / what would Z break". | Generate it for your project (the `/graphify` skill). |
|
|
312
|
+
| **[browser-harness](https://github.com/browser-use/browser-harness)** | Drives your real browser so `/rite-prove` and `/rite-polish` capture **real UI evidence** — screenshots, console, network, responsive — the top rung of the proof ladder. | Install it, connect it to your Chrome, and verify with its doctor. |
|
|
313
|
+
|
|
314
|
+
Without them, DevRites reads files instead of a code graph and uses Claude Code's built-in
|
|
315
|
+
`/run`+`/verify` (or documented manual steps) instead of a browser. With them: deeper
|
|
316
|
+
investigation, cheaper context, and real browser proof. None are required.
|
|
317
|
+
|
|
318
|
+
## Skills
|
|
319
|
+
|
|
320
|
+
The pack ships **31 skills total** — 22 user-invocable `rite-*` workflow + utility skills, 9 model-invoked `devrites-*` specialists. **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 15 rule files load on demand.
|
|
321
|
+
|
|
322
|
+
**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.
|
|
323
|
+
|
|
324
|
+
**Custom pinned aliases** (optional). Add your own one-word shortcuts to any `rite-*` skill at runtime with `scripts/pin.sh` — useful for muscle-memory commands like `/b` → `/rite-build` or `/ship` → `/rite-ship`. The wrapper is a thin delegate (same shape the installer uses for `--short-aliases=all`); pinned aliases are manifest-tracked so `./uninstall.sh` cleans them up.
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
./scripts/pin.sh add b rite-build # /b == /rite-build
|
|
328
|
+
./scripts/pin.sh add ship rite-ship # /ship == /rite-ship
|
|
329
|
+
./scripts/pin.sh list # show currently-pinned aliases
|
|
330
|
+
./scripts/pin.sh remove b # drop the alias
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Pinned aliases live at `.claude/skills/<alias>/SKILL.md`. The script refuses `rite-*` names, unknown targets, and writes to `~/.claude`.
|
|
334
|
+
|
|
335
|
+
### Full skill + agent inventory
|
|
336
|
+
|
|
337
|
+
**Public `rite-*` skills (22)** — slash-command surface:
|
|
338
|
+
|
|
339
|
+
| Group | Skills |
|
|
340
|
+
|---|---|
|
|
341
|
+
| Lifecycle (8) | `rite-spec` · `rite-define` · `rite-build` · `rite-prove` · `rite-polish` · `rite-review` · `rite-seal` · `rite-ship` |
|
|
342
|
+
| On-ramp (optional) | `rite-adopt` — onboard an existing codebase: reverse-derive `spec.md` + seed the conventions ledger, then hand off to the lifecycle |
|
|
343
|
+
| Strategic (optional) | `rite-temper` — strategic spec review between spec and define; mandatory in `rite-autocomplete` |
|
|
344
|
+
| Engineering (every feature) | `rite-vet` — engineering plan review between define and build; depth scales to stakes, never skipped; always in `rite-autocomplete` |
|
|
345
|
+
| Resume / replan | `rite-resolve` · `rite-plan` |
|
|
346
|
+
| Utility | `rite-status` · `rite-doctor` · `rite-zoom-out` · `rite-prototype` · `rite-handoff` · `rite-pressure-test` · `rite-autocomplete` |
|
|
347
|
+
| 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` |
|
|
348
|
+
| Menu | `rite` |
|
|
349
|
+
|
|
350
|
+
**Internal `devrites-*` specialists (9)** — model-invoked, hidden from menu:
|
|
351
|
+
|
|
352
|
+
`devrites-interview` · `devrites-source-driven` · `devrites-doubt` ·
|
|
353
|
+
`devrites-ux-shape` · `devrites-frontend-craft` · `devrites-browser-proof` ·
|
|
354
|
+
`devrites-debug-recovery` · `devrites-api-interface` ·
|
|
355
|
+
`devrites-audit` (axes: `security` · `perf` · `simplify`).
|
|
356
|
+
|
|
357
|
+
**Review agents (10)** — fresh-context reviewers under `.claude/agents/`:
|
|
358
|
+
|
|
359
|
+
`devrites-strategy-reviewer` (pre-plan, via `/rite-temper`) ·
|
|
360
|
+
`devrites-plan-reviewer` (pre-build, via `/rite-vet`) · `devrites-spec-reviewer` ·
|
|
361
|
+
`devrites-code-reviewer` · `devrites-test-analyst` · `devrites-frontend-reviewer` ·
|
|
362
|
+
`devrites-security-auditor` · `devrites-performance-reviewer` ·
|
|
363
|
+
`devrites-doubt-reviewer` · `devrites-simplifier-reviewer`.
|
|
364
|
+
|
|
365
|
+
**Executor agent (1)** — fresh-context, **write-capable** writer under `.claude/agents/`:
|
|
366
|
+
|
|
367
|
+
`devrites-slice-wright` — dispatched by `/rite-build` to write one slice (orient → TDD → verify, anti-AI-slop, project idiom); the write-side mirror of the read-only reviewers.
|
|
368
|
+
|
|
369
|
+
Full catalogue with per-phase tables and interactions → [`docs/skills.md`](docs/skills.md). Trigger phrases + interactions → [`docs/command-map.md`](docs/command-map.md). Diagrams (polish orchestrator, review fan-out, seal fan-out, namespace map) → [`docs/flow.md`](docs/flow.md).
|
|
370
|
+
|
|
371
|
+
## Modes — HITL & AFK
|
|
372
|
+
|
|
373
|
+
DevRites runs the same lifecycle two ways. The mode is per-slice (declared in
|
|
374
|
+
`tasks.md` at planning time) and per-session (`.devrites/AFK` sentinel toggles the
|
|
375
|
+
session-level default). Skills consult both.
|
|
376
|
+
|
|
377
|
+
### HITL — human-in-the-loop (default)
|
|
378
|
+
|
|
379
|
+
Slices marked `Mode: HITL` pause **before any code is written**. `/rite-build`
|
|
380
|
+
renders the checkpoint, writes `Awaiting human` to `state.md`, appends the question
|
|
381
|
+
to `questions.md`, and stops. You answer with
|
|
382
|
+
[`/rite-resolve <qid> "<answer>"`](pack/.claude/skills/rite-resolve/SKILL.md) and the
|
|
383
|
+
workflow resumes. The pause is pre-action by design — no half-built slice, no
|
|
384
|
+
"approve after the fact" loop.
|
|
385
|
+
|
|
386
|
+
Each HITL slice declares a **gate type** that controls how much it disrupts the loop:
|
|
387
|
+
|
|
388
|
+
| Gate | Stakes | Behavior | SLA |
|
|
389
|
+
|---|---|---|---|
|
|
390
|
+
| `advisory` | low | log + proceed; surface for audit | none |
|
|
391
|
+
| `validating` | medium | async — build continues, merge blocks until reviewed | 4h |
|
|
392
|
+
| `blocking` | high | synchronous pause; loop stops | 15m |
|
|
393
|
+
| `escalating` | novel pattern | synchronous pause, route to specialist tag | 24h |
|
|
394
|
+
|
|
395
|
+
Full taxonomy + decision tree:
|
|
396
|
+
[`pack/.claude/skills/rite-define/reference/gates.md`](pack/.claude/skills/rite-define/reference/gates.md).
|
|
397
|
+
|
|
398
|
+
### AFK — away-from-keyboard
|
|
399
|
+
|
|
400
|
+
Drop `.devrites/AFK` in the project. AFK slices run unattended;
|
|
401
|
+
[`devrites-doubt`](pack/.claude/skills/devrites-doubt/SKILL.md) and other
|
|
402
|
+
discretionary pauses downgrade to advisory entries in `questions.md` so the loop
|
|
403
|
+
keeps moving. The sentinel is plain YAML (all keys optional):
|
|
404
|
+
|
|
405
|
+
```yaml
|
|
406
|
+
# .devrites/AFK — presence = AFK active.
|
|
407
|
+
max_slices: 10 # /rite-build decrements per built slice; 0 → forced HITL stop
|
|
408
|
+
notify: "ntfy.sh/my-topic" # shell command run on awaiting_human; qid / gate / slice in env
|
|
409
|
+
allow_gates: [advisory, validating] # gate severities AFK may auto-handle
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**AFK never silently accepts irreversible risk.** Regardless of `allow_gates`, the
|
|
413
|
+
workflow pauses on: destructive data migration · auth/authz boundary change · public
|
|
414
|
+
API break · external-service contract change · filesystem destruction outside the
|
|
415
|
+
workspace · red tests / types / lint at slice end. The same `blocking` + `escalating`
|
|
416
|
+
gates always pause in AFK too — `allow_gates` only widens what's automatic, not what's
|
|
417
|
+
irreversible.
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Run unattended for the next stretch:
|
|
421
|
+
echo 'max_slices: 10' > .devrites/AFK
|
|
422
|
+
echo 'notify: "ntfy.sh/my-topic"' >> .devrites/AFK
|
|
423
|
+
|
|
424
|
+
# Back to HITL:
|
|
425
|
+
rm .devrites/AFK
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
Recommended progression: start HITL, refine the prompt and plan over a few slices, then
|
|
429
|
+
drop the sentinel for the bulk stretch. Always cap iterations. Full contract:
|
|
430
|
+
[`pack/.claude/rules/afk-hitl.md`](pack/.claude/rules/afk-hitl.md).
|
|
431
|
+
|
|
432
|
+
## Typical workflow
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
# start a feature
|
|
436
|
+
/rite-spec add-csv-export # investigate deeply → spec.md (asks you; gathers design refs)
|
|
437
|
+
/rite-define # spec → plan.md + tasks.md + state.md
|
|
438
|
+
|
|
439
|
+
# build loop — one slice at a time
|
|
440
|
+
/rite-build # slice 1, stops with evidence
|
|
441
|
+
/rite-build # slice 2 ... repeat for each slice
|
|
442
|
+
/rite-prove # ONCE all slices built: full tests + browser proof
|
|
443
|
+
|
|
444
|
+
# finish
|
|
445
|
+
/rite-polish # code polish always + UI normalize/polish if UI in scope
|
|
446
|
+
/rite-review # feature-scoped multi-axis (parallel Spec + Standards)
|
|
447
|
+
/rite-seal # GO / NO-GO decision → writes seal.md (no git)
|
|
448
|
+
/rite-ship # on GO: type-GO + commit/push/tag, then archive + close the task
|
|
449
|
+
|
|
450
|
+
# or run the whole cycle unattended
|
|
451
|
+
/rite-autocomplete # spec → … → seal → ship with no per-phase iteration (--ship to push)
|
|
452
|
+
|
|
453
|
+
# check in any time
|
|
454
|
+
/rite # menu + next command (no state read)
|
|
455
|
+
/rite-status # full status: phase, evidence, drift, handoff readiness
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
If implementation reveals the plan is wrong, the **Spec Drift Guard** stops
|
|
459
|
+
the build, records the drift in `drift.md`, asks you when product behavior
|
|
460
|
+
changes, and routes through `/rite-plan repair` before resuming.
|
|
461
|
+
|
|
462
|
+
Worked examples (spec-then-plan, mid-build drift, UI feature with
|
|
463
|
+
browser-harness, backend-only, polish modes, zoom-out, mid-flight handoff):
|
|
464
|
+
**[docs/usage.md](docs/usage.md)**.
|
|
465
|
+
|
|
466
|
+
## Engineering rules
|
|
467
|
+
|
|
468
|
+
DevRites ships its own stack-agnostic engineering rules and installs them to
|
|
469
|
+
`.claude/rules/` — 16 rule files plus a README index. They're **common** by design
|
|
470
|
+
(no language assumptions); a project's own conventions always win where they exist.
|
|
471
|
+
Skip them with `--no-rules`. Loading model: each `rite-*` skill Reads
|
|
472
|
+
`.claude/rules/core.md` as its first step; the other 15 rule files load on
|
|
473
|
+
demand via `Read` from the skill body that needs them.
|
|
474
|
+
|
|
475
|
+
| Always-on | On-demand |
|
|
476
|
+
|---|---|
|
|
477
|
+
| `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` |
|
|
478
|
+
|
|
479
|
+
Full index with phase mapping: [`pack/.claude/rules/README.md`](pack/.claude/rules/README.md);
|
|
480
|
+
diagram: [`docs/flow.md` § Engineering-rules loading](docs/flow.md#6-engineering-rules-carrier).
|
|
481
|
+
|
|
482
|
+
## Browser proof ladder
|
|
483
|
+
|
|
484
|
+
For UI work DevRites prefers real runtime evidence, top-down: **browser-harness** (if
|
|
485
|
+
installed) → **Chrome DevTools MCP** → Claude Code **`/run`+`/verify`** → **project-native
|
|
486
|
+
E2E** (Playwright / Cypress / Capybara) → **manual fallback**. It detects tooling but
|
|
487
|
+
never installs it, stops at auth walls, and treats a screenshot **path** as unproven
|
|
488
|
+
until it's opened and described.
|
|
489
|
+
|
|
490
|
+
## Frontend & fullstack
|
|
491
|
+
|
|
492
|
+
UI work is **planned before it's coded**. When `/rite-spec` detects UI, `devrites-ux-shape`
|
|
493
|
+
turns the request + any references (screenshots, Figma, video) into a feature-level
|
|
494
|
+
**`design-brief.md`** — design direction (color strategy · scene sentence · named anchor
|
|
495
|
+
references), key states, interaction model, and an optional Figma/image **visual-direction
|
|
496
|
+
probe** — and pauses for you to confirm the direction (HITL) or asserts a best guess (AFK).
|
|
497
|
+
That brief is the **build target**, woven into spec → define → build, not a separate phase.
|
|
498
|
+
|
|
499
|
+
Then `devrites-frontend-craft` builds **to** the brief: detect the surface register (brand
|
|
500
|
+
vs product), refine the brief per slice (all states — default / loading / empty / error /
|
|
501
|
+
success / disabled), build from the existing design system, avoid generic-AI tells, and
|
|
502
|
+
meet the **2026 quality bar** — Core Web Vitals (LCP ≤ 2.5 s / INP ≤ 200 ms / CLS ≤ 0.1)
|
|
503
|
+
and WCAG 2.2 AA. **Fullstack features** go **contract-first**: define the API/data contract, build
|
|
504
|
+
one **vertical slice** through the layers (DB → service → API → UI), apply the
|
|
505
|
+
engineering rules to the backend and the craft to the UI, map every contract error to a
|
|
506
|
+
real UI state, and **prove both layers** (contract tests + browser proof).
|
|
507
|
+
|
|
508
|
+
## Safety & scope
|
|
509
|
+
|
|
510
|
+
- **Project-local only.** Never writes to `~/.claude`. Manifest-managed install/uninstall.
|
|
511
|
+
- **Feature scope only.** Review/simplify/polish/security stay within the active feature
|
|
512
|
+
and touched files — no project-wide refactors, no drive-by cleanup.
|
|
513
|
+
- **One slice at a time.** `/rite-build` stops after a single verified slice.
|
|
514
|
+
- **Evidence over confidence.** Claims need recorded commands, output, or screenshots.
|
|
515
|
+
- **Ask before danger.** Material assumptions, dependency additions, a second design
|
|
516
|
+
system, destructive operations, and product-behavior changes are surfaced, not assumed.
|
|
517
|
+
|
|
518
|
+
## Layout
|
|
519
|
+
|
|
520
|
+
```
|
|
521
|
+
devrites/
|
|
522
|
+
.claude-plugin/ # plugin.json + marketplace.json (claude plugin install path)
|
|
523
|
+
.github/ # workflows/ (ci, release, dependabot-auto-merge) + dependabot.yml
|
|
524
|
+
.husky/ # commit-msg hook (Conventional Commits via commitlint)
|
|
525
|
+
.releaserc.json # semantic-release config (CHANGELOG, version sync, tarball, GitHub Release)
|
|
526
|
+
install.sh uninstall.sh update.sh
|
|
527
|
+
scripts/ # install-lib · validate · validate-frontmatter · run-evals · eval-runner.py
|
|
528
|
+
# grade-feature · run-outcome-evals · devrites-detect · check-no-global-writes
|
|
529
|
+
# sync-version · build-release-tarball
|
|
530
|
+
mcp/ # devrites-mcp.mjs — MCP stdio server over the devrites CLI
|
|
531
|
+
pack/.claude/ # skills/ 31 skills — 22 public + 9 model-invoked ─┐
|
|
532
|
+
# agents/ 10 reviewers + 1 writer (slice-wright) ├─ the pack
|
|
533
|
+
# rules/ 16 rule files + README index ┘
|
|
534
|
+
evals/ # trigger evals (20/skill) + golden/ outcome-eval fixtures
|
|
535
|
+
docs/ # architecture · skills · command-map · usage · flow · release · cli-mcp
|
|
536
|
+
internal/ # research, development notes (gitignored)
|
|
537
|
+
tests/ # install/uninstall smoke · install fixture · pack validation
|
|
538
|
+
dist/ # release tarballs built by semantic-release (gitignored)
|
|
539
|
+
CHANGELOG.md SECURITY.md CODE_OF_CONDUCT.md CODEOWNERS NOTICE.md LICENSE
|
|
540
|
+
package.json commitlint.config.js # husky/commitlint/semantic-release toolchain
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
Cross-links: [architecture](docs/architecture.md) ·
|
|
544
|
+
[skills catalogue](docs/skills.md) ·
|
|
545
|
+
[command-map](docs/command-map.md) ·
|
|
546
|
+
[flow diagrams](docs/flow.md) ·
|
|
547
|
+
[usage](docs/usage.md) ·
|
|
548
|
+
[release pipeline](docs/release.md) ·
|
|
549
|
+
[CLI & MCP](docs/cli-mcp.md) ·
|
|
550
|
+
[engineering rules](pack/.claude/rules/README.md).
|
|
551
|
+
|
|
552
|
+
## Security model
|
|
553
|
+
|
|
554
|
+
DevRites is auditable Markdown + a small set of shell scripts. The complete security
|
|
555
|
+
policy, including private vulnerability reporting and recommended managed-deployment
|
|
556
|
+
settings, lives in [`SECURITY.md`](SECURITY.md). Highlights: **project-local only**
|
|
557
|
+
(installer refuses any target under `~/.claude`); **no network access** in installer or
|
|
558
|
+
skills (no remote code execution); **`!` shell injection removed** from `/rite` and
|
|
559
|
+
`/rite-status` (state loaded via a `Bash`-invoked script that reads only DevRites' own
|
|
560
|
+
state under `.devrites/`); **auto-trigger** is a deliberate design choice mitigated by
|
|
561
|
+
body discipline + readiness gates + the interactive `type-GO` confirmation in `/rite-ship`
|
|
562
|
+
before irreversible git actions; **no `defaultMode: bypassPermissions`** is shipped or
|
|
563
|
+
written by the installer (cf. CVE-2026-33068).
|
|
564
|
+
|
|
565
|
+
## Community & quality
|
|
566
|
+
|
|
567
|
+
- **Changelog:** [`CHANGELOG.md`](CHANGELOG.md) — Keep-a-Changelog + SemVer, regenerated by semantic-release on every release.
|
|
568
|
+
- **Code of conduct:** [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) (Contributor Covenant 2.1).
|
|
569
|
+
- **Code owners:** [`CODEOWNERS`](CODEOWNERS) — review required on `pack/`, `scripts/`, `install.sh`, `uninstall.sh`, `.claude-plugin/`.
|
|
570
|
+
- **Notices:** [`NOTICE.md`](NOTICE.md).
|
|
571
|
+
- **CI:** GitHub Actions runs `scripts/validate.sh`, install/uninstall smoke, fixture install, commitlint, and the eval suite on every PR.
|
|
572
|
+
- **Commits:** Conventional Commits enforced via husky + commitlint.
|
|
573
|
+
- **Release pipeline:** semantic-release on every push to `main` — full details in [`docs/release.md`](docs/release.md).
|
|
574
|
+
|
|
575
|
+
## License
|
|
576
|
+
|
|
577
|
+
**Free to use, with approval gating redistribution.** Personal use and *listing this
|
|
578
|
+
repository in plugin marketplaces* are permitted without approval. Any other use —
|
|
579
|
+
distributing it, distributing modified versions, mirroring as a fork, or commercial /
|
|
580
|
+
organizational use — requires **approval on request** (ask via
|
|
581
|
+
[the repo](https://github.com/ViktorsBaikers/DevRites)). Source-available. See
|
|
582
|
+
[`LICENSE`](LICENSE). DevRites is independent software for use with Claude Code.
|