devrites 4.0.3 → 4.0.4

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 (21) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +13 -1
  4. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +4 -2
  5. package/pack/.claude/skills/rite-autocomplete/SKILL.md +3 -0
  6. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +14 -4
  7. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +1 -1
  8. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +1 -1
  9. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +13 -1
  10. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +4 -2
  11. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +3 -0
  12. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +14 -4
  13. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +1 -1
  14. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +1 -1
  15. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +13 -1
  16. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +4 -2
  17. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +3 -0
  18. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +14 -4
  19. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +1 -1
  20. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +1 -1
  21. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
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
+ ## [4.0.4](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.3...v4.0.4) (2026-08-07)
6
+
7
+ ### Fixed
8
+
9
+ * **rite:** stop exhausted recovery loops ([6618c9e](https://github.com/ViktorsBaikers/DevRites/commit/6618c9e8a532d5d243576dbb4c338505c916376a))
10
+
5
11
  ## [4.0.3](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.2...v4.0.3) (2026-08-07)
6
12
 
7
13
  ### Fixed
package/README.md CHANGED
@@ -28,7 +28,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
28
28
  Unattended runs may create local WIP checkpoint commits along the way, but they
29
29
  remain local unless Ship's disclosed plan includes an approved remote action.
30
30
 
31
- **Status:** [`v4.0.3`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v4.0.3): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
31
+ **Status:** [`v4.0.4`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v4.0.4): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
32
32
 
33
33
  This is the latest published release; `main` may contain unreleased work.
34
34
 
@@ -56,4 +56,16 @@ Record: .devrites/archive/<slug>/ship.md
56
56
  ```
57
57
 
58
58
  Claims such as proved, reviewed, sealed, shipped, or complete must point to real
59
- output or an artifact. Use exactly one recommended next action.
59
+ output or an artifact. Use exactly one recommended next action except for
60
+ terminal agent-owned technical exhaustion, which has no runnable action.
61
+
62
+ For that terminal case use:
63
+
64
+ ```text
65
+ Stopped: Technical recovery exhausted
66
+ Blocking: <causal fingerprint and invariant>
67
+ Attempts: <three failed approaches and decisive reproduction>
68
+ No runnable recovery command: unchanged reinvocation remains blocked
69
+ Next: none — requires new evidence or changed failure conditions
70
+ Record: <artifact path>
71
+ ```
@@ -240,8 +240,10 @@ changes, not a request for permission to retry.
240
240
  make a fourth unchanged or related attempt for the same root cause. There is
241
241
  no recovery counter file or command.
242
242
  - **Classify exhaustion:** human-owned contract/risk/access gaps open their gate. Otherwise
243
- preserve reproduction/dead ends, set `Status: blocked` and `Next step: /rite-plan unblock`,
244
- with no question or `/rite-resolve`.
243
+ preserve reproduction/dead ends, set `Status: blocked` and `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`.
244
+ Do not emit `/rite-plan unblock`, another phase command, a question, or
245
+ `/rite-resolve`. Reinvocation with the unchanged fingerprint remains blocked
246
+ and never resets the retry cap.
245
247
  - **Reassess no-progress loops:** After repeated attempts without progress, stop and
246
248
  reassess the failure and approach rather than continuing blindly.
247
249
  - **Resolve agent-owned questions first.** Before raising a question, try to answer it from the code, the docs,
@@ -92,6 +92,9 @@ default and **Full** for high-risk scope or explicit `--full`; profiles are defi
92
92
  5. **Apply stop conditions at every gate** ([reference/stop-conditions.md](reference/stop-conditions.md)):
93
93
  on hard-risk / blocking / escalating / NO-GO / budget-exhausted / still-low-confidence
94
94
  → write `state.md` (`Status`, `Next step`), surface *why*, and **STOP**.
95
+ Exhausted agent-owned technical recovery uses the terminal `Next step: none`
96
+ marker and never hands the user `/rite-plan unblock` or another routine
97
+ phase command.
95
98
  **Completion:** either no stop condition is active, or the stopped cursor and reason
96
99
  are durable and no later phase has been invoked.
97
100
  6. **Seal GO → ship boundary.** With `--ship` / `--yolo`, proceed through
@@ -1,8 +1,10 @@
1
1
  # Stop conditions: when autocomplete must pause for a human
2
2
 
3
3
  On these conditions, write `state.md` (`awaiting_human` or `blocked`), report
4
- the reason and one resume command, notify if configured, and stop. `--ship`
5
- cannot bypass them.
4
+ the reason and one resume command when an actual human/safety/access action can
5
+ change the state, notify if configured, and stop. Exhausted agent-owned
6
+ technical recovery is terminal for its unchanged causal fingerprint: record
7
+ `Next step: none` and no runnable recovery command. `--ship` cannot bypass them.
6
8
 
7
9
  ## Always stop (irreversible-risk list: from `afk-hitl.md`)
8
10
 
@@ -25,6 +27,10 @@ and any bounded remediation, then resumes the originating phase. Persist
25
27
  submit. Stop only when recovery is exhausted or the remaining choice is a real
26
28
  human/safety/access gate.
27
29
 
30
+ On technical exhaustion, preserve the fingerprint, reproduction, attempts, and
31
+ dead ends, then stop without `/rite-plan unblock` or another phase command.
32
+ Reinvocation with unchanged evidence remains blocked and does not reset the cap.
33
+
28
34
  ## Stop on gate severity
29
35
 
30
36
  - `blocking` gate fires → synchronous pause.
@@ -69,6 +75,10 @@ human/safety/access gate.
69
75
  ## How to stop well
70
76
 
71
77
  State must be enough for a fresh agent to resume cold:
72
- - `state.md`: `Status`, the blocking reason, and a single `Next step` command.
78
+ - `state.md`: `Status`, the blocking reason, and either a single actionable
79
+ `Next step` command or the terminal `none — technical recovery exhausted`
80
+ marker.
73
81
  - The relevant `questions.md` / `drift.md` / `seal.md` entry that explains the pause.
74
- - A one-line user-facing message: *what* stopped it and *what command* resumes.
82
+ - A one-line user-facing message: *what* stopped it and, only when one exists,
83
+ *what human-owned action* resumes. A terminal technical blocker names no
84
+ routine Plan/Vet/retry command.
@@ -75,7 +75,7 @@ The fail-on-red path:
75
75
  2. Green → record the slice. Product-contract/irreversible ambiguity → write the genuine
76
76
  human gate. Missing human-only credential/permission → write a human-intervention gate.
77
77
  3. Any other exhausted objective failure → set `Status: blocked`, preserve the reproduction,
78
- set `Next step: /rite-plan unblock`, and STOP without a qid.
78
+ set `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`, and STOP without a qid or runnable phase command. Reinvocation with the unchanged fingerprint remains blocked and does not reset the cap.
79
79
  4. Fire `notify:` only for an actual `awaiting_human` transition.
80
80
 
81
81
  AFK never starts the next slice while checks are red and never asks the human to approve
@@ -104,7 +104,7 @@ None.
104
104
  | active_slice | none |
105
105
  | slice_mode | none |
106
106
  | risk | none |
107
- | next_action | <single command + reason> |
107
+ | next_action | <single command + reason, or terminal: none — technical recovery exhausted for an unchanged causal fingerprint> |
108
108
  | return_phase | <originating later phase; clarification or agent-owned technical backtracking only> |
109
109
  | return_next_action | <saved originating command> |
110
110
 
@@ -56,4 +56,16 @@ Record: .devrites/archive/<slug>/ship.md
56
56
  ```
57
57
 
58
58
  Claims such as proved, reviewed, sealed, shipped, or complete must point to real
59
- output or an artifact. Use exactly one recommended next action.
59
+ output or an artifact. Use exactly one recommended next action except for
60
+ terminal agent-owned technical exhaustion, which has no runnable action.
61
+
62
+ For that terminal case use:
63
+
64
+ ```text
65
+ Stopped: Technical recovery exhausted
66
+ Blocking: <causal fingerprint and invariant>
67
+ Attempts: <three failed approaches and decisive reproduction>
68
+ No runnable recovery command: unchanged reinvocation remains blocked
69
+ Next: none — requires new evidence or changed failure conditions
70
+ Record: <artifact path>
71
+ ```
@@ -240,8 +240,10 @@ changes, not a request for permission to retry.
240
240
  make a fourth unchanged or related attempt for the same root cause. There is
241
241
  no recovery counter file or command.
242
242
  - **Classify exhaustion:** human-owned contract/risk/access gaps open their gate. Otherwise
243
- preserve reproduction/dead ends, set `Status: blocked` and `Next step: /rite-plan unblock`,
244
- with no question or `/rite-resolve`.
243
+ preserve reproduction/dead ends, set `Status: blocked` and `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`.
244
+ Do not emit `/rite-plan unblock`, another phase command, a question, or
245
+ `/rite-resolve`. Reinvocation with the unchanged fingerprint remains blocked
246
+ and never resets the retry cap.
245
247
  - **Reassess no-progress loops:** After repeated attempts without progress, stop and
246
248
  reassess the failure and approach rather than continuing blindly.
247
249
  - **Resolve agent-owned questions first.** Before raising a question, try to answer it from the code, the docs,
@@ -92,6 +92,9 @@ default and **Full** for high-risk scope or explicit `--full`; profiles are defi
92
92
  5. **Apply stop conditions at every gate** ([reference/stop-conditions.md](reference/stop-conditions.md)):
93
93
  on hard-risk / blocking / escalating / NO-GO / budget-exhausted / still-low-confidence
94
94
  → write `state.md` (`Status`, `Next step`), surface *why*, and **STOP**.
95
+ Exhausted agent-owned technical recovery uses the terminal `Next step: none`
96
+ marker and never hands the user `/rite-plan unblock` or another routine
97
+ phase command.
95
98
  **Completion:** either no stop condition is active, or the stopped cursor and reason
96
99
  are durable and no later phase has been invoked.
97
100
  6. **Seal GO → ship boundary.** With `--ship` / `--yolo`, proceed through
@@ -1,8 +1,10 @@
1
1
  # Stop conditions: when autocomplete must pause for a human
2
2
 
3
3
  On these conditions, write `state.md` (`awaiting_human` or `blocked`), report
4
- the reason and one resume command, notify if configured, and stop. `--ship`
5
- cannot bypass them.
4
+ the reason and one resume command when an actual human/safety/access action can
5
+ change the state, notify if configured, and stop. Exhausted agent-owned
6
+ technical recovery is terminal for its unchanged causal fingerprint: record
7
+ `Next step: none` and no runnable recovery command. `--ship` cannot bypass them.
6
8
 
7
9
  ## Always stop (irreversible-risk list: from `afk-hitl.md`)
8
10
 
@@ -25,6 +27,10 @@ and any bounded remediation, then resumes the originating phase. Persist
25
27
  submit. Stop only when recovery is exhausted or the remaining choice is a real
26
28
  human/safety/access gate.
27
29
 
30
+ On technical exhaustion, preserve the fingerprint, reproduction, attempts, and
31
+ dead ends, then stop without `/rite-plan unblock` or another phase command.
32
+ Reinvocation with unchanged evidence remains blocked and does not reset the cap.
33
+
28
34
  ## Stop on gate severity
29
35
 
30
36
  - `blocking` gate fires → synchronous pause.
@@ -69,6 +75,10 @@ human/safety/access gate.
69
75
  ## How to stop well
70
76
 
71
77
  State must be enough for a fresh agent to resume cold:
72
- - `state.md`: `Status`, the blocking reason, and a single `Next step` command.
78
+ - `state.md`: `Status`, the blocking reason, and either a single actionable
79
+ `Next step` command or the terminal `none — technical recovery exhausted`
80
+ marker.
73
81
  - The relevant `questions.md` / `drift.md` / `seal.md` entry that explains the pause.
74
- - A one-line user-facing message: *what* stopped it and *what command* resumes.
82
+ - A one-line user-facing message: *what* stopped it and, only when one exists,
83
+ *what human-owned action* resumes. A terminal technical blocker names no
84
+ routine Plan/Vet/retry command.
@@ -75,7 +75,7 @@ The fail-on-red path:
75
75
  2. Green → record the slice. Product-contract/irreversible ambiguity → write the genuine
76
76
  human gate. Missing human-only credential/permission → write a human-intervention gate.
77
77
  3. Any other exhausted objective failure → set `Status: blocked`, preserve the reproduction,
78
- set `Next step: /rite-plan unblock`, and STOP without a qid.
78
+ set `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`, and STOP without a qid or runnable phase command. Reinvocation with the unchanged fingerprint remains blocked and does not reset the cap.
79
79
  4. Fire `notify:` only for an actual `awaiting_human` transition.
80
80
 
81
81
  AFK never starts the next slice while checks are red and never asks the human to approve
@@ -104,7 +104,7 @@ None.
104
104
  | active_slice | none |
105
105
  | slice_mode | none |
106
106
  | risk | none |
107
- | next_action | <single command + reason> |
107
+ | next_action | <single command + reason, or terminal: none — technical recovery exhausted for an unchanged causal fingerprint> |
108
108
  | return_phase | <originating later phase; clarification or agent-owned technical backtracking only> |
109
109
  | return_next_action | <saved originating command> |
110
110
 
@@ -56,4 +56,16 @@ Record: .devrites/archive/<slug>/ship.md
56
56
  ```
57
57
 
58
58
  Claims such as proved, reviewed, sealed, shipped, or complete must point to real
59
- output or an artifact. Use exactly one recommended next action.
59
+ output or an artifact. Use exactly one recommended next action except for
60
+ terminal agent-owned technical exhaustion, which has no runnable action.
61
+
62
+ For that terminal case use:
63
+
64
+ ```text
65
+ Stopped: Technical recovery exhausted
66
+ Blocking: <causal fingerprint and invariant>
67
+ Attempts: <three failed approaches and decisive reproduction>
68
+ No runnable recovery command: unchanged reinvocation remains blocked
69
+ Next: none — requires new evidence or changed failure conditions
70
+ Record: <artifact path>
71
+ ```
@@ -240,8 +240,10 @@ changes, not a request for permission to retry.
240
240
  make a fourth unchanged or related attempt for the same root cause. There is
241
241
  no recovery counter file or command.
242
242
  - **Classify exhaustion:** human-owned contract/risk/access gaps open their gate. Otherwise
243
- preserve reproduction/dead ends, set `Status: blocked` and `Next step: $rite-plan unblock`,
244
- with no question or `$rite-resolve`.
243
+ preserve reproduction/dead ends, set `Status: blocked` and `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`.
244
+ Do not emit `$rite-plan unblock`, another phase command, a question, or
245
+ `$rite-resolve`. Reinvocation with the unchanged fingerprint remains blocked
246
+ and never resets the retry cap.
245
247
  - **Reassess no-progress loops:** After repeated attempts without progress, stop and
246
248
  reassess the failure and approach rather than continuing blindly.
247
249
  - **Resolve agent-owned questions first.** Before raising a question, try to answer it from the code, the docs,
@@ -92,6 +92,9 @@ default and **Full** for high-risk scope or explicit `--full`; profiles are defi
92
92
  5. **Apply stop conditions at every gate** ([reference/stop-conditions.md](reference/stop-conditions.md)):
93
93
  on hard-risk / blocking / escalating / NO-GO / budget-exhausted / still-low-confidence
94
94
  → write `state.md` (`Status`, `Next step`), surface *why*, and **STOP**.
95
+ Exhausted agent-owned technical recovery uses the terminal `Next step: none`
96
+ marker and never hands the user `$rite-plan unblock` or another routine
97
+ phase command.
95
98
  **Completion:** either no stop condition is active, or the stopped cursor and reason
96
99
  are durable and no later phase has been invoked.
97
100
  6. **Seal GO → ship boundary.** With `--ship` / `--yolo`, proceed through
@@ -1,8 +1,10 @@
1
1
  # Stop conditions: when autocomplete must pause for a human
2
2
 
3
3
  On these conditions, write `state.md` (`awaiting_human` or `blocked`), report
4
- the reason and one resume command, notify if configured, and stop. `--ship`
5
- cannot bypass them.
4
+ the reason and one resume command when an actual human/safety/access action can
5
+ change the state, notify if configured, and stop. Exhausted agent-owned
6
+ technical recovery is terminal for its unchanged causal fingerprint: record
7
+ `Next step: none` and no runnable recovery command. `--ship` cannot bypass them.
6
8
 
7
9
  ## Always stop (irreversible-risk list: from `afk-hitl.md`)
8
10
 
@@ -25,6 +27,10 @@ and any bounded remediation, then resumes the originating phase. Persist
25
27
  submit. Stop only when recovery is exhausted or the remaining choice is a real
26
28
  human/safety/access gate.
27
29
 
30
+ On technical exhaustion, preserve the fingerprint, reproduction, attempts, and
31
+ dead ends, then stop without `$rite-plan unblock` or another phase command.
32
+ Reinvocation with unchanged evidence remains blocked and does not reset the cap.
33
+
28
34
  ## Stop on gate severity
29
35
 
30
36
  - `blocking` gate fires → synchronous pause.
@@ -69,6 +75,10 @@ human/safety/access gate.
69
75
  ## How to stop well
70
76
 
71
77
  State must be enough for a fresh agent to resume cold:
72
- - `state.md`: `Status`, the blocking reason, and a single `Next step` command.
78
+ - `state.md`: `Status`, the blocking reason, and either a single actionable
79
+ `Next step` command or the terminal `none — technical recovery exhausted`
80
+ marker.
73
81
  - The relevant `questions.md` / `drift.md` / `seal.md` entry that explains the pause.
74
- - A one-line user-facing message: *what* stopped it and *what command* resumes.
82
+ - A one-line user-facing message: *what* stopped it and, only when one exists,
83
+ *what human-owned action* resumes. A terminal technical blocker names no
84
+ routine Plan/Vet/retry command.
@@ -75,7 +75,7 @@ The fail-on-red path:
75
75
  2. Green → record the slice. Product-contract/irreversible ambiguity → write the genuine
76
76
  human gate. Missing human-only credential/permission → write a human-intervention gate.
77
77
  3. Any other exhausted objective failure → set `Status: blocked`, preserve the reproduction,
78
- set `Next step: $rite-plan unblock`, and STOP without a qid.
78
+ set `Next step: none — technical recovery exhausted for <causal fingerprint>; requires new evidence or changed failure conditions`, and STOP without a qid or runnable phase command. Reinvocation with the unchanged fingerprint remains blocked and does not reset the cap.
79
79
  4. Fire `notify:` only for an actual `awaiting_human` transition.
80
80
 
81
81
  AFK never starts the next slice while checks are red and never asks the human to approve
@@ -104,7 +104,7 @@ None.
104
104
  | active_slice | none |
105
105
  | slice_mode | none |
106
106
  | risk | none |
107
- | next_action | <single command + reason> |
107
+ | next_action | <single command + reason, or terminal: none — technical recovery exhausted for an unchanged causal fingerprint> |
108
108
  | return_phase | <originating later phase; clarification or agent-owned technical backtracking only> |
109
109
  | return_next_action | <saved originating command> |
110
110
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "4.0.3",
3
+ "version": "4.0.4",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code and Codex",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",