devrites 7.2.5 → 7.2.6
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 +7 -0
- package/README.md +1 -1
- package/docs/engine/commands.md +2 -2
- package/engine/internal/lib/cli_observe.go +1 -1
- package/engine/internal/lib/taskgraph.go +70 -6
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/dsh/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +5 -5
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +5 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
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.2.6](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.5...v7.2.6) (2026-10-31)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **devrites:** count reserved manifests in task-graph schedule ([#191](https://github.com/ViktorsBaikers/DevRites/issues/191)) ([499014b](https://github.com/ViktorsBaikers/DevRites/commit/499014b00d3313fd6f8722715e9cdf8b155dabf5))
|
|
10
|
+
* **no-release:** stop reserving go.mod for existing-only deps ([#190](https://github.com/ViktorsBaikers/DevRites/issues/190)) ([4a8844c](https://github.com/ViktorsBaikers/DevRites/commit/4a8844cb8eaa53c29e46b5122b40827e9522c56a))
|
|
11
|
+
|
|
5
12
|
## [7.2.5](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.4...v7.2.5) (2026-10-30)
|
|
6
13
|
|
|
7
14
|
### 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.2.
|
|
34
|
+
**Status:** [`v7.2.6`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.6): 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
|
|
package/docs/engine/commands.md
CHANGED
|
@@ -17,9 +17,9 @@ workflow strategy.
|
|
|
17
17
|
| `check preconditions <slug> [--slice SLICE-###] [--timeout N]` | Run the `test-plan.md` Build-entry preflight rows whose optional `Run at` cell is `vet` (with `--slice`, `pre-dispatch <SLICE>`); `action` rows and rows without the cell never run. Writes one candidate-bound transcript per row under `references/gates/preflight-*/`; a row passes on exit 0. A `pre-dispatch` row whose newest transcript passed is kept, not re-run: it is a pre-edit baseline, so a re-dispatch never runs it against the slice's own edits; changing its command or cwd retires the pass. Exit `3` on any failure or an invalid `Run at` value. |
|
|
18
18
|
| `check seal <slug>` | Check files required by target Phase `seal`, open human gates, the `tasks.md` slice graph, canonical `AC-###` presence when `tasks.md`/`test-plan.md` are required, the stable Build-input binding, and exact candidate bindings. `check readiness` and `check seal` also block a `scripts/` test driver that a tasks.md Writer allowlist plans or touched-files.md lists when no gates.md `CHECK` runs it and no `Driver waiver: <path> — DEC-### <reason>` line cites a recorded decision; waived drivers print as `note: unexecuted driver (waived by DEC-###): <path>` lines, on pass or block. |
|
|
19
19
|
| `check path-disjoint [--root <dir>] [<json-file> | -]` | Verify slice path sets are pairwise disjoint. |
|
|
20
|
-
| `parallel select --cap <1-10> [--root <dir>] [--slug <slug>] [--from-plan \| <json-file> \| -]` | Choose the greedy path-disjoint subset ≤ cap from supplied ready slices, or with `--from-plan` (needs `--slug`) from the plan: tasks.md slices whose dependencies state.md checks `built`, with Writer allowlist (else Files likely touched) paths plus the nearest manifest/lockfile when `External dependencies:`
|
|
20
|
+
| `parallel select --cap <1-10> [--root <dir>] [--slug <slug>] [--from-plan \| <json-file> \| -]` | Choose the greedy path-disjoint subset ≤ cap from supplied ready slices, or with `--from-plan` (needs `--slug`) from the plan: tasks.md slices whose dependencies state.md checks `built`, with Writer allowlist (else Files likely touched) paths plus the nearest manifest/lockfile when `External dependencies:` names a package (`none*`, existing, or no-new prose without a coordinate). With `--slug` and a running lease, the lease's not-yet-landed slices hold cap slots and paths, slices it names are never picked, and only new picks print. |
|
|
21
21
|
| `parallel <create\|add\|integrate\|cleanup\|status\|abort\|lease-read\|lease-write\|lease-clear\|record-green>` | Deterministic parallel worktree leases, integration, and cleanup for parallel writer batches. A lease is a pipeline: `integrate --slice <id> --apply-to-control` lands one green sibling onto control (refusing if anything but this lease moved control), and `add` starts new path-disjoint siblings from the current control tip while others still run. |
|
|
22
|
-
| `check task-graph <slug>` | Validate `tasks.md` slice dependency graph for cycles, unknown deps, malformed tokens, duplicate IDs, missing `Dependencies`, and `depends_on` mismatch. Prints a non-blocking `ADVISORY size:` line (and records a `size-advisory` metric) for each slice with 12+ Writer allowlist files and no `Size rationale:`. A `Dependencies` ID may carry a `(via <interface>)` suffix (empty or unclosed is a malformed token); prints a non-blocking `ADVISORY edge:` line (and records an `edge-advisory` metric) for each edge with no via, or whose via text is not a case-insensitive substring of the dependency's `Consumes / Produces:`. Prints `schedule: <n> slices in <r> build rounds at cap 10` (the `/rite-build` batch selection replayed over each slice's Writer allowlist, else Files likely touched; omitted when a slice has no path) and a non-blocking `ADVISORY hub:` line (top five; records a `hub-advisory` metric) for each path, compared case-folded, that three or more slices without `Serial rationale:` write. Advisories print only when the graph is valid. |
|
|
22
|
+
| `check task-graph <slug>` | Validate `tasks.md` slice dependency graph for cycles, unknown deps, malformed tokens, duplicate IDs, missing `Dependencies`, and `depends_on` mismatch. Prints a non-blocking `ADVISORY size:` line (and records a `size-advisory` metric) for each slice with 12+ Writer allowlist files and no `Size rationale:`. A `Dependencies` ID may carry a `(via <interface>)` suffix (empty or unclosed is a malformed token); prints a non-blocking `ADVISORY edge:` line (and records an `edge-advisory` metric) for each edge with no via, or whose via text is not a case-insensitive substring of the dependency's `Consumes / Produces:`. Prints `schedule: <n> slices in <r> build rounds at cap 10` (the `/rite-build` batch selection replayed over each slice's Writer allowlist, else Files likely touched, plus the manifest parallel select reserves; omitted when a slice has no path) and a non-blocking `ADVISORY hub:` line (top five; records a `hub-advisory` metric) for each path, compared case-folded, that three or more slices without `Serial rationale:` write. Advisories print only when the graph is valid. |
|
|
23
23
|
| `check regression <slug> [--update]` | Compare the workspace's structural progress facts (phase ordinal, checked ACs, met/abandoned gates, done slices, resolved questions, present artifacts) against the recorded `regression-baseline.json` high-water mark; `--update` ratchets the baseline forward under the feature lock and prints each blessed regression. |
|
|
24
24
|
| `check continuation [slug]` | Print whether an armed AFK run must invoke its cursor instead of replying. `continuation: required` plus `invoke: <next_action>` when `.devrites/AFK` is a regular file, `status` is `running`, `question_id` is empty, no blocking or escalating question is open, and `next_action` is an internal phase command (`/rite-spec` through `/rite-seal`, including `/rite-plan`, not `/rite-ship` or `/rite-autocomplete`). Otherwise `continuation: clear` with a one-line `reason`. Exit `0` either way. `handoff` prints the same lines. |
|
|
25
25
|
| `check drift <slug> [--record]` | Attribute readiness-input changes to the exact artifact. `--record` writes the per-input `readiness-inputs.json` digest baseline under the feature lock; without it the workspace diffs current inputs against that baseline (or falls back to the aggregate binding recorded in `eng-review.md`). Advisory: exit `0` on drift; a corrupt baseline exits `3`. A `test-plan.md` change limited to exact `Workflow Artifact reviewed identity: <64hex>` lines is reported as `reviewed-identity-only` (ADR-0034). `--record` also stores each slice's proof bytes (its `tasks.md` block plus the `test-plan.md` lines naming it); both modes print `ADVISORY proportion:` for a slice whose proof grew over 2x since that baseline or carries over 3x the median proof per AC. |
|
|
@@ -49,7 +49,7 @@ func runTaskGraphCheck(root, slug string, strict bool, stdout, stderr io.Writer)
|
|
|
49
49
|
if over > 0 {
|
|
50
50
|
recordMetric(root, slug, "define", "size-advisory", "", int64(over))
|
|
51
51
|
}
|
|
52
|
-
paths, serial :=
|
|
52
|
+
paths, serial := schedulePaths(raw, graph, root)
|
|
53
53
|
if plan, idle, maxReady := schedulePlan(graph, paths, root); len(plan) > 0 {
|
|
54
54
|
fmt.Fprintf(stdout, "task-graph: schedule: %d slices in %d build rounds at cap %d, width %d, idle-eligible %d\n", len(graph.Slices), len(plan), parallel.MaxParallelSlices, scheduleWidth(plan), idle)
|
|
55
55
|
if chain := chainAdvisories(graph, serial, len(plan), maxReady); len(chain) > 0 {
|
|
@@ -66,6 +66,21 @@ func sliceWritePaths(tasksMarkdown []byte, graph TaskGraphResult) (map[string][]
|
|
|
66
66
|
return paths, serial
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// schedulePaths is the write set the task-graph schedule and hub check use.
|
|
70
|
+
// It adds the manifest withManifests reserves so printed rounds match
|
|
71
|
+
// `parallel select --from-plan`, not the allowlist alone. devritesRoot is the
|
|
72
|
+
// .devrites directory.
|
|
73
|
+
func schedulePaths(tasksMarkdown []byte, graph TaskGraphResult, devritesRoot string) (map[string][]string, map[string]bool) {
|
|
74
|
+
paths, serial := sliceWritePaths(tasksMarkdown, graph)
|
|
75
|
+
project := filepath.Dir(devritesRoot)
|
|
76
|
+
for _, s := range graph.Slices {
|
|
77
|
+
block, _ := state.ExtractTaskSlice(tasksMarkdown, s.ID)
|
|
78
|
+
external, _ := fieldValue(sliceFields(block), "external dependencies")
|
|
79
|
+
paths[s.ID] = withManifests(project, paths[s.ID], external)
|
|
80
|
+
}
|
|
81
|
+
return paths, serial
|
|
82
|
+
}
|
|
83
|
+
|
|
69
84
|
// pathTokens keeps the list entries that can be paths; prose and Markdown links
|
|
70
85
|
// (anything with whitespace) are not write paths.
|
|
71
86
|
func pathTokens(raw string) []string {
|
|
@@ -241,14 +256,63 @@ func builtSlices(root, slug string) (map[string]bool, error) {
|
|
|
241
256
|
return built, nil
|
|
242
257
|
}
|
|
243
258
|
|
|
244
|
-
//
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
//
|
|
248
|
-
|
|
249
|
-
|
|
259
|
+
// manifestDenialRe is prose that says the slice adds no dependency.
|
|
260
|
+
var manifestDenialRe = regexp.MustCompile(`(?i)\b(?:no new|no product|existing|already-admitted|already admitted|stdlib)\b`)
|
|
261
|
+
|
|
262
|
+
// A backtick name, module path, npm scope, or x.y.z pin. go.mod/go.sum is not a module path.
|
|
263
|
+
var (
|
|
264
|
+
backtickPkgRe = regexp.MustCompile("`([^`]+)`")
|
|
265
|
+
modulePathRe = regexp.MustCompile(`(?i)(?:[a-z0-9-]+\.)+[a-z]{2,}/[a-z0-9._@~+-]+`)
|
|
266
|
+
npmScopeRe = regexp.MustCompile(`(?i)@[a-z0-9._-]+/[a-z0-9._-]+`)
|
|
267
|
+
versionPinRe = regexp.MustCompile(`(?i)\bv?\d+\.\d+\.\d+\b`)
|
|
268
|
+
manifestHostRe = regexp.MustCompile(`(?i)\.(?:mod|sum|json|toml|yaml|yml|lock|lockb)$`)
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
// externalClaimsManifest reports whether External dependencies names a package
|
|
272
|
+
// add, so parallel select reserves the nearest manifest. A none prefix does
|
|
273
|
+
// not. shortcut: existing/no-new prose with no package coordinate does not
|
|
274
|
+
// either; name the module, version, scope, or `package` when the slice edits one.
|
|
275
|
+
func externalClaimsManifest(external string) bool {
|
|
250
276
|
ext := strings.ToLower(strings.Trim(strings.TrimSpace(external), "`"))
|
|
251
277
|
if ext == "" || ext == "-" || ext == "n/a" || strings.HasPrefix(ext, "none") {
|
|
278
|
+
return false
|
|
279
|
+
}
|
|
280
|
+
raw := strings.TrimSpace(external)
|
|
281
|
+
if manifestDenialRe.MatchString(raw) && !namesPackage(raw) {
|
|
282
|
+
return false
|
|
283
|
+
}
|
|
284
|
+
return true
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// namesPackage reports a module path, version pin, npm scope, or `package`
|
|
288
|
+
// name. Manifest filenames mentioned only to deny an edit do not count.
|
|
289
|
+
func namesPackage(raw string) bool {
|
|
290
|
+
for _, m := range backtickPkgRe.FindAllStringSubmatch(raw, -1) {
|
|
291
|
+
base := path.Base(strings.TrimSpace(m[1]))
|
|
292
|
+
if base != "" && base != "." && !manifestHostRe.MatchString(base) {
|
|
293
|
+
return true
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if npmScopeRe.MatchString(raw) || versionPinRe.MatchString(raw) {
|
|
297
|
+
return true
|
|
298
|
+
}
|
|
299
|
+
for _, loc := range modulePathRe.FindAllStringIndex(raw, -1) {
|
|
300
|
+
token := raw[loc[0]:loc[1]]
|
|
301
|
+
host := token[:strings.IndexByte(token, '/')]
|
|
302
|
+
if !manifestHostRe.MatchString(host) {
|
|
303
|
+
return true
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return false
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// withManifests adds, when external names a package add, the manifest and
|
|
310
|
+
// lockfiles of the nearest directory above each write path that holds one,
|
|
311
|
+
// so two dependency-adding slices never share a round. A lone lockfile is
|
|
312
|
+
// always claimed (adding a dependency writes it); of several, only those
|
|
313
|
+
// present are.
|
|
314
|
+
func withManifests(project string, paths []string, external string) []string {
|
|
315
|
+
if !externalClaimsManifest(external) {
|
|
252
316
|
return paths
|
|
253
317
|
}
|
|
254
318
|
isFile := func(rel string) bool {
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](skill://devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
|
@@ -33,10 +33,10 @@ N_eff = min(
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Select **greedily in plan order** with
|
|
36
|
-
`devrites-engine parallel select --slug <slug> --cap N --from-plan`:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
`devrites-engine parallel select --slug <slug> --cap N --from-plan`: ready set
|
|
37
|
+
(dependencies `built`, minus running-lease slices), Writer allowlist
|
|
38
|
+
(else Files likely touched), plus manifest/lockfile when `External dependencies:`
|
|
39
|
+
names a package (`none*`, existing, or no-new prose without a coordinate);
|
|
40
40
|
`next` prints `eligible_now:`/`batch:`. `n_eff` counts new picks only.
|
|
41
41
|
With a running lease, a single new pick still uses `parallel add`;
|
|
42
42
|
`n_eff=0` with a running lease waits for siblings, not Prove. Without one:
|
|
@@ -73,7 +73,7 @@ Before `parallel select`, add each slice's hidden write surfaces (list owner:
|
|
|
73
73
|
[repository-topology.md § Ownership rules](../../devrites-lib/reference/standards/repository-topology.md#ownership-rules))
|
|
74
74
|
— lockfile/manifest, the generated target of an edited source, migration chain,
|
|
75
75
|
snapshot directory, formatter sweep — and compare paths case-folded
|
|
76
|
-
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile
|
|
76
|
+
(`src/Api.ts` = `src/api.ts`); `--from-plan` adds the manifest/lockfile for a package.
|
|
77
77
|
Slices colliding on either run serially; the rest
|
|
78
78
|
stay eligible. Record `serial: <ids> — <surface>` in `evidence.md`. Under AFK
|
|
79
79
|
with `max_parallel ≥ 2`, `dispatch open` refuses a first-round build wright wave
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "7.2.
|
|
3
|
+
"version": "7.2.6",
|
|
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",
|