@garygentry/feature-forge 0.3.8 → 0.3.9

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 (196) hide show
  1. package/README.md +1 -1
  2. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  3. package/adapters/claude/.feature-forge-bundle.json +1 -1
  4. package/adapters/claude/hooks/hooks.json +15 -0
  5. package/adapters/claude/references/forge-config-schema.json +2 -2
  6. package/adapters/claude/references/preflight-and-self-heal.md +1 -1
  7. package/adapters/claude/references/ralph-loop-contract.md +5 -3
  8. package/adapters/claude/references/stage-exit-protocol.md +1 -1
  9. package/adapters/claude/references/vendor-construct-inventory.md +1 -1
  10. package/adapters/claude/scripts/forge-session.py +6 -1
  11. package/adapters/claude/scripts/forge_session/cli.py +2 -1
  12. package/adapters/claude/scripts/forge_session/doctor.py +42 -2
  13. package/adapters/claude/scripts/forge_session/exit.py +5 -5
  14. package/adapters/claude/scripts/forge_session/routes.py +30 -3
  15. package/adapters/claude/scripts/session-check.sh +16 -0
  16. package/adapters/claude/skills/forge/references/stage-exit-protocol.md +1 -1
  17. package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  18. package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  19. package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  20. package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  21. package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  22. package/adapters/claude/skills/forge-5-loop/SKILL.md +12 -22
  23. package/adapters/claude/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  24. package/adapters/claude/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  25. package/adapters/claude/skills/forge-5-loop/references/result-reporting.md +78 -16
  26. package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +111 -12
  27. package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  28. package/adapters/claude/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  29. package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  30. package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +2 -2
  31. package/adapters/claude/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  32. package/adapters/claude/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  33. package/adapters/claude/skills/forge-init/SKILL.md +7 -5
  34. package/adapters/claude/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  35. package/adapters/claude/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  36. package/adapters/codex/.feature-forge-bundle.json +1 -1
  37. package/adapters/codex/references/forge-config-schema.json +2 -2
  38. package/adapters/codex/references/preflight-and-self-heal.md +1 -1
  39. package/adapters/codex/references/ralph-loop-contract.md +5 -3
  40. package/adapters/codex/references/stage-exit-protocol.md +1 -1
  41. package/adapters/codex/references/vendor-construct-inventory.md +1 -1
  42. package/adapters/codex/scripts/forge-session.py +6 -1
  43. package/adapters/codex/scripts/forge_session/cli.py +2 -1
  44. package/adapters/codex/scripts/forge_session/doctor.py +42 -2
  45. package/adapters/codex/scripts/forge_session/exit.py +5 -5
  46. package/adapters/codex/scripts/forge_session/routes.py +30 -3
  47. package/adapters/codex/skills/forge/references/stage-exit-protocol.md +1 -1
  48. package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  49. package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  50. package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  51. package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  52. package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  53. package/adapters/codex/skills/forge-5-loop/SKILL.md +12 -22
  54. package/adapters/codex/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  55. package/adapters/codex/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  56. package/adapters/codex/skills/forge-5-loop/references/result-reporting.md +78 -16
  57. package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +111 -12
  58. package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  59. package/adapters/codex/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  60. package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  61. package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +2 -2
  62. package/adapters/codex/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  63. package/adapters/codex/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  64. package/adapters/codex/skills/forge-init/SKILL.md +7 -5
  65. package/adapters/codex/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  66. package/adapters/codex/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  67. package/adapters/copilot/.feature-forge-bundle.json +1 -1
  68. package/adapters/copilot/references/forge-config-schema.json +2 -2
  69. package/adapters/copilot/references/preflight-and-self-heal.md +1 -1
  70. package/adapters/copilot/references/ralph-loop-contract.md +5 -3
  71. package/adapters/copilot/references/stage-exit-protocol.md +1 -1
  72. package/adapters/copilot/references/vendor-construct-inventory.md +1 -1
  73. package/adapters/copilot/scripts/forge-session.py +6 -1
  74. package/adapters/copilot/scripts/forge_session/cli.py +2 -1
  75. package/adapters/copilot/scripts/forge_session/doctor.py +42 -2
  76. package/adapters/copilot/scripts/forge_session/exit.py +5 -5
  77. package/adapters/copilot/scripts/forge_session/routes.py +30 -3
  78. package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +1 -1
  79. package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  80. package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  81. package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  82. package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  83. package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  84. package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +12 -22
  85. package/adapters/copilot/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  86. package/adapters/copilot/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  87. package/adapters/copilot/skills/forge-5-loop/references/result-reporting.md +78 -16
  88. package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +111 -12
  89. package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  90. package/adapters/copilot/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  91. package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  92. package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +2 -2
  93. package/adapters/copilot/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  94. package/adapters/copilot/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  95. package/adapters/copilot/skills/forge-init/forge-init.md +7 -5
  96. package/adapters/copilot/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  97. package/adapters/copilot/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  98. package/adapters/cursor/.feature-forge-bundle.json +1 -1
  99. package/adapters/cursor/references/forge-config-schema.json +2 -2
  100. package/adapters/cursor/references/preflight-and-self-heal.md +1 -1
  101. package/adapters/cursor/references/ralph-loop-contract.md +5 -3
  102. package/adapters/cursor/references/stage-exit-protocol.md +1 -1
  103. package/adapters/cursor/references/vendor-construct-inventory.md +1 -1
  104. package/adapters/cursor/scripts/forge-session.py +6 -1
  105. package/adapters/cursor/scripts/forge_session/cli.py +2 -1
  106. package/adapters/cursor/scripts/forge_session/doctor.py +42 -2
  107. package/adapters/cursor/scripts/forge_session/exit.py +5 -5
  108. package/adapters/cursor/scripts/forge_session/routes.py +30 -3
  109. package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +1 -1
  110. package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  111. package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  112. package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  113. package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  114. package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  115. package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +12 -22
  116. package/adapters/cursor/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  117. package/adapters/cursor/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  118. package/adapters/cursor/skills/forge-5-loop/references/result-reporting.md +78 -16
  119. package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +111 -12
  120. package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  121. package/adapters/cursor/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  122. package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  123. package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +2 -2
  124. package/adapters/cursor/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  125. package/adapters/cursor/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  126. package/adapters/cursor/skills/forge-init/forge-init.mdc +7 -5
  127. package/adapters/cursor/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  128. package/adapters/cursor/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  129. package/adapters/gemini/.feature-forge-bundle.json +1 -1
  130. package/adapters/gemini/gemini-extension.json +1 -1
  131. package/adapters/gemini/references/forge-config-schema.json +2 -2
  132. package/adapters/gemini/references/preflight-and-self-heal.md +1 -1
  133. package/adapters/gemini/references/ralph-loop-contract.md +5 -3
  134. package/adapters/gemini/references/stage-exit-protocol.md +1 -1
  135. package/adapters/gemini/references/vendor-construct-inventory.md +1 -1
  136. package/adapters/gemini/scripts/forge-session.py +6 -1
  137. package/adapters/gemini/scripts/forge_session/cli.py +2 -1
  138. package/adapters/gemini/scripts/forge_session/doctor.py +42 -2
  139. package/adapters/gemini/scripts/forge_session/exit.py +5 -5
  140. package/adapters/gemini/scripts/forge_session/routes.py +30 -3
  141. package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +1 -1
  142. package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  143. package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  144. package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  145. package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  146. package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  147. package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +12 -22
  148. package/adapters/gemini/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  149. package/adapters/gemini/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  150. package/adapters/gemini/skills/forge-5-loop/references/result-reporting.md +78 -16
  151. package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +111 -12
  152. package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  153. package/adapters/gemini/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  154. package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  155. package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +2 -2
  156. package/adapters/gemini/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  157. package/adapters/gemini/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  158. package/adapters/gemini/skills/forge-init/forge-init.md +7 -5
  159. package/adapters/gemini/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  160. package/adapters/gemini/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  161. package/adapters/pi/.feature-forge-bundle.json +1 -1
  162. package/adapters/pi/references/forge-config-schema.json +2 -2
  163. package/adapters/pi/references/preflight-and-self-heal.md +1 -1
  164. package/adapters/pi/references/ralph-loop-contract.md +5 -3
  165. package/adapters/pi/references/stage-exit-protocol.md +1 -1
  166. package/adapters/pi/references/vendor-construct-inventory.md +1 -1
  167. package/adapters/pi/scripts/forge-session.py +6 -1
  168. package/adapters/pi/scripts/forge_session/cli.py +2 -1
  169. package/adapters/pi/scripts/forge_session/doctor.py +42 -2
  170. package/adapters/pi/scripts/forge_session/exit.py +5 -5
  171. package/adapters/pi/scripts/forge_session/routes.py +30 -3
  172. package/adapters/pi/skills/forge/references/stage-exit-protocol.md +1 -1
  173. package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +1 -1
  174. package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +1 -1
  175. package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +1 -1
  176. package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +1 -1
  177. package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +1 -1
  178. package/adapters/pi/skills/forge-5-loop/SKILL.md +12 -22
  179. package/adapters/pi/skills/forge-5-loop/references/preflight-and-self-heal.md +1 -1
  180. package/adapters/pi/skills/forge-5-loop/references/ralph-loop-contract.md +5 -3
  181. package/adapters/pi/skills/forge-5-loop/references/result-reporting.md +78 -16
  182. package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +111 -12
  183. package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +1 -1
  184. package/adapters/pi/skills/forge-6-docs/references/stage-exit-protocol.md +1 -1
  185. package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +1 -1
  186. package/adapters/pi/skills/forge-guide/references/forge-config-schema.json +2 -2
  187. package/adapters/pi/skills/forge-guide/references/preflight-and-self-heal.md +1 -1
  188. package/adapters/pi/skills/forge-guide/references/ralph-loop-contract.md +5 -3
  189. package/adapters/pi/skills/forge-init/SKILL.md +7 -5
  190. package/adapters/pi/skills/forge-init/references/preflight-and-self-heal.md +1 -1
  191. package/adapters/pi/skills/forge-verify/references/stage-exit-protocol.md +1 -1
  192. package/dist/manifest.d.ts +1 -1
  193. package/dist/rauf.d.ts +3 -3
  194. package/dist/rauf.js +2 -2
  195. package/dist/types.d.ts +1 -1
  196. package/package.json +1 -1
@@ -47,7 +47,7 @@ an epic member. Only the flags below are stage-specific; pass no others.
47
47
  |---|---|---|
48
48
  | `forge-0-epic` | `forge-0-epic` | `--next-feature "{member}"` when a concrete member exists |
49
49
  | `forge-1-prd` … `forge-4-backlog` | that stage's own id | none beyond identity/capability |
50
- | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation` with `--outcome partial` |
50
+ | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation`, `review-pending` or `runner-stopped` with `--outcome partial` |
51
51
  | `forge-6-docs` | `forge-6-docs` | `--outcome` — `complete`, `blocked`, or `skipped` (deliberate docs skip, persisted via `state-skip` before the exit; routes like `complete` with honest wording) |
52
52
  | direct `forge-verify` | `forge-verify` | `--owner direct`, `--outcome` (`passed`, `findings`, `skipped`, `failed`), and served-stage metadata |
53
53
  | nested `forge-verify` | `forge-verify` | `--owner nested`, plus the same outcome and served-stage metadata |
@@ -47,7 +47,7 @@ an epic member. Only the flags below are stage-specific; pass no others.
47
47
  |---|---|---|
48
48
  | `forge-0-epic` | `forge-0-epic` | `--next-feature "{member}"` when a concrete member exists |
49
49
  | `forge-1-prd` … `forge-4-backlog` | that stage's own id | none beyond identity/capability |
50
- | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation` with `--outcome partial` |
50
+ | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation`, `review-pending` or `runner-stopped` with `--outcome partial` |
51
51
  | `forge-6-docs` | `forge-6-docs` | `--outcome` — `complete`, `blocked`, or `skipped` (deliberate docs skip, persisted via `state-skip` before the exit; routes like `complete` with honest wording) |
52
52
  | direct `forge-verify` | `forge-verify` | `--owner direct`, `--outcome` (`passed`, `findings`, `skipped`, `failed`), and served-stage metadata |
53
53
  | nested `forge-verify` | `forge-verify` | `--owner nested`, plus the same outcome and served-stage metadata |
@@ -235,8 +235,8 @@
235
235
  },
236
236
  "installHint": {
237
237
  "type": "string",
238
- "default": "Provision rauf for a multi-agent setup with the cross-agent installer: `npx @garygentry/feature-forge install` (records the pinned @garygentry/rauf@0.16.1 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.16.1 --version`, or `curl -fsSL https://raw.githubusercontent.com/garygentry/rauf/main/scripts/install-binary.sh | bash`.",
239
- "description": "Shown when the runner BINARY is missing or too old (version gate fails, minRunnerVersion floor) — how to obtain/upgrade the CLI itself. Names two distinct binary-provisioning paths: (1) the cross-agent installer (`npx @garygentry/feature-forge install`, the multi-agent provisioning path that pins @garygentry/rauf@0.16.1), and (2) the direct rauf-CLI install/upgrade one-liner. Distinct from setupHint (which installs per-project artifacts); a version-gate failure is ALWAYS this hint, never setupHint."
238
+ "default": "Provision rauf for a multi-agent setup with the cross-agent installer: `npx @garygentry/feature-forge install` (records the pinned @garygentry/rauf@0.17.1 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.17.1 --version`, or `curl -fsSL https://raw.githubusercontent.com/garygentry/rauf/main/scripts/install-binary.sh | bash`.",
239
+ "description": "Shown when the runner BINARY is missing or too old (version gate fails, minRunnerVersion floor) — how to obtain/upgrade the CLI itself. Names two distinct binary-provisioning paths: (1) the cross-agent installer (`npx @garygentry/feature-forge install`, the multi-agent provisioning path that pins @garygentry/rauf@0.17.1), and (2) the direct rauf-CLI install/upgrade one-liner. Distinct from setupHint (which installs per-project artifacts); a version-gate failure is ALWAYS this hint, never setupHint."
240
240
  },
241
241
  "schemaVersion": {
242
242
  "type": "string",
@@ -6,7 +6,7 @@ silent unasked mutation. It runs whenever a skill gates on `doctor`'s structured
6
6
  `checks[]` (`roadmap/self-healing-resilience.md` §5.2); today that is `forge-5-loop`'s
7
7
  gates 1c/1d (`skills/forge-5-loop/SKILL.md`), which resolve the loop runner **before**
8
8
  touching it, `forge-init`'s install preflight (`skills/forge-init/SKILL.md`), where
9
- neither check is a stop, and `forge-guide --doctor` (`skills/forge-guide/SKILL.md`), the
9
+ no check is a stop, and `forge-guide --doctor` (`skills/forge-guide/SKILL.md`), the
10
10
  operator-facing repair surface, which gates nothing at all. All three are callers, not
11
11
  the procedure's scope: any skill that gates on `checks[]` follows it in full. Its seven
12
12
  ordered steps: **enumerate → cluster → consolidated prompts → record → apply → prove →
@@ -40,9 +40,11 @@ defined authoritatively in rauf's
40
40
  - **A machine-readable event stream** for live supervision (`loopRunner.eventStreamCommand`,
41
41
  rauf: `loop run … --ndjson`): one JSON event per line with a stable `type`
42
42
  vocabulary — `item_completed` / `item_blocked` / `needs_human` / `signal_parsed`
43
- / `loop_completed` / `loop_error` / `loop_cancelled` / `llm_stuck_warning` (a
44
- circuit-breaker halt surfaces as `loop_error`) — plus a
45
- derived-status JSON (`loopRunner.statusJsonCommand`, rauf: `status … --json`) and
43
+ / `loop_completed` / `loop_error` / `loop_cancelled` / `review_failed` /
44
+ `llm_stuck_warning` (a circuit-breaker halt surfaces as `loop_error`) — plus a
45
+ derived-status JSON (`loopRunner.statusJsonCommand`, rauf: `status … --json`;
46
+ forge-5-loop also reads its optional `loopState` / `lock` / `sleepUntil` /
47
+ `reviewPending` fields when present, and degrades to the counts when absent) and
46
48
  per-iteration telemetry with a `stuckWarning` flag (`loopRunner.watchCommand`,
47
49
  rauf: `status … --json` — the `loop watch` verb was removed in v0.5.0). `forge-5-loop` supervises the run through these,
48
50
  **not** by parsing the human log. `followCommand` / `logCommand` are
@@ -78,11 +78,11 @@ Once the config exists, check the tooling this project's pipeline will lean on:
78
78
  R="$(bash -c '[ -z "${FEATURE_FORGE_ROOT:-}" ] || [ -x "$FEATURE_FORGE_ROOT/scripts/forge-root.sh" ] || { echo "feature-forge: FEATURE_FORGE_ROOT=$FEATURE_FORGE_ROOT has no scripts/forge-root.sh" >&2; exit 2; }; for d in "${FEATURE_FORGE_ROOT:-}" "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
79
79
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
80
80
  python3 "$R/scripts/forge-session.py" doctor --json \
81
- --check root-version-skew --check gh-available
81
+ --check plugin-root --check root-version-skew --check gh-available
82
82
  ```
83
83
 
84
84
  Follow `references/preflight-and-self-heal.md` with that result: all `ok`/`na` → say nothing and
85
- move on. Otherwise cluster and report. **Neither check is a stop for `forge-init`** — report and
85
+ move on. Otherwise cluster and report. **No check here is a stop for `forge-init`** — report and
86
86
  continue; a `warn` here never aborts initialization (the procedure returns statuses; the caller
87
87
  owns its own gate). `gh-available` matters because the tooling-feedback step below tells agents
88
88
  to file issues with `gh issue create`; when `gh` is missing or unauthenticated, say so once — its
@@ -93,9 +93,11 @@ interrogated about it on every init.
93
93
  `root-version-skew` is reported the same way: a second install shadowing this one is worth
94
94
  knowing about before the first stage runs.
95
95
 
96
- (`plugin-root` is deliberately **not** in that list. The prelude above already exits 1 when the
97
- resolver fails, so by the time `doctor` runs the check can only be `ok` — narrowing to checks
98
- that cannot fire would be theatre.)
96
+ `plugin-root` is reported the same way, **advisory here despite its `blocking` severity**. The
97
+ prelude above already exits 1 when the resolver fails, so below it the check warns only when the
98
+ resolved root is un-built canon (no `.feature-forge-bundle.json` — a repo checkout loaded
99
+ directly): its skills cannot read their shared references and will break mid-stage. Say so once
100
+ with the check's `remedy.description` (advise-only, `network`) and continue.
99
101
 
100
102
  ## Root hygiene — tooling feedback
101
103
 
@@ -6,7 +6,7 @@ silent unasked mutation. It runs whenever a skill gates on `doctor`'s structured
6
6
  `checks[]` (`roadmap/self-healing-resilience.md` §5.2); today that is `forge-5-loop`'s
7
7
  gates 1c/1d (`skills/forge-5-loop/SKILL.md`), which resolve the loop runner **before**
8
8
  touching it, `forge-init`'s install preflight (`skills/forge-init/SKILL.md`), where
9
- neither check is a stop, and `forge-guide --doctor` (`skills/forge-guide/SKILL.md`), the
9
+ no check is a stop, and `forge-guide --doctor` (`skills/forge-guide/SKILL.md`), the
10
10
  operator-facing repair surface, which gates nothing at all. All three are callers, not
11
11
  the procedure's scope: any skill that gates on `checks[]` follows it in full. Its seven
12
12
  ordered steps: **enumerate → cluster → consolidated prompts → record → apply → prove →
@@ -47,7 +47,7 @@ an epic member. Only the flags below are stage-specific; pass no others.
47
47
  |---|---|---|
48
48
  | `forge-0-epic` | `forge-0-epic` | `--next-feature "{member}"` when a concrete member exists |
49
49
  | `forge-1-prd` … `forge-4-backlog` | that stage's own id | none beyond identity/capability |
50
- | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation` with `--outcome partial` |
50
+ | `forge-5-loop` | `forge-5-loop` | `--outcome` — one of `complete`, `partial`, `blocked`, `needs-human`, `deferred`, `resolved`; optional `--cause dependency-starvation`, `review-pending` or `runner-stopped` with `--outcome partial` |
51
51
  | `forge-6-docs` | `forge-6-docs` | `--outcome` — `complete`, `blocked`, or `skipped` (deliberate docs skip, persisted via `state-skip` before the exit; routes like `complete` with honest wording) |
52
52
  | direct `forge-verify` | `forge-verify` | `--owner direct`, `--outcome` (`passed`, `findings`, `skipped`, `failed`), and served-stage metadata |
53
53
  | nested `forge-verify` | `forge-verify` | `--owner nested`, plus the same outcome and served-stage metadata |
@@ -28,7 +28,7 @@ export interface BuildManifestArgs {
28
28
  readonly skills: readonly string[];
29
29
  /** SHA-256 over the source bundle's canonical (sorted-path) file set — drift anchor (spec 03). */
30
30
  readonly sourceHash: string;
31
- /** Recorded pinned rauf coordinate (e.g. "@garygentry/rauf@0.16.1"); `null` when `--skip-rauf` (spec 06). */
31
+ /** Recorded pinned rauf coordinate (e.g. "@garygentry/rauf@0.17.1"); `null` when `--skip-rauf` (spec 06). */
32
32
  readonly raufPin: string | null;
33
33
  /** Symlink mode only: the source bundle the namespace dir links to (REQ-SAFE-02). */
34
34
  readonly link?: {
package/dist/rauf.d.ts CHANGED
@@ -21,11 +21,11 @@ import { type Result } from "./types.js";
21
21
  * blocked by npm's similarity filter). Advanced on each feature-forge release to a new
22
22
  * known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.13.0.
23
23
  *
24
- * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.16.1` resolves from the npm registry, so the
24
+ * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.17.1` resolves from the npm registry, so the
25
25
  * preflight below passes by default. (Historically this pin pointed at an unpublished package and
26
26
  * the preflight was a designed-to-fail check — see the `--skip-rauf` escape hatch.)
27
27
  */
28
- export declare const RAUF_PIN = "@garygentry/rauf@0.16.1";
28
+ export declare const RAUF_PIN = "@garygentry/rauf@0.17.1";
29
29
  /**
30
30
  * An injectable, READ-ONLY registry query (D1). Given a coordinate `name@version`, returns the
31
31
  * resolved version string on success, or an `InstallerError` if it is not resolvable.
@@ -37,7 +37,7 @@ export declare const RAUF_PIN = "@garygentry/rauf@0.16.1";
37
37
  * Contract: the query MUST be read-only — it MUST NOT install, MUST NOT mutate global npm
38
38
  * state, and MUST NOT execute rauf. `npm view` satisfies this (it only reads registry metadata).
39
39
  *
40
- * @param coordinate - the `name@version` to resolve, e.g. "@garygentry/rauf@0.16.1"
40
+ * @param coordinate - the `name@version` to resolve, e.g. "@garygentry/rauf@0.17.1"
41
41
  * @returns Result<string> — the resolved version on success; RAUF_UNRESOLVABLE on failure.
42
42
  */
43
43
  export type RegistryQuery = (coordinate: string) => Result<string>;
package/dist/rauf.js CHANGED
@@ -22,11 +22,11 @@ import { err, ok } from "./types.js";
22
22
  * blocked by npm's similarity filter). Advanced on each feature-forge release to a new
23
23
  * known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.13.0.
24
24
  *
25
- * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.16.1` resolves from the npm registry, so the
25
+ * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.17.1` resolves from the npm registry, so the
26
26
  * preflight below passes by default. (Historically this pin pointed at an unpublished package and
27
27
  * the preflight was a designed-to-fail check — see the `--skip-rauf` escape hatch.)
28
28
  */
29
- export const RAUF_PIN = "@garygentry/rauf@0.16.1";
29
+ export const RAUF_PIN = "@garygentry/rauf@0.17.1";
30
30
  /**
31
31
  * Resolvability preflight for the pinned default loop runner (D1; REQ-RAUF-01/02/03, OQ-1).
32
32
  *
package/dist/types.d.ts CHANGED
@@ -239,7 +239,7 @@ export interface InstallManifest {
239
239
  readonly featureForgeVersion: string | null;
240
240
  /** SHA-256 over the source bundle's canonical (sorted-path) file set — drift anchor (OQ-4, spec 03). */
241
241
  readonly sourceHash: string;
242
- /** Pinned rauf coordinate recorded at install, e.g. "@garygentry/rauf@0.16.1"; `null` if `--skip-rauf` (spec 06). */
242
+ /** Pinned rauf coordinate recorded at install, e.g. "@garygentry/rauf@0.17.1"; `null` if `--skip-rauf` (spec 06). */
243
243
  readonly raufPin: string | null;
244
244
  /** ISO-8601 timestamps. */
245
245
  readonly installedAt: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@garygentry/feature-forge",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "Cross-agent installer for the feature-forge skill suite — installs the canonical forge pipeline into Claude, Codex, Copilot, Cursor, Gemini, or Pi.",
5
5
  "license": "MIT",
6
6
  "type": "module",