@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.
- package/README.md +866 -616
- package/bin/cli.mjs +2112 -1973
- package/content/cli/agents/fluent-cli/agent.json +149 -149
- package/content/cli/agents/fluent-cli.md +132 -132
- package/content/cli/skills/fluent-bootstrap/SKILL.md +214 -190
- package/content/cli/skills/fluent-cli-index/SKILL.md +1 -1
- package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +117 -1
- package/content/cli/skills/fluent-cli-reference/SKILL.md +1040 -623
- package/content/cli/skills/fluent-cli-retailer/SKILL.md +27 -2
- package/content/cli/skills/fluent-cli-settings/SKILL.md +21 -1
- package/content/cli/skills/fluent-connect/SKILL.md +937 -886
- package/content/cli/skills/fluent-module-deploy/SKILL.md +181 -17
- package/content/cli/skills/fluent-profile/SKILL.md +73 -0
- package/content/cli/skills/fluent-workflow/SKILL.md +360 -310
- package/content/dev/agents/fluent-backend-dev/AGENT.md +58 -0
- package/content/dev/agents/fluent-backend-dev/agent.json +69 -0
- package/content/dev/agents/fluent-backend-dev.md +287 -0
- package/content/dev/agents/fluent-dev/AGENT.md +98 -76
- package/content/dev/agents/fluent-dev/agent.json +24 -2
- package/content/dev/agents/fluent-dev.md +194 -524
- package/content/dev/agents/fluent-frontend-dev/AGENT.md +63 -0
- package/content/dev/agents/fluent-frontend-dev/agent.json +52 -0
- package/content/dev/agents/fluent-frontend-dev.md +323 -0
- package/content/dev/skills/fluent-archive/SKILL.md +234 -0
- package/content/dev/skills/fluent-build/SKILL.md +312 -170
- package/content/dev/skills/fluent-connection-analysis/SKILL.md +422 -386
- package/content/dev/skills/fluent-custom-code/SKILL.md +15 -9
- package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +731 -0
- package/content/dev/skills/fluent-e2e-test/SKILL.md +501 -394
- package/content/dev/skills/fluent-event-api/SKILL.md +962 -945
- package/content/dev/skills/fluent-feature-explain/SKILL.md +680 -603
- package/content/dev/skills/fluent-feature-plan/PLAN_TEMPLATE.md +40 -11
- package/content/dev/skills/fluent-feature-plan/SKILL.md +478 -221
- package/content/dev/skills/fluent-feature-status/SKILL.md +335 -0
- package/content/dev/skills/fluent-feedback/SKILL.md +221 -0
- package/content/dev/skills/fluent-implementation-map/SKILL.md +644 -0
- package/content/dev/skills/fluent-job-batch/SKILL.md +10 -0
- package/content/dev/skills/fluent-module-scaffold/SKILL.md +134 -3
- package/content/dev/skills/fluent-module-validate/SKILL.md +778 -775
- package/content/dev/skills/fluent-mystique-analyze/SKILL.md +817 -0
- package/content/dev/skills/fluent-mystique-builder/COMPONENT_TEMPLATE.md +81 -0
- package/content/dev/skills/fluent-mystique-builder/README.md +63 -0
- package/content/dev/skills/fluent-mystique-builder/SKILL.md +1294 -0
- package/content/dev/skills/fluent-mystique-builder/components/INDEX.md +92 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.accordion.md +48 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.fulfilmentpack.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.multiparcel.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.returnitems.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.wavepick.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.inline.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.activity.entity.md +25 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.analytics.viz.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.column.md +111 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.json.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.jsoneditor.md +54 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.locationId.md +51 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.retailerId.md +52 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.bar.md +57 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.download.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.compatibility.md +60 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.pick.md +61 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.buttons.add.reject.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.attribute.md +73 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.attributes.grid.md +40 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.image.md +37 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.map.point.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.multi.md +79 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.product.md +27 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.md +34 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.wrapper.feed.md +98 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.md +52 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.wrapper.source.md +104 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.md +28 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.wrapper.threshold.md +118 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.line.md +32 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.conditional.md +62 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.dashboard.threshold.md +65 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.daterange.wrapper.forwarder.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.drawer.button.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.event.detail.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.events.search.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.daterange.md +83 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.filterComplex.md +106 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.intrange.md +82 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.multistring.md +50 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.filterPanel.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.json.editor.md +22 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.json.viewer.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.customAction.md +79 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.md +116 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.bppmetrics.md +69 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.feed.md +65 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.source.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.addItem.md +60 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mutation.inline.md +88 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.attributes.md +83 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.text.md +33 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.link.md +30 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.order.itemDetails.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.order.shipmentDetails.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.filter.select.md +87 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.refresh.md +48 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.column.md +71 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.header.md +61 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.md +59 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.md +45 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.summary.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.progress.circular.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.provider.graphql.md +71 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.quantity.list.md +87 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.repeater.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.reports.ipuipc.md +54 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.return.rowExpansion.md +19 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcode.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcodeFilter.md +72 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.camera.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.settingForm.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.drawer.button.md +19 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.modal.button.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.strategy.modal.button.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.stepper.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tab.content.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.card.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.md +69 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tile.metric.md +73 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.workflow.provider.md +77 -0
- package/content/dev/skills/fluent-mystique-builder/validate-docs.ps1 +260 -0
- package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1830 -0
- package/content/dev/skills/fluent-mystique-validate/SKILL.md +646 -0
- package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +1144 -1090
- package/content/dev/skills/fluent-retailer-config/SKILL.md +1162 -1120
- package/content/dev/skills/fluent-rollback/SKILL.md +387 -0
- package/content/dev/skills/fluent-rule-scaffold/SKILL.md +515 -394
- package/content/dev/skills/fluent-scope-decompose/SKILL.md +1123 -1021
- package/content/dev/skills/fluent-session-audit-export/SKILL.md +880 -632
- package/content/dev/skills/fluent-session-summary/SKILL.md +320 -195
- package/content/dev/skills/fluent-settings/SKILL.md +151 -2
- package/content/dev/skills/fluent-source-onboard/SKILL.md +23 -4
- package/content/dev/skills/fluent-sourcing/SKILL.md +14 -0
- package/content/dev/skills/fluent-system-monitoring/SKILL.md +771 -767
- package/content/dev/skills/fluent-test-data/SKILL.md +514 -513
- package/content/dev/skills/fluent-trace/SKILL.md +1169 -1143
- package/content/dev/skills/fluent-transition-api/SKILL.md +364 -346
- package/content/dev/skills/fluent-use-case-discover/SKILL.md +593 -471
- package/content/dev/skills/fluent-use-case-discover/SPEC_TEMPLATE.md +22 -1
- package/content/dev/skills/fluent-version-manage/SKILL.md +44 -3
- package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +995 -959
- package/content/dev/skills/fluent-workflow-builder/SKILL.md +668 -326
- package/content/dev/skills/fluent-workflow-deploy/SKILL.md +480 -0
- package/content/dev/skills/fluent-workspace-tree/SKILL.md +281 -0
- package/content/mcp-extn/agents/fluent-mcp.md +133 -132
- package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +812 -800
- package/content/mcp-official/agents/fluent-mcp-core.md +91 -91
- package/content/mcp-official/skills/fluent-mcp-core/SKILL.md +94 -94
- package/content/rfl/skills/fluent-rfl-assess/SKILL.md +172 -172
- package/docs/CAPABILITY_MAP.md +106 -73
- package/docs/DEPLOYMENT_PROMOTION_RUNBOOK.md +218 -0
- package/docs/DESIGN-implementation-map.md +698 -0
- package/docs/DEV_WORKFLOW.md +814 -802
- package/docs/FLOW_RUN.md +142 -142
- package/docs/GETTING_STARTED.md +427 -0
- package/docs/USE_CASES.md +906 -50
- package/metadata.json +184 -155
- package/package.json +7 -2
- package/docs/USE_CASES.pdf +0 -0
|
@@ -0,0 +1,698 @@
|
|
|
1
|
+
# Design: `/fluent-implementation-map` Skill
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented (2026-02-25)
|
|
4
|
+
**Implementation:** `content/dev/skills/fluent-implementation-map/SKILL.md`
|
|
5
|
+
**Author:** Auto-generated design document
|
|
6
|
+
**Date:** 2026-02-25
|
|
7
|
+
|
|
8
|
+
> **Note:** This document contains design rationale, architectural context, and decision trail.
|
|
9
|
+
> For usage instructions, see the SKILL.md. For the E2E test run, see `accounts/SAGIRISH/analysis/implementation-map/`.
|
|
10
|
+
|
|
11
|
+
## Problem
|
|
12
|
+
|
|
13
|
+
When onboarding to an existing Fluent Commerce account — or auditing one you haven't touched in months — there is no single command that answers:
|
|
14
|
+
|
|
15
|
+
> "What has been built here, how does it all fit together, and what are the end-to-end flows?"
|
|
16
|
+
|
|
17
|
+
Today you must manually invoke 4-6 skills in sequence, stitch the outputs together in your head, and hope you didn't miss a cross-entity handoff or an orphaned customisation. This is the most common first question for any new implementation engagement.
|
|
18
|
+
|
|
19
|
+
## What Exists Today
|
|
20
|
+
|
|
21
|
+
| Skill | Scope | Limitation |
|
|
22
|
+
|-------|-------|------------|
|
|
23
|
+
| `/fluent-feature-explain` | Single named feature → Architecture Document | You must already know the feature name and boundaries |
|
|
24
|
+
| `/fluent-workflow-analyzer` | Single workflow JSON → structure, orphans, triggers | Per-workflow; no cross-workflow or cross-entity view |
|
|
25
|
+
| `/fluent-connection-analysis` | Cross-workflow topology map, static-vs-dynamic diff | Maps connections but doesn't identify logical features |
|
|
26
|
+
| `/fluent-custom-code` | Source code analysis under SOURCE/ | Per-module; no link back to which business flow uses it |
|
|
27
|
+
| `/fluent-workspace-tree` | Directory structure + artifact counts | Structural, not semantic |
|
|
28
|
+
| `/fluent-feature-status` | Dashboard of existing feature directories | Only shows features that have already been decomposed |
|
|
29
|
+
| `/fluent-scope-decompose` | Breaks a scope doc into tasks | Works from documents, not from a live implementation |
|
|
30
|
+
|
|
31
|
+
**The gap:** No skill starts from "I know nothing about this account" and produces a complete feature-level decomposition with end-to-end flows.
|
|
32
|
+
|
|
33
|
+
## Proposed Skill: `/fluent-implementation-map`
|
|
34
|
+
|
|
35
|
+
### One-liner
|
|
36
|
+
|
|
37
|
+
Reverse-engineer an entire Fluent Commerce implementation into a feature inventory with end-to-end flow diagrams, cross-feature dependencies, and gap analysis.
|
|
38
|
+
|
|
39
|
+
### Invocation
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
/fluent-implementation-map --profile SAGIRISH --retailer "Module Test"
|
|
43
|
+
/fluent-implementation-map --profile HMDEV --retailer HM_TEST --depth summary
|
|
44
|
+
/fluent-implementation-map --profile HMDEV --retailer HM_TEST --depth detailed
|
|
45
|
+
/fluent-implementation-map --profile HMDEV --retailer HM_TEST --focus ORDER
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Parameters
|
|
49
|
+
|
|
50
|
+
| Parameter | Required | Default | Description |
|
|
51
|
+
|-----------|----------|---------|-------------|
|
|
52
|
+
| `--profile` | Yes | Active CLI profile | Fluent CLI profile |
|
|
53
|
+
| `--retailer` | Yes | Profile default | Target retailer ref |
|
|
54
|
+
| `--depth` | No | `summary` | `summary` = feature list + high-level flows; `detailed` = full per-feature architecture |
|
|
55
|
+
| `--focus` | No | All | Filter to specific entity type (ORDER, FULFILMENT, ARTICLE, etc.) |
|
|
56
|
+
| `--include-ootb` | No | `false` | Include OOTB-only flows (no customisations) in the map |
|
|
57
|
+
| `--create-stubs` | No | `false` | Create `features/<slug>/status.json` for each discovered feature, bridging discovery into the feature lifecycle |
|
|
58
|
+
| `--include-runtime` | No | `false` | Collect runtime evidence per feature via `event.flowInspect` and `entity.get` (significantly slower) |
|
|
59
|
+
|
|
60
|
+
### Output
|
|
61
|
+
|
|
62
|
+
Written to: `accounts/<PROFILE>/analysis/implementation-map/`
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
accounts/<PROFILE>/analysis/implementation-map/
|
|
66
|
+
├── implementation-map.md # Master document: feature inventory + cross-feature map
|
|
67
|
+
├── features/ # Per-feature summaries (auto-generated, not lifecycle-managed)
|
|
68
|
+
│ ├── home-delivery-order.md
|
|
69
|
+
│ ├── click-collect-order.md
|
|
70
|
+
│ ├── fulfilment-hd.md
|
|
71
|
+
│ ├── sourcing-allocation.md
|
|
72
|
+
│ └── ...
|
|
73
|
+
├── diagrams/ # Mermaid source files
|
|
74
|
+
│ ├── feature-dependency.mmd # Cross-feature dependency graph
|
|
75
|
+
│ ├── entity-flow.mmd # Entity lifecycle overview
|
|
76
|
+
│ └── <feature>-flow.mmd # Per-feature flow diagram
|
|
77
|
+
├── gaps.md # Orphaned rules, unused settings, dead-end states
|
|
78
|
+
└── inventory.json # Machine-readable: all workflows, rules, settings, feature clusters
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Important:** These are analysis artifacts, NOT feature lifecycle artifacts. They live under `analysis/`, not `features/`. If the user wants to turn a discovered feature into a lifecycle-managed feature, they run `/fluent-use-case-discover` or `/fluent-feature-explain` to create `features/<slug>/`.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## How It Works: 5 Phases
|
|
86
|
+
|
|
87
|
+
### Phase 1: Inventory Collection (read-only, parallelisable)
|
|
88
|
+
|
|
89
|
+
Collect all raw data from the environment. This phase invokes existing skills and MCP tools.
|
|
90
|
+
|
|
91
|
+
#### 1a. Workflows
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
Invoke: fluent workflow list -p <PROFILE> -r <RETAILER>
|
|
95
|
+
Invoke: fluent workflow download (if not already cached locally)
|
|
96
|
+
Read: accounts/<PROFILE>/workflows/<RETAILER>/*.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Produces: List of all workflow names, entity types, subtypes.
|
|
100
|
+
|
|
101
|
+
**Entity type extraction:** Parse workflow JSON `name` field. Convention: `<ENTITY_TYPE>::<SUBTYPE>` (e.g., `ORDER::HD`, `FULFILMENT::CC`, `ARTICLE::DEFAULT`). If no `::`, treat as entity type with DEFAULT subtype.
|
|
102
|
+
|
|
103
|
+
#### 1b. Custom Rules (deployed)
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
Invoke: MCP plugin.list (live environment)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Produces: List of all deployed rules with module, version, and rule key.
|
|
110
|
+
|
|
111
|
+
#### 1c. Custom Rules (source code)
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
Scan: accounts/<PROFILE>/SOURCE/*/resources/module.json
|
|
115
|
+
Scan: accounts/<PROFILE>/SOURCE/*/src/main/java/**/*.java
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Produces: Per-rule metadata (class name, annotations, entity context, referenced settings).
|
|
119
|
+
|
|
120
|
+
#### 1d. Settings
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Invoke: MCP graphql.query — query settings by context (RETAILER, ACCOUNT)
|
|
124
|
+
OR
|
|
125
|
+
Invoke: fluent setting list -p <PROFILE> -r <RETAILER> -q '*'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Produces: All settings with their keys, values, and contexts.
|
|
129
|
+
|
|
130
|
+
#### 1e. Entity Type Catalogue
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Invoke: MCP graphql.query — list entity types and subtypes in use
|
|
134
|
+
Suggested query: orderTypes, fulfilmentTypes, articleTypes, etc.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Produces: Which entity types and subtypes are configured.
|
|
138
|
+
|
|
139
|
+
#### 1f. Webhook / Integration Inventory
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Grep: Workflow JSONs for SendWebhook rule invocations
|
|
143
|
+
Grep: Settings for webhook-related keys (*.url, *.endpoint, webhook.*)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Produces: Outbound integration points.
|
|
147
|
+
|
|
148
|
+
### Phase 2: Feature Identification (analytical, no external calls)
|
|
149
|
+
|
|
150
|
+
This is the core intelligence of the skill. It groups raw inventory into logical features.
|
|
151
|
+
|
|
152
|
+
#### 2a. Primary Grouping: Entity Type + Subtype
|
|
153
|
+
|
|
154
|
+
Each workflow defines a scope of entity management. Group workflows by entity type:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
ORDER workflows: ORDER::HD, ORDER::CC, ORDER::MULTI
|
|
158
|
+
FULFILMENT workflows: FULFILMENT::HD, FULFILMENT::CC
|
|
159
|
+
ARTICLE workflows: ARTICLE::DEFAULT
|
|
160
|
+
WAVE workflows: WAVE::DEFAULT
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### 2b. Feature Boundary Heuristics
|
|
164
|
+
|
|
165
|
+
A "feature" is a user-facing business capability that typically spans one or more entity types. Heuristics for identifying feature boundaries:
|
|
166
|
+
|
|
167
|
+
1. **Subtype alignment**: An ORDER subtype (e.g., `HD`) usually pairs with a FULFILMENT subtype (e.g., `HD`) → group as one feature "Home Delivery"
|
|
168
|
+
2. **Cross-entity events**: If ORDER::HD sends events that FULFILMENT::HD workflows consume → same feature
|
|
169
|
+
3. **Shared custom rules**: If a custom rule is referenced by both ORDER::HD and FULFILMENT::HD workflows → same feature
|
|
170
|
+
4. **Naming convention**: Subtypes with the same suffix (HD, CC, MULTI) suggest feature families
|
|
171
|
+
5. **Standalone entity types**: WAVE, ARTICLE often serve infrastructure rather than a single feature — mark as "shared infrastructure"
|
|
172
|
+
|
|
173
|
+
#### 2b-ii. Confidence Levels
|
|
174
|
+
|
|
175
|
+
Each feature cluster carries a confidence indicator:
|
|
176
|
+
|
|
177
|
+
| Level | Meaning | Trigger |
|
|
178
|
+
|-------|---------|---------|
|
|
179
|
+
| `HIGH` | Subtype family match + event chain confirmed | Heuristics 1+2 agree |
|
|
180
|
+
| `MEDIUM` | Subtype family match only (no event chain confirmation) | Heuristic 1 only |
|
|
181
|
+
| `INFERRED` | Naming/rule pattern analysis | Heuristic 3 fallback |
|
|
182
|
+
| `UNCLUSTERED` | Could not assign to any feature | No heuristic matched |
|
|
183
|
+
|
|
184
|
+
#### 2c. Feature Classification
|
|
185
|
+
|
|
186
|
+
| Category | Definition | Example |
|
|
187
|
+
|----------|-----------|---------|
|
|
188
|
+
| **Business Feature** | End-to-end customer-facing flow spanning ORDER→FULFILMENT | Home Delivery, Click & Collect |
|
|
189
|
+
| **Processing Feature** | Backend automation within a single entity type | Wave management, Article pick/pack |
|
|
190
|
+
| **Infrastructure** | Shared services consumed by multiple features | Sourcing, Inventory, Settings |
|
|
191
|
+
| **Integration** | Outbound/inbound data flows to external systems | Webhook delivery, Batch ingestion |
|
|
192
|
+
|
|
193
|
+
#### 2d. Customisation Depth Scoring
|
|
194
|
+
|
|
195
|
+
For each identified feature, score the customisation depth:
|
|
196
|
+
|
|
197
|
+
| Score | Meaning | Criteria |
|
|
198
|
+
|-------|---------|----------|
|
|
199
|
+
| 0 — OOTB | No customisations | All rules are OOTB, no custom settings |
|
|
200
|
+
| 1 — Configured | OOTB rules with custom settings/props | OOTB rules but custom prop values or settings |
|
|
201
|
+
| 2 — Extended | Mix of OOTB and custom rules | Some custom rules alongside OOTB |
|
|
202
|
+
| 3 — Custom | Mostly custom rules | >50% of rules in the workflow are custom |
|
|
203
|
+
| 4 — Bespoke | Entirely custom implementation | All rules are custom, non-standard entity usage |
|
|
204
|
+
|
|
205
|
+
### Phase 3: Flow Mapping (per feature)
|
|
206
|
+
|
|
207
|
+
For each identified feature, trace the complete end-to-end flow.
|
|
208
|
+
|
|
209
|
+
#### 3a. Entry Point Identification
|
|
210
|
+
|
|
211
|
+
- What triggers this feature? (User action, scheduled event, inbound webhook, batch ingestion)
|
|
212
|
+
- What entity is created/modified first?
|
|
213
|
+
- What status does the entity start in?
|
|
214
|
+
|
|
215
|
+
#### 3b. Workflow Path Tracing
|
|
216
|
+
|
|
217
|
+
For each workflow in the feature:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
For each ruleset in workflow:
|
|
221
|
+
- Trigger: status + event name
|
|
222
|
+
- Rules: ordered list of rule keys (mark OOTB vs CUSTOM)
|
|
223
|
+
- Outcomes: status transitions (success path, error path)
|
|
224
|
+
- Cross-entity handoffs: events sent to other entity types
|
|
225
|
+
- Settings consumed: rule prop references to settings keys
|
|
226
|
+
- Webhooks fired: SendWebhook invocations with target URLs
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### 3c. Cross-Entity Flow Stitching
|
|
230
|
+
|
|
231
|
+
Follow the chain across entity types:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
ORDER::HD (BOOKED)
|
|
235
|
+
→ CreateFulfilment rule
|
|
236
|
+
→ FULFILMENT::HD created (CREATED)
|
|
237
|
+
→ AllocateArticles rule
|
|
238
|
+
→ ARTICLE created (CREATED)
|
|
239
|
+
→ ...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
This requires matching:
|
|
243
|
+
- `SendEvent` rule outputs in workflow A → `eventName` triggers in workflow B
|
|
244
|
+
- `CreateEntity` rule invocations → entity type + subtype + initial status → matching workflow
|
|
245
|
+
|
|
246
|
+
#### 3d. Mermaid Diagram Generation
|
|
247
|
+
|
|
248
|
+
For each feature, generate:
|
|
249
|
+
|
|
250
|
+
**Sequence diagram** (entity lifecycle):
|
|
251
|
+
```mermaid
|
|
252
|
+
sequenceDiagram
|
|
253
|
+
participant OMS as ORDER::HD
|
|
254
|
+
participant FUL as FULFILMENT::HD
|
|
255
|
+
participant ART as ARTICLE
|
|
256
|
+
|
|
257
|
+
OMS->>OMS: CREATED → BOOKED (SourceOrder)
|
|
258
|
+
OMS->>FUL: CreateFulfilment
|
|
259
|
+
FUL->>ART: AllocateArticles
|
|
260
|
+
ART->>ART: CREATED → ACTIVE (AssignLocation)
|
|
261
|
+
ART-->>FUL: ArticleComplete event
|
|
262
|
+
FUL->>OMS: FulfilmentComplete event
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**State diagram** (per entity):
|
|
266
|
+
```mermaid
|
|
267
|
+
stateDiagram-v2
|
|
268
|
+
[*] --> CREATED
|
|
269
|
+
CREATED --> BOOKED: SourceOrder
|
|
270
|
+
BOOKED --> FULFILLED: AllItemsComplete
|
|
271
|
+
FULFILLED --> COMPLETE: CompleteOrder
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Phase 4: Gap Analysis
|
|
275
|
+
|
|
276
|
+
#### 4a. Orphaned Rules
|
|
277
|
+
Rules registered in `module.json` or deployed via `plugin.list` but NOT referenced in any workflow ruleset.
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
Invoke (internally): /fluent-workflow-analyzer orphan detection logic
|
|
281
|
+
Cross-reference: plugin.list output vs. all workflow rule references
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### 4b. Unused Settings
|
|
285
|
+
Settings that exist in the environment but are not referenced by any rule (via prop values or direct setting reads).
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
Cross-reference: settings list vs. rule prop definitions in workflow JSONs
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### 4c. Dead-End States
|
|
292
|
+
Workflow states with no outbound transitions (not marked as terminal/final).
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
Invoke (internally): /fluent-workflow-analyzer state graph analysis
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
#### 4d. Missing Cross-Entity Handlers
|
|
299
|
+
Events sent by one workflow that no other workflow has a trigger for.
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
Invoke (internally): /fluent-connection-analysis cross-entity event matching
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
#### 4e. Undocumented Customisations
|
|
306
|
+
Custom rules with no Javadoc, no test class, or no matching feature documentation.
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
Cross-reference: SOURCE/ Java files vs. features/ directory for documentation
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Phase 5: Report Generation
|
|
313
|
+
|
|
314
|
+
#### Master Document (`implementation-map.md`)
|
|
315
|
+
|
|
316
|
+
```markdown
|
|
317
|
+
# Implementation Map: <RETAILER> on <PROFILE>
|
|
318
|
+
|
|
319
|
+
Generated: <timestamp>
|
|
320
|
+
Environment: <base-url>
|
|
321
|
+
|
|
322
|
+
## Executive Summary
|
|
323
|
+
|
|
324
|
+
| Metric | Count |
|
|
325
|
+
|--------|-------|
|
|
326
|
+
| Workflows | 18 |
|
|
327
|
+
| Custom rules (deployed) | 45 |
|
|
328
|
+
| Custom rules (source) | 52 |
|
|
329
|
+
| Settings | 120 |
|
|
330
|
+
| Identified features | 8 |
|
|
331
|
+
| Shared infrastructure | 3 |
|
|
332
|
+
| Integrations | 5 |
|
|
333
|
+
| Customisation depth (avg) | 2.4 / 4 |
|
|
334
|
+
|
|
335
|
+
## Feature Inventory
|
|
336
|
+
|
|
337
|
+
| # | Feature | Category | Entity Types | Customisation | Workflows | Custom Rules | Key Integration |
|
|
338
|
+
|---|---------|----------|-------------|---------------|-----------|-------------|-----------------|
|
|
339
|
+
| 1 | Home Delivery | Business | ORDER::HD, FULFILMENT::HD, ARTICLE | 3 — Custom | 3 | 12 | Webhook: shipping |
|
|
340
|
+
| 2 | Click & Collect | Business | ORDER::CC, FULFILMENT::CC | 2 — Extended | 2 | 5 | — |
|
|
341
|
+
| 3 | Sourcing | Infrastructure | — (invoked within ORDER flows) | 3 — Custom | 0 | 3 | — |
|
|
342
|
+
| ... | | | | | | | |
|
|
343
|
+
|
|
344
|
+
## Cross-Feature Dependency Map
|
|
345
|
+
|
|
346
|
+
[Mermaid diagram: which features depend on which]
|
|
347
|
+
|
|
348
|
+
## Per-Feature Summaries
|
|
349
|
+
|
|
350
|
+
### 1. Home Delivery
|
|
351
|
+
|
|
352
|
+
**Entry point:** Order created via API with type=HD
|
|
353
|
+
**End state:** ORDER::HD reaches COMPLETE
|
|
354
|
+
**Flow:** ORDER::HD → FULFILMENT::HD → ARTICLE → (pick/pack/ship) → COMPLETE
|
|
355
|
+
**Custom rules:** CreateFulfilmentFromSourcingLocation, CalculateShippingCost, ...
|
|
356
|
+
**Settings:** 15 (webhook.shipping.url, fulfilment.hd.auto-complete, ...)
|
|
357
|
+
**Integrations:** Outbound webhook to shipping provider
|
|
358
|
+
|
|
359
|
+
[Link to detailed flow: features/home-delivery-order.md]
|
|
360
|
+
|
|
361
|
+
### 2. Click & Collect
|
|
362
|
+
...
|
|
363
|
+
|
|
364
|
+
## Gaps & Risks
|
|
365
|
+
|
|
366
|
+
| # | Type | Description | Severity | Recommendation |
|
|
367
|
+
|---|------|-------------|----------|----------------|
|
|
368
|
+
| 1 | Orphaned Rule | `LegacyDiscountRule` deployed but not in any workflow | LOW | Remove or document |
|
|
369
|
+
| 2 | Dead-End State | FULFILMENT::HD `ON_HOLD` has no outbound transition | MEDIUM | Add manual release path |
|
|
370
|
+
| 3 | Missing Handler | ORDER::HD sends `FulfilmentException` but no workflow handles it | HIGH | Add error handling ruleset |
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Skills Invoked (Orchestration Map)
|
|
376
|
+
|
|
377
|
+
The implementation-map skill is an **orchestrator** that invokes existing skills and MCP tools. It should NOT duplicate their logic.
|
|
378
|
+
|
|
379
|
+
### Required Invocations
|
|
380
|
+
|
|
381
|
+
| Phase | Tool/Skill | Purpose | Parallelisable? |
|
|
382
|
+
|-------|-----------|---------|-----------------|
|
|
383
|
+
| 1a | `fluent workflow list` (CLI) | Enumerate workflows | Yes |
|
|
384
|
+
| 1a | `fluent workflow download` (CLI) | Cache workflow JSONs locally | Yes (after list) |
|
|
385
|
+
| 1b | `plugin.list` (MCP) | Deployed rule inventory | Yes |
|
|
386
|
+
| 1c | Glob + Read (local) | Source code analysis | Yes |
|
|
387
|
+
| 1d | `graphql.query` (MCP) or CLI settings | Settings inventory | Yes |
|
|
388
|
+
| 1e | `graphql.query` (MCP) | Entity type catalogue | Yes |
|
|
389
|
+
| 1f | Grep (local) | Webhook/integration extraction from workflow JSONs | Yes |
|
|
390
|
+
| 2 | Internal logic | Feature identification (no external calls) | N/A |
|
|
391
|
+
| 3 | Internal logic + `/fluent-connection-analysis` patterns | Flow tracing | Per-feature |
|
|
392
|
+
| 4a | `/fluent-workflow-analyzer` logic | Orphan detection | Yes |
|
|
393
|
+
| 4b | Cross-reference (internal) | Unused settings | Yes |
|
|
394
|
+
| 4c | `/fluent-workflow-analyzer` logic | Dead-end states | Yes |
|
|
395
|
+
| 4d | `/fluent-connection-analysis` logic | Missing handlers | Yes |
|
|
396
|
+
| 5 | Write (local) | Report generation | Sequential |
|
|
397
|
+
|
|
398
|
+
### Optional Follow-up Invocations
|
|
399
|
+
|
|
400
|
+
After the map is generated, the user can drill deeper:
|
|
401
|
+
|
|
402
|
+
| User Request | Skill to Invoke |
|
|
403
|
+
|-------------|-----------------|
|
|
404
|
+
| "Explain feature X in detail" | `/fluent-feature-explain --feature <slug>` |
|
|
405
|
+
| "I want to extend feature X" | `/fluent-use-case-discover` (with `extends: <slug>`) |
|
|
406
|
+
| "Turn this into lifecycle features" | `/fluent-scope-decompose` (from the feature inventory) |
|
|
407
|
+
| "What's the full connection map?" | `/fluent-connection-analysis --validate` |
|
|
408
|
+
| "Analyze the custom code" | `/fluent-custom-code` |
|
|
409
|
+
| "Check if this is production-ready" | `/fluent-rfl-assess` |
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Implementation Considerations
|
|
414
|
+
|
|
415
|
+
### Skill Frontmatter
|
|
416
|
+
|
|
417
|
+
```yaml
|
|
418
|
+
---
|
|
419
|
+
name: fluent-implementation-map
|
|
420
|
+
description: Reverse-engineer an entire Fluent Commerce implementation into a feature inventory with end-to-end flows, cross-feature dependencies, and gap analysis. Triggers on "implementation map", "what's been built", "analyze implementation", "reverse engineer account", "feature inventory", "end to end flows", "map this account".
|
|
421
|
+
user-invocable: true
|
|
422
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
423
|
+
argument-hint: --profile PROFILE --retailer RETAILER [--depth summary|detailed] [--focus ENTITY_TYPE]
|
|
424
|
+
---
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Planning Gate
|
|
428
|
+
|
|
429
|
+
**No.** This is a read-only analysis skill. It writes analysis artifacts to `analysis/implementation-map/` but does not modify workflows, settings, or entities. Same category as `/fluent-feature-explain` and `/fluent-workflow-analyzer`.
|
|
430
|
+
|
|
431
|
+
### MCP Tool Dependencies
|
|
432
|
+
|
|
433
|
+
The skill needs MCP tools to be available for full capability:
|
|
434
|
+
|
|
435
|
+
| MCP Tool | Used For | Graceful Degradation |
|
|
436
|
+
|----------|----------|---------------------|
|
|
437
|
+
| `plugin.list` | Deployed rule inventory | Fall back to SOURCE/ scan only |
|
|
438
|
+
| `graphql.query` | Settings, entity types | Fall back to CLI commands or skip |
|
|
439
|
+
| `workflow.transitions` | Live workflow versions | Fall back to local JSON only |
|
|
440
|
+
|
|
441
|
+
If MCP is unavailable, the skill should still work from local files (downloaded workflows + SOURCE/) with reduced coverage. Report which phases were skipped.
|
|
442
|
+
|
|
443
|
+
### Size & Complexity
|
|
444
|
+
|
|
445
|
+
This is one of the larger skills. Estimated SKILL.md size: 400-600 lines. The core complexity is in Phase 2 (feature identification heuristics) and Phase 3 (cross-entity flow stitching).
|
|
446
|
+
|
|
447
|
+
Consider splitting into two files if it exceeds 500 lines:
|
|
448
|
+
- `SKILL.md` — main skill with phases 1-5
|
|
449
|
+
- `HEURISTICS.md` — companion doc with detailed feature identification rules and examples
|
|
450
|
+
|
|
451
|
+
### Relationship to Existing Skills
|
|
452
|
+
|
|
453
|
+
```
|
|
454
|
+
/fluent-implementation-map (NEW — discovers everything, produces feature inventory)
|
|
455
|
+
├── /fluent-feature-explain (EXISTING — deep-dive single feature)
|
|
456
|
+
├── /fluent-workflow-analyzer (EXISTING — per-workflow structure)
|
|
457
|
+
├── /fluent-connection-analysis (EXISTING — topology map)
|
|
458
|
+
├── /fluent-custom-code (EXISTING — source code analysis)
|
|
459
|
+
└── /fluent-scope-decompose (EXISTING — can consume the feature inventory)
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
The implementation-map skill is the **top of the analysis pyramid**. It's the first thing you run. Everything else drills deeper.
|
|
463
|
+
|
|
464
|
+
### Handoff Protocol
|
|
465
|
+
|
|
466
|
+
```
|
|
467
|
+
-> READY: accounts/<PROFILE>/analysis/implementation-map/implementation-map.md
|
|
468
|
+
-> NEXT: /fluent-feature-explain --feature "<slug>" (for any feature needing deeper analysis)
|
|
469
|
+
-> NEXT: /fluent-scope-decompose (to convert inventory into lifecycle features)
|
|
470
|
+
-> NEXT: /fluent-rfl-assess (for production readiness check)
|
|
471
|
+
-> BLOCKED: No workflows found. Download workflows first: fluent workflow download -p <PROFILE> -r <RETAILER>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Agent Registration
|
|
475
|
+
|
|
476
|
+
Add to `fluent-dev` agent (`content/dev/agents/fluent-dev.md`) trigger list:
|
|
477
|
+
- "implementation map", "what's been built", "analyze implementation", "reverse engineer account", "feature inventory", "map this account", "end to end flows", "onboard to account", "what exists"
|
|
478
|
+
|
|
479
|
+
Add to `metadata.json` in the `dev` group skills array.
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## Worked Example
|
|
484
|
+
|
|
485
|
+
Given an account with these workflows:
|
|
486
|
+
- `ORDER::HD`, `ORDER::CC`, `ORDER::MULTI`
|
|
487
|
+
- `FULFILMENT::HD`, `FULFILMENT::CC`
|
|
488
|
+
- `ARTICLE::DEFAULT`
|
|
489
|
+
- `WAVE::DEFAULT`
|
|
490
|
+
|
|
491
|
+
And these custom rules (from plugin.list):
|
|
492
|
+
- `CreateFulfilmentFromSourcingLocation` (ORDER context)
|
|
493
|
+
- `CalculateShippingCost` (FULFILMENT context)
|
|
494
|
+
- `AutoCompleteOrder` (ORDER context)
|
|
495
|
+
- `NotifyCustomerViaWebhook` (FULFILMENT context)
|
|
496
|
+
- `BulkArticleStatusUpdate` (ARTICLE context)
|
|
497
|
+
- `CustomSourceOrder` (ORDER context)
|
|
498
|
+
|
|
499
|
+
**Phase 2 would identify:**
|
|
500
|
+
|
|
501
|
+
| Feature | Why |
|
|
502
|
+
|---------|-----|
|
|
503
|
+
| Home Delivery (HD) | ORDER::HD + FULFILMENT::HD share `HD` subtype; `CreateFulfilmentFromSourcingLocation` bridges them |
|
|
504
|
+
| Click & Collect (CC) | ORDER::CC + FULFILMENT::CC share `CC` subtype |
|
|
505
|
+
| Multi-Location (MULTI) | ORDER::MULTI — may share fulfilment with HD or have its own |
|
|
506
|
+
| Article Management | ARTICLE::DEFAULT — shared infrastructure, used by HD and CC |
|
|
507
|
+
| Wave Management | WAVE::DEFAULT — shared infrastructure for warehouse operations |
|
|
508
|
+
| Sourcing | No dedicated workflow — `CustomSourceOrder` runs within ORDER flows |
|
|
509
|
+
| Shipping Integration | `CalculateShippingCost` + `NotifyCustomerViaWebhook` + webhook settings |
|
|
510
|
+
|
|
511
|
+
**Phase 3 for "Home Delivery" would produce:**
|
|
512
|
+
|
|
513
|
+
```
|
|
514
|
+
ORDER::HD FULFILMENT::HD ARTICLE
|
|
515
|
+
──────────── ────────────── ───────
|
|
516
|
+
CREATED
|
|
517
|
+
│ CustomSourceOrder
|
|
518
|
+
BOOKED
|
|
519
|
+
│ CreateFulfilmentFromSL
|
|
520
|
+
│──────────────────────────> CREATED
|
|
521
|
+
│ AllocateArticles
|
|
522
|
+
│─────────────────────────> CREATED
|
|
523
|
+
│ AssignLocation
|
|
524
|
+
ACTIVE
|
|
525
|
+
│ PickArticle
|
|
526
|
+
PICKED
|
|
527
|
+
│─────────────────> ArticleComplete
|
|
528
|
+
FULFILLED ◄───────────────
|
|
529
|
+
│ CalculateShippingCost
|
|
530
|
+
│ NotifyCustomerViaWebhook
|
|
531
|
+
COMPLETE
|
|
532
|
+
│ AutoCompleteOrder ◄──────
|
|
533
|
+
COMPLETE
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## Build Steps
|
|
539
|
+
|
|
540
|
+
To implement this skill:
|
|
541
|
+
|
|
542
|
+
1. **Create the skill directory:**
|
|
543
|
+
```
|
|
544
|
+
fluent-ai-skills/content/dev/skills/fluent-implementation-map/SKILL.md
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
2. **Write the SKILL.md** using this design doc as the specification. Key sections:
|
|
548
|
+
- Frontmatter (name, description, allowed-tools, argument-hint)
|
|
549
|
+
- Purpose & When to Use
|
|
550
|
+
- No Planning Gate (read-only)
|
|
551
|
+
- Inputs table
|
|
552
|
+
- Phase 1-5 detailed instructions (adapt from this doc)
|
|
553
|
+
- Output format with worked examples
|
|
554
|
+
- Graceful degradation for missing MCP
|
|
555
|
+
- Handoff Protocol
|
|
556
|
+
- Error Reporting
|
|
557
|
+
- Session Tracking
|
|
558
|
+
|
|
559
|
+
3. **Register in metadata.json:**
|
|
560
|
+
```json
|
|
561
|
+
"fluent-implementation-map" // add to dev.skills and dev.commands arrays
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
4. **Update fluent-dev agent** trigger list with new keywords.
|
|
565
|
+
|
|
566
|
+
5. **Update README.md** capabilities table with new row.
|
|
567
|
+
|
|
568
|
+
6. **Update CHANGELOG.md** `[Unreleased]` section.
|
|
569
|
+
|
|
570
|
+
7. **Run tests:**
|
|
571
|
+
```bash
|
|
572
|
+
cd fluent-ai-skills && npm test
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
8. **Reinstall all targets:**
|
|
576
|
+
```bash
|
|
577
|
+
node bin/cli.mjs install --target claude
|
|
578
|
+
node bin/cli.mjs install --target cursor
|
|
579
|
+
# ... etc
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
9. **Test against live account:**
|
|
583
|
+
```
|
|
584
|
+
/fluent-implementation-map --profile SAGIRISH --retailer "Module Test"
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
## Machine-Readable Output (`inventory.json`)
|
|
588
|
+
|
|
589
|
+
The `inventory.json` file provides a structured output for downstream tooling:
|
|
590
|
+
|
|
591
|
+
```json
|
|
592
|
+
{
|
|
593
|
+
"generated": "2026-02-25T14:30:00Z",
|
|
594
|
+
"profile": "HMDEV",
|
|
595
|
+
"retailer": "HM_TEST",
|
|
596
|
+
"features": [
|
|
597
|
+
{
|
|
598
|
+
"slug": "home-delivery",
|
|
599
|
+
"confidence": "HIGH",
|
|
600
|
+
"clusterMethod": "subtype-family + event-chain",
|
|
601
|
+
"category": "Business Feature",
|
|
602
|
+
"customisationScore": 3,
|
|
603
|
+
"workflows": ["ORDER::HD", "FULFILMENT::HD_WH", "ARTICLE::HD"],
|
|
604
|
+
"primaryEntity": "ORDER::HD",
|
|
605
|
+
"entryEvents": ["CreateOrder"],
|
|
606
|
+
"terminalStatuses": ["COMPLETE", "CANCELLED"],
|
|
607
|
+
"crossEntityEvents": ["CreateFulfilment", "FulfilmentComplete"],
|
|
608
|
+
"ruleCount": { "custom": 12, "ootb": 34 },
|
|
609
|
+
"settingsReferenced": ["WEBHOOK_ENDPOINT_ORDER_BOOK", "INVENTORY_STRATEGY"],
|
|
610
|
+
"webhooks": ["NotifyWarehouse"],
|
|
611
|
+
"scheduledEvents": ["RetryAllocation"]
|
|
612
|
+
}
|
|
613
|
+
],
|
|
614
|
+
"unclustered": [
|
|
615
|
+
{ "workflow": "VIRTUAL_CATALOGUE::DEFAULT", "reason": "Standalone entity, no event connections" }
|
|
616
|
+
],
|
|
617
|
+
"crossFeatureConnections": [
|
|
618
|
+
{ "from": "home-delivery", "to": "inventory-management", "via": "UpdateInventory", "direction": "outbound" }
|
|
619
|
+
]
|
|
620
|
+
}
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
---
|
|
624
|
+
|
|
625
|
+
## Feature Stub Creation (`--create-stubs`)
|
|
626
|
+
|
|
627
|
+
When `--create-stubs` is passed, create `features/<slug>/status.json` for each discovered feature:
|
|
628
|
+
|
|
629
|
+
```json
|
|
630
|
+
{
|
|
631
|
+
"$schema": "feature-status-v1",
|
|
632
|
+
"feature": "home-delivery",
|
|
633
|
+
"retailers": ["HM_TEST"],
|
|
634
|
+
"status": "DISCOVERY",
|
|
635
|
+
"created": "2026-02-25",
|
|
636
|
+
"updated": "2026-02-25",
|
|
637
|
+
"spec": null,
|
|
638
|
+
"plan": null,
|
|
639
|
+
"planRevision": null,
|
|
640
|
+
"architecture": false,
|
|
641
|
+
"basedOn": null,
|
|
642
|
+
"next": "/fluent-feature-explain",
|
|
643
|
+
"sessions": [],
|
|
644
|
+
"_discoveredBy": "/fluent-implementation-map",
|
|
645
|
+
"_workflows": ["ORDER::HD", "FULFILMENT::HD_WH", "ARTICLE::HD"],
|
|
646
|
+
"_confidence": "HIGH"
|
|
647
|
+
}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
The `_discoveredBy`, `_workflows`, and `_confidence` fields are prefixed with `_` to indicate discovery metadata (not part of the standard schema). Downstream skills like `/fluent-feature-explain` can read `_workflows` to know which workflows to analyze without asking the user.
|
|
651
|
+
|
|
652
|
+
**Lifecycle bridge:** After running with `--create-stubs`, the user can:
|
|
653
|
+
- Run `/fluent-feature-status` to see all discovered features
|
|
654
|
+
- Run `/fluent-feature-explain <slug>` on any feature (reads `_workflows` from status.json)
|
|
655
|
+
- Start the planning chain on any feature via `/fluent-use-case-discover`
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## Edge Cases
|
|
660
|
+
|
|
661
|
+
| Case | Handling |
|
|
662
|
+
|------|----------|
|
|
663
|
+
| Account with 0 workflows | Report "No workflows found" with guidance to deploy |
|
|
664
|
+
| Account with 1 workflow | Single-feature output (no clustering needed) |
|
|
665
|
+
| All workflows same entity type | Cluster by subtype only; if same subtype, treat as single feature |
|
|
666
|
+
| Workflow with no subtype (e.g., `ORDER::ORDER`) | Use Heuristic 3 (naming patterns) or mark as UNCLUSTERED |
|
|
667
|
+
| 50+ workflows | Paginate output; recommend `--depth summary` + `--focus` filter |
|
|
668
|
+
| No custom rules (pure OOTB) | Still valid; report rule counts as 0/N; customisation score = 0 |
|
|
669
|
+
| No SOURCE/ directory | Skip code analysis; note in gap analysis |
|
|
670
|
+
| Circular event chains | Detect and flag as cross-feature loops (not errors) |
|
|
671
|
+
| Multiple retailers sharing workflows | Analyze per-retailer; note shared patterns |
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
## Estimated Token Budget
|
|
676
|
+
|
|
677
|
+
| Phase | Summary depth | Detailed (per feature) |
|
|
678
|
+
|-------|---------------|------------------------|
|
|
679
|
+
| Phase 1: Inventory collection | ~3k (workflow list + plugin.list + env.discover) | Same |
|
|
680
|
+
| Phase 2: Feature identification | ~1k + 2k per workflow (parse JSON) | Same |
|
|
681
|
+
| Phase 3: Flow mapping | ~2k per feature (summary tables) | ~8-15k (full architecture) |
|
|
682
|
+
| Phase 4: Gap analysis | ~1k | Same |
|
|
683
|
+
| Phase 5: Report generation | ~3k | ~5k |
|
|
684
|
+
| **Total (10 workflows, 3 features)** | **~30k tokens** | **~70k tokens** |
|
|
685
|
+
|
|
686
|
+
---
|
|
687
|
+
|
|
688
|
+
## Open Questions (Resolved)
|
|
689
|
+
|
|
690
|
+
1. **Should `--depth detailed` auto-invoke `/fluent-feature-explain`?** → **No.** Use the same analysis patterns inline but link to `/fluent-feature-explain --feature <slug>` for deeper drill-down. Keeps the skill self-contained without subprocess coordination.
|
|
691
|
+
|
|
692
|
+
2. **Should the skill create `features/<slug>/` directories?** → **Yes, but opt-in via `--create-stubs`.** Not by default. This bridges discovery into the feature lifecycle without forcing it. See "Feature Stub Creation" section above.
|
|
693
|
+
|
|
694
|
+
3. **How to handle accounts with 50+ workflows?** → **Use `--focus` filter + `--depth summary` as default.** Edge cases table covers pagination guidance. Progressive output: emit features as they're identified.
|
|
695
|
+
|
|
696
|
+
4. **Should it diff against a previous map?** → **v2 feature.** Not in initial implementation. The `inventory.json` output enables external diffing.
|
|
697
|
+
|
|
698
|
+
5. **Naming** → **Resolved: `/fluent-implementation-map`.** Already registered in metadata.json, CHANGELOG, README. Name emphasises the output (a map of the implementation).
|