@fluentcommerce/ai-skills 0.14.0 → 0.15.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 (77) hide show
  1. package/README.md +3 -0
  2. package/bin/cli.mjs +198 -49
  3. package/content/cli/skills/fluent-bootstrap/SKILL.md +1 -1
  4. package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +1 -1
  5. package/content/cli/skills/fluent-cli-reference/SKILL.md +1 -1
  6. package/content/cli/skills/fluent-cli-retailer/SKILL.md +1 -1
  7. package/content/cli/skills/fluent-connect/SKILL.md +1 -1
  8. package/content/cli/skills/fluent-workflow/SKILL.md +2 -1
  9. package/content/dev/agents/fluent-frontend-dev.md +1 -1
  10. package/content/dev/skills/fluent-account-snapshot/SKILL.md +1 -1
  11. package/content/dev/skills/fluent-archive/SKILL.md +2 -1
  12. package/content/dev/skills/fluent-build/SKILL.md +2 -2
  13. package/content/dev/skills/fluent-connection-analysis/SKILL.md +2 -1
  14. package/content/dev/skills/fluent-custom-code/SKILL.md +2 -1
  15. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +2 -1
  16. package/content/dev/skills/fluent-e2e-test/SKILL.md +1 -1
  17. package/content/dev/skills/fluent-entity-flow-diagnose/SKILL.md +2 -1
  18. package/content/dev/skills/fluent-event-api/SKILL.md +2 -1
  19. package/content/dev/skills/fluent-feature-explain/SKILL.md +2 -1
  20. package/content/dev/skills/fluent-feature-plan/SKILL.md +2 -1
  21. package/content/dev/skills/fluent-feature-status/SKILL.md +1 -1
  22. package/content/dev/skills/fluent-frontend-build/SKILL.md +1 -1
  23. package/content/dev/skills/fluent-frontend-readme/SKILL.md +2 -1
  24. package/content/dev/skills/fluent-frontend-review/SKILL.md +2 -1
  25. package/content/dev/skills/fluent-goal/SKILL.md +1 -1
  26. package/content/dev/skills/fluent-implementation-map/SKILL.md +1 -1
  27. package/content/dev/skills/fluent-inventory-catalog/SKILL.md +2 -2
  28. package/content/dev/skills/fluent-job-batch/SKILL.md +6 -3
  29. package/content/dev/skills/fluent-knowledge-init/SKILL.md +1 -1
  30. package/content/dev/skills/fluent-module-convert/SKILL.md +1 -1
  31. package/content/dev/skills/fluent-module-scaffold/SKILL.md +2 -1
  32. package/content/dev/skills/fluent-module-validate/SKILL.md +2 -1
  33. package/content/dev/skills/fluent-mystique-assess/SKILL.md +22 -6
  34. package/content/dev/skills/fluent-mystique-builder/SKILL.md +32 -1
  35. package/content/dev/skills/fluent-mystique-component/SKILL.md +1 -1
  36. package/content/dev/skills/fluent-mystique-diff/SKILL.md +1 -1
  37. package/content/dev/skills/fluent-mystique-preview/SKILL.md +19 -2
  38. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +12 -1
  39. package/content/dev/skills/fluent-mystique-sdk-reference/SKILL.md +2 -1
  40. package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +3 -3
  41. package/content/dev/skills/fluent-retailer-config/SKILL.md +1 -1
  42. package/content/dev/skills/fluent-rollback/SKILL.md +1 -1
  43. package/content/dev/skills/fluent-rule-lookup/SKILL.md +2 -1
  44. package/content/dev/skills/fluent-rule-scaffold/SKILL.md +7 -6
  45. package/content/dev/skills/fluent-rule-test/SKILL.md +2 -1
  46. package/content/dev/skills/fluent-scope-plan/SKILL.md +1 -1
  47. package/content/dev/skills/fluent-session/SKILL.md +1 -1
  48. package/content/dev/skills/fluent-settings/SKILL.md +2 -2
  49. package/content/dev/skills/fluent-skill-observability/SKILL.md +1 -1
  50. package/content/dev/skills/fluent-sourcing/SKILL.md +38 -13
  51. package/content/dev/skills/fluent-system-monitoring/SKILL.md +1 -1
  52. package/content/dev/skills/fluent-test-data/SKILL.md +1 -1
  53. package/content/dev/skills/fluent-trace/SKILL.md +3 -2
  54. package/content/dev/skills/fluent-transition-api/SKILL.md +2 -1
  55. package/content/dev/skills/fluent-ui-record/SKILL.md +1 -1
  56. package/content/dev/skills/fluent-ui-test/SKILL.md +1 -1
  57. package/content/dev/skills/fluent-use-case-discover/SKILL.md +2 -2
  58. package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +3 -2
  59. package/content/dev/skills/fluent-workspace-tree/SKILL.md +2 -1
  60. package/content/knowledge/platform/domain-model.md +1 -0
  61. package/content/knowledge/platform/workflow-json-structure.md +1 -1
  62. package/content/mcp-extn/skills/fluent-mcp-core/SKILL.md +2 -1
  63. package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +3 -2
  64. package/content/rfl/skills/fluent-rfl-assess/SKILL.md +1 -1
  65. package/docs/02-prompt-guide.md +1 -1
  66. package/docs/03-use-cases.md +15 -13
  67. package/docs/04-onboarding-plan.md +1 -1
  68. package/docs/chrome-devtools-mcp-reference.md +34 -33
  69. package/docs/fluent-ai-skills-reference.md +10 -10
  70. package/metadata.json +1 -1
  71. package/package.json +6 -1
  72. package/scripts/postinstall.mjs +38 -0
  73. package/{content/dev/skills/fluent-trace/scripts/analyze-event-capture.mjs → tools/event-capture-analyzer.mjs} +3 -3
  74. package/tools/{generate-feature-dashboard.mjs → feature-dashboard.mjs} +2 -2
  75. package/tools/manifest-diff.mjs +1 -1
  76. package/{content/dev/skills/fluent-mystique-assess/validator.mjs → tools/manifest-validator.mjs} +2 -2
  77. package/tools/workflow-explainer.mjs +1021 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-sourcing
3
- description: "Comprehensive reference for the Fluent Commerce Responsive Sourcing Framework. Covers sourcing profiles, strategies, conditions, criteria, scoring algorithms, permutation search, settings schema, workflow integration, custom extensions, and operational GraphQL patterns. Triggers on \"sourcing\", \"sourcing profile\", \"sourcing strategy\", \"sourcing condition\", \"sourcing criteria\", \"fulfilment allocation\", \"location scoring\", \"order sourcing\", \"where to fulfil\"."
3
+ description: Comprehensive reference for the Fluent Commerce Responsive Sourcing Framework covering profiles, strategies, conditions, criteria, scoring algorithms, and workflow integration. Use for sourcing configuration or fulfilment allocation questions.
4
4
  user-invocable: true
5
5
  read-only: true
6
6
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
@@ -35,7 +35,9 @@ This is a **reference skill** — it provides domain knowledge and query pattern
35
35
 
36
36
  ## Related Knowledge
37
37
 
38
+ - `knowledge/platform/domain-model.md` — authoritative entity definitions for InventoryPosition, VirtualPosition, VirtualCatalogue, ControlGroup, Location, Network. **Read this first** for inventory entity relationships and GraphQL edges.
38
39
  - `knowledge/platform/create-order-reference.md` — how FulfilmentChoice entities are created inline with orders, item-to-FC linkage, and ORDER::MULTI patterns. Sourcing operates on FulfilmentChoice entities created by the order intake mutation.
40
+ - `knowledge/platform/reference-module-versions.md` — OOTB inventory rules (CreateInventoryPosition, ApplyThresholdControlsToVirtualPosition, etc.) and sourcing rule versions.
39
41
  - `knowledge/platform/financial-fields.md` — use for financial field naming conventions, tax/price/discount patterns on fulfilment and order entities
40
42
 
41
43
  ## When to Use
@@ -107,18 +109,28 @@ The `SourcingContext` is the runtime data object passed to conditions and criter
107
109
  | `order` | Order | The full order entity |
108
110
  | `order.totalPrice` | Float | Order total value |
109
111
  | `order.attributes[]` | List | Order-level custom attributes |
110
- | `fulfilmentChoice` | Object | Selected fulfilment option |
112
+ | `fulfilmentChoice` | Object | Selected fulfilment option (created by the order intake mutation) |
111
113
  | `fulfilmentChoice.type` | String | e.g., `HD`, `CC`, `SFS` |
112
114
  | `fulfilmentChoice.deliveryAddress` | Address | Delivery destination (lat/lng for distance) |
113
115
  | `items[]` | List | Order items to source |
114
116
  | `items[].productRef` | String | Product reference |
115
117
  | `items[].requestedQuantity` | Integer | Quantity needed |
116
- | `locations[]` | List | Candidate locations from network |
118
+ | `locations[]` | List | Candidate locations from the profile's network |
117
119
  | `locations[].ref` | String | Location reference |
118
120
  | `locations[].type` | String | e.g., `WAREHOUSE`, `STORE` |
119
121
  | `locations[].address` | Address | Location coordinates |
120
122
  | `locations[].attributes[]` | List | Location custom attributes |
121
- | `inventoryPositions[]` | List | Stock data per location per product |
123
+ | `inventoryPositions[]` | List | **InventoryPosition** records — raw on-hand stock per location per product |
124
+
125
+ > **IMPORTANT — InventoryPosition vs VirtualPosition:** The SourcingContext uses **InventoryPosition** (raw on-hand stock from the InventoryCatalogue), NOT **VirtualPosition** (available-to-sell after ControlGroup buffers/exclusions are applied). This distinction is critical:
126
+ >
127
+ > | Entity | What it holds | Used by sourcing? |
128
+ > |--------|--------------|-------------------|
129
+ > | **InventoryPosition** | Raw on-hand quantity at a location for a product | **Yes** — loaded into SourcingContext |
130
+ > | **VirtualPosition** | ATS quantity after ControlGroup buffers applied | **No** — used by storefront availability, not sourcing |
131
+ > | **ControlGroup / Control** | Buffer/exclusion rules that adjust ATS | **No** — affects VirtualPosition only, not sourcing decisions |
132
+ >
133
+ > When `inventoryAvailabilityExclusion` and `inventoryAvailability` criteria check stock, they check **InventoryPosition.onHand**, not VirtualPosition.quantity. See `knowledge/platform/domain-model.md` for full entity definitions and GraphQL edges.
122
134
 
123
135
  Conditions use JSON path expressions to navigate this model. For example, `fulfilmentChoice.type` extracts the delivery type, `order.attributes[?(@.name=='priority')].value` extracts a custom attribute.
124
136
 
@@ -134,7 +146,7 @@ A Sourcing Profile is configured as a GraphQL entity and loaded at runtime by th
134
146
  "status": "ACTIVE",
135
147
  "retailerId": 1,
136
148
  "catalogueRef": "DEFAULT:1",
137
- "virtualCatalogueRef": "FC:DEFAULT:1",
149
+ "virtualCatalogueRef": "VC_DEFAULT:1",
138
150
  "networkRef": "HD_NETWORK",
139
151
  "maxSplit": 2,
140
152
  "sourcingStrategies": [
@@ -157,8 +169,8 @@ A Sourcing Profile is configured as a GraphQL entity and loaded at runtime by th
157
169
  | `ref` | Yes | Unique identifier for the profile |
158
170
  | `status` | Yes | `DRAFT`, `ACTIVE`, or `INACTIVE` |
159
171
  | `retailerId` | Yes | Owning retailer ID |
160
- | `catalogueRef` | No | Product catalogue for inventory lookup |
161
- | `virtualCatalogueRef` | No | Virtual catalogue (overrides catalogueRef) |
172
+ | `catalogueRef` | No | InventoryCatalogue ref for InventoryPosition lookup |
173
+ | `virtualCatalogueRef` | No | VirtualCatalogue ref — **overrides `catalogueRef`** when both are set. Uses ref-based linking (not id-based edges). |
162
174
  | `networkRef` | No | Default network for location candidates |
163
175
  | `maxSplit` | No | Maximum number of fulfilment locations (default: 1) |
164
176
  | `sourcingStrategies` | Yes | Ordered list of strategies |
@@ -405,16 +417,16 @@ Criteria are classified by tag:
405
417
  | `fc.sourcing.criterion.locationDistanceExclusion` | Exclusion | Exclude locations beyond a distance threshold | `value` (max distance), `valueUnit` (`KILOMETRES` or `MILES`) |
406
418
  | `fc.sourcing.criterion.locationTypeExclusion` | Exclusion | Exclude locations of specified types | `value` (list of type strings, e.g., `["STORE"]`) |
407
419
  | `fc.sourcing.criterion.locationNetworkExclusion` | Exclusion | Exclude locations not in the specified network | `value` (network ref string) |
408
- | `fc.sourcing.criterion.inventoryAvailabilityExclusion` | Exclusion | Exclude locations with insufficient stock for all order items | *(none)* |
420
+ | `fc.sourcing.criterion.inventoryAvailabilityExclusion` | Exclusion | Exclude locations with insufficient on-hand stock (InventoryPosition) for all order items | *(none)* |
409
421
  | `fc.sourcing.criterion.locationDistance` | Sorter | Score by distance from delivery address (closest = highest score) | *(none)* |
410
422
  | `fc.sourcing.criterion.locationDistanceBanded` | Sorter | Score by distance using configurable bands | `bands` (list of `{from, to, score}`) |
411
423
  | `fc.sourcing.criterion.locationDailyCapacity` | Sorter | Score by remaining daily fulfilment capacity | *(none)* |
412
424
  | `fc.sourcing.criterion.networkPriority` | Sorter | Score by the location's network priority field | *(none)* |
413
- | `fc.sourcing.criterion.inventoryAvailability` | Sorter | Score by stock quantity (more stock = higher score) | *(none)* |
425
+ | `fc.sourcing.criterion.inventoryAvailability` | Sorter | Score by on-hand stock quantity from InventoryPosition (more stock = higher score) | *(none)* |
414
426
  | `fc.sourcing.criterion.inventoryAvailabilityBanded` | Sorter | Score by stock quantity using configurable bands | `bands` (list of `{from, to, score}`) |
415
427
  | `fc.sourcing.criterion.orderValue` | Sorter | Score by order value handling capability | *(none)* |
416
428
 
417
- > **Note on Parameter Names:** In `util-sourcing-2.1.0`, the JSON parsing logic uses generic keys like `"value"` and `"valueUnit"` (via `params.get("value")`). Newer versions may use descriptive names like `maxDistance`, `distanceUnit`, `excludedTypes`. Always check your specific version.
429
+ > **Note on Parameter Names:** In `util-sourcing-2.1.0`, the JSON parsing logic uses generic keys like `"value"` and `"valueUnit"` (via `params.get("value")`). Newer versions may use descriptive names like `maxDistance`, `distanceUnit`, `excludedTypes`. To discover parameter names for your version, use `/fluent-trace` to inspect a sourcing event's rule execution, or decompile the util-sourcing JAR deployed in your environment.
418
430
 
419
431
  ### Scoring and Normalization
420
432
 
@@ -907,7 +919,10 @@ compact: false
907
919
 
908
920
  Review the flow inspection output for condition evaluation results.
909
921
 
910
- **3. Verify inventory data exists for candidate locations:**
922
+ **3. Verify InventoryPosition data exists for candidate locations:**
923
+
924
+ Sourcing reads **InventoryPosition** (raw on-hand), not VirtualPosition (ATS). If locations are excluded for insufficient stock, verify InventoryPosition records exist:
925
+
911
926
  ```
912
927
  Tool: graphql_query
913
928
  Query: {
@@ -915,12 +930,22 @@ Query: {
915
930
  catalogue: { ref: "DEFAULT:1" }
916
931
  productRef: "<PRODUCT_REF>"
917
932
  ) {
918
- edges { node { locationRef quantity status } }
933
+ edges { node { ref locationRef onHand quantity status } }
919
934
  }
920
935
  }
921
936
  ```
922
937
 
923
- **4. Check settings for custom type registration:**
938
+ If InventoryPosition exists but sourcing still excludes the location, the `onHand` value may be below the requested quantity. Do NOT check VirtualPosition for sourcing issues — VirtualPosition reflects ATS after ControlGroup buffers, which sourcing does not use.
939
+
940
+ **4. Verify catalogueRef vs virtualCatalogueRef precedence:**
941
+
942
+ If both are set on the profile, `virtualCatalogueRef` overrides `catalogueRef`. Verify which is active:
943
+ ```
944
+ Tool: graphql_query
945
+ Query: { sourcingProfile(ref: "<PROFILE_REF>") { catalogueRef virtualCatalogueRef } }
946
+ ```
947
+
948
+ **5. Check settings for custom type registration:**
924
949
  ```
925
950
  Tool: graphql_query
926
951
  Query: {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-system-monitoring
3
- description: Monitor Fluent Commerce event processing health using Prometheus queries and aggregated analytics. Detect failure rate anomalies, triage alert patterns, interpret event volume trends, and identify workflow gaps through deep metric analysis. Specialized in **anomaly detection and alert triage** NOT for infrastructure monitoring or generic metrics queries. Triggers on "system monitoring", "event analytics", "failure rate anomaly", "event volume trend", "top failing events", "alert triage", "prometheus queries", "latency analysis", "throughput spike", "no-match rate".
3
+ description: Monitor Fluent Commerce event processing health using Prometheus queries and aggregated analytics for anomaly detection and alert triage. Use for failure rate analysis, event volume trends, or workflow gap identification.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: [--from <ISO-datetime>] [--entity-type ORDER|FULFILMENT] [--top-n 20]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-test-data
3
- description: Discover retailer configuration and generate valid test entity PAYLOADS dynamically via GraphQL. No hardcoded refs — everything is queried from the live environment. Does NOT own event sending — for sending events use /fluent-mcp-tools (event_build + event_send). This skill generates payloads; MCP tools dispatch them. Triggers on "create test order", "test data", "create test entity", "discover products", "discover locations".
3
+ description: Discover retailer configuration and generate valid test entity payloads dynamically via GraphQL with no hardcoded refs. Use for creating test data, discovering products or locations, or generating test entity payloads.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: [entity-type] [--type HD|CC|SFS] [--count N]
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-trace
3
- description: "FIRST-RESPONDER debugging skill if ANY entity is stuck, broken, or not progressing, route HERE first. Traces and debugs Fluent Commerce event processing. Analyzes failed events, correlates them with workflows and rules, and identifies runtime root causes. ROUTING PRIORITY — this skill MUST win over fluent-entity-flow-diagnose when the prompt says \"stuck\", \"trace why\", \"root cause\", \"not progressing\", \"debug\", \"correlate events with rules\", \"identify root cause\", \"show live state\" WITHOUT comparison language like \"expected vs observed\" or \"compare runtime\". YIELD-BACK — if the prompt ALSO contains \"compare runtime vs expected\", \"compare runtime vs workflow\", \"expected vs observed\", or \"what should have happened\", route to fluent-entity-flow-diagnose instead, even if it also says \"stuck\" or \"diagnose\". Those comparison prompts need full lifecycle reconstruction, not just first-responder debugging. HARD NEGATIVE — do NOT route here for conceptual Event API reference questions like event categories, event statuses, how events are routed to rulesets, run-once behavior, or log action vs audit action when there is no specific entity, failure, or debugging context; those belong to fluent-event-api. Key knowledge — domain-model.md (entity relationships and event flows), sync-vs-async-patterns.md (execution flow), workflow-json-structure.md (status transitions). ROUTING PRIORITY — This skill MUST win over fluent-entity-flow-diagnose when the prompt says \"trace why X is stuck\", \"correlate events with rules\", \"identify root cause\", \"show live state\" WITHOUT comparison language like \"expected vs observed\" or \"compare runtime\". Triggers on \"trace event\", \"event trace\", \"trace why\", \"why did event fail\", \"failed orchestration\", \"debug fulfilment\", \"stuck at [status]\", \"not progressing\", \"not moving\", \"event didn't fire\", \"why is this order stuck\", \"why is this fulfilment stuck\", \"why is this consignment stuck\", \"what happened to order\", \"what happened to fulfilment\", \"order not advancing\", \"entity not changing state\", \"root cause\", \"likely root cause\", \"live state\", \"correlate events with rules\".
3
+ description: First-responder debugging skill that traces and debugs Fluent Commerce event processing by analyzing failed events, correlating with workflows/rules, and identifying root causes. Use when any entity is stuck, broken, or not progressing.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: <entity-ref> [--entity-type ORDER|FULFILMENT] [--status FAILED]
7
7
  cursor-tier: manual
8
8
  ---
9
+ <!-- routing-notes: ROUTING PRIORITY — this skill MUST win over fluent-entity-flow-diagnose when the prompt says "stuck", "trace why", "root cause", "not progressing", "debug" WITHOUT comparison language like "expected vs observed" or "compare runtime". YIELD-BACK — if the prompt ALSO contains "compare runtime vs expected", "expected vs observed", or "what should have happened", route to fluent-entity-flow-diagnose instead. HARD NEGATIVE — do NOT route here for conceptual Event API reference questions (event categories, statuses, run-once, log action vs audit action without a specific entity) — those belong to fluent-event-api. -->
9
10
 
10
11
  # Event Trace & Debug
11
12
 
@@ -448,7 +449,7 @@ When the user asks questions like:
448
449
  Use the bundled local analyzer after raw capture:
449
450
 
450
451
  ```text
451
- node scripts/analyze-event-capture.mjs \
452
+ node fluent-ai-skills/tools/event-capture-analyzer.mjs \
452
453
  accounts/<PROFILE>/analysis/event-captures/<EVENT_ID>.event.json \
453
454
  accounts/<PROFILE>/analysis/event-captures/<EVENT_ID>.window.json \
454
455
  --root-ref <ORDER_REF> \
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-transition-api
3
- description: Query the Fluent Commerce Transition API to discover available user actions for entities at any workflow status. This is read-only action discovery ONLY — it does NOT send events. YIELD-BACK — if the prompt says "send" + event name (e.g., "send a ConfirmShipment event"), "dispatch event", "verify it landed", or "send and verify", route to fluent-mcp-tools instead. This skill discovers what actions EXIST; fluent-mcp-tools SENDS the events. ROUTING PRIORITY for prompts like "what user actions are available at BOOKED?", "which actions/buttons should appear for ORDER::HD?", or "what attributes does each action need?" — those belong here, not in fluent-workflow-analyzer. Key knowledge — user-action-contract.md (workflow user action shape), workflow-design.md (status and action placement), permissions-and-contexts.md (module and visibility context). Enables dynamic test sequences and UI action validation. Triggers on "transition api", "user actions", "available actions", "workflow transitions", "what actions", "what attributes each action needs".
3
+ description: Query the Fluent Commerce Transition API to discover available user actions for entities at any workflow status. Read-only action discovery. Use for listing available actions, mapping required attributes, or UI action validation.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: <entity-type> <subtype> <status> [--retailer-id <id>]
7
7
  cursor-tier: auto
8
8
  ---
9
+ <!-- routing-notes: YIELD-BACK — if the prompt says "send" + event name, "dispatch event", "verify it landed", or "send and verify", route to fluent-mcp-tools instead. This skill discovers what actions EXIST; fluent-mcp-tools SENDS the events. ROUTING PRIORITY for prompts like "what user actions are available at BOOKED?" or "what attributes does each action need?" — those belong here, not in fluent-workflow-analyzer. -->
9
10
 
10
11
  # Transition API — User Action Discovery
11
12
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-ui-record
3
- description: "Record annotated UI walkthroughs of Fluent Commerce apps. Captures before/after screenshots with DOM annotations, Chrome DevTools screencast recording, manifest diffs, and generates self-contained HTML evidence reports. Triggers on \"record UI\", \"record walkthrough\", \"capture UI changes\", \"document UI\", \"UI recording\", \"before after\", \"evidence report\", \"annotated recording\"."
3
+ description: Record annotated UI walkthroughs of Fluent Commerce apps with before/after screenshots, DOM annotations, screencast recording, and HTML evidence reports. Use for capturing UI changes or documenting walkthroughs.
4
4
  user-invocable: true
5
5
  read-only: false
6
6
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-ui-test
3
- description: Browser-based UI testing for Fluent Commerce OMS App and Store App using Chrome DevTools MCP. Verifies manifest deployments render correctly, pages load, components display data, and user actions are functional. Triggers on "test UI", "verify manifest in browser", "browser test", "OMS test", "devtools test", "does the page work", "check OMS", "verify page renders".
3
+ description: Browser-based UI testing for Fluent Commerce OMS and Store apps using Chrome DevTools MCP to verify page rendering, component display, and user action functionality. Use for UI testing or manifest deployment verification.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: [--app oms|store|servicepoint] [--route /orders] [--entity-id <id>] [--screenshot] [--login]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-use-case-discover
3
- description: Interactive requirements gathering wizard that produces a structured Business Specification. Walks through use cases, actors, business rules, integrations, and acceptance criteria. Supports interactive mode, document analysis mode, and structured PRD template intake. Triggers on "discover use case", "gather requirements", "business spec", "use case discovery", "what are we building", "requirements gathering", "spec wizard", "analyze requirements", "prd intake", "fill prd".
3
+ description: Interactive requirements gathering wizard that produces a structured Business Specification covering use cases, actors, business rules, integrations, and acceptance criteria. Use for requirements gathering, use case discovery, or PRD intake.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: [--analyze <path-or-paste>] [--prd <path>] [--profile PROFILE] [--retailer RETAILER_REF]
@@ -322,7 +322,7 @@ UC-04: [Edge Case] <title> — <one-line summary>
322
322
 
323
323
  **Rules:**
324
324
  - One diagram per primary use case (UC-01) at minimum. Add diagrams for alternative/exception paths only if the flow is materially different (not just a different error message).
325
- - Keep diagrams HIGH-LEVEL — 5-10 interactions max. Implementation detail (GraphQL fields, attribute names, CSS) belongs in the plan, not the spec.
325
+ - Keep diagrams HIGH-LEVEL — 5-10 interactions max. Prefer business language (e.g., "Trigger StartPick event") over API detail (e.g., `POST /event/sync`). Detailed GraphQL fields, attribute names, and CSS belong in the plan, not the spec.
326
326
  - Use Mermaid syntax — validated by `knowledge/mermaid-syntax-rules.md`.
327
327
  - Diagrams go in spec §5a (after use cases, before entity model).
328
328
 
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-workflow-analyzer
3
- description: Validate and analyze Fluent Commerce workflow JSON definitions. Structural validation (schema, status graph, triggers, rules, user actions, cross-entity checks), status graph mapping, event chain tracing, orphan detection, dependency reports, and Mermaid diagrams. ROUTING PRIORITY if the user wants to validate, check, review, lint, or sanity-check a workflow before editing or deployment, route HERE even when the prompt also says "download workflow" or "download it first". Download-plus-validate requests are still validation-led, so prefer this skill over fluent-workflow. Triggers on "analyze workflow", "validate workflow", "check workflow", "lint workflow", "workflow analysis", "workflow graph", "workflow dependencies", "workflow review", "workflow issues", "workflow health", "download and validate workflow", "download workflow and check it".
3
+ description: Validate and analyze Fluent Commerce workflow JSON definitions with structural checks, status graph mapping, event chain tracing, and orphan detection. Use for workflow validation, review, lint, or dependency analysis.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: <workflow-file-or-name> [--validate-only] [--strict] [--fix-suggestions] [--deep] [--mermaid] [--explain-rules] [--profile <name>] [--output <path>]
7
7
  cursor-tier: manual
8
8
  ---
9
+ <!-- routing-notes: ROUTING PRIORITY — if the user wants to validate, check, review, lint, or sanity-check a workflow, route HERE even when the prompt also says "download workflow". Download-plus-validate requests are validation-led, so prefer this skill over fluent-workflow. -->
9
10
 
10
11
  # Workflow Analyzer
11
12
 
@@ -153,7 +154,7 @@ WorkflowDefinition
153
154
  |----|-------|----------|--------|
154
155
  | G01 | All statuses have `name` | CRITICAL | Every entry in `statuses[]` must have a non-empty `name` string. |
155
156
  | G02 | All statuses have `category` | HIGH | Every status should have a `category` from the standard set. Missing category = wrong UI badge rendering. |
156
- | G03 | Category values are valid | MEDIUM | Category must be one of: `BOOKING`, `FULFILMENT`, `DELIVERY`, `DONE`, `EXCEPTION`. |
157
+ | G03 | Category values are valid | MEDIUM | Category must be one of: `BOOKING`, `FULFILMENT`, `DELIVERY`, `DONE`, `EXCEPTION`, `GENERATION` (FO/FP workflows only). |
157
158
  | G04 | No duplicate status names | HIGH | Two statuses with the same `name` (within the same entity type) cause undefined behavior. |
158
159
  | G05 | Orphaned statuses | HIGH | A status defined in `statuses[]` but never referenced in any ruleset trigger or as a SetState destination is unreachable dead config. |
159
160
  | G06 | Unreachable statuses | HIGH | If a status cannot be reached from the initial status (CREATED or first defined), it is unreachable. |
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-workspace-tree
3
- description: Read-only directory tree visualization of the workspace file system renders an annotated tree showing folders, files, artifact counts per directory, and optional status overlays. This is a filesystem structure view (like the Unix `tree` command), not a live account inventory. ROUTING PRIORITY — if the prompt says "directory tree", "workspace tree", "folder layout", "artifact counts per folder", "show directory structure", "show me the tree", or "workspace layout", route HERE — do NOT route to fluent-feature-status. fluent-feature-status scans status.json files and produces a feature lifecycle table; this skill renders the filesystem tree like Unix `tree`. It does NOT handle feature lifecycle status tables (use fluent-feature-status), HTML dashboards (use fluent-feature-status), or account environment snapshots (use fluent-account-snapshot).
3
+ description: Read-only directory tree visualization of the workspace file system with annotated folders, artifact counts, and optional status overlays. Renders a filesystem structure view like the Unix tree command.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Glob, Grep
6
6
  argument-hint: [--profile PROFILE] [--section source|workflows|features|reports|analysis|tasks|sessions] [--depth N]
7
7
  cursor-tier: auto
8
8
  ---
9
+ <!-- routing-notes: ROUTING PRIORITY — if the prompt says "directory tree", "workspace tree", "folder layout", or "workspace layout", route HERE — do NOT route to fluent-feature-status. fluent-feature-status scans status.json files; this skill renders the filesystem tree. Does NOT handle feature lifecycle tables (→ fluent-feature-status) or account snapshots (→ fluent-account-snapshot). -->
9
10
 
10
11
  # Workspace Tree Visualization
11
12
 
@@ -555,6 +555,7 @@ event into the workflow engine — enabling automatic rule execution on entity c
555
555
  | **Virtual Catalogue** | Virtual Position | `VIRTUAL_CATALOGUE`, `VIRTUAL_POSITION` | Both: No |
556
556
  | **Control Group** | Control | `CONTROL_GROUP`, `CONTROL` | Both: No |
557
557
  | **Return Order** | Return Fulfilment | `RETURN_ORDER`, `RETURN_FULFILMENT` | Both: Yes |
558
+ | **Job** `[SCHEMA]` | Batch | `JOB`, `BATCH` | JOB: Yes, BATCH: Yes `[SCHEMA: observed in API, not in official docs]` |
558
559
  | **Billing Account** | Credit Memo, Invoice, Payment, Payment Transaction | `BILLING_ACCOUNT`, `CREDIT_MEMO`, `INVOICE`, `PAYMENT`, `PAYMENT_TRANSACTION` | All: Yes |
559
560
 
560
561
  **Key implications:**
@@ -107,7 +107,7 @@ Field order inside each ruleset:
107
107
  **Key rules:**
108
108
  - `rules[]` comes BEFORE `triggers[]`
109
109
  - `userActions: []` ALWAYS present (even if empty)
110
- - NO `subtype` field on rulesets — entity-level `entitySubtype` handles routing
110
+ - NO `subtype` field on event-triggered rulesets — entity-level `entitySubtype` handles routing. Exception: rulesets with `userActions[]` MUST have `subtype` matching `entitySubtype` for UI button visibility (see `user-action-contract.md`).
111
111
  - `eventType` is typically `"NORMAL"`
112
112
 
113
113
  ## Ruleset Matching (4 criteria)
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-mcp-core
3
- description: Official Fluent Commerce CLI MCP server setup and operations. Configure the built-in MCP server, run health checks, validate GraphQL connectivity, build/validate queries, and manage workflow list/download operations. ROUTING PRIORITY over fluent-bootstrap and fluent-connect when the prompt explicitly mentions "built-in MCP server", "official MCP server", "GraphQL connectivity", "set up the built-in MCP", or "set up the MCP server and test". If the user says "set up" combined with "MCP server" or "GraphQL connectivity", route HERE only when official-server setup/testing is the primary task, not when MCP wiring is just one step inside existing-account onboarding. Do not route send-event, verify-it-landed, Transition API discovery, extension-only GraphQL (`graphql_planOperation`, `graphql_query`, `graphql_queryAll`), runtime connection switching, or extension workflow-get prompts here — those belong to fluent-mcp-tools. Do not prefer this skill when the prompt is about CI/CD, automation pipelines, or non-interactive `fluent mcp server --stdio` rollout patterns — route those to fluent-cli-mcp-cicd instead. HARD NEGATIVE — Do NOT route here for: existing-account connection/onboarding prompts that also ask to discover CLI profiles, choose retailer context, or get the workspace ready to work (→ fluent-connect), 'connection_list' / 'connection_switch' / 'connection management' / 'workflow_get' / 'workflow_transitions' / 'event_send' / 'graphql_query' (→ fluent-mcp-tools for MCP extension server tools). Triggers on "mcp core setup", "built-in mcp server", "official mcp server", "graphql connectivity", "graphql validate", "workflow download", "set up the built-in MCP", "set up mcp server", "test graphql connectivity".
3
+ description: Official Fluent Commerce CLI MCP server setup and operations. Configure the built-in MCP server, run health checks, validate GraphQL connectivity, and manage workflow downloads. Use for built-in MCP server setup or GraphQL connectivity testing.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: <operation> [--profile name] [--retailer ref]
7
7
  cursor-tier: auto
8
8
  ---
9
+ <!-- routing-notes: ROUTING PRIORITY over fluent-bootstrap and fluent-connect when prompt explicitly mentions "built-in MCP server", "official MCP server", "GraphQL connectivity". Route HERE only when official-server setup/testing is the primary task. Do not route send-event, Transition API, extension-only GraphQL, runtime connection switching, or extension workflow-get here (→ fluent-mcp-tools). Do not route CI/CD pipelines or non-interactive stdio setup here (→ fluent-cli-mcp-cicd). HARD NEGATIVE — Do NOT route for existing-account onboarding (→ fluent-connect) or MCP extension tools like connection_list, event_send, graphql_query (→ fluent-mcp-tools). -->
9
10
 
10
11
  # Fluent MCP Core
11
12
 
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: fluent-mcp-tools
3
- description: Fluent Commerce MCP extension server tools reference. Canonical owner of event sending (event_build + event_send), event verification, extension-first GraphQL execution, runtime connection management, extension workflow operations, and all 59 MCP extension tools. Use for "send event", "dispatch event", "verify it landed", event flow forensics, GraphQL operations, batch ingestion, connection switching, or webhook validation. ROUTING PRIORITY over fluent-transition-api for ANY prompt that says "send" + event name (e.g., "send a ConfirmShipment event"), "dispatch event", "verify it landed", or "send and verify". Transition API is read-only action discovery — if the user wants the event SENT or VERIFIED, route HERE. ROUTING PRIORITY over fluent-bootstrap for event/MCP operations. ROUTING PRIORITY for MCP extension server tools — route here instead of fluent-mcp-core or fluent-workflow when prompt mentions MCP extension tools like workflow_get, workflow_transitions, connection_list, event_send, graphql_query, batch_send. HARD NEGATIVE — Do NOT route here for: "which CLI command family" / "mixed CLI question" / "CLI overview" / "work across profiles, retailers, workflows, settings" (→ fluent-cli-reference handles broad CLI triage questions). HARD NEGATIVE — do NOT route conceptual Event API questions here: if the user is asking what event statuses, categories, `sourceEvents`, orchestration routing, run-once semantics, or audit-vs-log actions mean, route to fluent-event-api even if the prompt mentions `event_list` or other MCP tool names. Do not route Prometheus monitoring (use fluent-system-monitoring), pure built-in server setup, official GraphQL connectivity-only, or `workflow_download` prompts (those belong to fluent-mcp-core). Key knowledge — graphql-preflight.md, graphql-query-complexity.md, sync-vs-async-patterns.md. Triggers on "mcp tools", "send fluent event", "send event", "send a ConfirmShipment", "send a", "dispatch event", "verify it landed", "send and verify", "event flow inspect", "trace event payloads", "fluent graphql", "graphql query", "batch ingestion".
3
+ description: Fluent Commerce MCP extension server tools reference covering all 59 tools including event sending, GraphQL execution, batch ingestion, and connection management. Use for sending events, dispatching, or verifying MCP operations.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: <operation> [entity-type] [entity-ref]
7
7
  cursor-tier: manual
8
8
  ---
9
+ <!-- routing-notes: ROUTING PRIORITY over fluent-transition-api for ANY prompt that says "send" + event name, "dispatch event", "verify it landed", or "send and verify". ROUTING PRIORITY over fluent-bootstrap for event/MCP operations. ROUTING PRIORITY for MCP extension server tools — route here instead of fluent-mcp-core or fluent-workflow when prompt mentions extension tools like workflow_get, connection_list, event_send, graphql_query, batch_send. HARD NEGATIVE — Do NOT route here for broad CLI triage questions (→ fluent-cli-reference) or conceptual Event API questions about event statuses, categories, sourceEvents, orchestration routing, run-once semantics (→ fluent-event-api). Do not route Prometheus monitoring (→ fluent-system-monitoring), built-in server setup, or workflow_download (→ fluent-mcp-core). -->
9
10
 
10
11
  # Fluent MCP Tools
11
12
 
@@ -579,7 +580,7 @@ To discover which attributes an entity supports and how they appear in mutations
579
580
 
580
581
  ### Schema Tool Annotations
581
582
 
582
- All 57 MCP extension tools now advertise MCP `ToolAnnotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`). MCP clients that respect annotations can automatically distinguish read-only operations (queries, introspection, cache status) from write operations (event_send, entity_create, workflow_upload).
583
+ All 59 MCP extension tools now advertise MCP `ToolAnnotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`). MCP clients that respect annotations can automatically distinguish read-only operations (queries, introspection, cache status) from write operations (event_send, entity_create, workflow_upload).
583
584
 
584
585
  ## Batch Ingestion
585
586
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fluent-rfl-assess
3
- description: Run a Ready For Launch (RFL) assessment on a Fluent Commerce implementation. Analyzes workflows, rules, settings, and integrations for production readiness. Triggers on "rfl assessment", "ready for launch check", "go-live readiness", "production audit".
3
+ description: Run a Ready For Launch (RFL) assessment on a Fluent Commerce implementation analyzing workflows, rules, settings, and integrations. Trigger on go-live readiness or production audit needs.
4
4
  user-invocable: true
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep
6
6
  argument-hint: [--profile name] [--retailer ref]
@@ -78,7 +78,7 @@ These create or change things — the AI presents a plan and waits for your appr
78
78
 
79
79
  | Skill | What it does | Try this |
80
80
  |-------|-------------|----------|
81
- | `fluent-pre-deploy-check` | Runs 35+ quality gates across 9 phases — produces GO/NO-GO report | `"Run pre-deploy checks"` |
81
+ | `fluent-pre-deploy-check` | Runs 37 quality gates across 9 phases — produces GO/NO-GO report | `"Run pre-deploy checks"` |
82
82
  | `fluent-workflow-deploy` | Uploads workflow JSON to target environment | `"Deploy ORDER::RETURN to staging"` |
83
83
  | `fluent-module-deploy` | Deploys compiled module to target environment | `"Deploy the returns module to staging"` |
84
84
  | `fluent-e2e-test` | Runs end-to-end test with event firing and assertions | `"Run E2E test of the return flow"` |
@@ -132,7 +132,7 @@ This is the flagship use case. The AI follows the mandatory chain: **requirement
132
132
  ```
133
133
  Help me define the use cases for a Return Order feature
134
134
  ```
135
- The `/fluent-use-case-discover` wizard runs through 10 phases:
135
+ The `/fluent-use-case-discover` wizard runs through 12 phases:
136
136
  - Entity types involved (ORDER, RETURN_ORDER, FULFILMENT)
137
137
  - Business rules (return window, item eligibility, refund policies)
138
138
  - Status lifecycles per entity
@@ -558,20 +558,22 @@ After approval:
558
558
  Help me define the use cases for curbside pickup
559
559
  ```
560
560
 
561
- `/fluent-use-case-discover` runs an interactive wizard through 10 phases:
561
+ `/fluent-use-case-discover` runs an interactive wizard through 12 phases:
562
562
 
563
563
  | Phase | What happens | Output |
564
564
  |---|---|---|
565
- | 1. Scope | Define the feature boundary what's in, what's out | Scope statement |
566
- | 2. Actors | Identify who interacts (customer, store staff, OMS, WMS) | Actor registry |
567
- | 3. Use cases | Walk through each user journey step by step | Structured use case list |
568
- | 4. Environment discovery | Query live environment for existing workflows, rules, entity types (requires connected profile) | Available infrastructure |
569
- | 5. Entity model | Define entities, subtypes, and relationships | Entity relationship diagram |
570
- | 6. Status lifecycles | Map statuses per entity with allowed transitions | State machine diagrams |
571
- | 7. Business rules | Capture validation rules, constraints, edge cases | Rules inventory |
572
- | 8. Integration points | Webhooks, external systems, scheduled jobs | Integration map |
573
- | 9. Settings | Required configuration keys and values | Settings inventory |
574
- | 10. Gap analysis | Compare requirements against existing environment | Completeness score |
565
+ | 0. Mode detection | Detect input modevague idea vs structured requirements | Mode selection |
566
+ | 1. Feature identity | Define the feature boundary what's in, what's out | Scope statement |
567
+ | 2. Actors & triggers | Identify who interacts (customer, store staff, OMS, WMS) | Actor registry |
568
+ | 3. User journeys | Walk through each user journey step by step | Structured use case list |
569
+ | 4. Entities & data | Define entities, subtypes, and relationships | Entity relationship diagram |
570
+ | 5. Business rules | Capture validation rules, constraints, edge cases | Rules inventory |
571
+ | 6. Integrations | Webhooks, external systems, scheduled jobs | Integration map |
572
+ | 7. UI & actions | User interface requirements and user actions | UI requirements |
573
+ | 8. Constraints & risks | Non-functional requirements, risks, edge cases | Risk register |
574
+ | 9. Acceptance criteria | Testable acceptance criteria per use case | Criteria list |
575
+ | 10. Review & gap analysis | Compare requirements against existing environment | Completeness score |
576
+ | 10b. Self-critique | Automated critique loop for spec quality | Refined spec |
575
577
 
576
578
  **Output:** A Business Spec saved to `accounts/<PROFILE>/features/curbside-pickup/spec.md` with a completeness score (0-100%). Specs scoring >= 75% can proceed directly to `/fluent-feature-plan`.
577
579
 
@@ -640,7 +642,7 @@ Build it
640
642
  ```
641
643
  Run pre-deploy checks
642
644
  ```
643
- 35+ quality gates across 9 phases. If all pass → READY. If any critical gate fails → BLOCKED with specific fix instructions.
645
+ 37 quality gates across 9 phases. If all pass → READY. If any critical gate fails → BLOCKED with specific fix instructions.
644
646
 
645
647
  **Step 5: Deploy**
646
648
  ```
@@ -192,7 +192,7 @@ Now you build the feature planned in Week 1. The AI does the heavy lifting — y
192
192
  ```
193
193
  Run pre-deploy checks for [module name]
194
194
  ```
195
- 35+ quality gates across 9 phases. Review the GO/NO-GO report. Fix any blocking issues before continuing.
195
+ 37 quality gates across 9 phases. Review the GO/NO-GO report. Fix any blocking issues before continuing.
196
196
 
197
197
  Then:
198
198
  ```
@@ -82,16 +82,16 @@ Adds `chrome-manual` server. Requires Chrome extension from https://github.com/h
82
82
 
83
83
  ```typescript
84
84
  navigate_page({ url: "https://<account>.test.apps.engineering.fluentcommerce.com/oms" })
85
- take_snapshot() // Find login form refs
85
+ take_snapshot() // Find login form uids
86
86
 
87
87
  fill_form({
88
- fields: [
89
- { ref: "username-input-ref", value: process.env.FLUENT_USERNAME },
90
- { ref: "password-input-ref", value: process.env.FLUENT_PASSWORD }
88
+ elements: [
89
+ { uid: "username-input-uid", value: "YOUR_USERNAME" },
90
+ { uid: "password-input-uid", value: "YOUR_PASSWORD" }
91
91
  ]
92
92
  })
93
- click({ ref: "login-button-ref" })
94
- wait_for({ condition: "navigation complete" })
93
+ click({ uid: "login-button-uid" })
94
+ wait_for({ text: ["Dashboard", "Orders"] })
95
95
  take_snapshot() // Verify dashboard loaded
96
96
  ```
97
97
 
@@ -102,7 +102,7 @@ take_snapshot() // Verify dashboard loaded
102
102
  navigate_page({ url: "https://<account>.test.apps.engineering.fluentcommerce.com/oms#/orders" })
103
103
 
104
104
  // OR click navigation menu
105
- click({ ref: "orders-menu-item-ref" })
105
+ click({ uid: "orders-menu-item-uid" })
106
106
  take_snapshot() // Verify orders list
107
107
  ```
108
108
 
@@ -110,9 +110,9 @@ take_snapshot() // Verify orders list
110
110
 
111
111
  ```typescript
112
112
  take_snapshot()
113
- type_text({ ref: "search-input-ref", text: "TEST-ORDER-001" })
114
- press_key({ ref: "search-input-ref", key: "Enter" })
115
- wait_for({ timeout: 5000 })
113
+ click({ uid: "search-input-uid" }) // Focus the input first
114
+ type_text({ text: "TEST-ORDER-001", submitKey: "Enter" })
115
+ wait_for({ text: ["TEST-ORDER-001"], timeout: 5000 })
116
116
  list_network_requests() // Verify GraphQL query fired
117
117
  ```
118
118
 
@@ -120,20 +120,22 @@ list_network_requests() // Verify GraphQL query fired
120
120
 
121
121
  ```typescript
122
122
  fill_form({
123
- fields: [
124
- { ref: "customer-autocomplete-ref", value: "John Doe" },
125
- { ref: "order-type-select-ref", value: "HD" },
126
- { ref: "order-ref-input-ref", value: "TEST-ORDER-123" }
123
+ elements: [
124
+ { uid: "customer-autocomplete-uid", value: "John Doe" },
125
+ { uid: "order-type-select-uid", value: "HD" },
126
+ { uid: "order-ref-input-uid", value: "TEST-ORDER-123" }
127
127
  ]
128
128
  })
129
- select_option({ ref: "retailer-select-ref", value: "YOUR_RETAILER" })
130
- click({ ref: "submit-button-ref" })
129
+ // For dropdowns, use fill_form or click to open then click the option
130
+ click({ uid: "retailer-select-uid" })
131
+ click({ uid: "retailer-option-uid" })
132
+ click({ uid: "submit-button-uid" })
131
133
  ```
132
134
 
133
135
  ### 5. Verify GraphQL API Calls
134
136
 
135
137
  ```typescript
136
- click({ ref: "refresh-button-ref" })
138
+ click({ uid: "refresh-button-uid" })
137
139
  list_network_requests()
138
140
  // Look for: url containing "graphql", method "POST", status 200
139
141
  ```
@@ -161,21 +163,21 @@ evaluate_script({
161
163
 
162
164
  ```typescript
163
165
  list_console_messages()
164
- click({ ref: "problematic-button-ref" })
166
+ click({ uid: "problematic-button-uid" })
165
167
  list_console_messages() // Returns array of { level: "error", text: "..." }
166
168
  ```
167
169
 
168
170
  ### 7. Screenshots for Visual Regression
169
171
 
170
172
  ```typescript
171
- take_screenshot({ fullPage: true }) // Full page
172
- take_screenshot({ ref: "order-card-ref" }) // Element-specific
173
+ take_screenshot({ fullPage: true }) // Full page
174
+ take_screenshot({ uid: "order-card-uid" }) // Element-specific
173
175
  ```
174
176
 
175
177
  ### 8. Mobile Responsive Testing
176
178
 
177
179
  ```typescript
178
- browser_resize({ width: 390, height: 844 })
180
+ resize_page({ width: 390, height: 844 })
179
181
  take_snapshot() // Verify mobile layout
180
182
  ```
181
183
 
@@ -296,7 +298,7 @@ window.__fcTimeline = {
296
298
 
297
299
  | Symptom | Cause | Fix |
298
300
  |---------|-------|-----|
299
- | "Element not found" | Element not in DOM yet (still loading) | `wait_for({ timeout: 5000 })` then `take_snapshot()` |
301
+ | "Element not found" | Element not in DOM yet (still loading) | `wait_for({ text: ["expected text"], timeout: 5000 })` then `take_snapshot()` |
300
302
  | Hash routing not working | Browser treated `#` as fragment | Use full URL: `https://...com/oms#/orders` (not just `#/orders`) |
301
303
  | GraphQL mutation payload missing | POST bodies not always captured | Use `evaluate_script` with fetch interceptor (see above) |
302
304
  | Flaky tests after navigation | No auto-wait after navigation | Always add `wait_for` after `navigate_page` |
@@ -373,23 +375,22 @@ jobs:
373
375
  | Tool | Purpose | Key Parameters |
374
376
  |------|---------|----------------|
375
377
  | `navigate_page` | Go to URL | `url` |
376
- | `click` | Click element | `ref`, `button`, `modifiers` |
377
- | `type_text` | Type text | `ref`, `text` |
378
- | `press_key` | Press keyboard key | `ref`, `key` |
379
- | `fill_form` | Fill multiple fields | `fields: [{ref, value}]` |
380
- | `drag` | Drag and drop | `ref`, `targetRef` |
381
- | `hover` | Hover over element | `ref` |
382
- | `select_option` | Select dropdown value | `ref`, `value` |
383
- | `file_upload` | Upload file | `ref`, `filePath` |
384
- | `take_snapshot` | Get DOM snapshot | (returns structured JSON) |
385
- | `take_screenshot` | Capture screenshot | `fullPage`, `ref` |
378
+ | `click` | Click element | `uid`, `dblClick` |
379
+ | `type_text` | Type into focused input | `text`, `submitKey` |
380
+ | `press_key` | Press keyboard key | `key` |
381
+ | `fill_form` | Fill multiple fields | `elements: [{uid, value}]` |
382
+ | `drag` | Drag and drop | `from_uid`, `to_uid` |
383
+ | `hover` | Hover over element | `uid` |
384
+ | `upload_file` | Upload file | `uid`, `filePath` |
385
+ | `take_snapshot` | Get DOM snapshot | (returns structured JSON with uid per element) |
386
+ | `take_screenshot` | Capture screenshot | `fullPage`, `uid`, `filePath`, `format` |
386
387
  | `list_console_messages` | Get console logs | (returns array) |
387
388
  | `list_network_requests` | Get network activity | (returns array) |
388
389
  | `evaluate_script` | Run JavaScript | `code` |
389
390
  | `handle_dialog` | Handle alert/confirm | `action`, `text` |
390
391
  | `close_page` | Close browser tab | |
391
392
  | `resize_page` | Change viewport | `width`, `height` |
392
- | `wait_for` | Wait for condition | `timeout`, `condition` |
393
+ | `wait_for` | Wait for text to appear | `text` (array of strings), `timeout` |
393
394
 
394
395
  ---
395
396