devrites 7.0.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -1
  3. package/docs/command-map.md +1 -1
  4. package/docs/usage.md +7 -2
  5. package/engine/internal/gate/gate.go +7 -0
  6. package/engine/internal/gate/predecessor.go +67 -0
  7. package/engine/internal/lib/claims.go +57 -7
  8. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  9. package/pack/.claude/skills/rite-autocomplete/SKILL.md +7 -3
  10. package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  11. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -0
  12. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  13. package/pack/.claude/skills/rite-spec/SKILL.md +2 -1
  14. package/pack/.claude/skills/rite-vet/SKILL.md +3 -1
  15. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +14 -0
  16. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +7 -3
  17. package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
  18. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -0
  19. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
  20. package/pack/generated/claude/skills/rite-spec/SKILL.md +2 -1
  21. package/pack/generated/claude/skills/rite-vet/SKILL.md +3 -1
  22. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +14 -0
  23. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +7 -3
  24. package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +50 -0
  25. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -0
  26. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +4 -0
  27. package/pack/generated/codex/skills/rite-spec/SKILL.md +2 -1
  28. package/pack/generated/codex/skills/rite-vet/SKILL.md +3 -1
  29. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +14 -0
  30. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +7 -3
  31. package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +50 -0
  32. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -0
  33. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +4 -0
  34. package/pack/generated/devin/skills/rite-spec/SKILL.md +2 -1
  35. package/pack/generated/devin/skills/rite-vet/SKILL.md +3 -1
  36. package/pack/generated/omp/commands/rite-autocomplete.md +1 -1
  37. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +14 -0
  38. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +7 -3
  39. package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +50 -0
  40. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -0
  41. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +4 -0
  42. package/pack/generated/omp/skills/rite-spec/SKILL.md +2 -1
  43. package/pack/generated/omp/skills/rite-vet/SKILL.md +3 -1
  44. package/pack/generated/pi/prompts/rite-autocomplete.md +1 -1
  45. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +14 -0
  46. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +7 -3
  47. package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +50 -0
  48. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -0
  49. package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +4 -0
  50. package/pack/generated/pi/skills/rite-spec/SKILL.md +2 -1
  51. package/pack/generated/pi/skills/rite-vet/SKILL.md +3 -1
  52. package/package.json +1 -1
@@ -28,6 +28,20 @@ Measure first. An optimization without a measurement is a guess that adds comple
28
28
  flaking wall-clock test is a flaky test, [`testing.md`](testing.md)). Budget regression:
29
29
  re-measure; fix to budget or record the accepted regression with reason and owner.
30
30
 
31
+ ## Performance gate protocol
32
+ - A gate that judges a timing budget or a regression percentage pins its protocol
33
+ before Build: the environment (isolated cores, swap state, build flags such as
34
+ `CGO_ENABLED`), the repetitions and the aggregate (a median of at least five runs,
35
+ never one sample), and a noise floor measured as an A/A spread on that same
36
+ environment. Vet blocks READY on a timing gate without one. A threshold at or
37
+ below the noise floor is a plan defect for the owner, never a Build repair.
38
+ - A timing gate that fails while no code changed (an A/A run, a rerun) is noise or
39
+ host state, not a code defect. Stop wright rounds on it and fix the protocol or the
40
+ environment first.
41
+ - **Failing case:** a 10% p99 regression gate runs one sample per run on a shared host;
42
+ 26 wright rounds repair code against noise until the owner reserves cores and asks
43
+ for a median of five.
44
+
31
45
  ## Frontend: Core Web Vitals
32
46
  For UI work, measure-first means LCP / INP / CLS judged against real numbers, each labeled
33
47
  by source (`Field (CrUX)`, `Lab (Lighthouse)`, `Trace (DevTools)`): field and lab are not
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rite-autocomplete
3
3
  description: Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase.
4
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
4
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md"]} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .agents/skills <slug> --phase autocomplete` bundles every file named below into one deduplicated read. Trigger names map to the conditional rules in the sections that follow.
10
10
 
11
11
 
@@ -69,7 +69,7 @@ executable controller/harness/bundle bytes or a missing writer, read
69
69
  not a stop either: follow it in your next tool call, never in a text-only
70
70
  acknowledgement.
71
71
  - Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
72
- `--parallel`, `--full`, and `--cross-model` activate only as exact standalone
72
+ `--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
73
73
  tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
74
74
  `--max-slices` must occur once and be followed by a positive base-10 integer;
75
75
  `--parallel` must occur once and be followed by a base-10 integer in `1`–`10`.
@@ -82,6 +82,10 @@ executable controller/harness/bundle bytes or a missing writer, read
82
82
 
83
83
  ## Workflow
84
84
 
85
+ With `--lookahead` (trigger `lookahead`), follow
86
+ [`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
87
+ next sequence continuation through Vet in a second session, then stop.
88
+
85
89
  1. **Orient and parse.** Resolve the explicit or active slug; when a workspace exists,
86
90
  require its `state.md` and read its cursor; a fresh idea starts empty at step 2.
87
91
  Before honoring `blocked` with terminal `next_action`,
@@ -0,0 +1,50 @@
1
+ # Sequence lookahead (`--lookahead`)
2
+
3
+ > Root-only: not inlined in --role bundles.
4
+
5
+ A second session plans the next sequence continuation while the active
6
+ workspace builds, so the child's Spec → Vet overlaps its predecessor's
7
+ Build → Seal. The main loop later resumes the planned child instead of
8
+ specifying it again.
9
+
10
+ ## Start and target
11
+
12
+ The operator starts the second host session with `$rite-autocomplete
13
+ --lookahead` once the `.devrites/ACTIVE` workspace is in Build or later. The
14
+ agent never launches a session itself. The target is the next recorded
15
+ continuation after the active workspace: the entry
16
+ [sequence continuation](loop.md#sequence-continuation) would open. Stop with
17
+ nothing to do when the active workspace is before Build, no entry remains,
18
+ `continue_sequence: false`, or the sequence budget is spent.
19
+
20
+ ## Lease
21
+
22
+ Before any write, take the workspace lease:
23
+ `devrites-engine claim add --session lookahead-<target> --ttl 240 --workspace <target> --reason lookahead`.
24
+ Exit 3 means another session holds the target: stop. Re-add the lease with the
25
+ same session at each phase start, and release it with `devrites-engine claim
26
+ release` on every stop. A crashed session's lease reads `dead` and frees itself.
27
+
28
+ ## Rules
29
+
30
+ - Never read or write `.devrites/ACTIVE`. Pass the target slug explicitly to every
31
+ skill and engine command, including `$rite-spec <target> "<objective>"` and
32
+ `devrites-engine handoff <target> --resume`.
33
+ - After the workspace exists, run `devrites-engine state set <target> sequence_lookahead=yes`.
34
+ - Run Spec → Clarify → Temper → Define → Plan → Vet as the main loop does.
35
+ Define and Plan read the predecessor's current tree and plan. Record an
36
+ assumption for each predecessor interface the plan relies on.
37
+ - At Vet, beside the readiness binding, record exactly one line
38
+ `Predecessor readiness: <active-slug> <digest>` in `eng-review.md`. `<digest>`
39
+ is the hex that `devrites-engine check readiness --emit-binding <active-slug>`
40
+ prints. When the predecessor later changes its planning inputs, the child's
41
+ readiness check blocks with `DRV-GATE-READINESS-STALE` and the main loop
42
+ re-vets the child before Build.
43
+ - Never Build, never write product source or tests, never commit, and never
44
+ arm or rewrite `.devrites/AFK`. Owner questions go to the target's
45
+ `questions.md` and stop the lookahead.
46
+ - Stop at Vet `READY` with `next_action: build after predecessor Seal GO`, at a
47
+ human gate, or when the target's lease is lost.
48
+
49
+ **Failing case:** the lookahead passes Vet and starts Build while the
50
+ predecessor is still sealing, so two root sessions write one tree.
@@ -93,6 +93,13 @@ step 10 does not end the run: leave the sealed workspace unshipped with its
93
93
  (`$rite-spec <parent>-<n> "<objective>"` from the parent's `decisions.md` sequence)
94
94
  and re-enter step 1. Spend one workspace per opened continuation.
95
95
 
96
+ When that workspace already exists because a [lookahead](lookahead.md) session
97
+ planned it, do not specify it again. Wait while `devrites-engine claim check
98
+ --workspace <child>` exits 3 (a live lookahead holds it), then set
99
+ `.devrites/ACTIVE` to the child and resume from its cursor at step 1. A
100
+ predecessor replan since its Vet blocks the child's readiness with
101
+ `DRV-GATE-READINESS-STALE`; route that to `$rite-vet` before Build.
102
+
96
103
  Spend accounting is durable in `state.md` cursors, not chat. Before invoking the
97
104
  continuation, ensure the current workspace's `sequence_workspaces_remaining` is
98
105
  set — absent, write `max_workspaces - 1` and `sequence_position: 1` first — and
@@ -12,6 +12,10 @@ phases. Never silently code against a known-wrong plan.
12
12
  - the design system / existing UX pattern contradicts the planned UI;
13
13
  - a missing user decision that affects product behavior surfaces.
14
14
 
15
+ A timing gate that fails with no code cause is a protocol or environment defect
16
+ ([performance.md § Performance gate protocol](../../devrites-lib/reference/standards/performance.md#performance-gate-protocol)),
17
+ never another wright round.
18
+
15
19
  ## Workflow
16
20
  ```
17
21
  1. STOP coding.
@@ -124,7 +124,8 @@ load a routed standard to discover required behavior, not to prescribe implement
124
124
  owned prerequisites. Keep a build checkpoint only for unavailable pre-code evidence or a
125
125
  mandatory action-time approval. **Completion:** no foreseeable human choice is deferred.
126
126
  5. **Create or update the workspace** + set `.devrites/ACTIVE` from
127
- [state-workspace](reference/state-workspace.md). If the slug already exists,
127
+ [state-workspace](reference/state-workspace.md); a `--lookahead` run
128
+ leaves `.devrites/ACTIVE` unchanged. If the slug already exists,
128
129
  update the existing workspace rather than overwrite it; preserve history and
129
130
  unrelated settled content. Write every required artifact and conditional
130
131
  annex exactly from [spec-template](reference/spec-template.md)
@@ -211,7 +211,9 @@ plan declares a root-authored executable workflow file, read
211
211
  `marker sweep:` line is recorded in `eng-review.md`; a kept hit blocks READY. Write phase/next step and emit one
212
212
  `Readiness inputs SHA-256` with
213
213
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
214
- must pass. Record the per-input drift baseline alongside it:
214
+ must pass. A `sequence_lookahead: yes` workspace also records one
215
+ `Predecessor readiness: <predecessor> <digest>` line from the predecessor's
216
+ `--emit-binding` hex; readiness re-checks it. Record the per-input drift baseline alongside it:
215
217
  `devrites-engine check drift <slug> --record` — a later stale binding then
216
218
  names the exact artifact that moved instead of "something changed". An `ADVISORY
217
219
  proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
@@ -28,6 +28,20 @@ Measure first. An optimization without a measurement is a guess that adds comple
28
28
  flaking wall-clock test is a flaky test, [`testing.md`](testing.md)). Budget regression:
29
29
  re-measure; fix to budget or record the accepted regression with reason and owner.
30
30
 
31
+ ## Performance gate protocol
32
+ - A gate that judges a timing budget or a regression percentage pins its protocol
33
+ before Build: the environment (isolated cores, swap state, build flags such as
34
+ `CGO_ENABLED`), the repetitions and the aggregate (a median of at least five runs,
35
+ never one sample), and a noise floor measured as an A/A spread on that same
36
+ environment. Vet blocks READY on a timing gate without one. A threshold at or
37
+ below the noise floor is a plan defect for the owner, never a Build repair.
38
+ - A timing gate that fails while no code changed (an A/A run, a rerun) is noise or
39
+ host state, not a code defect. Stop wright rounds on it and fix the protocol or the
40
+ environment first.
41
+ - **Failing case:** a 10% p99 regression gate runs one sample per run on a shared host;
42
+ 26 wright rounds repair code against noise until the owner reserves cores and asks
43
+ for a median of five.
44
+
31
45
  ## Frontend: Core Web Vitals
32
46
  For UI work, measure-first means LCP / INP / CLS judged against real numbers, each labeled
33
47
  by source (`Field (CrUX)`, `Lab (Lighthouse)`, `Trace (DevTools)`): field and lab are not
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: rite-autocomplete
3
3
  description: Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase.
4
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
4
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
5
5
  ---
6
6
 
7
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md"]} -->
7
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
8
8
  > Read-set manifest: `devrites-engine context --skills-root .devin/skills <slug> --phase autocomplete` bundles every file named below into one deduplicated read. Trigger names map to the conditional rules in the sections that follow.
9
9
 
10
10
 
@@ -68,7 +68,7 @@ executable controller/harness/bundle bytes or a missing writer, read
68
68
  not a stop either: follow it in your next tool call, never in a text-only
69
69
  acknowledgement.
70
70
  - Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
71
- `--parallel`, `--full`, and `--cross-model` activate only as exact standalone
71
+ `--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
72
72
  tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
73
73
  `--max-slices` must occur once and be followed by a positive base-10 integer;
74
74
  `--parallel` must occur once and be followed by a base-10 integer in `1`–`10`.
@@ -81,6 +81,10 @@ executable controller/harness/bundle bytes or a missing writer, read
81
81
 
82
82
  ## Workflow
83
83
 
84
+ With `--lookahead` (trigger `lookahead`), follow
85
+ [`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
86
+ next sequence continuation through Vet in a second session, then stop.
87
+
84
88
  1. **Orient and parse.** Resolve the explicit or active slug; when a workspace exists,
85
89
  require its `state.md` and read its cursor; a fresh idea starts empty at step 2.
86
90
  Before honoring `blocked` with terminal `next_action`,
@@ -0,0 +1,50 @@
1
+ # Sequence lookahead (`--lookahead`)
2
+
3
+ > Root-only: not inlined in --role bundles.
4
+
5
+ A second session plans the next sequence continuation while the active
6
+ workspace builds, so the child's Spec → Vet overlaps its predecessor's
7
+ Build → Seal. The main loop later resumes the planned child instead of
8
+ specifying it again.
9
+
10
+ ## Start and target
11
+
12
+ The operator starts the second host session with `/rite-autocomplete
13
+ --lookahead` once the `.devrites/ACTIVE` workspace is in Build or later. The
14
+ agent never launches a session itself. The target is the next recorded
15
+ continuation after the active workspace: the entry
16
+ [sequence continuation](loop.md#sequence-continuation) would open. Stop with
17
+ nothing to do when the active workspace is before Build, no entry remains,
18
+ `continue_sequence: false`, or the sequence budget is spent.
19
+
20
+ ## Lease
21
+
22
+ Before any write, take the workspace lease:
23
+ `devrites-engine claim add --session lookahead-<target> --ttl 240 --workspace <target> --reason lookahead`.
24
+ Exit 3 means another session holds the target: stop. Re-add the lease with the
25
+ same session at each phase start, and release it with `devrites-engine claim
26
+ release` on every stop. A crashed session's lease reads `dead` and frees itself.
27
+
28
+ ## Rules
29
+
30
+ - Never read or write `.devrites/ACTIVE`. Pass the target slug explicitly to every
31
+ skill and engine command, including `/rite-spec <target> "<objective>"` and
32
+ `devrites-engine handoff <target> --resume`.
33
+ - After the workspace exists, run `devrites-engine state set <target> sequence_lookahead=yes`.
34
+ - Run Spec → Clarify → Temper → Define → Plan → Vet as the main loop does.
35
+ Define and Plan read the predecessor's current tree and plan. Record an
36
+ assumption for each predecessor interface the plan relies on.
37
+ - At Vet, beside the readiness binding, record exactly one line
38
+ `Predecessor readiness: <active-slug> <digest>` in `eng-review.md`. `<digest>`
39
+ is the hex that `devrites-engine check readiness --emit-binding <active-slug>`
40
+ prints. When the predecessor later changes its planning inputs, the child's
41
+ readiness check blocks with `DRV-GATE-READINESS-STALE` and the main loop
42
+ re-vets the child before Build.
43
+ - Never Build, never write product source or tests, never commit, and never
44
+ arm or rewrite `.devrites/AFK`. Owner questions go to the target's
45
+ `questions.md` and stop the lookahead.
46
+ - Stop at Vet `READY` with `next_action: build after predecessor Seal GO`, at a
47
+ human gate, or when the target's lease is lost.
48
+
49
+ **Failing case:** the lookahead passes Vet and starts Build while the
50
+ predecessor is still sealing, so two root sessions write one tree.
@@ -93,6 +93,13 @@ step 10 does not end the run: leave the sealed workspace unshipped with its
93
93
  (`/rite-spec <parent>-<n> "<objective>"` from the parent's `decisions.md` sequence)
94
94
  and re-enter step 1. Spend one workspace per opened continuation.
95
95
 
96
+ When that workspace already exists because a [lookahead](lookahead.md) session
97
+ planned it, do not specify it again. Wait while `devrites-engine claim check
98
+ --workspace <child>` exits 3 (a live lookahead holds it), then set
99
+ `.devrites/ACTIVE` to the child and resume from its cursor at step 1. A
100
+ predecessor replan since its Vet blocks the child's readiness with
101
+ `DRV-GATE-READINESS-STALE`; route that to `/rite-vet` before Build.
102
+
96
103
  Spend accounting is durable in `state.md` cursors, not chat. Before invoking the
97
104
  continuation, ensure the current workspace's `sequence_workspaces_remaining` is
98
105
  set — absent, write `max_workspaces - 1` and `sequence_position: 1` first — and
@@ -12,6 +12,10 @@ phases. Never silently code against a known-wrong plan.
12
12
  - the design system / existing UX pattern contradicts the planned UI;
13
13
  - a missing user decision that affects product behavior surfaces.
14
14
 
15
+ A timing gate that fails with no code cause is a protocol or environment defect
16
+ ([performance.md § Performance gate protocol](../../devrites-lib/reference/standards/performance.md#performance-gate-protocol)),
17
+ never another wright round.
18
+
15
19
  ## Workflow
16
20
  ```
17
21
  1. STOP coding.
@@ -123,7 +123,8 @@ load a routed standard to discover required behavior, not to prescribe implement
123
123
  owned prerequisites. Keep a build checkpoint only for unavailable pre-code evidence or a
124
124
  mandatory action-time approval. **Completion:** no foreseeable human choice is deferred.
125
125
  5. **Create or update the workspace** + set `.devrites/ACTIVE` from
126
- [state-workspace](reference/state-workspace.md). If the slug already exists,
126
+ [state-workspace](reference/state-workspace.md); a `--lookahead` run
127
+ leaves `.devrites/ACTIVE` unchanged. If the slug already exists,
127
128
  update the existing workspace rather than overwrite it; preserve history and
128
129
  unrelated settled content. Write every required artifact and conditional
129
130
  annex exactly from [spec-template](reference/spec-template.md)
@@ -210,7 +210,9 @@ plan declares a root-authored executable workflow file, read
210
210
  `marker sweep:` line is recorded in `eng-review.md`; a kept hit blocks READY. Write phase/next step and emit one
211
211
  `Readiness inputs SHA-256` with
212
212
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
213
- must pass. Record the per-input drift baseline alongside it:
213
+ must pass. A `sequence_lookahead: yes` workspace also records one
214
+ `Predecessor readiness: <predecessor> <digest>` line from the predecessor's
215
+ `--emit-binding` hex; readiness re-checks it. Record the per-input drift baseline alongside it:
214
216
  `devrites-engine check drift <slug> --record` — a later stale binding then
215
217
  names the exact artifact that moved instead of "something changed". An `ADVISORY
216
218
  proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  description: "Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase."
3
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
3
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
4
4
  ---
5
5
  Read and follow the DevRites skill `skill://rite-autocomplete` (`.omp/skills/rite-autocomplete/SKILL.md`). Apply it to these arguments, or to the current request when they are empty: $ARGUMENTS
@@ -28,6 +28,20 @@ Measure first. An optimization without a measurement is a guess that adds comple
28
28
  flaking wall-clock test is a flaky test, [`testing.md`](testing.md)). Budget regression:
29
29
  re-measure; fix to budget or record the accepted regression with reason and owner.
30
30
 
31
+ ## Performance gate protocol
32
+ - A gate that judges a timing budget or a regression percentage pins its protocol
33
+ before Build: the environment (isolated cores, swap state, build flags such as
34
+ `CGO_ENABLED`), the repetitions and the aggregate (a median of at least five runs,
35
+ never one sample), and a noise floor measured as an A/A spread on that same
36
+ environment. Vet blocks READY on a timing gate without one. A threshold at or
37
+ below the noise floor is a plan defect for the owner, never a Build repair.
38
+ - A timing gate that fails while no code changed (an A/A run, a rerun) is noise or
39
+ host state, not a code defect. Stop wright rounds on it and fix the protocol or the
40
+ environment first.
41
+ - **Failing case:** a 10% p99 regression gate runs one sample per run on a shared host;
42
+ 26 wright rounds repair code against noise until the owner reserves cores and asks
43
+ for a median of five.
44
+
31
45
  ## Frontend: Core Web Vitals
32
46
  For UI work, measure-first means LCP / INP / CLS judged against real numbers, each labeled
33
47
  by source (`Field (CrUX)`, `Lab (Lighthouse)`, `Trace (DevTools)`): field and lab are not
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rite-autocomplete
3
3
  description: Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase.
4
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
4
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md"]} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .omp/skills <slug> --phase autocomplete` bundles every file named below into one deduplicated read. Trigger names map to the conditional rules in the sections that follow.
10
10
 
11
11
 
@@ -69,7 +69,7 @@ executable controller/harness/bundle bytes or a missing writer, read
69
69
  not a stop either: follow it in your next tool call, never in a text-only
70
70
  acknowledgement.
71
71
  - Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
72
- `--parallel`, `--full`, and `--cross-model` activate only as exact standalone
72
+ `--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
73
73
  tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
74
74
  `--max-slices` must occur once and be followed by a positive base-10 integer;
75
75
  `--parallel` must occur once and be followed by a base-10 integer in `1`–`10`.
@@ -82,6 +82,10 @@ executable controller/harness/bundle bytes or a missing writer, read
82
82
 
83
83
  ## Workflow
84
84
 
85
+ With `--lookahead` (trigger `lookahead`), follow
86
+ [`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
87
+ next sequence continuation through Vet in a second session, then stop.
88
+
85
89
  1. **Orient and parse.** Resolve the explicit or active slug; when a workspace exists,
86
90
  require its `state.md` and read its cursor; a fresh idea starts empty at step 2.
87
91
  Before honoring `blocked` with terminal `next_action`,
@@ -0,0 +1,50 @@
1
+ # Sequence lookahead (`--lookahead`)
2
+
3
+ > Root-only: not inlined in --role bundles.
4
+
5
+ A second session plans the next sequence continuation while the active
6
+ workspace builds, so the child's Spec → Vet overlaps its predecessor's
7
+ Build → Seal. The main loop later resumes the planned child instead of
8
+ specifying it again.
9
+
10
+ ## Start and target
11
+
12
+ The operator starts the second host session with `/rite-autocomplete
13
+ --lookahead` once the `.devrites/ACTIVE` workspace is in Build or later. The
14
+ agent never launches a session itself. The target is the next recorded
15
+ continuation after the active workspace: the entry
16
+ [sequence continuation](loop.md#sequence-continuation) would open. Stop with
17
+ nothing to do when the active workspace is before Build, no entry remains,
18
+ `continue_sequence: false`, or the sequence budget is spent.
19
+
20
+ ## Lease
21
+
22
+ Before any write, take the workspace lease:
23
+ `devrites-engine claim add --session lookahead-<target> --ttl 240 --workspace <target> --reason lookahead`.
24
+ Exit 3 means another session holds the target: stop. Re-add the lease with the
25
+ same session at each phase start, and release it with `devrites-engine claim
26
+ release` on every stop. A crashed session's lease reads `dead` and frees itself.
27
+
28
+ ## Rules
29
+
30
+ - Never read or write `.devrites/ACTIVE`. Pass the target slug explicitly to every
31
+ skill and engine command, including `/rite-spec <target> "<objective>"` and
32
+ `devrites-engine handoff <target> --resume`.
33
+ - After the workspace exists, run `devrites-engine state set <target> sequence_lookahead=yes`.
34
+ - Run Spec → Clarify → Temper → Define → Plan → Vet as the main loop does.
35
+ Define and Plan read the predecessor's current tree and plan. Record an
36
+ assumption for each predecessor interface the plan relies on.
37
+ - At Vet, beside the readiness binding, record exactly one line
38
+ `Predecessor readiness: <active-slug> <digest>` in `eng-review.md`. `<digest>`
39
+ is the hex that `devrites-engine check readiness --emit-binding <active-slug>`
40
+ prints. When the predecessor later changes its planning inputs, the child's
41
+ readiness check blocks with `DRV-GATE-READINESS-STALE` and the main loop
42
+ re-vets the child before Build.
43
+ - Never Build, never write product source or tests, never commit, and never
44
+ arm or rewrite `.devrites/AFK`. Owner questions go to the target's
45
+ `questions.md` and stop the lookahead.
46
+ - Stop at Vet `READY` with `next_action: build after predecessor Seal GO`, at a
47
+ human gate, or when the target's lease is lost.
48
+
49
+ **Failing case:** the lookahead passes Vet and starts Build while the
50
+ predecessor is still sealing, so two root sessions write one tree.
@@ -93,6 +93,13 @@ step 10 does not end the run: leave the sealed workspace unshipped with its
93
93
  (`/rite-spec <parent>-<n> "<objective>"` from the parent's `decisions.md` sequence)
94
94
  and re-enter step 1. Spend one workspace per opened continuation.
95
95
 
96
+ When that workspace already exists because a [lookahead](lookahead.md) session
97
+ planned it, do not specify it again. Wait while `devrites-engine claim check
98
+ --workspace <child>` exits 3 (a live lookahead holds it), then set
99
+ `.devrites/ACTIVE` to the child and resume from its cursor at step 1. A
100
+ predecessor replan since its Vet blocks the child's readiness with
101
+ `DRV-GATE-READINESS-STALE`; route that to `/rite-vet` before Build.
102
+
96
103
  Spend accounting is durable in `state.md` cursors, not chat. Before invoking the
97
104
  continuation, ensure the current workspace's `sequence_workspaces_remaining` is
98
105
  set — absent, write `max_workspaces - 1` and `sequence_position: 1` first — and
@@ -12,6 +12,10 @@ phases. Never silently code against a known-wrong plan.
12
12
  - the design system / existing UX pattern contradicts the planned UI;
13
13
  - a missing user decision that affects product behavior surfaces.
14
14
 
15
+ A timing gate that fails with no code cause is a protocol or environment defect
16
+ ([performance.md § Performance gate protocol](skill://devrites-lib/reference/standards/performance.md#performance-gate-protocol)),
17
+ never another wright round.
18
+
15
19
  ## Workflow
16
20
  ```
17
21
  1. STOP coding.
@@ -124,7 +124,8 @@ load a routed standard to discover required behavior, not to prescribe implement
124
124
  owned prerequisites. Keep a build checkpoint only for unavailable pre-code evidence or a
125
125
  mandatory action-time approval. **Completion:** no foreseeable human choice is deferred.
126
126
  5. **Create or update the workspace** + set `.devrites/ACTIVE` from
127
- [state-workspace](reference/state-workspace.md). If the slug already exists,
127
+ [state-workspace](reference/state-workspace.md); a `--lookahead` run
128
+ leaves `.devrites/ACTIVE` unchanged. If the slug already exists,
128
129
  update the existing workspace rather than overwrite it; preserve history and
129
130
  unrelated settled content. Write every required artifact and conditional
130
131
  annex exactly from [spec-template](reference/spec-template.md)
@@ -211,7 +211,9 @@ plan declares a root-authored executable workflow file, read
211
211
  `marker sweep:` line is recorded in `eng-review.md`; a kept hit blocks READY. Write phase/next step and emit one
212
212
  `Readiness inputs SHA-256` with
213
213
  `devrites-engine check readiness --emit-binding <slug>`; normal readiness check
214
- must pass. Record the per-input drift baseline alongside it:
214
+ must pass. A `sequence_lookahead: yes` workspace also records one
215
+ `Predecessor readiness: <predecessor> <digest>` line from the predecessor's
216
+ `--emit-binding` hex; readiness re-checks it. Record the per-input drift baseline alongside it:
215
217
  `devrites-engine check drift <slug> --record` — a later stale binding then
216
218
  names the exact artifact that moved instead of "something changed". An `ADVISORY
217
219
  proportion:` line names a slice whose proof outgrew its ACs: move its rows without a
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  description: "Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase."
3
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
3
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
4
4
  ---
5
5
  Read and follow the DevRites skill at `.pi/skills/rite-autocomplete/SKILL.md`, applying it to: ${ARGUMENTS:-the current request}.
@@ -28,6 +28,20 @@ Measure first. An optimization without a measurement is a guess that adds comple
28
28
  flaking wall-clock test is a flaky test, [`testing.md`](testing.md)). Budget regression:
29
29
  re-measure; fix to budget or record the accepted regression with reason and owner.
30
30
 
31
+ ## Performance gate protocol
32
+ - A gate that judges a timing budget or a regression percentage pins its protocol
33
+ before Build: the environment (isolated cores, swap state, build flags such as
34
+ `CGO_ENABLED`), the repetitions and the aggregate (a median of at least five runs,
35
+ never one sample), and a noise floor measured as an A/A spread on that same
36
+ environment. Vet blocks READY on a timing gate without one. A threshold at or
37
+ below the noise floor is a plan defect for the owner, never a Build repair.
38
+ - A timing gate that fails while no code changed (an A/A run, a rerun) is noise or
39
+ host state, not a code defect. Stop wright rounds on it and fix the protocol or the
40
+ environment first.
41
+ - **Failing case:** a 10% p99 regression gate runs one sample per run on a shared host;
42
+ 26 wright rounds repair code against noise until the owner reserves cores and asks
43
+ for a median of five.
44
+
31
45
  ## Frontend: Core Web Vitals
32
46
  For UI work, measure-first means LCP / INP / CLS judged against real numbers, each labeled
33
47
  by source (`Field (CrUX)`, `Lab (Lighthouse)`, `Trace (DevTools)`): field and lab are not
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rite-autocomplete
3
3
  description: Run the full DevRites lifecycle unattended; --ship continues to the final Git approval boundary. Use for one-shot autonomous work; not for a single phase.
4
- argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model]"
4
+ argument-hint: "[idea] [--ship|--yolo] [--max-slices N] [--parallel N] [--full] [--cross-model] [--lookahead]"
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
- <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md"]} -->
8
+ <!-- loads: {"always":["devrites-lib/reference/standards/core.md","devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/standards/one-shot-actions.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/acceptance-preserving-reslice.md","rite-autocomplete/reference/decision-policy.md","rite-autocomplete/reference/loop.md","rite-autocomplete/reference/stop-conditions.md"],"triggers":{"workflow-artifacts":["devrites-lib/reference/standards/workflow-artifacts.md"],"lookahead":["rite-autocomplete/reference/lookahead.md"]},"workspace":["state.md","spec.md","plan.md","tasks.md","questions.md","decisions.md","drift.md","evidence.md","test-plan.md"],"rootOnly":["devrites-lib/reference/standards/afk-hitl.md","devrites-lib/reference/orchestration-profiles.md","devrites-lib/reference/standards/workflow-artifacts.md","rite-autocomplete/reference/lookahead.md"]} -->
9
9
  > Read-set manifest: `devrites-engine context --skills-root .pi/skills <slug> --phase autocomplete` bundles every file named below into one deduplicated read. Trigger names map to the conditional rules in the sections that follow.
10
10
 
11
11
 
@@ -69,7 +69,7 @@ executable controller/harness/bundle bytes or a missing writer, read
69
69
  not a stop either: follow it in your next tool call, never in a text-only
70
70
  acknowledgement.
71
71
  - Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
72
- `--parallel`, `--full`, and `--cross-model` activate only as exact standalone
72
+ `--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
73
73
  tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
74
74
  `--max-slices` must occur once and be followed by a positive base-10 integer;
75
75
  `--parallel` must occur once and be followed by a base-10 integer in `1`–`10`.
@@ -82,6 +82,10 @@ executable controller/harness/bundle bytes or a missing writer, read
82
82
 
83
83
  ## Workflow
84
84
 
85
+ With `--lookahead` (trigger `lookahead`), follow
86
+ [`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
87
+ next sequence continuation through Vet in a second session, then stop.
88
+
85
89
  1. **Orient and parse.** Resolve the explicit or active slug; when a workspace exists,
86
90
  require its `state.md` and read its cursor; a fresh idea starts empty at step 2.
87
91
  Before honoring `blocked` with terminal `next_action`,
@@ -0,0 +1,50 @@
1
+ # Sequence lookahead (`--lookahead`)
2
+
3
+ > Root-only: not inlined in --role bundles.
4
+
5
+ A second session plans the next sequence continuation while the active
6
+ workspace builds, so the child's Spec → Vet overlaps its predecessor's
7
+ Build → Seal. The main loop later resumes the planned child instead of
8
+ specifying it again.
9
+
10
+ ## Start and target
11
+
12
+ The operator starts the second host session with `/rite-autocomplete
13
+ --lookahead` once the `.devrites/ACTIVE` workspace is in Build or later. The
14
+ agent never launches a session itself. The target is the next recorded
15
+ continuation after the active workspace: the entry
16
+ [sequence continuation](loop.md#sequence-continuation) would open. Stop with
17
+ nothing to do when the active workspace is before Build, no entry remains,
18
+ `continue_sequence: false`, or the sequence budget is spent.
19
+
20
+ ## Lease
21
+
22
+ Before any write, take the workspace lease:
23
+ `devrites-engine claim add --session lookahead-<target> --ttl 240 --workspace <target> --reason lookahead`.
24
+ Exit 3 means another session holds the target: stop. Re-add the lease with the
25
+ same session at each phase start, and release it with `devrites-engine claim
26
+ release` on every stop. A crashed session's lease reads `dead` and frees itself.
27
+
28
+ ## Rules
29
+
30
+ - Never read or write `.devrites/ACTIVE`. Pass the target slug explicitly to every
31
+ skill and engine command, including `/rite-spec <target> "<objective>"` and
32
+ `devrites-engine handoff <target> --resume`.
33
+ - After the workspace exists, run `devrites-engine state set <target> sequence_lookahead=yes`.
34
+ - Run Spec → Clarify → Temper → Define → Plan → Vet as the main loop does.
35
+ Define and Plan read the predecessor's current tree and plan. Record an
36
+ assumption for each predecessor interface the plan relies on.
37
+ - At Vet, beside the readiness binding, record exactly one line
38
+ `Predecessor readiness: <active-slug> <digest>` in `eng-review.md`. `<digest>`
39
+ is the hex that `devrites-engine check readiness --emit-binding <active-slug>`
40
+ prints. When the predecessor later changes its planning inputs, the child's
41
+ readiness check blocks with `DRV-GATE-READINESS-STALE` and the main loop
42
+ re-vets the child before Build.
43
+ - Never Build, never write product source or tests, never commit, and never
44
+ arm or rewrite `.devrites/AFK`. Owner questions go to the target's
45
+ `questions.md` and stop the lookahead.
46
+ - Stop at Vet `READY` with `next_action: build after predecessor Seal GO`, at a
47
+ human gate, or when the target's lease is lost.
48
+
49
+ **Failing case:** the lookahead passes Vet and starts Build while the
50
+ predecessor is still sealing, so two root sessions write one tree.