@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.
Files changed (42) hide show
  1. package/README.md +14 -12
  2. package/bin/cli.mjs +29 -2
  3. package/content/cli/skills/fluent-connect/SKILL.md +57 -2
  4. package/content/cli/skills/fluent-profile/SKILL.md +35 -5
  5. package/content/dev/agents/fluent-backend-dev.md +2 -2
  6. package/content/dev/agents/fluent-dev.md +1 -1
  7. package/content/dev/skills/fluent-custom-code/SKILL.md +1 -1
  8. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +5 -5
  9. package/content/dev/skills/fluent-event-api/SKILL.md +1 -1
  10. package/content/dev/skills/{fluent-source-onboard → fluent-module-convert}/SKILL.md +223 -24
  11. package/content/dev/skills/fluent-module-validate/SKILL.md +6 -6
  12. package/content/dev/skills/fluent-mystique-builder/SKILL.md +1 -1
  13. package/content/dev/skills/fluent-mystique-scaffold/SDK_REFERENCE.md +2 -2
  14. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1 -1
  15. package/content/dev/skills/fluent-mystique-scaffold/TEMPLATES.md +1 -1
  16. package/content/dev/skills/fluent-retailer-config/SKILL.md +2 -2
  17. package/content/dev/skills/fluent-scope-plan/SKILL.md +1 -1
  18. package/content/dev/skills/fluent-transition-api/SKILL.md +1 -1
  19. package/content/dev/skills/fluent-ui-test/SKILL.md +8 -7
  20. package/content/dev/skills/fluent-workspace-tree/SKILL.md +2 -2
  21. package/content/knowledge/index.md +3 -3
  22. package/content/knowledge/platform/module-structure.md +5 -5
  23. package/content/knowledge/platform/mystique-routing.md +6 -3
  24. package/content/knowledge/platform/permissions-and-contexts.md +2 -2
  25. package/content/knowledge/platform/rule-test-patterns.md +1 -1
  26. package/docs/01-first-session.md +175 -0
  27. package/docs/02-prompt-guide.md +246 -0
  28. package/docs/03-use-cases.md +1179 -0
  29. package/docs/04-onboarding-plan.md +355 -0
  30. package/docs/05-getting-started.md +262 -0
  31. package/docs/06-dev-workflow.md +1040 -0
  32. package/docs/INDEX.md +40 -0
  33. package/docs/agents-and-skills-guide.md +199 -0
  34. package/docs/capability-map.md +165 -0
  35. package/docs/chrome-devtools-mcp-reference.md +400 -0
  36. package/docs/fluent-ai-skills-reference.md +1351 -0
  37. package/docs/manifest-safety.md +79 -0
  38. package/docs/mcp-servers.md +209 -0
  39. package/docs/workflow-reference.md +167 -0
  40. package/lib/fluent-brand.css +55 -0
  41. package/metadata.json +7 -6
  42. package/package.json +12 -3
@@ -1,22 +1,22 @@
1
1
  ---
2
- name: fluent-source-onboard
3
- description: Onboard existing Java source code into a proper Fluent Commerce extension module. Analyzes non-standard code layouts (loose files, decompiled JARs, different build systems), restructures into Maven multi-module format with module.json, validates the result, and optionally attempts a build. Triggers on "onboard source", "refactor to module", "convert to module format", "restructure module", "import source code", "migrate to fluent module".
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: advisory
8
+ planning-gate: mandatory
9
9
  ---
10
10
 
11
- # Source Onboarder
11
+ # Module Converter
12
12
 
13
- Take existing Java source code — whether loose files, a non-standard project layout, a decompiled JAR, or a project using a different build system — and restructure it into a proper Fluent Commerce extension module that passes `/fluent-module-validate` and builds with `/fluent-build`.
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-source-onboard.jsonl` exists
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 `SOURCE_ONBOARD` task
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, source-onboard runs analysis (Phase 1) BEFORE the planning gate (Phase 2). This is intentional — you must understand what exists before you can plan the restructuring. Phase 1 is read-only analysis. Phase 2 is the mandatory approval gate before any files are modified.
93
+ **Phase ordering note:** Unlike most implementation skills, module-convert has TWO user checkpoints before any files are modified:
92
94
 
93
- ### Phase 1: Source Analysis (read-only)
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
- **Goal:** Understand what exists, classify its state, and identify all rule classes. **No files are modified in this phase.**
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(ContextWrapper context)` or `run(Context context)` method
129
- 4. Contains `context.getProp(...)` or `context.getEvent()` calls
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 source-onboard work** (no feature context):
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 source-onboard-specific sections below.
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>-source-onboard-<slug>.md`. Set `Status: PENDING`.
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-source-onboard accounts/MY_PROFILE/SOURCE/backend/.decompiled/fc-module-ext/
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-source-onboard ./my-rules/ --module-name my-returns
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-source-onboard accounts/MY_PROFILE/SOURCE/backend/legacy-project/ --dry-run
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-source-onboard accounts/MY_PROFILE/SOURCE/backend/old-module/ --skip-build
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-source-onboard accounts/MY_PROFILE/SOURCE/backend/fluentcommerce-fc-module-ext/
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-source-onboard"`
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-source-onboard.jsonl`
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-hm-updated` |
140
- | **CUSTOM_DATA** | Configuration, settings, sample data, access control. No executable rules. | No | JSON/config files in module ZIP | `HM`, `hm-inventory-data`, `hm/global-access` |
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-hm-updated", "version": "1.0.0" }
239
+ { "name": "fluent-commerce/fc-workflow-order-acme-updated", "version": "1.0.0" }
240
240
  ],
241
241
  "customData": [
242
- { "name": "HM", "version": "1.0.13" }
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-hm-return",
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-hm-return",
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
- **Store App context & location switching:** When `context.level` is `"location"`, the app scopes all queries to the active location. Set `"switcher": true` and `"role": ["STORE", "STORE_ASSISTANT"]` to enable the OOTB location dropdown. The switcher only appears when the user has roles at multiple locations. Location is persisted in `localStorage["mystique.auth.context.location"]` (stores ID, not ref). Deep-link to a specific location with `?user.location.ref=<LOC_REF>` after the hash path. See `knowledge/platform/mystique-routing.md` §"Store App — Default Location via URL Parameter" for full resolution order and permission enforcement.
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`, `tcs`, `dxc`, `wipro` |
2118
- | **Client / brand** | Brand abbreviation or project code | `nike`, `coles`, `woolies`, `proj1` |
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-hm. Add component files directly` |
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`, `hm`, `curbside`)
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
 
@@ -880,8 +880,8 @@ Variables:
880
880
  ```json
881
881
  {
882
882
  "input": {
883
- "ref": "CARRIER_DHL",
884
- "name": "DHL Express",
883
+ "ref": "CARRIER_FAST",
884
+ "name": "Fast Freight Carrier",
885
885
  "type": "SHIPPING",
886
886
  "retailer": { "id": "<retailerId>" }
887
887
  }
@@ -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-source-onboard`, `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`
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
 
@@ -397,7 +397,7 @@ event_send({
397
397
  "retailerId": "2",
398
398
  "attributes": {
399
399
  "trackingNumber": "TRACK-001",
400
- "carrierRef": "DHL"
400
+ "carrierRef": "CARRIER_FAST"
401
401
  }
402
402
  })
403
403
  ```
@@ -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
- ### Store App Location Pre-Selection
303
+ ### Context Pre-Selection (Store + OMS)
304
304
 
305
- The Store app operates at `context.level: "location"`. To test a specific store location, append `?user.location.ref=<LOCATION_REF>` **after the hash path**:
305
+ Both apps support pre-selecting a context via URL parameter **appended after the hash path**:
306
306
 
307
- ```
308
- https://<account>.<env>.apps.fluentcommerce.com/store/#/waves?user.location.ref=LOC_SYD_001
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
- Location context resolution order: (1) `user.location.ref` URL param, (2) `localStorage["mystique.auth.context.location"]` (persisted ID from previous selection), (3) first accessible location. The URL param is consumed on load and stripped — localStorage persists across sessions.
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 AGENT-context permission for that location, the system falls back to the next priority. See `knowledge/platform/mystique-routing.md` §"Store App — Default Location via URL Parameter" for full details.
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-hm-curbside.md
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-source-onboard"
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`, `source-onboard`, `custom-code`, `rule-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`, `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`, `source-onboard`, `e2e-test`, `pre-deploy-check` |
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-validate`, `mystique-preview`, `mystique-analyze`, `mystique-diff`, `ui-test`, `ui-record`, `feature-plan`, `implementation-map` |
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-source-onboard, fluent-custom-code]
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-source-onboard SKILL.md files
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 | `hm-infra-data` |
26
- | **Workflow** | No | Workflow JSON only | No | `fc-workflow-order-hm-updated` |
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
- | Onboard existing source code | `/fluent-source-onboard` |
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-validate
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