devrites 7.3.8 → 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.
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.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
+
5
11
  ## [7.3.8](https://github.com/ViktorsBaikers/DevRites/compare/v7.3.7...v7.3.8) (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.8`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.3.8): 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,7 +58,11 @@ func RunCheckContinuation(root string, args []string, stdout, stderr io.Writer)
58
58
  return 2
59
59
  }
60
60
  if mode && frontierGlobalPriority(slug, frontier) || !mode && !verdict.Required && len(frontier) > 0 && frontier[0] == "frontier: actionable" {
61
- 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}
64
68
  } else if mode && !verdict.Required {
@@ -67,13 +71,37 @@ func RunCheckContinuation(root string, args []string, stdout, stderr io.Writer)
67
71
  }
68
72
  }
69
73
  }
70
- writeContinuation(stdout, verdict)
74
+ writeContinuation(stdout, verdict, frontier)
71
75
  for _, line := range frontier {
72
76
  fmt.Fprintln(stdout, line)
73
77
  }
74
78
  return 0
75
79
  }
76
80
 
81
+ // frontierHasBatch reports a capped same-turn batch: planning commands and/or
82
+ // admitted slice writers. The controller invoke stays /rite-autocomplete.
83
+ func frontierHasBatch(lines []string) bool {
84
+ for _, line := range lines {
85
+ if strings.HasPrefix(line, "frontier-concurrent: ") || strings.HasPrefix(line, "frontier-picks: ") {
86
+ return true
87
+ }
88
+ }
89
+ return false
90
+ }
91
+
92
+ func writeFrontierBatch(stdout io.Writer, lines []string) {
93
+ for _, line := range lines {
94
+ if cmd, ok := strings.CutPrefix(line, "frontier-concurrent: "); ok && cmd != "" {
95
+ fmt.Fprintf(stdout, "launch: %s\n", cmd)
96
+ }
97
+ }
98
+ for _, line := range lines {
99
+ if picks, ok := strings.CutPrefix(line, "frontier-picks: "); ok && picks != "" {
100
+ fmt.Fprintf(stdout, "picks: %s\n", picks)
101
+ }
102
+ }
103
+ }
104
+
77
105
  func classifyContinuation(root, slug string) (continuationVerdict, error) {
78
106
  featureDir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
79
107
  if err != nil {
@@ -246,11 +274,12 @@ func continuationArguments(command workflow.Command, args []string, slug string)
246
274
  return badArgs()
247
275
  }
248
276
 
249
- func writeContinuation(stdout io.Writer, verdict continuationVerdict) {
277
+ func writeContinuation(stdout io.Writer, verdict continuationVerdict, frontier []string) {
250
278
  if verdict.Required {
251
279
  fmt.Fprintln(stdout, "continuation: required")
252
280
  fmt.Fprintf(stdout, "invoke: %s\n", verdict.Invoke)
253
281
  fmt.Fprintf(stdout, "source: %s\n", verdict.Source)
282
+ writeFrontierBatch(stdout, frontier)
254
283
  } else {
255
284
  fmt.Fprintln(stdout, "continuation: clear")
256
285
  }
@@ -429,7 +429,7 @@ func FrontierLines(root, slug string) ([]string, error) {
429
429
  }
430
430
  if mode && action == "prepare" {
431
431
  if cmd, ok := planningCursorCommand(reason); ok {
432
- concurrent = append(concurrent, cmd)
432
+ concurrent = append(concurrent, commandWithWorkspace(cmd, name))
433
433
  }
434
434
  }
435
435
  lines = append(lines, fmt.Sprintf("frontier-workspace: %s location=%s action=%s reason=%s", name, n.location, action, reason))
@@ -625,6 +625,20 @@ func agentOwnedPlanningCursor(n *frontierWorkspace) bool {
625
625
  return preparationPhase(workflow.ForAction(n.next).Verb)
626
626
  }
627
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
+
628
642
  func planningCursorCommand(reason string) (string, bool) {
629
643
  const prefix = "native internal phase cursor: "
630
644
  if !strings.HasPrefix(reason, prefix) {
@@ -740,10 +754,10 @@ func frontierLocal(root, controller string, n *frontierWorkspace, candidates *[]
740
754
  if frontierSpecTarget(n) != "" {
741
755
  return "complete", "native next Spec cursor recorded", nil
742
756
  }
743
- if _, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
757
+ if invoke, internal, err := internalPhaseEdge(n.next, n.slug); err != nil {
744
758
  return "", "", err
745
759
  } else if internal && (n.status == "running" || n.agentOwnedPlanning) {
746
- return "prepare", "native internal phase cursor: " + n.next, nil
760
+ return "prepare", "native internal phase cursor: " + commandWithWorkspace(invoke, n.slug), nil
747
761
  }
748
762
  if command := workflow.ForAction(n.next); command.Verb == "ship" {
749
763
  fields := strings.Fields(n.next)
@@ -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
  }
@@ -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
 
@@ -33,10 +33,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
33
33
  authorized planning can continue. `clear` is reply permission, not Ship approval.
34
34
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
35
35
  when no question cursor is set, no blocking or escalating question is open,
36
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
36
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
37
+ Build, question, or blocking hold binds that source only and does not end the run.
38
+ Before any reply, start every `frontier-concurrent:` command and every
39
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
40
40
 
41
41
  A preparation refusal routes native work or a narrow disclosed scheduling
42
42
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](skill://devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
@@ -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
 
@@ -35,10 +35,10 @@ Autocomplete. Source human/Ship holds remain binding, while independent
35
35
  authorized planning can continue. `clear` is reply permission, not Ship approval.
36
36
  In autocomplete mode, `blocked` or `awaiting_human` is agent-owned recovery
37
37
  when no question cursor is set, no blocking or escalating question is open,
38
- and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. 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.
38
+ and `next_action` is Spec, Clarify, Temper, Define, Plan, or Vet. A GO, Ship,
39
+ Build, question, or blocking hold binds that source only and does not end the run.
40
+ Before any reply, start every `frontier-concurrent:` command and every
41
+ `frontier-picks` writer, at most the cap. Ask only when both are empty.
42
42
 
43
43
  A preparation refusal routes native work or a narrow disclosed scheduling
44
44
  deferral under the [global pass](../../devrites-lib/reference/parallel-workspaces.md#continuous-global-frontier).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "7.3.8",
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",