@fluentcommerce/ai-skills 0.13.0 → 0.14.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.
- package/README.md +14 -12
- package/bin/cli.mjs +29 -2
- package/content/cli/skills/fluent-connect/SKILL.md +57 -2
- package/content/cli/skills/fluent-profile/SKILL.md +35 -5
- package/content/dev/agents/fluent-backend-dev.md +2 -2
- package/content/dev/agents/fluent-dev.md +1 -1
- package/content/dev/skills/fluent-custom-code/SKILL.md +1 -1
- package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +5 -5
- package/content/dev/skills/fluent-event-api/SKILL.md +1 -1
- package/content/dev/skills/{fluent-source-onboard → fluent-module-convert}/SKILL.md +223 -24
- package/content/dev/skills/fluent-module-validate/SKILL.md +6 -6
- package/content/dev/skills/fluent-mystique-builder/SKILL.md +1 -1
- package/content/dev/skills/fluent-mystique-scaffold/SDK_REFERENCE.md +2 -2
- package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1 -1
- package/content/dev/skills/fluent-mystique-scaffold/TEMPLATES.md +1 -1
- package/content/dev/skills/fluent-retailer-config/SKILL.md +2 -2
- package/content/dev/skills/fluent-scope-plan/SKILL.md +1 -1
- package/content/dev/skills/fluent-transition-api/SKILL.md +1 -1
- package/content/dev/skills/fluent-ui-test/SKILL.md +8 -7
- package/content/dev/skills/fluent-workspace-tree/SKILL.md +2 -2
- package/content/knowledge/index.md +3 -3
- package/content/knowledge/platform/module-structure.md +5 -5
- package/content/knowledge/platform/mystique-routing.md +6 -3
- package/content/knowledge/platform/permissions-and-contexts.md +2 -2
- package/content/knowledge/platform/rule-test-patterns.md +1 -1
- package/docs/01-first-session.md +175 -0
- package/docs/02-prompt-guide.md +246 -0
- package/docs/03-use-cases.md +1179 -0
- package/docs/04-onboarding-plan.md +355 -0
- package/docs/05-getting-started.md +262 -0
- package/docs/06-dev-workflow.md +1040 -0
- package/docs/INDEX.md +40 -0
- package/docs/agents-and-skills-guide.md +199 -0
- package/docs/capability-map.md +165 -0
- package/docs/chrome-devtools-mcp-reference.md +400 -0
- package/docs/fluent-ai-skills-reference.md +1351 -0
- package/docs/manifest-safety.md +79 -0
- package/docs/mcp-servers.md +209 -0
- package/docs/workflow-reference.md +167 -0
- package/lib/fluent-brand.css +55 -0
- package/metadata.json +7 -6
- package/package.json +12 -3
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: fluent-
|
|
3
|
-
description:
|
|
2
|
+
name: fluent-module-convert
|
|
3
|
+
description: Convert existing Java source code into a proper Fluent Commerce extension module. Analyzes non-standard code layouts (loose files, decompiled JARs, plugins, different build systems), restructures into Maven multi-module format with module.json, validates the result, and optionally attempts a build. Triggers on "convert to module", "convert plugin to module", "refactor to module", "restructure module", "onboard source", "migrate to fluent module", "import source code", "convert to module format".
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
6
6
|
argument-hint: <source-path> [--module-name <name>] [--account-prefix <PREFIX>] [--dry-run] [--skip-build]
|
|
7
7
|
cursor-tier: manual
|
|
8
|
-
planning-gate:
|
|
8
|
+
planning-gate: mandatory
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# Module Converter
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Convert existing Java source code — whether loose files, a non-standard project layout, a decompiled JAR, a plugin, or a project using a different build system — into a proper Fluent Commerce extension module that passes `/fluent-module-validate` and builds with `/fluent-build`.
|
|
14
14
|
|
|
15
15
|
## Pre-flight: Feedback Check
|
|
16
16
|
|
|
17
17
|
Before starting, check for past learnings from this skill:
|
|
18
18
|
|
|
19
|
-
1. Check if `accounts/<PROFILE>/feedback/fluent-
|
|
19
|
+
1. Check if `accounts/<PROFILE>/feedback/fluent-module-convert.jsonl` exists
|
|
20
20
|
2. If yes, read last 20 records
|
|
21
21
|
3. Filter to: FAILURE or USER_CORRECTED outcomes, confidence = CONFIRMED or PROMOTED
|
|
22
22
|
4. Extract top 3 relevant learnings — use as internal guidance during execution
|
|
@@ -25,14 +25,16 @@ Before starting, check for past learnings from this skill:
|
|
|
25
25
|
## When to Use
|
|
26
26
|
|
|
27
27
|
- "I have Java rule classes but they're not in a Fluent module structure"
|
|
28
|
+
- "Convert this existing plugin to a proper module"
|
|
28
29
|
- "Onboard this decompiled JAR into a buildable module"
|
|
29
30
|
- "Convert this Gradle project to Fluent Commerce module format"
|
|
30
31
|
- "I have source code from another team — make it a proper module"
|
|
31
32
|
- "Restructure this code into the standard Maven multi-module layout"
|
|
32
33
|
- "Import these rule classes into a deployable module"
|
|
34
|
+
- "Analyze this plugin and convert it to module format"
|
|
33
35
|
- Code exists in `accounts/<PROFILE>/SOURCE/backend/` but doesn't pass `/fluent-module-validate`
|
|
34
36
|
- Decompiled output exists in `accounts/<PROFILE>/SOURCE/backend/.decompiled/` and needs to become a buildable module
|
|
35
|
-
- `/fluent-scope-plan` generated a `
|
|
37
|
+
- `/fluent-scope-plan` generated a `MODULE_CONVERT` task
|
|
36
38
|
|
|
37
39
|
## When NOT to Use
|
|
38
40
|
|
|
@@ -88,11 +90,62 @@ This skill does **not** own:
|
|
|
88
90
|
|
|
89
91
|
## Execution Protocol
|
|
90
92
|
|
|
91
|
-
**Phase ordering note:** Unlike most implementation skills,
|
|
93
|
+
**Phase ordering note:** Unlike most implementation skills, module-convert has TWO user checkpoints before any files are modified:
|
|
92
94
|
|
|
93
|
-
|
|
95
|
+
1. **Phase 0** — Intake triage: resolve ambiguity (source path, intent, namespace, module name)
|
|
96
|
+
2. **Phase 1** — Source analysis (read-only): scan, classify, present findings → **user confirms or corrects**
|
|
97
|
+
3. **Phase 2** — Planning gate (mandatory): present restructuring plan → **user approves before execution**
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
This two-checkpoint flow is intentional. The user knows their code better than the AI — they can catch misclassified rules, wrong namespaces, or deprecated code at the analysis stage, before the plan is built on top of potentially wrong assumptions.
|
|
100
|
+
|
|
101
|
+
### Phase 0: Intake Triage
|
|
102
|
+
|
|
103
|
+
Before scanning any files, resolve critical unknowns. Ask these **only if the answer is not already clear** from the user's prompt, arguments, or workspace context. Do not ask questions you can answer by reading the filesystem.
|
|
104
|
+
|
|
105
|
+
#### 0.1 Source Path
|
|
106
|
+
|
|
107
|
+
If the user did not provide a `source-path`:
|
|
108
|
+
1. Check `accounts/<PROFILE>/SOURCE/backend/` for candidate directories
|
|
109
|
+
2. If exactly one candidate, confirm: _"Found `accounts/ACME/SOURCE/backend/legacy-plugin/` — convert this?"_
|
|
110
|
+
3. If multiple candidates, list them and ask which one
|
|
111
|
+
4. If none, ask: _"Where is the source code you want to convert? Provide a path relative to the workspace root."_
|
|
112
|
+
|
|
113
|
+
#### 0.2 Intent Check
|
|
114
|
+
|
|
115
|
+
If the prompt uses ambiguous language ("analyze", "look at", "check") without clear conversion intent ("convert", "restructure", "module format", "onboard"):
|
|
116
|
+
- Ask: _"Do you want to **analyze** this code (understand what it does → `/fluent-custom-code`) or **convert** it into a Fluent module (restructure + build infrastructure)?"_
|
|
117
|
+
|
|
118
|
+
If the source path already contains a valid `module.json` + `pom.xml` + standard Maven layout:
|
|
119
|
+
- Ask: _"This already looks like a valid Fluent module. Do you want to **repair** structural issues, or **re-convert** from scratch?"_
|
|
120
|
+
|
|
121
|
+
#### 0.3 Plugin Namespace (Account Prefix)
|
|
122
|
+
|
|
123
|
+
The plugin namespace determines rule registration keys (e.g., `ACME.order.ValidateReturnWindow`). This MUST be correct — a wrong namespace means workflows can't find the rules at runtime.
|
|
124
|
+
|
|
125
|
+
**Auto-detection order:**
|
|
126
|
+
1. `--account-prefix` argument → use as-is
|
|
127
|
+
2. Existing `module.json` in the source → extract from rule keys (the prefix before the first `.`)
|
|
128
|
+
3. `plugin_list` from the live environment → extract common prefix from deployed rules
|
|
129
|
+
4. Active profile name from CLI context
|
|
130
|
+
|
|
131
|
+
**If auto-detection fails or finds conflicting prefixes**, ask:
|
|
132
|
+
_"What plugin namespace should I use for rule registration? This becomes the prefix in rule keys like `<NAMESPACE>.order.ValidateReturnWindow`."_
|
|
133
|
+
|
|
134
|
+
**If auto-detected prefix differs from deployed prefix**, warn and confirm:
|
|
135
|
+
_"The source uses prefix `ACME` but deployed rules use `MY_COMPANY`. Which should the converted module use?"_
|
|
136
|
+
- **Use deployed prefix** (recommended) — zero-disruption, workflows keep working
|
|
137
|
+
- **Use source prefix** — requires workflow redeployment to update rule references
|
|
138
|
+
|
|
139
|
+
#### 0.4 Module Name
|
|
140
|
+
|
|
141
|
+
If `--module-name` was not provided and cannot be derived from the source directory name or existing `module.json`:
|
|
142
|
+
- Ask: _"What should the module be called? This sets the Maven artifact ID and module.json name (e.g., `my-returns`)."_
|
|
143
|
+
|
|
144
|
+
**Skip Phase 0 entirely** when the user provides a clear `source-path`, conversion intent, and the source contains enough context to auto-detect namespace and module name.
|
|
145
|
+
|
|
146
|
+
### Phase 1: Source Analysis (read-only, results shown to user)
|
|
147
|
+
|
|
148
|
+
**Goal:** Understand what exists, classify its state, and identify all rule classes. **No files are modified in this phase.** Analysis results are presented to the user at the end of this phase — the user can correct misclassifications before the plan is built.
|
|
96
149
|
|
|
97
150
|
#### Step 1.1: Classify Source Layout
|
|
98
151
|
|
|
@@ -123,12 +176,19 @@ source-path/
|
|
|
123
176
|
For each Java file found, determine if it's a Fluent rule class:
|
|
124
177
|
|
|
125
178
|
**Detection patterns** (check in order):
|
|
126
|
-
1. Extends `BaseRule` or `Rule` (from Rubix SDK)
|
|
179
|
+
1. Extends `BaseRule` or `Rule` (from Rubix SDK) — **check transitively**: if a class extends a project-local base class (e.g., `com.puma.common.BaseRule`) that itself implements `Rule` or extends SDK `BaseRule`, treat it as a rule. Read the base class source to confirm.
|
|
127
180
|
2. Has `@RuleInfo` annotation
|
|
128
|
-
3. Implements `run(
|
|
129
|
-
4. Contains `context.getProp(...)
|
|
181
|
+
3. Implements `run(...)` or a custom `execute(...)` method that is called from `run()` — projects often wrap the SDK `run(Context)` in a custom base class that delegates to `execute(ContextWrapper)`
|
|
182
|
+
4. Contains `context.getProp(...)`, `context.getEvent()`, or equivalent calls through a project-specific context wrapper
|
|
130
183
|
5. Is registered in a `module.json` (if one exists)
|
|
131
184
|
|
|
185
|
+
**Custom base class / context wrapper detection:**
|
|
186
|
+
Many production plugins define their own `BaseRule` and `ContextWrapper` that wrap the SDK classes. When detected:
|
|
187
|
+
- Classify the custom base class as `FRAMEWORK` (not rule, not utility)
|
|
188
|
+
- Move it to `plugins/util/` alongside other framework-level classes
|
|
189
|
+
- Do NOT rewrite rules to use SDK classes directly — preserve the custom wrapper
|
|
190
|
+
- Note the inheritance chain in the analysis output so the user can verify
|
|
191
|
+
|
|
132
192
|
**For each detected rule, extract:**
|
|
133
193
|
- Class name (e.g., `ValidateReturnWindow`)
|
|
134
194
|
- Package name (e.g., `com.fluentcommerce.rule.order`)
|
|
@@ -143,6 +203,26 @@ For each Java file found, determine if it's a Fluent rule class:
|
|
|
143
203
|
- Missing Javadoc/comments
|
|
144
204
|
- Confidence level: decompiled vs original
|
|
145
205
|
|
|
206
|
+
#### Step 1.2b: Discover Non-Java Assets
|
|
207
|
+
|
|
208
|
+
Scan for non-Java files that need special handling:
|
|
209
|
+
|
|
210
|
+
**GraphQL operations** (`*.graphql` files):
|
|
211
|
+
- Typically in `src/main/graphql/` — used by Apollo code generation at build time
|
|
212
|
+
- These must stay alongside the rules submodule (Apollo plugin wires them during compile)
|
|
213
|
+
- Count mutations vs queries, note the GraphQL package path
|
|
214
|
+
|
|
215
|
+
**Settings and manifest JSONs:**
|
|
216
|
+
- Look for `settings/`, `manifests/`, or directories containing Mystique manifest JSON files (`fc.mystique.manifest.*`)
|
|
217
|
+
- These are **NOT part of the extension module** — they belong in a separate data module
|
|
218
|
+
- Flag to the user: _"Found N settings/manifest files. These should be deployed as a separate data module (`/fluent-data-module-scaffold`), not bundled with the extension module."_
|
|
219
|
+
|
|
220
|
+
**Other non-Java resources:**
|
|
221
|
+
- `reviewTools/`, `scripts/`, documentation, Python files — flag as non-module assets that won't be included in the restructured module
|
|
222
|
+
- Config files (`.properties`, `.yml`, `.xml` other than POM) — may need to move to `src/main/resources/`
|
|
223
|
+
|
|
224
|
+
Present the asset inventory in the Phase 1.5 findings so the user can decide what to include.
|
|
225
|
+
|
|
146
226
|
#### Step 1.3: Detect Existing module.json
|
|
147
227
|
|
|
148
228
|
If a `module.json` exists in the source path:
|
|
@@ -166,6 +246,77 @@ plugin_list (compact: true)
|
|
|
166
246
|
- Identify rules that are deployed but have different versions or parameters
|
|
167
247
|
- Flag any namespace conflicts
|
|
168
248
|
|
|
249
|
+
#### Step 1.5: Present Analysis Findings
|
|
250
|
+
|
|
251
|
+
**Before proceeding to the plan, present a structured summary of what was found.** This gives the user a chance to correct misclassifications, flag deprecated rules, or adjust the namespace before the restructuring plan is built on top of these findings.
|
|
252
|
+
|
|
253
|
+
```markdown
|
|
254
|
+
## Source Analysis — What I Found
|
|
255
|
+
|
|
256
|
+
| Property | Value |
|
|
257
|
+
|----------|-------|
|
|
258
|
+
| Source path | `accounts/<PROFILE>/SOURCE/backend/rubix-plugin-<name>/` |
|
|
259
|
+
| Layout category | MAVEN_NONSTANDARD (flat single-POM, not multi-module) |
|
|
260
|
+
| Java files found | 469 |
|
|
261
|
+
| Rule classes detected | 346 (across 17 domains) |
|
|
262
|
+
| Framework classes | 4 (custom BaseRule, ContextWrapper, Guard, LogJsonSerializer) |
|
|
263
|
+
| Model/DTO classes | 86 |
|
|
264
|
+
| Service classes | 12 |
|
|
265
|
+
| Utility classes | 17 |
|
|
266
|
+
| Exception classes | 4 |
|
|
267
|
+
| Test classes found | 126 |
|
|
268
|
+
| Existing module.json | No |
|
|
269
|
+
| Existing pom.xml | Yes (flat, v1.0.36) |
|
|
270
|
+
| Plugin namespace | <ACCOUNT_PREFIX>.<namespace> (from POM properties) |
|
|
271
|
+
|
|
272
|
+
### Non-Java Assets
|
|
273
|
+
|
|
274
|
+
| Asset Type | Count | Location | Recommendation |
|
|
275
|
+
|-----------|-------|----------|----------------|
|
|
276
|
+
| GraphQL operations | N (.graphql files) | src/main/graphql/ | Keep with rules submodule (Apollo build-time) |
|
|
277
|
+
| Mystique manifests | N JSON files | settings/UI Settings/ | **Separate data module** — not part of extension |
|
|
278
|
+
| Other settings | N JSON files | settings/ | **Separate data module** |
|
|
279
|
+
| Dev tooling | Scripts, docs | reviewTools/ etc. | Exclude from module (not deployable) |
|
|
280
|
+
|
|
281
|
+
### Custom Framework Classes
|
|
282
|
+
|
|
283
|
+
| Class | Purpose | Impact |
|
|
284
|
+
|-------|---------|--------|
|
|
285
|
+
| `com.<org>.common.BaseRule` | Wraps SDK `Rule`, adds execute/logging/exception pattern | **All N rules extend this** — must preserve |
|
|
286
|
+
| `com.<org>.common.ContextWrapper` | Wraps SDK `Context` with convenience methods | **All rules use this** — must preserve |
|
|
287
|
+
| Other framework classes | Validation, serialization, etc. | Used by rules — move to util |
|
|
288
|
+
|
|
289
|
+
### Discovered Rules (top domains by count)
|
|
290
|
+
|
|
291
|
+
| Domain | Rules | Entity Type | Examples |
|
|
292
|
+
|--------|-------|-------------|---------|
|
|
293
|
+
| order | N | ORDER | (list top 2-3 class names) |
|
|
294
|
+
| fulfilment | N | FULFILMENT | (list top 2-3 class names) |
|
|
295
|
+
| consignment | N | CONSIGNMENT | (list top 2-3 class names) |
|
|
296
|
+
| *(+ more domains)* | N | — | — |
|
|
297
|
+
|
|
298
|
+
### Issues & Decisions Needed
|
|
299
|
+
|
|
300
|
+
- ⚠ **No module.json** — N rule registrations will be generated. Confirm namespace `<ACCOUNT_PREFIX>.<namespace>` is correct.
|
|
301
|
+
- ⚠ **N rules have no tests** — skeletons will be generated for untested rules
|
|
302
|
+
- ⚠ **Custom BaseRule wrapper** — rules extend project-local BaseRule, not SDK BaseRule. Will preserve as-is.
|
|
303
|
+
- ❓ **Package rename?** Source uses `com.<org>.*`. Recommend keeping as-is for large codebases (massive import churn, no runtime benefit). Want to repackage to `com.fluentcommerce.*`?
|
|
304
|
+
- ❓ **Settings/manifests** — N JSON files found. Deploy as separate data module? Or include in extension?
|
|
305
|
+
- ❓ **GraphQL operations** — N `.graphql` files found. Keep with rules submodule for Apollo build? Or separate?
|
|
306
|
+
|
|
307
|
+
Does this look correct? Any classes I misclassified? Any rules to exclude?
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Wait for the user to confirm or correct.** Common corrections:
|
|
311
|
+
- _"ReturnHelper is actually a rule, not a utility"_ → reclassify
|
|
312
|
+
- _"NotifyWarehouse is deprecated, exclude it"_ → remove from plan
|
|
313
|
+
- _"The namespace should be MY_COMPANY, not ACME"_ → update prefix
|
|
314
|
+
- _"Keep the package as com.puma"_ → skip repackaging
|
|
315
|
+
- _"Yes, separate data module for settings"_ → flag for `/fluent-data-module-scaffold`
|
|
316
|
+
- _"Looks good, proceed"_ → move to Phase 2
|
|
317
|
+
|
|
318
|
+
If the user says nothing controversial or confirms, proceed to Phase 2. If they correct something, update the analysis and re-present if the change is significant (e.g., namespace change affects all rule keys).
|
|
319
|
+
|
|
169
320
|
### Phase 2: Planning Gate
|
|
170
321
|
|
|
171
322
|
#### Pre-flight Chain (Three-Level)
|
|
@@ -177,14 +328,14 @@ Before restructuring any source code, run the three-level pre-flight check:
|
|
|
177
328
|
- Check `plan: "APPROVED"` — If missing, BLOCK: `→ BLOCKED: PLAN_REQUIRED — Run /fluent-feature-plan first`
|
|
178
329
|
- If both approved, skip to implementation referencing the plan's relevant sections
|
|
179
330
|
2. **Multi-artifact work** (onboarding as part of larger feature): STOP. Invoke `/fluent-feature-plan` first
|
|
180
|
-
3. **Standalone
|
|
331
|
+
3. **Standalone module-convert work** (no feature context):
|
|
181
332
|
- Check `accounts/<PROFILE>/tasks/` for a task plan with `Status: APPROVED`
|
|
182
333
|
- If approved task plan found, skip to implementation
|
|
183
334
|
- If no plan, continue to the Planning Gate below
|
|
184
335
|
|
|
185
|
-
**MANDATORY: Present a restructuring plan before making ANY changes.** Use the template from `PLAN_TEMPLATE.md` in the `fluent-feature-plan` skill as the base structure. Every table row must carry a Source column (NEW/EXISTING/MODIFIED/REUSED/OOTB). Extend with the
|
|
336
|
+
**MANDATORY: Present a restructuring plan before making ANY changes.** Use the template from `PLAN_TEMPLATE.md` in the `fluent-feature-plan` skill as the base structure. Every table row must carry a Source column (NEW/EXISTING/MODIFIED/REUSED/OOTB). Extend with the module-convert-specific sections below.
|
|
186
337
|
|
|
187
|
-
Write the plan to: `accounts/<PROFILE>/tasks/<YYYY-MM-DD>-
|
|
338
|
+
Write the plan to: `accounts/<PROFILE>/tasks/<YYYY-MM-DD>-module-convert-<slug>.md`. Set `Status: PENDING`.
|
|
188
339
|
|
|
189
340
|
**Source-onboard specific sections** (in addition to the standard template):
|
|
190
341
|
|
|
@@ -342,11 +493,19 @@ For each discovered rule class:
|
|
|
342
493
|
- Classes that are rule implementations --> `plugins/rules/<alias>/src/main/java/`
|
|
343
494
|
|
|
344
495
|
**Classification heuristics:**
|
|
345
|
-
- Extends `BaseRule`/`Rule` or has `@RuleInfo` --> rule
|
|
496
|
+
- Extends `BaseRule`/`Rule` (SDK or project-local) or has `@RuleInfo` --> rule
|
|
497
|
+
- Is a custom base class that wraps SDK `Rule`/`BaseRule` (e.g., project-local `BaseRule`, `ContextWrapper`) --> **framework** (goes to `plugins/util/`)
|
|
498
|
+
- Is a custom exception class --> **framework** (goes to `plugins/util/`)
|
|
346
499
|
- Is an `enum`, has only getters/setters, or has `@Data`/`@Builder` --> type
|
|
347
500
|
- Is a helper/utility (static methods, service patterns, no rule inheritance) --> util
|
|
501
|
+
- Is a service class (dependency injection, API calls, no rule inheritance) --> util
|
|
348
502
|
- Unclear --> ask user, default to rules
|
|
349
503
|
|
|
504
|
+
**Package rename decision (ask in Phase 1.5 findings):**
|
|
505
|
+
- If the project uses a custom package (e.g., `com.puma.*`), ask: _"The source uses package `com.puma.*`. Do you want to keep this or repackage to `com.fluentcommerce.*`?"_
|
|
506
|
+
- **Recommend keeping the original** for large codebases (100+ files) — repackaging causes massive import churn with no runtime benefit
|
|
507
|
+
- Only repackage if the user explicitly requests it or the package conflicts with another deployed module
|
|
508
|
+
|
|
350
509
|
#### Step 3.3: Fix Common Structural Issues
|
|
351
510
|
|
|
352
511
|
Apply these fixes automatically (all tracked in the plan):
|
|
@@ -473,6 +632,43 @@ plugin_list (name filter: <ACCOUNT_PREFIX>)
|
|
|
473
632
|
| Rule key format matches deployed format | PASS/FAIL per rule |
|
|
474
633
|
| Account prefix is consistent | PASS/FAIL |
|
|
475
634
|
|
|
635
|
+
#### Step 4.3b: Workflow Rule Cross-Reference (like-for-like proof)
|
|
636
|
+
|
|
637
|
+
The restructured module must be functionally equivalent — every rule that workflows reference must still be registered under the **exact same key**. Structure changes; behavior must not.
|
|
638
|
+
|
|
639
|
+
1. **Collect rule keys** from the new `module.json` → `newKeys[]`
|
|
640
|
+
2. **Collect deployed rule keys** from `plugin_list` that match the module's account prefix → `deployedKeys[]`
|
|
641
|
+
3. **Download workflows** that reference any of the deployed keys:
|
|
642
|
+
```
|
|
643
|
+
workflow_list → for each workflow:
|
|
644
|
+
workflow_get (entityType, entitySubtype)
|
|
645
|
+
```
|
|
646
|
+
4. **Extract workflow rule references**: Grep each workflow JSON for rule keys in `rulesets[].rules[].name`
|
|
647
|
+
5. **Cross-reference table:**
|
|
648
|
+
|
|
649
|
+
```markdown
|
|
650
|
+
## Workflow Rule Cross-Reference
|
|
651
|
+
|
|
652
|
+
| Rule Key | In New module.json? | In Deployed module? | Referenced In Workflows | Status |
|
|
653
|
+
|----------|--------------------|--------------------|------------------------|--------|
|
|
654
|
+
| MY_PROFILE.order.ValidateOrder | Yes | Yes (v2.1) | ORDER::HD (ruleset: ON_VALIDATION) | MATCH |
|
|
655
|
+
| MY_PROFILE.order.CreateFulfilment | Yes | Yes (v2.1) | ORDER::HD (ruleset: FULFIL) | MATCH |
|
|
656
|
+
| MY_PROFILE.webhook.NotifyWarehouse | Yes | No (new) | — | NEW (no workflow ref yet) |
|
|
657
|
+
| OLD_PREFIX.order.LegacyCheck | No | Yes (v1.0) | ORDER::HD (ruleset: ON_VALIDATION) | BREAK — workflow references key not in new module |
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
6. **Verdicts:**
|
|
661
|
+
- **MATCH**: Same key in new module.json, deployed, AND workflow → safe
|
|
662
|
+
- **NEW**: In new module.json but not deployed or in workflows → safe (new rule, not yet wired)
|
|
663
|
+
- **BREAK**: In workflow but NOT in new module.json → **FAIL** — deployment would break this workflow ruleset
|
|
664
|
+
- **ORPHAN**: In new module.json but not in any workflow → WARN (registered but unused)
|
|
665
|
+
|
|
666
|
+
7. **If any BREAK found:** STOP. Present the breaks to the user with the old key → new key mapping and ask whether to:
|
|
667
|
+
- Preserve the old key format in module.json (recommended for zero-disruption)
|
|
668
|
+
- Accept the key change and update the workflow JSON to match (requires workflow redeployment)
|
|
669
|
+
|
|
670
|
+
**This step is the "like-for-like" proof**: if all workflow-referenced rules show MATCH, the converted module is a drop-in replacement. Deploy the module and workflows continue working without changes.
|
|
671
|
+
|
|
476
672
|
#### Step 4.4: Functional Checklist
|
|
477
673
|
|
|
478
674
|
Present a manual verification checklist to the user:
|
|
@@ -665,19 +861,22 @@ fc-module-ext/
|
|
|
665
861
|
|
|
666
862
|
```bash
|
|
667
863
|
# Onboard decompiled JAR output into a module
|
|
668
|
-
/fluent-
|
|
864
|
+
/fluent-module-convert accounts/MY_PROFILE/SOURCE/backend/.decompiled/fc-module-ext/
|
|
669
865
|
|
|
670
866
|
# Onboard loose Java files with explicit module name
|
|
671
|
-
/fluent-
|
|
867
|
+
/fluent-module-convert ./my-rules/ --module-name my-returns
|
|
672
868
|
|
|
673
869
|
# Dry run — analyze and plan only, don't modify anything
|
|
674
|
-
/fluent-
|
|
870
|
+
/fluent-module-convert accounts/MY_PROFILE/SOURCE/backend/legacy-project/ --dry-run
|
|
675
871
|
|
|
676
872
|
# Onboard without attempting build (e.g., missing SDK locally)
|
|
677
|
-
/fluent-
|
|
873
|
+
/fluent-module-convert accounts/MY_PROFILE/SOURCE/backend/old-module/ --skip-build
|
|
874
|
+
|
|
875
|
+
# Convert an existing plugin to module format
|
|
876
|
+
/fluent-module-convert accounts/MY_PROFILE/SOURCE/backend/my-legacy-plugin/
|
|
678
877
|
|
|
679
878
|
# Repair an existing module with structural issues
|
|
680
|
-
/fluent-
|
|
879
|
+
/fluent-module-convert accounts/MY_PROFILE/SOURCE/backend/fluentcommerce-fc-module-ext/
|
|
681
880
|
```
|
|
682
881
|
|
|
683
882
|
## Post-Execution: Feedback Capture
|
|
@@ -686,13 +885,13 @@ After completing this skill (whether success or failure), write a feedback recor
|
|
|
686
885
|
|
|
687
886
|
1. **Classify outcome:** `SUCCESS` (completed cleanly), `PARTIAL_SUCCESS` (completed after fixing issues), `FAILURE` (could not complete), `BLOCKED` (prereq missing), `USER_CORRECTED` (user overrode approach)
|
|
688
887
|
2. **Build record:** Create a `feedback-record-v1` JSON object with:
|
|
689
|
-
- `skill`: `"fluent-
|
|
888
|
+
- `skill`: `"fluent-module-convert"`
|
|
690
889
|
- `feature`: feature slug if applicable, null otherwise
|
|
691
890
|
- `phases`: trace of each phase with PASS/FAIL/SKIP
|
|
692
891
|
- `learnings`: any gotchas discovered during execution
|
|
693
892
|
- `userCorrections`: any corrections the user provided
|
|
694
893
|
3. **Redact secrets:** Strip tokens, passwords, API keys. Keep business identifiers.
|
|
695
|
-
4. **Append** one JSON line to `accounts/<PROFILE>/feedback/fluent-
|
|
894
|
+
4. **Append** one JSON line to `accounts/<PROFILE>/feedback/fluent-module-convert.jsonl`
|
|
696
895
|
5. **Update** `accounts/<PROFILE>/feedback/index.json` counters (create with `mkdir -p` if missing)
|
|
697
896
|
|
|
698
897
|
**Skip capture if:** The execution was trivially simple (e.g., user asked a question, no actual write operation happened).
|
|
@@ -136,8 +136,8 @@ servicepoint, wave, returns, b2c-sample-data, b2c-sample-data-inventory
|
|
|
136
136
|
|------|-------------|-----------|-------------|---------|
|
|
137
137
|
| **REFERENCE** | Standard Fluent Commerce modules from repository. Deployed via `fluent module install <name>`. | Yes (OOTB rules) | No (closed-source) | `fluent-commerce/core`, `fluent-commerce/order` |
|
|
138
138
|
| **CUSTOM_EXTENSION** | Account-specific modules with custom Rubix rules. Built from Java source. | Yes (custom rules) | Yes (under `accounts/<PROFILE>/SOURCE/backend/`) | `fluent-commerce/fc-module-custom-extension` |
|
|
139
|
-
| **CUSTOM_WORKFLOW** | Workflow definitions packaged as deployable modules. | No | Workflow JSON in module ZIP | `fluent-commerce/fc-workflow-order-
|
|
140
|
-
| **CUSTOM_DATA** | Configuration, settings, sample data, access control. No executable rules. | No | JSON/config files in module ZIP | `
|
|
139
|
+
| **CUSTOM_WORKFLOW** | Workflow definitions packaged as deployable modules. | No | Workflow JSON in module ZIP | `fluent-commerce/fc-workflow-order-acme-updated` |
|
|
140
|
+
| **CUSTOM_DATA** | Configuration, settings, sample data, access control. No executable rules. | No | JSON/config files in module ZIP | `ACME`, `acme-inventory-data`, `acme/global-access` |
|
|
141
141
|
|
|
142
142
|
**All types must be deployed** — even reference modules are deployed per-retailer via `fluent module install`.
|
|
143
143
|
|
|
@@ -236,10 +236,10 @@ console.log(age > 3600 ? 'stale' : 'fresh');
|
|
|
236
236
|
}
|
|
237
237
|
],
|
|
238
238
|
"customWorkflow": [
|
|
239
|
-
{ "name": "fluent-commerce/fc-workflow-order-
|
|
239
|
+
{ "name": "fluent-commerce/fc-workflow-order-acme-updated", "version": "1.0.0" }
|
|
240
240
|
],
|
|
241
241
|
"customData": [
|
|
242
|
-
{ "name": "
|
|
242
|
+
{ "name": "ACME", "version": "1.0.13" }
|
|
243
243
|
]
|
|
244
244
|
},
|
|
245
245
|
"referenceArtifacts": [
|
|
@@ -254,10 +254,10 @@ console.log(age > 3600 ? 'stale' : 'fresh');
|
|
|
254
254
|
],
|
|
255
255
|
"undeployedModules": [
|
|
256
256
|
{
|
|
257
|
-
"name": "fluent-commerce/fc-module-
|
|
257
|
+
"name": "fluent-commerce/fc-module-acme-return",
|
|
258
258
|
"version": "0.0.6",
|
|
259
259
|
"moduleType": "configuration_only",
|
|
260
|
-
"sourcePath": "accounts/<PROFILE>/SOURCE/backend/fluentcommerce-fc-module-
|
|
260
|
+
"sourcePath": "accounts/<PROFILE>/SOURCE/backend/fluentcommerce-fc-module-acme-return",
|
|
261
261
|
"deploymentStatus": "not_deployed"
|
|
262
262
|
}
|
|
263
263
|
],
|
|
@@ -852,7 +852,7 @@ Every Mystique manifest follows this top-level structure:
|
|
|
852
852
|
| `plugins` | `MystiquePlugin[]` | `[]` | External component bundle URLs or setting references |
|
|
853
853
|
| `orchestrationAlias` | `string` | none | Overrides the `module` value the app sends to the Transition API. OMS App uses `"adminconsole"` so `modules: ["adminconsole"]` in workflow user actions. Store App uses `"servicepoint"` as its orchestration alias (distinct from the manifest setting name `fc.mystique.manifest.store`). |
|
|
854
854
|
|
|
855
|
-
**
|
|
855
|
+
**Context switching (Store + OMS):** When `context.level` is `"location"` (Store) or `"retailer"` (OMS), the app scopes queries to the active context. Set `"switcher": true` and the appropriate `"role"` array to enable the OOTB dropdown. The switcher only appears when the user has roles at multiple contexts. Context is persisted in `localStorage` — `mystique.auth.context.location` (Store, stores ID) or `mystique.auth.context.retailer` (OMS, stores ID). Deep-link with `?user.location.ref=<REF>` (Store) or `?user.retailer.ref=<REF>` (OMS) after the hash path. See `knowledge/platform/mystique-routing.md` §"Context Switching" for full resolution order and permission enforcement.
|
|
856
856
|
|
|
857
857
|
### Route Types
|
|
858
858
|
|
|
@@ -2114,8 +2114,8 @@ The `<namespace>` segment identifies WHO built the component. Choose based on co
|
|
|
2114
2114
|
| Context | Namespace Strategy | Example |
|
|
2115
2115
|
|---------|-------------------|---------|
|
|
2116
2116
|
| **Fluent Commerce OOTB** | `fc` (reserved — never use) | `fc.list`, `fc.page`, `fc.card.attribute` |
|
|
2117
|
-
| **Partner / SI company** | Company abbreviation (2-6 chars, lowercase) | `acme`, `
|
|
2118
|
-
| **Client / brand** | Brand abbreviation or project code | `
|
|
2117
|
+
| **Partner / SI company** | Company abbreviation (2-6 chars, lowercase) | `acme`, `partner1`, `partner2`, `mysi` |
|
|
2118
|
+
| **Client / brand** | Brand abbreviation or project code | `brandx`, `retailx`, `storeco`, `proj1` |
|
|
2119
2119
|
| **Feature-scoped** | Feature or domain name | `appeasement`, `returns`, `sourcing` |
|
|
2120
2120
|
| **Internal / prototype** | Team or project prefix | `demo`, `poc`, `hackathon` |
|
|
2121
2121
|
|
|
@@ -444,7 +444,7 @@ Present the full plan content to the user and wait for approval before generatin
|
|
|
444
444
|
| `-> READY: <path>` | Project directory scaffolded | `-> READY: accounts/MY_PROFILE/SOURCE/frontend/mystique-plugin-curbside/` |
|
|
445
445
|
| `-> NEXT: /fluent-<skill>` | Ready for manifest wiring | `-> NEXT: /fluent-mystique-builder` |
|
|
446
446
|
| `-> BLOCKED: <reason>` | Cannot proceed | `-> BLOCKED: PLAN_REQUIRED -- Write a plan via /fluent-feature-plan` |
|
|
447
|
-
| `-> SKIP: <reason>` | Existing project covers the domain | `-> SKIP: Extend existing project mystique-plugin-
|
|
447
|
+
| `-> SKIP: <reason>` | Existing project covers the domain | `-> SKIP: Extend existing project mystique-plugin-acme. Add component files directly` |
|
|
448
448
|
|
|
449
449
|
### Error codes
|
|
450
450
|
|
|
@@ -500,7 +500,7 @@ console.groupEnd();
|
|
|
500
500
|
```
|
|
501
501
|
|
|
502
502
|
**Alias naming convention:** `<namespace>.<category>.<component-name>` where:
|
|
503
|
-
- `namespace` is the company/project prefix (e.g., `acme`, `
|
|
503
|
+
- `namespace` is the company/project prefix (e.g., `acme`, `globex`, `curbside`)
|
|
504
504
|
- `category` is one of `page`, `layout`, `content`, `filter`
|
|
505
505
|
- `component-name` is kebab-case (e.g., `order-tracker`, `store-map`)
|
|
506
506
|
|
|
@@ -421,7 +421,7 @@ Perform Kahn's algorithm (BFS-based topological sort). The priority field reflec
|
|
|
421
421
|
### Skill Existence Validation
|
|
422
422
|
|
|
423
423
|
After generating the task list, validate that every `skill` field references a real skill. Known valid skills:
|
|
424
|
-
`fluent-module-scaffold`, `fluent-rule-scaffold`, `fluent-workflow-builder`, `fluent-build`, `fluent-settings`, `fluent-module-deploy`, `fluent-workflow-deploy`, `fluent-e2e-test`, `fluent-pre-deploy-check`, `fluent-custom-code`, `fluent-feature-plan`, `fluent-retailer-config`, `fluent-
|
|
424
|
+
`fluent-module-scaffold`, `fluent-rule-scaffold`, `fluent-workflow-builder`, `fluent-build`, `fluent-settings`, `fluent-module-deploy`, `fluent-workflow-deploy`, `fluent-e2e-test`, `fluent-pre-deploy-check`, `fluent-custom-code`, `fluent-feature-plan`, `fluent-retailer-config`, `fluent-module-convert`, `fluent-test-data`, `fluent-job-batch`, `fluent-use-case-discover`, `fluent-module-validate`, `fluent-connection-analysis`, `fluent-mystique-builder`, `fluent-mystique-scaffold`, `fluent-mystique-component`
|
|
425
425
|
|
|
426
426
|
## Ambiguity Detection
|
|
427
427
|
|
|
@@ -300,17 +300,18 @@ Where:
|
|
|
300
300
|
- `<env>` — `test`, `sandbox`, `staging`, or `prod` (omitted for prod)
|
|
301
301
|
- `<app>` — `oms`, `store`, or `servicepoint`
|
|
302
302
|
|
|
303
|
-
###
|
|
303
|
+
### Context Pre-Selection (Store + OMS)
|
|
304
304
|
|
|
305
|
-
|
|
305
|
+
Both apps support pre-selecting a context via URL parameter **appended after the hash path**:
|
|
306
306
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
307
|
+
| App | Context Level | URL Parameter | Example |
|
|
308
|
+
|---|---|---|---|
|
|
309
|
+
| **Store** | `location` | `user.location.ref` | `store/#/waves?user.location.ref=LOC_SYD_001` |
|
|
310
|
+
| **OMS** | `retailer` | `user.retailer.ref` | `oms/#/orders?user.retailer.ref=RETAILER_AU` |
|
|
310
311
|
|
|
311
|
-
|
|
312
|
+
Context resolution order: (1) URL param (consumed on load, then stripped), (2) `localStorage["mystique.auth.context.<type>"]` (persisted ID from previous selection), (3) first accessible context. localStorage persists across sessions.
|
|
312
313
|
|
|
313
|
-
If the test user lacks
|
|
314
|
+
If the test user lacks the required role context (AGENT for locations, RETAILER for retailers), the system falls back to the next priority. See `knowledge/platform/mystique-routing.md` §"Context Switching" for full details.
|
|
314
315
|
|
|
315
316
|
## Protocol Phases
|
|
316
317
|
|
|
@@ -146,7 +146,7 @@ accounts/<PROFILE>/
|
|
|
146
146
|
| |-- topology/ (N files) [connection topology maps]
|
|
147
147
|
| +-- settings/ (N files) [settings audit]
|
|
148
148
|
|-- tasks/ (N operational plans)
|
|
149
|
-
| +-- 2026-02-23-module-scaffold-
|
|
149
|
+
| +-- 2026-02-23-module-scaffold-acme-curbside.md
|
|
150
150
|
+-- sessions/ (N audit exports)
|
|
151
151
|
+-- session-abc123.json
|
|
152
152
|
```
|
|
@@ -261,7 +261,7 @@ After rendering the tree, suggest next actions based on what's present:
|
|
|
261
261
|
|
|
262
262
|
- **No features exist:** "Run /fluent-use-case-discover to create your first feature"
|
|
263
263
|
- **No workflows downloaded:** "Run workflow download to get workflows from the live environment"
|
|
264
|
-
- **No source repos:** "Clone plugin repos into SOURCE/backend/ (or SDK projects into SOURCE/frontend/) or run /fluent-
|
|
264
|
+
- **No source repos:** "Clone plugin repos into SOURCE/backend/ (or SDK projects into SOURCE/frontend/) or run /fluent-module-convert"
|
|
265
265
|
- **Features ready to build:** "Feature <name> is APPROVED -- start with /fluent-rule-scaffold"
|
|
266
266
|
- **Reports exist:** "Recent build report found -- check /fluent-pre-deploy-check status"
|
|
267
267
|
|
|
@@ -46,16 +46,16 @@ These files are copied into the workspace `knowledge/` directory and are safe fo
|
|
|
46
46
|
| [platform/interaction-design-patterns.md](platform/interaction-design-patterns.md) | **Decision guide:** given a requirement, asks guided questions → recommends the right Fluent interaction pattern (7 patterns, quick-reference table, guided questions checklist) | `feature-plan`, `use-case-discover`, `workflow-builder`, `mystique-builder`, `custom-code`, `rule-scaffold` |
|
|
47
47
|
| [platform/graphql-in-rules.md](platform/graphql-in-rules.md) | Decision framework and gotchas for GraphQL inside rules | `rule-scaffold`, `custom-code`, `feature-plan`, `feature-explain`, `build`, `module-scaffold` |
|
|
48
48
|
| [platform/graphql-in-rules-reference.md](platform/graphql-in-rules-reference.md) | Detailed DynamicUtils and Apollo usage patterns | `rule-scaffold`, `custom-code`, `feature-plan`, `feature-explain`, `build`, `module-scaffold` |
|
|
49
|
-
| [platform/module-structure.md](platform/module-structure.md) | Module anatomy — types (extension, data, workflow, reference), directory layout, module.json, Maven POM hierarchy, config variables, build, deploy, selective install | `module-scaffold`, `data-module-scaffold`, `module-validate`, `build`, `module-deploy`, `
|
|
49
|
+
| [platform/module-structure.md](platform/module-structure.md) | Module anatomy — types (extension, data, workflow, reference), directory layout, module.json, Maven POM hierarchy, config variables, build, deploy, selective install | `module-scaffold`, `data-module-scaffold`, `module-validate`, `build`, `module-deploy`, `module-convert`, `custom-code`, `rule-scaffold` |
|
|
50
50
|
| [platform/reference-modules.md](platform/reference-modules.md) | OOTB rule catalog by module, rule categories, context mappings, OOTB vs custom decision guide, offline catalog | `rule-scaffold`, `workflow-builder`, `feature-plan`, `module-validate`, `custom-code`, `rule-lookup`, `implementation-map`, `feature-explain`, `rfl-assess`, `trace`, `pre-deploy-check` |
|
|
51
51
|
| [platform/graphql-preflight.md](platform/graphql-preflight.md) | GraphQL validation lifecycle, Relay connection pattern, `first` vs `last` disambiguation, cursor pagination (`after`/`before`), DynamicUtils field-path validation | `mcp-tools`, `mcp-core`, `trace`, `rule-scaffold`, `custom-code`, `e2e-test`, `mystique-builder`, `mystique-assess`, `feature-plan`, `workflow-builder` |
|
|
52
52
|
| [platform/graphql-query-complexity.md](platform/graphql-query-complexity.md) | Query complexity calculator algorithm, 11,111 max limit, optimization strategies | `trace`, `test-data`, `mcp-tools`, `mcp-core`, `e2e-test`, `workflow-builder`, `rule-scaffold`, `custom-code`, `rfl-assess` |
|
|
53
53
|
| [platform/financial-fields.md](platform/financial-fields.md) | Financial field schema — legacy Float vs precise BigDecimal, per-entity field map, mutation input shapes, currency patterns | `rule-scaffold`, `custom-code`, `test-data`, `mystique-builder`, `mystique-component`, `mystique-scaffold`, `feature-plan`, `implementation-map`, `entity-flow-diagnose`, `e2e-test`, `trace` |
|
|
54
54
|
| [platform/reusability-patterns.md](platform/reusability-patterns.md) | Rule/component reuse, naming, parameterization patterns | `rule-scaffold`, `mystique-component`, `feature-plan`, `use-case-discover`, `mystique-scaffold`, `custom-code`, `feature-explain` |
|
|
55
|
-
| [platform/rule-test-patterns.md](platform/rule-test-patterns.md) | RuleExecutor, TestExecutor, WorkflowExecutor, Mockito patterns, ApolloUtils/TestUtils API, query mocks, mutation assertions, fixtures, coverage checklist | `rule-test`, `rule-scaffold`, `custom-code`, `build`, `module-scaffold`, `
|
|
55
|
+
| [platform/rule-test-patterns.md](platform/rule-test-patterns.md) | RuleExecutor, TestExecutor, WorkflowExecutor, Mockito patterns, ApolloUtils/TestUtils API, query mocks, mutation assertions, fixtures, coverage checklist | `rule-test`, `rule-scaffold`, `custom-code`, `build`, `module-scaffold`, `module-convert`, `e2e-test`, `pre-deploy-check` |
|
|
56
56
|
| [platform/roles-and-permissions.md](platform/roles-and-permissions.md) | RBAC design questions and runtime permission model | `use-case-discover`, `feature-plan`, `rule-scaffold`, `workflow-builder`, `mystique-builder` |
|
|
57
57
|
| [platform/mystique-manifest-components.md](platform/mystique-manifest-components.md) | Core manifest components and props | `mystique-builder`, `mystique-validate`, `mystique-analyze`, `mystique-diff`, `ui-test`, `feature-plan`, `implementation-map` |
|
|
58
|
-
| [platform/mystique-routing.md](platform/mystique-routing.md) | HashRouter routing, params, link patterns, back buttons | `mystique-builder`, `mystique-
|
|
58
|
+
| [platform/mystique-routing.md](platform/mystique-routing.md) | HashRouter routing, params, link patterns, back buttons, context switching (location/retailer URL params, localStorage persistence) | `mystique-builder`, `mystique-assess`, `mystique-preview`, `mystique-diff`, `ui-test`, `ui-record`, `feature-plan`, `implementation-map`, `retailer-config`, `connect`, `e2e-test`, `account-snapshot` |
|
|
59
59
|
| [mermaid-syntax-rules.md](mermaid-syntax-rules.md) | Diagram syntax rules and guardrails | `workflow-analyzer`, `feature-explain`, `implementation-map`, `connection-analysis`, `entity-flow-diagnose`, `feature-plan` |
|
|
60
60
|
|
|
61
61
|
### Frontend / SDK docs
|
|
@@ -4,11 +4,11 @@ scope: platform
|
|
|
4
4
|
description: "Fluent Commerce module anatomy — types (extension, data, workflow, reference), directory structures, module.json format, Maven POM hierarchy, assets, config variables, build process, deployment, and selective install"
|
|
5
5
|
load: on-demand
|
|
6
6
|
priority: high
|
|
7
|
-
relevant-skills: [fluent-module-scaffold, fluent-module-validate, fluent-build, fluent-module-deploy, fluent-
|
|
7
|
+
relevant-skills: [fluent-module-scaffold, fluent-module-validate, fluent-build, fluent-module-deploy, fluent-module-convert, fluent-custom-code]
|
|
8
8
|
version: 1.0
|
|
9
9
|
last-updated: 2026-03-27
|
|
10
10
|
author: user
|
|
11
|
-
evidence: extracted from fluent-module-scaffold, fluent-data-module-scaffold, fluent-module-validate, fluent-build, fluent-module-deploy, fluent-
|
|
11
|
+
evidence: extracted from fluent-module-scaffold, fluent-data-module-scaffold, fluent-module-validate, fluent-build, fluent-module-deploy, fluent-module-convert SKILL.md files
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# Module Structure
|
|
@@ -22,8 +22,8 @@ A **module** is the unit of deployment in Fluent Commerce. Everything shipped to
|
|
|
22
22
|
| Type | Has Java? | Has Assets? | Built with Maven? | Example |
|
|
23
23
|
|------|-----------|-------------|-------------------|---------|
|
|
24
24
|
| **Extension** | Yes (custom Rubix rules) | Optional (workflows, settings) | Yes | `fc-module-my-extensions` |
|
|
25
|
-
| **Data** | No | Yes (locations, networks, carriers, settings, workflows, catalogues) | No | `
|
|
26
|
-
| **Workflow** | No | Workflow JSON only | No | `fc-workflow-order-
|
|
25
|
+
| **Data** | No | Yes (locations, networks, carriers, settings, workflows, catalogues) | No | `acme-infra-data` |
|
|
26
|
+
| **Workflow** | No | Workflow JSON only | No | `fc-workflow-order-acme-updated` |
|
|
27
27
|
| **Reference** | Yes (OOTB rules, closed-source) | Yes | No (pre-built by Fluent) | `core`, `order`, `fulfilment`, `inventory` |
|
|
28
28
|
|
|
29
29
|
### Known Reference Module Names
|
|
@@ -802,6 +802,6 @@ public class MyRule implements Rule {
|
|
|
802
802
|
| Validate module structure | `/fluent-module-validate` |
|
|
803
803
|
| Build and package | `/fluent-build` |
|
|
804
804
|
| Deploy to environment | `/fluent-module-deploy` |
|
|
805
|
-
|
|
|
805
|
+
| Convert source/plugin to module | `/fluent-module-convert` |
|
|
806
806
|
| Analyze existing custom code | `/fluent-custom-code` |
|
|
807
807
|
| Add a rule to an existing module | `/fluent-rule-scaffold` |
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mystique-routing
|
|
3
|
-
description: "Mystique routing architecture: HashRouter URL mapping, manifest structure, page params, link patterns, backButtons, homePath. Derived from repo and manifest evidence."
|
|
3
|
+
description: "Mystique routing architecture: HashRouter URL mapping, manifest structure, page params, link patterns, backButtons, homePath, context switching (location/retailer URL params and localStorage persistence). Derived from repo and manifest evidence."
|
|
4
4
|
load: on-demand
|
|
5
5
|
relevant-skills:
|
|
6
6
|
- mystique-builder
|
|
7
|
-
- mystique-
|
|
7
|
+
- mystique-assess
|
|
8
8
|
- mystique-preview
|
|
9
|
-
- mystique-analyze
|
|
10
9
|
- mystique-diff
|
|
11
10
|
- ui-test
|
|
12
11
|
- ui-record
|
|
13
12
|
- feature-plan
|
|
14
13
|
- implementation-map
|
|
14
|
+
- retailer-config
|
|
15
|
+
- connect
|
|
16
|
+
- e2e-test
|
|
17
|
+
- account-snapshot
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
# Mystique Routing Architecture
|