devrites 4.2.0 → 4.4.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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/docs/cli.md +15 -0
- package/docs/engine/commands.md +20 -2
- package/docs/orchestration.md +6 -3
- package/engine/commands.go +1 -1
- package/engine/internal/lib/cli_observe.go +66 -0
- package/engine/internal/lib/observe_summary.go +79 -0
- package/engine/internal/lib/open_visual.go +254 -0
- package/engine/internal/lib/open_visual_test.go +280 -0
- package/engine/internal/lib/skilltrust.go +196 -0
- package/engine/internal/lib/taskgraph.go +162 -0
- package/engine/internal/lib/taskgraph_test.go +150 -0
- package/engine/internal/lib/visual_outline.go +163 -0
- package/engine/internal/lib/visual_outline_test.go +161 -0
- package/engine/internal/lib/workspace_read.go +29 -0
- package/engine/internal/parallel/cli.go +467 -0
- package/engine/internal/parallel/git.go +181 -0
- package/engine/internal/parallel/lease.go +244 -0
- package/engine/internal/parallel/ops.go +416 -0
- package/engine/internal/parallel/parallel_test.go +242 -0
- package/engine/internal/parallel/pathdisjoint.go +129 -0
- package/engine/internal/parallel/pathdisjoint_test.go +97 -0
- package/engine/internal/state/status.go +41 -16
- package/engine/main.go +76 -3
- package/engine/root_routing_test.go +50 -15
- package/engine/testdata/visual/open-visual-smoke.html +675 -0
- package/engine/testdata/visual/open-visual-smoke.outline.md +54 -0
- package/pack/.claude/skills/devrites-lib/SKILL.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +22 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/code.md +46 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +44 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +53 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/index.md +57 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/input.md +47 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/plan.md +49 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/slides.md +42 -0
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/table.md +44 -0
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +24 -9
- package/pack/.claude/skills/rite-build/SKILL.md +29 -36
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +19 -25
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +29 -59
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +8 -3
- package/pack/.claude/skills/rite-build/reference/output.md +2 -0
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +64 -0
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +6 -5
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +7 -3
- package/pack/.claude/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/.claude/skills/rite-customize/SKILL.md +3 -2
- package/pack/.claude/skills/rite-define/SKILL.md +10 -1
- package/pack/.claude/skills/rite-doctor/SKILL.md +5 -1
- package/pack/.claude/skills/rite-explain/SKILL.md +23 -7
- package/pack/.claude/skills/rite-explain/reference/intake.md +11 -2
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +3 -0
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +5 -2
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +26 -3
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +22 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/code.md +46 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +44 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +53 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/index.md +57 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/input.md +47 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/plan.md +49 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/slides.md +42 -0
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/table.md +44 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +24 -9
- package/pack/generated/claude/skills/rite-build/SKILL.md +29 -36
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +19 -25
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +29 -59
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +8 -3
- package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +64 -0
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +6 -5
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +7 -3
- package/pack/generated/claude/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/claude/skills/rite-customize/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-define/SKILL.md +10 -1
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +5 -1
- package/pack/generated/claude/skills/rite-explain/SKILL.md +23 -7
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +11 -2
- package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +3 -0
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +5 -2
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +26 -3
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +22 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/code.md +46 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/comparison.md +44 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/diagram.md +53 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/index.md +57 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/input.md +47 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/plan.md +49 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/slides.md +42 -0
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/table.md +44 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +24 -9
- package/pack/generated/codex/skills/rite-build/SKILL.md +29 -36
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +19 -25
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +29 -59
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +8 -3
- package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +64 -0
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +6 -5
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +7 -3
- package/pack/generated/codex/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/codex/skills/rite-customize/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-define/SKILL.md +10 -1
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +5 -1
- package/pack/generated/codex/skills/rite-explain/SKILL.md +23 -7
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +11 -2
- package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +3 -0
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +5 -2
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +26 -3
- package/package.json +1 -1
- package/scripts/install-lib.sh +1 -1
|
@@ -31,7 +31,7 @@ Readers continue to accept safe legacy basenames; no ordinary phase renames one.
|
|
|
31
31
|
| vet/build/converge | plan artifacts plus `eng-review.md`, `test-plan.md`; Build creates and maintains `touched-files.md` after its first green slice |
|
|
32
32
|
| prove/polish/review | vetted plan artifacts plus `evidence.md`, `touched-files.md` |
|
|
33
33
|
| seal/ship/done | proof artifacts plus `review.md`, `seal.md` |
|
|
34
|
-
| conditional | `flows.md` when diagrams clarify; `design-brief.md` and `browser-evidence.md` for UI; `drift.md` for drift; `handoff.md` only when requested; `references.md` + `references/` when references exist |
|
|
34
|
+
| conditional | `flows.md` when diagrams clarify; `visual/` HTML+`.outline.md` companions when a richer reviewable visual earns it (optional; never readiness-required); `design-brief.md` and `browser-evidence.md` for UI; `drift.md` for drift; `handoff.md` only when requested; `references.md` + `references/` when references exist |
|
|
35
35
|
|
|
36
36
|
## What each file owns
|
|
37
37
|
|
|
@@ -44,6 +44,9 @@ Readers continue to accept safe legacy basenames; no ordinary phase renames one.
|
|
|
44
44
|
| `strategy.md` | temper verdict, scope mode/deltas, pre-mortem risks, deferred ambition | 180 lines |
|
|
45
45
|
| `architecture.md` | owning layer, integration points, data/API/events, dependencies, risks, affected boundaries | 180 lines |
|
|
46
46
|
| `flows.md` | useful Mermaid sequence/state/data/lifecycle diagrams with why-it-matters text and related IDs | 160 lines |
|
|
47
|
+
| `visual/<name>.html` | optional portable human-viewable visualization; pair with sibling `.outline.md`; self-contained preferred | 400 lines |
|
|
48
|
+
| `visual/<name>.outline.md` | required machine dual-read companion for the sibling HTML; outline wins on conflict; never a candidate path | 200 lines |
|
|
49
|
+
| `visual/README.md` | optional index of visuals in the workspace | 80 lines |
|
|
47
50
|
| `decisions.md` | ADR-style `DEC-###` log: status, context, options, decision, consequences, related IDs | 200 lines |
|
|
48
51
|
| `assumptions.md` | assumptions with confidence, owner, validation status | 160 lines |
|
|
49
52
|
| `questions.md` | current `q-YYYY-MM-DD-NNN` (or released `Q-###`) open/resolved questions, gate, answer, impact | 180 lines |
|
|
@@ -60,6 +63,11 @@ Readers continue to accept safe legacy basenames; no ordinary phase renames one.
|
|
|
60
63
|
| `design-brief.md` | UI design direction, states, interaction model | 160 lines |
|
|
61
64
|
| `handoff.md` | cold-resume guide: current objective, last completed slice, next action, blockers, read-next links | 120 lines |
|
|
62
65
|
|
|
66
|
+
When emitting `visual/` HTML+outline pairs, open matching playbooks via
|
|
67
|
+
[`visual-playbooks/index.md`](visual-playbooks/index.md) (progressive load; do not
|
|
68
|
+
preload all seven). Required outline headings:
|
|
69
|
+
[`visual-playbooks/outline-template.md`](visual-playbooks/outline-template.md).
|
|
70
|
+
|
|
63
71
|
## Candidate manifest and bindings
|
|
64
72
|
|
|
65
73
|
`touched-files.md` contains exactly one `## Touched files` heading and exactly
|
|
@@ -88,12 +96,14 @@ candidate scope; only manifest rows do.
|
|
|
88
96
|
The public candidate limits are a 1 MiB manifest, 4,096 rows, a 4,096-byte
|
|
89
97
|
path, 64 MiB per present file, and 256 MiB across all present files.
|
|
90
98
|
|
|
91
|
-
Workspace and audit artifacts are not candidate paths.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
Workspace and audit artifacts are not candidate paths. That includes every path
|
|
100
|
+
under `.devrites/work/<slug>/visual/` (HTML, `.outline.md`, and optional
|
|
101
|
+
`visual/README.md`). Durable project files include `.devrites/specs/**`,
|
|
102
|
+
`DESIGN.md`, and `docs/adr/**`, plus the exact `.devrites/principles.md` owner.
|
|
103
|
+
Under `.devrites`, only those principles and spec owners may be candidates;
|
|
104
|
+
`ACTIVE`, `AFK`, `CHECKPOINT`, `archive/**`, `work/**`, and every other sibling
|
|
105
|
+
fail closed. Engine owns malformed path, type, and size rejection; phases do
|
|
106
|
+
not reinterpret a rejected manifest.
|
|
97
107
|
|
|
98
108
|
`evidence.md`, `review.md`, and `seal.md` each contain exactly one unindented standalone
|
|
99
109
|
binding line; `browser-evidence.md` does too when that file exists:
|
|
@@ -122,7 +132,9 @@ The digest binds reviewed bytes; it never substitutes for semantic review. Norma
|
|
|
122
132
|
checks structure plus that binding, and Seal rechecks it.
|
|
123
133
|
|
|
124
134
|
Proof commands must be repository-portable: no host wrappers, user-specific absolute paths,
|
|
125
|
-
or temporary proof trees. Evidence records the executed command.
|
|
135
|
+
or temporary proof trees. Evidence records the executed command. Optional `visual/`
|
|
136
|
+
artifacts never inflate readiness: they are not readiness inputs and do not substitute
|
|
137
|
+
for `decision-coverage.md`, `eng-review.md`, or `test-plan.md`.
|
|
126
138
|
|
|
127
139
|
## Canonical slice grammar
|
|
128
140
|
|
|
@@ -186,7 +198,9 @@ unless the stated reason makes the boundary irreducible.
|
|
|
186
198
|
- Do not copy acceptance criteria into `plan.md`; reference `AC-###`.
|
|
187
199
|
- Do not copy full proof into `handoff.md`; link to `evidence.md`.
|
|
188
200
|
- Do not make `state.md` an append-only log; keep only the current cursor.
|
|
189
|
-
- Do not create optional files before their phase; absence is meaningful.
|
|
201
|
+
- Do not create optional files before their phase; absence is meaningful. Do not
|
|
202
|
+
treat `visual/` as required for readiness; emit HTML+outline only when a writer
|
|
203
|
+
earns a richer visual, and keep Mermaid in `flows.md` when that is enough.
|
|
190
204
|
|
|
191
205
|
## ID contract
|
|
192
206
|
|
|
@@ -209,3 +223,4 @@ append-only identities, not display positions:
|
|
|
209
223
|
Old `AC1` and `Slice 1` forms are legacy and should not be generated for new
|
|
210
224
|
workspaces. Preserve released legacy forms unless an explicit upgrade owns the
|
|
211
225
|
migration; never renumber them incidentally.
|
|
226
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rite-build
|
|
3
|
-
description: Build the next approved vertical slice with evidence. HITL
|
|
4
|
-
argument-hint: "[slice number or name]"
|
|
3
|
+
description: Build the next approved vertical slice with evidence. HITL one-slice default; AFK may chain serially; opt-in `--parallel N` (2≤N≤3) for path-disjoint worktrees.
|
|
4
|
+
argument-hint: "[--parallel N] [slice number or name]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,8 +9,9 @@ user-invocable: true
|
|
|
9
9
|
|
|
10
10
|
Build and prove one slice. HITL stops; a later user invocation starts the next.
|
|
11
11
|
Explicit `.devrites/AFK` alone lets the controlling root chain pending slices
|
|
12
|
-
under green proof, caps, and pause rules. Every wright returns after it.
|
|
13
|
-
|
|
12
|
+
serially under green proof, caps, and pause rules. Every wright returns after it.
|
|
13
|
+
**Opt-in:** `/rite-build --parallel N` (2≤N≤3; N=1≡serial) follows
|
|
14
|
+
[`reference/parallel-batch.md`](reference/parallel-batch.md).
|
|
14
15
|
|
|
15
16
|
Root owns gates/bookkeeping. Fresh
|
|
16
17
|
[`devrites-slice-wright`](../../agents/devrites-slice-wright.md) writes product
|
|
@@ -21,45 +22,37 @@ Execute [`reference/phase-contract.md`](reference/phase-contract.md); dispatch u
|
|
|
21
22
|
|
|
22
23
|
## Required rules
|
|
23
24
|
|
|
24
|
-
Read `.claude/skills/devrites-lib/reference/standards/core.md` first. Load only
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
patterns, and definition of done;
|
|
29
|
-
- binding `.devrites/principles.md` invariants when present;
|
|
30
|
-
- security for input/auth/data/integrations;
|
|
31
|
-
- repository topology for multiple roots/languages or generated/vendor surfaces;
|
|
32
|
-
- data integrity for durable state, migration, concurrency, tenancy, or retention;
|
|
33
|
-
- integration reliability for API/webhook/queue/job/cache/service boundaries.
|
|
34
|
-
|
|
35
|
-
The wright also applies the canonical anti-slop list. Root verifies its return;
|
|
36
|
-
it never patches source itself.
|
|
25
|
+
Read `.claude/skills/devrites-lib/reference/standards/core.md` first. Load only triggered rules:
|
|
26
|
+
coding/error/testing/[`tdd.md`](reference/tdd.md)/patterns/DoD; binding
|
|
27
|
+
`.devrites/principles.md`; security; topology; data integrity; integration reliability.
|
|
28
|
+
Wright applies anti-slop; root verifies returns and never patches source.
|
|
37
29
|
|
|
38
30
|
## Invariants
|
|
39
31
|
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
- Never rerun an unchanged check
|
|
46
|
-
- Unplanned dependency
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
needs a human-approved scoped exception or stop, never silent balancing.
|
|
55
|
-
- Evidence beats confidence. Never weaken a failing test, skip TDD, widen a
|
|
56
|
-
writer, or self-approve a wright return. Route drift through
|
|
57
|
-
[`reference/spec-drift-guard.md`](reference/spec-drift-guard.md); checkpoint
|
|
58
|
-
mode follows [`reference/checkpoint.md`](reference/checkpoint.md).
|
|
32
|
+
- Default: one slice; writers serial on control. Parallel only via `--parallel N`
|
|
33
|
+
under [`reference/parallel-batch.md`](reference/parallel-batch.md). Same-worktree
|
|
34
|
+
multi-writer / root-emulated concurrency forbidden. Native-worktree pilot =
|
|
35
|
+
single-slice isolation when `wright-dispatch.md` preflight + reconcile hold.
|
|
36
|
+
- Exact feature scope only; reject out-of-allowlist diffs; record adjacent issues.
|
|
37
|
+
- Never rerun an unchanged check; re-prove after edits.
|
|
38
|
+
- Unplanned dependency/design-system/gap/repair → Vet/Spec Drift Guard. Ask only
|
|
39
|
+
for licensing/cost/security/product or explicit architecture-policy decisions.
|
|
40
|
+
- Root never edits product source/tests (`.devrites/` + Workflow Artifact only).
|
|
41
|
+
Wright is sole product writer; extras in returned paths/`git diff --name-only` hard-stop.
|
|
42
|
+
- Principles bind; irreversible conflict needs human exception or stop.
|
|
43
|
+
- Evidence beats confidence. Never weaken tests, skip TDD, widen writers, or
|
|
44
|
+
self-approve. Drift → [`spec-drift-guard.md`](reference/spec-drift-guard.md);
|
|
45
|
+
checkpoint → [`checkpoint.md`](reference/checkpoint.md).
|
|
59
46
|
|
|
60
47
|
## Workflow Artifact branch
|
|
61
48
|
|
|
62
49
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"Vet-ready admitted bytes require root authorship outside product wright","action":"ROOT_TRANSACTION; root writes only admitted .devrites/** targets","return":"saved Build slice cursor; wright product allowlist unchanged"} -->
|
|
50
|
+
## `--parallel N` (opt-in)
|
|
51
|
+
|
|
52
|
+
Omitted/`1` ≡ serial; `2`/`3` → path-disjoint fan-out when eligible; else hard refuse.
|
|
53
|
+
All-green serial integrate; one red/gap aborts. AFK charges after integrate only.
|
|
54
|
+
Running lease blocks another `/rite-build`. Details: `parallel-batch.md`.
|
|
55
|
+
|
|
63
56
|
## Execute and reply
|
|
64
57
|
|
|
65
58
|
Run every step in `reference/phase-contract.md`: readiness, one target, dispatch
|
|
@@ -8,16 +8,8 @@ Load the shared
|
|
|
8
8
|
contract for the sentinel schema, defaults, gate ceiling, and mutable-counter
|
|
9
9
|
ownership. This file owns only Build's dispatch, charging, and red-path behavior.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
1. **Require green feedback.** Tests, types, and lint must pass before a slice is
|
|
15
|
-
marked `built`.
|
|
16
|
-
2. **Cap iterations.** `max_slices` is the hard limit.
|
|
17
|
-
3. **Run gates before the action they control.** A post-action gate is only a review
|
|
18
|
-
queue.
|
|
19
|
-
4. **Keep irreversible work manual.** Destructive work, auth boundaries, and public
|
|
20
|
-
API breaks always pause regardless of the sentinel.
|
|
11
|
+
Rules: green before `built`; hard `max_slices` cap; gates before the action they
|
|
12
|
+
control; irreversible work (destructive/auth/public API) always pauses.
|
|
21
13
|
|
|
22
14
|
## Iteration cap
|
|
23
15
|
|
|
@@ -41,32 +33,33 @@ The controlling root owns the cap:
|
|
|
41
33
|
A controlling orchestrator may pre-seed the remaining field from a validated
|
|
42
34
|
post-plan budget before the first dispatch; never increase or reinitialize an
|
|
43
35
|
existing value.
|
|
44
|
-
3. **Charge exactly once after each green built slice.**
|
|
45
|
-
built is not charged again after retry, resume, or
|
|
46
|
-
saved cursor; if it is zero, report the cap and stop
|
|
47
|
-
dispatch.
|
|
36
|
+
3. **Charge exactly once after each green built slice.** On the control tree, a slice
|
|
37
|
+
already marked built is not charged again after retry, resume, or
|
|
38
|
+
compaction. Re-read the saved cursor; if it is zero, report the cap and stop
|
|
39
|
+
before the next dispatch.
|
|
40
|
+
- **Serial:** charge when fail-on-red is green and the built record is written
|
|
41
|
+
(same rewrite as step 2).
|
|
42
|
+
- **Parallel `--parallel`:** charge only after **successful serial integrate**
|
|
43
|
+
— once per integrated green sibling. Abort / integrate-failed → charge **0**.
|
|
44
|
+
Do not charge on worktree-green before integrate. See
|
|
45
|
+
[`parallel-batch.md`](parallel-batch.md).
|
|
48
46
|
|
|
49
47
|
Use this stop message:
|
|
50
48
|
|
|
51
|
-
```
|
|
49
|
+
```text
|
|
52
50
|
AFK cap reached. Raise `state.md` `AFK slices remaining` or remove the sentinel to continue.
|
|
53
51
|
```
|
|
54
52
|
|
|
55
53
|
`max_slices` itself is read-only and never rewritten. No exit-code command
|
|
56
54
|
enforces this policy.
|
|
57
55
|
|
|
58
|
-
Choose
|
|
59
|
-
|
|
60
|
-
successfully in HITL.
|
|
56
|
+
Choose caps deliberately (≈5–10 small, ≈30–50 larger). Avoid `unlimited` until HITL
|
|
57
|
+
has succeeded for the work.
|
|
61
58
|
|
|
62
59
|
## Fail-on-red
|
|
63
60
|
|
|
64
|
-
The **fail-on-red step**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- A red signal means either the slice's contract is wrong or the implementation/proof path is.
|
|
68
|
-
The slice cannot advance, but an objective root cause is agent-owned recovery work.
|
|
69
|
-
- Marking it `built` would let the next slice build on broken state.
|
|
61
|
+
The **fail-on-red step** refuses `built` when targeted tests/types/lint are red. Red means
|
|
62
|
+
wrong contract or proof path — agent-owned recovery; never advance on broken state.
|
|
70
63
|
|
|
71
64
|
The fail-on-red path:
|
|
72
65
|
|
|
@@ -105,7 +98,7 @@ The hook is a single shell command run on the `awaiting_human` transition. Envir
|
|
|
105
98
|
the hook receives:
|
|
106
99
|
|
|
107
100
|
| Var | Value |
|
|
108
|
-
|
|
101
|
+
| --- | --- |
|
|
109
102
|
| `DEVRITES_QID` | the new qid (e.g. `q-2026-05-28-001`) |
|
|
110
103
|
| `DEVRITES_GATE` | `advisory` / `validating` / `blocking` / `escalating` |
|
|
111
104
|
| `DEVRITES_SLICE` | `<N — name>` |
|
|
@@ -117,6 +110,7 @@ The hook is best effort: a non-zero exit does **not** roll back the pause. Failu
|
|
|
117
110
|
logged to `evidence.md` so the user sees them on return.
|
|
118
111
|
|
|
119
112
|
Example targets:
|
|
113
|
+
|
|
120
114
|
- `curl -d "$DEVRITES_QID: $DEVRITES_QUESTION" ntfy.sh/my-topic`
|
|
121
115
|
- `osascript -e "display notification \"$DEVRITES_QUESTION\" with title \"DevRites: $DEVRITES_GATE\""`
|
|
122
116
|
- `pb push "$DEVRITES_SLUG: $DEVRITES_QUESTION"` (via pushbullet CLI)
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
# Checkpoint protocol: what `/rite-build` does when a slice is HITL
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
surfaces the checkpoint as a ranked **option set** and resolves it **before** any code lands:
|
|
3
|
+
HITL slices pause **pre-action** as a ranked **option set** before any code:
|
|
5
4
|
|
|
6
|
-
- **
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
`state.md` `Awaiting human`), fire the `notify:` hook, and **stop**. Resume later via
|
|
11
|
-
`/rite-resolve` (or `--batch`).
|
|
12
|
-
|
|
13
|
-
Either way the pause is **pre-action**, not post-action: code never lands before the gate.
|
|
5
|
+
- **Interactive:** `AskUserQuestion`; record to `questions.md`/`decisions.md`; clear gate;
|
|
6
|
+
continue in place (no `/rite-resolve` round-trip).
|
|
7
|
+
- **Absent / AFK / notify-only:** persist open question + `Awaiting human`, notify, **stop**.
|
|
8
|
+
Resume via `/rite-resolve` (or `--batch`).
|
|
14
9
|
|
|
15
10
|
## Render contract
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
the persisted form is for the next session or the AFK observer.
|
|
12
|
+
Render the checkpoint in user-facing output **and** persist it for the next session / AFK
|
|
13
|
+
observer.
|
|
20
14
|
|
|
21
15
|
### User-facing render: the option set
|
|
22
16
|
|
|
23
|
-
Present
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
plus the escape hatch. The header names the slice + gate:
|
|
17
|
+
Present as `AskUserQuestion` ranked **option set** (`afk-hitl.md`): 2–4 options,
|
|
18
|
+
recommended first + `(Recommended)`, dimension-tagged trade-offs, plus escape hatch.
|
|
19
|
+
Header names slice + gate:
|
|
27
20
|
|
|
28
21
|
```
|
|
29
22
|
Slice <N — name> — HITL (<gate>, SLA <SLA>). <Checkpoint text from tasks.md>
|
|
@@ -35,12 +28,9 @@ Slice <N — name> — HITL (<gate>, SLA <SLA>). <Checkpoint text from tasks.md>
|
|
|
35
28
|
4. Something else — I'll describe it
|
|
36
29
|
```
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
(its conventions, stack, scale), not a generic default. On an interactive pick, resolve in
|
|
42
|
-
place; when persisting a pause instead, the same set is written to `questions.md` `options:`
|
|
43
|
-
and the resume line is `/rite-resolve <qid> "<answer>"` (or `--drop <qid> "<reason>"`).
|
|
31
|
+
Option #1 (recommended) is **required** and must reflect *this* project. Interactive pick →
|
|
32
|
+
resolve in place; pause → persist the same set to `questions.md` `options:` with resume
|
|
33
|
+
`/rite-resolve <qid> "<answer>"` (or `--drop <qid> "<reason>"`).
|
|
44
34
|
|
|
45
35
|
### Workspace mutations
|
|
46
36
|
|
|
@@ -93,9 +83,7 @@ rewrite; do not claim cross-file atomicity):
|
|
|
93
83
|
sh -c "$notify_cmd"
|
|
94
84
|
```
|
|
95
85
|
|
|
96
|
-
|
|
97
|
-
that already records the pause. Failures in the hook **do not** roll back the pause:
|
|
98
|
-
the gate is authoritative; the notification is best-effort.
|
|
86
|
+
Fire after workspace write. Hook failure does **not** roll back the pause (best-effort).
|
|
99
87
|
|
|
100
88
|
## qid generation
|
|
101
89
|
|
|
@@ -109,42 +97,24 @@ reservation or engine command for qids.
|
|
|
109
97
|
|
|
110
98
|
## When AFK is active
|
|
111
99
|
|
|
112
|
-
If `.devrites/AFK` exists and the slice
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
`evidence.md`), not per slice. The `built (pending review)` slice is not done until the
|
|
122
|
-
open `validating` gate resolves via `/rite-resolve`; an open `validating` gate is a
|
|
123
|
-
NO-GO at seal.
|
|
124
|
-
|
|
125
|
-
For gates in `allow_gates`, AFK **auto-picks the recommended option** (option 1 of the set)
|
|
126
|
-
instead of pausing, recording it as above. For `blocking` and `escalating` (and every
|
|
127
|
-
irreversible-risk item), AFK **always** invokes the checkpoint protocol: the sentinel does
|
|
128
|
-
not unlock these gates and no AFK key can override them. See `afk-discipline.md`
|
|
129
|
-
for the irreversible-risk list.
|
|
100
|
+
If `.devrites/AFK` exists and the slice `Gate` is in `allow_gates`, skip this protocol and
|
|
101
|
+
auto-pick recommended option 1:
|
|
102
|
+
|
|
103
|
+
- `advisory`: log `gate: advisory` + `decisions.md`, then dispatch wright.
|
|
104
|
+
- `validating` (only if allowed): dispatch wright; on return log `gate: validating`, mark
|
|
105
|
+
`built (pending review)`, continue. Slice states remain `pending|built`; feature
|
|
106
|
+
acceptance is `/rite-prove`. Open `validating` is NO-GO at seal until `/rite-resolve`.
|
|
107
|
+
|
|
108
|
+
`blocking` / `escalating` / irreversible-risk always use this protocol (`afk-discipline.md`).
|
|
130
109
|
|
|
131
110
|
## Multi-question pauses
|
|
132
111
|
|
|
133
|
-
|
|
134
|
-
checkpoints, split it into sub-slices via `/rite-plan reslice` so each pause is
|
|
135
|
-
single-question. Multi-question pauses are reserved future shape; `Awaiting human` is
|
|
136
|
-
written as a single block.
|
|
112
|
+
**One question per pause.** Multiple HITL checkpoints → `/rite-plan reslice`.
|
|
137
113
|
|
|
138
114
|
## What NOT to do
|
|
139
115
|
|
|
140
|
-
-
|
|
141
|
-
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
explicit answer: the agent doesn't confirm its own `proposed:` on resume. This is distinct
|
|
146
|
-
from the two legitimate auto-resolutions: an interactive `AskUserQuestion` pick the human
|
|
147
|
-
just made, and an AFK auto-pick of the recommended option on a gate `allow_gates` permits.
|
|
148
|
-
- **Don't bundle the `notify:` hook output into chat.** Fire-and-forget; the chat already
|
|
149
|
-
has the user-facing render.
|
|
150
|
-
- **Don't fire `notify:` on `advisory`-downgraded entries.** It's reserved for true pauses.
|
|
116
|
+
- Don't write code then pause — pre-action only.
|
|
117
|
+
- Don't render without persisting `state.md` + `questions.md`.
|
|
118
|
+
- Don't self-answer a human pause via `proposed:` — `/rite-resolve` needs an explicit
|
|
119
|
+
answer (distinct from interactive pick / AFK auto-pick on `allow_gates`).
|
|
120
|
+
- Don't put `notify:` output in chat; don't fire `notify:` on advisory-only entries.
|
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
One wright dispatch builds one thin, proven slice. HITL stops; only explicit
|
|
4
4
|
`.devrites/AFK` lets the controlling root chain another pending slice under the
|
|
5
5
|
green-proof, cap, and pause rules. Each wright returns after exactly one slice.
|
|
6
|
+
Opt-in fan-out: [`parallel-batch.md`](parallel-batch.md) (`--parallel N`); this is default.
|
|
6
7
|
|
|
7
8
|
## The cycle
|
|
9
|
+
|
|
8
10
|
The orchestrator (`/rite-build`) gates and records; the **wright** writes. See
|
|
9
11
|
[`wright-dispatch.md`](wright-dispatch.md).
|
|
10
|
-
|
|
12
|
+
|
|
13
|
+
```text
|
|
11
14
|
SELECT → orchestrator: restate slice goal + acceptance + scope boundary; HITL gate (pause pre-code)
|
|
12
15
|
(SHAPE) → orchestrator: missing UI design-brief.md → shape it, then /rite-vet before dispatch
|
|
13
16
|
DISPATCH → hand the slice contract to devrites-slice-wright (fresh context). Inside the wright:
|
|
@@ -25,14 +28,16 @@ NEXT → HITL root reports and stops; AFK root may repeat only under afk-di
|
|
|
25
28
|
```
|
|
26
29
|
|
|
27
30
|
## Why the boundary matters
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
|
|
32
|
+
Reviewable diffs, early drift signal, HITL decision point, no unproven pile-ups.
|
|
30
33
|
|
|
31
34
|
## Restate the scope boundary
|
|
35
|
+
|
|
32
36
|
Before coding, write what this slice will and will **not** touch. This is the contract
|
|
33
37
|
you check yourself against: anything outside it is scope creep or a drift event.
|
|
34
38
|
|
|
35
39
|
## When the slice can't be completed cleanly
|
|
40
|
+
|
|
36
41
|
- Discovered the plan is wrong → **Spec Drift Guard** (stop, record, classify, maybe
|
|
37
42
|
ask, `/rite-plan` repair).
|
|
38
43
|
- Slice is bigger than one cycle → stop and `/rite-plan reslice`.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# rite-build output
|
|
2
2
|
|
|
3
3
|
**Slices remain:**
|
|
4
|
+
|
|
4
5
|
```text
|
|
5
6
|
Done: built slice <n> — <name>.
|
|
6
7
|
Changed: <files>; state.md, touched-files.md, evidence.md
|
|
@@ -12,6 +13,7 @@ Record: .devrites/work/<slug>/evidence.md
|
|
|
12
13
|
```
|
|
13
14
|
|
|
14
15
|
**All built:**
|
|
16
|
+
|
|
15
17
|
```text
|
|
16
18
|
Done: built slice <n> — <name>; all slices built.
|
|
17
19
|
Changed: <files>; state.md, touched-files.md, evidence.md
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Parallel batch (`--parallel N`)
|
|
2
|
+
|
|
3
|
+
Opt-in only. Default `/rite-build` stays [`one-slice-cycle.md`](one-slice-cycle.md).
|
|
4
|
+
|
|
5
|
+
## Entry
|
|
6
|
+
|
|
7
|
+
| Input | Behavior |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| omitted / `--parallel 1` | Serial one-slice |
|
|
10
|
+
| `--parallel N` (**2≤N≤3**) | Parallel when eligible + host pass |
|
|
11
|
+
| non-integer / `N≤0` / `N>3` | Hard refuse (no silent clamp) |
|
|
12
|
+
|
|
13
|
+
AFK caps `N` by remaining budget. Charge **only after successful integrate**
|
|
14
|
+
(once per integrated green sibling). Abort / integrate-failed → **0**. Running
|
|
15
|
+
lease blocks another `/rite-build`.
|
|
16
|
+
|
|
17
|
+
## Path-disjoint
|
|
18
|
+
|
|
19
|
+
Exact project-relative source/test paths only. Normalize `\`→`/`. Reject `..`,
|
|
20
|
+
duplicates, absolutes, `.devrites/**`. Empty pairwise intersection required.
|
|
21
|
+
|
|
22
|
+
**SSOT:** `devrites-engine check path-disjoint [--root <dir>] [<json-file>|-]`
|
|
23
|
+
(N≥2 only; pass `--root`). Exit `0` → fan-out; else force serial. Inspect-time
|
|
24
|
+
overlap → sibling **gap** → abort.
|
|
25
|
+
|
|
26
|
+
## Control vs workers
|
|
27
|
+
|
|
28
|
+
Control owns `.devrites/work/<slug>/` (`parallel-lease.md` + bookkeeping).
|
|
29
|
+
Workers: `.scratch/parallel-wt/<batch>/<slice>/` on
|
|
30
|
+
`devrites/parallel/<slug>/<batch>/<slice>` @ base `B`. Wrights never write
|
|
31
|
+
`.devrites/**`.
|
|
32
|
+
|
|
33
|
+
Lease: `batch_id`, `created_at`, `base_sha`, `n`,
|
|
34
|
+
`status` (`running|aborted|integrate-failed|complete`), `control_pid_or_session`,
|
|
35
|
+
`slices[]` (`id`, `paths`, `worktree_path`, `branch`, `wright_status`,
|
|
36
|
+
`transfer_commit`).
|
|
37
|
+
|
|
38
|
+
## Lifecycle
|
|
39
|
+
|
|
40
|
+
1. Orient/gate; parse N; select ≤N path-disjoint pending slices.
|
|
41
|
+
2. Write lease; freeze `B=HEAD`; `parallel create` worktrees.
|
|
42
|
+
3. Dispatch ≤3 wrights in parallel (cwd=worktree; allowlist; prove `HEAD==B`).
|
|
43
|
+
4. Inspect + fail-on-red → `green|red|gap`.
|
|
44
|
+
5. Any red/gap → **abort** (no partial integrate). All green → serial integrate.
|
|
45
|
+
6. Integrate: `transfer_commit` descends from `B`; `` `<base>..<transfer>` ``
|
|
46
|
+
path-exact; apply in plan order. Conflict → reset to `B`, `integrate-failed`.
|
|
47
|
+
7. Success: FF control; union `touched-files.md`; update state/evidence; AFK +1
|
|
48
|
+
per integrated sibling; optional `check candidate`.
|
|
49
|
+
8. Cleanup: success removes worktrees/branches; abort keeps until acknowledged.
|
|
50
|
+
|
|
51
|
+
## Engine verbs
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
devrites-engine parallel create|record-green|abort|integrate|cleanup|status
|
|
55
|
+
devrites-engine parallel lease-write|lease-read|lease-clear
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Go is SSOT. Skill calls the engine — never ad-hoc git/bash orchestration.
|
|
59
|
+
|
|
60
|
+
## Host
|
|
61
|
+
|
|
62
|
+
Claude: N concurrent Task wrights (`acceptEdits`, cwd=worktree). Codex: require
|
|
63
|
+
host-explicit concurrent worktree writers + native reconcile; else force serial.
|
|
64
|
+
Never two writers in one worktree; never root-emulated concurrency.
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
See [`one-slice-cycle.md`](one-slice-cycle.md); candidate lifecycle is
|
|
4
4
|
[`candidate-integrity.md`](../../devrites-lib/reference/candidate-integrity.md).
|
|
5
|
+
Opt-in `--parallel N` uses [`parallel-batch.md`](parallel-batch.md) instead of steps 2–8.
|
|
5
6
|
|
|
6
7
|
1. **Orient and gate.** Read core, `.devrites/ACTIVE`, `state.md`, and required
|
|
7
8
|
slice artifacts. Require `Implementation readiness: READY`, its current
|
|
@@ -24,14 +25,14 @@ See [`one-slice-cycle.md`](one-slice-cycle.md); candidate lifecycle is
|
|
|
24
25
|
dispatch the exact `devrites-slice-wright` fresh. Root never writes those product
|
|
25
26
|
paths, wright never widens, and a missing profile stops.
|
|
26
27
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"Build gate enters or resumes transaction","action":"invoke canonical operation table; reconcile exact result","return":"same slice/checkpoint cursor or Plan/Vet route"} -->
|
|
27
|
-
|
|
28
|
+
1. **Inspect the return.** Wait; compare its file list and `git diff --name-only`
|
|
28
29
|
with the contract. Reject stale, partial, malformed, or out-of-scope work.
|
|
29
30
|
Preserve user work; source restoration uses the same bounded wright.
|
|
30
|
-
|
|
31
|
+
2. **Challenge stood decisions.** For each stood decision, run exact
|
|
31
32
|
`devrites-doubt-reviewer` fresh/read-only and record accepted or resolved-rejected
|
|
32
33
|
in `decisions.md`. A missing verdict, principle breach, scope change, or
|
|
33
34
|
irreversible risk blocks.
|
|
34
|
-
|
|
35
|
+
3. **Prove without guessing.** Against the frozen pre-slice candidate, inspect
|
|
35
36
|
test hunks for deletion, skipping/focus, tautology, or weaker expectations. Dispatch exact
|
|
36
37
|
`devrites-test-analyst` on that immutable diff; missing account or adverse criterion
|
|
37
38
|
verdict is Critical. Run only `test-plan.md` repository/CI commands, capture output,
|
|
@@ -47,14 +48,14 @@ See [`one-slice-cycle.md`](one-slice-cycle.md); candidate lifecycle is
|
|
|
47
48
|
is progress; a different Critical/Important invariant gets its own fingerprint.
|
|
48
49
|
Ask humans only for product decisions,
|
|
49
50
|
irreversible risk, or genuinely human-only access.
|
|
50
|
-
|
|
51
|
+
4. **Record.** After green proof, upsert `touched-files.md`'s authoritative candidate
|
|
51
52
|
manifest from the actual scoped diff with explicit `present`/`deleted` rows;
|
|
52
53
|
update `state.md`, `evidence.md`, and applicable UI/browser evidence. The manifest
|
|
53
54
|
stays mutable until Polish closes it.
|
|
54
55
|
Record stood decisions/dead ends in `decisions.md`; update checked assumptions'
|
|
55
56
|
status/evidence, never leaving a disproved row live. If code reveals a durable
|
|
56
57
|
project rule, propose a reviewed `AGENTS.md`/nearest-doc update, not a scored ledger.
|
|
57
|
-
|
|
58
|
+
5. **AFK and reply.** Under `afk-discipline.md`, root charges
|
|
58
59
|
exactly once after each green built slice, never below zero; stop before another dispatch at zero, and fail closed
|
|
59
60
|
on malformed budget. Use the reply contract; name the next pending slice or, only
|
|
60
61
|
when all slices are built, `/rite-prove`. Emit no decorative progress renderer or
|
|
@@ -26,8 +26,8 @@ supported. Regardless of host defaults, the wright's first command must prove ac
|
|
|
26
26
|
`worktree_base`. Mismatch returns a gap with no write before project reads or baseline proof.
|
|
27
27
|
|
|
28
28
|
The isolated wright returns one local unpushed `transfer_commit`, its `worktree_base`,
|
|
29
|
-
and exact files. Root proves descendant base, exact `git diff --name-only
|
|
30
|
-
|
|
29
|
+
and exact files. Root proves descendant base, exact `git diff --name-only`
|
|
30
|
+
`` `<base>..<transfer>` ``, no `.devrites/**`/submodule/symlink/unrelated delta, unchanged
|
|
31
31
|
source base, and no user-work overwrite. Use only host-native explicit reconciliation;
|
|
32
32
|
never ad hoc copy, cherry-pick, or merge from read-only root. Compare transferred bytes,
|
|
33
33
|
run approved proof, record evidence, then let host remove worktree.
|
|
@@ -35,7 +35,10 @@ run approved proof, record evidence, then let host remove worktree.
|
|
|
35
35
|
Conflict, extra/missing commit, moved base, or cleanup failure is `gap`/STOP:
|
|
36
36
|
preserve the worktree and commit. Without explicit reconciliation, use same-worktree serial.
|
|
37
37
|
Parallel writer work remains forbidden until this serial pilot measures transfer,
|
|
38
|
-
conflict, proof, and review outcomes on both hosts.
|
|
38
|
+
conflict, proof, and review outcomes on both hosts. Opt-in `/rite-build --parallel N`
|
|
39
|
+
(2≤N≤3) is the only exception: path-disjoint fan-out, abort-batch, and control
|
|
40
|
+
`parallel-lease.md` under [`parallel-batch.md`](parallel-batch.md). Same-worktree multi-writer / root-emulated
|
|
41
|
+
worktrees stay forbidden.
|
|
39
42
|
|
|
40
43
|
## Prepare
|
|
41
44
|
|
|
@@ -60,6 +63,7 @@ conflict, proof, and review outcomes on both hosts.
|
|
|
60
63
|
Ask the host for the exact writer in fresh context and wait. Use at most one writer
|
|
61
64
|
across all linked worktrees for this workspace. Never run two writers in one worktree,
|
|
62
65
|
run isolated and same-worktree writers concurrently, or substitute a generic agent.
|
|
66
|
+
Opt-in `/rite-build --parallel N` fans out only under [`parallel-batch.md`](parallel-batch.md).
|
|
63
67
|
|
|
64
68
|
## Inspect and prove
|
|
65
69
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# /rite-clarify anti-patterns
|
|
2
|
+
|
|
3
|
+
Load this when tempted to skip clarify, assume product choices, or write
|
|
4
|
+
`Decision coverage: CLEAR` before every material row has an owner.
|
|
5
|
+
|
|
6
|
+
Pack-wide rationalizations: see
|
|
7
|
+
[standards/anti-patterns.md](../../devrites-lib/reference/standards/anti-patterns.md).
|
|
8
|
+
|
|
9
|
+
## Phase-specific rationalizations
|
|
10
|
+
|
|
11
|
+
| Excuse | Rebuttal |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| "We already discussed this in chat." | Chat is not durable decision coverage. Scan topology and record owners in workspace artifacts. |
|
|
14
|
+
| "The answer is obvious — assume it." | Product, scope, policy, and irreversible-risk choices are human-owned unless already recorded in an accepted decision. |
|
|
15
|
+
| "Most rows are clear — good enough for AFK." | Partial/Missing material rows block CLEAR and block AFK arming. |
|
|
16
|
+
| "Skip clarify for this small change." | Clarify is mandatory and adaptive; it may ask no questions, but it still runs the scan. |
|
|
17
|
+
| "I'll clarify during build if needed." | Unowned decisions discovered in build are expensive drift. Close them before plan/vet. |
|
|
18
|
+
|
|
19
|
+
## Red flags in your own output
|
|
20
|
+
|
|
21
|
+
- `Decision coverage: CLEAR` with Partial/Missing material rows still open.
|
|
22
|
+
- Product/policy choices recorded without a human packet or cited prior decision.
|
|
23
|
+
- AFK armed or `/rite-define` started before CLEAR is durable.
|
|
24
|
+
- Clarify skipped because the user said they were "in a hurry".
|
|
@@ -16,8 +16,9 @@ standalone token occurs in current `$ARGUMENTS`; earlier context cannot activate
|
|
|
16
16
|
1. Map policy→instruction, reusable work→skill, specialist→agent, external capability→plugin/MCP.
|
|
17
17
|
2. Inspect target/host docs; reuse before copying.
|
|
18
18
|
3. Draft smallest nearest-scope change; do not restate safeguards.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
19
|
+
4. For any new or edited skill/agent Markdown, run `devrites-engine check skill-trust <path>` before showing the diff. HIGH findings block; MEDIUM findings need explicit human acknowledgment in the proposal.
|
|
20
|
+
5. Show path/exact diff; wait.
|
|
21
|
+
6. Write approved artifacts, validate natively, keep no mirror.
|
|
21
22
|
|
|
22
23
|
Here, edit canonical source and generate; never edit derived artifacts.
|
|
23
24
|
|