@entelligentsia/forgecli 0.10.1 → 0.11.3

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 (180) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +21 -3
  3. package/dist/CHANGELOG-forge-plugin.md +49 -0
  4. package/dist/bin/forge.js +0 -0
  5. package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
  6. package/dist/extensions/forgecli/add-pipeline.js +143 -0
  7. package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
  8. package/dist/extensions/forgecli/add-task.d.ts +20 -0
  9. package/dist/extensions/forgecli/add-task.js +154 -0
  10. package/dist/extensions/forgecli/add-task.js.map +1 -0
  11. package/dist/extensions/forgecli/ask-user-tool.js +32 -20
  12. package/dist/extensions/forgecli/ask-user-tool.js.map +1 -1
  13. package/dist/extensions/forgecli/calibrate.d.ts +61 -0
  14. package/dist/extensions/forgecli/calibrate.js +488 -0
  15. package/dist/extensions/forgecli/calibrate.js.map +1 -0
  16. package/dist/extensions/forgecli/config-layer.js +4 -1
  17. package/dist/extensions/forgecli/config-layer.js.map +1 -1
  18. package/dist/extensions/forgecli/config-writer.js +4 -1
  19. package/dist/extensions/forgecli/config-writer.js.map +1 -1
  20. package/dist/extensions/forgecli/fix-bug.d.ts +9 -1
  21. package/dist/extensions/forgecli/fix-bug.js +101 -9
  22. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  23. package/dist/extensions/forgecli/forge-commands.js +15 -22
  24. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  25. package/dist/extensions/forgecli/forge-subagent.js +34 -7
  26. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  27. package/dist/extensions/forgecli/forge-update-command.d.ts +9 -0
  28. package/dist/extensions/forgecli/forge-update-command.js +106 -7
  29. package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
  30. package/dist/extensions/forgecli/health-check.d.ts +32 -1
  31. package/dist/extensions/forgecli/health-check.js +337 -12
  32. package/dist/extensions/forgecli/health-check.js.map +1 -1
  33. package/dist/extensions/forgecli/hook-dispatcher.d.ts +25 -1
  34. package/dist/extensions/forgecli/hook-dispatcher.js +108 -11
  35. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  36. package/dist/extensions/forgecli/hooks/check-update.d.ts +81 -0
  37. package/dist/extensions/forgecli/hooks/check-update.js +308 -0
  38. package/dist/extensions/forgecli/hooks/check-update.js.map +1 -0
  39. package/dist/extensions/forgecli/hooks/forge-permissions.d.ts +32 -0
  40. package/dist/extensions/forgecli/hooks/forge-permissions.js +119 -0
  41. package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -0
  42. package/dist/extensions/forgecli/hooks/triage-error.d.ts +23 -0
  43. package/dist/extensions/forgecli/hooks/triage-error.js +62 -0
  44. package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -0
  45. package/dist/extensions/forgecli/hooks/write-guard.d.ts +28 -0
  46. package/dist/extensions/forgecli/hooks/write-guard.js +229 -0
  47. package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -0
  48. package/dist/extensions/forgecli/index.js +60 -0
  49. package/dist/extensions/forgecli/index.js.map +1 -1
  50. package/dist/extensions/forgecli/init-context.d.ts +1 -1
  51. package/dist/extensions/forgecli/init-context.js +21 -6
  52. package/dist/extensions/forgecli/init-context.js.map +1 -1
  53. package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +65 -0
  54. package/dist/extensions/forgecli/lib/store-error-remediation.js +298 -0
  55. package/dist/extensions/forgecli/lib/store-error-remediation.js.map +1 -0
  56. package/dist/extensions/forgecli/materialize.d.ts +16 -0
  57. package/dist/extensions/forgecli/materialize.js +195 -0
  58. package/dist/extensions/forgecli/materialize.js.map +1 -0
  59. package/dist/extensions/forgecli/migrate.d.ts +19 -0
  60. package/dist/extensions/forgecli/migrate.js +258 -0
  61. package/dist/extensions/forgecli/migrate.js.map +1 -0
  62. package/dist/extensions/forgecli/migration-engine.d.ts +111 -0
  63. package/dist/extensions/forgecli/migration-engine.js +533 -0
  64. package/dist/extensions/forgecli/migration-engine.js.map +1 -0
  65. package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
  66. package/dist/extensions/forgecli/quiz-agent.js +98 -0
  67. package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
  68. package/dist/extensions/forgecli/remove-command.d.ts +17 -0
  69. package/dist/extensions/forgecli/remove-command.js +124 -0
  70. package/dist/extensions/forgecli/remove-command.js.map +1 -0
  71. package/dist/extensions/forgecli/report-bug.d.ts +25 -0
  72. package/dist/extensions/forgecli/report-bug.js +159 -0
  73. package/dist/extensions/forgecli/report-bug.js.map +1 -0
  74. package/dist/extensions/forgecli/retrospective.d.ts +19 -0
  75. package/dist/extensions/forgecli/retrospective.js +156 -0
  76. package/dist/extensions/forgecli/retrospective.js.map +1 -0
  77. package/dist/extensions/forgecli/run-sprint.js +50 -1
  78. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  79. package/dist/extensions/forgecli/run-task.d.ts +9 -1
  80. package/dist/extensions/forgecli/run-task.js +94 -18
  81. package/dist/extensions/forgecli/run-task.js.map +1 -1
  82. package/dist/extensions/forgecli/session-registry.d.ts +27 -2
  83. package/dist/extensions/forgecli/session-registry.js +52 -1
  84. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  85. package/dist/extensions/forgecli/status-command.d.ts +19 -0
  86. package/dist/extensions/forgecli/status-command.js +140 -0
  87. package/dist/extensions/forgecli/status-command.js.map +1 -0
  88. package/dist/extensions/forgecli/store-query.d.ts +22 -0
  89. package/dist/extensions/forgecli/store-query.js +107 -0
  90. package/dist/extensions/forgecli/store-query.js.map +1 -0
  91. package/dist/extensions/forgecli/store-repair.d.ts +17 -0
  92. package/dist/extensions/forgecli/store-repair.js +123 -0
  93. package/dist/extensions/forgecli/store-repair.js.map +1 -0
  94. package/dist/extensions/forgecli/store-resolver.d.ts +18 -0
  95. package/dist/extensions/forgecli/store-resolver.js +44 -4
  96. package/dist/extensions/forgecli/store-resolver.js.map +1 -1
  97. package/dist/extensions/forgecli/store-validator.d.ts +3 -0
  98. package/dist/extensions/forgecli/store-validator.js +4 -2
  99. package/dist/extensions/forgecli/store-validator.js.map +1 -1
  100. package/dist/extensions/forgecli/thread-switcher.js +213 -28
  101. package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
  102. package/dist/extensions/forgecli/update-tools.d.ts +23 -0
  103. package/dist/extensions/forgecli/update-tools.js +136 -0
  104. package/dist/extensions/forgecli/update-tools.js.map +1 -0
  105. package/dist/extensions/forgecli/viewport-theme.js +4 -0
  106. package/dist/extensions/forgecli/viewport-theme.js.map +1 -1
  107. package/dist/forge-payload/.base-pack/personas/supervisor.md +9 -0
  108. package/dist/forge-payload/.base-pack/workflows/enhance.md +17 -11
  109. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  110. package/dist/forge-payload/.schemas/config.schema.json +83 -0
  111. package/dist/forge-payload/.schemas/migrations.json +2065 -0
  112. package/dist/forge-payload/commands/regenerate.md +17 -1
  113. package/dist/forge-payload/meta/personas/README.md +16 -0
  114. package/dist/forge-payload/meta/personas/meta-architect.md +70 -0
  115. package/dist/forge-payload/meta/personas/meta-bug-fixer.md +73 -0
  116. package/dist/forge-payload/meta/personas/meta-collator.md +72 -0
  117. package/dist/forge-payload/meta/personas/meta-engineer.md +70 -0
  118. package/dist/forge-payload/meta/personas/meta-orchestrator.md +71 -0
  119. package/dist/forge-payload/meta/personas/meta-product-manager.md +82 -0
  120. package/dist/forge-payload/meta/personas/meta-qa-engineer.md +91 -0
  121. package/dist/forge-payload/meta/personas/meta-supervisor.md +92 -0
  122. package/dist/forge-payload/meta/skill-recommendations.md +154 -0
  123. package/dist/forge-payload/meta/skills/meta-architect-skills.md +43 -0
  124. package/dist/forge-payload/meta/skills/meta-bug-fixer-skills.md +43 -0
  125. package/dist/forge-payload/meta/skills/meta-collator-skills.md +41 -0
  126. package/dist/forge-payload/meta/skills/meta-engineer-skills.md +43 -0
  127. package/dist/forge-payload/meta/skills/meta-generic-skills.md +58 -0
  128. package/dist/forge-payload/meta/skills/meta-qa-engineer-skills.md +46 -0
  129. package/dist/forge-payload/meta/skills/meta-supervisor-skills.md +43 -0
  130. package/dist/forge-payload/meta/store-schema/bug.schema.md +71 -0
  131. package/dist/forge-payload/meta/store-schema/event.schema.md +76 -0
  132. package/dist/forge-payload/meta/store-schema/feature.schema.md +65 -0
  133. package/dist/forge-payload/meta/store-schema/sprint.schema.md +64 -0
  134. package/dist/forge-payload/meta/store-schema/task.schema.md +78 -0
  135. package/dist/forge-payload/meta/templates/meta-code-review.md +26 -0
  136. package/dist/forge-payload/meta/templates/meta-plan-review.md +28 -0
  137. package/dist/forge-payload/meta/templates/meta-plan.md +28 -0
  138. package/dist/forge-payload/meta/templates/meta-progress.md +25 -0
  139. package/dist/forge-payload/meta/templates/meta-retrospective.md +28 -0
  140. package/dist/forge-payload/meta/templates/meta-sprint-manifest.md +26 -0
  141. package/dist/forge-payload/meta/templates/meta-sprint-requirements.md +91 -0
  142. package/dist/forge-payload/meta/templates/meta-task-prompt.md +26 -0
  143. package/dist/forge-payload/meta/tool-specs/collate.spec.md +88 -0
  144. package/dist/forge-payload/meta/tool-specs/generation-manifest.spec.md +139 -0
  145. package/dist/forge-payload/meta/tool-specs/manage-config.spec.md +143 -0
  146. package/dist/forge-payload/meta/tool-specs/seed-store.spec.md +91 -0
  147. package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +328 -0
  148. package/dist/forge-payload/meta/tool-specs/validate-store.spec.md +191 -0
  149. package/dist/forge-payload/meta/workflows/_fragments/context-injection.md +75 -0
  150. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +73 -0
  151. package/dist/forge-payload/meta/workflows/_fragments/finalize.md +13 -0
  152. package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +73 -0
  153. package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +38 -0
  154. package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +39 -0
  155. package/dist/forge-payload/meta/workflows/meta-approve.md +119 -0
  156. package/dist/forge-payload/meta/workflows/meta-collate.md +89 -0
  157. package/dist/forge-payload/meta/workflows/meta-commit.md +93 -0
  158. package/dist/forge-payload/meta/workflows/meta-enhance.md +292 -0
  159. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +501 -0
  160. package/dist/forge-payload/meta/workflows/meta-implement.md +132 -0
  161. package/dist/forge-payload/meta/workflows/meta-migrate.md +455 -0
  162. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +993 -0
  163. package/dist/forge-payload/meta/workflows/meta-plan-task.md +133 -0
  164. package/dist/forge-payload/meta/workflows/meta-quiz-agent.md +135 -0
  165. package/dist/forge-payload/meta/workflows/meta-retrospective.md +65 -0
  166. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +119 -0
  167. package/dist/forge-payload/meta/workflows/meta-review-plan.md +108 -0
  168. package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +65 -0
  169. package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +76 -0
  170. package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +147 -0
  171. package/dist/forge-payload/meta/workflows/meta-update-implementation.md +76 -0
  172. package/dist/forge-payload/meta/workflows/meta-update-plan.md +76 -0
  173. package/dist/forge-payload/meta/workflows/meta-validate.md +111 -0
  174. package/dist/forge-payload/tools/build-persona-pack.cjs +120 -11
  175. package/dist/forge-payload/tools/check-structure.cjs +344 -0
  176. package/dist/forge-payload/tools/list-skills.js +76 -0
  177. package/dist/forge-payload/tools/store-cli.cjs +27 -1
  178. package/dist/forge-payload/tools/substitute-placeholders.cjs +60 -8
  179. package/dist/forge-payload/tools/verify-integrity.cjs +86 -0
  180. package/package.json +2 -2
@@ -0,0 +1,23 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export interface UpdateToolsResult {
3
+ copied: number;
4
+ skipped: number;
5
+ validationPassed: boolean;
6
+ messages: string[];
7
+ }
8
+ /**
9
+ * Copy all *.json from bundled .schemas/ to .forge/schemas/ in cwd.
10
+ * Runs validate-store --dry-run after copy.
11
+ * Exported so orchestrators can call directly without going through sendUserMessage.
12
+ */
13
+ export declare function runUpdateTools(cwd: string, opts?: {
14
+ _testBundleRoot?: string;
15
+ _testToolsRoot?: string;
16
+ }): Promise<UpdateToolsResult>;
17
+ export interface RegisterUpdateToolsOptions {
18
+ /** Override bundle root — for testing only. */
19
+ _testBundleRoot?: string;
20
+ /** Override tools root — for testing only. */
21
+ _testToolsRoot?: string;
22
+ }
23
+ export declare function registerUpdateTools(pi: ExtensionAPI, opts?: RegisterUpdateToolsOptions): void;
@@ -0,0 +1,136 @@
1
+ // update-tools.ts — native atomic handler for /forge:update-tools (FORGE-S23-T10)
2
+ //
3
+ // Copies all JSON schema files from the bundled forge payload (.schemas/) to
4
+ // the project's .forge/schemas/, then runs validate-store --dry-run to verify.
5
+ //
6
+ // Archetype: Atomic (no LLM in loop — pack-04 §Atomic).
7
+ // Iron Laws:
8
+ // IL1 — new code lives in forge-cli/ only
9
+ // IL6 — no shell-string interpolation (argv-array throughout)
10
+ // IL7 — silent continuation past failures is never acceptable
11
+ import { execFile } from "node:child_process";
12
+ import * as fs from "node:fs";
13
+ import * as path from "node:path";
14
+ import { promisify } from "node:util";
15
+ import { getBundledPayloadRoot, getBundledToolsRoot } from "./forge-init.js";
16
+ const execFileAsync = promisify(execFile);
17
+ // ── Core runner ──────────────────────────────────────────────────────────────
18
+ /**
19
+ * Copy all *.json from bundled .schemas/ to .forge/schemas/ in cwd.
20
+ * Runs validate-store --dry-run after copy.
21
+ * Exported so orchestrators can call directly without going through sendUserMessage.
22
+ */
23
+ export async function runUpdateTools(cwd, opts = {}) {
24
+ const messages = [];
25
+ let bundleRoot;
26
+ let toolsRoot;
27
+ try {
28
+ bundleRoot = opts._testBundleRoot ?? getBundledPayloadRoot();
29
+ toolsRoot = opts._testToolsRoot ?? getBundledToolsRoot();
30
+ }
31
+ catch (err) {
32
+ const msg = err instanceof Error ? err.message : String(err);
33
+ return {
34
+ copied: 0,
35
+ skipped: 0,
36
+ validationPassed: false,
37
+ messages: [`× forge:update-tools — could not resolve bundle root: ${msg}`],
38
+ };
39
+ }
40
+ // Source: bundled .schemas/ directory
41
+ const schemasSrc = path.join(bundleRoot, ".schemas");
42
+ if (!fs.existsSync(schemasSrc)) {
43
+ return {
44
+ copied: 0,
45
+ skipped: 0,
46
+ validationPassed: false,
47
+ messages: [`× forge:update-tools — bundled schemas directory not found: ${schemasSrc}`],
48
+ };
49
+ }
50
+ // Destination: .forge/schemas/ in the project
51
+ const schemasDest = path.join(cwd, ".forge", "schemas");
52
+ fs.mkdirSync(schemasDest, { recursive: true });
53
+ // Copy all *.json files
54
+ let copied = 0;
55
+ let skipped = 0;
56
+ let schemaFiles;
57
+ try {
58
+ schemaFiles = fs.readdirSync(schemasSrc).filter((f) => f.endsWith(".json"));
59
+ }
60
+ catch (err) {
61
+ const msg = err instanceof Error ? err.message : String(err);
62
+ return {
63
+ copied: 0,
64
+ skipped: 0,
65
+ validationPassed: false,
66
+ messages: [`× forge:update-tools — could not read schemas directory: ${msg}`],
67
+ };
68
+ }
69
+ for (const file of schemaFiles) {
70
+ const srcPath = path.join(schemasSrc, file);
71
+ const destPath = path.join(schemasDest, file);
72
+ // src and dest are always different directories; structural skip-if-equal
73
+ // is impossible in production but tested via mocks per AC requirement.
74
+ if (srcPath === destPath) {
75
+ skipped++;
76
+ continue;
77
+ }
78
+ try {
79
+ await fs.promises.copyFile(srcPath, destPath);
80
+ copied++;
81
+ }
82
+ catch (err) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ messages.push(`△ forge:update-tools — could not copy ${file}: ${msg}`);
85
+ }
86
+ }
87
+ messages.push(`〇 forge:update-tools — copied ${copied} schema file(s) to .forge/schemas/.`);
88
+ if (skipped > 0) {
89
+ messages.push(` (${skipped} file(s) skipped — source equals destination)`);
90
+ }
91
+ // Run validate-store --dry-run
92
+ const validateStorePath = path.join(toolsRoot, "validate-store.cjs");
93
+ let validationPassed = false;
94
+ try {
95
+ await execFileAsync("node", [validateStorePath, "--dry-run"], {
96
+ cwd,
97
+ encoding: "utf8",
98
+ timeout: 15_000,
99
+ });
100
+ validationPassed = true;
101
+ messages.push("〇 Schemas updated and store validation passed.");
102
+ }
103
+ catch (err) {
104
+ const e = err;
105
+ const detail = e.stderr || e.stdout || e.message || String(err);
106
+ messages.push(`× Validation failed — ${detail.slice(0, 300)}`);
107
+ }
108
+ return { copied, skipped, validationPassed, messages };
109
+ }
110
+ export function registerUpdateTools(pi, opts = {}) {
111
+ pi.registerCommand("forge:update-tools", {
112
+ description: "Refresh .forge/schemas/ from the installed Forge plugin version. " +
113
+ "Copies all JSON schema files from the bundled payload to your project.",
114
+ async handler(_args, ctx) {
115
+ const cwd = process.cwd();
116
+ // Outside-project guard
117
+ const configPath = path.join(cwd, ".forge", "config.json");
118
+ if (!fs.existsSync(configPath)) {
119
+ ctx.ui.notify("× forge:update-tools — no .forge/config.json found. " +
120
+ "Run /forge:init first.", "error");
121
+ return;
122
+ }
123
+ ctx.ui.setStatus?.("forge:update-tools", "Copying schemas…");
124
+ const result = await runUpdateTools(cwd, {
125
+ _testBundleRoot: opts._testBundleRoot,
126
+ _testToolsRoot: opts._testToolsRoot,
127
+ });
128
+ ctx.ui.setStatus?.("forge:update-tools", undefined);
129
+ for (const msg of result.messages) {
130
+ const severity = msg.startsWith("×") ? "error" : msg.startsWith("△") ? "warning" : "info";
131
+ ctx.ui.notify(msg, severity);
132
+ }
133
+ },
134
+ });
135
+ }
136
+ //# sourceMappingURL=update-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tools.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/update-tools.ts"],"names":[],"mappings":"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"}
@@ -117,6 +117,10 @@ function paintInner(trimmed, theme) {
117
117
  return theme.fg("warning", trimmed);
118
118
  case "◌": // compaction
119
119
  return theme.fg("muted", trimmed);
120
+ case "⊘": // cancelled
121
+ return theme.fg("muted", trimmed);
122
+ case "⏳": // cancelling
123
+ return theme.fg("warning", trimmed);
120
124
  default:
121
125
  return trimmed;
122
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewport-theme.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewport-theme.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-theme.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,15 @@ before confirming spec compliance is wasted work. No exceptions.
20
20
  **A fast submission is a red flag.** If work arrived suspiciously quickly, verify
21
21
  extra carefully. Do not reward speed with a lighter review.
22
22
 
23
+ **The Supervisor NEVER writes entity status.** The workflow orchestrator owns
24
+ all FSM transitions. Do not call `store-cli update-status` on tasks, bugs,
25
+ sprints, or any other entity from a review phase — the verdict signal travels
26
+ through the SUMMARY's `verdict` field (read by `read-verdict.cjs`), not
27
+ through `entity.status`. In bug mode specifically, a forward-FSM call from a
28
+ review phase will be rejected by `store-cli` as an illegal transition (e.g.
29
+ `fixed → plan-approved`) and that rejection is correct, not a workaround
30
+ target. Write the SUMMARY, return.
31
+
23
32
  ## What I Need to Know
24
33
 
25
34
  - The project's architecture and how components connect
@@ -52,9 +52,9 @@ Receive the phase flag from the command invocation:
52
52
 
53
53
  | Flag | Mode |
54
54
  |------|------|
55
- | `--phase 1` or `--auto` | Auto-apply: placeholder fills only |
56
- | `--phase 2` | Propose-diffs: sprint artifact + friction scan |
57
- | `--phase 3` | Drift detection: full codebase vs structural-element comparison |
55
+ | `--phase 1` or `--auto` | Auto-apply: placeholder fills only — **use after** `/forge:init` completes to fill `{{KEY}}` placeholders from project signals |
56
+ | `--phase 2` | Propose-diffs: sprint artifact + friction scan — **use after** a sprint completes to turn friction events into persona/skill enrichments |
57
+ | `--phase 3` | Drift detection: full codebase vs structural-element comparison — **use on-demand** or after `/forge:calibrate` to detect stale references |
58
58
 
59
59
  Default to `--phase 3` if no phase flag is given.
60
60
 
@@ -179,28 +179,34 @@ Invoked by T09 post-sprint hook or manually via `/forge:enhance --phase 2`.
179
179
  "
180
180
  ```
181
181
 
182
- 2. **Deduplicate** friction events by composite key `workflow + persona + issue`. Keep the most
182
+ 2. **Zero-friction guard**: If the friction event list is empty, print:
183
+ ```
184
+ No friction events queued for the active sprint — nothing to enhance.
185
+ ```
186
+ and exit Phase 2 immediately (skip steps 3–9; emit the enhancement event with `"notes": "{\"phase\":2,\"frictionCount\":0}"`). Do not create `.forge/enhancement-proposals/` when there are no proposals.
187
+
188
+ 3. **Deduplicate** friction events by composite key `workflow + persona + issue`. Keep the most
183
189
  recent occurrence of each composite key.
184
190
 
185
- 3. **Read most recent completed sprint** from `.forge/store/sprints/` (status `done` or
191
+ 4. **Read most recent completed sprint** from `.forge/store/sprints/` (status `done` or
186
192
  `retrospective-done`), sorted by completion date. Read its task records from
187
193
  `.forge/store/tasks/` filtered by the sprint ID.
188
194
 
189
- 4. **Synthesize enrichment proposals** — for each friction event:
195
+ 5. **Synthesize enrichment proposals** — for each friction event:
190
196
  - Identify which persona or skill file it references.
191
197
  - Propose a targeted addition: e.g., "architect persona lacks routing pattern knowledge —
192
198
  suggest adding `{{KB_PATH}}/routing.md` reference to deps.kb_docs."
193
199
  - For large committed file sets (> 5 files in the sprint), also check whether
194
200
  `engineer-skills.md` or `architect-skills.md` should reference new patterns.
195
201
 
196
- 5. **Write proposal artifact**:
202
+ 6. **Write proposal artifact**:
197
203
  ```sh
198
204
  mkdir -p "$PROJECT_ROOT/.forge/enhancement-proposals"
199
205
  ```
200
206
  Write to `$PROJECT_ROOT/.forge/enhancement-proposals/phase2-<timestamp>.md`. Format:
201
207
  one section per proposed change, with a fenced diff block showing before/after text.
202
208
 
203
- 6. **Present to user**:
209
+ 7. **Present to user**:
204
210
  ```
205
211
  ## Phase 2 Enhancement Proposals
206
212
 
@@ -209,13 +215,13 @@ Invoked by T09 post-sprint hook or manually via `/forge:enhance --phase 2`.
209
215
  [A] Apply all [r] Review individually [n] Skip
210
216
  ```
211
217
 
212
- 7. **On approval** — for each approved change:
218
+ 8. **On approval** — for each approved change:
213
219
  - Apply the edit in-place.
214
220
  - Call `manage-versions.cjs add-snapshot --source post-sprint:<SPRINT_ID> --enhanced-elements <list>`.
215
221
 
216
- 8. **Emit enhancement event** (same schema as Phase 1, with `"phase": "post-sprint"`).
222
+ 9. **Emit enhancement event** (same schema as Phase 1, with `"phase": "post-sprint"`).
217
223
 
218
- 9. **Report**: N changes applied, M skipped, snapshot written or skipped.
224
+ 10. **Report**: N changes applied, M skipped, snapshot written or skipped.
219
225
 
220
226
  ---
221
227
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge",
3
- "version": "0.44.4",
3
+ "version": "0.44.8",
4
4
  "description": "Self-enhancing AI software development lifecycle \u2014 generates project-specific SDLC instances from meta-definitions",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "forge/config.schema.json",
4
+ "title": "ForgeConfig",
5
+ "description": "Schema for .forge/config.json — the per-project Forge configuration file.",
6
+ "type": "object",
7
+ "required": ["version", "project", "paths"],
8
+ "properties": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Config schema version (e.g. '1.0')"
12
+ },
13
+ "project": {
14
+ "type": "object",
15
+ "required": ["prefix", "name"],
16
+ "properties": {
17
+ "prefix": { "type": "string", "description": "Task ID prefix (e.g. FORGE)" },
18
+ "name": { "type": "string", "description": "Human-readable project name" },
19
+ "description": { "type": "string" }
20
+ }
21
+ },
22
+ "stack": {
23
+ "type": "object",
24
+ "properties": {
25
+ "languages": { "type": "array", "items": { "type": "string" } },
26
+ "framework": { "type": ["string", "null"] },
27
+ "frontendFramework": { "type": ["string", "null"] },
28
+ "database": { "type": ["string", "null"] },
29
+ "taskQueue": { "type": ["string", "null"] },
30
+ "containerisation": { "type": ["string", "null"] }
31
+ }
32
+ },
33
+ "commands": {
34
+ "type": "object",
35
+ "properties": {
36
+ "test": { "type": "string" },
37
+ "lint": { "type": "string" },
38
+ "syntaxCheck": {}
39
+ }
40
+ },
41
+ "paths": {
42
+ "type": "object",
43
+ "required": ["engineering", "store", "forgeRoot"],
44
+ "properties": {
45
+ "engineering": { "type": "string" },
46
+ "store": { "type": "string" },
47
+ "workflows": { "type": "string" },
48
+ "commands": { "type": "string" },
49
+ "templates": { "type": "string" },
50
+ "customCommands": { "type": "string" },
51
+ "forgeRoot": { "type": "string" },
52
+ "forgeRef": { "type": "string" }
53
+ }
54
+ },
55
+ "pipeline": {
56
+ "type": "object",
57
+ "properties": {
58
+ "maxReviewIterations": { "type": "integer", "minimum": 1 }
59
+ }
60
+ },
61
+ "pipelines": {
62
+ "type": "object",
63
+ "description": "Custom pipeline definitions keyed by pipeline name"
64
+ },
65
+ "installedSkills": {
66
+ "type": "array",
67
+ "items": { "type": "string" }
68
+ },
69
+ "calibrationBaseline": {
70
+ "type": "object",
71
+ "properties": {
72
+ "lastCalibrated": { "type": "string" },
73
+ "version": { "type": "string" },
74
+ "masterIndexHash": { "type": "string" },
75
+ "sprintsCovered": { "type": "array", "items": { "type": "string" } }
76
+ }
77
+ },
78
+ "mode": {
79
+ "type": "string",
80
+ "enum": ["full", "fast"]
81
+ }
82
+ }
83
+ }