devrites 7.3.6 → 7.3.8
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 +16 -0
- package/README.md +1 -1
- package/engine/internal/lib/continuation.go +4 -0
- package/engine/internal/lib/frontier.go +64 -4
- package/engine/internal/lib/frontier_controller.go +13 -0
- package/engine/internal/lib/frontier_preparation.go +14 -0
- package/engine/internal/lib/regression.go +21 -7
- package/engine/internal/lib/taskgraph.go +2 -2
- package/pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/omp/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- package/pack/generated/pi/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +4 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
- 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.8](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.7...v7.3.8) (2026-11-09)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **devrites:** schedule agent-owned planning cursors together ([#211](https://github.com/ViktorsBaikers/DevRites/issues/211)) ([8553c00](https://github.com/ViktorsBaikers/DevRites/commit/8553c0038ddeb2608608cdc19f133f3f2a1de0e1))
|
|
10
|
+
|
|
11
|
+
## [7.3.7](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.6...v7.3.7) (2026-11-09)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
* **devrites:** count only the owning slice of a build item ([#210](https://github.com/ViktorsBaikers/DevRites/issues/210)) ([b1e4f92](https://github.com/ViktorsBaikers/DevRites/commit/b1e4f92cb5d49d2865b4c0994523e52993b5d133))
|
|
16
|
+
|
|
5
17
|
## [7.3.6](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.5...v7.3.6) (2026-11-06)
|
|
6
18
|
|
|
7
19
|
### Fixed
|
|
@@ -59,6 +71,10 @@ All notable changes to DevRites are documented here. The format follows [Keep a
|
|
|
59
71
|
|
|
60
72
|
### Fixed
|
|
61
73
|
|
|
74
|
+
- Mark only the slice a checked state.md item names first as built; a later
|
|
75
|
+
`SLICE-###` reference in the same line no longer inflates regression, next, or
|
|
76
|
+
parallel admission. Baselines written under the old all-token parsing re-ratchet
|
|
77
|
+
once with `check regression <slug> --update`.
|
|
62
78
|
- Guard Autocomplete's early phase context and dispatch, not only Build writers,
|
|
63
79
|
against unstarted successor preparation. Keep normalization research reachable
|
|
64
80
|
and bound successor preparation before its first wave without recursively
|
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.8`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.8): 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
|
|
|
@@ -61,6 +61,10 @@ func RunCheckContinuation(root string, args []string, stdout, stderr io.Writer)
|
|
|
61
61
|
verdict = continuationVerdict{Required: true, Invoke: "/rite-autocomplete", Source: slug, Reason: "global frontier requires native preparation, authority review, or selection; no Ship approval"}
|
|
62
62
|
} else if mode && frontierSourcePreparationWait(slug, frontier) {
|
|
63
63
|
verdict = continuationVerdict{Reason: frontierInheritedPreparationWait}
|
|
64
|
+
} else if mode && !verdict.Required {
|
|
65
|
+
if invoke, ok := frontierSourcePlanningCursor(slug, frontier); ok {
|
|
66
|
+
verdict = continuationVerdict{Required: true, Invoke: invoke, Source: slug, Reason: "agent-owned planning cursor; launch every frontier-concurrent command before replying"}
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
writeContinuation(stdout, verdict)
|
|
@@ -22,7 +22,7 @@ type frontierWorkspace struct {
|
|
|
22
22
|
slug, dir, location, parent, phase, status, next, question string
|
|
23
23
|
position, remaining int
|
|
24
24
|
hasPosition, hasRemaining bool
|
|
25
|
-
selectionHeld
|
|
25
|
+
selectionHeld, agentOwnedPlanning bool
|
|
26
26
|
problem error
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -374,6 +374,7 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
374
374
|
}
|
|
375
375
|
deferred := map[string]string{}
|
|
376
376
|
prepared := map[string]bool{}
|
|
377
|
+
var concurrent []string
|
|
377
378
|
var preparatory map[string]bool
|
|
378
379
|
var preparationAccounts map[string]*dispatchFile
|
|
379
380
|
if mode && capN > 1 {
|
|
@@ -393,7 +394,7 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
393
394
|
_, invalid := frontierChain(nodes, name)
|
|
394
395
|
if invalid != nil {
|
|
395
396
|
action, reason, blocked = "repair", invalid.Error(), true
|
|
396
|
-
} else if gateReason, gateErr :=
|
|
397
|
+
} else if gateReason, gateErr := frontierSchedulingHold(n, mode); gateErr != nil {
|
|
397
398
|
action, reason, held, blocked = "repair", gateErr.Error(), true, true
|
|
398
399
|
} else if gateReason != "" {
|
|
399
400
|
action, reason, held, blocked = "wait", gateReason, true, true
|
|
@@ -426,6 +427,11 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
426
427
|
action = "wait"
|
|
427
428
|
}
|
|
428
429
|
}
|
|
430
|
+
if mode && action == "prepare" {
|
|
431
|
+
if cmd, ok := planningCursorCommand(reason); ok {
|
|
432
|
+
concurrent = append(concurrent, cmd)
|
|
433
|
+
}
|
|
434
|
+
}
|
|
429
435
|
lines = append(lines, fmt.Sprintf("frontier-workspace: %s location=%s action=%s reason=%s", name, n.location, action, reason))
|
|
430
436
|
if preparatory[name] {
|
|
431
437
|
continue
|
|
@@ -518,6 +524,15 @@ func FrontierLines(root, slug string) ([]string, error) {
|
|
|
518
524
|
}
|
|
519
525
|
}
|
|
520
526
|
}
|
|
527
|
+
if mode && capN > 0 && len(concurrent) > 0 {
|
|
528
|
+
limit := capN
|
|
529
|
+
if limit > len(concurrent) {
|
|
530
|
+
limit = len(concurrent)
|
|
531
|
+
}
|
|
532
|
+
for _, cmd := range concurrent[:limit] {
|
|
533
|
+
lines = append(lines, "frontier-concurrent: "+cmd)
|
|
534
|
+
}
|
|
535
|
+
}
|
|
521
536
|
verdict := "clear"
|
|
522
537
|
if blocked {
|
|
523
538
|
verdict = "blocked"
|
|
@@ -577,6 +592,51 @@ func frontierPolicy(root string) (bool, int, error) {
|
|
|
577
592
|
return allow, capN, nil
|
|
578
593
|
}
|
|
579
594
|
|
|
595
|
+
func frontierSchedulingHold(n *frontierWorkspace, mode bool) (string, error) {
|
|
596
|
+
if mode && agentOwnedPlanningCursor(n) {
|
|
597
|
+
if n.question != "" {
|
|
598
|
+
return "human/blocked cursor; retain native gate", nil
|
|
599
|
+
}
|
|
600
|
+
questions, err := readBoundedRegularFile(filepath.Join(n.dir, "questions.md"), workspaceArtifactLimit)
|
|
601
|
+
if err != nil && !os.IsNotExist(err) {
|
|
602
|
+
return "", err
|
|
603
|
+
}
|
|
604
|
+
if err == nil {
|
|
605
|
+
for _, kind := range gate.OpenBlockingQuestionGates(questions) {
|
|
606
|
+
if kind == "blocking" || kind == "escalating" {
|
|
607
|
+
return "open " + kind + " question; retain native gate", nil
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
n.agentOwnedPlanning = true
|
|
612
|
+
return "", nil
|
|
613
|
+
}
|
|
614
|
+
return frontierQuestionHold(n)
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
func agentOwnedPlanningCursor(n *frontierWorkspace) bool {
|
|
618
|
+
if n == nil || (n.status != "blocked" && n.status != "awaiting_human") {
|
|
619
|
+
return false
|
|
620
|
+
}
|
|
621
|
+
_, internal, err := internalPhaseEdge(n.next, n.slug)
|
|
622
|
+
if err != nil || !internal {
|
|
623
|
+
return false
|
|
624
|
+
}
|
|
625
|
+
return preparationPhase(workflow.ForAction(n.next).Verb)
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
func planningCursorCommand(reason string) (string, bool) {
|
|
629
|
+
const prefix = "native internal phase cursor: "
|
|
630
|
+
if !strings.HasPrefix(reason, prefix) {
|
|
631
|
+
return "", false
|
|
632
|
+
}
|
|
633
|
+
cmd := strings.TrimSpace(strings.TrimPrefix(reason, prefix))
|
|
634
|
+
if cmd == "" || strings.ContainsAny(cmd, "\n\r") {
|
|
635
|
+
return "", false
|
|
636
|
+
}
|
|
637
|
+
return cmd, true
|
|
638
|
+
}
|
|
639
|
+
|
|
580
640
|
func frontierQuestionHold(n *frontierWorkspace) (string, error) {
|
|
581
641
|
if n.status == "awaiting_human" || n.status == "blocked" || n.question != "" {
|
|
582
642
|
return "human/blocked cursor; retain native gate", nil
|
|
@@ -601,7 +661,7 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
|
|
|
601
661
|
if _, err := devritespaths.WorkspaceOverrideChecked(root, n.slug); err != nil {
|
|
602
662
|
return "blocked", "DEVRITES_WORKSPACE scope retained; unset override before global admission", nil
|
|
603
663
|
}
|
|
604
|
-
if n.status != "running" && n.status != "ready" {
|
|
664
|
+
if n.status != "running" && n.status != "ready" && !n.agentOwnedPlanning {
|
|
605
665
|
return "blocked", "status lacks an actionable native cursor; normalize state without inventing authority", nil
|
|
606
666
|
}
|
|
607
667
|
if dispatch == nil {
|
|
@@ -682,7 +742,7 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
|
|
|
682
742
|
}
|
|
683
743
|
if _, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
|
|
684
744
|
return "", "", err
|
|
685
|
-
} else if internal && n.status == "running" {
|
|
745
|
+
} else if internal && (n.status == "running" || n.agentOwnedPlanning) {
|
|
686
746
|
return "prepare", "native internal phase cursor: " + n.next, nil
|
|
687
747
|
}
|
|
688
748
|
if command := workflow.ForAction(n.next); command.Verb == "ship" {
|
|
@@ -618,6 +618,19 @@ func autocompleteWriterAdmission(root, source string, wave *dispatchWave, curren
|
|
|
618
618
|
|
|
619
619
|
const frontierInheritedPreparationWait = "preparatory descendant; continue immediate-parent preparation before this native cursor"
|
|
620
620
|
|
|
621
|
+
func frontierSourcePlanningCursor(source string, lines []string) (string, bool) {
|
|
622
|
+
prefix := "frontier-workspace: " + source + " location=live action=prepare reason=native internal phase cursor: "
|
|
623
|
+
for _, line := range lines {
|
|
624
|
+
if strings.HasPrefix(line, prefix) {
|
|
625
|
+
cmd := strings.TrimSpace(strings.TrimPrefix(line, prefix))
|
|
626
|
+
if cmd != "" {
|
|
627
|
+
return cmd, true
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
return "", false
|
|
632
|
+
}
|
|
633
|
+
|
|
621
634
|
func frontierSourcePreparationWait(source string, lines []string) bool {
|
|
622
635
|
wait := "frontier-workspace: " + source + " location=live action=wait reason=" + frontierInheritedPreparationWait
|
|
623
636
|
for _, line := range lines {
|
|
@@ -57,6 +57,15 @@ func (p preparationPurpose) validate(phase string, roles []string, context bool)
|
|
|
57
57
|
return nil
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
func ordinaryAdmittedPhase(phase string) bool {
|
|
61
|
+
switch phase {
|
|
62
|
+
case "temper", "define", "plan", "vet", "build", "prove", "polish", "review", "seal", "ship", "done":
|
|
63
|
+
return true
|
|
64
|
+
default:
|
|
65
|
+
return false
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
60
69
|
func earlyPreparationPhase(phase string) bool {
|
|
61
70
|
phase = strings.ToLower(phase)
|
|
62
71
|
return phase == "temper" || phase == "define" || phase == "plan" || phase == "vet"
|
|
@@ -199,6 +208,11 @@ func frontierPreparatoryOnly(root string, n *frontierWorkspace, nodes map[string
|
|
|
199
208
|
return false, account, nil
|
|
200
209
|
}
|
|
201
210
|
if account == nil {
|
|
211
|
+
// A recorded Temper-or-later phase is ordinary work. Missing dispatch
|
|
212
|
+
// waves do not keep every later sibling preparatory-only.
|
|
213
|
+
if ordinaryAdmittedPhase(n.phase) {
|
|
214
|
+
return false, nil, nil
|
|
215
|
+
}
|
|
202
216
|
return true, nil, nil
|
|
203
217
|
}
|
|
204
218
|
for _, wave := range account.Waves {
|
|
@@ -59,6 +59,18 @@ var (
|
|
|
59
59
|
regressH2Re = regexp.MustCompile(`(?m)^## `)
|
|
60
60
|
)
|
|
61
61
|
|
|
62
|
+
// ledgerOwner returns the slice digits a checked state.md item owns: only its
|
|
63
|
+
// first slice token (documented `SLICE-003` or `Slice 3`). Later tokens on the
|
|
64
|
+
// same line are context — a blocked dependent, an INV reference, a NOT_RUN
|
|
65
|
+
// note — and do not make those slices built.
|
|
66
|
+
func ledgerOwner(item string) (string, bool) {
|
|
67
|
+
m := regressSliceIDRe.FindStringSubmatch(item)
|
|
68
|
+
if m == nil {
|
|
69
|
+
return "", false
|
|
70
|
+
}
|
|
71
|
+
return m[1], true
|
|
72
|
+
}
|
|
73
|
+
|
|
62
74
|
// progressFingerprint is the structural state one baseline records. Sets are
|
|
63
75
|
// sorted for deterministic output and diffing.
|
|
64
76
|
type progressFingerprint struct {
|
|
@@ -180,13 +192,15 @@ func fingerprintWorkspace(root, slug, workspace string) (progressFingerprint, er
|
|
|
180
192
|
note("state.md", err)
|
|
181
193
|
if err == nil {
|
|
182
194
|
for _, item := range regressBuiltRe.FindAllString(masked, -1) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
digits, ok := ledgerOwner(item)
|
|
196
|
+
if !ok {
|
|
197
|
+
continue
|
|
198
|
+
}
|
|
199
|
+
// `SLICE-001` and `Slice 1` name the same slice.
|
|
200
|
+
n, _ := strconv.Atoi(digits)
|
|
201
|
+
id := fmt.Sprintf("SLICE-%03d", n)
|
|
202
|
+
if !slices.Contains(fp.DoneSlices, id) {
|
|
203
|
+
fp.DoneSlices = append(fp.DoneSlices, id)
|
|
190
204
|
}
|
|
191
205
|
}
|
|
192
206
|
}
|
|
@@ -235,8 +235,8 @@ func builtSlicesFrom(read func(string) ([]byte, error)) (map[string]bool, error)
|
|
|
235
235
|
if !builtWordRe.MatchString(item) {
|
|
236
236
|
continue
|
|
237
237
|
}
|
|
238
|
-
|
|
239
|
-
built[strings.TrimLeft(
|
|
238
|
+
if digits, ok := ledgerOwner(item); ok {
|
|
239
|
+
built[strings.TrimLeft(digits, "0")] = true
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
extra, err := evidenceBuiltFrom(read)
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -97,6 +97,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
97
97
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
98
98
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
99
99
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
100
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
101
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
102
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
103
|
+
Do not finish one listed source and reply.
|
|
100
104
|
|
|
101
105
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
102
106
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -31,6 +31,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
31
31
|
work takes priority over local Build; local-only picks do not recurse through
|
|
32
32
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
33
33
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
34
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
37
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
38
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
39
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
34
40
|
|
|
35
41
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
36
42
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
44
|
deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](skill://devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](skill://devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
44
|
deferral under the [global pass](skill://devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
@@ -113,6 +113,12 @@ return cursors and native handles: one controller, not another phase or queue.
|
|
|
113
113
|
obligation. Placeholders, reports and unopened waves prove nothing.
|
|
114
114
|
Opt-out, zero opening budget or source human/question holds prevent new
|
|
115
115
|
openings, not existing child preparation or independent work.
|
|
116
|
+
In autocomplete mode, `blocked` or `awaiting_human` with no question cursor
|
|
117
|
+
and no open blocking or escalating question is existing work when
|
|
118
|
+
`next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A recorded
|
|
119
|
+
Temper-or-later phase is ordinary work, so later siblings stay visible.
|
|
120
|
+
Launch every `frontier-concurrent:` command and every `frontier-picks`
|
|
121
|
+
writer in the same turn, up to the cap, picks first.
|
|
116
122
|
If preparation cannot start, retain `frontier-blocked: <successor> — <constraint>`
|
|
117
123
|
in source `evidence.md`. `frontier-blocked: sequence — <constraint>` may defer
|
|
118
124
|
unresolved historical normalization for valid independent local work. Each row
|
|
@@ -99,6 +99,10 @@ At phase entry, before recovery/waits, execute the
|
|
|
99
99
|
[global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
|
|
100
100
|
Consume persisted return frontiers; rerun after landing/artifact/capacity changes.
|
|
101
101
|
Execute authorized routes, retaining handles, cursors and protected proof windows.
|
|
102
|
+
When frontier prints `frontier-concurrent:`, launch every listed command and every
|
|
103
|
+
`frontier-picks` writer in that same turn, each on its own source. The cap bounds
|
|
104
|
+
the turn: start picks first, then fill remaining slots from `frontier-concurrent`.
|
|
105
|
+
Do not finish one listed source and reply.
|
|
102
106
|
|
|
103
107
|
Check [stop-conditions.md](stop-conditions.md) before advancing. Discard stale
|
|
104
108
|
pass evidence after source edits. Re-read the selected source before each phase per [phase target binding](../../devrites-lib/reference/parallel-workspaces.md#phase-target-binding). On a cold resume or
|
|
@@ -33,6 +33,12 @@ For AFK `status=running`, consume an internal phase edge. In
|
|
|
33
33
|
work takes priority over local Build; local-only picks do not recurse through
|
|
34
34
|
Autocomplete. Source human/Ship holds remain binding, while independent
|
|
35
35
|
authorized planning can continue. `clear` is reply permission, not Ship approval.
|
|
36
|
+
In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
|
|
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. Ship, Build,
|
|
39
|
+
a question cursor, and an open blocking or escalating question still wait.
|
|
40
|
+
`frontier-concurrent:` lists at most the cap of those cursors. Before any reply,
|
|
41
|
+
start every listed command and every `frontier-picks` writer in the same turn.
|
|
36
42
|
|
|
37
43
|
A preparation refusal routes native work or a narrow disclosed scheduling
|
|
38
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.8",
|
|
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",
|