@curdx/flow 2.2.3 → 2.2.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 (126) hide show
  1. package/.claude-plugin/marketplace.json +3 -2
  2. package/.claude-plugin/plugin.json +2 -1
  3. package/CHANGELOG.md +4 -566
  4. package/README.md +47 -113
  5. package/agents/flow-adversary.md +1 -0
  6. package/agents/flow-architect.md +9 -36
  7. package/agents/flow-brownfield-analyst.md +7 -18
  8. package/agents/flow-debugger.md +1 -0
  9. package/agents/flow-edge-hunter.md +1 -0
  10. package/agents/flow-executor.md +1 -0
  11. package/agents/flow-planner.md +11 -37
  12. package/agents/flow-product-designer.md +9 -41
  13. package/agents/flow-qa-engineer.md +1 -0
  14. package/agents/flow-researcher.md +9 -45
  15. package/agents/flow-reviewer.md +1 -0
  16. package/agents/flow-security-auditor.md +1 -0
  17. package/agents/flow-triage-analyst.md +1 -0
  18. package/agents/flow-ui-researcher.md +1 -0
  19. package/agents/flow-ux-designer.md +1 -0
  20. package/agents/flow-verifier.md +1 -0
  21. package/cli/doctor-workflow.js +5 -914
  22. package/cli/install-companions.js +8 -8
  23. package/cli/lib/doctor-claude-settings.js +736 -0
  24. package/cli/lib/doctor-runtime-environment.js +196 -0
  25. package/cli/lib/semver.js +14 -0
  26. package/cli/uninstall-actions.js +323 -0
  27. package/cli/uninstall.js +9 -253
  28. package/gates/coverage-audit-gate.md +1 -3
  29. package/gates/tdd-gate.md +0 -6
  30. package/gates/verification-gate.md +1 -5
  31. package/knowledge/artifact-output-discipline.md +24 -0
  32. package/knowledge/artifact-summary-contracts.md +50 -0
  33. package/knowledge/execution-strategies.md +6 -4
  34. package/knowledge/poc-first-workflow.md +2 -6
  35. package/knowledge/spec-driven-development.md +0 -4
  36. package/knowledge/systematic-debugging.md +0 -6
  37. package/knowledge/two-stage-review.md +8 -6
  38. package/knowledge/wave-execution.md +2 -1
  39. package/package.json +2 -2
  40. package/schemas/agent-frontmatter.schema.json +4 -0
  41. package/skills/brownfield-index/SKILL.md +14 -20
  42. package/skills/brownfield-index/references/applicability.md +12 -0
  43. package/skills/brownfield-index/references/handoff.md +8 -0
  44. package/skills/brownfield-index/references/index-contract.md +10 -0
  45. package/skills/browser-qa/SKILL.md +15 -35
  46. package/skills/browser-qa/references/handoff.md +6 -0
  47. package/skills/browser-qa/references/prerequisites.md +10 -0
  48. package/skills/browser-qa/references/qa-contract.md +20 -0
  49. package/skills/cancel/SKILL.md +20 -61
  50. package/skills/cancel/references/destructive-mode.md +17 -0
  51. package/skills/cancel/references/reporting.md +18 -0
  52. package/skills/cancel/references/state-recovery.md +30 -0
  53. package/skills/cancel/references/target-resolution.md +7 -0
  54. package/skills/debug/SKILL.md +23 -87
  55. package/skills/debug/references/context-gathering.md +11 -0
  56. package/skills/debug/references/failure-guard.md +25 -0
  57. package/skills/debug/references/intake.md +12 -0
  58. package/skills/debug/references/phase-workflow.md +34 -0
  59. package/skills/debug/references/reporting.md +20 -0
  60. package/skills/epic/SKILL.md +18 -50
  61. package/skills/epic/references/epic-artifacts.md +20 -0
  62. package/skills/epic/references/epic-intake.md +9 -0
  63. package/skills/epic/references/slice-handoff.md +16 -0
  64. package/skills/fast/SKILL.md +34 -102
  65. package/skills/fast/references/applicability.md +25 -0
  66. package/skills/fast/references/clarification.md +20 -0
  67. package/skills/fast/references/execution-contract.md +56 -0
  68. package/skills/help/SKILL.md +26 -132
  69. package/skills/help/references/dispatch.md +20 -0
  70. package/skills/help/references/overview.md +39 -0
  71. package/skills/help/references/troubleshoot.md +47 -0
  72. package/skills/help/references/workflow.md +37 -0
  73. package/skills/implement/SKILL.md +61 -237
  74. package/skills/implement/references/error-recovery.md +36 -0
  75. package/skills/implement/references/linear-execution.md +32 -0
  76. package/skills/implement/references/preflight.md +43 -0
  77. package/skills/implement/references/progress-contract.md +32 -0
  78. package/skills/implement/references/state-init.md +33 -0
  79. package/skills/implement/references/stop-hook-execution.md +36 -0
  80. package/skills/implement/references/strategy-router.md +38 -0
  81. package/skills/implement/references/subagent-execution.md +43 -0
  82. package/skills/init/SKILL.md +26 -95
  83. package/skills/init/references/gitignore-and-health.md +26 -0
  84. package/skills/init/references/next-steps.md +22 -0
  85. package/skills/init/references/preflight.md +15 -0
  86. package/skills/init/references/scaffold-contract.md +27 -0
  87. package/skills/review/SKILL.md +45 -153
  88. package/skills/review/references/optional-passes.md +48 -0
  89. package/skills/review/references/preflight.md +38 -0
  90. package/skills/review/references/report-contract.md +49 -0
  91. package/skills/review/references/reporting.md +20 -0
  92. package/skills/review/references/stage-execution.md +32 -0
  93. package/skills/security-audit/SKILL.md +16 -34
  94. package/skills/security-audit/references/audit-contract.md +21 -0
  95. package/skills/security-audit/references/gate-handoff.md +8 -0
  96. package/skills/security-audit/references/scope-and-depth.md +9 -0
  97. package/skills/spec/SKILL.md +55 -182
  98. package/skills/spec/references/artifact-landing.md +31 -0
  99. package/skills/spec/references/phase-execution.md +50 -0
  100. package/skills/spec/references/planning-review.md +31 -0
  101. package/skills/spec/references/preflight-and-routing.md +46 -0
  102. package/skills/spec/references/reporting.md +21 -0
  103. package/skills/start/SKILL.md +40 -123
  104. package/skills/start/references/branch-routing.md +51 -0
  105. package/skills/start/references/mode-semantics.md +12 -0
  106. package/skills/start/references/preflight.md +13 -0
  107. package/skills/start/references/reporting.md +20 -0
  108. package/skills/start/references/state-seeding.md +44 -0
  109. package/skills/start/references/workflow-handoff.md +26 -0
  110. package/skills/status/SKILL.md +17 -61
  111. package/skills/status/references/gather-contract.md +27 -0
  112. package/skills/status/references/health-rules.md +27 -0
  113. package/skills/status/references/output-contract.md +24 -0
  114. package/skills/status/references/preflight.md +10 -0
  115. package/skills/status/references/recovery-hints.md +18 -0
  116. package/skills/ui-sketch/SKILL.md +15 -34
  117. package/skills/ui-sketch/references/brief-intake.md +10 -0
  118. package/skills/ui-sketch/references/iteration-handoff.md +5 -0
  119. package/skills/ui-sketch/references/variant-contract.md +15 -0
  120. package/skills/verify/SKILL.md +31 -86
  121. package/skills/verify/references/evidence-workflow.md +39 -0
  122. package/skills/verify/references/output-contract.md +23 -0
  123. package/skills/verify/references/preflight.md +11 -0
  124. package/skills/verify/references/report-handoff.md +35 -0
  125. package/skills/verify/references/strict-mode.md +12 -0
  126. package/README.zh.md +0 -160
package/cli/uninstall.js CHANGED
@@ -2,48 +2,22 @@
2
2
  * uninstall command — remove curdx-flow plugin (and optionally recommended plugins / artifacts).
3
3
  */
4
4
 
5
- import { existsSync, lstatSync, unlinkSync, rmSync, readlinkSync } from "node:fs";
6
- import { join } from "node:path";
7
- import { homedir } from "node:os";
8
-
9
- import {
10
- color,
11
- log,
12
- resultLastLine,
13
- resultOutput,
14
- confirm,
15
- listPlugins,
16
- } from "./utils.js";
17
- import { REQUIRED_PLUGINS, RECOMMENDED_PLUGINS, BUNDLED_MCPS } from "./registry.js";
18
- import {
19
- removeMcp,
20
- removePluginMarketplace,
21
- uninstallPlugin,
22
- } from "./lib/claude-ops.js";
5
+ import { log } from "./utils.js";
23
6
  import {
24
7
  createUninstallContext,
25
8
  ensureClaudeCliAvailableForUninstall,
26
- getInstalledTargets,
27
- getManagedMarketplaceIds,
28
9
  printUninstallSummary,
29
10
  removeProtocolsStep,
30
- selectRecommendedPluginsToRemove,
31
- shouldKeepBundledMcps,
32
- shouldKeepRequiredPlugins,
33
- UNINSTALL_STEP_COUNT,
34
11
  confirmUninstallStep,
35
12
  } from "./uninstall-workflow.js";
36
-
37
- const HOME = homedir();
38
-
39
- const RECOMMENDED = RECOMMENDED_PLUGINS.map(toUninstallTarget);
40
- const REQUIRED = REQUIRED_PLUGINS.map(toUninstallTarget);
41
-
42
- // Symlinks created by install.js (only cleaned with --purge)
43
- const MANAGED_SYMLINKS = [
44
- join(HOME, ".local", "bin", "bun"),
45
- join(HOME, ".local", "bin", "uv"),
46
- ];
13
+ import {
14
+ maybePurgeRuntimeArtifacts,
15
+ maybeRemoveBundledMcps,
16
+ maybeRemoveProjectState,
17
+ maybeUninstallRecommendedPlugins,
18
+ maybeUninstallRequiredPlugins,
19
+ uninstallCurdxFlowPlugin,
20
+ } from "./uninstall-actions.js";
47
21
 
48
22
  export async function uninstall(args = []) {
49
23
  const context = createUninstallContext(args);
@@ -66,221 +40,3 @@ export async function uninstall(args = []) {
66
40
 
67
41
  printUninstallSummary(context);
68
42
  }
69
-
70
- async function uninstallCurdxFlowPlugin() {
71
- log.blank();
72
- log.step(1, UNINSTALL_STEP_COUNT, "Uninstalling curdx-flow plugin...");
73
- const curdx = listPlugins().find((plugin) => plugin.name === "curdx-flow");
74
- if (!curdx) {
75
- log.info("curdx-flow not installed, skipping");
76
- return;
77
- }
78
-
79
- const result = await uninstallPlugin({
80
- scope: "user",
81
- uninstallSpec: "curdx-flow@curdx-flow-marketplace",
82
- });
83
- if (result.code === 0) {
84
- log.ok("curdx-flow uninstalled");
85
- return;
86
- }
87
-
88
- log.err(`Uninstall failed: ${resultOutput(result)}`);
89
- }
90
-
91
- async function maybeUninstallRecommendedPlugins({ yes, keepRecommended }) {
92
- log.blank();
93
- log.step(2, UNINSTALL_STEP_COUNT, "Recommended plugins");
94
- if (keepRecommended) {
95
- log.info("Keeping recommended plugins (--keep-recommended)");
96
- return;
97
- }
98
-
99
- const present = getInstalledTargets(RECOMMENDED);
100
- if (present.length === 0) {
101
- log.info("No installed recommended plugins");
102
- return;
103
- }
104
-
105
- const selected = await selectRecommendedPluginsToRemove({ yes, present });
106
- for (const name of selected) {
107
- const entry = present.find((plugin) => plugin.name === name);
108
- if (!entry) continue;
109
- await uninstallNamedPlugin(entry);
110
- }
111
- }
112
-
113
- async function uninstallNamedPlugin(entry) {
114
- log.blank();
115
- console.log(` ${color.cyan("▸")} Uninstalling ${color.bold(entry.name)}...`);
116
- const result = await uninstallPlugin(entry);
117
- if (result.code === 0) {
118
- console.log(` ${color.green("✓")} ${entry.name} uninstalled`);
119
- return;
120
- }
121
-
122
- console.log(
123
- ` ${color.red("✗")} ${entry.name} uninstall failed: ${resultLastLine(result)}`
124
- );
125
- }
126
-
127
- async function maybeRemoveBundledMcps({ yes, keepRecommended }) {
128
- log.blank();
129
- log.info("Required MCP servers (context7, sequential-thinking)");
130
- if (shouldKeepBundledMcps({ yes, keepRecommended })) {
131
- log.info(
132
- color.dim("--yes or --keep-recommended: keeping user-level MCPs (remove manually with `claude mcp remove <name>`)")
133
- );
134
- return;
135
- }
136
-
137
- const removeMcps = await confirm(
138
- `Remove user-level MCPs registered by install (${BUNDLED_MCPS.map((mcp) => mcp.name).join(", ")})? ${color.dim("(keeps them if other tools depend on them)")}`,
139
- false
140
- );
141
- if (!removeMcps) {
142
- log.info("Keeping user-level MCPs");
143
- return;
144
- }
145
-
146
- for (const mcp of BUNDLED_MCPS) {
147
- const result = await removeMcp({ name: mcp.name });
148
- if (result.code === 0) {
149
- log.ok(` ${mcp.name.padEnd(22)} removed`);
150
- } else {
151
- log.info(` ${mcp.name.padEnd(22)} ${color.dim("not present or already removed")}`);
152
- }
153
- }
154
- }
155
-
156
- async function maybeUninstallRequiredPlugins({ yes }) {
157
- log.blank();
158
- log.info("Required companion plugins");
159
- if (shouldKeepRequiredPlugins({ yes })) {
160
- log.info(
161
- color.dim("--yes mode: keeping required companion plugins (use --purge to remove them)")
162
- );
163
- return;
164
- }
165
-
166
- const removeRequired = await confirm(
167
- `Remove required companion plugins (${REQUIRED.map((plugin) => plugin.name).join(", ")})? ${color.dim("(keeps shared tools available if other workflows depend on them)")}`,
168
- false
169
- );
170
- if (!removeRequired) {
171
- log.info("Keeping required companion plugins");
172
- return;
173
- }
174
-
175
- for (const plugin of REQUIRED) {
176
- const result = await uninstallPlugin(plugin);
177
- if (result.code === 0) {
178
- log.ok(` ${plugin.name.padEnd(22)} uninstalled`);
179
- } else {
180
- log.info(` ${plugin.name.padEnd(22)} ${color.dim("not present or already removed")}`);
181
- }
182
- }
183
- }
184
-
185
- async function maybePurgeRuntimeArtifacts({ purge }) {
186
- log.blank();
187
- log.step(3, UNINSTALL_STEP_COUNT, "Runtime symlinks and marketplaces");
188
- if (!purge) {
189
- log.info(
190
- color.dim("Keeping ~/.local/bin/bun, ~/.local/bin/uv (use --purge to remove)")
191
- );
192
- log.info(
193
- color.dim("Reason: these bun/uv binaries may be used by other tools — confirm before deleting")
194
- );
195
- return;
196
- }
197
-
198
- await purgeManagedMarketplaces();
199
- removeManagedSymlinks();
200
- }
201
-
202
- async function purgeManagedMarketplaces() {
203
- const marketplaceIds = getManagedMarketplaceIds(RECOMMENDED.concat(REQUIRED));
204
-
205
- for (const marketplaceId of marketplaceIds) {
206
- const result = await removePluginMarketplace(marketplaceId);
207
- if (result.code === 0) {
208
- log.ok(`Removed marketplace ${marketplaceId}`);
209
- } else if (!result.stderr.includes("not found")) {
210
- log.warn(`Failed to remove marketplace ${marketplaceId}: ${resultLastLine(result)}`);
211
- }
212
- }
213
- }
214
-
215
- function removeManagedSymlinks() {
216
- for (const link of MANAGED_SYMLINKS) {
217
- if (!existsSync(link) && !isBrokenSymlink(link)) {
218
- continue;
219
- }
220
- try {
221
- const stat = lstatSync(link);
222
- if (!stat.isSymbolicLink()) {
223
- log.warn(
224
- `${link} is not a symlink (likely a real file placed by the user), skipping`
225
- );
226
- continue;
227
- }
228
- const target = readlinkSync(link);
229
- unlinkSync(link);
230
- log.ok(`Removed symlink ${link} ${color.dim(`(was → ${target})`)}`);
231
- } catch (err) {
232
- log.warn(`Failed to remove ${link}: ${err.message}`);
233
- }
234
- }
235
- }
236
-
237
- async function maybeRemoveProjectState({ yes }) {
238
- log.blank();
239
- log.step(4, UNINSTALL_STEP_COUNT, "Project state directory");
240
- const flowDir = join(process.cwd(), ".flow");
241
- if (!existsSync(flowDir)) {
242
- log.info(".flow/ does not exist, skipping");
243
- return;
244
- }
245
-
246
- if (yes) {
247
- log.info(
248
- color.dim("--yes mode: keeping .flow/ (contains specs & decisions — confirm by hand before deleting)")
249
- );
250
- return;
251
- }
252
-
253
- const ok = await confirm(
254
- `${color.red("DANGER:")} delete the ${color.bold(".flow/")} directory of the current project? ${color.dim("(includes all specs / decisions, not recoverable)")}`,
255
- false
256
- );
257
- if (!ok) {
258
- log.info("Keeping .flow/");
259
- return;
260
- }
261
-
262
- try {
263
- rmSync(flowDir, { recursive: true, force: true });
264
- log.ok(`Removed ${flowDir}`);
265
- } catch (err) {
266
- log.err(`Removal failed: ${err.message}`);
267
- }
268
- }
269
-
270
- function toUninstallTarget(entry) {
271
- return {
272
- name: entry.name,
273
- uninstallSpec: entry.uninstallSpec,
274
- uninstallArgs: entry.uninstallArgs || [],
275
- marketplaceId: entry.marketplaceId,
276
- scope: entry.scope,
277
- };
278
- }
279
-
280
- function isBrokenSymlink(pathname) {
281
- try {
282
- return lstatSync(pathname).isSymbolicLink();
283
- } catch {
284
- return false;
285
- }
286
- }
@@ -7,8 +7,6 @@ depends_on: []
7
7
 
8
8
  # Coverage Audit Gate — Multi-Source Coverage Audit
9
9
 
10
- > Derived from get-shit-done's "Multi-Source Coverage Audit".
11
- >
12
10
  > Rule: every claim in the spec must be covered by implementation/tests. Uncovered = missed = future bug.
13
11
 
14
12
  ---
@@ -181,4 +179,4 @@ Fix recommendations:
181
179
 
182
180
  ---
183
181
 
184
- _Source: get-shit-done's multi-source coverage audit._
182
+ _Source: CurDX-Flow multi-source coverage audit contract._
package/gates/tdd-gate.md CHANGED
@@ -8,8 +8,6 @@ depends_on: []
8
8
  # TDD Gate — Red/Green/Yellow Cycle Enforcement
9
9
 
10
10
  > **Iron rule**: NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST.
11
- >
12
- > Source: superpowers' test-driven-development skill.
13
11
 
14
12
  ---
15
13
 
@@ -182,7 +180,3 @@ Compliant: 4
182
180
  Fix recommendations:
183
181
  T2: add test test(auth): red - password hashing, verify it fails, then redo GREEN
184
182
  ```
185
-
186
- ---
187
-
188
- _Source: superpowers' test-driven-development skill._
@@ -7,7 +7,7 @@ depends_on: []
7
7
 
8
8
  # Verification Gate — Verification Required Before Completion
9
9
 
10
- > **Always enabled**. No evidence = no completion. This is the Superpowers "Verification Before Completion" iron rule.
10
+ > **Always enabled**. No evidence = no completion. Verification must be based on observed proof, not claimed completion.
11
11
 
12
12
  ---
13
13
 
@@ -177,7 +177,3 @@ Warnings: 1
177
177
  Fix recommendations:
178
178
  V1: dispatch flow-executor to run tests, add evidence to the commit message body
179
179
  ```
180
-
181
- ---
182
-
183
- _Source: superpowers' verification-before-completion skill. CurdX-Flow turns it into a gate._
@@ -0,0 +1,24 @@
1
+ # Artifact Output Discipline
2
+
3
+ Use this discipline for artifact-producing agents that write canonical files
4
+ such as `research.md`, `requirements.md`, `design.md`, `tasks.md`, or
5
+ `codebase-index.md`.
6
+
7
+ ## Core Rules
8
+
9
+ 1. Write the artifact first. The first substantive action should be the `Write`
10
+ tool call for the final file content.
11
+ 2. Do not preview or paraphrase the artifact inline. The file is the
12
+ deliverable.
13
+ 3. Keep status updates minimal: short bullets or fixed summary lines only.
14
+ 4. End with the exact compact output contract defined by the agent-specific
15
+ section. No extra explanation before or after it.
16
+ 5. If something blocks the write, report the blocker directly instead of
17
+ emitting a fake success summary.
18
+
19
+ ## Why
20
+
21
+ - Prevents context waste from duplicating the artifact in chat
22
+ - Makes the written file the canonical output surface
23
+ - Keeps artifact-producing subagents consistent across research, product,
24
+ architecture, planning, and brownfield mapping
@@ -0,0 +1,50 @@
1
+ # Artifact Summary Contracts
2
+
3
+ Use these compact summary contracts after an artifact lands successfully. Pair
4
+ them with `artifact-output-discipline.md`: write first, no preview, then emit
5
+ the exact contract below and stop.
6
+
7
+ ## research.md
8
+
9
+ ```text
10
+ ✓ research.md generated
11
+ Recommendations: N
12
+ Next: /curdx-flow:spec --phase=requirements
13
+ ```
14
+
15
+ ## requirements.md
16
+
17
+ ```text
18
+ ✓ requirements.md generated
19
+ User stories: N
20
+ Functional requirements: N
21
+ Next: /curdx-flow:spec --phase=design
22
+ ```
23
+
24
+ ## design.md
25
+
26
+ ```text
27
+ ✓ design.md generated
28
+ Architecture decisions: N
29
+ Components: N
30
+ Next: /curdx-flow:spec --phase=tasks
31
+ ```
32
+
33
+ ## tasks.md
34
+
35
+ ```text
36
+ ✓ tasks.md generated
37
+ Total tasks: N
38
+ Coverage audit: PASS
39
+ Phases: 1-5
40
+ Next: /curdx-flow:implement
41
+ ```
42
+
43
+ ## codebase-index.md
44
+
45
+ ```text
46
+ ✓ codebase-index.md generated
47
+ Modules: N
48
+ Entry points: N
49
+ Next: /curdx-flow:start <feature-name>
50
+ ```
@@ -76,7 +76,7 @@ main agent
76
76
  - ✓ Quality-first (every task must be high-quality, avoid context pollution)
77
77
  - ✓ Moderate task size (2-15 minutes)
78
78
  - ✓ Tasks relatively independent, no complex shared context needed
79
- - ✓ Superpowers style
79
+ - ✓ Stable per-task quality matters more than dispatch overhead
80
80
 
81
81
  ### Advantages
82
82
  - Each subagent uses at most ~30% context → stable quality
@@ -127,7 +127,7 @@ Safety invariant: `ALL_TASKS_COMPLETE` is advisory, not authoritative. If `tasks
127
127
  - ✓ Long task chains (20+)
128
128
  - ✓ Unattended execution (overnight automation)
129
129
  - ✓ You don't want to trigger each step manually
130
- - ✓ smart-ralph style
130
+ - ✓ Long-running sequential work with checkpointed continuation
131
131
 
132
132
  ### Advantages
133
133
  - Truly autonomous execution — the user can walk away
@@ -169,7 +169,7 @@ main agent
169
169
  - ✓ Many `[P]` markers in tasks.md
170
170
  - ✓ Tasks are independent (different files, different components)
171
171
  - ✓ Time-pressured (parallelism is faster)
172
- - ✓ get-shit-done style
172
+ - ✓ Parallel-safe delivery work
173
173
 
174
174
  ### Advantages
175
175
  - Wall-clock time greatly reduced (N parallel tasks at once)
@@ -298,4 +298,6 @@ Claude Code checkpoints plus `.flow/specs/<name>/.progress.md` are the current r
298
298
 
299
299
  ---
300
300
 
301
- _Adapted from smart-ralph (stop-hook), superpowers (subagent), get-shit-done (wave)._
301
+ This document defines CurDX-Flow's shipped strategy semantics: stop-hook for
302
+ checkpointed continuation, subagent for serial isolated execution, and wave for
303
+ parallel batches.
@@ -114,7 +114,7 @@ Commit: `refactor(scope): yellow - <what was cleaned up>`
114
114
  ### Pitfalls
115
115
  - **Code first, tests after** → not TDD, this is post-hoc testing. Easily misses edge cases.
116
116
  - **Tests only cover happy path** → no error handling coverage; the common cause of production issues.
117
- - **Too much mocking** → tests disconnected from real behavior. See Superpowers' "integration tests hit real DB" lesson.
117
+ - **Too much mocking** → tests disconnected from real behavior. Keep primary evidence anchored to real integrations at system boundaries.
118
118
 
119
119
  ---
120
120
 
@@ -211,7 +211,7 @@ Feature is verified, reviewed, and ready for a human PR/release decision.
211
211
 
212
212
  ## Relationship to the TDD Iron Rule
213
213
 
214
- **TDD iron rule inherited from Superpowers**: "NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST"
214
+ **TDD iron rule**: "NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST"
215
215
 
216
216
  **POC-First's compromise**: Phase 1 allows skipping tests because the purpose of POC is to validate the idea, not to deliver.
217
217
 
@@ -221,7 +221,3 @@ Feature is verified, reviewed, and ready for a human PR/release decision.
221
221
  - Newly added **production code**: must be covered by Phase 3 TDD loop
222
222
 
223
223
  The two don't conflict: POC is not production code; production code starts at Phase 2.
224
-
225
- ---
226
-
227
- _Adapted from smart-ralph's POC-First workflow, extended with superpowers' TDD discipline._
@@ -178,7 +178,3 @@ The two complement each other:
178
178
  - Agents `mcp__claude_mem__search` the history before starting research
179
179
  - What gets written into research.md is filtered, retention-worthy conclusions
180
180
  - Subsequent sessions: claude-mem auto-injects recent context; spec files provide the structured overview
181
-
182
- ---
183
-
184
- _Adapted from smart-ralph's spec engine, extended with get-shit-done's multi-source audit._
@@ -1,7 +1,5 @@
1
1
  # Systematic Debugging — 4-Stage Methodology
2
2
 
3
- > Inherited from superpowers' systematic-debugging skill.
4
- >
5
3
  > Agents reference this via `@${CLAUDE_PLUGIN_ROOT}/knowledge/systematic-debugging.md`.
6
4
 
7
5
  ---
@@ -378,7 +376,3 @@ The value of systematic debugging:
378
376
  Unsystematic → fixes fast but fragile → bitten again by the same bug
379
377
  Systematic → fixes slow but thorough → solved once, never looked back
380
378
  ```
381
-
382
- ---
383
-
384
- _Source: superpowers' systematic-debugging skill._
@@ -1,6 +1,6 @@
1
1
  # Two-Stage Review — Two-Stage Code Review
2
2
 
3
- > CurdX-Flow version of Superpowers' code review skill.
3
+ > CurDX-Flow runtime contract for two-stage review.
4
4
  >
5
5
  > Agents reference this via `@${CLAUDE_PLUGIN_ROOT}/knowledge/two-stage-review.md`.
6
6
 
@@ -129,6 +129,12 @@ Stage 2 applies all enabled Gates (from `.flow/config.json`):
129
129
  - Each applicable edge-case category addressed (N/A noted for the rest)?
130
130
  - Gap list has priorities?
131
131
 
132
+ #### 2.8 (enterprise) DevEx review (devex-gate)
133
+
134
+ - Are naming, comments, and structure maintainable for the next engineer?
135
+ - Is setup, typing, and test ergonomics acceptable without tribal knowledge?
136
+ - Does the developer loop stay fast enough to keep future changes safe?
137
+
132
138
  ### Stage 2 verdict
133
139
 
134
140
  - **EXCELLENT**: all enabled Gates pass, adversarial review clean or only low-severity findings
@@ -232,7 +238,7 @@ Some reviewers list 50 minor improvements — the user can't process.
232
238
  ↓ ↓
233
239
  ↓ review-report.md
234
240
 
235
- (optional) /curdx-flow:review --adversarial --edge-case
241
+ (optional) /curdx-flow:review --adversarial --edge-case --devex
236
242
 
237
243
  adversarial-review.md
238
244
  edge-cases.md
@@ -241,7 +247,3 @@ Ready for human PR/release handoff with verification + review evidence
241
247
  ```
242
248
 
243
249
  Verify is "did we implement the right thing", Review is "is the implementation good", Audit is "what else could be better". CurdX-Flow currently stops at evidence-backed handoff; do not reference non-existent ship/land commands.
244
-
245
- ---
246
-
247
- _Source: superpowers' code-review two-stage design, extended with CurdX-Flow's Gate system._
@@ -399,4 +399,5 @@ As in "Case 3" above. Solutions:
399
399
 
400
400
  ---
401
401
 
402
- _Source: get-shit-done's wave execution. CurdX-Flow turns it from a concept into executable logic._
402
+ _Source: CurDX-Flow wave execution contract. This file defines the executable
403
+ parallel-delivery rules used by the plugin runtime._
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@curdx/flow",
3
- "version": "2.2.3",
4
- "description": "CLI installer for CurdX-Flow AI engineering workflow meta-framework for Claude Code",
3
+ "version": "2.2.5",
4
+ "description": "Skill-first discipline layer and CLI installer for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "curdx-flow": "bin/curdx-flow.js"
@@ -54,6 +54,10 @@
54
54
  "isolation": {
55
55
  "type": "string",
56
56
  "enum": ["worktree"]
57
+ },
58
+ "color": {
59
+ "type": "string",
60
+ "enum": ["red", "blue", "green", "yellow", "purple", "orange", "pink", "cyan"]
57
61
  }
58
62
  }
59
63
  }
@@ -30,30 +30,24 @@ paths:
30
30
 
31
31
  # Brownfield Index
32
32
 
33
- You are invoked when the user needs a structural map of an existing codebase they are not yet familiar with.
33
+ This is a fast structural mapping skill for inherited codebases. Keep the
34
+ entrypoint focused on when to index, what the analyst must produce, and where
35
+ to route the user next. Detailed rules live in:
34
36
 
35
- ## Preconditions
36
-
37
- 1. The repository root is the current working directory (or a path the user specifies).
38
- 2. The project is not a new `/curdx-flow:init`-ed greenfield project (if it is, direct the user to `/curdx-flow:start` instead).
39
-
40
- ## Workflow
37
+ - `references/applicability.md`
38
+ - `references/index-contract.md`
39
+ - `references/handoff.md`
41
40
 
42
- This skill runs in a forked context through `flow-brownfield-analyst`, which will:
43
-
44
- 1. Detect the actual stack from the repo's manifests.
45
- 2. Scan structure, entry points, module boundaries, and developer-loop commands.
46
- 3. Map API / CLI surfaces when they exist.
47
- 4. Write `.flow/codebase-index.md` with concrete next actions.
41
+ ## Preconditions
48
42
 
49
- ### Hand off
43
+ Use `references/applicability.md` to decide whether the repository actually
44
+ needs a brownfield index first.
50
45
 
51
- Point the user at the next useful action:
52
- - "Looking to add a feature here? Run `/curdx-flow:start <name>` to begin a spec."
53
- - "Debugging something specific? Run `/curdx-flow:debug '<symptom>'`."
46
+ ## Index Contract
54
47
 
55
- ## Notes
48
+ `flow-brownfield-analyst` writes the structural map defined in
49
+ `references/index-contract.md`.
56
50
 
57
- The index is meant to be quick and decision-useful, not exhaustive.
51
+ ## Handoff
58
52
 
59
- For deep research into a specific library or framework, use `context7` MCP directly.
53
+ Use `references/handoff.md` to route the user to the next relevant command.
@@ -0,0 +1,12 @@
1
+ # Brownfield Applicability — When to Index First
2
+
3
+ Use this skill when:
4
+
5
+ - the repository is unfamiliar, inherited, or legacy
6
+ - the user needs a quick structural map before feature work
7
+
8
+ Do not use it for a fresh greenfield repo that should start directly with:
9
+
10
+ ```text
11
+ /curdx-flow:start <name> "<goal>"
12
+ ```
@@ -0,0 +1,8 @@
1
+ # Brownfield Handoff — What to Do After Indexing
2
+
3
+ Route to the next concrete action:
4
+
5
+ - feature work -> `/curdx-flow:start <name> "<goal>"`
6
+ - targeted bug work -> `/curdx-flow:debug "<symptom>"`
7
+
8
+ For deep framework or library research, use Context7 directly.
@@ -0,0 +1,10 @@
1
+ # Brownfield Index Contract — What the Analyst Must Produce
2
+
3
+ `flow-brownfield-analyst` should:
4
+
5
+ 1. detect the actual stack from manifests
6
+ 2. scan structure, entry points, boundaries, and developer-loop commands
7
+ 3. map API or CLI surfaces when they exist
8
+ 4. write `.flow/codebase-index.md`
9
+
10
+ The index should be quick and decision-useful, not exhaustive.