@fluentcommerce/ai-skills 0.2.0 → 0.3.0

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.

Potentially problematic release.


This version of @fluentcommerce/ai-skills might be problematic. Click here for more details.

Files changed (169) hide show
  1. package/README.md +866 -616
  2. package/bin/cli.mjs +2112 -1973
  3. package/content/cli/agents/fluent-cli/agent.json +149 -149
  4. package/content/cli/agents/fluent-cli.md +132 -132
  5. package/content/cli/skills/fluent-bootstrap/SKILL.md +214 -190
  6. package/content/cli/skills/fluent-cli-index/SKILL.md +1 -1
  7. package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +117 -1
  8. package/content/cli/skills/fluent-cli-reference/SKILL.md +1040 -623
  9. package/content/cli/skills/fluent-cli-retailer/SKILL.md +27 -2
  10. package/content/cli/skills/fluent-cli-settings/SKILL.md +21 -1
  11. package/content/cli/skills/fluent-connect/SKILL.md +937 -886
  12. package/content/cli/skills/fluent-module-deploy/SKILL.md +181 -17
  13. package/content/cli/skills/fluent-profile/SKILL.md +73 -0
  14. package/content/cli/skills/fluent-workflow/SKILL.md +360 -310
  15. package/content/dev/agents/fluent-backend-dev/AGENT.md +58 -0
  16. package/content/dev/agents/fluent-backend-dev/agent.json +69 -0
  17. package/content/dev/agents/fluent-backend-dev.md +287 -0
  18. package/content/dev/agents/fluent-dev/AGENT.md +98 -76
  19. package/content/dev/agents/fluent-dev/agent.json +24 -2
  20. package/content/dev/agents/fluent-dev.md +194 -524
  21. package/content/dev/agents/fluent-frontend-dev/AGENT.md +63 -0
  22. package/content/dev/agents/fluent-frontend-dev/agent.json +52 -0
  23. package/content/dev/agents/fluent-frontend-dev.md +323 -0
  24. package/content/dev/skills/fluent-archive/SKILL.md +234 -0
  25. package/content/dev/skills/fluent-build/SKILL.md +312 -170
  26. package/content/dev/skills/fluent-connection-analysis/SKILL.md +422 -386
  27. package/content/dev/skills/fluent-custom-code/SKILL.md +15 -9
  28. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +731 -0
  29. package/content/dev/skills/fluent-e2e-test/SKILL.md +501 -394
  30. package/content/dev/skills/fluent-event-api/SKILL.md +962 -945
  31. package/content/dev/skills/fluent-feature-explain/SKILL.md +680 -603
  32. package/content/dev/skills/fluent-feature-plan/PLAN_TEMPLATE.md +40 -11
  33. package/content/dev/skills/fluent-feature-plan/SKILL.md +478 -221
  34. package/content/dev/skills/fluent-feature-status/SKILL.md +335 -0
  35. package/content/dev/skills/fluent-feedback/SKILL.md +221 -0
  36. package/content/dev/skills/fluent-implementation-map/SKILL.md +644 -0
  37. package/content/dev/skills/fluent-job-batch/SKILL.md +10 -0
  38. package/content/dev/skills/fluent-module-scaffold/SKILL.md +134 -3
  39. package/content/dev/skills/fluent-module-validate/SKILL.md +778 -775
  40. package/content/dev/skills/fluent-mystique-analyze/SKILL.md +817 -0
  41. package/content/dev/skills/fluent-mystique-builder/COMPONENT_TEMPLATE.md +81 -0
  42. package/content/dev/skills/fluent-mystique-builder/README.md +63 -0
  43. package/content/dev/skills/fluent-mystique-builder/SKILL.md +1294 -0
  44. package/content/dev/skills/fluent-mystique-builder/components/INDEX.md +92 -0
  45. package/content/dev/skills/fluent-mystique-builder/components/fc.accordion.md +48 -0
  46. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.fulfilmentpack.md +20 -0
  47. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.multiparcel.md +21 -0
  48. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.returnitems.md +21 -0
  49. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.wavepick.md +21 -0
  50. package/content/dev/skills/fluent-mystique-builder/components/fc.action.inline.md +24 -0
  51. package/content/dev/skills/fluent-mystique-builder/components/fc.activity.entity.md +25 -0
  52. package/content/dev/skills/fluent-mystique-builder/components/fc.analytics.viz.md +20 -0
  53. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.column.md +111 -0
  54. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.json.md +20 -0
  55. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.jsoneditor.md +54 -0
  56. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.locationId.md +51 -0
  57. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.retailerId.md +52 -0
  58. package/content/dev/skills/fluent-mystique-builder/components/fc.button.bar.md +57 -0
  59. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.download.md +53 -0
  60. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.compatibility.md +60 -0
  61. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.md +53 -0
  62. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.md +24 -0
  63. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.pick.md +61 -0
  64. package/content/dev/skills/fluent-mystique-builder/components/fc.buttons.add.reject.md +20 -0
  65. package/content/dev/skills/fluent-mystique-builder/components/fc.card.attribute.md +73 -0
  66. package/content/dev/skills/fluent-mystique-builder/components/fc.card.attributes.grid.md +40 -0
  67. package/content/dev/skills/fluent-mystique-builder/components/fc.card.image.md +37 -0
  68. package/content/dev/skills/fluent-mystique-builder/components/fc.card.map.point.md +24 -0
  69. package/content/dev/skills/fluent-mystique-builder/components/fc.card.multi.md +79 -0
  70. package/content/dev/skills/fluent-mystique-builder/components/fc.card.product.md +27 -0
  71. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.md +34 -0
  72. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.wrapper.feed.md +98 -0
  73. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.md +52 -0
  74. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.wrapper.source.md +104 -0
  75. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.md +28 -0
  76. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.wrapper.threshold.md +118 -0
  77. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.line.md +32 -0
  78. package/content/dev/skills/fluent-mystique-builder/components/fc.conditional.md +62 -0
  79. package/content/dev/skills/fluent-mystique-builder/components/fc.dashboard.threshold.md +65 -0
  80. package/content/dev/skills/fluent-mystique-builder/components/fc.daterange.wrapper.forwarder.md +56 -0
  81. package/content/dev/skills/fluent-mystique-builder/components/fc.drawer.button.md +21 -0
  82. package/content/dev/skills/fluent-mystique-builder/components/fc.event.detail.md +20 -0
  83. package/content/dev/skills/fluent-mystique-builder/components/fc.events.search.md +21 -0
  84. package/content/dev/skills/fluent-mystique-builder/components/fc.field.daterange.md +83 -0
  85. package/content/dev/skills/fluent-mystique-builder/components/fc.field.filterComplex.md +106 -0
  86. package/content/dev/skills/fluent-mystique-builder/components/fc.field.intrange.md +82 -0
  87. package/content/dev/skills/fluent-mystique-builder/components/fc.field.multistring.md +50 -0
  88. package/content/dev/skills/fluent-mystique-builder/components/fc.filterPanel.md +53 -0
  89. package/content/dev/skills/fluent-mystique-builder/components/fc.json.editor.md +22 -0
  90. package/content/dev/skills/fluent-mystique-builder/components/fc.json.viewer.md +21 -0
  91. package/content/dev/skills/fluent-mystique-builder/components/fc.list.customAction.md +79 -0
  92. package/content/dev/skills/fluent-mystique-builder/components/fc.list.md +116 -0
  93. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.bppmetrics.md +69 -0
  94. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.feed.md +65 -0
  95. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.source.md +64 -0
  96. package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.addItem.md +60 -0
  97. package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.md +21 -0
  98. package/content/dev/skills/fluent-mystique-builder/components/fc.mutation.inline.md +88 -0
  99. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.attributes.md +83 -0
  100. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.text.md +33 -0
  101. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.link.md +30 -0
  102. package/content/dev/skills/fluent-mystique-builder/components/fc.order.itemDetails.md +20 -0
  103. package/content/dev/skills/fluent-mystique-builder/components/fc.order.shipmentDetails.md +20 -0
  104. package/content/dev/skills/fluent-mystique-builder/components/fc.page.filter.select.md +87 -0
  105. package/content/dev/skills/fluent-mystique-builder/components/fc.page.md +64 -0
  106. package/content/dev/skills/fluent-mystique-builder/components/fc.page.refresh.md +48 -0
  107. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.column.md +71 -0
  108. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.header.md +61 -0
  109. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.md +59 -0
  110. package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.md +45 -0
  111. package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.summary.md +56 -0
  112. package/content/dev/skills/fluent-mystique-builder/components/fc.progress.circular.md +20 -0
  113. package/content/dev/skills/fluent-mystique-builder/components/fc.provider.graphql.md +71 -0
  114. package/content/dev/skills/fluent-mystique-builder/components/fc.quantity.list.md +87 -0
  115. package/content/dev/skills/fluent-mystique-builder/components/fc.repeater.md +56 -0
  116. package/content/dev/skills/fluent-mystique-builder/components/fc.reports.ipuipc.md +54 -0
  117. package/content/dev/skills/fluent-mystique-builder/components/fc.return.rowExpansion.md +19 -0
  118. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcode.md +21 -0
  119. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcodeFilter.md +72 -0
  120. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.camera.md +20 -0
  121. package/content/dev/skills/fluent-mystique-builder/components/fc.settingForm.md +64 -0
  122. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.drawer.button.md +19 -0
  123. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.modal.button.md +64 -0
  124. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.strategy.modal.button.md +20 -0
  125. package/content/dev/skills/fluent-mystique-builder/components/fc.stepper.md +20 -0
  126. package/content/dev/skills/fluent-mystique-builder/components/fc.tab.content.md +56 -0
  127. package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.card.md +64 -0
  128. package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.md +69 -0
  129. package/content/dev/skills/fluent-mystique-builder/components/fc.tile.metric.md +73 -0
  130. package/content/dev/skills/fluent-mystique-builder/components/fc.workflow.provider.md +77 -0
  131. package/content/dev/skills/fluent-mystique-builder/validate-docs.ps1 +260 -0
  132. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1830 -0
  133. package/content/dev/skills/fluent-mystique-validate/SKILL.md +646 -0
  134. package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +1144 -1090
  135. package/content/dev/skills/fluent-retailer-config/SKILL.md +1162 -1120
  136. package/content/dev/skills/fluent-rollback/SKILL.md +387 -0
  137. package/content/dev/skills/fluent-rule-scaffold/SKILL.md +515 -394
  138. package/content/dev/skills/fluent-scope-decompose/SKILL.md +1123 -1021
  139. package/content/dev/skills/fluent-session-audit-export/SKILL.md +880 -632
  140. package/content/dev/skills/fluent-session-summary/SKILL.md +320 -195
  141. package/content/dev/skills/fluent-settings/SKILL.md +151 -2
  142. package/content/dev/skills/fluent-source-onboard/SKILL.md +23 -4
  143. package/content/dev/skills/fluent-sourcing/SKILL.md +14 -0
  144. package/content/dev/skills/fluent-system-monitoring/SKILL.md +771 -767
  145. package/content/dev/skills/fluent-test-data/SKILL.md +514 -513
  146. package/content/dev/skills/fluent-trace/SKILL.md +1169 -1143
  147. package/content/dev/skills/fluent-transition-api/SKILL.md +364 -346
  148. package/content/dev/skills/fluent-use-case-discover/SKILL.md +593 -471
  149. package/content/dev/skills/fluent-use-case-discover/SPEC_TEMPLATE.md +22 -1
  150. package/content/dev/skills/fluent-version-manage/SKILL.md +44 -3
  151. package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +995 -959
  152. package/content/dev/skills/fluent-workflow-builder/SKILL.md +668 -326
  153. package/content/dev/skills/fluent-workflow-deploy/SKILL.md +480 -0
  154. package/content/dev/skills/fluent-workspace-tree/SKILL.md +281 -0
  155. package/content/mcp-extn/agents/fluent-mcp.md +133 -132
  156. package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +812 -800
  157. package/content/mcp-official/agents/fluent-mcp-core.md +91 -91
  158. package/content/mcp-official/skills/fluent-mcp-core/SKILL.md +94 -94
  159. package/content/rfl/skills/fluent-rfl-assess/SKILL.md +172 -172
  160. package/docs/CAPABILITY_MAP.md +106 -73
  161. package/docs/DEPLOYMENT_PROMOTION_RUNBOOK.md +218 -0
  162. package/docs/DESIGN-implementation-map.md +698 -0
  163. package/docs/DEV_WORKFLOW.md +814 -802
  164. package/docs/FLOW_RUN.md +142 -142
  165. package/docs/GETTING_STARTED.md +427 -0
  166. package/docs/USE_CASES.md +906 -50
  167. package/metadata.json +184 -155
  168. package/package.json +7 -2
  169. package/docs/USE_CASES.pdf +0 -0
@@ -1,221 +1,478 @@
1
- ---
2
- name: fluent-feature-plan
3
- description: Produce comprehensive feature implementation plans with universal NEW/EXISTING/MODIFIED/REUSED/OOTB classification across all artifacts. Covers rules, workflows, settings, webhooks, GraphQL operations, cross-entity flows, and deployment. Triggers on "plan feature", "feature plan", "plan implementation", "design feature", "plan this feature", "what do I need to build".
4
- user-invocable: true
5
- allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
- argument-hint: <feature-description> [--profile PROFILE] [--retailer RETAILER_REF]
7
- ---
8
-
9
- # Feature Planner
10
-
11
- Produce comprehensive, self-contained implementation plans for Fluent Commerce features. A "feature" spans multiple artifacts — rules, workflow rulesets, settings, webhooks, entity types, and deployments. The plan is the contract — an implementer can write code from it without ambiguity.
12
-
13
- **This skill is the MANDATORY entry point for any multi-artifact Fluent implementation work.** All downstream implementation skills (`/fluent-rule-scaffold`, `/fluent-workflow-builder`, `/fluent-settings`, `/fluent-build`, `/fluent-module-deploy`) require an approved plan from this skill before they proceed. Each implementation skill has a Pre-flight: Plan Verification step that checks `accounts/<PROFILE>/plans/` for an approved plan. If no plan exists and the work is multi-artifact, those skills will redirect back here.
14
-
15
- **Do NOT use IDE-native plan mechanisms** (e.g., Claude Code's `EnterPlanMode`, Cursor's plan mode) as a substitute for this skill. Those mechanisms write to ephemeral locations that are lost between sessions and do not follow the structured 18-section template.
16
-
17
- ## Template Reference
18
-
19
- **The full plan template with worked examples and section applicability guide lives at: `PLAN_TEMPLATE.md` (in this skill directory).**
20
-
21
- Read that file before producing any plan. It defines:
22
- - The 18-section structure with TOC (including §6.1 Complete Workflow Inventory and §3.6 Workflow Processing Flow)
23
- - Universal Source classification (NEW / EXISTING / MODIFIED / REUSED / OOTB)
24
- - Section applicability guide (which sections are required vs optional)
25
- - Rules classification decision flow
26
- - Diagram requirements (Mermaid stateDiagram-v2, sequenceDiagram, flowchart)
27
- - Plan lifecycle (PENDING → APPROVED → implementation)
28
-
29
- ## When to Use
30
-
31
- Use `/fluent-feature-plan` when the work involves **multiple artifacts**:
32
- - A new capability needing workflow changes + new rules + settings + possibly webhooks
33
- - A change spanning multiple entity types (ORDER → FULFILMENT → LOCATION)
34
- - Any implementation request where the scope isn't covered by a single skill
35
-
36
- **If requirements are unclear**, run `/fluent-use-case-discover` first to produce a structured Business Spec. The spec feeds directly into this skill with section-to-section mapping.
37
-
38
- **For single-artifact work**, the individual skill's Planning Gate is sufficient:
39
- - Single new rule → `/fluent-rule-scaffold` Planning Gate
40
- - Single workflow edit → `/fluent-workflow-builder` Planning Gate
41
- - Settings-only change → `/fluent-settings` Planning Gate
42
- - Retrospective feature documentation → `/fluent-feature-explain`
43
- - Scope document decomposition → `/fluent-scope-decompose`
44
-
45
- ## Phase 1: Discovery
46
-
47
- Before writing a plan, gather evidence to classify every artifact.
48
-
49
- ### 1.1 OOTB Rule Search
50
-
51
- ```
52
- plugin.list name="<keyword>" # e.g., "Fulfilment", "Pickup", "Webhook"
53
- plugin.list name="SendEvent" # standard event forwarding rules
54
- plugin.list compact=true # full inventory (compact payload)
55
- ```
56
-
57
- Determine which parts of the feature can use OOTB rules vs. need custom. For every rule the feature needs, try to find an OOTB match FIRST.
58
-
59
- ### 1.2 Existing Workflows
60
-
61
- ```bash
62
- # Check what's deployed
63
- fluent workflow list -p <PROFILE> -r <RETAILER_REF>
64
- # Download if not local
65
- fluent workflow download -p <PROFILE> -r <RETAILER_REF> -w all -o accounts/<PROFILE>/workflows/<RETAILER_REF>/
66
- ```
67
-
68
- Read workflow JSONs to map existing statuses, rulesets, and triggers. Identify which workflows need modification and their current versions.
69
-
70
- **For §6.1 Complete Workflow Inventory:** Parse each modified workflow's JSON to extract the complete ruleset list — entity type, subtype, trigger event, trigger status, and rule names. This feeds directly into the §6.1 table and §3.6 Workflow Processing Flow diagram. Don't rely on the implementer to manually enumerate rulesets.
71
-
72
- ### 1.3 Existing Settings
73
-
74
- ```bash
75
- # Via MCP
76
- graphql.query: settings(first: 100) filtered by name pattern
77
- # Or via CLI
78
- fluent setting list -p <PROFILE> -r <RETAILER_REF> -n "*keyword*"
79
- ```
80
-
81
- Find settings that already exist vs. need creation.
82
-
83
- ### 1.4 Local Source Analysis
84
-
85
- Search `accounts/<PROFILE>/SOURCE/` for:
86
- - `module.json` rule registrations
87
- - `source-map.json` — if `/fluent-custom-code` was run
88
- - `behavior-map.md` rule behavior descriptions
89
- - Existing Java rule classes for reusable patterns
90
-
91
- ### 1.5 Module Identification
92
-
93
- Identify the target module for new custom rules:
94
- - Search `accounts/<PROFILE>/SOURCE/` for existing modules
95
- - If no module exists, flag `/fluent-module-scaffold` as a prerequisite task
96
-
97
- ## Phase 2: Classification
98
-
99
- For EVERY artifact the feature touches, apply one of these labels:
100
-
101
- | Label | Meaning | Required Detail in Plan |
102
- |-------|---------|------------------------|
103
- | **NEW** | Doesn't exist yet, must be created | Full pseudo logic / value shape / trigger spec |
104
- | **EXISTING** | Already deployed, no modification needed | State current value, confirm no change |
105
- | **MODIFIED** | Already exists but needs changes | Show before → after diff |
106
- | **REUSED** | Pattern exists in codebase, copy the approach | Reference source file/rule |
107
- | **OOTB** | Platform rule, use with configuration only | State which props/values to configure |
108
-
109
- This applies universally across ALL plan sections — rules, rulesets, statuses, settings, webhooks, GraphQL operations, cross-entity impacts, files.
110
-
111
- ## Phase 3: Pseudo Logic for NEW Rules
112
-
113
- For every **NEW** rule, write pseudo logic that is:
114
- - **Unambiguous** — a developer can implement from it without asking questions
115
- - **Shows data flow**: READ → VALIDATE → QUERY → BUILD → MUTATE → LOG
116
- - **Shows branching**: IF/ELSE with error paths and thrown exceptions
117
- - **References specific APIs**: `DynamicUtils.queryList()`, `SettingUtils.getSettingByRef()`, `JsonUtils.getJsonPath()`
118
- - **Stays at design level** — NOT Java code, but precise enough to translate directly
119
-
120
- ```
121
- FUNCTION run(context):
122
- order = context.getEntity()
123
- event = context.getEvent()
124
-
125
- // 1. Extract required fields
126
- pickupLocationRef = extractFromPath(event, props.pickupLocationPath)
127
- IF pickupLocationRef IS NULL:
128
- THROW "Pickup location ref required but null at path: {pickupLocationPath}"
129
-
130
- // 2. Fetch order items
131
- items = DynamicUtils.queryList(context, "items", OrderItem.class, null)
132
- IF items IS EMPTY:
133
- THROW "Order has no items cannot create fulfilment"
134
-
135
- // 3. Read config from setting
136
- config = SettingUtils.getSettingByRef(context, props.configSettingName)
137
- maxPickupHours = config.lobValue.maxPickupHours
138
-
139
- // 4. Validate
140
- IF requestedPickupTime > order.createdOn + maxPickupHours hours:
141
- THROW "Pickup window expired"
142
-
143
- // 5. Build and mutate
144
- fulfilmentRef = "CURB-{order.ref}-{pickupLocationRef}"
145
- DynamicUtils.create(context, CreateFulfilmentInput { ref, type, items, attributes })
146
-
147
- // 6. Log
148
- context.addLog("Created curbside fulfilment {fulfilmentRef}")
149
- ```
150
-
151
- **For OOTB rules**: just state the configuration props to set in the ruleset — no pseudo logic needed.
152
-
153
- **For EXISTING rules**: confirm "no code changes" or describe the modification.
154
-
155
- ## Phase 4: Plan Writing
156
-
157
- **Write to:** `accounts/<PROFILE>/plans/<YYYY-MM-DD>-feature-plan-<slug>.md`
158
-
159
- Follow the 18-section template from `PLAN_TEMPLATE.md` (sibling file). Validate all Mermaid diagram blocks per `/fluent-mermaid-validate` before writing the plan file. Key per-section notes:
160
-
161
- | Section | Source-Column Required | Key Content |
162
- |---------|----------------------|-------------|
163
- | §4 Workflows | Yes (NEW/EXISTING/MODIFIED) | Workflow name, current version, action |
164
- | §5 Statuses | Yes | Status, entity type, which ruleset adds it |
165
- | §6 Rulesets | Yes | Trigger event, from/to status, ordered rule list with source annotations |
166
- | §6.1 Complete Workflow Inventory | Yes (when modifying) | ALL rulesets in each modified workflow with NEW/EXISTING/MODIFIED annotations |
167
- | §3.6 Workflow Processing Flow | Yes (when modifying) | Flowchart: complete status→ruleset→status chain, NEW/MODIFIED highlighted |
168
- | §7 Rules Inventory | Yes | ALL rules for the feature with source + purpose |
169
- | §8 Detailed Design | For NEW rules only | Class, params table, pseudo logic, GraphQL ops |
170
- | §9 Settings | Yes | Context, contextId, value type, JSON example for NEW |
171
- | §10 Webhooks | Yes | Setting name, method, payload shape |
172
- | §11 Scheduled Events | Yes | Event name, delay, purpose |
173
- | §12 GraphQL Ops | Yes (NEW/REUSED) | Query/mutation, root field, selected paths |
174
- | §13 Cross-Entity | Yes | Source → target entity, mechanism |
175
- | §14 Files | Yes (NEW/MODIFIED) | All created/modified files |
176
-
177
- ## Phase 5: Approval
178
-
179
- 1. Set `Status: PENDING`, `Revision: 1`
180
- 2. Present the full plan content to the user
181
- 3. Wait for explicit approval before any implementation
182
- 4. On approval: update `Status: APPROVED`, `Approved by: user`
183
- 5. On rejection: increment `Revision`, revise, re-present
184
- 6. On "just do it": write `Status: APPROVED (auto-skip)`, `Approved by: user (gate skipped)`, proceed
185
-
186
- ## Phase 6: Handoff to Implementation Skills
187
-
188
- After approval, the plan becomes the source of truth. Each skill reads its relevant sections:
189
-
190
- | Artifact Type | Implementation Skill | Plan Sections |
191
- |--------------|---------------------|---------------|
192
- | New custom rules | `/fluent-rule-scaffold` | §7 Rules, §8 Detailed Design |
193
- | Workflow changes | `/fluent-workflow-builder` | §4 Workflows, §5 Statuses, §6 Rulesets |
194
- | Settings | `/fluent-settings` | §9 Settings |
195
- | Module build + deploy | `/fluent-build` → `/fluent-module-deploy` | §17 Deployment |
196
- | E2E verification | `/fluent-e2e-test` | §16 Test Plan |
197
-
198
- The deployment sequence in §17 defines execution order. Track tasks from §17 via TodoWrite.
199
-
200
- ## Updating a Plan Mid-Implementation
201
-
202
- If discovery during implementation reveals missing artifacts:
203
-
204
- 1. Edit the plan file in place — increment `Revision: N+1`
205
- 2. Add a revision note at the bottom with what changed and why
206
- 3. Re-present the changed sections for approval
207
- 4. Continue from the updated plan
208
-
209
- ## Cross-References
210
-
211
- | For | Use |
212
- |-----|-----|
213
- | Plan template structure & worked examples | `PLAN_TEMPLATE.md` (in this skill directory) |
214
- | OOTB rule search | `plugin.list` via MCP |
215
- | Workflow analysis | `/fluent-workflow-analyzer` |
216
- | Custom code analysis | `/fluent-custom-code` |
217
- | Connection topology | `/fluent-connection-analysis` |
218
- | Requirements gathering (before planning) | `/fluent-use-case-discover` |
219
- | Scope decomposition (from scope docs) | `/fluent-scope-decompose` |
220
- | Feature reverse-engineering (existing) | `/fluent-feature-explain` |
221
- | Module scaffolding (if needed) | `/fluent-module-scaffold` |
1
+ ---
2
+ name: fluent-feature-plan
3
+ description: Produce comprehensive feature implementation plans with universal NEW/EXISTING/MODIFIED/REUSED/OOTB classification across all artifacts. Covers rules, workflows, settings, webhooks, GraphQL operations, cross-entity flows, and deployment. Triggers on "plan feature", "feature plan", "plan implementation", "design feature", "plan this feature", "what do I need to build".
4
+ user-invocable: true
5
+ allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
+ argument-hint: <feature-description> [--profile PROFILE] [--retailer RETAILER_REF]
7
+ ---
8
+
9
+ # Feature Planner
10
+
11
+ Produce comprehensive, self-contained implementation plans for Fluent Commerce features. A "feature" spans multiple artifacts — rules, workflow rulesets, settings, webhooks, entity types, and deployments. The plan is the contract — an implementer can write code from it without ambiguity.
12
+
13
+ **This skill is the MANDATORY entry point for any multi-artifact Fluent implementation work.** All downstream implementation skills (`/fluent-rule-scaffold`, `/fluent-workflow-builder`, `/fluent-settings`, `/fluent-build`, `/fluent-module-deploy`) require an approved plan from this skill before they proceed. Each implementation skill has a Pre-flight: Plan Verification step that checks `accounts/<PROFILE>/features/<slug>/status.json` for an approved plan. If no plan exists and the work is multi-artifact, those skills will redirect back here.
14
+
15
+ **Do NOT use IDE-native plan mechanisms** (e.g., Claude Code's `EnterPlanMode`, Cursor's plan mode) as a substitute for this skill. Those mechanisms write to ephemeral locations that are lost between sessions and do not follow the structured 18-section template.
16
+
17
+ ## Template Reference
18
+
19
+ **The full plan template with worked examples and section applicability guide lives at: `PLAN_TEMPLATE.md` (in this skill directory).**
20
+
21
+ Read that file before producing any plan. It defines:
22
+ - The 18-section structure with TOC (including §6.1 Complete Workflow Inventory and §3.6 Workflow Processing Flow)
23
+ - Universal Source classification (NEW / EXISTING / MODIFIED / REUSED / OOTB)
24
+ - Section applicability guide (which sections are required vs optional)
25
+ - Rules classification decision flow
26
+ - Diagram requirements (Mermaid stateDiagram-v2, sequenceDiagram, flowchart)
27
+ - Plan lifecycle (PENDING → APPROVED → implementation)
28
+
29
+ > **Mandatory validation:** Before writing any Mermaid diagram to the plan file, validate syntax via `/fluent-mermaid-validate`. Common pitfalls: missing `direction` in flowcharts, spaces in state names for `stateDiagram-v2`, unquoted special characters in labels. Invalid diagrams render as error blocks in markdown viewers.
30
+
31
+ ## When to Use
32
+
33
+ Use `/fluent-feature-plan` when the work involves **multiple artifacts**:
34
+ - A new capability needing workflow changes + new rules + settings + possibly webhooks
35
+ - A change spanning multiple entity types (ORDER → FULFILMENT → LOCATION)
36
+ - Any implementation request where the scope isn't covered by a single skill
37
+
38
+ **For single-artifact work**, the individual skill's Planning Gate is sufficient:
39
+ - Single new rule → `/fluent-rule-scaffold` Planning Gate
40
+ - Single workflow edit → `/fluent-workflow-builder` Planning Gate
41
+ - Settings-only change → `/fluent-settings` Planning Gate
42
+ - Retrospective feature documentation → `/fluent-feature-explain`
43
+ - Scope document decomposition → `/fluent-scope-decompose`
44
+
45
+ ## Progress
46
+
47
+ Emit this block at each phase transition to show progress:
48
+
49
+ ```
50
+ ▸ /fluent-feature-plan [1/6]
51
+ ✓ Pre-flight checks → Discovery & classification
52
+ Rule inventory ○ Pseudo logic (NEW rules)
53
+ Write plan ○ Present for approval
54
+ ```
55
+
56
+ Update the block as each phase completes — mark completed phases with `✓`, the active phase with `→`, and remaining phases with `○`. Replace `[1/6]` with the current phase number.
57
+
58
+ ## Pre-flight: Requirements Verification (MANDATORY)
59
+
60
+ **A Business Spec is MANDATORY before feature planning.** The agent MUST NOT judge whether requirements are "clear enough" to skip the spec — that decision belongs exclusively to the end user.
61
+
62
+ ### Step 1: Check for approved Business Spec
63
+
64
+ ```bash
65
+ # Check feature directories for an approved spec
66
+ ls accounts/<PROFILE>/features/*/spec.md
67
+ # Or check status.json for spec approval state
68
+ cat accounts/<PROFILE>/features/<slug>/status.json # look for "spec": "APPROVED"
69
+ ```
70
+
71
+ If an **APPROVED** spec exists that matches the requested feature (check `status.json` for `"spec": "APPROVED"`):
72
+ - Read the spec file at `features/<slug>/spec.md`
73
+ - Confirm it covers the feature scope
74
+ - Check the spec's Completeness Score (Section 12 in the spec). If score < 75%, warn: *"Business Spec completeness is below 75%. Specs below this threshold may cause planning gaps. Run `/fluent-use-case-discover` Phase 10 gap analysis to resolve, or proceed with `--force`."*
75
+ - Proceed to Phase 1 using the spec as primary input
76
+ - Reference the spec file path in the plan's §1 Business Context
77
+
78
+ ### Step 2: No approved spec BLOCKED
79
+
80
+ If no approved spec exists at `features/<slug>/spec.md`:
81
+ - **STOP.** Do not proceed to Phase 1.
82
+ - Inform the user: *"No approved Business Spec found. A spec is required before feature planning. I recommend running `/fluent-use-case-discover` to produce a structured Business Spec first. If you want to skip the spec step and go straight to planning, say 'skip spec'."*
83
+ - **IMPORTANT:** Always recommend the spec path. Present it as the default. The skip option is mentioned so the user knows it's available, but the recommendation is always to write the spec.
84
+ - Invoke `/fluent-use-case-discover` to produce a spec
85
+ - Resume `/fluent-feature-plan` only after the spec is **APPROVED**
86
+ - Resume command: `/fluent-feature-plan --feature <slug>`
87
+
88
+ ### User override (explicit only)
89
+
90
+ The user can bypass this check ONLY by explicitly saying: "skip spec", "skip use case", "go straight to plan", or similar **clear, unambiguous instruction**. The agent must NEVER infer a skip from vague statements or from judging that requirements "look structured enough".
91
+
92
+ When the user explicitly overrides:
93
+ 1. Log `Pre-flight: Requirements Check SKIPPED (user override — no approved spec)` in the plan header
94
+ 2. Warn: *"Proceeding without a Business Spec. The plan may contain assumptions that require mid-implementation revision. Consider writing a spec after the plan if gaps emerge."*
95
+ 3. Proceed to Phase 1
96
+
97
+ **What does NOT count as a user override:**
98
+ - The user providing a one-sentence feature description
99
+ - The user listing some requirements conversationally
100
+ - The user saying "this is straightforward" or "it's simple"
101
+ - The agent deciding the request is "clear enough"
102
+
103
+ Only an **explicit instruction to skip** the spec step counts.
104
+
105
+ ## Slug Resolution
106
+
107
+ If the feature directory doesn't exist yet, use the slug auto-suggestion protocol from `/fluent-use-case-discover`. The slug should have been established during spec creation; if not, apply the same rules here:
108
+ 1. Derive from feature/spec title → kebab-case → max 4 words → no dates → no skill prefixes
109
+ 2. Remove filler words (the, a, an, for, with, and)
110
+ 3. Check if `accounts/<PROFILE>/features/<slug>/` already exists
111
+ 4. If exists, reuse the existing slug
112
+ 5. If new, present to user for confirmation before creating directory
113
+
114
+ ### Decision summary
115
+
116
+ ```
117
+ User requests feature
118
+
119
+
120
+ ┌───────────────────────────┐
121
+ 1. Approved spec in │──YES──▶ Proceed to Phase 1
122
+ features/<slug>/ │
123
+ spec.md? │
124
+ ├───────────────────────────┤
125
+ 2. No spec exists │──────▶ BLOCKED
126
+ │ │ Recommend: /fluent-use-case-discover
127
+ │ │ Mention skip option to user
128
+ ├───────────────────────────┤
129
+ │ 3. User explicitly says │──YES──▶ Proceed to Phase 1 (log override + warn)
130
+ "skip spec"? │
131
+ └───────────────────────────┘
132
+
133
+ NEVER auto-proceed without a spec. NEVER judge requirements as "sufficient".
134
+ The decision to skip belongs to the end user, not the agent.
135
+ ```
136
+
137
+ ## Handoff Protocol
138
+
139
+ ### Mandatory approval gate before implementation
140
+
141
+ After writing the plan to `features/<slug>/plan.md`, the agent MUST:
142
+ 1. Present the plan to the user for review
143
+ 2. **STOP and WAIT** for explicit user approval ("approved", "go ahead", "looks good", "do it")
144
+ 3. Only after user approval: update `status.json` to `plan: "APPROVED"` and emit `-> NEXT`
145
+ 4. If the user asks questions or requests changes → answer/apply changes, keep waiting for approval
146
+ 5. **NEVER auto-advance to implementation skills** — the approval gate is mandatory
147
+
148
+ ### Signals emitted by this skill
149
+
150
+ | Signal | Condition | Example |
151
+ |--------|-----------|---------|
152
+ | `-> REVIEW: <path>` | Plan written, awaiting user review | `-> REVIEW: accounts/HMDEV/features/curbside/plan.md` |
153
+ | `-> READY: <path>` | Plan reviewed AND approved by user | `-> READY: accounts/HMDEV/features/curbside/plan.md` |
154
+ | `-> NEXT: /fluent-<skill>` | First implementation skill from plan (only after READY) | `-> NEXT: /fluent-rule-scaffold` |
155
+ | `-> BLOCKED: <reason>` | Requirements insufficient | `-> BLOCKED: PREREQ_MISSING — No approved spec. Run /fluent-use-case-discover` |
156
+
157
+ ### Human-Friendly Translation
158
+
159
+ When presenting handoff signals to the user, translate agent jargon into plain language:
160
+
161
+ | Raw Signal | User-Facing Translation |
162
+ |------------|------------------------|
163
+ | `-> NEXT: /fluent-rule-scaffold` | "Plan approved. Next step: scaffold the Java rules. Shall I proceed?" |
164
+ | `-> BLOCKED: Module not found` | "I can't build the workflow yet — the Java module needs to be created first. Want me to scaffold it?" |
165
+ | `-> READY: plan.md` | "The feature plan is ready for your review." |
166
+ | `-> REVIEW: plan.md` | "I've written the implementation plan. Please review it and let me know if it looks good." |
167
+ | `-> SKIP: No settings` | "No settings changes needed for this feature moving on." |
168
+
169
+ **Rule:** Raw `->` signals should NEVER be shown to the user verbatim. Always wrap them in a natural-language sentence. The signals exist for agent-to-agent coordination; the user sees the translated version.
170
+
171
+ ### Error codes
172
+
173
+ | Code | Condition | Recovery |
174
+ |------|-----------|----------|
175
+ | `PREREQ_MISSING` | No approved Business Spec (spec.md with status APPROVED) | Run `/fluent-use-case-discover` to produce a spec. Agent cannot bypass — only user can say "skip spec" |
176
+ | `SPEC_REQUIRED` | Agent attempted to skip spec without user override | Inform user: spec is mandatory, recommend `/fluent-use-case-discover`, mention skip option |
177
+ | `VALIDATION_FAILED` | Plan template structure invalid or incomplete | Fix the plan sections flagged as incomplete |
178
+ | `USER_OVERRIDE` | User explicitly said "skip spec" | Logged in plan header; proceed with assumptions |
179
+ | `APPROVAL_PENDING` | Plan written but not yet approved by user | Wait for user review and explicit approval before proceeding |
180
+
181
+ ## Plan Revision Handling
182
+
183
+ When a user requests plan changes during implementation (feature status is `IN_PROGRESS`):
184
+
185
+ ### Triggering a revision
186
+
187
+ If the user says "change the plan", "update the plan", or requests modifications to an approved plan:
188
+
189
+ 1. **Read current plan** at `features/<slug>/plan.md`
190
+ 2. **Save current version** as `features/<slug>/plan.v<N>.md` where N = current `planRevision`
191
+ 3. **Apply changes** to `plan.md`, marking revised sections with:
192
+ ```
193
+ > **REVISED in v<N+1>:** <summary of what changed and why>
194
+ ```
195
+ 4. **Update status.json:**
196
+ - `status`: `"PLANNING"` (regressed from IN_PROGRESS)
197
+ - `planRevision`: increment by 1
198
+ - `plan`: `"DRAFT"` (pending re-approval)
199
+ 5. **Present revised plan** to user for review
200
+ 6. **WAIT for re-approval** — same mandatory gate as initial plan approval
201
+ 7. After approval: `status` → `"APPROVED"`, `plan` → `"APPROVED"`
202
+
203
+ ### Impact assessment
204
+
205
+ After a plan revision, the agent MUST assess impact on already-completed work:
206
+
207
+ 1. List which plan sections changed (§ numbers)
208
+ 2. Cross-reference against completed implementation:
209
+ - Scaffolded rules → check if rule logic, parameters, or entity types changed
210
+ - Modified workflows → check if rulesets, statuses, or transitions changed
211
+ - Created settings check if keys, values, or scopes changed
212
+ 3. Present impact summary: "These sections changed: §7, §9. Scaffolded rule X may need updating because [reason]."
213
+ 4. Let the user decide which completed artifacts to update do NOT automatically modify scaffolded code
214
+
215
+ ### Revision history
216
+
217
+ All plan versions are preserved in the feature directory:
218
+ ```
219
+ features/<slug>/
220
+ ├── plan.md ← current (latest) version
221
+ ├── plan.v1.md ← original approved version
222
+ ├── plan.v2.md ← first revision
223
+ └── status.json ← planRevision: 3
224
+ ```
225
+
226
+ ## Phase 1: Discovery
227
+
228
+ Before writing a plan, gather evidence to classify every artifact.
229
+
230
+ ### 1.1 OOTB Rule Search
231
+
232
+ ```
233
+ plugin.list name="<keyword>" # e.g., "Fulfilment", "Pickup", "Webhook"
234
+ plugin.list name="SendEvent" # standard event forwarding rules
235
+ plugin.list compact=true # full inventory (compact payload)
236
+ ```
237
+
238
+ Determine which parts of the feature can use OOTB rules vs. need custom. For every rule the feature needs, try to find an OOTB match FIRST.
239
+
240
+ ### 1.2 Existing Workflows
241
+
242
+ ```bash
243
+ # Check what's deployed
244
+ fluent workflow list -p <PROFILE> -r <RETAILER_REF>
245
+ # Download if not local
246
+ fluent workflow download -p <PROFILE> -r <RETAILER_REF> -w all -o accounts/<PROFILE>/workflows/<RETAILER_REF>/
247
+ ```
248
+
249
+ Read workflow JSONs to map existing statuses, rulesets, and triggers. Identify which workflows need modification and their current versions.
250
+
251
+ **For §6.1 Complete Workflow Inventory:** Parse each modified workflow's JSON to extract the complete ruleset list — entity type, subtype, trigger event, trigger status, and rule names. This feeds directly into the §6.1 table and §3.6 Workflow Processing Flow diagram. Don't rely on the implementer to manually enumerate rulesets.
252
+
253
+ ### 1.3 Existing Settings
254
+
255
+ ```bash
256
+ # Via MCP
257
+ graphql.query: settings(first: 100) filtered by name pattern
258
+ # Or via CLI
259
+ fluent setting list -p <PROFILE> -r <RETAILER_REF> -n "*keyword*"
260
+ ```
261
+
262
+ Find settings that already exist vs. need creation.
263
+
264
+ ### 1.4 Local Source Analysis
265
+
266
+ Search `accounts/<PROFILE>/SOURCE/` for:
267
+ - `module.json` — rule registrations
268
+ - `source-map.json` — if `/fluent-custom-code` was run
269
+ - `behavior-map.md` — rule behavior descriptions
270
+ - Existing Java rule classes for reusable patterns
271
+
272
+ ### 1.5 Module Identification
273
+
274
+ Identify the target module for new custom rules:
275
+ - Search `accounts/<PROFILE>/SOURCE/` for existing modules
276
+ - If no module exists, flag `/fluent-module-scaffold` as a prerequisite task
277
+
278
+ ## Phase 2: Classification
279
+
280
+ For EVERY artifact the feature touches, apply one of these labels:
281
+
282
+ | Label | Meaning | Required Detail in Plan |
283
+ |-------|---------|------------------------|
284
+ | **NEW** | Doesn't exist yet, must be created | Full pseudo logic / value shape / trigger spec |
285
+ | **EXISTING** | Already deployed, no modification needed | State current value, confirm no change |
286
+ | **MODIFIED** | Already exists but needs changes | Show before → after diff |
287
+ | **REUSED** | Pattern exists in codebase, copy the approach | Reference source file/rule |
288
+ | **OOTB** | Platform rule, use with configuration only | State which props/values to configure |
289
+
290
+ This applies universally across ALL plan sections — rules, rulesets, statuses, settings, webhooks, GraphQL operations, cross-entity impacts, files.
291
+
292
+ ## Phase 3: Pseudo Logic for NEW Rules
293
+
294
+ For every **NEW** rule, write pseudo logic that is:
295
+ - **Unambiguous** — a developer can implement from it without asking questions
296
+ - **Shows data flow**: READ → VALIDATE → QUERY → BUILD → MUTATE → LOG
297
+ - **Shows branching**: IF/ELSE with error paths and thrown exceptions
298
+ - **References specific APIs**: `DynamicUtils.queryList()`, `SettingUtils.getSettingByRef()`, `JsonUtils.getJsonPath()`
299
+ - **Stays at design level** — NOT Java code, but precise enough to translate directly
300
+
301
+ ```
302
+ FUNCTION run(context):
303
+ order = context.getEntity()
304
+ event = context.getEvent()
305
+
306
+ // 1. Extract required fields
307
+ pickupLocationRef = extractFromPath(event, props.pickupLocationPath)
308
+ IF pickupLocationRef IS NULL:
309
+ THROW "Pickup location ref required but null at path: {pickupLocationPath}"
310
+
311
+ // 2. Fetch order items
312
+ items = DynamicUtils.queryList(context, "items", OrderItem.class, null)
313
+ IF items IS EMPTY:
314
+ THROW "Order has no items — cannot create fulfilment"
315
+
316
+ // 3. Read config from setting
317
+ config = SettingUtils.getSettingByRef(context, props.configSettingName)
318
+ maxPickupHours = config.lobValue.maxPickupHours
319
+
320
+ // 4. Validate
321
+ IF requestedPickupTime > order.createdOn + maxPickupHours hours:
322
+ THROW "Pickup window expired"
323
+
324
+ // 5. Build and mutate
325
+ fulfilmentRef = "CURB-{order.ref}-{pickupLocationRef}"
326
+ DynamicUtils.create(context, CreateFulfilmentInput { ref, type, items, attributes })
327
+
328
+ // 6. Log
329
+ context.addLog("Created curbside fulfilment {fulfilmentRef}")
330
+ ```
331
+
332
+ **For OOTB rules**: just state the configuration props to set in the ruleset — no pseudo logic needed.
333
+
334
+ **For EXISTING rules**: confirm "no code changes" or describe the modification.
335
+
336
+ ## Phase 4: Plan Writing
337
+
338
+ **Write to:** `accounts/<PROFILE>/features/<slug>/plan.md`
339
+
340
+ Follow the 18-section template from `PLAN_TEMPLATE.md` (sibling file). Validate all Mermaid diagram blocks per `/fluent-mermaid-validate` before writing the plan file. Key per-section notes:
341
+
342
+ > **Diagram validation:** All Mermaid blocks must pass `/fluent-mermaid-validate` rules before writing to the plan file.
343
+
344
+ | Section | Source-Column Required | Key Content |
345
+ |---------|----------------------|-------------|
346
+ | §4 Workflows | Yes (NEW/EXISTING/MODIFIED) | Workflow name, current version, action |
347
+ | §5 Statuses | Yes | Status, entity type, which ruleset adds it |
348
+ | §6 Rulesets | Yes | Trigger event, from/to status, ordered rule list with source annotations |
349
+ | §6.1 Complete Workflow Inventory | Yes (when modifying) | ALL rulesets in each modified workflow with NEW/EXISTING/MODIFIED annotations |
350
+ | §3.6 Workflow Processing Flow | Yes (when modifying) | Flowchart: complete status→ruleset→status chain, NEW/MODIFIED highlighted |
351
+ | §7 Rules Inventory | Yes | ALL rules for the feature with source + purpose |
352
+ | §8 Detailed Design | For NEW rules only | Class, params table, pseudo logic, GraphQL ops |
353
+ | §9 Settings | Yes | Context, contextId, value type, JSON example for NEW |
354
+ | §10 Webhooks | Yes | Setting name, method, payload shape |
355
+ | §11 Scheduled Events | Yes | Event name, delay, purpose |
356
+ | §12 GraphQL Ops | Yes (NEW/REUSED) | Query/mutation, root field, selected paths |
357
+ | §13 Cross-Entity | Yes | Source → target entity, mechanism |
358
+ | §14 Files | Yes (NEW/MODIFIED) | All created/modified files |
359
+
360
+ ## Phase 5: Approval
361
+
362
+ 1. Set `Status: PENDING`, `Revision: 1`
363
+ 2. Present the full plan content to the user
364
+ 3. Wait for explicit approval before any implementation
365
+ 4. On approval: update `Status: APPROVED`, `Approved by: user`
366
+ 5. On rejection: increment `Revision`, revise, re-present
367
+ 6. On "just do it": write `Status: APPROVED (auto-skip)`, `Approved by: user (gate skipped)`, proceed
368
+
369
+ ## Phase 6: Handoff to Implementation Skills
370
+
371
+ After approval, the plan becomes the source of truth. Each skill reads its relevant sections:
372
+
373
+ | Artifact Type | Implementation Skill | Plan Sections |
374
+ |--------------|---------------------|---------------|
375
+ | New custom rules | `/fluent-rule-scaffold` | §7 Rules, §8 Detailed Design |
376
+ | Workflow changes | `/fluent-workflow-builder` | §4 Workflows, §5 Statuses, §6 Rulesets |
377
+ | Settings | `/fluent-settings` | §9 Settings |
378
+ | Module validation | `/fluent-module-validate` | §17 Deployment (step 1) |
379
+ | Module build | `/fluent-build` | §17 Deployment (step 2) |
380
+ | Pre-deploy check | `/fluent-pre-deploy-check` | §17 Deployment (step 3) |
381
+ | Module deploy | `/fluent-module-deploy` | §17 Deployment (step 4) |
382
+ | Workflow deploy | `/fluent-workflow-deploy` | §17 Deployment (steps 5-6) |
383
+ | Data module scaffold | `/fluent-data-module-scaffold` | When the feature requires data modules (no Java) |
384
+ | E2E verification | `/fluent-e2e-test` | §16 Test Plan |
385
+
386
+ The deployment sequence in §17 defines execution order. Track tasks from §17 via TodoWrite.
387
+
388
+ **Module-first deployment:** When workflows are bundled inside the module (`resources/workflows/`), `fluent module install` deploys rules, workflows, and settings together. The separate `/fluent-workflow-deploy` step (steps 5-6) is only needed for standalone workflows NOT included in the module, or when workflows were excluded during module install (`--exclude workflows`).
389
+
390
+ **Critical ordering constraint:** Module deploy (registers rules) MUST complete before workflow deploy (references rules). Deploying workflows that reference unregistered custom rules causes NO_MATCH events at runtime. The §17 template enforces this: workflow deploy steps depend on module deploy.
391
+
392
+ **Version bump required for any content change:** Any change to Java code, workflow JSONs, settings, or resources requires bumping the module version in BOTH `resources/module.json` AND all `pom.xml` files. See `/fluent-build` for the sync procedure.
393
+
394
+ **Validation chain:** `/fluent-module-validate` -> `/fluent-build` -> `/fluent-pre-deploy-check` -> `/fluent-module-deploy`. The pre-deploy check is the final gate before deployment and produces a READY/BLOCKED verdict.
395
+
396
+ ## Updating a Plan Mid-Implementation
397
+
398
+ Plans are living documents. Mid-implementation changes happen when discovery reveals missing artifacts, requirements change, or technical constraints emerge. This section defines the revision protocol.
399
+
400
+ ### When Revision is Triggered
401
+
402
+ | Trigger | Example | Severity |
403
+ |---------|---------|----------|
404
+ | Missing artifact discovered | Rule referenced in workflow but not in plan | MEDIUM — add to plan |
405
+ | Requirement change from user | "We also need SMS notifications" | HIGH — re-scope |
406
+ | Technical constraint found | OOTB rule doesn't support needed parameter | MEDIUM — reclassify rule |
407
+ | Dependency failure | Module build reveals missing import | LOW — fix in plan |
408
+ | Test failure reveals gap | E2E test shows missing status transition | MEDIUM — add status + ruleset |
409
+
410
+ ### Revision Protocol
411
+
412
+ 1. **Increment revision** — Edit the plan file header: `Revision: N+1`, update `Updated: <today>`
413
+ 2. **Add revision log entry** — Append to the bottom of the plan:
414
+ ```markdown
415
+ ---
416
+ ## Revision Log
417
+
418
+ ### Revision N+1 — <date>
419
+ **Trigger:** <what caused the revision>
420
+ **Changes:**
421
+ - Added: <new artifacts>
422
+ - Modified: <changed artifacts with before → after>
423
+ - Removed: <artifacts no longer needed>
424
+ **Impact on completed work:** <what already-built artifacts are affected>
425
+ ```
426
+ 3. **Re-present changed sections** — Show ONLY the sections that changed, not the full plan
427
+ 4. **Require re-approval** — User must explicitly approve the revision before implementation continues
428
+ 5. **Update status.json** — Set `planRevision: N+1`, `updated: <today>`
429
+
430
+ ### Status Regression Rules
431
+
432
+ | Current Status | Revision Type | Status After Revision |
433
+ |---------------|--------------|----------------------|
434
+ | `APPROVED` | Any change to plan | Stays `APPROVED` (plan revision, not status change) |
435
+ | `IN_PROGRESS` | Additive (new rules, new rulesets, new settings) | Stays `IN_PROGRESS` |
436
+ | `IN_PROGRESS` | Subtractive (removing rules/rulesets, changing triggers) | Regresses to `APPROVED` — re-approval of changed plan needed |
437
+ | `IN_PROGRESS` | Structural (new workflows, changed entity types, new integrations) | Regresses to `PLANNING` — re-planning needed |
438
+ | `VERIFIED` | Any change | Regresses to `IN_PROGRESS` — re-verification needed |
439
+
440
+ > **After VERIFIED:** Features that have passed E2E verification can be archived via `/fluent-archive`, which transitions the status to `ARCHIVED`. Use `/fluent-feature-status` to inspect or update lifecycle state at any point.
441
+
442
+ ### Impact on Completed Work
443
+
444
+ When a plan revision occurs, assess impact on already-implemented artifacts:
445
+
446
+ | Already Completed | Revision Impact | Action |
447
+ |------------------|-----------------|--------|
448
+ | Rule scaffolded, not yet built | Plan adds new parameter to the rule | Edit the scaffolded Java class — add parameter |
449
+ | Rule built and deployed | Plan changes rule logic | Re-scaffold is risky — edit existing source directly |
450
+ | Workflow deployed | Plan adds new ruleset | Add ruleset via `/fluent-workflow-builder`, re-deploy |
451
+ | Workflow deployed | Plan removes a status | **BREAKING** — check for entities at that status first |
452
+ | Settings created | Plan changes setting value shape | Update setting value — no re-deploy needed |
453
+ | E2E test passed | Plan adds new test case | Add test case, re-run E2E |
454
+
455
+ **Critical rule:** Removing a status from a deployed workflow is a **BREAKING CHANGE** if any entities are currently at that status. Always check via GraphQL before removing:
456
+ ```
457
+ graphql.query: { <entityType>s(status: ["<STATUS_TO_REMOVE>"], first: 1) { edges { node { ref } } } }
458
+ ```
459
+
460
+ ### Revision Limits
461
+
462
+ - **Revision 1-3:** Normal iteration. Proceed with re-approval.
463
+ - **Revision 4+:** Flag as "HIGH CHURN" — recommend stepping back to review the Business Spec. Frequent plan revisions often indicate incomplete requirements gathering.
464
+ - **Scope-changing revision on VERIFIED feature:** Flag as **REGRESSION RISK** — the feature passed E2E and is now being re-opened. Require explicit justification.
465
+
466
+ ## Cross-References
467
+
468
+ | For | Use |
469
+ |-----|-----|
470
+ | Plan template structure & worked examples | `PLAN_TEMPLATE.md` (in this skill directory) |
471
+ | OOTB rule search | `plugin.list` via MCP |
472
+ | Workflow analysis | `/fluent-workflow-analyzer` |
473
+ | Custom code analysis | `/fluent-custom-code` |
474
+ | Connection topology | `/fluent-connection-analysis` |
475
+ | Requirements gathering (before planning) | `/fluent-use-case-discover` |
476
+ | Scope decomposition (from scope docs) | `/fluent-scope-decompose` |
477
+ | Feature reverse-engineering (existing) | `/fluent-feature-explain` |
478
+ | Module scaffolding (if needed) | `/fluent-module-scaffold` |