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,69 @@
|
|
|
1
|
+
# Parallel review dispatch
|
|
2
|
+
|
|
3
|
+
How `/rite-review` and `/rite-seal` fan out the fresh-context review subagents under `.claude/agents/`. Loaded on demand by the calling skill — not a skill itself.
|
|
4
|
+
|
|
5
|
+
DevRites ships ten fresh-context review subagents under `.claude/agents/` (plus the write-capable `devrites-slice-wright`, which is not a reviewer). Eight are post-build reviewers used at the seal / multi-axis review; the other two are gate-specific and *not* part of the seal fan-out — `devrites-strategy-reviewer` is **pre-plan** (it judges the spec for `/rite-temper`) and `devrites-plan-reviewer` is **pre-build** (it judges the plan for `/rite-vet`). The seal and the multi-axis review need most of the post-build reviewers running **at the same time**, on the same workspace + diff, so the verdicts don't contaminate each other.
|
|
6
|
+
|
|
7
|
+
Pattern: delegate to specialized agents with isolated context, brief each one precisely, run them concurrently, reconcile on return.
|
|
8
|
+
|
|
9
|
+
## When to use which subagent
|
|
10
|
+
|
|
11
|
+
| Subagent | Always | Conditional |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `devrites-spec-reviewer` | `/rite-review` Spec axis; `/rite-seal` | — |
|
|
14
|
+
| `devrites-code-reviewer` | `/rite-review` Standards axis; `/rite-seal` | — |
|
|
15
|
+
| `devrites-test-analyst` | `/rite-seal` | — |
|
|
16
|
+
| `devrites-frontend-reviewer` | — | UI files in the diff |
|
|
17
|
+
| `devrites-security-auditor` | — | input / auth / data / external integrations / secrets in scope |
|
|
18
|
+
| `devrites-performance-reviewer` | — | perf budget in `spec.md` or visible regression risk |
|
|
19
|
+
| `devrites-doubt-reviewer` | — | a non-trivial decision is being stood up (called from `devrites-doubt`) |
|
|
20
|
+
| `devrites-simplifier-reviewer` | — | `/rite-polish` Phase 1 audit (called from `devrites-audit simplify`) |
|
|
21
|
+
|
|
22
|
+
## Dispatch shape
|
|
23
|
+
|
|
24
|
+
For each chosen subagent, the caller uses the `Task` tool with this prompt shape:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Audit the active DevRites feature.
|
|
28
|
+
|
|
29
|
+
Workspace: .devrites/work/<slug>/
|
|
30
|
+
Read (yourself, fresh context):
|
|
31
|
+
- spec.md (+ acceptance criteria)
|
|
32
|
+
- touched-files.md
|
|
33
|
+
- the git diff
|
|
34
|
+
- <any axis-specific files: decisions.md, evidence.md, references/...>
|
|
35
|
+
|
|
36
|
+
Before judging the diff, derive the expected behaviour from the spec
|
|
37
|
+
yourself, then compare it against what the code does. Anchor every finding
|
|
38
|
+
to file:line plus the spec criterion or command output that proves it —
|
|
39
|
+
an unanchored finding is a Suggestion at most. The order or length of the
|
|
40
|
+
diff is not evidence.
|
|
41
|
+
|
|
42
|
+
Apply your documented discipline. Return labeled findings (Critical /
|
|
43
|
+
Important / Suggestion / Nit / FYI) using your documented output format,
|
|
44
|
+
ONE FINDING PER LINE, cite file:line.
|
|
45
|
+
|
|
46
|
+
Feature scope only. No edits. Do not summarize or re-rank — the caller
|
|
47
|
+
reconciles.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Rules:
|
|
51
|
+
|
|
52
|
+
- **One Task call per subagent.** Send them in a single message with multiple `Task` invocations so the runtime dispatches concurrently.
|
|
53
|
+
- **No cross-pollination.** Each subagent gets only its narrow brief and the workspace path. Do not pass another subagent's findings into a sibling's prompt — that recreates the masking problem.
|
|
54
|
+
- **No author context.** Do not include the caller's analysis or the user's framing of the change; the point is a fresh, adversarial read.
|
|
55
|
+
- **Feature scope only.** Each subagent must stay inside `touched-files.md` + the diff.
|
|
56
|
+
|
|
57
|
+
## Reconciliation
|
|
58
|
+
|
|
59
|
+
When the subagents return:
|
|
60
|
+
|
|
61
|
+
1. **Quote verbatim.** Place each subagent's findings under its own `## <axis>` heading in `review.md` / `seal.md`. Do not merge, re-rank, or summarize.
|
|
62
|
+
2. **Surface contradictions explicitly.** "Spec axis says complete, Standards axis says untestable" is a finding, not noise. The caller decides at the gate.
|
|
63
|
+
3. **Severity is the gate, not a score.** Sum the labels (`Critical / Important / Suggestion / Nit / FYI`) and apply the caller's gate (`/rite-seal` blocks on `Critical == 0`; `/rite-review` reports counts).
|
|
64
|
+
4. **One scale.** All subagents use the same five-label scale (Critical / Important / Suggestion / Nit / FYI). Reject any subagent output that invents its own. **Exception:** `devrites-simplifier-reviewer` deliberately emits only Suggestion / Nit / FYI (it is non-blocking by design) — that is a valid subset of the scale, not an invented one; do not reject it during reconciliation.
|
|
65
|
+
5. **Consensus roll-up (after the verbatim per-axis record).** Keep every axis's findings verbatim under its `## <axis>` heading (above), then add one deduped roll-up the gate reads: where **≥2 axes flag the same `file:line`**, raise it to the top and mark it *consensus* — independent corroboration raises confidence. A lone low-confidence finding with no `file:line` or evidence anchor drops out of the roll-up (it stays in its per-axis section). The roll-up reduces noise without hiding any axis — the verbatim sections are the audit trail; the roll-up is the actionable summary the gate acts on.
|
|
66
|
+
|
|
67
|
+
## Fallback
|
|
68
|
+
|
|
69
|
+
If the `Task` tool is unavailable in the current environment, the caller runs the relevant subagent discipline **inline** in its own context and flags the result as a fallback (not an independent review). The seal weighs the fallback differently — see [`./risk-and-rollback.md`](./risk-and-rollback.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Risk & rollback
|
|
2
|
+
|
|
3
|
+
Before GO, know how to undo the change and what could go wrong in production.
|
|
4
|
+
|
|
5
|
+
## Risk scan
|
|
6
|
+
Rank risks; for each, note likelihood × impact and any mitigation:
|
|
7
|
+
- **Data**: schema changes, data migration, destructive operations, backfills.
|
|
8
|
+
- **Security**: new trust boundaries, auth/authz changes, secret handling, new deps.
|
|
9
|
+
- **Compatibility**: API contract changes, breaking changes for existing clients,
|
|
10
|
+
feature interactions.
|
|
11
|
+
- **Operational**: new external dependency, config/env requirements, rate limits.
|
|
12
|
+
- **UX**: changed flows users rely on; unverified UI.
|
|
13
|
+
|
|
14
|
+
## Rollback plan (required for risky changes)
|
|
15
|
+
For each risky step, state how to back it out:
|
|
16
|
+
- **Migrations**: is there a reversible `down` / a documented manual revert? Is data
|
|
17
|
+
loss possible on rollback?
|
|
18
|
+
- **Feature flag**: can it be disabled without a deploy?
|
|
19
|
+
- **Revert boundary**: can the change be `git revert`-ed cleanly, or does it entangle
|
|
20
|
+
with other work?
|
|
21
|
+
- **Data**: is there a backup / a way to restore prior state?
|
|
22
|
+
|
|
23
|
+
## Blocking rules
|
|
24
|
+
- A **destructive or data-migration change with no rollback plan** is a **NO-GO**.
|
|
25
|
+
- A new external dependency with no failure handling is at least **Important**.
|
|
26
|
+
- Record the chosen rollback path in `seal.md` → "Rollback / Recovery".
|
|
27
|
+
|
|
28
|
+
## Destructive operations
|
|
29
|
+
Confirm any destructive step with the user before shipping. Verify backups exist where
|
|
30
|
+
relevant. Never treat an irreversible action as routine.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# `seal.md` template
|
|
2
|
+
|
|
3
|
+
Loaded on demand by `/rite-seal`. The seal writes this template (filled in) to `.devrites/work/<slug>/seal.md` as the durable record of the GO / NO-GO verdict.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Seal: <Feature>
|
|
7
|
+
|
|
8
|
+
Verdict: GO / NO-GO
|
|
9
|
+
|
|
10
|
+
## Acceptance Criteria
|
|
11
|
+
- [ ] <criterion> — evidence: <...>
|
|
12
|
+
|
|
13
|
+
## Verification Evidence
|
|
14
|
+
<tests / build / lint summary>
|
|
15
|
+
|
|
16
|
+
## Browser Evidence
|
|
17
|
+
<summary | n/a>
|
|
18
|
+
|
|
19
|
+
## Risks
|
|
20
|
+
<ranked>
|
|
21
|
+
|
|
22
|
+
## Blockers
|
|
23
|
+
<must-fix before ship>
|
|
24
|
+
|
|
25
|
+
## Non-blocking Follow-ups
|
|
26
|
+
<deferred items>
|
|
27
|
+
|
|
28
|
+
## Rollback / Recovery
|
|
29
|
+
<how to back this out>
|
|
30
|
+
|
|
31
|
+
## Final Decision
|
|
32
|
+
<one paragraph: verdict + why>
|
|
33
|
+
|
|
34
|
+
## Footprint
|
|
35
|
+
<deterministic fan-out from footprint.sh — subagents · slices · wall-clock; never tokens/cost>
|
|
36
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rite-ship
|
|
3
|
+
description: Ship the sealed feature and close the task — render type-GO, run the irreversible git commit/push/tag (or open the PR), write ship.md, then archive the workspace and clear .devrites/ACTIVE. Use when the user says "ship it", "ship this", "push it out", "close the task", "finish and archive", or right after /rite-seal returns GO. Not for the GO/NO-GO decision itself (use /rite-seal) or an unsealed feature.
|
|
4
|
+
argument-hint: "[feature-slug]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /rite-ship — ship + close the task
|
|
9
|
+
|
|
10
|
+
The final phase. `/rite-seal` **decides** GO/NO-GO; `/rite-ship` **executes** the
|
|
11
|
+
irreversible git actions and **closes** the feature. **Read the active workspace
|
|
12
|
+
first**; if none, tell the user to run `/rite-spec <feature>`.
|
|
13
|
+
|
|
14
|
+
Refuses to ship unless `seal.md` records a **GO** verdict.
|
|
15
|
+
|
|
16
|
+
## Rules consulted (read on demand from `.claude/rules/`)
|
|
17
|
+
**Step 0:** Read `.claude/rules/core.md` first. Then pull on demand:
|
|
18
|
+
- `git-workflow.md` — Conventional Commits, atomic commits, the never-commit list.
|
|
19
|
+
- `afk-hitl.md` — type-GO is the irreversible-action gate.
|
|
20
|
+
|
|
21
|
+
## Operating rules
|
|
22
|
+
- **Seal GO is a precondition.** No GO in `seal.md` → stop, point at `/rite-seal`.
|
|
23
|
+
- **Evidence must be fresh.** If any file in `touched-files.md` changed after
|
|
24
|
+
`evidence.md` was written, the proof is stale → stop, point at `/rite-prove`. Enforced
|
|
25
|
+
deterministically by `evidence-fresh.sh` in step 1 (exit 3 = STALE), not by eyeballing
|
|
26
|
+
mtimes (see `.claude/rules/development-workflow.md`).
|
|
27
|
+
- **type-GO before anything irreversible.** Render the prompt verbatim and wait for
|
|
28
|
+
the literal `GO`. Last safety net — render it every time, even under auto-trigger.
|
|
29
|
+
- **Never delete the audit trail.** Closing *archives* the workspace; it never erases
|
|
30
|
+
the `.md` files.
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
1. **Run the shared orientation preamble** — it prints `state.md`, the artifacts present,
|
|
34
|
+
the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
|
|
35
|
+
instead of re-deriving state from raw Markdown:
|
|
36
|
+
```bash
|
|
37
|
+
P=.claude/skills/devrites-lib/scripts/preamble.sh
|
|
38
|
+
[ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
|
|
39
|
+
[ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
|
|
40
|
+
[ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
|
|
41
|
+
```
|
|
42
|
+
Then read `seal.md`, `state.md`, `spec.md`, `touched-files.md`, `evidence.md`, and
|
|
43
|
+
`design-brief.md` (if the feature is UI — the design-memory rollup in step 2a reads it).
|
|
44
|
+
Confirm the verdict is **GO**, then run the deterministic evidence-freshness gate rather than
|
|
45
|
+
eyeballing mtimes (mirrors `/rite-seal`):
|
|
46
|
+
```bash
|
|
47
|
+
E=.claude/skills/devrites-lib/scripts/evidence-fresh.sh
|
|
48
|
+
[ -f "$E" ] || E="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/evidence-fresh.sh"
|
|
49
|
+
[ -f "$E" ] || E=pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh
|
|
50
|
+
[ -f "$E" ] && { bash "$E"; echo "evidence-fresh rc=$?"; } || echo "(evidence-fresh gate unavailable — compare mtimes by hand)"
|
|
51
|
+
```
|
|
52
|
+
**Exit 3 → STALE proof: STOP**, point at `/rite-prove` (a polish/review edit made after
|
|
53
|
+
`/rite-prove` invalidates the proof). Not GO → stop with the single resume command.
|
|
54
|
+
1a. **Health re-check (advisory).** Run the DevRites doctor before the irreversible ladder —
|
|
55
|
+
a stale `ACTIVE` or corrupt workspace here risks shipping or closing the wrong feature.
|
|
56
|
+
Advisory: surface issues, don't block.
|
|
57
|
+
```bash
|
|
58
|
+
D=.claude/skills/devrites-lib/scripts/doctor.sh
|
|
59
|
+
[ -f "$D" ] || D="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/doctor.sh"
|
|
60
|
+
[ -f "$D" ] || D=pack/.claude/skills/devrites-lib/scripts/doctor.sh
|
|
61
|
+
[ -f "$D" ] && { bash "$D"; echo "doctor rc=$?"; } || true
|
|
62
|
+
```
|
|
63
|
+
If it flags the active feature, confirm you're shipping the intended slug before proceeding.
|
|
64
|
+
2. Build the git plan from `git-workflow.md` + the project's own convention: the
|
|
65
|
+
Conventional-Commit message(s), the target branch, and whether a tag / PR applies.
|
|
66
|
+
Scope the commit to `touched-files.md`; never stage secrets or out-of-scope files.
|
|
67
|
+
2a. **Design memory (optional, UI features only).** If the feature shipped UI, offer to roll
|
|
68
|
+
its *proven* design language up into a project-level `DESIGN.md` so the next feature
|
|
69
|
+
inherits the system instead of re-discovering it
|
|
70
|
+
([reference/design-memory.md](reference/design-memory.md)). **Opt-in and confirmed** —
|
|
71
|
+
present the option set (default **skip**; persisting beyond feature scope is the user's
|
|
72
|
+
call), and on yes append `DESIGN.md` to `touched-files.md` so it ships *in this commit*.
|
|
73
|
+
Skip silently when there's no UI. Record the outcome in `ship.md`.
|
|
74
|
+
3. **Render the type-GO prompt** ([reference/git-ship.md](reference/git-ship.md)) and
|
|
75
|
+
wait. Only the literal `GO` proceeds; anything else cancels — record the cancel in
|
|
76
|
+
`ship.md` and stop (do not retry without the user asking).
|
|
77
|
+
4. On `GO`: run the git ladder — commit → push → tag / PR as applicable
|
|
78
|
+
([reference/git-ship.md](reference/git-ship.md)). Capture the commit SHA(s),
|
|
79
|
+
branch, and tag/PR URL.
|
|
80
|
+
4a. **When opening a PR, render a structured body** — not just the commit message:
|
|
81
|
+
**Summary** (what shipped + acceptance n/total) · **Risk & rollback** (the migration /
|
|
82
|
+
destructive / auth touches + how to revert, from `seal.md`'s risk scan) · **What to scrutinize**
|
|
83
|
+
(point reviewers at the highest-blast-radius hunks) · **Evidence** (a condensed `evidence.md` +
|
|
84
|
+
the seal's reconciled reviewer-verdict digest, linking the full `.devrites/archive/<slug>/`
|
|
85
|
+
bundle). **Delete any N/A section** — an empty Risk block is noise.
|
|
86
|
+
4b. **Promote architecturally-significant decisions to ADRs.** For each `decisions.md` ADR that
|
|
87
|
+
records a *durable* architecture / interface choice (not a slice-local call), append it to a
|
|
88
|
+
persistent `docs/adr/ADR-NNN.md` — Nygard shape (Context · Decision · Status `accepted` ·
|
|
89
|
+
Consequences), **append-only**, never rewritten; supersede with a new ADR that links the old.
|
|
90
|
+
The per-feature `decisions.md` is archived with the workspace; the ADR keeps the load-bearing
|
|
91
|
+
*why* discoverable in the repo. Skip if the project keeps no `docs/adr/` and the user doesn't want one.
|
|
92
|
+
5. Write `ship.md` ([reference/ship-template.md](reference/ship-template.md)): what
|
|
93
|
+
shipped, SHA(s), branch, tag/PR, acceptance summary (n/total), link to `seal.md`,
|
|
94
|
+
follow-ups.
|
|
95
|
+
6. **Close the task** ([reference/close-out.md](reference/close-out.md)): set
|
|
96
|
+
`state.md` phase `done`, then run
|
|
97
|
+
`bash .claude/skills/devrites-lib/scripts/close-out.sh <slug>` to archive
|
|
98
|
+
`.devrites/work/<slug>/` → `.devrites/archive/<slug>/` and clear `.devrites/ACTIVE`.
|
|
99
|
+
Every `.md` is preserved in the archive.
|
|
100
|
+
|
|
101
|
+
> **Mid-flight discipline.** When tempted to ship without a GO seal, skip the type-GO,
|
|
102
|
+
> stage files outside `touched-files.md`, or delete the workspace instead of archiving
|
|
103
|
+
> it — stop. See [`anti-patterns`](reference/anti-patterns.md); the gate exists for the
|
|
104
|
+
> failure mode the ask misses.
|
|
105
|
+
|
|
106
|
+
## Output
|
|
107
|
+
|
|
108
|
+
**Footer first** — render the flow ribbon by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`); at ship it reads `ship ✓` across the spine. Keep the fact lines below it terse (`key value · key value`). Then:
|
|
109
|
+
```
|
|
110
|
+
Shipped: <feature>
|
|
111
|
+
Commit: <sha> on <branch> Tag/PR: <ref | none>
|
|
112
|
+
Acceptance: <n/total> proven
|
|
113
|
+
Archived: .devrites/archive/<slug>/ · ACTIVE cleared
|
|
114
|
+
ship.md: .devrites/archive/<slug>/ship.md
|
|
115
|
+
```
|
|
116
|
+
If the user declined type-GO: state that nothing shipped, the seal still reads GO, and
|
|
117
|
+
the resume command (`/rite-ship`).
|
|
118
|
+
|
|
119
|
+
End with `↻ Hygiene: /clear` — the feature is closed; start the next with
|
|
120
|
+
`/rite-spec <feature>`. See `.claude/rules/context-hygiene.md`.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# rite-ship — anti-patterns
|
|
2
|
+
|
|
3
|
+
Load this before any irreversible action — `git commit`, `push`, `tag`, publish, deploy
|
|
4
|
+
— or when tempted to skip the close-out.
|
|
5
|
+
|
|
6
|
+
Pack-wide rationalizations + red flags: see
|
|
7
|
+
[rules/anti-patterns.md](../../../rules/anti-patterns.md).
|
|
8
|
+
|
|
9
|
+
## Phase-specific rationalizations
|
|
10
|
+
|
|
11
|
+
| Excuse | Rebuttal |
|
|
12
|
+
|---|---|
|
|
13
|
+
| "Seal said GO, so I can just push." | A GO verdict is a decision, not authorization. **Render the type-GO prompt every time** and wait for the literal `GO`. |
|
|
14
|
+
| "I'll push the tag now; type-GO is a formality." | Type-GO is the last safety net before an irreversible action. Always render it — even under auto-trigger. |
|
|
15
|
+
| "`git add -A` is faster than listing touched files." | Stage only what's in `touched-files.md`. `-A` sweeps secrets, scratch files, and out-of-scope edits into the ship. |
|
|
16
|
+
| "The evidence is probably still good." | If any touched file changed after `evidence.md`, the proof is stale — stop and re-prove. Ship on fresh evidence only. |
|
|
17
|
+
| "Delete the workspace, the feature's done." | Closing **archives** the workspace (`.devrites/archive/<slug>/`); it never deletes the audit trail. |
|
|
18
|
+
|
|
19
|
+
## Red Flags
|
|
20
|
+
|
|
21
|
+
- About to run `git push` / `git tag` without rendering the type-GO prompt.
|
|
22
|
+
- Shipping without a `GO` verdict recorded in `seal.md`.
|
|
23
|
+
- Staging files not listed in `touched-files.md`, or any secret / `.env`.
|
|
24
|
+
- `rm`-ing `.devrites/work/<slug>/` instead of archiving it.
|
|
25
|
+
- Marking the feature `done` but leaving `.devrites/ACTIVE` pointing at it.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Close-out — archive the workspace, free the active slot
|
|
2
|
+
|
|
3
|
+
Closing a feature means it stops being the *active* work, not that its record is
|
|
4
|
+
deleted. DevRites keeps the full audit trail; it just moves out of the live path.
|
|
5
|
+
|
|
6
|
+
## What close-out does
|
|
7
|
+
|
|
8
|
+
1. **Mark done.** Set `state.md` → `Phase: done`, `Status: done`, and a `Next step`
|
|
9
|
+
of `/rite-spec <next feature>`.
|
|
10
|
+
2. **Archive.** Run the deterministic script:
|
|
11
|
+
```bash
|
|
12
|
+
bash .claude/skills/devrites-lib/scripts/close-out.sh <slug>
|
|
13
|
+
```
|
|
14
|
+
It moves `.devrites/work/<slug>/` → `.devrites/archive/<slug>/` (every `.md`
|
|
15
|
+
intact) and clears `.devrites/ACTIVE` **only if** ACTIVE still points at `<slug>`.
|
|
16
|
+
It refuses to clobber an existing `.devrites/archive/<slug>/` (exit 5).
|
|
17
|
+
3. **Confirm.** ACTIVE is now empty, so the next `/rite-spec` starts a clean feature
|
|
18
|
+
and `/rite-status` reports "no active feature".
|
|
19
|
+
|
|
20
|
+
## Why archive, not delete
|
|
21
|
+
|
|
22
|
+
- The `.md` files (`spec`, `decisions`, `assumptions`, `evidence`, `seal`, `ship`, …)
|
|
23
|
+
are the project's record of *why* the feature is the way it is. A future
|
|
24
|
+
`/rite-zoom-out` or incident review reads them.
|
|
25
|
+
- Deleting them would make the workflow's own "evidence over confidence" rule a lie.
|
|
26
|
+
|
|
27
|
+
## Re-opening an archived feature
|
|
28
|
+
|
|
29
|
+
To resume archived work, move it back:
|
|
30
|
+
`mv .devrites/archive/<slug> .devrites/work/<slug>` and write `<slug>` into
|
|
31
|
+
`.devrites/ACTIVE`. Nothing is lost — close-out is reversible by design.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Design memory — roll proven design language into project `DESIGN.md`
|
|
2
|
+
|
|
3
|
+
Optional, UI-only step at `/rite-ship`. A feature's design decisions live in its
|
|
4
|
+
feature-scoped `design-brief.md` and are thrown away when the workspace archives. **Design
|
|
5
|
+
memory** is the deliberate exception: when a UI feature ships, roll the design language it
|
|
6
|
+
*proved* up into a project-level `DESIGN.md`, so the next feature's `devrites-ux-shape`
|
|
7
|
+
inherits the system instead of re-discovering it.
|
|
8
|
+
|
|
9
|
+
The consumers already exist — `devrites-ux-shape` §1 and
|
|
10
|
+
`devrites-frontend-craft/reference/design-references.md` both read `DESIGN.md` when present.
|
|
11
|
+
This step is the missing **producer**. It closes the loop: feature N seals its design
|
|
12
|
+
language → feature N+1 builds to it.
|
|
13
|
+
|
|
14
|
+
## When it runs
|
|
15
|
+
- **UI features only.** No UI in the diff → skip silently.
|
|
16
|
+
- **At ship, GO sealed, after the git plan, before type-GO** (step 2a) — so the user sees
|
|
17
|
+
the full staged change set (code + `DESIGN.md`) under the single type-GO that ships it.
|
|
18
|
+
- **Opt-in and confirmed.** Persisting to a project-wide artifact is outside feature scope
|
|
19
|
+
(`rules/core.md` rule 7) — so it is *never silent*. Present a ranked option set
|
|
20
|
+
(`rules/afk-hitl.md` — Option set); **default is skip**. The user opts to persist.
|
|
21
|
+
- **AFK**: first-time `DESIGN.md` *creation* is treated as a `validating` gate (a new
|
|
22
|
+
persistent project artifact) — propose + queue, don't auto-create. An *append* to an
|
|
23
|
+
existing `DESIGN.md` is `advisory` and may auto-proceed when `allow_gates` permits, since
|
|
24
|
+
it only adds evidence-proven entries.
|
|
25
|
+
|
|
26
|
+
## Inputs (proven only)
|
|
27
|
+
- `design-brief.md` — direction, color strategy, **calibration** (density / motion), key
|
|
28
|
+
states, named anchors, and the per-slice **Build-time refinements**.
|
|
29
|
+
- The **final diff** + `touched-files.md` — what tokens / components / states *actually
|
|
30
|
+
shipped* (the evidence). Roll up only what the diff proves, not what the brief intended.
|
|
31
|
+
- Existing `DESIGN.md` if present — the merge target.
|
|
32
|
+
|
|
33
|
+
## What to roll up — the project's *converged* system, evidence-gated
|
|
34
|
+
Only entries the shipped, proven feature establishes. Each is durable, cross-feature design
|
|
35
|
+
language — not this feature's one-off choices.
|
|
36
|
+
- **Tokens introduced + used** — new color roles / spacing steps / type steps / elevation
|
|
37
|
+
/ radius that shipped and are reusable. Names and values, mirrored from the code.
|
|
38
|
+
- **Color strategy + calibration baseline** — the strategy (Restrained / Committed / …) and
|
|
39
|
+
density / motion the project keeps landing on; note a deviation as a deviation, not a new
|
|
40
|
+
default.
|
|
41
|
+
- **Type & spacing scales** in actual use; **motion** classes + easing; **materiality**
|
|
42
|
+
(elevation set, hairline usage, glass / texture policy).
|
|
43
|
+
- **Component behaviors** — for each shared component this feature established or extended:
|
|
44
|
+
the states it ships and its interaction model. Grows one feature at a time.
|
|
45
|
+
- **Named-anchor lineage** — the anchors features steered toward, so later work stays
|
|
46
|
+
coherent with what's already built.
|
|
47
|
+
- **Anti-slop exceptions** — any banned default the project *intentionally* uses (with the
|
|
48
|
+
why), so build / polish don't "correct" a deliberate choice.
|
|
49
|
+
|
|
50
|
+
## Merge discipline
|
|
51
|
+
- **Append, don't overwrite.** Add proven entries; never silently rewrite an existing one.
|
|
52
|
+
- **Conflict is a question, not an edit.** A new token / font / strategy that contradicts an
|
|
53
|
+
existing `DESIGN.md` entry → surface it to the user (the option set), don't resolve it
|
|
54
|
+
yourself. One design system per project.
|
|
55
|
+
- **Never invent.** If the feature didn't prove it, it doesn't go in. `DESIGN.md` is design
|
|
56
|
+
*memory*, not design *aspiration*.
|
|
57
|
+
- **Attribute + keep lean.** Tag each new entry with the feature slug so the lineage is
|
|
58
|
+
legible; one good line beats a paragraph. The file is read every future spec — keep it
|
|
59
|
+
scannable.
|
|
60
|
+
|
|
61
|
+
## How it commits
|
|
62
|
+
`DESIGN.md` is a tracked project artifact, so it ships **in the feature commit**:
|
|
63
|
+
1. Write / update `<project-root>/DESIGN.md` from the template below.
|
|
64
|
+
2. **Append `DESIGN.md` to `touched-files.md`** so the existing ship commit-scoping (SKILL
|
|
65
|
+
steps 2 + 4) stages it — the design-memory write rides the same commit and the same
|
|
66
|
+
type-GO, no second commit.
|
|
67
|
+
3. Note the rollup in `ship.md` (what was added, or "design-memory: skipped by user").
|
|
68
|
+
|
|
69
|
+
## `DESIGN.md` template (project-level, stack-agnostic)
|
|
70
|
+
```markdown
|
|
71
|
+
# DESIGN.md — <project> design memory
|
|
72
|
+
|
|
73
|
+
> Rolled up from shipped features by `/rite-ship` (design memory). Read by
|
|
74
|
+
> `devrites-ux-shape` and `devrites-frontend-craft` as the inherited system. Evidence-only:
|
|
75
|
+
> every entry shipped and was proven. Edit through a feature's ship, not by hand.
|
|
76
|
+
|
|
77
|
+
## Register & direction
|
|
78
|
+
Default register per surface (brand / product) and the scene-derived direction the product
|
|
79
|
+
keeps converging on.
|
|
80
|
+
|
|
81
|
+
## Color
|
|
82
|
+
Strategy baseline (Restrained | Committed | Multi-role | Saturated). Token roles
|
|
83
|
+
(surface / text / accent / border / danger / …) with values or token names. Dark-mode approach.
|
|
84
|
+
|
|
85
|
+
## Calibration
|
|
86
|
+
Density baseline (Airy | Balanced | Dense) · Motion baseline (Minimal | Standard | Expressive).
|
|
87
|
+
Surfaces that deviate + why.
|
|
88
|
+
|
|
89
|
+
## Typography
|
|
90
|
+
Families; the scale in use (fixed rem / fluid clamp); heading↔body ratio; weights.
|
|
91
|
+
|
|
92
|
+
## Spacing
|
|
93
|
+
The scale (4 pt multiples) and section rhythm in use.
|
|
94
|
+
|
|
95
|
+
## Motion
|
|
96
|
+
Classes in use, easing, `prefers-reduced-motion` handling.
|
|
97
|
+
|
|
98
|
+
## Materiality
|
|
99
|
+
Elevation token set, hairline usage, glass policy, texture / asset approach.
|
|
100
|
+
|
|
101
|
+
## Components (proven behaviors)
|
|
102
|
+
| Component | States shipped | Interaction model | First proven by |
|
|
103
|
+
|---|---|---|---|
|
|
104
|
+
| <name> | default/hover/focus/loading/empty/error/… | inline / navigated / modal · feedback | <slug> |
|
|
105
|
+
|
|
106
|
+
## Named-anchor lineage
|
|
107
|
+
The anchors features steered toward (keeps new work coherent).
|
|
108
|
+
|
|
109
|
+
## Anti-slop — project exceptions
|
|
110
|
+
Banned defaults this project *intentionally* uses, with the why (so build/polish don't undo them).
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## NEVER (design memory)
|
|
114
|
+
- Never roll up unattended on first creation — a new persistent project artifact is a
|
|
115
|
+
confirmed step, never an AFK silent write.
|
|
116
|
+
- Never write an entry the feature didn't *prove* shipped — no aspirational tokens.
|
|
117
|
+
- Never overwrite or silently reconcile a conflicting existing entry — surface it.
|
|
118
|
+
- Never persist a feature-only one-off as if it were the project default.
|
|
119
|
+
- Never add `DESIGN.md` to the commit without appending it to `touched-files.md` first
|
|
120
|
+
(it would fall outside the ship's commit scope).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# The irreversible ship — type-GO + git ladder
|
|
2
|
+
|
|
3
|
+
`/rite-ship` is the only DevRites phase that runs actions that cannot be undone
|
|
4
|
+
silently. The seal verdict authorizes the *decision*; this prompt authorizes the
|
|
5
|
+
*action*.
|
|
6
|
+
|
|
7
|
+
## The type-GO prompt (render verbatim, wait)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
About to: <git commit + git push [+ git tag vX.Y.Z | open PR]>
|
|
11
|
+
Feature: <slug>
|
|
12
|
+
Verdict: GO (seal.md)
|
|
13
|
+
Acceptance criteria proven: <n / total>
|
|
14
|
+
Branch: <target branch>
|
|
15
|
+
|
|
16
|
+
Type "GO" exactly to proceed. Anything else cancels.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Rules for the prompt:
|
|
20
|
+
- Render it **every time**, even with auto-trigger enabled — this is the last net.
|
|
21
|
+
- Only the literal string `GO` (no quotes) proceeds. `y`, `yes`, `go` (lowercase),
|
|
22
|
+
`ok`, `sure`, `do it`, or anything else → cancel, record the cancel in `ship.md`
|
|
23
|
+
as "user declined irreversible step at <ts>", and stop.
|
|
24
|
+
- `/rite-autocomplete --ship` (or `--yolo`) is the *only* caller permitted to satisfy
|
|
25
|
+
this prompt automatically. Every other path requires the human's literal `GO`.
|
|
26
|
+
|
|
27
|
+
## The git ladder
|
|
28
|
+
|
|
29
|
+
Follow `.claude/rules/git-workflow.md` and the project's own convention. Do not invent
|
|
30
|
+
a release flow the project doesn't use.
|
|
31
|
+
|
|
32
|
+
1. **Stage** only the files in `touched-files.md`. Never `git add -A`; never stage
|
|
33
|
+
secrets, `.env`, or out-of-scope files (see the never-commit list in `git-workflow.md`).
|
|
34
|
+
2. **Commit** with a Conventional Commit message derived from the feature (`feat(scope):
|
|
35
|
+
…` / `fix(scope): …`). Atomic — one logical change. Put the *why* in the body.
|
|
36
|
+
3. **Push** to the target branch (the feature branch, or per the project's trunk
|
|
37
|
+
convention).
|
|
38
|
+
4. **Tag / PR** only if the project does it: cut a tag when the project tags releases,
|
|
39
|
+
or open a PR when the project reviews via PRs. Otherwise skip — pushing the branch
|
|
40
|
+
is the ship.
|
|
41
|
+
|
|
42
|
+
Capture the resulting commit SHA(s), branch, and tag/PR URL for `ship.md`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# `ship.md` template
|
|
2
|
+
|
|
3
|
+
The durable record of what shipped and how. Written by `/rite-ship` into the
|
|
4
|
+
workspace **before** close-out, so it travels into `.devrites/archive/<slug>/ship.md`.
|
|
5
|
+
|
|
6
|
+
```markdown
|
|
7
|
+
# Ship: <slug>
|
|
8
|
+
|
|
9
|
+
- Shipped at: <iso>
|
|
10
|
+
- Verdict: GO (see seal.md)
|
|
11
|
+
- Branch: <branch>
|
|
12
|
+
- Commit(s): <sha> [<sha> …]
|
|
13
|
+
- Tag / PR: <vX.Y.Z | PR url | none>
|
|
14
|
+
|
|
15
|
+
## What shipped
|
|
16
|
+
<one-paragraph summary of the feature delivered, in the project's vocabulary>
|
|
17
|
+
|
|
18
|
+
## Acceptance
|
|
19
|
+
- Criteria proven: <n / total> (full walk in evidence.md / seal.md)
|
|
20
|
+
- Outstanding (shipped with known follow-ups): <list | none>
|
|
21
|
+
|
|
22
|
+
## Evidence pointers
|
|
23
|
+
- seal.md — final GO/NO-GO verdict + reviewer reconciliation
|
|
24
|
+
- evidence.md — acceptance walk; browser-evidence.md (if UI)
|
|
25
|
+
- review.md — multi-axis review findings
|
|
26
|
+
|
|
27
|
+
## Follow-ups (FYI, not blocking)
|
|
28
|
+
- <recorded follow-up + where it's tracked> | none
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Keep it short — it points at the existing audit files rather than restating them.
|
|
32
|
+
The acceptance count must match `seal.md`; if they disagree, the seal is the source of
|
|
33
|
+
truth and the ship should not have proceeded.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rite-spec
|
|
3
|
+
description: Investigate a new feature and write `spec.md` (placement, gaps, design refs, measurable acceptance) under `.devrites/work/<slug>/`. Use when the user says "new feature", "spec this out", "start a project", "I have an idea". Not for planning approved specs (use `/rite-define`) or replanning (use `/rite-plan`).
|
|
4
|
+
argument-hint: "<feature or idea>"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /rite-spec — investigate deeply, write the spec
|
|
9
|
+
|
|
10
|
+
The spec phase. Turn a request (even a vague one) into a **fully-covered, correctly-placed
|
|
11
|
+
`spec.md`** by investigating deeply and closing every material gap with the human — so
|
|
12
|
+
`/rite-define` can plan it and nothing is missed. **No plan, tasks, or code here** — those
|
|
13
|
+
are `/rite-define` and `/rite-build`.
|
|
14
|
+
|
|
15
|
+
> **Too small to spec? Use `/rite-quick`.** A typo, copy tweak, config bump, or one-function
|
|
16
|
+
> fix does **not** need a full workspace + lifecycle. Stop and run `/rite-quick <change>` — its
|
|
17
|
+
> express lane (one contract → TDD build → scoped prove → ship) escalates back here the moment
|
|
18
|
+
> the change turns out to touch auth / data / a migration / a public API / more than one slice.
|
|
19
|
+
> Spec is for real features; don't pay its ceremony for a one-off.
|
|
20
|
+
|
|
21
|
+
## Rules consulted (read on demand from `.claude/rules/`)
|
|
22
|
+
**Step 0:** Read `.claude/rules/core.md` first. DevRites skills Read `.claude/rules/core.md`
|
|
23
|
+
as their first step; the other rule files load on demand. Pull `documentation.md` via `Read`
|
|
24
|
+
when capturing significant spec decisions (why-not-what, ADR-style notes in `decisions.md`).
|
|
25
|
+
|
|
26
|
+
## Operating rules (DevRites core)
|
|
27
|
+
- No silent assumptions · no guessing through confusion · prefer existing conventions ·
|
|
28
|
+
ask the human when an answer changes scope, placement, data model, UX, security,
|
|
29
|
+
migration risk, or acceptance.
|
|
30
|
+
|
|
31
|
+
## Workflow
|
|
32
|
+
0. **Read `.claude/rules/core.md`** — the always-on operating rules and anti-rationalizations.
|
|
33
|
+
Then **run the shared orientation preamble** — it prints `state.md`, the artifacts present,
|
|
34
|
+
the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
|
|
35
|
+
instead of re-deriving state from raw Markdown:
|
|
36
|
+
```bash
|
|
37
|
+
P=.claude/skills/devrites-lib/scripts/preamble.sh
|
|
38
|
+
[ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
|
|
39
|
+
[ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
|
|
40
|
+
[ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
|
|
41
|
+
```
|
|
42
|
+
1. **Understand the request** (`$ARGUMENTS`). Restate the goal and the *real problem
|
|
43
|
+
behind it* in a sentence or two.
|
|
44
|
+
2. **Investigate deeply** — [investigation](reference/investigation.md). Produce, and
|
|
45
|
+
later write into the spec: **current behavior**; **placement** (which module/layer/
|
|
46
|
+
file/component should own it, the seam, patterns to reuse, and integration points —
|
|
47
|
+
callers, dependents, data, APIs/events); **what it resolves**; **issues**
|
|
48
|
+
(conflicts/constraints); **gaps** (unknowns); **blast radius**. Use a code-intelligence
|
|
49
|
+
index **if available** — `codebase-memory-mcp` first, cross-checked with `codegraph`
|
|
50
|
+
(`.codegraph/` / `codegraph_*`) + `graphify` (`graphify-out/`), else standard methods
|
|
51
|
+
(LSP / `Read`/`Grep`/`Glob`); see `.claude/rules/tooling.md` —
|
|
52
|
+
for placement/callers/impact instead of broad file reads; fall back to reading files. For
|
|
53
|
+
uncertain external library/framework facts that bear on placement or feasibility, consult
|
|
54
|
+
context7 if available.
|
|
55
|
+
Also discover the project's **test / build/typecheck/lint** commands and the
|
|
56
|
+
frontend/backend systems; read `PRODUCT.md` / `DESIGN.md` / `CLAUDE.md` / `AGENTS.md` if
|
|
57
|
+
present (`AGENTS.md` is the cross-tool agent-conventions standard — treat it as project
|
|
58
|
+
conventions the build must follow, same standing as `CLAUDE.md`).
|
|
59
|
+
3. **Gather design references (optional)** — [references-intake](reference/references-intake.md).
|
|
60
|
+
The human **may** attach screenshots, mockups, a Figma link, a video, or links — or
|
|
61
|
+
**none at all** (perfectly normal; skip this step then). If any are given: **view/fetch**
|
|
62
|
+
them, **save local files** into `.devrites/work/<slug>/references/`, and index them in
|
|
63
|
+
`references.md`. They become the target later phases verify against.
|
|
64
|
+
3a. **Shape the UX/UI before code (if the feature touches UI)** — when this feature is
|
|
65
|
+
frontend ([frontend-trigger](../rite-build/reference/frontend-trigger.md)), apply
|
|
66
|
+
`devrites-ux-shape` **now**, woven into the spec — not as a separate phase. It turns the
|
|
67
|
+
references + the spec into a feature-level **`design-brief.md`** (design direction, key
|
|
68
|
+
states, interaction model, optional Figma/image visual-direction probe) that `/rite-build`
|
|
69
|
+
targets so the UI is built to plan, not guessed. In HITL it pauses for the human to
|
|
70
|
+
confirm the direction; in AFK it asserts the best guess and logs it. Pure
|
|
71
|
+
backend/data/CLI features skip this.
|
|
72
|
+
4. **Close the gaps with the human.** Turn each material gap/issue into a question — one
|
|
73
|
+
at a time, **best guess attached**, structured options + escape hatch. (Vague ask →
|
|
74
|
+
`devrites-interview`; rough idea → `rite-pressure-test`; ladders in
|
|
75
|
+
[interview-patterns](reference/interview-patterns.md) / [question-protocol](reference/question-protocol.md).)
|
|
76
|
+
For a vague ask, **map the decision tree** and resolve each branch depth-first; **cover
|
|
77
|
+
every dimension** (objective · scope · data model · UX · integration · non-functional ·
|
|
78
|
+
acceptance) — resolved or explicitly deferred — and **stop when answers converge** or you
|
|
79
|
+
can predict them (don't interrogate). Aim for **zero blocking gaps**. *If a gap is genuinely undecidable on paper (state
|
|
80
|
+
machine that may deadlock, data shape ambiguity, "which UX wins") → suggest a
|
|
81
|
+
scoped detour to `/rite-prototype` to answer that ONE question before
|
|
82
|
+
continuing.*
|
|
83
|
+
5. **Create the workspace** + set `.devrites/ACTIVE`
|
|
84
|
+
([state-workspace](reference/state-workspace.md)). Write `spec.md`
|
|
85
|
+
([spec-template](reference/spec-template.md)) — WHAT/WHY, technology-agnostic, with
|
|
86
|
+
**Placement & integration**, **Design references**, **Gaps/issues/decisions**, and
|
|
87
|
+
measurable acceptance ([acceptance-criteria](reference/acceptance-criteria.md)). Also
|
|
88
|
+
write `brief.md`, `references.md`, `questions.md`, `decisions.md`, `assumptions.md`,
|
|
89
|
+
and an initial `state.md` (phase: spec). When the feature touches UI, `design-brief.md`
|
|
90
|
+
is written here too (by `devrites-ux-shape`, step 3a).
|
|
91
|
+
5a. **Score the spec prose — "unit tests for English"** ([spec-checklists](reference/spec-checklists.md)).
|
|
92
|
+
Emit `.devrites/work/<slug>/checklists/<domain>.md` (one per requirement domain the spec covers:
|
|
93
|
+
functional · data-model · interaction · non-functional · edge-cases). Each tests the *requirement
|
|
94
|
+
prose* for completeness / clarity / measurability — "is 'prominent' quantified?", "is every
|
|
95
|
+
enumeration closed?" — **not** the implementation. Fix each CRITICAL fail by editing the spec
|
|
96
|
+
(not by softening the question); minor fails are logged. The checklists feed the readiness gate.
|
|
97
|
+
6. **Run the spec readiness gate** (bottom of spec-template): no blocking
|
|
98
|
+
`[NEEDS CLARIFICATION]`, placement decided, all material gaps resolved, any design
|
|
99
|
+
references provided are saved, **UX/UI shaped into `design-brief.md` if the feature is
|
|
100
|
+
UI**, requirements testable, success criteria measurable, **every `checklists/<domain>.md` at
|
|
101
|
+
`Verdict: pass`**. When it passes, write `Spec gate: passed <iso>` to `state.md`. **Stop** when
|
|
102
|
+
it passes.
|
|
103
|
+
|
|
104
|
+
> **Mid-flight discipline.** When tempted to skip investigation depth, gap-closing, or placement decisions — see [`anti-patterns`](reference/anti-patterns.md) (Common Rationalizations + Red Flags). Load it the moment you reach for the excuse.
|
|
105
|
+
|
|
106
|
+
## Output
|
|
107
|
+
|
|
108
|
+
**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:
|
|
109
|
+
```
|
|
110
|
+
Spec ready: <slug>
|
|
111
|
+
Objective: <one sentence> Placement: <where it lives>
|
|
112
|
+
Resolves: <value>
|
|
113
|
+
References: <n saved | none provided>
|
|
114
|
+
Design brief: <design-brief.md shaped (compact|full) | n/a — not UI>
|
|
115
|
+
Gaps closed: <n> Open (non-blocking): <n>
|
|
116
|
+
Checklists: <n domains scored — all pass | BLOCKED: n CRITICAL open>
|
|
117
|
+
Next: big / risky feature (auth · data model · public API · migration · multi-slice · ambiguous scope)?
|
|
118
|
+
→ /rite-temper (strategic review: scope mode + pre-mortem, hardens the spec) — then /rite-define.
|
|
119
|
+
Small / reversible / unambiguous? → /rite-define directly.
|
|
120
|
+
↻ Hygiene: /clear before /rite-define (spec.md + references/ + decisions.md + assumptions.md + questions.md captured); /rite-handoff if away > a few hours. See rules/context-hygiene.md.
|
|
121
|
+
```
|
|
122
|
+
If a workspace with the slug already exists, update its spec rather than overwriting blindly —
|
|
123
|
+
and **show the human a short diff of what changed** in `spec.md` (acceptance criteria added /
|
|
124
|
+
removed / reworded) before proceeding. A spec edit reviewed as a diff catches silent scope
|
|
125
|
+
drift that a full re-read buries; this is the spec-review view (`/rite-spec --review` renders
|
|
126
|
+
just the diff + the open-question delta, no re-investigation).
|