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.
Files changed (232) hide show
  1. package/.claude-plugin/marketplace.json +24 -0
  2. package/.claude-plugin/plugin.json +43 -0
  3. package/CHANGELOG.md +391 -0
  4. package/LICENSE +56 -0
  5. package/NOTICE.md +18 -0
  6. package/README.md +582 -0
  7. package/SECURITY.md +193 -0
  8. package/bin/devrites.mjs +100 -0
  9. package/docs/architecture.md +272 -0
  10. package/docs/cli-mcp.md +57 -0
  11. package/docs/command-map.md +143 -0
  12. package/docs/flow.md +360 -0
  13. package/docs/release.md +29 -0
  14. package/docs/skills.md +214 -0
  15. package/docs/usage.md +325 -0
  16. package/install.sh +359 -0
  17. package/mcp/devrites-mcp.mjs +103 -0
  18. package/pack/.claude/agents/devrites-code-reviewer.md +50 -0
  19. package/pack/.claude/agents/devrites-doubt-reviewer.md +55 -0
  20. package/pack/.claude/agents/devrites-frontend-reviewer.md +52 -0
  21. package/pack/.claude/agents/devrites-performance-reviewer.md +47 -0
  22. package/pack/.claude/agents/devrites-plan-reviewer.md +79 -0
  23. package/pack/.claude/agents/devrites-security-auditor.md +53 -0
  24. package/pack/.claude/agents/devrites-simplifier-reviewer.md +75 -0
  25. package/pack/.claude/agents/devrites-slice-wright.md +181 -0
  26. package/pack/.claude/agents/devrites-spec-reviewer.md +72 -0
  27. package/pack/.claude/agents/devrites-strategy-reviewer.md +62 -0
  28. package/pack/.claude/agents/devrites-test-analyst.md +47 -0
  29. package/pack/.claude/hooks/devrites-a1-guard.sh +81 -0
  30. package/pack/.claude/hooks/devrites-allow.sh +44 -0
  31. package/pack/.claude/hooks/devrites-cursor.sh +28 -0
  32. package/pack/.claude/hooks/devrites-orient.sh +53 -0
  33. package/pack/.claude/hooks/devrites-redwatch.sh +39 -0
  34. package/pack/.claude/hooks/devrites-refresh-indexes.sh +127 -0
  35. package/pack/.claude/hooks/devrites-reviewer-readonly.sh +28 -0
  36. package/pack/.claude/hooks/devrites-statusline.sh +18 -0
  37. package/pack/.claude/hooks/devrites-stop-gate.sh +45 -0
  38. package/pack/.claude/hooks/devrites-wright-scope.sh +35 -0
  39. package/pack/.claude/hooks/hooks.json +52 -0
  40. package/pack/.claude/rules/README.md +48 -0
  41. package/pack/.claude/rules/afk-hitl.md +245 -0
  42. package/pack/.claude/rules/agents.md +98 -0
  43. package/pack/.claude/rules/anti-patterns.md +48 -0
  44. package/pack/.claude/rules/code-review.md +38 -0
  45. package/pack/.claude/rules/coding-style.md +55 -0
  46. package/pack/.claude/rules/context-hygiene.md +97 -0
  47. package/pack/.claude/rules/core.md +119 -0
  48. package/pack/.claude/rules/development-workflow.md +40 -0
  49. package/pack/.claude/rules/documentation.md +27 -0
  50. package/pack/.claude/rules/error-handling.md +33 -0
  51. package/pack/.claude/rules/git-workflow.md +35 -0
  52. package/pack/.claude/rules/hooks.md +38 -0
  53. package/pack/.claude/rules/patterns.md +45 -0
  54. package/pack/.claude/rules/performance.md +27 -0
  55. package/pack/.claude/rules/prose-style.md +101 -0
  56. package/pack/.claude/rules/security.md +63 -0
  57. package/pack/.claude/rules/testing.md +88 -0
  58. package/pack/.claude/rules/tooling.md +72 -0
  59. package/pack/.claude/settings.json +53 -0
  60. package/pack/.claude/skills/devrites-api-interface/SKILL.md +45 -0
  61. package/pack/.claude/skills/devrites-audit/SKILL.md +73 -0
  62. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +38 -0
  63. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +50 -0
  64. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +47 -0
  65. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
  66. package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  67. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  68. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +31 -0
  69. package/pack/.claude/skills/devrites-doubt/SKILL.md +75 -0
  70. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +96 -0
  71. package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +59 -0
  72. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  73. package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
  74. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +215 -0
  75. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
  76. package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +60 -0
  77. package/pack/.claude/skills/devrites-interview/SKILL.md +81 -0
  78. package/pack/.claude/skills/devrites-lib/SKILL.md +76 -0
  79. package/pack/.claude/skills/devrites-lib/scripts/analyze.sh +78 -0
  80. package/pack/.claude/skills/devrites-lib/scripts/check-acceptance.sh +75 -0
  81. package/pack/.claude/skills/devrites-lib/scripts/close-out.sh +47 -0
  82. package/pack/.claude/skills/devrites-lib/scripts/conventions.py +273 -0
  83. package/pack/.claude/skills/devrites-lib/scripts/coverage.sh +51 -0
  84. package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +69 -0
  85. package/pack/.claude/skills/devrites-lib/scripts/doctor.sh +92 -0
  86. package/pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh +63 -0
  87. package/pack/.claude/skills/devrites-lib/scripts/footprint.sh +45 -0
  88. package/pack/.claude/skills/devrites-lib/scripts/learnings.sh +74 -0
  89. package/pack/.claude/skills/devrites-lib/scripts/mutation-gate.sh +52 -0
  90. package/pack/.claude/skills/devrites-lib/scripts/package-existence.sh +68 -0
  91. package/pack/.claude/skills/devrites-lib/scripts/preamble.sh +76 -0
  92. package/pack/.claude/skills/devrites-lib/scripts/progress.sh +103 -0
  93. package/pack/.claude/skills/devrites-lib/scripts/readiness.sh +62 -0
  94. package/pack/.claude/skills/devrites-lib/scripts/reconcile.sh +123 -0
  95. package/pack/.claude/skills/devrites-lib/scripts/resolve.sh +279 -0
  96. package/pack/.claude/skills/devrites-lib/scripts/stuck.sh +67 -0
  97. package/pack/.claude/skills/devrites-lib/scripts/test-integrity.sh +87 -0
  98. package/pack/.claude/skills/devrites-lib/scripts/tick-afk.sh +52 -0
  99. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +105 -0
  100. package/pack/.claude/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
  101. package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +88 -0
  102. package/pack/.claude/skills/devrites-prose-craft/reference/structures.md +134 -0
  103. package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +54 -0
  104. package/pack/.claude/skills/devrites-source-driven/SKILL.md +36 -0
  105. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +121 -0
  106. package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +93 -0
  107. package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  108. package/pack/.claude/skills/rite/SKILL.md +135 -0
  109. package/pack/.claude/skills/rite/reference/menu.md +32 -0
  110. package/pack/.claude/skills/rite-adopt/SKILL.md +83 -0
  111. package/pack/.claude/skills/rite-adopt/reference/adoption.md +58 -0
  112. package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +19 -0
  113. package/pack/.claude/skills/rite-autocomplete/SKILL.md +96 -0
  114. package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +35 -0
  115. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +54 -0
  116. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
  117. package/pack/.claude/skills/rite-build/SKILL.md +261 -0
  118. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +145 -0
  119. package/pack/.claude/skills/rite-build/reference/anti-patterns.md +25 -0
  120. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +149 -0
  121. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +32 -0
  122. package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +39 -0
  123. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +38 -0
  124. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +43 -0
  125. package/pack/.claude/skills/rite-build/reference/tdd.md +26 -0
  126. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +115 -0
  127. package/pack/.claude/skills/rite-define/SKILL.md +157 -0
  128. package/pack/.claude/skills/rite-define/reference/anti-patterns.md +25 -0
  129. package/pack/.claude/skills/rite-define/reference/gates.md +152 -0
  130. package/pack/.claude/skills/rite-define/reference/plan-template.md +65 -0
  131. package/pack/.claude/skills/rite-doctor/SKILL.md +50 -0
  132. package/pack/.claude/skills/rite-frame/SKILL.md +116 -0
  133. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +68 -0
  134. package/pack/.claude/skills/rite-handoff/SKILL.md +95 -0
  135. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +34 -0
  136. package/pack/.claude/skills/rite-learn/SKILL.md +82 -0
  137. package/pack/.claude/skills/rite-plan/SKILL.md +82 -0
  138. package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +24 -0
  139. package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +33 -0
  140. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +42 -0
  141. package/pack/.claude/skills/rite-plan/reference/slicing.md +52 -0
  142. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +34 -0
  143. package/pack/.claude/skills/rite-polish/SKILL.md +90 -0
  144. package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +177 -0
  145. package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +27 -0
  146. package/pack/.claude/skills/rite-polish/reference/backend-polish.md +80 -0
  147. package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
  148. package/pack/.claude/skills/rite-polish/reference/code.md +85 -0
  149. package/pack/.claude/skills/rite-polish/reference/design-system-discovery.md +35 -0
  150. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +109 -0
  151. package/pack/.claude/skills/rite-polish/reference/ui.md +136 -0
  152. package/pack/.claude/skills/rite-pressure-test/SKILL.md +43 -0
  153. package/pack/.claude/skills/rite-prototype/SKILL.md +87 -0
  154. package/pack/.claude/skills/rite-prove/SKILL.md +120 -0
  155. package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +25 -0
  156. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +26 -0
  157. package/pack/.claude/skills/rite-prove/reference/failure-triage.md +25 -0
  158. package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +26 -0
  159. package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +30 -0
  160. package/pack/.claude/skills/rite-quick/SKILL.md +81 -0
  161. package/pack/.claude/skills/rite-resolve/SKILL.md +113 -0
  162. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +114 -0
  163. package/pack/.claude/skills/rite-review/SKILL.md +170 -0
  164. package/pack/.claude/skills/rite-review/reference/anti-patterns.md +32 -0
  165. package/pack/.claude/skills/rite-review/reference/cognitive-load.md +90 -0
  166. package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +26 -0
  167. package/pack/.claude/skills/rite-review/reference/five-axis-review.md +46 -0
  168. package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +130 -0
  169. package/pack/.claude/skills/rite-review/reference/parallel-dispatch.md +62 -0
  170. package/pack/.claude/skills/rite-review/reference/performance-review.md +28 -0
  171. package/pack/.claude/skills/rite-review/reference/security-review.md +32 -0
  172. package/pack/.claude/skills/rite-seal/SKILL.md +183 -0
  173. package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +27 -0
  174. package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +63 -0
  175. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +72 -0
  176. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +37 -0
  177. package/pack/.claude/skills/rite-seal/reference/parallel-dispatch.md +69 -0
  178. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +30 -0
  179. package/pack/.claude/skills/rite-seal/reference/seal-template.md +36 -0
  180. package/pack/.claude/skills/rite-ship/SKILL.md +120 -0
  181. package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +25 -0
  182. package/pack/.claude/skills/rite-ship/reference/close-out.md +31 -0
  183. package/pack/.claude/skills/rite-ship/reference/design-memory.md +120 -0
  184. package/pack/.claude/skills/rite-ship/reference/git-ship.md +42 -0
  185. package/pack/.claude/skills/rite-ship/reference/ship-template.md +33 -0
  186. package/pack/.claude/skills/rite-spec/SKILL.md +126 -0
  187. package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  188. package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +25 -0
  189. package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +56 -0
  190. package/pack/.claude/skills/rite-spec/reference/investigation.md +64 -0
  191. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +61 -0
  192. package/pack/.claude/skills/rite-spec/reference/references-intake.md +57 -0
  193. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +73 -0
  194. package/pack/.claude/skills/rite-spec/reference/spec-template.md +124 -0
  195. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +159 -0
  196. package/pack/.claude/skills/rite-status/SKILL.md +101 -0
  197. package/pack/.claude/skills/rite-temper/SKILL.md +119 -0
  198. package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +29 -0
  199. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +65 -0
  200. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +53 -0
  201. package/pack/.claude/skills/rite-temper/reference/significance.md +46 -0
  202. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +90 -0
  203. package/pack/.claude/skills/rite-vet/SKILL.md +155 -0
  204. package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +29 -0
  205. package/pack/.claude/skills/rite-vet/reference/artifacts.md +135 -0
  206. package/pack/.claude/skills/rite-vet/reference/cross-model.md +41 -0
  207. package/pack/.claude/skills/rite-vet/reference/depth.md +53 -0
  208. package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +48 -0
  209. package/pack/.claude/skills/rite-vet/reference/review-axes.md +167 -0
  210. package/pack/.claude/skills/rite-zoom-out/SKILL.md +75 -0
  211. package/package.json +68 -0
  212. package/scripts/build-release-tarball.sh +74 -0
  213. package/scripts/check-cross-refs.py +121 -0
  214. package/scripts/check-no-global-writes.sh +44 -0
  215. package/scripts/check-rule-uniqueness.sh +73 -0
  216. package/scripts/devrites-detect.sh +175 -0
  217. package/scripts/eval-runner.py +273 -0
  218. package/scripts/grade-feature.sh +104 -0
  219. package/scripts/install-lib.sh +83 -0
  220. package/scripts/pin.sh +166 -0
  221. package/scripts/render-eval-summary.py +48 -0
  222. package/scripts/run-evals.sh +149 -0
  223. package/scripts/run-outcome-evals.sh +49 -0
  224. package/scripts/scan-pack-security.py +209 -0
  225. package/scripts/scan-supply-chain-iocs.py +127 -0
  226. package/scripts/supply-chain-iocs.json +11 -0
  227. package/scripts/sync-version.sh +56 -0
  228. package/scripts/validate-frontmatter.py +149 -0
  229. package/scripts/validate-workflow-security.py +86 -0
  230. package/scripts/validate.sh +234 -0
  231. package/uninstall.sh +137 -0
  232. 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.