devrites 5.7.1 → 5.8.0

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 (74) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +4 -4
  3. package/docs/command-map.md +1 -1
  4. package/docs/engine/commands.md +1 -0
  5. package/docs/orchestration.md +2 -2
  6. package/engine/internal/parallel/cli.go +69 -0
  7. package/engine/internal/parallel/select.go +76 -0
  8. package/engine/internal/parallel/select_test.go +95 -0
  9. package/pack/.claude/settings.json +1 -0
  10. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
  11. package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
  12. package/pack/.claude/skills/rite-autocomplete/SKILL.md +5 -4
  13. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +9 -10
  14. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
  15. package/pack/.claude/skills/rite-build/SKILL.md +2 -1
  16. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -1
  17. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  18. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +17 -13
  19. package/pack/generated/claude/settings.json +1 -0
  20. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
  21. package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
  22. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +5 -4
  23. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +9 -10
  24. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
  25. package/pack/generated/claude/skills/rite-build/SKILL.md +2 -1
  26. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +3 -1
  27. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
  28. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +17 -13
  29. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
  30. package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
  31. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +5 -4
  32. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +9 -10
  33. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
  34. package/pack/generated/codex/skills/rite-build/SKILL.md +2 -1
  35. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +3 -1
  36. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
  37. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +17 -13
  38. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
  39. package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
  40. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +5 -4
  41. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +9 -10
  42. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
  43. package/pack/generated/omp/skills/rite-build/SKILL.md +2 -1
  44. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +3 -1
  45. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
  46. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +17 -13
  47. package/pack/generated/pi/agents/devrites-code-reviewer.md +1 -1
  48. package/pack/generated/pi/agents/devrites-devex-reviewer.md +1 -1
  49. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +1 -1
  50. package/pack/generated/pi/agents/devrites-evidence-scout.md +1 -1
  51. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +1 -1
  52. package/pack/generated/pi/agents/devrites-performance-reviewer.md +1 -1
  53. package/pack/generated/pi/agents/devrites-plan-drafter.md +1 -1
  54. package/pack/generated/pi/agents/devrites-plan-reviewer.md +1 -1
  55. package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
  56. package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
  57. package/pack/generated/pi/agents/devrites-security-auditor.md +1 -1
  58. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +1 -1
  59. package/pack/generated/pi/agents/devrites-slice-wright.md +1 -1
  60. package/pack/generated/pi/agents/devrites-spec-reviewer.md +1 -1
  61. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +1 -1
  62. package/pack/generated/pi/agents/devrites-test-analyst.md +1 -1
  63. package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
  64. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
  65. package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
  66. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +5 -4
  67. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +9 -10
  68. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
  69. package/pack/generated/pi/skills/rite-build/SKILL.md +2 -1
  70. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +3 -1
  71. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
  72. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +17 -13
  73. package/package.json +1 -1
  74. package/scripts/pi-generate.sh +52 -1
@@ -28,18 +28,20 @@ N_eff = min(
28
28
  )
29
29
  ```
30
30
 
31
- Select **greedily in plan order**: walk pending slices whose `depends_on` are built and
32
- add each one while it stays pairwise disjoint with the selected set and the cap is not
33
- reached. Then `N_eff 2` parallel batch; `N_eff = 1` → the serial one-slice cycle;
34
- nothing pending → Prove. A cap that cannot be filled is normal: take fewer.
35
-
36
- **Re-batch automatically.** After integrate + cleanup are green, re-read `state.md`,
37
- the pending slices (`observe slice`), and the updated tree, then recompute: integrated
38
- siblings leave the pending set and free their paths, and satisfied dependencies unlock
39
- new slices. Repeat until no pending slice remains. Under `.devrites/AFK` and
40
- `/rite-autocomplete` the repeat is part of the same run — a new batch is another
41
- `/rite-build --parallel` round inside it, not a new user invocation; HITL stops after
42
- each batch. A batch of three followed by one of four and then two is the expected shape.
31
+ Select **greedily in plan order**: pass every currently dependency-ready pending slice
32
+ (plan order, `Files likely touched`) to
33
+ `devrites-engine parallel select --cap N [--root <dir>]`. `N_eff 2` → parallel batch;
34
+ `N_eff = 1` → one serial round; nothing pending → Prove. A cap that cannot be filled
35
+ is normal: take fewer. Serial is this round's size, not the rest of the run.
36
+
37
+ **Re-batch automatically after every completed round** (parallel integrate+cleanup or
38
+ a serial slice). Re-read `state.md`, pending slices, and the tree, then run
39
+ `parallel select` again: finished work leaves the pending set, and satisfied
40
+ dependencies unlock new slices. Under `.devrites/AFK` and `/rite-autocomplete` the
41
+ repeat is the same run HITL stops after each batch. `--parallel 5` with one eligible
42
+ slice runs that one; when two to five then become eligible, the next round takes that
43
+ many. **Failing case:** the run stays one-by-one after a serial round even though more
44
+ slices are now eligible under the same cap.
43
45
 
44
46
  ## Path-disjoint
45
47
 
@@ -71,7 +73,8 @@ Lease: `batch_id`, `created_at`, `base_sha`, `n`,
71
73
  1. Orient/gate; parse the cap; compute `N_eff` and select the eligible set
72
74
  ([Dynamic selection and re-batching](#dynamic-selection-and-re-batching)) —
73
75
  candidates from `orient` `task_graph.slices` + built list, each candidate's
74
- `Files likely touched` via `observe slice`, disjointness via `check path-disjoint`.
76
+ `Files likely touched` via `observe slice`, then
77
+ `parallel select --cap N` (pairwise disjointness is inside that verb).
75
78
  2. Write lease; freeze `B=HEAD`; `parallel create` worktrees.
76
79
  3. Dispatch ≤10 wrights in parallel (cwd=worktree; allowlist; prove `HEAD==B`).
77
80
  4. Inspect each returned path list, cumulative diff from `B`, transfer identity,
@@ -163,6 +166,7 @@ Repair rejected work in place; never discard/rebuild while budget remains.
163
166
  ## Engine verbs
164
167
 
165
168
  ```text
169
+ devrites-engine parallel select --cap <1-10> [--root <dir>] [<json-file>|-]
166
170
  devrites-engine parallel create --root <repo> --slug <slug> --batch <id> --base <B> --json <file>|-
167
171
  devrites-engine parallel record-green --root <repo> --slug <slug> --slice <id> --commit <sha>
168
172
  devrites-engine parallel integrate --root <repo> --slug <slug> --apply-to-control
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "5.7.1",
3
+ "version": "5.8.0",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, and pi",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
@@ -111,6 +111,57 @@ _pi_map_tools() {
111
111
  printf '%s' "$_out"
112
112
  }
113
113
 
114
+ # pi-subagents treats frontmatter tools: as a strict allowlist, so ambient
115
+ # pi-lean-ctx / pi-lens tools are dropped unless named. Append those names
116
+ # after the mapped builtins (preserve base order). Unknown names are pruned
117
+ # non-fatally by pi-subagents. Read-only agents stay read-only: ctx_edit /
118
+ # ctx_patch only when the base already has edit or write; ctx_shell only
119
+ # when the base already has bash.
120
+ _PI_EXTENSION_NAV_TOOLS="ctx_read, ctx_ls, ctx_find, ctx_grep, ctx_glob, ctx_search, ctx_compose, ctx_callgraph, ctx_tree, symbol_search, project_report, module_report, read_symbol, read_enclosing, lens_diagnostics"
121
+
122
+ _pi_csv_has() {
123
+ case ", ${1}, " in
124
+ *", ${2}, "*) return 0 ;;
125
+ *) return 1 ;;
126
+ esac
127
+ }
128
+
129
+ _pi_csv_append() {
130
+ local _list="$1" _name="$2"
131
+ if [ -z "$_name" ]; then
132
+ printf '%s' "$_list"
133
+ return
134
+ fi
135
+ if [ -z "$_list" ]; then
136
+ printf '%s' "$_name"
137
+ return
138
+ fi
139
+ if _pi_csv_has "$_list" "$_name"; then
140
+ printf '%s' "$_list"
141
+ return
142
+ fi
143
+ printf '%s, %s' "$_list" "$_name"
144
+ }
145
+
146
+ _pi_append_extension_tools() {
147
+ local _base="$1"
148
+ local _out="$_base" _tok
149
+ while IFS= read -r _tok; do
150
+ _tok="${_tok#"${_tok%%[![:space:]]*}"}"
151
+ _tok="${_tok%"${_tok##*[![:space:]]}"}"
152
+ [ -z "$_tok" ] && continue
153
+ _out="$(_pi_csv_append "$_out" "$_tok")"
154
+ done < <(printf '%s\n' "$_PI_EXTENSION_NAV_TOOLS" | tr ',' '\n')
155
+ if _pi_csv_has "$_base" "edit" || _pi_csv_has "$_base" "write"; then
156
+ _out="$(_pi_csv_append "$_out" "ctx_edit")"
157
+ _out="$(_pi_csv_append "$_out" "ctx_patch")"
158
+ fi
159
+ if _pi_csv_has "$_base" "bash"; then
160
+ _out="$(_pi_csv_append "$_out" "ctx_shell")"
161
+ fi
162
+ printf '%s' "$_out"
163
+ }
164
+
114
165
  # Generate a pi-subagents Markdown agent from a Claude Code markdown agent.
115
166
  # pi-subagents loads project agents from .pi/agents/**/*.md (YAML frontmatter +
116
167
  # body). The tools allowlist carries the Claude permission boundary: only
@@ -126,7 +177,7 @@ gen_pi_agent() {
126
177
  _skills="$(awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{exit} fm && /^skills:[[:space:]]*$/{list=1; next} list && /^[[:space:]]*-[[:space:]]*/{sub(/^[[:space:]]*-[[:space:]]*/, ""); print; next} list{exit}' "$_src" | tr '\n' ' ' | sed 's/ $//; s/ /, /g')"
127
178
  [ -n "$_name" ] || _name="$(basename "$_src" .md)"
128
179
  [ -n "$_desc" ] || _desc="DevRites custom agent."
129
- _tools="$(_pi_map_tools "$_tools_raw" "$_name")"
180
+ _tools="$(_pi_append_extension_tools "$(_pi_map_tools "$_tools_raw" "$_name")")"
130
181
  _desc_tmp="$TMP_GEN_DIR/pi-agent-desc-$(basename "$_src").txt"
131
182
  _desc_pi="$TMP_GEN_DIR/pi-agent-desc-$(basename "$_src").pi.txt"
132
183
  printf '%s' "$_desc" >"$_desc_tmp"