devrites 7.3.7 → 7.3.9

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 (29) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/engine/internal/lib/continuation.go +36 -3
  4. package/engine/internal/lib/frontier.go +80 -6
  5. package/engine/internal/lib/frontier_controller.go +13 -0
  6. package/engine/internal/lib/frontier_preparation.go +14 -0
  7. package/engine/internal/lib/next.go +1 -0
  8. package/pack/.claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  9. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -3
  10. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  11. package/pack/generated/claude/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  12. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -3
  13. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  14. package/pack/generated/codex/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  15. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -3
  16. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  17. package/pack/generated/devin/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  18. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -3
  19. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  20. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  21. package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +7 -3
  22. package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  23. package/pack/generated/omp/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  24. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -3
  25. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  26. package/pack/generated/pi/skills/devrites-lib/reference/parallel-workspaces.md +6 -0
  27. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -3
  28. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +6 -0
  29. 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.9](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.8...v7.3.9) (2026-11-10)
6
+
7
+ ### Fixed
8
+
9
+ * **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))
10
+
11
+ ## [7.3.8](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.7...v7.3.8) (2026-11-09)
12
+
13
+ ### Fixed
14
+
15
+ * **devrites:** schedule agent-owned planning cursors together ([#211](https://github.com/ViktorsBaikers/DevRites/issues/211)) ([8553c00](https://github.com/ViktorsBaikers/DevRites/commit/8553c0038ddeb2608608cdc19f133f3f2a1de0e1))
16
+
5
17
  ## [7.3.7](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.6...v7.3.7) (2026-11-09)
6
18
 
7
19
  ### 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.9`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.9): 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
 
@@ -58,18 +58,50 @@ 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
- verdict = continuationVerdict{Required: true, Invoke: "/rite-autocomplete", Source: slug, Reason: "global frontier requires native preparation, authority review, or selection; no Ship approval"}
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}
68
+ } else if mode && !verdict.Required {
69
+ if invoke, ok := frontierSourcePlanningCursor(slug, frontier); ok {
70
+ verdict = continuationVerdict{Required: true, Invoke: invoke, Source: slug, Reason: "agent-owned planning cursor; launch every frontier-concurrent command before replying"}
71
+ }
64
72
  }
65
73
  }
66
- writeContinuation(stdout, verdict)
74
+ writeContinuation(stdout, verdict, frontier)
67
75
  for _, line := range frontier {
68
76
  fmt.Fprintln(stdout, line)
69
77
  }
70
78
  return 0
71
79
  }
72
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
+
73
105
  func classifyContinuation(root, slug string) (continuationVerdict, error) {
74
106
  featureDir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
75
107
  if err != nil {
@@ -242,11 +274,12 @@ func continuationArguments(command workflow.Command, args []string, slug string)
242
274
  return badArgs()
243
275
  }
244
276
 
245
- func writeContinuation(stdout io.Writer, verdict continuationVerdict) {
277
+ func writeContinuation(stdout io.Writer, verdict continuationVerdict, frontier []string) {
246
278
  if verdict.Required {
247
279
  fmt.Fprintln(stdout, "continuation: required")
248
280
  fmt.Fprintf(stdout, "invoke: %s\n", verdict.Invoke)
249
281
  fmt.Fprintf(stdout, "source: %s\n", verdict.Source)
282
+ writeFrontierBatch(stdout, frontier)
250
283
  } else {
251
284
  fmt.Fprintln(stdout, "continuation: clear")
252
285
  }
@@ -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, commandWithWorkspace(cmd, name))
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,65 @@ 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
+ // commandWithWorkspace names the workspace on a phase command that omitted it.
629
+ // `/rite-vet` cannot be launched; `/rite-vet <slug>` can.
630
+ func commandWithWorkspace(cmd, slug string) string {
631
+ if slug == "" {
632
+ return cmd
633
+ }
634
+ for _, field := range strings.Fields(cmd) {
635
+ if field == slug {
636
+ return cmd
637
+ }
638
+ }
639
+ return cmd + " " + slug
640
+ }
641
+
642
+ func planningCursorCommand(reason string) (string, bool) {
643
+ const prefix = "native internal phase cursor: "
644
+ if !strings.HasPrefix(reason, prefix) {
645
+ return "", false
646
+ }
647
+ cmd := strings.TrimSpace(strings.TrimPrefix(reason, prefix))
648
+ if cmd == "" || strings.ContainsAny(cmd, "\n\r") {
649
+ return "", false
650
+ }
651
+ return cmd, true
652
+ }
653
+
580
654
  func frontierQuestionHold(n *frontierWorkspace) (string, error) {
581
655
  if n.status == "awaiting_human" || n.status == "blocked" || n.question != "" {
582
656
  return "human/blocked cursor; retain native gate", nil
@@ -601,7 +675,7 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
601
675
  if _, err := devritespaths.WorkspaceOverrideChecked(root, n.slug); err != nil {
602
676
  return "blocked", "DEVRITES_WORKSPACE scope retained; unset override before global admission", nil
603
677
  }
604
- if n.status != "running" && n.status != "ready" {
678
+ if n.status != "running" && n.status != "ready" && !n.agentOwnedPlanning {
605
679
  return "blocked", "status lacks an actionable native cursor; normalize state without inventing authority", nil
606
680
  }
607
681
  if dispatch == nil {
@@ -680,10 +754,10 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
680
754
  if frontierSpecTarget(n) != "" {
681
755
  return "complete", "native next Spec cursor recorded", nil
682
756
  }
683
- if _, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
757
+ if invoke, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
684
758
  return "", "", err
685
- } else if internal && n.status == "running" {
686
- return "prepare", "native internal phase cursor: " + n.next, nil
759
+ } else if internal && (n.status == "running" || n.agentOwnedPlanning) {
760
+ return "prepare", "native internal phase cursor: " + commandWithWorkspace(invoke, n.slug), nil
687
761
  }
688
762
  if command := workflow.ForAction(n.next); command.Verb == "ship" {
689
763
  fields := strings.Fields(n.next)
@@ -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 {
@@ -88,6 +88,7 @@ func RunNext(root string, args []string, stdout, stderr io.Writer) int {
88
88
  return 2
89
89
  }
90
90
  if mode && frontierGlobalPriority(slug, lines) {
91
+ writeFrontierBatch(stdout, lines)
91
92
  fmt.Fprintln(stdout, "next-command: /rite-autocomplete")
92
93
  return exit
93
94
  }
@@ -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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
48
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
49
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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
@@ -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 validating/blocking picks via `devrites-engine state resolve`, not
50
- a user handoff. Escalating, irreversible-risk, access, unrecommended blocking picks
51
- and Seal judgment (`slice: seal`) still pause.
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
 
@@ -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. 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.
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.9",
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",