devrites 7.3.7 → 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.
Files changed (28) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/engine/internal/lib/continuation.go +4 -0
  4. package/engine/internal/lib/frontier.go +64 -4
  5. package/engine/internal/lib/frontier_controller.go +13 -0
  6. package/engine/internal/lib/frontier_preparation.go +14 -0
  7. package/pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  8. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +4 -0
  9. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  10. package/pack/generated/claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  11. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +4 -0
  12. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  13. package/pack/generated/codex/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  14. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +4 -0
  15. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  16. package/pack/generated/devin/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  17. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +4 -0
  18. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  19. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  20. package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +4 -0
  21. package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  22. package/pack/generated/omp/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  23. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +4 -0
  24. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  25. package/pack/generated/pi/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  26. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +4 -0
  27. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  28. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
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
+
5
11
  ## [7.3.7](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.6...v7.3.7) (2026-11-09)
6
12
 
7
13
  ### Fixed
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.7`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.7): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
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 bool
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 := frontierQuestionHold(n); gateErr != nil {
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 {
@@ -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.7",
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",