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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# `.devrites/` state workspace — canonical format
|
|
2
|
+
|
|
3
|
+
The shared state contract for **all** DevRites skills. Every phase reads the active
|
|
4
|
+
workspace first; if none exists, it stops and tells the user to run `/rite-spec <feature>`
|
|
5
|
+
(which creates it).
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
```
|
|
9
|
+
.devrites/
|
|
10
|
+
README.md # what this dir is (seeded at install)
|
|
11
|
+
ACTIVE # single line: active feature slug, or empty
|
|
12
|
+
work/
|
|
13
|
+
<feature-slug>/
|
|
14
|
+
brief.md # short user-facing objective
|
|
15
|
+
spec.md # what to build + why (from /rite-spec)
|
|
16
|
+
references/ # saved design/reference assets (screenshots, exports, video)
|
|
17
|
+
references.md # index of design references (saved files + links)
|
|
18
|
+
strategy.md # strategic review: scope mode + pre-mortem + dimension scores (from /rite-temper; optional — always invoked, significance-gated, in /rite-autocomplete)
|
|
19
|
+
plan.md # how to build it (from /rite-define)
|
|
20
|
+
tasks.md # ordered vertical slices (from /rite-define)
|
|
21
|
+
eng-review.md # engineering plan review: scope challenge + axis findings + failure modes + parallelization (from /rite-vet — run on every plan; depth scales light/full, never skipped; always in /rite-autocomplete)
|
|
22
|
+
test-plan.md # build-readable coverage target: coverage diagram + per-gap test requirements + acceptance→test map (from /rite-vet; read by /rite-build + /rite-prove)
|
|
23
|
+
state.md # phase, active slice, risk, next step
|
|
24
|
+
questions.md # asked questions + answers
|
|
25
|
+
decisions.md # decisions + rationale (+ a `## Dead ends` section: approaches tried that failed + why, so retries don't repeat them)
|
|
26
|
+
assumptions.md # explicit assumptions still standing
|
|
27
|
+
drift.md # spec/plan drift observations + resolutions
|
|
28
|
+
touched-files.md # files changed or intentionally inspected
|
|
29
|
+
evidence.md # commands run + results
|
|
30
|
+
browser-evidence.md # screenshots, routes, console, viewport checks
|
|
31
|
+
design-brief.md # UX/UI contract — if UI involved (from /rite-spec via devrites-ux-shape; refined per slice in /rite-build)
|
|
32
|
+
polish-report.md # normalize+polish output
|
|
33
|
+
review.md # review findings + decisions
|
|
34
|
+
seal.md # final GO / NO-GO decision (from /rite-seal)
|
|
35
|
+
ship.md # ship record: commit/tag, acceptance, follow-ups (from /rite-ship)
|
|
36
|
+
handoff.md # human/next-agent-facing handoff summary (overwritten each handoff)
|
|
37
|
+
archive/
|
|
38
|
+
<feature-slug>/ # closed features (moved here by /rite-ship close-out; all .md preserved)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Rules
|
|
42
|
+
- **Slug**: kebab-case, derived from the objective (`add-csv-export`, not `feature1`).
|
|
43
|
+
- All artifacts are **human-readable Markdown** — they must survive context compaction
|
|
44
|
+
and a fresh session. (`references/` also holds binary assets the human supplied.)
|
|
45
|
+
- **`/rite-spec` creates the workspace** and writes `spec.md` (+ `references/`,
|
|
46
|
+
`references.md`, `brief.md`, `questions.md`, `decisions.md`, `assumptions.md`; **plus
|
|
47
|
+
`design-brief.md` when the feature touches UI**, via `devrites-ux-shape`) and sets
|
|
48
|
+
`ACTIVE`. **`/rite-define` reads `spec.md`** and adds `plan.md` + `tasks.md` and updates
|
|
49
|
+
`state.md`. Other skills read the active workspace; none create a new one.
|
|
50
|
+
- Each phase **updates `state.md`** and the relevant evidence files.
|
|
51
|
+
- Don't create `strategy.md` / `eng-review.md` / `test-plan.md` / `evidence.md` /
|
|
52
|
+
`browser-evidence.md` / `design-brief.md` / `polish-report.md` / `review.md` / `seal.md` /
|
|
53
|
+
`ship.md` / `handoff.md` until the producing phase runs — absence is meaningful (it means
|
|
54
|
+
"not done yet"). `strategy.md` is written by `/rite-temper` (which may also edit `spec.md` /
|
|
55
|
+
`decisions.md` / `assumptions.md` via the Spec Drift Guard); its absence means the spec was
|
|
56
|
+
planned without a strategic review. `eng-review.md` + `test-plan.md` are written by `/rite-vet`
|
|
57
|
+
(which also hardens `plan.md` / `tasks.md`, and routes acceptance-changing deltas via the Spec
|
|
58
|
+
Drift Guard); their absence means the plan was built without an engineering review. `handoff.md`
|
|
59
|
+
is written by `/rite-handoff` and overwritten each handoff (latest snapshot, not a log).
|
|
60
|
+
- **`/rite-ship` closes the feature**: it writes `ship.md`, sets `state.md` phase `done`,
|
|
61
|
+
then archives `.devrites/work/<slug>/` → `.devrites/archive/<slug>/` (every `.md`
|
|
62
|
+
preserved) and clears `.devrites/ACTIVE`. Closing **relocates** the audit trail; it
|
|
63
|
+
never deletes it. Re-open by moving the dir back and re-pointing `ACTIVE`.
|
|
64
|
+
|
|
65
|
+
## `state.md` template
|
|
66
|
+
```markdown
|
|
67
|
+
# State: <slug>
|
|
68
|
+
|
|
69
|
+
- Phase: spec | temper | plan | vet | build | prove | polish | review | seal | ship | done # `temper` (pre-plan) + `vet` (post-plan, pre-build) only when those optional reviews ran; spec→plan→build directly otherwise
|
|
70
|
+
- Status: running | awaiting_human | blocked | done
|
|
71
|
+
- Active slice: <N — name> | none
|
|
72
|
+
- Slice mode: AFK | HITL | none
|
|
73
|
+
- Spec gate: passed <iso> | none # optional — set when the spec readiness gate passes
|
|
74
|
+
- Plan approved: <iso> | none # optional — /rite-define sets it when the human confirms the plan
|
|
75
|
+
- AFK slices remaining: <n> | none # mutable counter; initialized from .devrites/AFK max_slices on first AFK build
|
|
76
|
+
- Risk: <highest current risk> | none
|
|
77
|
+
- Next step: <single recommended command + why>
|
|
78
|
+
|
|
79
|
+
## Awaiting human (only when Status == awaiting_human)
|
|
80
|
+
- qid: <q-YYYY-MM-DD-NNN>
|
|
81
|
+
- gate: advisory | validating | blocking | escalating
|
|
82
|
+
- question: <crisp text>
|
|
83
|
+
- proposed: <agent's tentative answer>
|
|
84
|
+
- raised_at: <iso>
|
|
85
|
+
- blocking_slices: [<slice ids that cannot advance until answered>]
|
|
86
|
+
|
|
87
|
+
## Slice progress
|
|
88
|
+
- [ ] Slice 1: <name> — <pending|built>
|
|
89
|
+
- [ ] Slice 2: ...
|
|
90
|
+
|
|
91
|
+
## Log
|
|
92
|
+
- <date> <phase>: <one line of what happened>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
A slice is only ever `pending` or `built`. Acceptance proof lives at the **feature**
|
|
96
|
+
level in `evidence.md` (recorded by `/rite-prove`), not per slice — there is no per-slice
|
|
97
|
+
`proven` / `done` state.
|
|
98
|
+
|
|
99
|
+
## `.devrites/AFK` sentinel (AFK mode toggle)
|
|
100
|
+
|
|
101
|
+
Presence of the file `.devrites/AFK` puts DevRites into **AFK mode**: skills that would
|
|
102
|
+
normally pause for the user instead log to `questions.md` (when the gate severity allows
|
|
103
|
+
it — see [`.claude/rules/afk-hitl.md`](../../../rules/afk-hitl.md)) and continue.
|
|
104
|
+
`.devrites/AFK` presence is the **single source of truth** for run mode (the shared preamble
|
|
105
|
+
derives it); skills re-read the sentinel at decision time rather than trusting a mirrored
|
|
106
|
+
`state.md` field. The file content is optional YAML configuring loop discipline:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
# .devrites/AFK — presence = AFK mode active. All keys optional.
|
|
110
|
+
max_slices: 10 # read-only INITIAL budget; the mutable remaining count lives in state.md
|
|
111
|
+
notify: "ntfy.sh/my-topic" # shell command run on awaiting_human transition; see afk-discipline.md for the env table
|
|
112
|
+
allow_gates: [advisory, validating] # gate severities AFK may auto-handle; everything else pauses
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`max_slices` is **read-only config** — never rewritten in place. The mutable remaining
|
|
116
|
+
count lives in `state.md` as `AFK slices remaining: <n>`, initialized from `max_slices` on
|
|
117
|
+
the first AFK build and decremented per built slice (the cap is enforced by
|
|
118
|
+
`tick-afk.sh`, not by prose).
|
|
119
|
+
|
|
120
|
+
Absent or empty file = AFK active with defaults (`max_slices: unlimited`, no `notify`,
|
|
121
|
+
`allow_gates: [advisory]`). **Destructive migrations, auth/authz boundary changes, and
|
|
122
|
+
public-API breaks always pause regardless of `allow_gates`** — AFK never silently accepts
|
|
123
|
+
irreversible risk.
|
|
124
|
+
|
|
125
|
+
## `questions.md` entry format
|
|
126
|
+
|
|
127
|
+
`questions.md` is append-only. Each entry:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
## q-2026-05-28-001
|
|
131
|
+
status: open | answered | dropped
|
|
132
|
+
slice: 03-list-endpoint # which slice raised it (or "spec" / "plan")
|
|
133
|
+
gate: advisory | validating | blocking | escalating
|
|
134
|
+
question: <one crisp sentence the human can answer>
|
|
135
|
+
options: | # ranked option set, recommended FIRST
|
|
136
|
+
1. <recommended> (Recommended) — <dimension-tagged rationale + trade-off>
|
|
137
|
+
2. <alternative> — <rationale + trade-off>
|
|
138
|
+
3. Something else — describe it
|
|
139
|
+
proposed: <the recommended option restated — the HITL default + AFK auto-pick>
|
|
140
|
+
raised_at: 2026-05-28T17:30:00Z
|
|
141
|
+
answered_at: <iso when status flips to answered>
|
|
142
|
+
answer: <chosen option / human's reply, verbatim>
|
|
143
|
+
supersedes: <q-... if this replaces an answered entry, else omit>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Canonical schema + rules (gate taxonomy, option-set contract): [`.claude/rules/afk-hitl.md`](../../../rules/afk-hitl.md).
|
|
147
|
+
`/rite-resolve <qid> "<answer>"` is the canonical mutator — manual edits work but the
|
|
148
|
+
skill keeps `state.md` and `questions.md` consistent.
|
|
149
|
+
|
|
150
|
+
## `brief.md` template
|
|
151
|
+
```markdown
|
|
152
|
+
# <Feature>
|
|
153
|
+
Objective: <one sentence — what and for whom>
|
|
154
|
+
Why now: <one line>
|
|
155
|
+
Definition of done: <one line>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
`decisions.md`, `assumptions.md`, `questions.md`, `drift.md`, `touched-files.md` are
|
|
159
|
+
append-only running logs — date-stamped bullet entries.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rite-status
|
|
3
|
+
description: Read-only report on the active feature — phase, active slice, next action, evidence, open questions, drift, risks, handoff readiness. Use when the user says "where am I", "what's next", "status", "is this ready to ship", "show the active feature". Not for invoking phases or for the menu (use `/rite`).
|
|
4
|
+
argument-hint: "[feature-slug]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /rite-status — active feature status
|
|
10
|
+
|
|
11
|
+
Read-only. Report where the active feature stands. **Do not run any phase.**
|
|
12
|
+
|
|
13
|
+
## Load state
|
|
14
|
+
|
|
15
|
+
Run this snippet (the shared DevRites preamble — one canonical command that
|
|
16
|
+
resolves the install layouts: installed `.claude/` → plugin via `${CLAUDE_SKILL_DIR}`
|
|
17
|
+
→ repo `pack/`, with a graceful fallback to reading `state.md`; default slug =
|
|
18
|
+
`.devrites/ACTIVE`):
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
P=.claude/skills/devrites-lib/scripts/preamble.sh
|
|
22
|
+
[ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
|
|
23
|
+
[ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
|
|
24
|
+
[ -f "$P" ] && bash "$P" [feature-slug] || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The preamble prints the active workspace's `state.md` and the list of artifacts
|
|
28
|
+
present. The `!`-prefix dynamic-context-injection idiom is **not** used here so
|
|
29
|
+
the skill stays portable across harnesses; the script is the cross-harness
|
|
30
|
+
mechanism.
|
|
31
|
+
|
|
32
|
+
## What to output
|
|
33
|
+
|
|
34
|
+
If no workspace: tell the user to run `/rite-spec <feature>` to start. Stop.
|
|
35
|
+
|
|
36
|
+
Otherwise summarize from the loaded state, concisely:
|
|
37
|
+
|
|
38
|
+
1. **Feature** + one-line objective (from `brief.md`).
|
|
39
|
+
2. **Phase**, **active slice** + its slice mode (from `state.md`). **Run mode**
|
|
40
|
+
(`afk` / `hitl`) is derived from `.devrites/AFK` presence (the preamble
|
|
41
|
+
already does this), not from a `state.md` field — present = `afk`, absent = `hitl`.
|
|
42
|
+
3. **Status** — `running` / `awaiting_human` / `blocked` / `done`. If
|
|
43
|
+
`awaiting_human`, render the `Awaiting human` block from `state.md` (qid, gate,
|
|
44
|
+
question, proposed, raised_at, blocking_slices) and instruct
|
|
45
|
+
`/rite-resolve <qid> "<answer>"`.
|
|
46
|
+
4. **Next action** — the single recommended next command.
|
|
47
|
+
5. **Evidence** — what's proven vs unproven (from `evidence.md` /
|
|
48
|
+
`browser-evidence.md`).
|
|
49
|
+
6. **Open questions** — count by gate (from `questions.md`:
|
|
50
|
+
`n open: x blocking · y validating · z advisory`) + the blocking qids by id and one-line question.
|
|
51
|
+
7. **Unresolved drift** (`drift.md`).
|
|
52
|
+
8. **Risks** (from `state.md` / `spec.md`).
|
|
53
|
+
9. **Ready for handoff?** — see section below.
|
|
54
|
+
|
|
55
|
+
Flag anything blocking: unresolved drift, failing evidence, `Status: awaiting_human`,
|
|
56
|
+
or open questions that change product behavior. End with the recommended next command
|
|
57
|
+
and nothing else.
|
|
58
|
+
|
|
59
|
+
## Ready for handoff?
|
|
60
|
+
|
|
61
|
+
After the summary items (1–8), render the handoff readiness section (item 9 above) last —
|
|
62
|
+
the canonical output order is: progress footer → summary items 1–8 → handoff readiness.
|
|
63
|
+
A fresh agent
|
|
64
|
+
or a future session should be able to pick the work up from the workspace
|
|
65
|
+
**alone**, with zero chat context. Check:
|
|
66
|
+
|
|
67
|
+
- [ ] `state.md` has a **single** next-action command (not a list of options).
|
|
68
|
+
- [ ] `questions.md` lists every unresolved question raised in this or any
|
|
69
|
+
prior session.
|
|
70
|
+
- [ ] `decisions.md` records the rationale for any non-obvious choice
|
|
71
|
+
("why this, not the obvious alternative").
|
|
72
|
+
- [ ] `assumptions.md` lists every load-bearing assumption that wasn't
|
|
73
|
+
confirmed by code or by the user.
|
|
74
|
+
- [ ] `drift.md` shows current resolution status for every drift event
|
|
75
|
+
(open / asked-user / repaired).
|
|
76
|
+
- [ ] `evidence.md` is current for the active phase (no claims without
|
|
77
|
+
recorded commands + output).
|
|
78
|
+
|
|
79
|
+
If any item above fails, suggest `/rite-handoff` to compact chat-only
|
|
80
|
+
context into the workspace before the session ends.
|
|
81
|
+
|
|
82
|
+
## Gotchas
|
|
83
|
+
- Read-only — never advance a phase or write to the workspace; that's the phase skills' job.
|
|
84
|
+
- Report from the `.devrites/` files, not chat memory (it's gone after `/clear`).
|
|
85
|
+
- Give the single next command, not a menu of options — an ambiguous next-action fails the handoff check.
|
|
86
|
+
|
|
87
|
+
## Output format
|
|
88
|
+
|
|
89
|
+
**Footer first** — `/rite-status` *is* the status meter: render it by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`). The slice meter + flow ribbon answer "where am I / how much is left". Then the handoff-readiness check:
|
|
90
|
+
```
|
|
91
|
+
Ready for handoff: yes / partial (n gaps) / no
|
|
92
|
+
|
|
93
|
+
Gaps (if any):
|
|
94
|
+
- state.md "next action" lists 2 options, not 1
|
|
95
|
+
- 3 open questions raised in conversation not yet in questions.md
|
|
96
|
+
- ...
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
If gaps exist, the recommended next command is to **persist them first** (see
|
|
100
|
+
`.claude/rules/core.md` — "Persistence before stopping"). Only then
|
|
101
|
+
move to the phase's next action.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rite-temper
|
|
3
|
+
description: Strategic review of a readied `spec.md` before planning — pick a scope mode (expand / selective / hold-rigor / reduce-to-MVP), run a pre-mortem, harden the spec, and fold decisions back via the Spec Drift Guard plus a persistent `strategy.md`. Use when the user says "temper this", "strategy review", "think bigger", "scope check", "pre-mortem the spec", "are we over/under-building", or before defining a big or risky feature. Not for a rough idea (`/rite-pressure-test`), a mid-build decision (`devrites-doubt`), a code diff (`/rite-review`), or the final gate (`/rite-seal`).
|
|
4
|
+
argument-hint: "[feature-slug] [--mode expand|selective|hold|reduce]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /rite-temper — temper the spec before you plan
|
|
9
|
+
|
|
10
|
+
Take a readied spec and **temper** it: heat it (raise ambition on the *outcome*), then
|
|
11
|
+
quench it (pre-mortem + prune the *solution surface*) — stronger and less brittle. The one
|
|
12
|
+
DevRites step that decides scope/ambition on a written spec and folds the result into the
|
|
13
|
+
canonical contract, so `/rite-define` plans the **hardened** spec. Optional for small work
|
|
14
|
+
(significance-gated — auto-skips low-stakes specs), but always invoked inside
|
|
15
|
+
`/rite-autocomplete`. **Read the active workspace first**; if there's no readied
|
|
16
|
+
`spec.md`, tell the user to run `/rite-spec`.
|
|
17
|
+
|
|
18
|
+
## Rules consulted (read on demand from `.claude/rules/`)
|
|
19
|
+
**Step 0:** Read `.claude/rules/core.md` first. Pull on demand: `patterns.md` +
|
|
20
|
+
`coding-style.md` (the over-engineering / YAGNI rubric — reuse the pack's standard, don't
|
|
21
|
+
invent one), `documentation.md` (ADR-style `decisions.md` entries), `afk-hitl.md`
|
|
22
|
+
(irreversible-risk list + gate ceiling).
|
|
23
|
+
|
|
24
|
+
## Operating rules
|
|
25
|
+
- **Ambition on outcomes, minimalism on the surface.** Raise the success bar and solve the
|
|
26
|
+
*real* problem; never add speculative capability/abstraction. The reconciliation hinge —
|
|
27
|
+
bigger ambition, smaller surface.
|
|
28
|
+
- **Every scope change routes through the Spec Drift Guard** — it only becomes real by being
|
|
29
|
+
written into `spec.md` as a recorded, confirmable decision. Expansion is **opt-in** (HITL
|
|
30
|
+
confirm; AFK pauses — see autocomplete policy). Nothing auto-grows into the build.
|
|
31
|
+
- **Bound ambition by reversibility.** Auth / migration / public-API / data-model touches get
|
|
32
|
+
the *opposite* of ambition — maximum conservatism; they always pause (irreversible-risk list).
|
|
33
|
+
- **Honest verdict.** Never round "needs work" up to "ready"; record every scope call's *why*.
|
|
34
|
+
- **You write; the reviewer judges.** You are the single canonical writer (`strategy.md` +
|
|
35
|
+
the spec edits); the reviewer agent is read-only.
|
|
36
|
+
- **Demand the spec-quality checklists for big features.** `/rite-temper` only fires on
|
|
37
|
+
significant specs — exactly where vague requirement prose is most expensive. Before hardening,
|
|
38
|
+
confirm `checklists/<domain>.md` exist and pass (`rite-spec/reference/spec-checklists.md`); a
|
|
39
|
+
scope expansion you fold in **adds its own** rows (new Success/Acceptance criteria get
|
|
40
|
+
"unit-tested for English" too). A folded expansion with an unquantified criterion is a CRITICAL
|
|
41
|
+
fail that re-opens the readiness gate.
|
|
42
|
+
|
|
43
|
+
## Workflow
|
|
44
|
+
0. **Read `.claude/rules/core.md`**. Then **run the shared orientation preamble** — it prints `state.md`, the artifacts present,
|
|
45
|
+
the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
|
|
46
|
+
instead of re-deriving state from raw Markdown:
|
|
47
|
+
```bash
|
|
48
|
+
P=.claude/skills/devrites-lib/scripts/preamble.sh
|
|
49
|
+
[ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
|
|
50
|
+
[ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
|
|
51
|
+
[ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
|
|
52
|
+
```
|
|
53
|
+
Then read the workspace: `spec.md` (+ `decisions.md`,
|
|
54
|
+
`assumptions.md`, `design-brief.md` if UI), `state.md`. Require `Spec gate: passed` — else
|
|
55
|
+
STOP → `/rite-spec`. If a plan already exists, scope changes route through `/rite-plan
|
|
56
|
+
repair` (record in `drift.md`), not a blind spec edit.
|
|
57
|
+
1. **Significance test** — [`reference/significance.md`](reference/significance.md). Low-stakes
|
|
58
|
+
/ shape-not-meaning work → write the one-line `skipped — low stakes (<trigger>)` verdict to `strategy.md`,
|
|
59
|
+
set `state.md` `Next step: /rite-define`, and recommend it. Otherwise fire the full pass below.
|
|
60
|
+
2. **FORWARD pass + mode selection** — [`reference/scope-modes.md`](reference/scope-modes.md).
|
|
61
|
+
Diverge on the *outcome* (the 10-star version of the real problem), then commit **exactly
|
|
62
|
+
one** scope mode (`expand` opt-in · `selective` · `hold-rigor` · `reduce-to-MVP`) with its
|
|
63
|
+
rationale and the **hinge** (what would change the call). `$ARGUMENTS` `--mode` is a hint, not
|
|
64
|
+
a command.
|
|
65
|
+
3. **INVERSION pass** — pre-mortem in past tense ("it shipped and failed — what went wrong"),
|
|
66
|
+
each top risk carrying likelihood + mitigation + the slice it will bind to; then the **YAGNI
|
|
67
|
+
ledger** (each candidate scope item gets the "imagine the later refactor" test; defer unless
|
|
68
|
+
now-cost is trivial AND deferred-cost is large).
|
|
69
|
+
4. **Score the 9 dimensions** — [`reference/review-dimensions.md`](reference/review-dimensions.md).
|
|
70
|
+
Cite evidence *before* the band; **gate on the floor** (the weakest dimension, not an average).
|
|
71
|
+
5. **Walk the findings WITH the human — do not batch-dump.** The artifact is the *output* of an
|
|
72
|
+
interactive review, not a substitute for it: surface each material scope call / finding via
|
|
73
|
+
`AskUserQuestion`, one at a time, best-guess + **why**. Each material scope call ends as a
|
|
74
|
+
**recorded decision** — a resolved `questions.md` qid (HITL) or a `decisions.md` ADR (AFK) —
|
|
75
|
+
so the walk leaves an auditable trail, not just chat. (AFK gate policy is single-sourced in
|
|
76
|
+
[`reference/significance.md`](reference/significance.md): `hold-rigor` + `reduce-to-MVP`
|
|
77
|
+
auto-apply, **any `expand` is a blocking pause**, irreversible-risk always pauses.)
|
|
78
|
+
6. **Write `strategy.md` + fold back** — [`reference/strategy-template.md`](reference/strategy-template.md).
|
|
79
|
+
**One drift rule (decide by whether a plan exists):** *no `plan.md` yet* (the normal pre-define
|
|
80
|
+
case) → update `spec.md` **through the Spec Drift Guard** — *Success criteria* **and**
|
|
81
|
+
*Acceptance criteria* for each opt-in expansion / cut, **Non-goals** for every deferred item,
|
|
82
|
+
*Constraints* **and** *Risks* the pre-mortem demands, and the gaps/decisions table; *`plan.md`
|
|
83
|
+
already exists* → do **not** edit `spec.md` here — write the deltas to `drift.md` and hand off
|
|
84
|
+
to `/rite-plan repair`. Either way, append `decisions.md` (one ADR per scope call: context ·
|
|
85
|
+
decision · why-not · what-would-change-it) and `assumptions.md` (every "we'll probably need X" →
|
|
86
|
+
assumption-to-verify). **Every scope delta must carry a recorded human decision** — a resolved
|
|
87
|
+
`questions.md` qid (HITL) or a `decisions.md` ADR (AFK within the ceiling); a folded change with
|
|
88
|
+
no recorded decision is the batch-dump failure. **Re-check the spec Readiness gate** (it fails if
|
|
89
|
+
any folded scope delta lacks its decision). Update `state.md`: `Phase: temper`,
|
|
90
|
+
`Next step: /rite-define`; on a blocking pause (expand / irreversible / a dimension still below
|
|
91
|
+
bar) write the `Awaiting human` block + `Status: awaiting_human` before stopping.
|
|
92
|
+
7. **Adversarial verification loop** — dispatch [`devrites-strategy-reviewer`](../../agents/devrites-strategy-reviewer.md)
|
|
93
|
+
(fresh context, **only** the hardened spec + the rubric — no authoring reasoning). Resolve
|
|
94
|
+
actionable findings by editing `spec.md`/`strategy.md`, re-dispatch; **cap ≤3 iterations**. A
|
|
95
|
+
dimension still below bar after 3 → blocking question (HITL) or AFK gate-ceiling entry;
|
|
96
|
+
irreversible-risk findings always pause. If sub-agents are unavailable, do the independent
|
|
97
|
+
rubric pass yourself in a separate read, discarding the authoring reasoning (a flagged
|
|
98
|
+
fallback, not an independent review).
|
|
99
|
+
8. **STOP.** Report the mode, the scope deltas, and the floor verdict; recommend `/rite-define`.
|
|
100
|
+
|
|
101
|
+
> **Mid-flight discipline.** When tempted to dump findings into `strategy.md` and skip the
|
|
102
|
+
> walk-through, expand the surface (not the outcome), grow scope without the Drift Guard, or
|
|
103
|
+
> score before citing evidence — see [`reference/anti-patterns.md`](reference/anti-patterns.md).
|
|
104
|
+
|
|
105
|
+
## Output
|
|
106
|
+
|
|
107
|
+
**Footer first** — render the slice meter + flow ribbon by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`); keep the fact lines below it terse (`key value · key value`). Then:
|
|
108
|
+
```
|
|
109
|
+
Tempered: <slug>
|
|
110
|
+
Significance: full | skipped — low stakes (<trigger>)
|
|
111
|
+
Mode: <expand|selective|hold-rigor|reduce-to-MVP> — <one-line rationale> (hinge: <what would change it>)
|
|
112
|
+
Scope: +<n expanded> / -<n reduced> / <n deferred to Non-goals> (all via Spec Drift Guard)
|
|
113
|
+
Pre-mortem: <n top risks> mitigated → bound to slices
|
|
114
|
+
Dimensions: floor = <strong|adequate|thin|broken> on <weakest dimension> Reviewer loop: <n> iter
|
|
115
|
+
Spec readiness: re-checked → passes | <blocker>
|
|
116
|
+
Next: /rite-define (plans the hardened spec)
|
|
117
|
+
↻ Hygiene: /clear before /rite-define (strategy.md + spec edits + decisions.md + assumptions.md captured). See rules/context-hygiene.md.
|
|
118
|
+
```
|
|
119
|
+
**DO NOT plan, slice, or write code here** — that's `/rite-define` and `/rite-build`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# /rite-temper — anti-patterns
|
|
2
|
+
|
|
3
|
+
Universal rationalizations + red flags live in
|
|
4
|
+
[`../../../rules/anti-patterns.md`](../../../rules/anti-patterns.md) — read it when the
|
|
5
|
+
reluctance is broader than this phase. Below are the temper-specific ones.
|
|
6
|
+
|
|
7
|
+
## Phase rationalizations
|
|
8
|
+
|
|
9
|
+
| Excuse | Rebuttal |
|
|
10
|
+
|---|---|
|
|
11
|
+
| "I'll write all the findings into `strategy.md` and let the user read it." | The artifact is the *output* of an interactive review, not a substitute for it. A finding's path to "done" goes **through `AskUserQuestion`**, one at a time, with a recommendation + why. Dumping findings into one write and moving on is the exact failure mode this skill exists to prevent. |
|
|
12
|
+
| "Bigger is better — let's add the extra capability while we're thinking big." | Ambition belongs on the **outcome**, not the **solution surface**. A speculative capability/abstraction is gold plating. Expand the problem + acceptance; never the machinery. |
|
|
13
|
+
| "The user obviously wants the ambitious version — I'll add it to the spec." | Expansion is **opt-in**, recorded, and confirmed (HITL) or paused (AFK). Adding acceptance the human didn't approve is silent scope growth — route it through the Spec Drift Guard or don't add it. |
|
|
14
|
+
| "It's over-scoped, I'll just trim those criteria." | Reducing scope is **still a spec change**. Cut acceptance only as a recorded Spec-Drift-Guard decision, and park the rest in Non-goals with a revisit note — never a silent trim. |
|
|
15
|
+
| "This dimension is weak but the others are strong — net it's fine." | The gate is the **floor**, not the average. A spec `broken` on risk does not pass because it's `strong` on clarity. |
|
|
16
|
+
| "I can see it's adequate — I'll note the band, evidence is obvious." | Cite the evidence (the spec line or its absence) **before** the band. Score-first-justify-later is how a reviewer rationalizes a spec it already likes. |
|
|
17
|
+
| "It's a strategy doc, the implementation concerns don't apply yet." | Cross-cutting concerns (security/data/observability/modifiability) are where strategy breaks down. Address each or mark it explicitly N/A — silent omission is a gap. |
|
|
18
|
+
| "This greenfield design is elegant." | Elegant for a codebase that doesn't exist. Ground ambition in the real seams + blast radius; flag a new dependency / second design system for an explicit decision. |
|
|
19
|
+
|
|
20
|
+
## Red flags
|
|
21
|
+
- `strategy.md` written but `spec.md` acceptance/Non-goals **not** updated — the build follows
|
|
22
|
+
the spec, so the review changed nothing.
|
|
23
|
+
- An `expand` decision auto-applied in AFK (it must pause), or any irreversible-risk touch that
|
|
24
|
+
didn't pause.
|
|
25
|
+
- A pre-mortem with risks listed but no mitigation + owning slice — a risk without an owner is a
|
|
26
|
+
wish.
|
|
27
|
+
- The reviewer loop running past 3 iterations, or the reviewer being handed the author's
|
|
28
|
+
reasoning (defeats the fresh-context point).
|
|
29
|
+
- The skill writing a `plan.md`, slicing, or touching code — that's `/rite-define` / `/rite-build`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Review dimensions + the floor-gate rubric
|
|
2
|
+
|
|
3
|
+
The spec is scored on nine dimensions. Each catches a *different* failure mode — strength in
|
|
4
|
+
one never compensates for collapse in another, so the gate is the **floor**, not an average.
|
|
5
|
+
|
|
6
|
+
## The nine dimensions
|
|
7
|
+
1. **Problem altitude & ambition** — is this solving the *right* problem at the right altitude,
|
|
8
|
+
or timidly improving the obvious path / over-reaching past the real need? Here, *under-
|
|
9
|
+
reaching* on the outcome is a failure, not just over-building.
|
|
10
|
+
2. **Scope honesty & boundary** — are Non-goals explicit? Is there a Minimum Usable Subset and a
|
|
11
|
+
clear IN/OUT line? Flags grab-bags and a missing "Won't-have-this-time".
|
|
12
|
+
3. **Premise & alternatives** — are the load-bearing premises stated and challenged, and is at
|
|
13
|
+
least one genuinely different approach (different data model / flow / boundary) considered
|
|
14
|
+
with its trade-off? ("Alternatives considered" is one of the most valuable parts of a spec.)
|
|
15
|
+
4. **Pre-mortem risk coverage** — run in prospective hindsight; each top risk carries likelihood
|
|
16
|
+
+ mitigation + the slice that owns it. **Unmitigated top risks are gating.**
|
|
17
|
+
5. **Over-engineering / YAGNI** — speculative capability, unused extension points, premature
|
|
18
|
+
abstraction, second-system bloat. Apply the pack's standard (`patterns.md`) + the "imagine
|
|
19
|
+
the later refactor" test. Defer unless now-cost is trivial AND deferred-cost is large.
|
|
20
|
+
6. **Acceptance testability & done-ness** — every acceptance criterion measurable, technology-
|
|
21
|
+
agnostic, and comparable **down to a baseline** ("better than the current workaround"), not
|
|
22
|
+
up to an unbounded ideal. Vague adjectives ("fast/robust/intuitive") and "handles X
|
|
23
|
+
gracefully" are flagged.
|
|
24
|
+
7. **Irreversibility & blast radius** — are auth / migration / public-API / data-model touches
|
|
25
|
+
treated with conservatism + rollback, and is the blast radius understood (from a
|
|
26
|
+
code-intelligence index if available)?
|
|
27
|
+
8. **Cross-cutting coverage** — security/trust-boundary, data & migration, observability, and
|
|
28
|
+
modifiability each explicitly addressed **or explicitly N/A** — no silent omission.
|
|
29
|
+
9. **Convention fit & placement realism** — does the ambition fit the codebase's existing seams
|
|
30
|
+
and patterns, or assume greenfield freedom a constrained space doesn't have? Prefer existing
|
|
31
|
+
conventions; flag a new dependency / second design system for explicit decision.
|
|
32
|
+
|
|
33
|
+
UI specs additionally inherit `rite-polish/reference/anti-ai-slop.md` at the cross-cutting
|
|
34
|
+
dimension (design-system fit, anti-AI-slop) — but `/rite-temper` reviews the *spec/design-brief*,
|
|
35
|
+
not pixels; the built UI is judged later by `devrites-frontend-reviewer`.
|
|
36
|
+
|
|
37
|
+
## The rubric — coarse bands, evidence first
|
|
38
|
+
Score each dimension on a **labeled band**, never a 1-10 float or a composite number (labels do
|
|
39
|
+
the work — matches the pack's severity-vocabulary stance):
|
|
40
|
+
|
|
41
|
+
| Band | Meaning |
|
|
42
|
+
|---|---|
|
|
43
|
+
| **strong** | Addressed well; no action needed. |
|
|
44
|
+
| **adequate** | Addressed; minor sharpening only (Suggestion/Nit). |
|
|
45
|
+
| **thin** | Under-addressed; a real gap to close before planning (Important). |
|
|
46
|
+
| **broken** | Missing or wrong in a way that will cost a redo (Critical). |
|
|
47
|
+
|
|
48
|
+
**Cite evidence before the band** — name the spec line / absence that justifies it; never score
|
|
49
|
+
first and rationalize after. Borderline dimensions may be sampled twice; take the **lower** band
|
|
50
|
+
(don't average up).
|
|
51
|
+
|
|
52
|
+
## The floor-gate
|
|
53
|
+
- **Pass** only when every dimension is `adequate` or `strong` **and** no unmitigated top
|
|
54
|
+
pre-mortem risk remains. The verdict is the **weakest** dimension — a spec strong on clarity
|
|
55
|
+
but `broken` on risk does **not** pass.
|
|
56
|
+
- Individual findings carry the pack's standard severity labels (**Critical / Important /
|
|
57
|
+
Suggestion / Nit / FYI**) so they compose with `/rite-review` and `/rite-seal`. `broken` →
|
|
58
|
+
Critical, `thin` → Important; **FYI is band-independent** — an observation on a `strong` /
|
|
59
|
+
`adequate` dimension, not a failing band.
|
|
60
|
+
- **Don't double-count overlap.** Some dimensions key on the same evidence (e.g. #7
|
|
61
|
+
irreversibility & #9 convention-fit both touch codebase realism; #1 ambition & #2 scope both
|
|
62
|
+
touch over/under-reach). Don't fail two dimensions for the *same* root cause — cite the
|
|
63
|
+
evidence once, band it once, so one problem isn't laundered into two floor failures.
|
|
64
|
+
- Below-bar dimension after the ≤3-iteration reviewer loop → blocking question (HITL) or AFK
|
|
65
|
+
gate-ceiling entry. Irreversible-risk findings always pause regardless of band.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Scope modes + the two passes
|
|
2
|
+
|
|
3
|
+
The heart of `/rite-temper`: two ordered passes (heat, then quench), converging on exactly
|
|
4
|
+
one scope mode. Ambition is a **generative** move followed by a **required convergence** — the
|
|
5
|
+
divergence is never the spec; the converged sweet spot is.
|
|
6
|
+
|
|
7
|
+
## Pass 1 — FORWARD (heat: raise ambition on the outcome)
|
|
8
|
+
Diverge on the *real problem*, not the obvious path. Ask:
|
|
9
|
+
- What would an order-of-magnitude-better **outcome** look like (the 10-star version)? Design
|
|
10
|
+
the extreme, then come back to the feasible sweet spot — don't ship the extreme.
|
|
11
|
+
- Is a **premise** load-bearing and wrong? Name the assumptions the spec rests on; challenge
|
|
12
|
+
the one that, if false, changes everything.
|
|
13
|
+
- Where is **under-reaching** the real risk — a timid improvement to a path we should reframe?
|
|
14
|
+
|
|
15
|
+
Ambition aims at the **outcome** (problem definition, success bar, user value) and at
|
|
16
|
+
complexity-**neutral** future-proofing. It never aims at the **solution surface** (that's Pass 2's
|
|
17
|
+
job to prune). Ground every ambitious idea in the codebase's real seams and blast radius (a code-intelligence
|
|
18
|
+
index if available — see `../../../rules/tooling.md`) — don't invent greenfield scope a
|
|
19
|
+
constrained codebase can't absorb.
|
|
20
|
+
|
|
21
|
+
## Pass 2 — INVERSION (quench: pre-mortem + prune)
|
|
22
|
+
Invert. Two subtractive moves:
|
|
23
|
+
- **Pre-mortem (prospective hindsight).** State it in past tense: *"It's six months out. This
|
|
24
|
+
shipped and failed. What went wrong?"* List the top failure modes; for each: likelihood,
|
|
25
|
+
mitigation, and the slice that will own the mitigation. Unmitigated top risks are **gating**.
|
|
26
|
+
- **YAGNI ledger.** Each candidate scope item gets the "imagine the later refactor" test: if
|
|
27
|
+
adding it *later* isn't materially more expensive, **defer it** (with a revisit note).
|
|
28
|
+
Bias hard toward defer — most presumed-needed features are never actually used. Reuse the
|
|
29
|
+
pack's existing standard — `patterns.md` ("no abstraction before two real callers",
|
|
30
|
+
"speculative generality") — don't invent a new YAGNI rule.
|
|
31
|
+
|
|
32
|
+
## The four modes — commit exactly one
|
|
33
|
+
Mode selection is the first convergence move. Record the chosen mode + rationale + the
|
|
34
|
+
**hinge** (what would change the call) in `strategy.md` and `decisions.md`.
|
|
35
|
+
|
|
36
|
+
| Mode | When | What it does | YAGNI / Drift Guard |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| **EXPAND** *(opt-in, default OFF)* | Under-reaching on the outcome is the real risk | Raise the success bar / reframe to the deeper problem; thinner-but-more-complete path to a bigger target | Expands the *problem + acceptance*, not machinery. Each added criterion is a Drift-Guard-recorded, human-confirmed (HITL) decision — never auto-grown |
|
|
39
|
+
| **SELECTIVE** | One or two high-leverage dimensions deserve more; the rest is right | Expand only the high-upside dimension; hold the rest at spec scope | Each selected expansion routes through the Guard; everything not selected is parked in Non-goals so it's neither dropped nor re-injected mid-build |
|
|
40
|
+
| **HOLD-RIGOR** | The spec is right-sized (default for irreversible-risk-heavy or already-tight specs) | No scope change — pure hardening: pre-mortem, risk mitigations, acceptance sharpening, cross-cutting coverage | Adds zero surface; trivially Drift-Guard-clean (no acceptance change) |
|
|
41
|
+
| **REDUCE-TO-MVP** | Over-scoped: second-system bloat, ~all must-haves, gold-plating | Hammer scope to the Minimum Usable Subset; move the rest to Non-goals with one-line reasons + revisit notes | Strongest YAGNI alignment. Cutting acceptance is **still a spec change** — record it via the Guard, never a silent trim |
|
|
42
|
+
|
|
43
|
+
## Bound ambition by reversibility
|
|
44
|
+
The bigger the bet, the more it must be reversible. Irreversible-risk areas (auth, migrations,
|
|
45
|
+
public API, data model) get the **opposite** of ambition — maximum conservatism, explicit
|
|
46
|
+
rollback, and they **always pause** regardless of mode (the `afk-hitl.md` irreversible-risk
|
|
47
|
+
list is honored verbatim). Size big bets so that if the whole thing vanished tomorrow, you'd be
|
|
48
|
+
fine.
|
|
49
|
+
|
|
50
|
+
## Effort foresight (frame it now, not "later")
|
|
51
|
+
While choosing scope, surface the late-stage questions early: *"What will surprise us at
|
|
52
|
+
integration? What will we wish we'd planned for at polish/test time?"* Turn each into a
|
|
53
|
+
constraint, a risk, or a deferred Non-goal **now** — not a "figure it out later".
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Significance test — fire the full review, or skip it
|
|
2
|
+
|
|
3
|
+
`/rite-temper` is **significance-gated**: full strategic rigor only when the work is big
|
|
4
|
+
enough to earn it, a one-line skip otherwise. This is the shared definition used by both the
|
|
5
|
+
optional `/rite-temper` path and the always-run (significance-gated) `/rite-autocomplete` step,
|
|
6
|
+
so they agree on when it fires.
|
|
7
|
+
|
|
8
|
+
A strategic review of a five-line, reversible change is theatre; a strategic review of an
|
|
9
|
+
auth rewrite is the cheapest insurance you'll buy. Gate on stakes and shape, not uniformly.
|
|
10
|
+
|
|
11
|
+
## Fire the FULL review when ANY trips
|
|
12
|
+
- **Irreversible-risk contact** — the slice/spec touches anything on the `afk-hitl.md`
|
|
13
|
+
irreversible-risk list: destructive data migration, auth/authz boundary, public-API break,
|
|
14
|
+
external-service contract, filesystem destruction outside the workspace.
|
|
15
|
+
- **Data model** — new/changed entities, relationships, or persistence shape.
|
|
16
|
+
- **Cross-module blast radius** — the impact (from a code-intelligence index if available — see
|
|
17
|
+
`../../../rules/tooling.md` — or an honest estimate) crosses
|
|
18
|
+
module/service boundaries or has many dependents.
|
|
19
|
+
- **Greenfield / ambiguous scope** — a new surface with no existing seam to follow, or a spec
|
|
20
|
+
whose "right size" is genuinely open (multiple defensible scopes).
|
|
21
|
+
- **Multi-slice / multi-day** — the work decomposes into several slices (large enough that a
|
|
22
|
+
wrong scope call is expensive to unwind).
|
|
23
|
+
- **The user asked** — "think bigger", "is this ambitious enough", "scope check", "pre-mortem",
|
|
24
|
+
an explicit `/rite-temper` invocation, or a chosen `--mode`. An explicit ask always fires.
|
|
25
|
+
|
|
26
|
+
## Skip (low stakes) when ALL hold
|
|
27
|
+
- Single-module, reversible, behavior-shaped-not-structural change.
|
|
28
|
+
- No irreversible-risk contact; blast radius contained to the touched files.
|
|
29
|
+
- Scope is unambiguous — there's one obvious right size and the spec already has it.
|
|
30
|
+
|
|
31
|
+
On skip, **don't run the passes**. Write only the one-line verdict to `strategy.md`:
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
# Strategy: <slug>
|
|
35
|
+
Significance: skipped — low stakes (<the trigger that was NOT met, e.g. "single-module, reversible, scope unambiguous">)
|
|
36
|
+
Next: /rite-define
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then recommend `/rite-define`. A skip is a *recorded* decision, not a silent omission — the
|
|
40
|
+
seal can see the call was made deliberately.
|
|
41
|
+
|
|
42
|
+
## In `/rite-autocomplete`
|
|
43
|
+
Autocomplete runs the significance test every feature. On skip → straight to `/rite-define`
|
|
44
|
+
(no pause). On fire → run the full review under the AFK gate ceiling: `hold-rigor` and
|
|
45
|
+
`reduce-to-MVP` auto-apply (they never grow acceptance); **any `expand` is a blocking pause**;
|
|
46
|
+
irreversible-risk findings always pause. Expansion is never auto-grown unattended.
|