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.
- package/CHANGELOG.md +16 -0
- package/README.md +4 -4
- package/docs/command-map.md +1 -1
- package/docs/engine/commands.md +1 -0
- package/docs/orchestration.md +2 -2
- package/engine/internal/parallel/cli.go +69 -0
- package/engine/internal/parallel/select.go +76 -0
- package/engine/internal/parallel/select_test.go +95 -0
- package/pack/.claude/settings.json +1 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +5 -4
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +9 -10
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
- package/pack/.claude/skills/rite-build/SKILL.md +2 -1
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +17 -13
- package/pack/generated/claude/settings.json +1 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +5 -4
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +9 -10
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
- package/pack/generated/claude/skills/rite-build/SKILL.md +2 -1
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +17 -13
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +5 -4
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +9 -10
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
- package/pack/generated/codex/skills/rite-build/SKILL.md +2 -1
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +17 -13
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
- package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +5 -4
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +9 -10
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
- package/pack/generated/omp/skills/rite-build/SKILL.md +2 -1
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +17 -13
- package/pack/generated/pi/agents/devrites-code-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-devex-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-doubt-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-evidence-scout.md +1 -1
- package/pack/generated/pi/agents/devrites-frontend-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-performance-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-plan-drafter.md +1 -1
- package/pack/generated/pi/agents/devrites-plan-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
- package/pack/generated/pi/agents/devrites-security-auditor.md +1 -1
- package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-slice-wright.md +1 -1
- package/pack/generated/pi/agents/devrites-spec-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-strategy-reviewer.md +1 -1
- package/pack/generated/pi/agents/devrites-test-analyst.md +1 -1
- package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +9 -10
- package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +3 -3
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +5 -4
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +9 -10
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +2 -3
- package/pack/generated/pi/skills/rite-build/SKILL.md +2 -1
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +17 -13
- package/package.json +1 -1
- 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**:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
nothing pending → Prove. A cap that cannot be filled
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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`,
|
|
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.
|
|
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",
|
package/scripts/pi-generate.sh
CHANGED
|
@@ -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"
|