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 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.5`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.5): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
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
 
@@ -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:` is not none. 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. |
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 := sliceWritePaths(raw, graph)
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
- // withManifests adds, when external names dependencies (not empty or none),
245
- // the manifest and lockfiles of the nearest directory above each write path
246
- // that holds one, so two dependency-adding slices never share a round. A lone
247
- // lockfile is always claimed (adding a dependency writes it); of several, only
248
- // those present are.
249
- func withManifests(project string, paths []string, external string) []string {
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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`: the engine
37
- reads the ready set (tasks.md dependencies checked `built` in `state.md`, minus
38
- running-lease slices) and each slice's Writer allowlist (else `Files likely
39
- touched`), plus its manifest/lockfile when `External dependencies:` is not none;
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 itself.
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.5",
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",