devlyn-cli 4.3.29 → 4.3.31

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 (33) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/bin/engines.js +7 -9
  4. package/bin/harness-activation.js +166 -17
  5. package/bin/harness-context.js +7 -7
  6. package/bin/instruction-templates.json +4 -0
  7. package/bin/skill-history.json +8 -1
  8. package/config/skills/_shared/engine-preflight.md +0 -2
  9. package/config/skills/_shared/runtime-principles.md +2 -2
  10. package/config/skills/_shared/task-completion.md +3 -15
  11. package/config/skills/devlyn-ideate/references/executor.md +1 -1
  12. package/config/skills/devlyn-ideate/references/loop.md +2 -4
  13. package/config/skills/devlyn-ideate/references/package-format.md +0 -1
  14. package/harness/AGENTS.md +3 -3
  15. package/harness/CLAUDE.md +3 -3
  16. package/native/claude/.claude-plugin/plugin.json +1 -1
  17. package/native/claude/skills/_shared/engine-preflight.md +0 -2
  18. package/native/claude/skills/_shared/runtime-principles.md +2 -2
  19. package/native/claude/skills/_shared/task-completion.md +3 -15
  20. package/native/claude/skills/devlyn-ideate/references/executor.md +1 -1
  21. package/native/claude/skills/devlyn-ideate/references/loop.md +2 -4
  22. package/native/claude/skills/devlyn-ideate/references/package-format.md +0 -1
  23. package/native/codex/.agents/plugins/marketplace.json +1 -1
  24. package/native/codex/plugins/devlyn/.codex-plugin/plugin.json +1 -1
  25. package/native/codex/plugins/devlyn/skills/_shared/engine-preflight.md +0 -2
  26. package/native/codex/plugins/devlyn/skills/_shared/runtime-principles.md +2 -2
  27. package/native/codex/plugins/devlyn/skills/_shared/task-completion.md +3 -15
  28. package/native/codex/plugins/devlyn/skills/devlyn-ideate/references/executor.md +1 -1
  29. package/native/codex/plugins/devlyn/skills/devlyn-ideate/references/loop.md +2 -4
  30. package/native/codex/plugins/devlyn/skills/devlyn-ideate/references/package-format.md +0 -1
  31. package/optional-skills/code-review-standards/SKILL.md +10 -6
  32. package/package.json +1 -1
  33. package/release.json +35 -35
package/harness/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- devlyn:instructions:begin sha256=f2206e5ed1c96a6c5fc368836bb041e8e77328048ca617f902ed6fb72dcb742d -->
1
+ <!-- devlyn:instructions:begin sha256=7a484752888c37d7e91a9edfaa17d36b34ada221fc1d533ab9d73bc08c56ae7e -->
2
2
  Project-specific instructions outside this managed block take precedence over these defaults.
3
3
 
4
4
  # Project Instructions
@@ -16,7 +16,7 @@ Seven rules govern every change. Cite them by name when a decision touches one.
16
16
  1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract. No config bypasses.
17
17
  2. **No overengineering** — smallest sufficient change, one responsibility per module. New abstractions need an observed failure. Subtractive-first: ask "what can I delete instead?" before writing anything new. Remove code your change makes unused; only report unrelated pre-existing dead code.
18
18
  3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER. Retroactive prediction edits are dishonest.
19
- 4. **Worldclass** — zero CRITICAL, zero HIGH security/design findings on the shippable path. Any review is one pass in which every reviewer, including each one the user requires, reads the source the checks ran on; fix each finding or reject it with a reason, re-check the fixes and the invariants they touch, and repeat the full review only while a CRITICAL or HIGH finding remains.
19
+ 4. **Worldclass** — zero CRITICAL, zero HIGH findings on the shippable path; each must name a concrete case of wrong behavior or results, a security hole, or lost or corrupted data. A review is one pass on the source the checks ran on, by the reviewers the user requires, else by one reviewer who has not seen the author's reasoning. Fix each finding or reject it with a reason, and verify every edit and the invariants it touches. Only a CRITICAL or HIGH calls for another reviewer pass, which reads the fixes, the rejections and the invariants they touch. If one survives that pass, or its fix caused a new one, repair once more; if the next pass finds either again, stop: the work does not ship and is reported blocked.
20
20
  5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
21
21
  6. **Optimized** — efficient on the resource that matters (the user's time, tokens, attention, runtime) without weakening correctness or requirements. An extra check or process step must beat the simpler path.
22
22
  7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
@@ -30,7 +30,7 @@ Three discipline rules govern HOW the principles are applied:
30
30
  ## Quick Start
31
31
 
32
32
  - `devlyn-ideate` — loop designer and intent queue: `plan <intent or document>` writes a validated loop package, `add` queues its tasks, `status` (or no arguments) reports the queue, `drain` executes it serially.
33
- - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md` in `.claude/skills/` or `.agents/skills/` (project, else `~`). With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
33
+ - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md`. With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
34
34
  - Executor — `devlyn-engines` shows it and pins it in `.devlyn/engines.json`. A pinned executor does the implementation work, direct or drained: when it is not you, delegate to it, and when it is unavailable stop with `BLOCKED:<engine>-unavailable`. Without a pin, you are the executor.
35
35
 
36
36
  Each skill's `SKILL.md` is the source of truth for its flags and workflow.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devlyn",
3
- "version": "4.3.29",
3
+ "version": "4.3.31",
4
4
  "description": "Devlyn harness skills",
5
5
  "skills": "./skills/"
6
6
  }
@@ -1,7 +1,5 @@
1
1
  # Shared — Executor Pre-flight
2
2
 
3
- Used by `/devlyn-ideate` and `/devlyn-engines`: one rule for which engine executes implementation work and what happens when it is missing.
4
-
5
3
  ## Selection
6
4
 
7
5
  The executor is the `executor` pin in `.devlyn/engines.json` at the checkout root (set with `/devlyn-engines executor <name>`), else the CLI the user opened. A linked worktree or subdirectory has no pin unless one is set there. Only Claude and Codex can execute, so a drain from any other CLI needs a claude or codex pin. Keys earlier releases wrote for retired pipeline roles (`pair_judge_priority`, `roles`) stay as written and select nothing: a worker profile never becomes the executor.
@@ -15,7 +15,7 @@ Seven rules govern every change. Cite them by name when a decision touches one.
15
15
  1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract. No config bypasses.
16
16
  2. **No overengineering** — smallest sufficient change, one responsibility per module. New abstractions need an observed failure. Subtractive-first: ask "what can I delete instead?" before writing anything new. Remove code your change makes unused; only report unrelated pre-existing dead code.
17
17
  3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER. Retroactive prediction edits are dishonest.
18
- 4. **Worldclass** — zero CRITICAL, zero HIGH security/design findings on the shippable path. Any review is one pass in which every reviewer, including each one the user requires, reads the source the checks ran on; fix each finding or reject it with a reason, re-check the fixes and the invariants they touch, and repeat the full review only while a CRITICAL or HIGH finding remains.
18
+ 4. **Worldclass** — zero CRITICAL, zero HIGH findings on the shippable path; each must name a concrete case of wrong behavior or results, a security hole, or lost or corrupted data. A review is one pass on the source the checks ran on, by the reviewers the user requires, else by one reviewer who has not seen the author's reasoning. Fix each finding or reject it with a reason, and verify every edit and the invariants it touches. Only a CRITICAL or HIGH calls for another reviewer pass, which reads the fixes, the rejections and the invariants they touch. If one survives that pass, or its fix caused a new one, repair once more; if the next pass finds either again, stop: the work does not ship and is reported blocked.
19
19
  5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
20
20
  6. **Optimized** — efficient on the resource that matters (the user's time, tokens, attention, runtime) without weakening correctness or requirements. An extra check or process step must beat the simpler path.
21
21
  7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
@@ -29,7 +29,7 @@ Three discipline rules govern HOW the principles are applied:
29
29
  ## Quick Start
30
30
 
31
31
  - `devlyn-ideate` — loop designer and intent queue: `plan <intent or document>` writes a validated loop package, `add` queues its tasks, `status` (or no arguments) reports the queue, `drain` executes it serially.
32
- - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md` in `.claude/skills/` or `.agents/skills/` (project, else `~`). With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
32
+ - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md`. With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
33
33
  - Executor — `devlyn-engines` shows it and pins it in `.devlyn/engines.json`. A pinned executor does the implementation work, direct or drained: when it is not you, delegate to it, and when it is unavailable stop with `BLOCKED:<engine>-unavailable`. Without a pin, you are the executor.
34
34
 
35
35
  Each skill's `SKILL.md` is the source of truth for its flags and workflow.
@@ -62,9 +62,6 @@ The repository comes from the remote's GitHub URL and the base from the reposito
62
62
  A non-default base is refused at allocation.
63
63
  Every delivery allocation owns a linked worktree; `--worktree` is required and
64
64
  must name an absent path.
65
- Cleanup removes empty parents through the exact per-repo root shown above or its legacy `.devlyn.noindex`/`.devlyn` root, keeping the shared `.devlyn-worktrees` container. Allocation also sweeps empty legacy roots for this repo.
66
- On Windows, allocation marks only a newly created shared container hidden and creates the worktree not content-indexed (content only; names stay indexed); files copied in keep their own attributes.
67
- A marking failure continues allocation and is reported in `warnings`.
68
65
  Remote allocation first cleans earlier merged deliveries, then allocation refuses with `BLOCKED:disk`
69
66
  without creating a receipt, branch or worktree when that filesystem has less than max(10 GiB, 2%) free; free space and allocate again.
70
67
  A publication allocation normally starts at the exact fetched remote base,
@@ -122,9 +119,7 @@ Git config `devlyn.warmBuildDirs` is true, or it is unset and the Cargo workspac
122
119
  Cargo.toml sets `[workspace.metadata.devlyn] warm-build-dirs = true`,
123
120
  allocation seeds that directory from a built checkout of the repository, so
124
121
  the first build does not rebuild every dependency; `build_dirs` in its result
125
- and receipt says what it did, and a skip means an ordinary cold build. The
126
- Git setting takes precedence on this machine: false disables and invalid values
127
- skip; global, system, include and per-worktree values are not consulted. Seeding
122
+ and receipt says what it did, and a skip means an ordinary cold build. Seeding
128
123
  keeps dependency outputs that may hold the other checkout's paths, and those
129
124
  follow that checkout's later rebuilds. `warm-build-dirs.py <worktree>` does the same for a
130
125
  worktree made without allocation. A warmed directory leaves with the worktree
@@ -146,11 +141,7 @@ python3 "$DEVLYN_SHARED_DIR/task-complete.py" clean-scratch \
146
141
  --receipt '<returned receipt.json>' --writers-stopped
147
142
  ```
148
143
 
149
- This empties only the prospectively owned scratch, preserves its directory
150
- identity for interrupted cleanup and later builds, checks live users and reports
151
- the logical byte count separately from actual free disk space.
152
- Unknown historical roots, source/recovery data, shared caches and terminal
153
- history are never adopted or swept. A refused cleanup does not block source
144
+ A refused cleanup does not block source
154
145
  delivery; it stays visible in the handoff with its receipt and retry command
155
146
  (`CLEANUP_PENDING` after delivered source). No task is described as cleaned
156
147
  while owned disposable files remain. On resumption, finish any pending scratch
@@ -257,9 +248,6 @@ are preserved beside it as `records.<digest>/.devlyn`, never rewriting earlier c
257
248
  Non-regular files or symlinks there, partial/corrupt custody, an unreadable
258
249
  earlier copy or a mismatched `records.<digest>` copy retain the tree for repair.
259
250
 
260
- Legacy in-place receipts retire refs only once their task branch is no longer
261
- checked out; their checkout is never modified. Local ref deletion is guarded by
262
- the expected SHA; remote deletion uses an exact force-with-lease solely as
263
- compare-and-delete, never for product publication. A changed remote branch is
251
+ A changed remote branch is
264
252
  retained. Retry uses the external receipt/evidence after removal. Recovery
265
253
  refs/evidence have no automatic expiry.
@@ -59,4 +59,4 @@ Each `review_requirements` ID needs review evidence: a JSON record under `<workt
59
59
  }
60
60
  ```
61
61
 
62
- A record counts only when it binds this task, the candidate source and both contract digests; any other well-formed record is reported under `ignored_reviews` (a source change invalidates earlier reviews). A listed review or runner record that is unreadable or not this shape fails acceptance with its path named; keys a review record or finding adds beyond this shape are ignored. The counted records' `requirements` must cover `review_requirements`. Each finding's `disposition` is `open`, `resolved` or `rejected` (`rejected` needs a `reason`); an open binding finding blocks acceptance. The loop requires no particular engine or number of reviewers.
62
+ A record counts only when it binds this task, the candidate source and both contract digests; any other well-formed record is reported under `ignored_reviews` (a source change invalidates earlier reviews; the record for the changed source may come from a pass that reads only the change and the invariants it touches). A listed review or runner record that is unreadable or not this shape fails acceptance with its path named; keys a review record or finding adds beyond this shape are ignored. The counted records' `requirements` must cover `review_requirements`. Each finding's `disposition` is `open`, `resolved` or `rejected` (`rejected` needs a `reason`); an open binding finding blocks acceptance. The loop requires no particular engine or number of reviewers.
@@ -55,11 +55,9 @@ Package cleanup, parent pruning and report failures appear as diagnostics under
55
55
 
56
56
  ## Release binding and read-only consumers
57
57
 
58
- `<git-common-dir>/devlyn-loops/harness.json` is authoritative across linked worktrees: `{schemaVersion: 1, release: {package, version, digest, root}, defaults: {path, sha256}}`. Paths are absolute and hashes cover exact bytes. The queue lock covers binding before the first capture. An interrupted first add, unfinished tasks, recovery conflicts and pending delivery retain it; settlement removes it. A different release refuses: use the exact recovery argv when it gives one (a JSON argv array preserving the caller’s arguments); otherwise do what it says (Drain in Devlyn, the tasks to finish first, or a repair). Never build the bound queue’s path yourself. No caller substitutes another implementation.
58
+ `<git-common-dir>/devlyn-loops/harness.json` is authoritative across linked worktrees: `{schemaVersion: 1, release: {package, version, digest, root}, defaults: {path, sha256}}`. Paths are absolute and hashes cover exact bytes. The queue lock covers binding before the first capture. An interrupted first add, unfinished tasks, recovery conflicts and pending delivery retain it; settlement removes it. No caller substitutes another implementation.
59
59
 
60
- `queue.py inspect --repo <dir> --json` reads without cleanup, locks or writes. It returns the status summary plus `binding` (null for legacy) and `compatibility`: `compatible`, `legacy`, `reasons`, `recoveryArgv`, `taskPacket` ranges and `queueBinding` ranges. Incompatible or unreadable state is reported, never migrated. Apps should use this reader instead of `status`, which still reconciles cleanup. For a mismatch, `recoveryArgv` names the bound queue’s inspect invocation when handoff is allowed, and is null when the refusal names Drain in Devlyn, tasks to finish first, or a repair. Use an exact recovery argv when provided; otherwise follow the refusal.
61
-
62
- Codex projection writers place `.devlyn-harness-projection.json` at the copied plugin root, beside `skills` and `.codex-plugin`: `{schemaVersion: 1, release: <ReleaseRef>, source: "native/codex/plugins/devlyn"}`. The reader verifies the named release and every projected file’s bytes/mode against that subtree (excluding only the marker). Symlinked skill invocations resolve through their real path. Standalone installs and existing unfinished unbound queues retain legacy behavior; new legacy packets use v2 with a null release, and their `defaults` name the invoking installation's own `_shared/runtime-principles.md` (`source: "skill"`). No engine applicability is inferred from instruction filenames: bound queues use verified release defaults with native instructions taking precedence, except a Devlyn managed block, which the defaults replace. Worker and runner paths point to the bound release, independent of a projection cache’s lifetime.
60
+ `queue.py inspect --repo <dir> --json` reads without cleanup, locks or writes. It returns the status summary plus `binding` (null for legacy) and `compatibility`: `compatible`, `legacy`, `reasons`, `recoveryArgv`, `taskPacket` ranges and `queueBinding` ranges. Incompatible or unreadable state is reported, never migrated. For a mismatch, `recoveryArgv` names the bound queue’s inspect invocation when handoff is allowed, and is null when the refusal names Drain in Devlyn, tasks to finish first, or a repair. Use an exact recovery argv when provided; otherwise follow the refusal.
63
61
 
64
62
  ## Executor exchange
65
63
 
@@ -107,7 +107,6 @@ Coverage proves that every obligation has evidence. Whether the checks express t
107
107
  - The only legal transition turns one pending row into `[x]` or `[F]` with every other byte unchanged, so a terminal commit changes one line of its loop's file. Terminal rows are never reinterpreted or rerun. The blank lines let transitions of adjacent rows merge, and loops never share a file.
108
108
  - Identities are unique; equal titles are fine.
109
109
  - `docs/specs/queue.md` is the legacy queue. Its raw rows are intents: readable, never executed, never written (a row there that fully matches this grammar is ignored). `add --materialize <line>` plans one pending legacy row as a loop whose `## Intent` reproduces it verbatim (whitespace may reflow); that loop's queue file starts with `<!-- replaces docs/specs/queue.md row (occurrence <n>): <row> -->`, the row's exact text and its occurrence among equal rows, line endings aside. Every checkout, a fresh clone included, then shows the loop's rows in that row's place. A claim matching no row replaces nothing; a row two loops claim (two clones each materializing it) is hidden, neither loop taking its place, so it is never planned again.
110
- - Status and drain read the legacy rows in file order, each replaced row as its loop's rows; then the other recorded loops in add order, from their captures; then loops without a record here, as in a fresh clone, from the checkout's tracked queue files in loop-id order.
111
110
 
112
111
  ## Commands
113
112
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "devlyn-harness-v4-3-29",
2
+ "name": "devlyn-harness-v4-3-31",
3
3
  "plugins": [
4
4
  {
5
5
  "name": "devlyn",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devlyn",
3
- "version": "4.3.29",
3
+ "version": "4.3.31",
4
4
  "description": "Devlyn harness skills",
5
5
  "skills": "./skills/"
6
6
  }
@@ -1,7 +1,5 @@
1
1
  # Shared — Executor Pre-flight
2
2
 
3
- Used by `/devlyn-ideate` and `/devlyn-engines`: one rule for which engine executes implementation work and what happens when it is missing.
4
-
5
3
  ## Selection
6
4
 
7
5
  The executor is the `executor` pin in `.devlyn/engines.json` at the checkout root (set with `/devlyn-engines executor <name>`), else the CLI the user opened. A linked worktree or subdirectory has no pin unless one is set there. Only Claude and Codex can execute, so a drain from any other CLI needs a claude or codex pin. Keys earlier releases wrote for retired pipeline roles (`pair_judge_priority`, `roles`) stay as written and select nothing: a worker profile never becomes the executor.
@@ -15,7 +15,7 @@ Seven rules govern every change. Cite them by name when a decision touches one.
15
15
  1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract. No config bypasses.
16
16
  2. **No overengineering** — smallest sufficient change, one responsibility per module. New abstractions need an observed failure. Subtractive-first: ask "what can I delete instead?" before writing anything new. Remove code your change makes unused; only report unrelated pre-existing dead code.
17
17
  3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER. Retroactive prediction edits are dishonest.
18
- 4. **Worldclass** — zero CRITICAL, zero HIGH security/design findings on the shippable path. Any review is one pass in which every reviewer, including each one the user requires, reads the source the checks ran on; fix each finding or reject it with a reason, re-check the fixes and the invariants they touch, and repeat the full review only while a CRITICAL or HIGH finding remains.
18
+ 4. **Worldclass** — zero CRITICAL, zero HIGH findings on the shippable path; each must name a concrete case of wrong behavior or results, a security hole, or lost or corrupted data. A review is one pass on the source the checks ran on, by the reviewers the user requires, else by one reviewer who has not seen the author's reasoning. Fix each finding or reject it with a reason, and verify every edit and the invariants it touches. Only a CRITICAL or HIGH calls for another reviewer pass, which reads the fixes, the rejections and the invariants they touch. If one survives that pass, or its fix caused a new one, repair once more; if the next pass finds either again, stop: the work does not ship and is reported blocked.
19
19
  5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
20
20
  6. **Optimized** — efficient on the resource that matters (the user's time, tokens, attention, runtime) without weakening correctness or requirements. An extra check or process step must beat the simpler path.
21
21
  7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
@@ -29,7 +29,7 @@ Three discipline rules govern HOW the principles are applied:
29
29
  ## Quick Start
30
30
 
31
31
  - `devlyn-ideate` — loop designer and intent queue: `plan <intent or document>` writes a validated loop package, `add` queues its tasks, `status` (or no arguments) reports the queue, `drain` executes it serially.
32
- - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md` in `.claude/skills/` or `.agents/skills/` (project, else `~`). With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
32
+ - Delivery — direct work edits the current checkout; deliver completed, verified requests with changes by project policy (default PR and merge), following `_shared/task-completion.md`. With known concurrent writers, isolate before editing; on unexplained changes, pause writes until safe or isolated. An ideate drain delivers every task. Explicit limits win; commit alone stays local.
33
33
  - Executor — `devlyn-engines` shows it and pins it in `.devlyn/engines.json`. A pinned executor does the implementation work, direct or drained: when it is not you, delegate to it, and when it is unavailable stop with `BLOCKED:<engine>-unavailable`. Without a pin, you are the executor.
34
34
 
35
35
  Each skill's `SKILL.md` is the source of truth for its flags and workflow.
@@ -62,9 +62,6 @@ The repository comes from the remote's GitHub URL and the base from the reposito
62
62
  A non-default base is refused at allocation.
63
63
  Every delivery allocation owns a linked worktree; `--worktree` is required and
64
64
  must name an absent path.
65
- Cleanup removes empty parents through the exact per-repo root shown above or its legacy `.devlyn.noindex`/`.devlyn` root, keeping the shared `.devlyn-worktrees` container. Allocation also sweeps empty legacy roots for this repo.
66
- On Windows, allocation marks only a newly created shared container hidden and creates the worktree not content-indexed (content only; names stay indexed); files copied in keep their own attributes.
67
- A marking failure continues allocation and is reported in `warnings`.
68
65
  Remote allocation first cleans earlier merged deliveries, then allocation refuses with `BLOCKED:disk`
69
66
  without creating a receipt, branch or worktree when that filesystem has less than max(10 GiB, 2%) free; free space and allocate again.
70
67
  A publication allocation normally starts at the exact fetched remote base,
@@ -122,9 +119,7 @@ Git config `devlyn.warmBuildDirs` is true, or it is unset and the Cargo workspac
122
119
  Cargo.toml sets `[workspace.metadata.devlyn] warm-build-dirs = true`,
123
120
  allocation seeds that directory from a built checkout of the repository, so
124
121
  the first build does not rebuild every dependency; `build_dirs` in its result
125
- and receipt says what it did, and a skip means an ordinary cold build. The
126
- Git setting takes precedence on this machine: false disables and invalid values
127
- skip; global, system, include and per-worktree values are not consulted. Seeding
122
+ and receipt says what it did, and a skip means an ordinary cold build. Seeding
128
123
  keeps dependency outputs that may hold the other checkout's paths, and those
129
124
  follow that checkout's later rebuilds. `warm-build-dirs.py <worktree>` does the same for a
130
125
  worktree made without allocation. A warmed directory leaves with the worktree
@@ -146,11 +141,7 @@ python3 "$DEVLYN_SHARED_DIR/task-complete.py" clean-scratch \
146
141
  --receipt '<returned receipt.json>' --writers-stopped
147
142
  ```
148
143
 
149
- This empties only the prospectively owned scratch, preserves its directory
150
- identity for interrupted cleanup and later builds, checks live users and reports
151
- the logical byte count separately from actual free disk space.
152
- Unknown historical roots, source/recovery data, shared caches and terminal
153
- history are never adopted or swept. A refused cleanup does not block source
144
+ A refused cleanup does not block source
154
145
  delivery; it stays visible in the handoff with its receipt and retry command
155
146
  (`CLEANUP_PENDING` after delivered source). No task is described as cleaned
156
147
  while owned disposable files remain. On resumption, finish any pending scratch
@@ -257,9 +248,6 @@ are preserved beside it as `records.<digest>/.devlyn`, never rewriting earlier c
257
248
  Non-regular files or symlinks there, partial/corrupt custody, an unreadable
258
249
  earlier copy or a mismatched `records.<digest>` copy retain the tree for repair.
259
250
 
260
- Legacy in-place receipts retire refs only once their task branch is no longer
261
- checked out; their checkout is never modified. Local ref deletion is guarded by
262
- the expected SHA; remote deletion uses an exact force-with-lease solely as
263
- compare-and-delete, never for product publication. A changed remote branch is
251
+ A changed remote branch is
264
252
  retained. Retry uses the external receipt/evidence after removal. Recovery
265
253
  refs/evidence have no automatic expiry.
@@ -59,4 +59,4 @@ Each `review_requirements` ID needs review evidence: a JSON record under `<workt
59
59
  }
60
60
  ```
61
61
 
62
- A record counts only when it binds this task, the candidate source and both contract digests; any other well-formed record is reported under `ignored_reviews` (a source change invalidates earlier reviews). A listed review or runner record that is unreadable or not this shape fails acceptance with its path named; keys a review record or finding adds beyond this shape are ignored. The counted records' `requirements` must cover `review_requirements`. Each finding's `disposition` is `open`, `resolved` or `rejected` (`rejected` needs a `reason`); an open binding finding blocks acceptance. The loop requires no particular engine or number of reviewers.
62
+ A record counts only when it binds this task, the candidate source and both contract digests; any other well-formed record is reported under `ignored_reviews` (a source change invalidates earlier reviews; the record for the changed source may come from a pass that reads only the change and the invariants it touches). A listed review or runner record that is unreadable or not this shape fails acceptance with its path named; keys a review record or finding adds beyond this shape are ignored. The counted records' `requirements` must cover `review_requirements`. Each finding's `disposition` is `open`, `resolved` or `rejected` (`rejected` needs a `reason`); an open binding finding blocks acceptance. The loop requires no particular engine or number of reviewers.
@@ -55,11 +55,9 @@ Package cleanup, parent pruning and report failures appear as diagnostics under
55
55
 
56
56
  ## Release binding and read-only consumers
57
57
 
58
- `<git-common-dir>/devlyn-loops/harness.json` is authoritative across linked worktrees: `{schemaVersion: 1, release: {package, version, digest, root}, defaults: {path, sha256}}`. Paths are absolute and hashes cover exact bytes. The queue lock covers binding before the first capture. An interrupted first add, unfinished tasks, recovery conflicts and pending delivery retain it; settlement removes it. A different release refuses: use the exact recovery argv when it gives one (a JSON argv array preserving the caller’s arguments); otherwise do what it says (Drain in Devlyn, the tasks to finish first, or a repair). Never build the bound queue’s path yourself. No caller substitutes another implementation.
58
+ `<git-common-dir>/devlyn-loops/harness.json` is authoritative across linked worktrees: `{schemaVersion: 1, release: {package, version, digest, root}, defaults: {path, sha256}}`. Paths are absolute and hashes cover exact bytes. The queue lock covers binding before the first capture. An interrupted first add, unfinished tasks, recovery conflicts and pending delivery retain it; settlement removes it. No caller substitutes another implementation.
59
59
 
60
- `queue.py inspect --repo <dir> --json` reads without cleanup, locks or writes. It returns the status summary plus `binding` (null for legacy) and `compatibility`: `compatible`, `legacy`, `reasons`, `recoveryArgv`, `taskPacket` ranges and `queueBinding` ranges. Incompatible or unreadable state is reported, never migrated. Apps should use this reader instead of `status`, which still reconciles cleanup. For a mismatch, `recoveryArgv` names the bound queue’s inspect invocation when handoff is allowed, and is null when the refusal names Drain in Devlyn, tasks to finish first, or a repair. Use an exact recovery argv when provided; otherwise follow the refusal.
61
-
62
- Codex projection writers place `.devlyn-harness-projection.json` at the copied plugin root, beside `skills` and `.codex-plugin`: `{schemaVersion: 1, release: <ReleaseRef>, source: "native/codex/plugins/devlyn"}`. The reader verifies the named release and every projected file’s bytes/mode against that subtree (excluding only the marker). Symlinked skill invocations resolve through their real path. Standalone installs and existing unfinished unbound queues retain legacy behavior; new legacy packets use v2 with a null release, and their `defaults` name the invoking installation's own `_shared/runtime-principles.md` (`source: "skill"`). No engine applicability is inferred from instruction filenames: bound queues use verified release defaults with native instructions taking precedence, except a Devlyn managed block, which the defaults replace. Worker and runner paths point to the bound release, independent of a projection cache’s lifetime.
60
+ `queue.py inspect --repo <dir> --json` reads without cleanup, locks or writes. It returns the status summary plus `binding` (null for legacy) and `compatibility`: `compatible`, `legacy`, `reasons`, `recoveryArgv`, `taskPacket` ranges and `queueBinding` ranges. Incompatible or unreadable state is reported, never migrated. For a mismatch, `recoveryArgv` names the bound queue’s inspect invocation when handoff is allowed, and is null when the refusal names Drain in Devlyn, tasks to finish first, or a repair. Use an exact recovery argv when provided; otherwise follow the refusal.
63
61
 
64
62
  ## Executor exchange
65
63
 
@@ -107,7 +107,6 @@ Coverage proves that every obligation has evidence. Whether the checks express t
107
107
  - The only legal transition turns one pending row into `[x]` or `[F]` with every other byte unchanged, so a terminal commit changes one line of its loop's file. Terminal rows are never reinterpreted or rerun. The blank lines let transitions of adjacent rows merge, and loops never share a file.
108
108
  - Identities are unique; equal titles are fine.
109
109
  - `docs/specs/queue.md` is the legacy queue. Its raw rows are intents: readable, never executed, never written (a row there that fully matches this grammar is ignored). `add --materialize <line>` plans one pending legacy row as a loop whose `## Intent` reproduces it verbatim (whitespace may reflow); that loop's queue file starts with `<!-- replaces docs/specs/queue.md row (occurrence <n>): <row> -->`, the row's exact text and its occurrence among equal rows, line endings aside. Every checkout, a fresh clone included, then shows the loop's rows in that row's place. A claim matching no row replaces nothing; a row two loops claim (two clones each materializing it) is hidden, neither loop taking its place, so it is never planned again.
110
- - Status and drain read the legacy rows in file order, each replaced row as its loop's rows; then the other recorded loops in add order, from their captures; then loops without a record here, as in a fresh clone, from the checkout's tracked queue files in loop-id order.
111
110
 
112
111
  ## Commands
113
112
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: code-review-standards
3
- description: Severity framework (CRITICAL security, HIGH code quality, MEDIUM best practice, LOW cleanup) and approval criteria for judging a code change. Use when reviewing, auditing or validating a diff, pull request or just-finished implementation, or when deciding whether a change is ready to approve.
3
+ description: Severity framework (CRITICAL security, HIGH correctness and data, MEDIUM best practice, LOW cleanup) and approval criteria for judging a code change. Use when reviewing, auditing or validating a diff, pull request or just-finished implementation, or when deciding whether a change is ready to approve.
4
4
  ---
5
5
  # Code Review Standards
6
6
 
@@ -8,6 +8,8 @@ Severity framework and quality bar for reviewing code changes. Apply this framew
8
8
 
9
9
  ## Severity Framework
10
10
 
11
+ A CRITICAL or HIGH finding names its concrete case: the input, state or path that leads to the harm. A finding that cannot name one is MEDIUM or lower.
12
+
11
13
  ### CRITICAL — Security (blocks approval)
12
14
 
13
15
  - Hardcoded credentials, API keys, tokens, secrets
@@ -17,17 +19,19 @@ Severity framework and quality bar for reviewing code changes. Apply this framew
17
19
  - Insecure dependencies (known CVEs)
18
20
  - Path traversal (unsanitized file paths)
19
21
 
20
- ### HIGH — Code Quality (blocks approval)
22
+ ### HIGH — Correctness and data (blocks approval)
23
+
24
+ - Wrong behavior or results
25
+ - Lost or corrupted data
26
+ - Missing error handling at a boundary, where a failure there gives one of the above
27
+
28
+ ### MEDIUM — Best Practices (fix or justify)
21
29
 
22
30
  - Functions > 50 lines → split
23
31
  - Files > 800 lines → decompose
24
32
  - Nesting > 4 levels → flatten or extract
25
- - Missing error handling at boundaries
26
33
  - `console.log` in production code → remove
27
34
  - Unresolved TODO/FIXME → resolve or remove
28
-
29
- ### MEDIUM — Best Practices (fix or justify)
30
-
31
35
  - Mutation where immutable patterns preferred
32
36
  - Missing tests for new functionality
33
37
  - Accessibility gaps (alt text, ARIA, keyboard nav)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devlyn-cli",
3
- "version": "4.3.29",
3
+ "version": "4.3.31",
4
4
  "description": "Loop & harness engineering for AI coding agents (Claude Code, Codex, and any AGENTS.md-driven agent) — core engineering principles for every session and a loop designer that splits one intent into tasks agents drain hands-free",
5
5
  "homepage": "https://github.com/fysoul17/devlyn-cli#readme",
6
6
  "bin": {
package/release.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "devlyn-cli",
4
- "version": "4.3.29",
4
+ "version": "4.3.31",
5
5
  "principles": {
6
6
  "defaults": "config/skills/_shared/runtime-principles.md",
7
7
  "memory": {
8
8
  "claude": "harness/CLAUDE.md",
9
9
  "agents": "harness/AGENTS.md"
10
10
  },
11
- "sourceBlockSha256": "f2206e5ed1c96a6c5fc368836bb041e8e77328048ca617f902ed6fb72dcb742d"
11
+ "sourceBlockSha256": "7a484752888c37d7e91a9edfaa17d36b34ada221fc1d533ab9d73bc08c56ae7e"
12
12
  },
13
13
  "skills": {
14
14
  "root": "config/skills",
@@ -99,12 +99,12 @@
99
99
  "files": [
100
100
  {
101
101
  "path": "AGENTS.md",
102
- "sha256": "7a624c175486712f08ad5ad45c7979db1c1d0db35f3bfd2c4a068585b7f23f13",
102
+ "sha256": "207efe7b897a2704ec8a22163f02891ac1a17d521e8a44f4556e59d60a6de19f",
103
103
  "executable": false
104
104
  },
105
105
  {
106
106
  "path": "CLAUDE.md",
107
- "sha256": "7a624c175486712f08ad5ad45c7979db1c1d0db35f3bfd2c4a068585b7f23f13",
107
+ "sha256": "207efe7b897a2704ec8a22163f02891ac1a17d521e8a44f4556e59d60a6de19f",
108
108
  "executable": false
109
109
  },
110
110
  {
@@ -134,17 +134,17 @@
134
134
  },
135
135
  {
136
136
  "path": "bin/engines.js",
137
- "sha256": "299b6166c37e51100171435bf09ea776281e0415c807b3d07fe42bf3576e6af8",
137
+ "sha256": "7c1910a2b399d61c4dd8e576244e6bfe91215581f599cb84fc763487a3bce743",
138
138
  "executable": false
139
139
  },
140
140
  {
141
141
  "path": "bin/harness-activation.js",
142
- "sha256": "49e80301845d550dea4d3b651de8229abe2068e806875814165c64677a21a12f",
142
+ "sha256": "e5428bf6fb2dc40e0f7bebcc834b54573c0b8c648570fea8bd51774d5e865727",
143
143
  "executable": false
144
144
  },
145
145
  {
146
146
  "path": "bin/harness-context.js",
147
- "sha256": "6b2e8d35592305c533bc0c3ee63a3655e1f51620a4baad977cb2f31f6b60d2c2",
147
+ "sha256": "2d2cd812fec2db659b7bb8b40f22fa10acde1c754c16265b81994645a9bfc29f",
148
148
  "executable": false
149
149
  },
150
150
  {
@@ -159,7 +159,7 @@
159
159
  },
160
160
  {
161
161
  "path": "bin/instruction-templates.json",
162
- "sha256": "5a46284e5d7024e406b7c2e55eb53beb9253108abb890bf550358bdde82ee4e6",
162
+ "sha256": "6e8998bcfa674c32fc92dc48c3e9b83e07fe7b48c3ae203e0943ae837181f473",
163
163
  "executable": false
164
164
  },
165
165
  {
@@ -174,7 +174,7 @@
174
174
  },
175
175
  {
176
176
  "path": "bin/skill-history.json",
177
- "sha256": "a4d39a9cb232c2b0f73cec671a4626a30dad191a345a4be8e630c2eefc80fd9b",
177
+ "sha256": "4a409eac690da7f3611c67a4fd5e3d9abb354199848bffff27ac441a6a491878",
178
178
  "executable": false
179
179
  },
180
180
  {
@@ -219,7 +219,7 @@
219
219
  },
220
220
  {
221
221
  "path": "config/skills/_shared/engine-preflight.md",
222
- "sha256": "09c12a9e86e77333231370ddb1de5184fe390ff97fd75fa94329ea0caaa271be",
222
+ "sha256": "d1cc430847a659fe0ea946ce09bfac30ec2596ce8707c5bf280e60f24a0771fb",
223
223
  "executable": false
224
224
  },
225
225
  {
@@ -259,7 +259,7 @@
259
259
  },
260
260
  {
261
261
  "path": "config/skills/_shared/runtime-principles.md",
262
- "sha256": "f1c0647e8da37b900c5d83487948dc85d4663275e0f0a282e9d49df219f9b085",
262
+ "sha256": "7492c2e1854ef6b0aef8cf1f5dd85e612ed954cff90196ec7c17cc47d12c9937",
263
263
  "executable": false
264
264
  },
265
265
  {
@@ -279,7 +279,7 @@
279
279
  },
280
280
  {
281
281
  "path": "config/skills/_shared/task-completion.md",
282
- "sha256": "7466b99c4323dd2790ac76d964b6c8a676557a7401897cf74a3ad1ea640be004",
282
+ "sha256": "3b75502d363ba5fa3b45c06a1f3e0de7c88e609d4f91c41d75287a0acccdd504",
283
283
  "executable": false
284
284
  },
285
285
  {
@@ -309,17 +309,17 @@
309
309
  },
310
310
  {
311
311
  "path": "config/skills/devlyn-ideate/references/executor.md",
312
- "sha256": "aa53076dffa1fcf49e2350206b5f0ba73306b92ccce3502160dca4f26113e4be",
312
+ "sha256": "40582ff8fad59f09fe327ac4f232463b6c55a91be1288c7470f7c8c0b3da95fe",
313
313
  "executable": false
314
314
  },
315
315
  {
316
316
  "path": "config/skills/devlyn-ideate/references/loop.md",
317
- "sha256": "dc8907a01727fc8e866d659004ca2e7e4642252793b70adc2d10e61812ee92d6",
317
+ "sha256": "ad64d90fb775b05ef774c2457fc9d994b062e17e017da07054be0d93d83e533f",
318
318
  "executable": false
319
319
  },
320
320
  {
321
321
  "path": "config/skills/devlyn-ideate/references/package-format.md",
322
- "sha256": "8d295f6d97d3acaca4ca867447cf95e8cf141cbc7d9f05598ec72c1156f8d87c",
322
+ "sha256": "0b7c780db5f8e3149f1da5802ad5d9def7d60b46d21699807c72c997fe2d67fc",
323
323
  "executable": false
324
324
  },
325
325
  {
@@ -344,17 +344,17 @@
344
344
  },
345
345
  {
346
346
  "path": "harness/AGENTS.md",
347
- "sha256": "5f5522addafc26ff778e24552b3bdbeb41412f82881032bc91621ff392cd40d5",
347
+ "sha256": "9c3daa27f67af1feff420f14d7c53cfbc905b7e72e2d32cc47bc8f2a6cbe3555",
348
348
  "executable": false
349
349
  },
350
350
  {
351
351
  "path": "harness/CLAUDE.md",
352
- "sha256": "5f5522addafc26ff778e24552b3bdbeb41412f82881032bc91621ff392cd40d5",
352
+ "sha256": "9c3daa27f67af1feff420f14d7c53cfbc905b7e72e2d32cc47bc8f2a6cbe3555",
353
353
  "executable": false
354
354
  },
355
355
  {
356
356
  "path": "native/claude/.claude-plugin/plugin.json",
357
- "sha256": "b5df06d3ba91c79bb1fa8e10ceed26f462010f410777e4427f7fe45b8177cfe6",
357
+ "sha256": "a70dddfa4b8c6095d52066ae94fa4c0ff2223d2c601614b825d59c3de5a313f3",
358
358
  "executable": false
359
359
  },
360
360
  {
@@ -394,7 +394,7 @@
394
394
  },
395
395
  {
396
396
  "path": "native/claude/skills/_shared/engine-preflight.md",
397
- "sha256": "09c12a9e86e77333231370ddb1de5184fe390ff97fd75fa94329ea0caaa271be",
397
+ "sha256": "d1cc430847a659fe0ea946ce09bfac30ec2596ce8707c5bf280e60f24a0771fb",
398
398
  "executable": false
399
399
  },
400
400
  {
@@ -434,7 +434,7 @@
434
434
  },
435
435
  {
436
436
  "path": "native/claude/skills/_shared/runtime-principles.md",
437
- "sha256": "f1c0647e8da37b900c5d83487948dc85d4663275e0f0a282e9d49df219f9b085",
437
+ "sha256": "7492c2e1854ef6b0aef8cf1f5dd85e612ed954cff90196ec7c17cc47d12c9937",
438
438
  "executable": false
439
439
  },
440
440
  {
@@ -454,7 +454,7 @@
454
454
  },
455
455
  {
456
456
  "path": "native/claude/skills/_shared/task-completion.md",
457
- "sha256": "7466b99c4323dd2790ac76d964b6c8a676557a7401897cf74a3ad1ea640be004",
457
+ "sha256": "3b75502d363ba5fa3b45c06a1f3e0de7c88e609d4f91c41d75287a0acccdd504",
458
458
  "executable": false
459
459
  },
460
460
  {
@@ -484,17 +484,17 @@
484
484
  },
485
485
  {
486
486
  "path": "native/claude/skills/devlyn-ideate/references/executor.md",
487
- "sha256": "aa53076dffa1fcf49e2350206b5f0ba73306b92ccce3502160dca4f26113e4be",
487
+ "sha256": "40582ff8fad59f09fe327ac4f232463b6c55a91be1288c7470f7c8c0b3da95fe",
488
488
  "executable": false
489
489
  },
490
490
  {
491
491
  "path": "native/claude/skills/devlyn-ideate/references/loop.md",
492
- "sha256": "dc8907a01727fc8e866d659004ca2e7e4642252793b70adc2d10e61812ee92d6",
492
+ "sha256": "ad64d90fb775b05ef774c2457fc9d994b062e17e017da07054be0d93d83e533f",
493
493
  "executable": false
494
494
  },
495
495
  {
496
496
  "path": "native/claude/skills/devlyn-ideate/references/package-format.md",
497
- "sha256": "8d295f6d97d3acaca4ca867447cf95e8cf141cbc7d9f05598ec72c1156f8d87c",
497
+ "sha256": "0b7c780db5f8e3149f1da5802ad5d9def7d60b46d21699807c72c997fe2d67fc",
498
498
  "executable": false
499
499
  },
500
500
  {
@@ -514,12 +514,12 @@
514
514
  },
515
515
  {
516
516
  "path": "native/codex/.agents/plugins/marketplace.json",
517
- "sha256": "235c0de55f65d76155982567747b458ab9800f9f95d39f134a4bdb98336b5ecc",
517
+ "sha256": "dd4ae6ddb1bad7d6670af67cbfc15de7bc1538a8a0a01c8f039bdf75bd981bd9",
518
518
  "executable": false
519
519
  },
520
520
  {
521
521
  "path": "native/codex/plugins/devlyn/.codex-plugin/plugin.json",
522
- "sha256": "b5df06d3ba91c79bb1fa8e10ceed26f462010f410777e4427f7fe45b8177cfe6",
522
+ "sha256": "a70dddfa4b8c6095d52066ae94fa4c0ff2223d2c601614b825d59c3de5a313f3",
523
523
  "executable": false
524
524
  },
525
525
  {
@@ -559,7 +559,7 @@
559
559
  },
560
560
  {
561
561
  "path": "native/codex/plugins/devlyn/skills/_shared/engine-preflight.md",
562
- "sha256": "09c12a9e86e77333231370ddb1de5184fe390ff97fd75fa94329ea0caaa271be",
562
+ "sha256": "d1cc430847a659fe0ea946ce09bfac30ec2596ce8707c5bf280e60f24a0771fb",
563
563
  "executable": false
564
564
  },
565
565
  {
@@ -599,7 +599,7 @@
599
599
  },
600
600
  {
601
601
  "path": "native/codex/plugins/devlyn/skills/_shared/runtime-principles.md",
602
- "sha256": "f1c0647e8da37b900c5d83487948dc85d4663275e0f0a282e9d49df219f9b085",
602
+ "sha256": "7492c2e1854ef6b0aef8cf1f5dd85e612ed954cff90196ec7c17cc47d12c9937",
603
603
  "executable": false
604
604
  },
605
605
  {
@@ -619,7 +619,7 @@
619
619
  },
620
620
  {
621
621
  "path": "native/codex/plugins/devlyn/skills/_shared/task-completion.md",
622
- "sha256": "7466b99c4323dd2790ac76d964b6c8a676557a7401897cf74a3ad1ea640be004",
622
+ "sha256": "3b75502d363ba5fa3b45c06a1f3e0de7c88e609d4f91c41d75287a0acccdd504",
623
623
  "executable": false
624
624
  },
625
625
  {
@@ -649,17 +649,17 @@
649
649
  },
650
650
  {
651
651
  "path": "native/codex/plugins/devlyn/skills/devlyn-ideate/references/executor.md",
652
- "sha256": "aa53076dffa1fcf49e2350206b5f0ba73306b92ccce3502160dca4f26113e4be",
652
+ "sha256": "40582ff8fad59f09fe327ac4f232463b6c55a91be1288c7470f7c8c0b3da95fe",
653
653
  "executable": false
654
654
  },
655
655
  {
656
656
  "path": "native/codex/plugins/devlyn/skills/devlyn-ideate/references/loop.md",
657
- "sha256": "dc8907a01727fc8e866d659004ca2e7e4642252793b70adc2d10e61812ee92d6",
657
+ "sha256": "ad64d90fb775b05ef774c2457fc9d994b062e17e017da07054be0d93d83e533f",
658
658
  "executable": false
659
659
  },
660
660
  {
661
661
  "path": "native/codex/plugins/devlyn/skills/devlyn-ideate/references/package-format.md",
662
- "sha256": "8d295f6d97d3acaca4ca867447cf95e8cf141cbc7d9f05598ec72c1156f8d87c",
662
+ "sha256": "0b7c780db5f8e3149f1da5802ad5d9def7d60b46d21699807c72c997fe2d67fc",
663
663
  "executable": false
664
664
  },
665
665
  {
@@ -1554,7 +1554,7 @@
1554
1554
  },
1555
1555
  {
1556
1556
  "path": "optional-skills/code-review-standards/SKILL.md",
1557
- "sha256": "3f11f84adb7d3016c4d71bce743c40e35e682d09bc9376b03be957fc9c8d2b62",
1557
+ "sha256": "24b5ffaea6876575cf9ae70ff8fb1f4b5a75633f5a7a976a87da82630d62a34f",
1558
1558
  "executable": false
1559
1559
  },
1560
1560
  {
@@ -1819,12 +1819,12 @@
1819
1819
  },
1820
1820
  {
1821
1821
  "path": "package.json",
1822
- "sha256": "871e2644320f977a82b1adb183423c2775456da1922bf45a7b72aa5e54f9d576",
1822
+ "sha256": "1e85c3e53275ab575d882ab87040c79d5f5c0edc4202f1503c576cca797a0446",
1823
1823
  "executable": false
1824
1824
  }
1825
1825
  ],
1826
1826
  "digest": {
1827
1827
  "algorithm": "sha256",
1828
- "value": "1ce25067c67dc184bc312fafc2e7ac382fbce2e6d348296bc5975752c5219743"
1828
+ "value": "7be19f082103d694d2c85ab15c7687e43b0e6038903b8b3e997c3744f7ee647e"
1829
1829
  }
1830
1830
  }