@garygentry/feature-forge 0.3.4 → 0.3.5

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 (31) hide show
  1. package/README.md +1 -1
  2. package/adapters/claude/.feature-forge-bundle.json +1 -1
  3. package/adapters/claude/references/forge-config-schema.json +2 -2
  4. package/adapters/claude/scripts/forge-session.py +27 -6
  5. package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +2 -2
  6. package/adapters/codex/.feature-forge-bundle.json +1 -1
  7. package/adapters/codex/references/forge-config-schema.json +2 -2
  8. package/adapters/codex/scripts/forge-session.py +27 -6
  9. package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +2 -2
  10. package/adapters/copilot/.feature-forge-bundle.json +1 -1
  11. package/adapters/copilot/references/forge-config-schema.json +2 -2
  12. package/adapters/copilot/scripts/forge-session.py +27 -6
  13. package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +2 -2
  14. package/adapters/cursor/.feature-forge-bundle.json +1 -1
  15. package/adapters/cursor/references/forge-config-schema.json +2 -2
  16. package/adapters/cursor/scripts/forge-session.py +27 -6
  17. package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +2 -2
  18. package/adapters/gemini/.feature-forge-bundle.json +1 -1
  19. package/adapters/gemini/gemini-extension.json +1 -1
  20. package/adapters/gemini/references/forge-config-schema.json +2 -2
  21. package/adapters/gemini/scripts/forge-session.py +27 -6
  22. package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +2 -2
  23. package/adapters/pi/.feature-forge-bundle.json +1 -1
  24. package/adapters/pi/references/forge-config-schema.json +2 -2
  25. package/adapters/pi/scripts/forge-session.py +27 -6
  26. package/adapters/pi/skills/forge-guide/references/forge-config-schema.json +2 -2
  27. package/dist/manifest.d.ts +1 -1
  28. package/dist/rauf.d.ts +3 -3
  29. package/dist/rauf.js +2 -2
  30. package/dist/types.d.ts +1 -1
  31. package/package.json +1 -1
package/README.md CHANGED
@@ -74,7 +74,7 @@ Claude Code users can alternatively install via the plugin marketplace:
74
74
 
75
75
  The default loop runner is [**rauf**](https://github.com/garygentry/rauf), published as
76
76
  [`@garygentry/rauf`](https://www.npmjs.com/package/@garygentry/rauf). The installer runs a
77
- read-only resolvability preflight on the pin (`@garygentry/rauf@0.13.0`) and records it; pass
77
+ read-only resolvability preflight on the pin (`@garygentry/rauf@0.14.0`) and records it; pass
78
78
  `--skip-rauf` to defer the check (e.g. offline installs). Install the rauf CLI itself with
79
79
  `npx @garygentry/rauf` or its
80
80
  [binary script](https://github.com/garygentry/rauf#install). See the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "claude",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/feature-forge:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/feature-forge:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/feature-forge:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "codex",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/feature-forge:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/feature-forge:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/feature-forge:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "copilot",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/feature-forge:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/feature-forge:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/feature-forge:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "cursor",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/feature-forge:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/feature-forge:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/feature-forge:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "gemini",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -4,7 +4,7 @@
4
4
  "regenerate": "python3 scripts/build-adapters.py"
5
5
  },
6
6
  "name": "feature-forge",
7
- "version": "0.17.0",
7
+ "version": "0.18.0",
8
8
  "skills": [
9
9
  {
10
10
  "name": "forge-0-epic",
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/feature-forge:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/feature-forge:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/feature-forge:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/feature-forge:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-forge",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "agent": "pi",
5
5
  "generatedBy": "python3 scripts/build-adapters.py"
6
6
  }
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -4232,12 +4232,33 @@ def stage_exit(
4232
4232
  # hands off the same way the epic's own exit does. Identical to the previous
4233
4233
  # behavior for every production exit, where `route_stage is stage`.
4234
4234
  if route_stage == "forge-0-epic" and next_feature is None:
4235
- # An epic exit that names no concrete member has nothing to hand off to.
4236
- # The dashboard is the same non-fabrication answer given to a named member
4237
- # that has finished every production stage: never invent a member, and
4238
- # never print a template the user cannot run.
4239
- next_stage_id = None
4240
- next_command = f"/skill:forge-0-epic {feature}"
4235
+ # A branch exit (verify/fix) that served forge-0-epic cannot carry
4236
+ # --next-feature (the CLI rejects it for non-epic stages), so the member
4237
+ # must be resolved HERE from live epic state. Creation-mode exits pass
4238
+ # --next-feature and skip this block entirely (#230).
4239
+ try:
4240
+ status = _render_status(specs_dir, feature)
4241
+ actionable = status["actionable"]
4242
+ if actionable:
4243
+ resolved_member = actionable[0]
4244
+ ms, mr = _epic_member_state(specs_dir, feature, resolved_member)
4245
+ if mr is not None:
4246
+ next_stage_id = "forge-1-prd"
4247
+ next_command = f"/skill:forge-1-prd {resolved_member}"
4248
+ else:
4249
+ member_next = next_stage(ms)
4250
+ if member_next is None:
4251
+ next_stage_id = None
4252
+ next_command = f"/skill:forge-0-epic {feature}"
4253
+ else:
4254
+ next_stage_id = member_next
4255
+ next_command = f"/skill:{member_next} {resolved_member}"
4256
+ else:
4257
+ next_stage_id = None
4258
+ next_command = f"/skill:forge-0-epic {feature}"
4259
+ except UsageError:
4260
+ next_stage_id = None
4261
+ next_command = f"/skill:forge-0-epic {feature}"
4241
4262
  else:
4242
4263
  next_arg = next_feature or feature
4243
4264
  next_command = (
@@ -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.13.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.13.0 --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.13.0), 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.14.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.14.0 --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.14.0), 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",
@@ -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.13.0"); `null` when `--skip-rauf` (spec 06). */
31
+ /** Recorded pinned rauf coordinate (e.g. "@garygentry/rauf@0.14.0"); `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.13.0` resolves from the npm registry, so the
24
+ * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.14.0` 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.13.0";
28
+ export declare const RAUF_PIN = "@garygentry/rauf@0.14.0";
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.13.0";
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.13.0"
40
+ * @param coordinate - the `name@version` to resolve, e.g. "@garygentry/rauf@0.14.0"
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.13.0` resolves from the npm registry, so the
25
+ * rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.14.0` 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.13.0";
29
+ export const RAUF_PIN = "@garygentry/rauf@0.14.0";
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.13.0"; `null` if `--skip-rauf` (spec 06). */
242
+ /** Pinned rauf coordinate recorded at install, e.g. "@garygentry/rauf@0.14.0"; `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.4",
3
+ "version": "0.3.5",
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",