devrites 3.0.3 → 3.0.5

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 (59) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +55 -43
  3. package/SECURITY.md +72 -58
  4. package/docs/adr/0001-go-engine-as-control-plane.md +43 -0
  5. package/docs/adr/0002-dual-host-harness.md +34 -0
  6. package/docs/adr/0003-gate-model-hitl-pause.md +38 -0
  7. package/docs/adr/0004-state-schema-phases-sections.md +6 -3
  8. package/docs/adr/0005-hooks-as-engine-subcommands.md +39 -0
  9. package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +50 -0
  10. package/docs/adr/0007-canonical-live-workspace-filenames.md +36 -0
  11. package/docs/adr/0008-sanctioned-engine-network-boundary.md +33 -0
  12. package/docs/adr/README.md +58 -0
  13. package/docs/agents/issue-driven-rites.md +5 -5
  14. package/docs/architecture.md +61 -45
  15. package/docs/capability-surface-selection.md +3 -1
  16. package/docs/cli.md +9 -2
  17. package/docs/command-map.md +6 -2
  18. package/docs/engine/agent-contract.md +5 -3
  19. package/docs/engine/commands.md +27 -14
  20. package/docs/engine/state-schema.md +14 -9
  21. package/docs/engine/workspace-schema.md +5 -4
  22. package/docs/flow.md +18 -7
  23. package/docs/porting-to-a-new-harness.md +6 -2
  24. package/docs/release.md +10 -9
  25. package/docs/skills.md +1 -1
  26. package/docs/templates/CRITIC_REVIEW_PACKET_TEMPLATE.md +35 -0
  27. package/docs/usage.md +26 -16
  28. package/engine/internal/lib/packageexistence.go +729 -52
  29. package/engine/internal/lib/packageexistence_test.go +343 -0
  30. package/engine/internal/lib/util.go +1 -1
  31. package/engine/internal/migrate/migrate.go +16 -11
  32. package/engine/internal/migrate/migrate_test.go +26 -4
  33. package/engine/internal/state/feature.go +28 -14
  34. package/engine/internal/state/schema.go +20 -8
  35. package/engine/internal/state/state_test.go +6 -6
  36. package/engine/tests/budget_test.go +2 -2
  37. package/engine/tests/meta_test.go +3 -3
  38. package/engine/tests/migrate_cli_test.go +24 -22
  39. package/pack/.claude/skills/devrites-lib/SKILL.md +7 -9
  40. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +11 -3
  41. package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
  42. package/pack/.claude/skills/rite/SKILL.md +6 -7
  43. package/pack/.claude/skills/rite/reference/menu.md +5 -5
  44. package/pack/.claude/skills/rite-adopt/SKILL.md +2 -3
  45. package/pack/generated/claude/skills/devrites-lib/SKILL.md +7 -9
  46. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +11 -3
  47. package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
  48. package/pack/generated/claude/skills/rite/SKILL.md +6 -7
  49. package/pack/generated/claude/skills/rite/reference/menu.md +5 -5
  50. package/pack/generated/claude/skills/rite-adopt/SKILL.md +2 -3
  51. package/pack/generated/codex/skills/devrites-lib/SKILL.md +7 -9
  52. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +11 -3
  53. package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +2 -3
  54. package/pack/generated/codex/skills/rite/SKILL.md +6 -7
  55. package/pack/generated/codex/skills/rite/reference/menu.md +5 -5
  56. package/pack/generated/codex/skills/rite-adopt/SKILL.md +2 -3
  57. package/package.json +2 -1
  58. package/scripts/skills-inventory.mjs +18 -0
  59. package/scripts/validate-workflow-security.py +3 -8
@@ -52,11 +52,13 @@ proven contract is shared, not per-clone. Grammar and delta rules:
52
52
 
53
53
  Backward compatibility: `.devrites/features/<slug>/` remains readable as a legacy
54
54
  workspace location. `feature.md` / `index.md` may stand in for `README.md`, and
55
- `proof.md` may stand in for `evidence.md`.
55
+ `status.md` may stand in for `state.md`, while `proof.md` may stand in for
56
+ `evidence.md`.
56
57
 
57
- ### `feature.md`
58
+ ### Workspace maps
58
59
 
59
- The per-feature index. Its YAML frontmatter carries:
60
+ The canonical per-feature index is `README.md`; `feature.md` and `index.md` are
61
+ readable aliases. A map may carry YAML frontmatter with:
60
62
 
61
63
  | field | meaning |
62
64
  | --------------- | ---------------------------------------------- |
@@ -65,9 +67,9 @@ The per-feature index. Its YAML frontmatter carries:
65
67
  | `phase` | current workflow phase (see below) |
66
68
  | `schemaVersion` | schema version the file was written against |
67
69
 
68
- A feature exists when it has either a live `state.md` ledger or the transitional
69
- `feature.md` manifest. The mutable `state.md` cursor is authoritative when both
70
- declare a phase; an unknown declared phase is an error.
70
+ A feature exists when it has either a live `state.md` ledger or a workspace map.
71
+ The mutable `state.md` cursor is authoritative when both declare a phase; an
72
+ unknown declared phase is an error.
71
73
 
72
74
  ## Sections
73
75
 
@@ -127,9 +129,12 @@ result: incomplete (missing: tasks)
127
129
  does not gate — gating is issue 04).
128
130
  - Unknown or missing slug → non-zero exit with a clear message on stderr.
129
131
 
130
- The engine makes **zero model or network calls**; `status` is a pure read of the
131
- files under `DEVRITES_ROOT` (or the nearest `.devrites/` above the working
132
- directory). A hand edit wins immediately because there is no status cache.
132
+ `status` makes no model or network calls; it is a pure read of the files under
133
+ `DEVRITES_ROOT` (or the nearest `.devrites/` above the working directory). A
134
+ hand edit wins immediately because there is no status cache. Other workspace
135
+ control-plane commands share that deterministic boundary; explicit
136
+ install/update/source-cache I/O is isolated under `engine/internal/iohooks` as
137
+ defined by ADR-0008.
133
138
 
134
139
  `.devrites/` is ignored **except** the capability ledger at `specs/`, which is
135
140
  committed shared truth — the recommended pattern is `.devrites/*` +
@@ -34,7 +34,7 @@ Canonical live workspace:
34
34
  plan.md # technical approach and slice strategy
35
35
  tasks.md # vertical slices
36
36
  traceability.md # AC/REQ -> slices -> tests/evidence/files matrix
37
- state.md # compact cursor
37
+ state.md # compact cursor; status.md alias allowed
38
38
  evidence.md # command/action proof; proof.md alias allowed
39
39
  browser-evidence.md # optional UI/runtime browser proof
40
40
  drift.md # optional spec/plan drift register
@@ -49,8 +49,9 @@ Canonical live workspace:
49
49
 
50
50
  Backward compatibility: `.devrites/features/<slug>/` remains readable as an alias
51
51
  for `.devrites/work/<slug>/`; `feature.md` and `index.md` remain valid workspace
52
- maps; `proof.md` remains a proof alias for `evidence.md`. Migration should add the
53
- canonical files without deleting aliases.
52
+ maps; `status.md` remains a cursor alias for `state.md`; `proof.md` remains a
53
+ proof alias for `evidence.md`. Migration should add the canonical files without
54
+ deleting aliases.
54
55
 
55
56
  ## Read Order
56
57
 
@@ -80,7 +81,7 @@ canonical files without deleting aliases.
80
81
  | `plan.md` | required from plan | `/rite-define` | implementation approach | 220 lines | Approach, Slice strategy, Validation strategy, Rollback | HOW lives here, not in `spec.md`. `Validation strategy` names the Key links — cross-slice wiring `/rite-prove` walks (or `none` for single-slice features). |
81
82
  | `tasks.md` | required from plan | `/rite-define` | build one slice | 280 lines | Slice index | Each `SLICE-###` has goal, AC IDs, likely files, tests/proof, mode, gate, dependencies, done condition. |
82
83
  | `traceability.md` | required from plan | `/rite-define` | coverage/review/seal | 220 lines | Coverage matrix | Matrix maps AC/REQ ID, slice IDs, test/proof, evidence ID, touched files, status. |
83
- | `state.md` | required | all phases | current cursor | 120 lines | Cursor | Compact table/key-value cursor; not an append-only narrative. |
84
+ | `state.md` / `status.md` | required | all phases | current cursor | 120 lines | Cursor | `state.md` is canonical; `status.md` is a compatibility alias. Compact table/key-value cursor; not an append-only narrative. |
84
85
  | `evidence.md` / `proof.md` | required from prove | `/rite-build`, `/rite-prove` | proof and seal | 280 lines | Evidence log | `EVID-###`, command/action, result, related AC/slice IDs, limitations. Each acceptance criterion carries a proof class — `test` / `command` / `browser` / `judgment` (untagged reads `judgment`; `judgment` needs its one-line why). |
85
86
  | `browser-evidence.md` | UI only | `/rite-prove`, `/rite-polish` | UI/browser proof | 220 lines | Browser evidence, Visual Verdict | Must reference real route/viewports/actions and related IDs. |
86
87
  | `drift.md` | drift only | Spec Drift Guard | spec/plan reality mismatch | 160 lines | Drift register | `DRIFT-###`, status, evidence found, resolution, related IDs. |
package/docs/flow.md CHANGED
@@ -10,22 +10,26 @@ For the full per-skill table, see [`command-map.md`](command-map.md). For the
10
10
 
11
11
  The happy path. Every arrow assumes the readiness gate of the previous phase
12
12
  passed; failures route through `/rite-plan repair` or `devrites-debug-recovery`.
13
- HITL slices pause before code is written; `/rite-resolve` is the resume verb.
13
+ `/rite-temper` is the optional strategic branch; `/rite-vet` runs on every
14
+ defined plan, with depth scaled to risk. HITL slices pause before code is
15
+ written; `/rite-resolve` is the resume verb.
14
16
 
15
17
  ```mermaid
16
18
  flowchart LR
17
19
  Start([user has an idea]) --> Spec[/rite-spec/]
18
20
  Spec -.->|UI detected| Shape[devrites-ux-shape<br/>plan UX/UI → design-brief.md]
19
21
  Shape -.->|brief confirmed| Spec
22
+ Spec -.->|big / risky| Temper[/rite-temper/] -.->|strategy.md| Define
20
23
  Spec -->|spec.md ready| Define[/rite-define/]
21
- Define -->|plan.md + tasks.md<br/>each slice tagged AFK/HITL| Build[/rite-build/]
24
+ Define -->|plan.md + tasks.md<br/>each slice tagged AFK/HITL| Vet[/rite-vet/]
25
+ Vet -->|every plan; light or full<br/>eng-review.md + test-plan.md| Build[/rite-build/]
22
26
  Build -->|one slice done<br/>+ evidence| Build
23
27
  Build -.->|"Forge: yes slice"| Forge[forge: K candidates<br/>→ devrites-forge-judge → 1 winner]
24
28
  Forge -.->|winner lands<br/>forge-report.md| Build
25
29
  Build -->|HITL gate fires| Await{{Awaiting human<br/>state.md + questions.md}}
26
30
  Await -->|"/rite-resolve &lt;qid&gt; &lt;answer&gt;"| Build
27
31
  Build -->|all slices built| Prove[/rite-prove/]
28
- Define -.->|resumed / adopted / stalled<br/>code vs intent| Converge[/rite-converge/]
32
+ Build -.->|resumed / adopted / stalled<br/>code vs intent| Converge[/rite-converge/]
29
33
  Converge -.->|appends remaining slices| Build
30
34
  Prove -->|evidence captured| Polish[/rite-polish/]
31
35
  Polish -->|polish-report.md| Review[/rite-review/]
@@ -45,7 +49,7 @@ flowchart LR
45
49
  classDef repair fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
46
50
  classDef gate fill:#4c1d95,stroke:#a78bfa,color:#f5f3ff
47
51
  classDef internal fill:#0f172a,stroke:#9ca3af,color:#f9fafb
48
- class Spec,Define,Build,Prove,Polish,Review,Seal,Ship2 phase
52
+ class Spec,Temper,Define,Vet,Build,Prove,Polish,Review,Seal,Ship2 phase
49
53
  class Shipped done
50
54
  class Repair repair
51
55
  class Await gate
@@ -291,11 +295,12 @@ The exact list of files per workspace and what each holds is in
291
295
 
292
296
  The `devrites-` prefix is collision-avoidance against bundled Claude Code
293
297
  skills (`prototype`, `handoff`, `triage`, `diagnose`). Visibility is the
294
- `user-invocable:` flag, not the prefix.
298
+ `user-invocable:` flag, not the prefix; automatic model loading is controlled
299
+ separately by `disable-model-invocation`.
295
300
 
296
301
  ```mermaid
297
302
  flowchart TB
298
- subgraph Public["Public (user-invocable: true) — 24 skills"]
303
+ subgraph Public["Public (user-invocable: true) — 30 skills"]
299
304
  direction TB
300
305
  R1[/rite/]
301
306
  R2[/rite-spec/]
@@ -304,6 +309,7 @@ flowchart TB
304
309
  RV[/rite-vet/]
305
310
  R4[/rite-plan/]
306
311
  R5[/rite-build/]
312
+ RC[/rite-converge/]
307
313
  R6[/rite-prove/]
308
314
  R7[/rite-polish/]
309
315
  R8[/rite-review/]
@@ -317,6 +323,11 @@ flowchart TB
317
323
  RA[/rite-adopt/]
318
324
  RL[/rite-learn/]
319
325
  RD[/rite-doctor/]
326
+ RE[/rite-explain/]
327
+ RCU[/rite-customize/]
328
+ RDO[/rite-dogfood/]
329
+ RPOV[/rite-pov/]
330
+ RPF[/rite-pr-feedback/]
320
331
  IPT[/rite-pressure-test/]
321
332
  D1[/rite-zoom-out/]
322
333
  D2[/rite-prototype/]
@@ -340,7 +351,7 @@ flowchart TB
340
351
 
341
352
  classDef pub fill:#064e3b,stroke:#34d399,color:#ecfdf5
342
353
  classDef int fill:#1f2937,stroke:#9ca3af,color:#f9fafb
343
- class R1,R2,RT,R3,RV,R4,R5,R6,R7,R8,R9,R12,R13,R10,R11,RQ,RF,RA,RL,RD,IPT,D1,D2,D3 pub
354
+ class R1,R2,RT,R3,RV,R4,R5,RC,R6,R7,R8,R9,R12,R13,R10,R11,RQ,RF,RA,RL,RD,RE,RCU,RDO,RPOV,RPF,IPT,D1,D2,D3 pub
344
355
  class I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12 int
345
356
  ```
346
357
 
@@ -1,6 +1,8 @@
1
1
  # Porting DevRites to a new harness
2
2
 
3
- DevRites is distributed through `npx devrites` and installs project-local artifacts. Do not add a harness through a Claude/Codex plugin or marketplace path.
3
+ DevRites' canonical distribution path is `npx devrites` (with the documented
4
+ Bash bootstrap as a Node-free alternative), and host artifacts install into the
5
+ target project. Do not add a harness through a Claude/Codex plugin or marketplace path.
4
6
 
5
7
  Before adding a host, add its thin adapter to `engine/internal/harness/harness.go`,
6
8
  update the frozen matrix in `compliance.go`, and prove the host can run DevRites
@@ -20,7 +22,9 @@ The harness must invoke DevRites and route to `/rite-spec` (or the host's explic
20
22
  - Session/project orientation runs automatically at startup/compact/resume, or the missing surface is recorded in `docs/harness-compliance.md`.
21
23
  - `devrites-engine` hooks/gates are wired, or each degraded gate has an honest fallback and confidence label.
22
24
  - Subagent support is mapped; if unavailable, reviewers/wrights use the documented inline fallback and label it.
23
- - Install, update, and uninstall paths stay project-local; no global writes.
25
+ - Skills, agents, standards, hooks, and harness guidance stay project-local;
26
+ the optional shared `devrites-engine` executable is the sole sanctioned
27
+ global artifact and must remain skippable with `--no-binary`.
24
28
  - Generated artifacts and `docs/harness-compliance.md` are updated from the same source of truth.
25
29
  - Routing eval includes the React todo-list acceptance prompt.
26
30
 
package/docs/release.md CHANGED
@@ -1,15 +1,16 @@
1
1
  # Release pipeline
2
2
 
3
- Releases are **fully automated** via [semantic-release](https://semantic-release.gitbook.io/): every push to `main` is analyzed; if the merged commits carry a `feat:`, `fix:`, `perf:`, `refactor:`, `build:`, `docs(README):` (or a `BREAKING CHANGE:` footer) the `.github/workflows/release.yml` job determines the next SemVer version and:
3
+ Releases are **fully automated** via [semantic-release](https://semantic-release.gitbook.io/): every push to `main` is analyzed; if the merged commits carry a `feat:`, `fix:`, `perf:`, `refactor:`, `build:`, `docs(README):` (or a `BREAKING CHANGE:` footer), the `release` job in [`.github/workflows/ci.yml`](../.github/workflows/ci.yml) determines the next SemVer version and:
4
4
 
5
- 1. Runs `scripts/validate.sh` + install / uninstall smoke tests.
6
- 2. Syncs the new version into `package.json` and the README status line (`scripts/sync-version.sh`).
7
- 3. Builds a `dist/devrites-v<version>.tar.gz` release artifact via `scripts/build-release-tarball.sh` the extractable bundle end-users get from the `curl | bash` installer. The bundle includes `pack/generated/` host-native Claude/Codex artifacts rendered from the canonical pack.
8
- 4. Regenerates `CHANGELOG.md` from the commits.
9
- 5. Publishes the `devrites` package to the npm registry (`@semantic-release/npm`, needs the `NPM_TOKEN` secret) this is what `npx devrites@latest` resolves. `npm pack` renders the same `pack/generated/` artifacts during `prepack`; there is no `postpack` cleanup step.
10
- 6. Commits the version bump + changelog as `chore(release): <version> [skip ci]`, creates a git tag `v<version>`, and publishes a GitHub Release with the tarball attached.
5
+ 1. Waits for the workflow's validation, full shell suite, strict Go-engine checks, Linux cross-compile smoke, and Windows Go tests.
6
+ 2. Regenerates `CHANGELOG.md` from the commits.
7
+ 3. Syncs the new version into `package.json` and the README status line (`scripts/sync-version.sh`).
8
+ 4. Builds `dist/devrites-v<version>.tar.gz` plus its SHA-256 sidecar via `scripts/build-release-tarball.sh`. The extractable bundle used by `curl | bash` includes host-native Claude/Codex artifacts regenerated from `pack/.claude/` into `pack/generated/`.
9
+ 5. Cross-compiles five `devrites-engine` release binaries (macOS arm64/amd64, Linux arm64/amd64, Windows amd64) plus a SHA-256 sidecar for each.
10
+ 6. Publishes the `devrites` package to npm (`@semantic-release/npm`, requiring `NPM_TOKEN`) this is what `npx devrites@latest` resolves. `npm pack` regenerates the same `pack/generated/` artifacts during `prepack`; there is no `postpack` cleanup step.
11
+ 7. Commits the version bump + changelog as `chore(release): <version> [skip ci]`, creates tag `v<version>`, and publishes a GitHub Release with the tarball, checksum, binaries, and binary checksum sidecars attached.
11
12
 
12
- Local dry-run: `npm run release:dry` (shows the version bump + draft notes without publishing). Before publishing, `scripts/release-check.sh` builds the evidence packet: generated pack freshness, tarball checksum presence, `npx-pack-smoke`, install/update/uninstall, `validate-pack`, behavioral eval schema, and a README/docs check that install instructions stay `npx devrites ...` only. DevRites is not shipped through Claude or Codex plugin stores. The release job is gated by passing CI — a broken `main` won't ship.
13
+ Local dry-run: `npm run release:dry` (shows the proposed version + notes without publishing). For a manual preflight, `bash scripts/release-check.sh` builds an evidence packet covering generated-pack freshness, tarball checksum presence, `npx-pack-smoke`, install/update/uninstall, `validate-pack`, behavioral-eval schema, and the documented npm distribution path. This preflight is available to maintainers but is not a hidden semantic-release step. DevRites is not shipped through Claude or Codex plugin stores. The release job is gated by passing CI — a broken `main` won't ship.
13
14
 
14
15
  ## Authoring commits that trigger releases
15
16
 
@@ -25,6 +26,6 @@ Husky + commitlint reject non-conventional messages at commit time, so you can't
25
26
 
26
27
  ## Dependency updates
27
28
 
28
- Dependabot watches the `npm` and `github-actions` ecosystems and opens a **weekly grouped PR** with all patch + minor bumps (see [`.github/dependabot.yml`](../.github/dependabot.yml)). The [`dependabot-auto-merge.yml`](../.github/workflows/dependabot-auto-merge.yml) workflow auto-approves + enables auto-merge (squash) on those PRs so they land the instant CI is green — no manual click. Major-version bumps stay open with a `needs-review` label so a human can scan the changelog before merging.
29
+ Dependabot watches the `npm` and `github-actions` ecosystems and opens **weekly grouped PRs** for routine patch + minor bumps (see [`.github/dependabot.yml`](../.github/dependabot.yml)). The [`dependabot-auto-merge.yml`](../.github/workflows/dependabot-auto-merge.yml) workflow auto-approves + enables auto-merge (squash) on those PRs so they land when required checks are green. Major-version bumps stay open with a `needs-review` label so a human can scan the changelog before merging.
29
30
 
30
31
  > GitHub does not allow Dependabot to push directly to `main` — a PR is always opened. Auto-merge is the closest equivalent. Required CI checks still gate the merge.
package/docs/skills.md CHANGED
@@ -132,7 +132,7 @@ blocks obvious multi-command `Next:` wording.
132
132
  |---|---|---|
133
133
  | [`rite-review`](../pack/.claude/skills/rite-review/SKILL.md) | Multi-axis feature-scoped review. Parallel **Spec axis** (`devrites-spec-reviewer`) + **Standards axis** (`devrites-code-reviewer`) sub-agents; severity-labeled findings. | Polish done; ready for a final pass. |
134
134
  | [`devrites-doubt`](../pack/.claude/skills/devrites-doubt/SKILL.md) | In-flight adversarial review of risky decisions — branching logic, boundaries, data/auth/API changes, migrations. | About to stand a "this is safe / scales / matches spec" claim. |
135
- | [`devrites-audit`](../pack/.claude/skills/devrites-audit/SKILL.md) | Read-only audit dispatch — picks the right reviewer subagent on the requested axis (`security` / `perf` / `simplify`). Single-axis only; multi-axis parallel fan-out lives inline in `/rite-seal` (see `rite-seal/reference/parallel-dispatch.md`). | Polish Phase 1 (`simplify`); review involves user input / auth / data / external integrations / secrets / permissions (`security`); performance is relevant or regression risk visible (`perf`). |
135
+ | [`devrites-audit`](../pack/.claude/skills/devrites-audit/SKILL.md) | Read-only audit dispatch — picks the right reviewer subagent on the requested axis (`security` / `perf` / `simplify`). Single-axis only; multi-axis parallel fan-out lives inline in `/rite-seal` (see the [shared dispatch contract](../pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md)). | Polish Phase 1 (`simplify`); review involves user input / auth / data / external integrations / secrets / permissions (`security`); performance is relevant or regression risk visible (`perf`). |
136
136
 
137
137
  ### Seal — GO / NO-GO decision
138
138
 
@@ -0,0 +1,35 @@
1
+ # Critic review packet
2
+
3
+ Use only when an independent critic review is requested. Keep the packet
4
+ bounded; omit conversation history, raw logs, abandoned approaches, secrets,
5
+ private data, and broad repository scans.
6
+
7
+ ## Candidate
8
+
9
+ - Repository:
10
+ - Base commit:
11
+ - Candidate commit or immutable snapshot:
12
+ - Changed files:
13
+
14
+ ## Purpose and boundaries
15
+
16
+ - Requested outcome:
17
+ - Explicit exclusions:
18
+ - Acceptance checklist:
19
+ - Direct authority files/sections:
20
+
21
+ ## Evidence
22
+
23
+ - Focused tests and results:
24
+ - Known risks or unresolved questions:
25
+
26
+ ## Requested report
27
+
28
+ Return one consolidated report containing:
29
+
30
+ 1. Critical/high findings with exact file/line or reproducible evidence.
31
+ 2. Impact and required correction for each finding.
32
+ 3. Lower-severity observations separately.
33
+ 4. Final disposition: accept, accept after listed corrections, or reject.
34
+
35
+ Do not edit the candidate and do not report style preferences as blocking.
package/docs/usage.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # DevRites — usage
2
2
 
3
- Worked workflows. Every feature starts with `/rite-spec` (it investigates,
4
- writes the spec, and creates the workspace). Every later phase reads the
5
- active workspace (`.devrites/ACTIVE` `.devrites/work/<slug>/`) first; if
6
- none exists it tells you to run `/rite-spec <feature>`.
3
+ Worked workflows. A full greenfield lifecycle starts with `/rite-spec`; a
4
+ brownfield codebase may enter through `/rite-adopt`, while `/rite-quick` and
5
+ `/rite-frame` deliberately handle bounded work outside the full feature arc.
6
+ Workspace-operating phases read the active workspace (`.devrites/ACTIVE`
7
+ `.devrites/work/<slug>/`) first and report the appropriate on-ramp when none exists.
7
8
 
8
9
  - **Full command reference** → [`command-map.md`](command-map.md)
9
10
  - **Flow diagrams** → [`flow.md`](flow.md)
@@ -28,10 +29,10 @@ survives compaction and new sessions:
28
29
  | `plan.md` | `/rite-define` | approach, dependency graph, checkpoints, rollback |
29
30
  | `tasks.md` | `/rite-define` | ordered `SLICE-###` vertical slices, each mapped to `AC-###` and tagged `Mode: AFK \| HITL` + gate fields |
30
31
  | `traceability.md` | `/rite-define` | AC/REQ → slices → tests/proofs → evidence → touched files matrix |
31
- | `eng-review.md` | `/rite-vet` | engineering plan review (optional): scope challenge, axis findings, failure modes, parallelization |
32
+ | `eng-review.md` | `/rite-vet` | mandatory engineering plan review, light or full by stakes: scope challenge, axis findings, failure modes, parallelization |
32
33
  | `test-plan.md` | `/rite-vet` | build-readable coverage target: coverage diagram, per-gap test requirements, acceptance→test map (read by `/rite-build` + `/rite-prove`) |
33
- | `status.md` | every phase | canonical status checkpoint |
34
34
  | `state.md` | every phase | working ledger: phase, active slice + slice mode, risk, next step; plus `Awaiting human` block when paused (run mode is derived from `.devrites/AFK`, not stored here) |
35
+ | `status.md` | every phase | compatibility alias for the canonical `state.md` cursor |
35
36
  | `questions.md` | every phase | append-only Q&A — qid, slice, gate, status (`open` / `answered` / `dropped`), proposed answer, raised/answered timestamps |
36
37
  | `decisions.md` / `assumptions.md` | every phase | running logs |
37
38
  | `drift.md` | Spec Drift Guard | drift events + resolutions |
@@ -53,7 +54,8 @@ on under `.devrites/archive/<slug>/`.
53
54
  Backward compatibility: older `.devrites/features/<slug>/` workspaces remain
54
55
  readable; migration should add the canonical `.devrites/work` shape without
55
56
  deleting the old files. `feature.md`/`index.md` can still act as the workspace
56
- map, and `proof.md` can still act as the proof alias for `evidence.md`.
57
+ map, `status.md` as the cursor alias for `state.md`, and `proof.md` as the proof
58
+ alias for `evidence.md`.
57
59
 
58
60
  Project-root sentinel (outside the workspace):
59
61
 
@@ -82,6 +84,10 @@ You: I want some kind of reporting thing for admins.
82
84
  → reads the approved spec
83
85
  → writes plan.md + vertical task slices + state
84
86
  → stops for confirmation
87
+
88
+ /rite-vet
89
+ → reviews every defined plan; uses a light or full pass based on stakes
90
+ → writes eng-review.md + test-plan.md before build
85
91
  ```
86
92
 
87
93
  ## 2) Normal feature — the build loop
@@ -89,6 +95,7 @@ You: I want some kind of reporting thing for admins.
89
95
  ```text
90
96
  /rite-spec add-csv-export # investigate → spec.md
91
97
  /rite-define # spec → plan + vertical slices + state
98
+ /rite-vet # mandatory plan review; light or full based on stakes
92
99
  /rite-build # slice 1 ("export endpoint returns CSV"); stops with evidence
93
100
  /rite-build # slice 2 ("download button + states"); repeat for each slice
94
101
  /rite-prove # ONCE all slices built: full tests + browser proof
@@ -139,6 +146,9 @@ You: 2
139
146
  /rite-define
140
147
  → spec → slices; UI slice marked frontend-craft + browser-proof
141
148
 
149
+ /rite-vet
150
+ → hardens the UI plan + acceptance-to-test coverage before code
151
+
142
152
  /rite-build
143
153
  → UI slice → devrites-frontend-craft: register = product surface, **match
144
154
  the saved references**, shape the states (default/loading/empty/error/
@@ -167,6 +177,7 @@ with exact steps — the seal then weighs the UI risk.
167
177
  ```text
168
178
  /rite-spec rate-limit-api # investigate → spec.md (no UI)
169
179
  /rite-define # spec → plan + slices
180
+ /rite-vet # mandatory plan review; checks architecture, tests, perf
170
181
  /rite-build # no UI → no frontend craft / browser proof
171
182
  /rite-prove # targeted tests + build/typecheck; runtime check of the limiter
172
183
  /rite-polish # reference/code.md only (no UI scope detected)
@@ -324,15 +335,14 @@ it stops. Args: `[idea] [--ship|--yolo] [--max-slices N]`.
324
335
  read-only config: it toggles your local session mode and sets the initial
325
336
  `max_slices` budget; nothing else. The mutable remaining-slice count lives
326
337
  in `state.md` (`AFK slices remaining`), never in the sentinel.
327
- - One feature active at a time (`ACTIVE`). To start or switch, run
328
- `/rite-spec <other>` (it creates/selects that workspace and writes its
329
- spec).
338
+ - One feature active at a time (`ACTIVE`). Start a new workspace with
339
+ `/rite-spec <feature>`; switch to an existing one with `/rite use <slug>`.
330
340
  - **Recommended AFK progression**: HITL first to refine the prompt and plan,
331
341
  then drop the sentinel for the bulk stretch. Always cap iterations
332
342
  (`max_slices: 10` is a reasonable default).
333
- - Let the specialists fire on their triggers you don't invoke `devrites-*`
334
- directly. The exceptions are the three public utilities: `/rite-zoom-out`,
335
- `/rite-prototype`, `/rite-handoff`.
336
- - The `devrites-` prefix is a namespace, not a privacy marker — whether a
337
- skill is public is the `user-invocable:` flag, documented for each in
338
- [`command-map.md`](command-map.md).
343
+ - Invoke public `rite` / `rite-*` skills directly; let the model-invocable
344
+ `devrites-*` specialists fire from their documented triggers. `devrites-lib`
345
+ is an internal reference library, not a workflow.
346
+ - Prefixes are namespaces, not invocation policy. `user-invocable` and
347
+ `disable-model-invocation` frontmatter are authoritative; the effective policy
348
+ for every skill is catalogued in [`command-map.md`](command-map.md).