devrites 7.3.8 → 7.3.10
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 +17 -0
- package/README.md +1 -1
- package/docs/engine/commands.md +1 -1
- package/engine/go.mod +1 -1
- package/engine/internal/lib/continuation.go +32 -3
- package/engine/internal/lib/frontier.go +97 -22
- package/engine/internal/lib/next.go +1 -0
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +30 -29
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +3 -3
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [7.3.10](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.9...v7.3.10) (2026-11-12)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **devrites:** recover autocomplete owner when ACTIVE is empty ([#213](https://github.com/ViktorsBaikers/DevRites/issues/213)) ([7014453](https://github.com/ViktorsBaikers/DevRites/commit/70144532ef53e9d6df9021b53523828b44ffc4f3))
|
|
10
|
+
|
|
11
|
+
## [7.3.9](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.8...v7.3.9) (2026-11-10)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
* **devrites:** keep parallel autocomplete running past a source GO ([#212](https://github.com/ViktorsBaikers/DevRites/issues/212)) ([8dd7ab3](https://github.com/ViktorsBaikers/DevRites/commit/8dd7ab34a3d5ced36a7adb9ea4f2036db4116dcb))
|
|
16
|
+
|
|
5
17
|
## [7.3.8](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.7...v7.3.8) (2026-11-09)
|
|
6
18
|
|
|
7
19
|
### Fixed
|
|
@@ -71,6 +83,8 @@ All notable changes to DevRites are documented here. The format follows [Keep a
|
|
|
71
83
|
|
|
72
84
|
### Fixed
|
|
73
85
|
|
|
86
|
+
- Pin the engine and workflow-artifact fixture to Go 1.27.4 to address
|
|
87
|
+
GO-2026-6859 in `net/http`.
|
|
74
88
|
- Mark only the slice a checked state.md item names first as built; a later
|
|
75
89
|
`SLICE-###` reference in the same line no longer inflates regression, next, or
|
|
76
90
|
parallel admission. Baselines written under the old all-token parsing re-ratchet
|
|
@@ -97,6 +111,9 @@ All notable changes to DevRites are documented here. The format follows [Keep a
|
|
|
97
111
|
complete writer allowlist against live foreign claims, including symlink
|
|
98
112
|
aliases, even when optional claim flags are absent or name unrelated paths.
|
|
99
113
|
|
|
114
|
+
- Recover Autocomplete's recorded live sequence owner when ACTIVE is missing or
|
|
115
|
+
empty before requesting a workspace handoff; retain ambiguity, metadata repair,
|
|
116
|
+
human gates, and read-only recovery without changing ACTIVE.
|
|
100
117
|
- Use `GH_TOKEN`, then `GITHUB_TOKEN`, then optional bounded noninteractive GitHub
|
|
101
118
|
CLI credential lookup for release API requests. Keep credentials off release
|
|
102
119
|
assets and off-origin redirects, fail explicit invalid credentials, and document
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ history can't lose it. After you clear the conversation, switch hosts, or hand
|
|
|
31
31
|
the feature to another engineer, the next session reads the same plan,
|
|
32
32
|
decisions, and evidence before it continues.
|
|
33
33
|
|
|
34
|
-
**Status:** [`v7.3.
|
|
34
|
+
**Status:** [`v7.3.10`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.10): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
35
35
|
|
|
36
36
|
This is the latest published release; `main` may contain unreleased work.
|
|
37
37
|
|
package/docs/engine/commands.md
CHANGED
|
@@ -35,7 +35,7 @@ workflow strategy.
|
|
|
35
35
|
| `orient <slug>` | Alias for `observe summary`. |
|
|
36
36
|
| `observe slice <slug> <SLICE-ID>` | Print one `SLICE-###` section of `tasks.md` so Build reads a slice, not the file. |
|
|
37
37
|
| `next [slug]` | Print the minimal remaining lifecycle path plus advisory skips; in Build also `eligible_now:`, `batch:` and the `select-command:` (`parallel select --root <project> --slug <slug> --cap N --from-plan`, N = AFK max_parallel else 10) that reproduces the batch. Prints `blocked: unattributed root edit: ...` after `open-questions:` and exits `3` while the ADR-0038 tripwire flags a product path; the rest of the output still prints. |
|
|
38
|
-
| `frontier [slug]` | Read-only report across exact recorded sequence relations, including archived intermediaries and live descendants. Emits `frontier: actionable\|waiting\|blocked\|clear` (`none` for a non-sequence source), `frontier-source:`, and `frontier-workspace:` rows with location, `inspect\|prepare\|repair\|wait\|complete` action, and reason. Emits `frontier-select-command:`, `frontier-picks:`, `frontier-selection: blocked`, `frontier-prepare:`, or `frontier-review-sequence:` where applicable. Explicit slug may be archived
|
|
38
|
+
| `frontier [slug]` | Read-only report across exact recorded sequence relations, including archived intermediaries and live descendants. Emits `frontier: actionable\|waiting\|blocked\|clear` (`none` for a non-sequence source or no recorded sequence evidence), `frontier-source:`, and `frontier-workspace:` rows with location, `inspect\|prepare\|repair\|wait\|complete` action, and reason. Emits `frontier-select-command:`, `frontier-picks:`, `frontier-selection: blocked`, `frontier-prepare:`, or `frontier-review-sequence:` where applicable. Explicit slug may be archived. Without a slug and with missing/empty ACTIVE, recovers the earliest live owner of a unique validated recorded sequence (parent links or a numbered root with a sequence counter), or a unique archived terminal tip with an exact native next Spec edge and no children. Related live members share one sequence; equally earliest live siblings or unrelated eligible sequences refuse ambiguity, and invalid competing metadata requires repair. Without sequence evidence, `none` permits a fresh idea rather than forcing workspace selection. Standalone or loose directories, names, mtimes, and chat never identify a source. Explicit workspace overrides and retained controller constraints remain authoritative. Carry the returned `frontier-source:` explicitly to `handoff`, `context`, and `check continuation`. One explicit `roadmap.md` owner anywhere in the related live/archive chain may supersede historical maps for scheduling: both `Sequence root:` and `Decision:` headers, a unique owner-local decision heading, and one contiguous position/workspace table must match recorded identities and successors. Either header claims this format; invalid authority fails closed without legacy fallback. Headerless maps retain legacy parsing. Native normalization preserves historical bytes; structural identity is not semantic approval. Never changes ACTIVE, restores archives, creates workspaces, or launches writers. Native preparation and semantic admission remain required; see [sequence frontier](../cli.md#sequence-frontier). |
|
|
39
39
|
| `handoff [slug] [--resume]` | Emit the deterministic resume record: cursor fields, `awaiting_human`, open `questions.md` gate kinds, the `gates.md` reduction with unmet/stale/abandoned ids, `decisions.md` dead ends, in-flight dispatch waves (`inflight_wave:` lines: phase, state, pending roles, slices), missing required files, the canonical read-next order, and the same `continuation:` lines as `check continuation`. Read-only unless `--resume`, which appends one `resume` event (role root) to `metrics.jsonl`; `metrics summary` then reports minutes from each resume to the next dispatch. The `/rite-handoff` spine and the compaction-fallback entry point. |
|
|
40
40
|
| `recall --paths <p1,p2,...> [--limit n]` | Read-time query over `.devrites/archive/`: list archived features whose `touched-files.md` candidate manifest covers a queried project-relative path (exact or directory prefix, case-folded), ranked by overlap count, then newest archive-directory mtime, then slug (default 10 features). Each feature prints up to 8 `archive/<slug>/<file>:<line>` pointers, then `+N more`: `decisions.md` `DEC-###` entries and `## Carry-forward constraints` bullets whose `Files:` overlap (or a constraint naming no files), plus `review.md`/`seal.md`/`drift.md` lines that mention a queried path; fenced examples are ignored. Never writes, caches, or indexes (no metric either); symlinked archive entries are refused. An unreadable archive file prints `unreadable:` and the scan continues. Exit `0` (including `recall: no archive`), `1` invalid archive directory, `2` usage. |
|
|
41
41
|
| `context [slug] (--phase <p>\|--skill <name>) [--role <r>] [--slice <SLICE-ID>] [--recheck <inventory>] [--trigger a,b] [--inline-contract] [--whole]` | Emit one deduplicated read-set bundle per phase/role/skill from each skill's `loads:` manifest; `--skill` works without a workspace when `--out` is given. A root `--phase build\|autocomplete` bundle (no `--role`, no `--slice`) defaults to `--slice <active_slice>` while the state.md cursor phase is `build` and active_slice names a slice present in tasks.md (prints `scope: slice SLICE-### (auto from state.md) ...`), unless `.devrites/AFK` `max_parallel` is 2 or more or a parallel lease is `running` (the bundle stays whole); `--whole` opts out. Every bundle opens, after its header comments, with a table of contents: one `L<start>-<end> <section label>` line per `===== label =====` section, giving its exact line range in the bundle file. A bundle without `--role` (the root's own read) gives over-budget artifacts as by-reference indexes; a `--role` bundle leads with the role's agent contract and names the manifest's `rootOnly` paths instead of inlining them. When the contract resolves under `.claude/agents`, `.omp/agents`, or `.codex/agents` (the host loads it as the agent's system prompt), the bundle writes one header line naming its path, size, and SHA-256 instead of the body; other layouts (pi, devin, unknown) and `--inline-contract` (only with `--role`) inline the body, and a missing contract still exits `3`. Inside inlined files, a `--role` bundle replaces each `<!-- root-only -->`…`<!-- /root-only -->` block with a one-line stub naming the omitted heading, and does the same for each `<!-- model-surface -->` block unless the role is `security-auditor`, the feature has an `ai-spec.md`, or `spec.md`/`plan.md`/`tasks.md`/`design-brief.md` are absent or (outside the spec template's `AI-SPEC annex`) name a model, agent, RAG, or tool surface; an unbalanced or headingless marker exits `2`. `--slice` inlines that slice's `tasks.md` block and turns each over-budget artifact, and each artifact over 16 KiB except `spec.md`, into a by-reference index (path, SHA-256, headings, line hits for every ID the block cites); repeat `--slice` for several slices; an unknown slice exits `3`. In phase `build`, a `--role` bundle other than `slice-wright` without `--slice` exits `3` (`unscoped build reviewer bundle`). `--recheck <inventory>` (phase `build`, with `--role` and `--slice`; path relative to the workspace) writes `<phase>-<role>.<slice>.recheck.bundle.md`: the inventory file and `core.md` inline whole, every other non-`rootOnly` pack file becomes a by-reference index (path, SHA-256, headings with line numbers) followed by each section the inventory cites as `<file>.md § <heading>`; workspace handling matches `--slice`. A missing or empty inventory exits `2`. First reviews, full-inventory rechecks, Vet, `/rite-review`, and Seal do not use it. |
|
package/engine/go.mod
CHANGED
|
@@ -58,7 +58,11 @@ func RunCheckContinuation(root string, args []string, stdout, stderr io.Writer)
|
|
|
58
58
|
return 2
|
|
59
59
|
}
|
|
60
60
|
if mode && frontierGlobalPriority(slug, frontier) || !mode && !verdict.Required && len(frontier) > 0 && frontier[0] == "frontier: actionable" {
|
|
61
|
-
|
|
61
|
+
reason := "global frontier requires native preparation, authority review, or selection; Git stays unauthorized"
|
|
62
|
+
if mode && frontierHasBatch(frontier) {
|
|
63
|
+
reason = "a source GO does not end autocomplete; run every launch command and every picks writer this turn; do not ask; Git stays unauthorized"
|
|
64
|
+
}
|
|
65
|
+
verdict = continuationVerdict{Required: true, Invoke: "/rite-autocomplete", Source: slug, Reason: reason}
|
|
62
66
|
} else if mode && frontierSourcePreparationWait(slug, frontier) {
|
|
63
67
|
verdict = continuationVerdict{Reason: frontierInheritedPreparationWait}
|
|
64
68
|
} else if mode && !verdict.Required {
|
|
@@ -67,13 +71,37 @@ func RunCheckContinuation(root string, args []string, stdout, stderr io.Writer)
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
|
-
writeContinuation(stdout, verdict)
|
|
74
|
+
writeContinuation(stdout, verdict, frontier)
|
|
71
75
|
for _, line := range frontier {
|
|
72
76
|
fmt.Fprintln(stdout, line)
|
|
73
77
|
}
|
|
74
78
|
return 0
|
|
75
79
|
}
|
|
76
80
|
|
|
81
|
+
// frontierHasBatch reports a capped same-turn batch: planning commands and/or
|
|
82
|
+
// admitted slice writers. The controller invoke stays /rite-autocomplete.
|
|
83
|
+
func frontierHasBatch(lines []string) bool {
|
|
84
|
+
for _, line := range lines {
|
|
85
|
+
if strings.HasPrefix(line, "frontier-concurrent: ") || strings.HasPrefix(line, "frontier-picks: ") {
|
|
86
|
+
return true
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func writeFrontierBatch(stdout io.Writer, lines []string) {
|
|
93
|
+
for _, line := range lines {
|
|
94
|
+
if cmd, ok := strings.CutPrefix(line, "frontier-concurrent: "); ok && cmd != "" {
|
|
95
|
+
fmt.Fprintf(stdout, "launch: %s\n", cmd)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
for _, line := range lines {
|
|
99
|
+
if picks, ok := strings.CutPrefix(line, "frontier-picks: "); ok && picks != "" {
|
|
100
|
+
fmt.Fprintf(stdout, "picks: %s\n", picks)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
77
105
|
func classifyContinuation(root, slug string) (continuationVerdict, error) {
|
|
78
106
|
featureDir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
79
107
|
if err != nil {
|
|
@@ -246,11 +274,12 @@ func continuationArguments(command workflow.Command, args []string, slug string)
|
|
|
246
274
|
return badArgs()
|
|
247
275
|
}
|
|
248
276
|
|
|
249
|
-
func writeContinuation(stdout io.Writer, verdict continuationVerdict) {
|
|
277
|
+
func writeContinuation(stdout io.Writer, verdict continuationVerdict, frontier []string) {
|
|
250
278
|
if verdict.Required {
|
|
251
279
|
fmt.Fprintln(stdout, "continuation: required")
|
|
252
280
|
fmt.Fprintf(stdout, "invoke: %s\n", verdict.Invoke)
|
|
253
281
|
fmt.Fprintf(stdout, "source: %s\n", verdict.Source)
|
|
282
|
+
writeFrontierBatch(stdout, frontier)
|
|
254
283
|
} else {
|
|
255
284
|
fmt.Fprintln(stdout, "continuation: clear")
|
|
256
285
|
}
|
|
@@ -5,6 +5,7 @@ import (
|
|
|
5
5
|
"io"
|
|
6
6
|
"os"
|
|
7
7
|
"path/filepath"
|
|
8
|
+
"sort"
|
|
8
9
|
"strconv"
|
|
9
10
|
"strings"
|
|
10
11
|
|
|
@@ -22,6 +23,7 @@ type frontierWorkspace struct {
|
|
|
22
23
|
slug, dir, location, parent, phase, status, next, question string
|
|
23
24
|
position, remaining int
|
|
24
25
|
hasPosition, hasRemaining bool
|
|
26
|
+
hasParent bool
|
|
25
27
|
selectionHeld, agentOwnedPlanning bool
|
|
26
28
|
problem error
|
|
27
29
|
}
|
|
@@ -92,7 +94,10 @@ func frontierRead(root, slug, location string) *frontierWorkspace {
|
|
|
92
94
|
}{
|
|
93
95
|
{state.CursorSequenceParent, &n.parent}, {state.CursorPhase, &n.phase}, {state.CursorStatus, &n.status}, {state.CursorNextAction, &n.next}, {state.CursorQuestionID, &n.question},
|
|
94
96
|
} {
|
|
95
|
-
value,
|
|
97
|
+
value, present, err := frontierField(lines, field.key)
|
|
98
|
+
if field.key == state.CursorSequenceParent {
|
|
99
|
+
n.hasParent = present
|
|
100
|
+
}
|
|
96
101
|
*field.dst = value
|
|
97
102
|
if err != nil {
|
|
98
103
|
n.problem = err
|
|
@@ -238,6 +243,75 @@ func frontierTerminal(n *frontierWorkspace) bool {
|
|
|
238
243
|
|
|
239
244
|
func frontierQuote(s string) string { return "'" + strings.ReplaceAll(s, "'", "'\"'\"'") + "'" }
|
|
240
245
|
|
|
246
|
+
func frontierRecoverSource(nodes map[string]*frontierWorkspace) (string, error) {
|
|
247
|
+
names := make([]string, 0, len(nodes))
|
|
248
|
+
hasChild := make(map[string]bool, len(nodes))
|
|
249
|
+
for name, n := range nodes {
|
|
250
|
+
names = append(names, name)
|
|
251
|
+
hasChild[n.parent] = true
|
|
252
|
+
}
|
|
253
|
+
sort.Strings(names)
|
|
254
|
+
owners := map[string]string{}
|
|
255
|
+
depths := map[string]int{}
|
|
256
|
+
ambiguous := map[string]bool{}
|
|
257
|
+
recorded := false
|
|
258
|
+
var tips []struct{ slug, anchor string }
|
|
259
|
+
for _, name := range names {
|
|
260
|
+
n := nodes[name]
|
|
261
|
+
tip := n.location == "archive" && frontierTerminal(n) && frontierSpecTarget(n) != "" && !hasChild[name]
|
|
262
|
+
recorded = recorded || n.parent != "" || n.hasPosition || n.hasRemaining || hasChild[name] || tip
|
|
263
|
+
if !n.hasParent && !n.hasPosition && !n.hasRemaining && !hasChild[name] && !tip {
|
|
264
|
+
continue
|
|
265
|
+
}
|
|
266
|
+
chain, err := frontierChain(nodes, name)
|
|
267
|
+
if err != nil {
|
|
268
|
+
return "", fmt.Errorf("empty ACTIVE: invalid recorded sequence at %s: %w; repair native sequence metadata before recovery", name, err)
|
|
269
|
+
}
|
|
270
|
+
anchor := chain[len(chain)-1]
|
|
271
|
+
if len(chain) > 1 || hasChild[name] || n.hasPosition && n.hasRemaining {
|
|
272
|
+
for i := len(chain) - 1; i >= 0; i-- {
|
|
273
|
+
member := chain[i]
|
|
274
|
+
if nodes[member].location != "live" {
|
|
275
|
+
continue
|
|
276
|
+
}
|
|
277
|
+
depth := len(chain) - i
|
|
278
|
+
old := owners[anchor]
|
|
279
|
+
if old == "" || depth < depths[anchor] {
|
|
280
|
+
owners[anchor], depths[anchor] = member, depth
|
|
281
|
+
ambiguous[anchor] = false
|
|
282
|
+
} else if depth == depths[anchor] && member != old {
|
|
283
|
+
ambiguous[anchor] = true
|
|
284
|
+
}
|
|
285
|
+
break
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if tip {
|
|
289
|
+
tips = append(tips, struct{ slug, anchor string }{name, anchor})
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if !recorded {
|
|
293
|
+
return "", nil
|
|
294
|
+
}
|
|
295
|
+
for _, name := range names {
|
|
296
|
+
if ambiguous[name] {
|
|
297
|
+
return "", fmt.Errorf("empty ACTIVE: sequence %s has multiple equally earliest live owners; repair native sequence ownership before recovery", name)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
var sources []string
|
|
301
|
+
for _, owner := range owners {
|
|
302
|
+
sources = append(sources, owner)
|
|
303
|
+
}
|
|
304
|
+
for _, tip := range tips {
|
|
305
|
+
if owners[tip.anchor] == "" {
|
|
306
|
+
sources = append(sources, tip.slug)
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if len(sources) != 1 {
|
|
310
|
+
return "", fmt.Errorf("empty ACTIVE: need a unique recorded live sequence owner or unique archived terminal sequence tip with exact next Spec edge; found %d", len(sources))
|
|
311
|
+
}
|
|
312
|
+
return sources[0], nil
|
|
313
|
+
}
|
|
314
|
+
|
|
241
315
|
// FrontierLines reports structural obligations, never semantic authorization or Ship approval.
|
|
242
316
|
func FrontierLines(root, slug string) ([]string, error) {
|
|
243
317
|
mode, err := autocompleteMode(root)
|
|
@@ -266,26 +340,13 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
266
340
|
return nil, err
|
|
267
341
|
}
|
|
268
342
|
if slug == "" {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
continue
|
|
273
|
-
}
|
|
274
|
-
if _, err := frontierChain(nodes, name); err != nil {
|
|
275
|
-
continue
|
|
276
|
-
}
|
|
277
|
-
hasChild := false
|
|
278
|
-
for _, child := range nodes {
|
|
279
|
-
hasChild = hasChild || child.parent == name
|
|
280
|
-
}
|
|
281
|
-
if !hasChild {
|
|
282
|
-
tips = append(tips, name)
|
|
283
|
-
}
|
|
343
|
+
slug, err = frontierRecoverSource(nodes)
|
|
344
|
+
if err != nil {
|
|
345
|
+
return nil, err
|
|
284
346
|
}
|
|
285
|
-
if
|
|
286
|
-
return
|
|
347
|
+
if slug == "" {
|
|
348
|
+
return []string{"frontier: none"}, nil
|
|
287
349
|
}
|
|
288
|
-
slug = tips[0]
|
|
289
350
|
}
|
|
290
351
|
source := nodes[slug]
|
|
291
352
|
if source == nil {
|
|
@@ -429,7 +490,7 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
429
490
|
}
|
|
430
491
|
if mode && action == "prepare" {
|
|
431
492
|
if cmd, ok := planningCursorCommand(reason); ok {
|
|
432
|
-
concurrent = append(concurrent, cmd)
|
|
493
|
+
concurrent = append(concurrent, commandWithWorkspace(cmd, name))
|
|
433
494
|
}
|
|
434
495
|
}
|
|
435
496
|
lines = append(lines, fmt.Sprintf("frontier-workspace: %s location=%s action=%s reason=%s", name, n.location, action, reason))
|
|
@@ -625,6 +686,20 @@ func agentOwnedPlanningCursor(n *frontierWorkspace) bool {
|
|
|
625
686
|
return preparationPhase(workflow.ForAction(n.next).Verb)
|
|
626
687
|
}
|
|
627
688
|
|
|
689
|
+
// commandWithWorkspace names the workspace on a phase command that omitted it.
|
|
690
|
+
// `/rite-vet` cannot be launched; `/rite-vet <slug>` can.
|
|
691
|
+
func commandWithWorkspace(cmd, slug string) string {
|
|
692
|
+
if slug == "" {
|
|
693
|
+
return cmd
|
|
694
|
+
}
|
|
695
|
+
for _, field := range strings.Fields(cmd) {
|
|
696
|
+
if field == slug {
|
|
697
|
+
return cmd
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
return cmd + " " + slug
|
|
701
|
+
}
|
|
702
|
+
|
|
628
703
|
func planningCursorCommand(reason string) (string, bool) {
|
|
629
704
|
const prefix = "native internal phase cursor: "
|
|
630
705
|
if !strings.HasPrefix(reason, prefix) {
|
|
@@ -740,10 +815,10 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
|
|
|
740
815
|
if frontierSpecTarget(n) != "" {
|
|
741
816
|
return "complete", "native next Spec cursor recorded", nil
|
|
742
817
|
}
|
|
743
|
-
if
|
|
818
|
+
if invoke, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
|
|
744
819
|
return "", "", err
|
|
745
820
|
} else if internal && (n.status == "running" || n.agentOwnedPlanning) {
|
|
746
|
-
return "prepare", "native internal phase cursor: " + n.
|
|
821
|
+
return "prepare", "native internal phase cursor: " + commandWithWorkspace(invoke, n.slug), nil
|
|
747
822
|
}
|
|
748
823
|
if command := workflow.ForAction(n.next); command.Verb == "ship" {
|
|
749
824
|
fields := strings.Fields(n.next)
|
|
@@ -60,12 +60,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
60
60
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
61
61
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
62
62
|
unavailable leaf calls.
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
67
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
68
|
-
acknowledgement.
|
|
63
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
64
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
65
|
+
require tools, not acknowledgements.
|
|
69
66
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
70
67
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
71
68
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -84,23 +81,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
84
81
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
85
82
|
next sequence continuation through Vet in a second session, then stop.
|
|
86
83
|
|
|
87
|
-
1. **Orient and parse.**
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
85
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
86
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
87
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
88
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
89
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
90
|
+
Read existing `state.md` cursor.
|
|
91
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
92
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
93
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
90
94
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
91
|
-
Apply
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
96
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
97
|
+
Mode identifies controller, grants no authority. Run
|
|
98
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
95
99
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
96
|
-
Reconcile blocked/terminal cursors
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
101
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
102
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
103
|
+
`test-plan.md`/evidence action, never chat.
|
|
100
104
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
**Completion:** arguments/source
|
|
105
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
106
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
107
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
104
108
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
105
109
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
106
110
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -147,15 +151,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
147
151
|
|
|
148
152
|
## Reply and resume
|
|
149
153
|
|
|
150
|
-
HITL Build returns after one slice; Autocomplete
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
157
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
158
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
154
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
155
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
156
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
157
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
158
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
159
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
159
160
|
|
|
160
161
|
```text
|
|
161
162
|
Autocomplete: <slug>
|
|
@@ -44,9 +44,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
44
44
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
45
45
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
46
46
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
47
|
-
Resolve ranked
|
|
48
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
49
|
-
|
|
47
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
48
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
49
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
50
50
|
|
|
51
51
|
## Early preparation admission
|
|
52
52
|
|
|
@@ -33,10 +33,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
33
33
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
34
34
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
35
35
|
when no question cursor is set, no blocking or escalating question is open,
|
|
36
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
37
|
-
|
|
38
|
-
`frontier-concurrent:`
|
|
39
|
-
|
|
36
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
37
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
38
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
39
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
40
40
|
|
|
41
41
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
42
42
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -62,12 +62,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
62
62
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
63
63
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
64
64
|
unavailable leaf calls.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
69
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
70
|
-
acknowledgement.
|
|
65
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
66
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
67
|
+
require tools, not acknowledgements.
|
|
71
68
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
72
69
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
73
70
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -86,23 +83,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
86
83
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
87
84
|
next sequence continuation through Vet in a second session, then stop.
|
|
88
85
|
|
|
89
|
-
1. **Orient and parse.**
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
87
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
88
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
89
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
90
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
91
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
92
|
+
Read existing `state.md` cursor.
|
|
93
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
94
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
95
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
92
96
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
93
|
-
Apply
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
98
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
99
|
+
Mode identifies controller, grants no authority. Run
|
|
100
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
97
101
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
|
-
Reconcile blocked/terminal cursors
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
103
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
104
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
105
|
+
`test-plan.md`/evidence action, never chat.
|
|
102
106
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Completion:** arguments/source
|
|
107
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
108
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
109
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
106
110
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
107
111
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
108
112
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -149,15 +153,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
149
153
|
|
|
150
154
|
## Reply and resume
|
|
151
155
|
|
|
152
|
-
HITL Build returns after one slice; Autocomplete
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
159
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
160
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
156
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
157
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
158
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
159
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
160
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
161
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
161
162
|
|
|
162
163
|
```text
|
|
163
164
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -62,12 +62,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
62
62
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
63
63
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
64
64
|
unavailable leaf calls.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
69
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
70
|
-
acknowledgement.
|
|
65
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
66
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
67
|
+
require tools, not acknowledgements.
|
|
71
68
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
72
69
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
73
70
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -86,23 +83,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
86
83
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
87
84
|
next sequence continuation through Vet in a second session, then stop.
|
|
88
85
|
|
|
89
|
-
1. **Orient and parse.**
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
87
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
88
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
89
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
90
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
91
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
92
|
+
Read existing `state.md` cursor.
|
|
93
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
94
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
95
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
92
96
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
93
|
-
Apply
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
98
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
99
|
+
Mode identifies controller, grants no authority. Run
|
|
100
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
97
101
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
|
-
Reconcile blocked/terminal cursors
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
103
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
104
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
105
|
+
`test-plan.md`/evidence action, never chat.
|
|
102
106
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Completion:** arguments/source
|
|
107
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
108
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
109
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
106
110
|
2. **Specify and clarify.** Run `devrites-interview`, `$rite-spec`, and
|
|
107
111
|
`$rite-clarify` as one window. `open` material coverage never arms
|
|
108
112
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -149,15 +153,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
149
153
|
|
|
150
154
|
## Reply and resume
|
|
151
155
|
|
|
152
|
-
HITL Build returns after one slice; Autocomplete
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
159
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
160
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
156
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
157
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
158
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
159
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
160
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
161
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
161
162
|
|
|
162
163
|
```text
|
|
163
164
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -61,12 +61,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
61
61
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
62
62
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
63
63
|
unavailable leaf calls.
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
68
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
69
|
-
acknowledgement.
|
|
64
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
65
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
66
|
+
require tools, not acknowledgements.
|
|
70
67
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
71
68
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
72
69
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -85,23 +82,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
85
82
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
86
83
|
next sequence continuation through Vet in a second session, then stop.
|
|
87
84
|
|
|
88
|
-
1. **Orient and parse.**
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
86
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
87
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
88
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
89
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
90
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
91
|
+
Read existing `state.md` cursor.
|
|
92
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
93
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
94
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
91
95
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
92
|
-
Apply
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
97
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
98
|
+
Mode identifies controller, grants no authority. Run
|
|
99
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
96
100
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
97
|
-
Reconcile blocked/terminal cursors
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
102
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
103
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
104
|
+
`test-plan.md`/evidence action, never chat.
|
|
101
105
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
**Completion:** arguments/source
|
|
106
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
107
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
108
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
105
109
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
106
110
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
107
111
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -148,15 +152,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
148
152
|
|
|
149
153
|
## Reply and resume
|
|
150
154
|
|
|
151
|
-
HITL Build returns after one slice; Autocomplete
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
158
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
159
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
155
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
156
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
157
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
158
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
159
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
160
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
160
161
|
|
|
161
162
|
```text
|
|
162
163
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -62,12 +62,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
62
62
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
63
63
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
64
64
|
unavailable leaf calls.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
69
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
70
|
-
acknowledgement.
|
|
65
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
66
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
67
|
+
require tools, not acknowledgements.
|
|
71
68
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
72
69
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
73
70
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -86,23 +83,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
86
83
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
87
84
|
next sequence continuation through Vet in a second session, then stop.
|
|
88
85
|
|
|
89
|
-
1. **Orient and parse.**
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
87
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
88
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
89
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
90
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
91
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
92
|
+
Read existing `state.md` cursor.
|
|
93
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
94
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
95
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
92
96
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
93
|
-
Apply
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
98
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
99
|
+
Mode identifies controller, grants no authority. Run
|
|
100
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
97
101
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
|
-
Reconcile blocked/terminal cursors
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
103
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
104
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
105
|
+
`test-plan.md`/evidence action, never chat.
|
|
102
106
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Completion:** arguments/source
|
|
107
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
108
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
109
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
106
110
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
107
111
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
108
112
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -149,15 +153,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
149
153
|
|
|
150
154
|
## Reply and resume
|
|
151
155
|
|
|
152
|
-
HITL Build returns after one slice; Autocomplete
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
159
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
160
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
156
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
157
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
158
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
159
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
160
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
161
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
161
162
|
|
|
162
163
|
```text
|
|
163
164
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -62,12 +62,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
62
62
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
63
63
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
64
64
|
unavailable leaf calls.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
69
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
70
|
-
acknowledgement.
|
|
65
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
66
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
67
|
+
require tools, not acknowledgements.
|
|
71
68
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
72
69
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
73
70
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -86,23 +83,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
86
83
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
87
84
|
next sequence continuation through Vet in a second session, then stop.
|
|
88
85
|
|
|
89
|
-
1. **Orient and parse.**
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
1. **Orient and parse.** Bind [source](skill://devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
87
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
88
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
89
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
90
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
91
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
92
|
+
Read existing `state.md` cursor.
|
|
93
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
94
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
95
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
92
96
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
93
|
-
Apply
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
98
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
99
|
+
Mode identifies controller, grants no authority. Run
|
|
100
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
97
101
|
[global pass](skill://devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
|
-
Reconcile blocked/terminal cursors
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
103
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
104
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
105
|
+
`test-plan.md`/evidence action, never chat.
|
|
102
106
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Completion:** arguments/source
|
|
107
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
108
|
+
read only its `read_next` per [context hygiene](skill://devrites-lib/reference/standards/context-hygiene.md).
|
|
109
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
106
110
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
107
111
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
108
112
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -149,15 +153,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
149
153
|
|
|
150
154
|
## Reply and resume
|
|
151
155
|
|
|
152
|
-
HITL Build returns after one slice; Autocomplete
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
159
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
160
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
156
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
157
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
158
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
159
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
160
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
161
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
161
162
|
|
|
162
163
|
```text
|
|
163
164
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](skill://rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](skill://devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -62,12 +62,9 @@ executable controller/harness/bundle bytes or a missing writer, read
|
|
|
62
62
|
- Do not stop on `--max-slices`, sentinel `max_slices`, `max_agents`,
|
|
63
63
|
`max_minutes`, or `max_review_queue`. Count failed, malformed, and
|
|
64
64
|
unavailable leaf calls.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
at a recorded stop. A host reminder or rule notice (style rule, advisory) is
|
|
69
|
-
not a stop either: follow it in your next tool call, never in a text-only
|
|
70
|
-
acknowledgement.
|
|
65
|
+
- While waves run or next steps exist, use host tools/wait; text replies kill
|
|
66
|
+
headless sessions/children. End only at recorded stops; reminders/advisories
|
|
67
|
+
require tools, not acknowledgements.
|
|
71
68
|
- Parse flags only from this invocation. `--ship`, `--yolo`, `--max-slices`,
|
|
72
69
|
`--parallel`, `--full`, `--cross-model`, and `--lookahead` activate only as exact standalone
|
|
73
70
|
tokens in `$ARGUMENTS`; examples or earlier messages can never arm them.
|
|
@@ -86,23 +83,30 @@ With `--lookahead` (trigger `lookahead`), follow
|
|
|
86
83
|
[`lookahead.md`](reference/lookahead.md) instead of the steps below: plan the
|
|
87
84
|
next sequence continuation through Vet in a second session, then stop.
|
|
88
85
|
|
|
89
|
-
1. **Orient and parse.**
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
1. **Orient and parse.** Bind [source](../devrites-lib/reference/parallel-workspaces.md#phase-target-binding);
|
|
87
|
+
Keep validated overrides. With no source/override and missing/empty
|
|
88
|
+
`ACTIVE`, run `devrites-engine frontier` without slug first. Use unique
|
|
89
|
+
`frontier-source:` before asking. `frontier: none` without sequence
|
|
90
|
+
evidence permits fresh Spec at step 2; ambiguity/invalidity gates recovery.
|
|
91
|
+
Recovery never changes ACTIVE/flags or binds source from chat/recency.
|
|
92
|
+
Read existing `state.md` cursor.
|
|
93
|
+
Bind source in `devrites-engine`: `handoff <source> --resume`,
|
|
94
|
+
`context <source> --phase autocomplete`, `check continuation <source>`.
|
|
95
|
+
Arguments: idea, `ship_preflight: yes|no`, `max_slices: unlimited`,
|
|
92
96
|
`parallel: N|default`, `profile: standard|full`, `cross_model: yes|no`.
|
|
93
|
-
Apply
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
Apply [AFK contract](reference/loop.md#arm-afk-once) to existing sentinel:
|
|
98
|
+
upsert `mode: autocomplete`; capacity only for explicit `--parallel N`.
|
|
99
|
+
Mode identifies controller, grants no authority. Run
|
|
100
|
+
`devrites-engine frontier <source>` before local recovery; execute
|
|
97
101
|
[global pass](../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
|
-
Reconcile blocked/terminal cursors
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
Reconcile blocked/terminal cursors with retained action evidence/exact fingerprint
|
|
103
|
+
attempts; resume below-cap offline recovery and reopen parked fingerprints.
|
|
104
|
+
Reconstruct missing return cursors only from current phase and approved
|
|
105
|
+
`test-plan.md`/evidence action, never chat.
|
|
102
106
|
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"lifecycle cursor encounters admitted set or resumable journal","action":"invoke classifier; execute returned route internally","return":"saved phase/action; zero intermediate reply"} -->
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Completion:** arguments/source
|
|
107
|
+
On compaction/resume, first run `devrites-engine handoff <source> --resume`;
|
|
108
|
+
read only its `read_next` per [context hygiene](../devrites-lib/reference/standards/context-hygiene.md).
|
|
109
|
+
**Completion:** unambiguous arguments/source; cursor and handles intact.
|
|
106
110
|
2. **Specify and clarify.** Run `devrites-interview`, `/rite-spec`, and
|
|
107
111
|
`/rite-clarify` as one window. `open` material coverage never arms
|
|
108
112
|
AFK. **Completion:** `Decision coverage: CLEAR` is durable.
|
|
@@ -149,15 +153,12 @@ next sequence continuation through Vet in a second session, then stop.
|
|
|
149
153
|
|
|
150
154
|
## Reply and resume
|
|
151
155
|
|
|
152
|
-
HITL Build returns after one slice; Autocomplete
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`devrites-engine check continuation` must print `continuation: clear`
|
|
159
|
-
(`handoff` prints the same lines). `required` means invoke `invoke:` now.
|
|
160
|
-
`stopped` is not a phase token. Print this card only after `clear`:
|
|
156
|
+
HITL Build returns after one slice; Autocomplete chains pending slices, ignoring
|
|
157
|
+
`--max-slices`, and owns backtracking. Context pressure, compaction, and nested
|
|
158
|
+
completion footers never stop it; persist/resume the cursor and keep calling tools.
|
|
159
|
+
Before replying, `devrites-engine check continuation <source>` must print
|
|
160
|
+
`continuation: clear` (`handoff` emits it too); `required` means execute `invoke:`
|
|
161
|
+
now. `stopped` is no phase token. Only after `clear`, print:
|
|
161
162
|
|
|
162
163
|
```text
|
|
163
164
|
Autocomplete: <slug>
|
|
@@ -46,9 +46,9 @@ admission and the global pass below; local readiness is insufficient. Count ever
|
|
|
46
46
|
Explicit activation resets only activation-local counters, not durable recovery.
|
|
47
47
|
Pass resolved `--parallel N` to [Build](../../rite-build/reference/output.md#caller-owned-continuation).
|
|
48
48
|
Legacy or invented execution ceilings never stop this controller; human limits bind.
|
|
49
|
-
Resolve ranked
|
|
50
|
-
a user handoff. Escalating, irreversible-risk, access, unrecommended blocking
|
|
51
|
-
|
|
49
|
+
Resolve ranked picks via `devrites-engine state resolve`, not
|
|
50
|
+
a user handoff. Escalating, irreversible-risk, access, and unrecommended blocking
|
|
51
|
+
picks pause that source only. A Seal GO does not end the run.
|
|
52
52
|
|
|
53
53
|
## Early preparation admission
|
|
54
54
|
|
|
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
|
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
36
|
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
37
37
|
when no question cursor is set, no blocking or escalating question is open,
|
|
38
|
-
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet.
|
|
39
|
-
|
|
40
|
-
`frontier-concurrent:`
|
|
41
|
-
|
|
38
|
+
and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
|
|
39
|
+
Build, question, or blocking hold binds that source only and does not end the run.
|
|
40
|
+
Before any reply, start every `frontier-concurrent:` command and every
|
|
41
|
+
`frontier-picks` writer, at most the cap. Ask only when both are empty.
|
|
42
42
|
|
|
43
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
44
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "7.3.
|
|
3
|
+
"version": "7.3.10",
|
|
4
4
|
"description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, pi, and Devin CLI",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
|