[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-medusa-building-with-medusa":3,"mdc--u0h67d-key":40,"related-org-medusa-building-with-medusa":3364,"related-repo-medusa-building-with-medusa":3516},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":35,"sourceUrl":38,"mdContent":39},"building-with-medusa","implement Medusa backend features","Load automatically when planning, researching, or implementing ANY Medusa backend features (custom modules, API routes, workflows, data models, module links, business logic). REQUIRED for all Medusa backend work in ALL modes (planning, implementation, exploration). Contains architectural patterns, best practices, and critical rules that MCP servers don't provide.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"medusa","Medusa","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmedusa.jpg","medusajs",[13,17,18,21],{"name":14,"slug":15,"type":16},"Backend","backend","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"E-commerce","e-commerce",{"name":22,"slug":23,"type":16},"Data Modeling","data-modeling",197,"https:\u002F\u002Fgithub.com\u002Fmedusajs\u002Fmedusa-agent-skills","2026-04-06T18:29:54.652389",null,24,[30,31,32,33,34,8],"agentic-commerce","claude","claude-code","commerce","ecommerce",{"repoUrl":25,"stars":24,"forks":28,"topics":36,"description":37},[30,31,32,33,34,8],"Agent skills and commands for Medusa best practices and conventions.","https:\u002F\u002Fgithub.com\u002Fmedusajs\u002Fmedusa-agent-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fmedusa-dev\u002Fskills\u002Fbuilding-with-medusa","---\nname: building-with-medusa\ndescription: Load automatically when planning, researching, or implementing ANY Medusa backend features (custom modules, API routes, workflows, data models, module links, business logic). REQUIRED for all Medusa backend work in ALL modes (planning, implementation, exploration). Contains architectural patterns, best practices, and critical rules that MCP servers don't provide.\n---\n\n# Medusa Backend Development\n\nComprehensive backend development guide for Medusa applications. Contains patterns across 6 categories covering architecture, type safety, business logic placement, and common pitfalls.\n\n## When to Apply\n\n**Load this skill for ANY backend development task, including:**\n- Creating or modifying custom modules and data models\n- Implementing workflows for mutations\n- Building API routes (store or admin)\n- Defining module links between entities\n- Writing business logic or validation\n- Querying data across modules\n- Implementing authentication\u002Fauthorization\n\n**Also load these skills when:**\n- **building-admin-dashboard-customizations:** Building admin UI (widgets, pages, forms)\n- **building-storefronts:** Calling backend API routes from storefronts (SDK integration)\n\n## CRITICAL: Load Reference Files When Needed\n\n**The quick reference below is NOT sufficient for implementation.** You MUST load relevant reference files before writing code for that component.\n\n**Load these references based on what you're implementing:**\n\n- **Creating a module?** → MUST load `reference\u002Fcustom-modules.md` first\n- **Creating workflows?** → MUST load `reference\u002Fworkflows.md` first\n- **Creating API routes?** → MUST load `reference\u002Fapi-routes.md` first\n- **Creating module links?** → MUST load `reference\u002Fmodule-links.md` first\n- **Querying data?** → MUST load `reference\u002Fquerying-data.md` first\n- **Adding authentication?** → MUST load `reference\u002Fauthentication.md` first\n\n**Minimum requirement:** Load at least 1-2 reference files relevant to your specific task before implementing.\n\n## Critical Architecture Pattern\n\n**ALWAYS follow this flow - never bypass layers:**\n\n```\nModule (data models + CRUD operations)\n  ↓ used by\nWorkflow (business logic + mutations with rollback)\n  ↓ executed by\nAPI Route (HTTP interface, validation middleware)\n  ↓ called by\nFrontend (admin dashboard\u002Fstorefront via SDK)\n```\n\n**Key conventions:**\n- Only GET, POST, DELETE methods (never PUT\u002FPATCH)\n- Workflows are required for ALL mutations\n- Business logic belongs in workflow steps, NOT routes\n- Query with `query.graph()` for cross-module data retrieval\n- Query with `query.index()` (Index Module) for filtering across separate modules with links\n- Module links maintain isolation between modules\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Architecture Violations | CRITICAL | `arch-` |\n| 2 | Type Safety | CRITICAL | `type-` |\n| 3 | Business Logic Placement | HIGH | `logic-` |\n| 4 | Import & Code Organization | HIGH | `import-` |\n| 5 | Data Access Patterns | MEDIUM (includes CRITICAL price rule) | `data-` |\n| 6 | File Organization | MEDIUM | `file-` |\n\n## Quick Reference\n\n### 1. Architecture Violations (CRITICAL)\n\n- `arch-workflow-required` - Use workflows for ALL mutations, never call module services from routes\n- `arch-layer-bypass` - Never bypass layers (route → service without workflow)\n- `arch-http-methods` - Use only GET, POST, DELETE (never PUT\u002FPATCH)\n- `arch-module-isolation` - Use module links, not direct cross-module service calls\n- `arch-query-config-fields` - Don't set explicit `fields` when using `req.queryConfig`\n\n### 2. Type Safety (CRITICAL)\n\n- `type-request-schema` - Pass Zod inferred type to `MedusaRequest\u003CT>` when using `req.validatedBody`\n- `type-authenticated-request` - Use `AuthenticatedMedusaRequest` for protected routes (not `MedusaRequest`)\n- `type-export-schema` - Export both Zod schema AND inferred type from middlewares\n- `type-linkable-auto` - Never add `.linkable()` to data models (automatically added)\n- `type-module-name-camelcase` - Module names MUST be camelCase, never use dashes (causes runtime errors)\n\n### 3. Business Logic Placement (HIGH)\n\n- `logic-workflow-validation` - Put business validation in workflow steps, not API routes\n- `logic-ownership-checks` - Validate ownership\u002Fpermissions in workflows, not routes\n- `logic-module-service` - Keep modules simple (CRUD only), put logic in workflows\n\n### 4. Import & Code Organization (HIGH)\n\n- `import-top-level` - Import workflows\u002Fmodules at file top, never use `await import()` in route body\n- `import-static-only` - Use static imports for all dependencies\n- `import-no-dynamic-routes` - Dynamic imports add overhead and break type checking\n\n### 5. Data Access Patterns (MEDIUM)\n\n- `data-price-format` - **CRITICAL**: Prices are stored as-is in Medusa (49.99 stored as 49.99, NOT in cents). Never multiply by 100 when saving or divide by 100 when displaying\n- `data-query-method` - Use `query.graph()` for retrieving data; use `query.index()` (Index Module) for filtering across linked modules\n- `data-query-graph` - Use `query.graph()` for cross-module queries with dot notation (without cross-module filtering)\n- `data-query-index` - Use `query.index()` when filtering by properties of linked data models in separate modules\n- `data-list-and-count` - Use `listAndCount` for single-module paginated queries\n- `data-linked-filtering` - `query.graph()` can't filter by linked module fields - use `query.index()` or query from that entity directly\n- `data-no-js-filter` - Don't use JavaScript `.filter()` on linked data - use database filters (`query.index()` or query the entity)\n- `data-same-module-ok` - Can filter by same-module relations with `query.graph()` (e.g., product.variants)\n- `data-auth-middleware` - Trust `authenticate` middleware, don't manually check `req.auth_context`\n\n### 6. File Organization (MEDIUM)\n\n- `file-workflow-steps` - Recommended: Create steps in `src\u002Fworkflows\u002Fsteps\u002F[name].ts`\n- `file-workflow-composition` - Composition functions in `src\u002Fworkflows\u002F[name].ts`\n- `file-middleware-exports` - Export schemas and types from middleware files\n- `file-links-directory` - Define module links in `src\u002Flinks\u002F[name].ts`\n\n## Workflow Composition Rules\n\n**The workflow function has critical constraints:**\n\n```typescript\n\u002F\u002F ✅ CORRECT\nconst myWorkflow = createWorkflow(\n  \"name\",\n  function (input) { \u002F\u002F Regular function, not async, not arrow\n    const result = myStep(input) \u002F\u002F No await\n    return new WorkflowResponse(result)\n  }\n)\n\n\u002F\u002F ❌ WRONG\nconst myWorkflow = createWorkflow(\n  \"name\",\n  async (input) => { \u002F\u002F ❌ No async, no arrow functions\n    const result = await myStep(input) \u002F\u002F ❌ No await\n    if (input.condition) { \u002F* ... *\u002F } \u002F\u002F ❌ No conditionals\n    return new WorkflowResponse(result)\n  }\n)\n```\n\n**Constraints:**\n- No async\u002Fawait (runs at load time)\n- No arrow functions (use `function`)\n- No conditionals\u002Fternaries (use `when()`)\n- No variable manipulation (use `transform()`)\n- No date creation (use `transform()`)\n- Multiple step calls need `.config({ name: \"unique-name\" })` to avoid conflicts\n\n## Common Mistakes Checklist\n\nBefore implementing, verify you're NOT doing these:\n\n**Architecture:**\n- [ ] Calling module services directly from API routes\n- [ ] Using PUT or PATCH methods\n- [ ] Bypassing workflows for mutations\n- [ ] Setting `fields` explicitly with `req.queryConfig`\n- [ ] Skipping migrations after creating module links\n\n**Type Safety:**\n- [ ] Forgetting `MedusaRequest\u003CSchemaType>` type argument\n- [ ] Using `MedusaRequest` instead of `AuthenticatedMedusaRequest` for protected routes\n- [ ] Not exporting Zod inferred type from middlewares\n- [ ] Adding `.linkable()` to data models\n- [ ] Using dashes in module names (must be camelCase)\n\n**Business Logic:**\n- [ ] Validating business rules in API routes\n- [ ] Checking ownership in routes instead of workflows\n- [ ] Manually checking `req.auth_context?.actor_id` when middleware already applied\n\n**Imports:**\n- [ ] Using `await import()` in route handler bodies\n- [ ] Dynamic imports for workflows or modules\n\n**Data Access:**\n- [ ] **CRITICAL**: Multiplying prices by 100 when saving or dividing by 100 when displaying (prices are stored as-is: $49.99 = 49.99)\n- [ ] Filtering by linked module fields with `query.graph()` (use `query.index()` or query from other side instead)\n- [ ] Using JavaScript `.filter()` on linked data (use `query.index()` or query the linked entity directly)\n- [ ] Not using `query.graph()` for cross-module data retrieval\n- [ ] Using `query.graph()` when you need to filter across separate modules (use `query.index()` instead)\n\n## Validating Implementation\n\n**CRITICAL: Always run the build command after completing implementation to catch type errors and runtime issues.**\n\n### When to Validate\n- After implementing any new feature\n- After making changes to modules, workflows, or API routes\n- Before marking tasks as complete\n- Proactively, without waiting for the user to ask\n\n### How to Run Build\n\nDetect the package manager and run the appropriate command:\n\n```bash\nnpm run build      # or pnpm build \u002F yarn build\n```\n\n### Handling Build Errors\n\nIf the build fails:\n1. Read the error messages carefully\n2. Fix type errors, import issues, and syntax errors\n3. Run the build again to verify the fix\n4. Do NOT mark implementation as complete until build succeeds\n\n**Common build errors:**\n- Missing imports or exports\n- Type mismatches (e.g., missing `MedusaRequest\u003CT>` type argument)\n- Incorrect workflow composition (async functions, conditionals)\n\n## Next Steps - Testing Your Implementation\n\n**After successfully implementing a feature, always provide these next steps to the user:**\n\n### 1. Start the Development Server\n\nIf the server isn't already running, start it:\n\n```bash\nnpm run dev      # or pnpm dev \u002F yarn dev\n```\n\n### 2. Access the Admin Dashboard\n\nOpen your browser and navigate to:\n- **Admin Dashboard:** http:\u002F\u002Flocalhost:9000\u002Fapp\n\nLog in with your admin credentials to test any admin-related features.\n\n### 3. Test API Routes\n\nIf you implemented custom API routes, list them for the user to test:\n\n**Admin Routes (require authentication):**\n- `POST http:\u002F\u002Flocalhost:9000\u002Fadmin\u002F[your-route]` - Description of what it does\n- `GET http:\u002F\u002Flocalhost:9000\u002Fadmin\u002F[your-route]` - Description of what it does\n\n**Store Routes (public or customer-authenticated):**\n- `POST http:\u002F\u002Flocalhost:9000\u002Fstore\u002F[your-route]` - Description of what it does\n- `GET http:\u002F\u002Flocalhost:9000\u002Fstore\u002F[your-route]` - Description of what it does\n\n**Testing with cURL example:**\n```bash\n# Admin route (requires authentication)\ncurl -X POST http:\u002F\u002Flocalhost:9000\u002Fadmin\u002Freviews\u002F123\u002Fapprove \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  --cookie \"connect.sid=YOUR_SESSION_COOKIE\"\n\n# Store route\ncurl -X POST http:\u002F\u002Flocalhost:9000\u002Fstore\u002Freviews \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"product_id\": \"prod_123\", \"rating\": 5, \"comment\": \"Great product!\"}'\n```\n\n### 4. Additional Testing Steps\n\nDepending on what was implemented, mention:\n- **Workflows:** Test mutation operations and verify rollback on errors\n- **Subscribers:** Trigger events and check logs for subscriber execution\n- **Scheduled jobs:** Wait for job execution or check logs for cron output\n\n### Format for Presenting Next Steps\n\nAlways present next steps in a clear, actionable format after implementation:\n\n```markdown\n## Implementation Complete\n\nThe [feature name] has been successfully implemented. Here's how to test it:\n\n### Start the Development Server\n[server start command based on package manager]\n\n### Access the Admin Dashboard\nOpen http:\u002F\u002Flocalhost:9000\u002Fapp in your browser\n\n### Test the API Routes\nI've added the following routes:\n\n**Admin Routes:**\n- POST \u002Fadmin\u002F[route] - [description]\n- GET \u002Fadmin\u002F[route] - [description]\n\n**Store Routes:**\n- POST \u002Fstore\u002F[route] - [description]\n\n### What to Test\n1. [Specific test case 1]\n2. [Specific test case 2]\n3. [Specific test case 3]\n```\n\n## How to Use\n\n**For detailed patterns and examples, load reference files:**\n\n```\nreference\u002Fcustom-modules.md    - Creating modules with data models\nreference\u002Fworkflows.md          - Workflow creation and step patterns\nreference\u002Fapi-routes.md         - API route structure and validation\nreference\u002Fmodule-links.md       - Linking entities across modules\nreference\u002Fquerying-data.md      - Query patterns and filtering rules\nreference\u002Fauthentication.md     - Protecting routes and accessing users\nreference\u002Ferror-handling.md     - MedusaError types and patterns\nreference\u002Fscheduled-jobs.md     - Cron jobs and periodic tasks\nreference\u002Fsubscribers-and-events.md - Event handling\nreference\u002Ftroubleshooting.md    - Common errors and solutions\n```\n\nEach reference file contains:\n- Step-by-step implementation checklists\n- Correct vs incorrect code examples\n- TypeScript patterns and type safety\n- Common pitfalls and solutions\n\n## When to Use This Skill vs MedusaDocs MCP Server\n\n**⚠️ CRITICAL: This skill should be consulted FIRST for planning and implementation.**\n\n**Use this skill for (PRIMARY SOURCE):**\n- **Planning** - Understanding how to structure Medusa backend features\n- **Architecture** - Module → Workflow → API Route patterns\n- **Best practices** - Correct vs incorrect code patterns\n- **Critical rules** - What NOT to do (common mistakes and anti-patterns)\n- **Implementation patterns** - Step-by-step guides with checklists\n\n**Use MedusaDocs MCP server for (SECONDARY SOURCE):**\n- Specific method signatures after you know which method to use\n- Built-in module configuration options\n- Official type definitions\n- Framework-level configuration details\n\n**Why skills come first:**\n- Skills contain opinionated guidance and anti-patterns MCP doesn't have\n- Skills show architectural patterns needed for planning\n- MCP is reference material; skills are prescriptive guidance\n\n## Integration with Frontend Applications\n\n**⚠️ CRITICAL: Frontend applications MUST use the Medusa JS SDK for ALL API requests**\n\nWhen building features that span backend and frontend:\n\n**For Admin Dashboard:**\n1. **Backend (this skill):** Module → Workflow → API Route\n2. **Frontend:** Load `building-admin-dashboard-customizations` skill\n3. **Connection:**\n   - Built-in endpoints: Use existing SDK methods (`sdk.admin.product.list()`)\n   - Custom API routes: Use `sdk.client.fetch(\"\u002Fadmin\u002Fmy-route\")`\n   - **NEVER use regular fetch()** - missing auth headers will cause errors\n\n**For Storefronts:**\n1. **Backend (this skill):** Module → Workflow → API Route\n2. **Frontend:** Load `building-storefronts` skill\n3. **Connection:**\n   - Built-in endpoints: Use existing SDK methods (`sdk.store.product.list()`)\n   - Custom API routes: Use `sdk.client.fetch(\"\u002Fstore\u002Fmy-route\")`\n   - **NEVER use regular fetch()** - missing publishable API key will cause errors\n\n**Why the SDK is required:**\n- Store routes need `x-publishable-api-key` header\n- Admin routes need `Authorization` and session headers\n- SDK handles all required headers automatically\n- Regular fetch() without headers → authentication\u002Fauthorization errors\n\nSee respective frontend skills for complete integration patterns.\n",{"data":41,"body":42},{"name":4,"description":6},{"type":43,"children":44},"root",[45,54,60,67,76,116,124,147,153,163,171,273,283,289,297,309,317,365,371,569,575,582,654,660,755,761,797,803,847,853,1042,1048,1113,1119,1127,1570,1578,1646,1652,1657,1665,1729,1737,1815,1823,1862,1870,1898,1906,2008,2014,2022,2028,2051,2057,2062,2095,2101,2106,2130,2138,2163,2169,2177,2183,2188,2216,2222,2227,2247,2252,2258,2263,2271,2295,2303,2326,2334,2534,2540,2545,2578,2584,2589,2947,2953,2961,2970,2975,2998,3004,3012,3020,3073,3081,3104,3112,3130,3136,3144,3149,3157,3232,3240,3306,3314,3353,3358],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"medusa-backend-development",[51],{"type":52,"value":53},"text","Medusa Backend Development",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Comprehensive backend development guide for Medusa applications. Contains patterns across 6 categories covering architecture, type safety, business logic placement, and common pitfalls.",{"type":46,"tag":61,"props":62,"children":64},"h2",{"id":63},"when-to-apply",[65],{"type":52,"value":66},"When to Apply",{"type":46,"tag":55,"props":68,"children":69},{},[70],{"type":46,"tag":71,"props":72,"children":73},"strong",{},[74],{"type":52,"value":75},"Load this skill for ANY backend development task, including:",{"type":46,"tag":77,"props":78,"children":79},"ul",{},[80,86,91,96,101,106,111],{"type":46,"tag":81,"props":82,"children":83},"li",{},[84],{"type":52,"value":85},"Creating or modifying custom modules and data models",{"type":46,"tag":81,"props":87,"children":88},{},[89],{"type":52,"value":90},"Implementing workflows for mutations",{"type":46,"tag":81,"props":92,"children":93},{},[94],{"type":52,"value":95},"Building API routes (store or admin)",{"type":46,"tag":81,"props":97,"children":98},{},[99],{"type":52,"value":100},"Defining module links between entities",{"type":46,"tag":81,"props":102,"children":103},{},[104],{"type":52,"value":105},"Writing business logic or validation",{"type":46,"tag":81,"props":107,"children":108},{},[109],{"type":52,"value":110},"Querying data across modules",{"type":46,"tag":81,"props":112,"children":113},{},[114],{"type":52,"value":115},"Implementing authentication\u002Fauthorization",{"type":46,"tag":55,"props":117,"children":118},{},[119],{"type":46,"tag":71,"props":120,"children":121},{},[122],{"type":52,"value":123},"Also load these skills when:",{"type":46,"tag":77,"props":125,"children":126},{},[127,137],{"type":46,"tag":81,"props":128,"children":129},{},[130,135],{"type":46,"tag":71,"props":131,"children":132},{},[133],{"type":52,"value":134},"building-admin-dashboard-customizations:",{"type":52,"value":136}," Building admin UI (widgets, pages, forms)",{"type":46,"tag":81,"props":138,"children":139},{},[140,145],{"type":46,"tag":71,"props":141,"children":142},{},[143],{"type":52,"value":144},"building-storefronts:",{"type":52,"value":146}," Calling backend API routes from storefronts (SDK integration)",{"type":46,"tag":61,"props":148,"children":150},{"id":149},"critical-load-reference-files-when-needed",[151],{"type":52,"value":152},"CRITICAL: Load Reference Files When Needed",{"type":46,"tag":55,"props":154,"children":155},{},[156,161],{"type":46,"tag":71,"props":157,"children":158},{},[159],{"type":52,"value":160},"The quick reference below is NOT sufficient for implementation.",{"type":52,"value":162}," You MUST load relevant reference files before writing code for that component.",{"type":46,"tag":55,"props":164,"children":165},{},[166],{"type":46,"tag":71,"props":167,"children":168},{},[169],{"type":52,"value":170},"Load these references based on what you're implementing:",{"type":46,"tag":77,"props":172,"children":173},{},[174,193,209,225,241,257],{"type":46,"tag":81,"props":175,"children":176},{},[177,182,184,191],{"type":46,"tag":71,"props":178,"children":179},{},[180],{"type":52,"value":181},"Creating a module?",{"type":52,"value":183}," → MUST load ",{"type":46,"tag":185,"props":186,"children":188},"code",{"className":187},[],[189],{"type":52,"value":190},"reference\u002Fcustom-modules.md",{"type":52,"value":192}," first",{"type":46,"tag":81,"props":194,"children":195},{},[196,201,202,208],{"type":46,"tag":71,"props":197,"children":198},{},[199],{"type":52,"value":200},"Creating workflows?",{"type":52,"value":183},{"type":46,"tag":185,"props":203,"children":205},{"className":204},[],[206],{"type":52,"value":207},"reference\u002Fworkflows.md",{"type":52,"value":192},{"type":46,"tag":81,"props":210,"children":211},{},[212,217,218,224],{"type":46,"tag":71,"props":213,"children":214},{},[215],{"type":52,"value":216},"Creating API routes?",{"type":52,"value":183},{"type":46,"tag":185,"props":219,"children":221},{"className":220},[],[222],{"type":52,"value":223},"reference\u002Fapi-routes.md",{"type":52,"value":192},{"type":46,"tag":81,"props":226,"children":227},{},[228,233,234,240],{"type":46,"tag":71,"props":229,"children":230},{},[231],{"type":52,"value":232},"Creating module links?",{"type":52,"value":183},{"type":46,"tag":185,"props":235,"children":237},{"className":236},[],[238],{"type":52,"value":239},"reference\u002Fmodule-links.md",{"type":52,"value":192},{"type":46,"tag":81,"props":242,"children":243},{},[244,249,250,256],{"type":46,"tag":71,"props":245,"children":246},{},[247],{"type":52,"value":248},"Querying data?",{"type":52,"value":183},{"type":46,"tag":185,"props":251,"children":253},{"className":252},[],[254],{"type":52,"value":255},"reference\u002Fquerying-data.md",{"type":52,"value":192},{"type":46,"tag":81,"props":258,"children":259},{},[260,265,266,272],{"type":46,"tag":71,"props":261,"children":262},{},[263],{"type":52,"value":264},"Adding authentication?",{"type":52,"value":183},{"type":46,"tag":185,"props":267,"children":269},{"className":268},[],[270],{"type":52,"value":271},"reference\u002Fauthentication.md",{"type":52,"value":192},{"type":46,"tag":55,"props":274,"children":275},{},[276,281],{"type":46,"tag":71,"props":277,"children":278},{},[279],{"type":52,"value":280},"Minimum requirement:",{"type":52,"value":282}," Load at least 1-2 reference files relevant to your specific task before implementing.",{"type":46,"tag":61,"props":284,"children":286},{"id":285},"critical-architecture-pattern",[287],{"type":52,"value":288},"Critical Architecture Pattern",{"type":46,"tag":55,"props":290,"children":291},{},[292],{"type":46,"tag":71,"props":293,"children":294},{},[295],{"type":52,"value":296},"ALWAYS follow this flow - never bypass layers:",{"type":46,"tag":298,"props":299,"children":303},"pre",{"className":300,"code":302,"language":52},[301],"language-text","Module (data models + CRUD operations)\n  ↓ used by\nWorkflow (business logic + mutations with rollback)\n  ↓ executed by\nAPI Route (HTTP interface, validation middleware)\n  ↓ called by\nFrontend (admin dashboard\u002Fstorefront via SDK)\n",[304],{"type":46,"tag":185,"props":305,"children":307},{"__ignoreMap":306},"",[308],{"type":52,"value":302},{"type":46,"tag":55,"props":310,"children":311},{},[312],{"type":46,"tag":71,"props":313,"children":314},{},[315],{"type":52,"value":316},"Key conventions:",{"type":46,"tag":77,"props":318,"children":319},{},[320,325,330,335,348,360],{"type":46,"tag":81,"props":321,"children":322},{},[323],{"type":52,"value":324},"Only GET, POST, DELETE methods (never PUT\u002FPATCH)",{"type":46,"tag":81,"props":326,"children":327},{},[328],{"type":52,"value":329},"Workflows are required for ALL mutations",{"type":46,"tag":81,"props":331,"children":332},{},[333],{"type":52,"value":334},"Business logic belongs in workflow steps, NOT routes",{"type":46,"tag":81,"props":336,"children":337},{},[338,340,346],{"type":52,"value":339},"Query with ",{"type":46,"tag":185,"props":341,"children":343},{"className":342},[],[344],{"type":52,"value":345},"query.graph()",{"type":52,"value":347}," for cross-module data retrieval",{"type":46,"tag":81,"props":349,"children":350},{},[351,352,358],{"type":52,"value":339},{"type":46,"tag":185,"props":353,"children":355},{"className":354},[],[356],{"type":52,"value":357},"query.index()",{"type":52,"value":359}," (Index Module) for filtering across separate modules with links",{"type":46,"tag":81,"props":361,"children":362},{},[363],{"type":52,"value":364},"Module links maintain isolation between modules",{"type":46,"tag":61,"props":366,"children":368},{"id":367},"rule-categories-by-priority",[369],{"type":52,"value":370},"Rule Categories by Priority",{"type":46,"tag":372,"props":373,"children":374},"table",{},[375,404],{"type":46,"tag":376,"props":377,"children":378},"thead",{},[379],{"type":46,"tag":380,"props":381,"children":382},"tr",{},[383,389,394,399],{"type":46,"tag":384,"props":385,"children":386},"th",{},[387],{"type":52,"value":388},"Priority",{"type":46,"tag":384,"props":390,"children":391},{},[392],{"type":52,"value":393},"Category",{"type":46,"tag":384,"props":395,"children":396},{},[397],{"type":52,"value":398},"Impact",{"type":46,"tag":384,"props":400,"children":401},{},[402],{"type":52,"value":403},"Prefix",{"type":46,"tag":405,"props":406,"children":407},"tbody",{},[408,436,462,489,515,542],{"type":46,"tag":380,"props":409,"children":410},{},[411,417,422,427],{"type":46,"tag":412,"props":413,"children":414},"td",{},[415],{"type":52,"value":416},"1",{"type":46,"tag":412,"props":418,"children":419},{},[420],{"type":52,"value":421},"Architecture Violations",{"type":46,"tag":412,"props":423,"children":424},{},[425],{"type":52,"value":426},"CRITICAL",{"type":46,"tag":412,"props":428,"children":429},{},[430],{"type":46,"tag":185,"props":431,"children":433},{"className":432},[],[434],{"type":52,"value":435},"arch-",{"type":46,"tag":380,"props":437,"children":438},{},[439,444,449,453],{"type":46,"tag":412,"props":440,"children":441},{},[442],{"type":52,"value":443},"2",{"type":46,"tag":412,"props":445,"children":446},{},[447],{"type":52,"value":448},"Type Safety",{"type":46,"tag":412,"props":450,"children":451},{},[452],{"type":52,"value":426},{"type":46,"tag":412,"props":454,"children":455},{},[456],{"type":46,"tag":185,"props":457,"children":459},{"className":458},[],[460],{"type":52,"value":461},"type-",{"type":46,"tag":380,"props":463,"children":464},{},[465,470,475,480],{"type":46,"tag":412,"props":466,"children":467},{},[468],{"type":52,"value":469},"3",{"type":46,"tag":412,"props":471,"children":472},{},[473],{"type":52,"value":474},"Business Logic Placement",{"type":46,"tag":412,"props":476,"children":477},{},[478],{"type":52,"value":479},"HIGH",{"type":46,"tag":412,"props":481,"children":482},{},[483],{"type":46,"tag":185,"props":484,"children":486},{"className":485},[],[487],{"type":52,"value":488},"logic-",{"type":46,"tag":380,"props":490,"children":491},{},[492,497,502,506],{"type":46,"tag":412,"props":493,"children":494},{},[495],{"type":52,"value":496},"4",{"type":46,"tag":412,"props":498,"children":499},{},[500],{"type":52,"value":501},"Import & Code Organization",{"type":46,"tag":412,"props":503,"children":504},{},[505],{"type":52,"value":479},{"type":46,"tag":412,"props":507,"children":508},{},[509],{"type":46,"tag":185,"props":510,"children":512},{"className":511},[],[513],{"type":52,"value":514},"import-",{"type":46,"tag":380,"props":516,"children":517},{},[518,523,528,533],{"type":46,"tag":412,"props":519,"children":520},{},[521],{"type":52,"value":522},"5",{"type":46,"tag":412,"props":524,"children":525},{},[526],{"type":52,"value":527},"Data Access Patterns",{"type":46,"tag":412,"props":529,"children":530},{},[531],{"type":52,"value":532},"MEDIUM (includes CRITICAL price rule)",{"type":46,"tag":412,"props":534,"children":535},{},[536],{"type":46,"tag":185,"props":537,"children":539},{"className":538},[],[540],{"type":52,"value":541},"data-",{"type":46,"tag":380,"props":543,"children":544},{},[545,550,555,560],{"type":46,"tag":412,"props":546,"children":547},{},[548],{"type":52,"value":549},"6",{"type":46,"tag":412,"props":551,"children":552},{},[553],{"type":52,"value":554},"File Organization",{"type":46,"tag":412,"props":556,"children":557},{},[558],{"type":52,"value":559},"MEDIUM",{"type":46,"tag":412,"props":561,"children":562},{},[563],{"type":46,"tag":185,"props":564,"children":566},{"className":565},[],[567],{"type":52,"value":568},"file-",{"type":46,"tag":61,"props":570,"children":572},{"id":571},"quick-reference",[573],{"type":52,"value":574},"Quick Reference",{"type":46,"tag":576,"props":577,"children":579},"h3",{"id":578},"_1-architecture-violations-critical",[580],{"type":52,"value":581},"1. Architecture Violations (CRITICAL)",{"type":46,"tag":77,"props":583,"children":584},{},[585,596,607,618,629],{"type":46,"tag":81,"props":586,"children":587},{},[588,594],{"type":46,"tag":185,"props":589,"children":591},{"className":590},[],[592],{"type":52,"value":593},"arch-workflow-required",{"type":52,"value":595}," - Use workflows for ALL mutations, never call module services from routes",{"type":46,"tag":81,"props":597,"children":598},{},[599,605],{"type":46,"tag":185,"props":600,"children":602},{"className":601},[],[603],{"type":52,"value":604},"arch-layer-bypass",{"type":52,"value":606}," - Never bypass layers (route → service without workflow)",{"type":46,"tag":81,"props":608,"children":609},{},[610,616],{"type":46,"tag":185,"props":611,"children":613},{"className":612},[],[614],{"type":52,"value":615},"arch-http-methods",{"type":52,"value":617}," - Use only GET, POST, DELETE (never PUT\u002FPATCH)",{"type":46,"tag":81,"props":619,"children":620},{},[621,627],{"type":46,"tag":185,"props":622,"children":624},{"className":623},[],[625],{"type":52,"value":626},"arch-module-isolation",{"type":52,"value":628}," - Use module links, not direct cross-module service calls",{"type":46,"tag":81,"props":630,"children":631},{},[632,638,640,646,648],{"type":46,"tag":185,"props":633,"children":635},{"className":634},[],[636],{"type":52,"value":637},"arch-query-config-fields",{"type":52,"value":639}," - Don't set explicit ",{"type":46,"tag":185,"props":641,"children":643},{"className":642},[],[644],{"type":52,"value":645},"fields",{"type":52,"value":647}," when using ",{"type":46,"tag":185,"props":649,"children":651},{"className":650},[],[652],{"type":52,"value":653},"req.queryConfig",{"type":46,"tag":576,"props":655,"children":657},{"id":656},"_2-type-safety-critical",[658],{"type":52,"value":659},"2. Type Safety (CRITICAL)",{"type":46,"tag":77,"props":661,"children":662},{},[663,687,714,725,744],{"type":46,"tag":81,"props":664,"children":665},{},[666,672,674,680,681],{"type":46,"tag":185,"props":667,"children":669},{"className":668},[],[670],{"type":52,"value":671},"type-request-schema",{"type":52,"value":673}," - Pass Zod inferred type to ",{"type":46,"tag":185,"props":675,"children":677},{"className":676},[],[678],{"type":52,"value":679},"MedusaRequest\u003CT>",{"type":52,"value":647},{"type":46,"tag":185,"props":682,"children":684},{"className":683},[],[685],{"type":52,"value":686},"req.validatedBody",{"type":46,"tag":81,"props":688,"children":689},{},[690,696,698,704,706,712],{"type":46,"tag":185,"props":691,"children":693},{"className":692},[],[694],{"type":52,"value":695},"type-authenticated-request",{"type":52,"value":697}," - Use ",{"type":46,"tag":185,"props":699,"children":701},{"className":700},[],[702],{"type":52,"value":703},"AuthenticatedMedusaRequest",{"type":52,"value":705}," for protected routes (not ",{"type":46,"tag":185,"props":707,"children":709},{"className":708},[],[710],{"type":52,"value":711},"MedusaRequest",{"type":52,"value":713},")",{"type":46,"tag":81,"props":715,"children":716},{},[717,723],{"type":46,"tag":185,"props":718,"children":720},{"className":719},[],[721],{"type":52,"value":722},"type-export-schema",{"type":52,"value":724}," - Export both Zod schema AND inferred type from middlewares",{"type":46,"tag":81,"props":726,"children":727},{},[728,734,736,742],{"type":46,"tag":185,"props":729,"children":731},{"className":730},[],[732],{"type":52,"value":733},"type-linkable-auto",{"type":52,"value":735}," - Never add ",{"type":46,"tag":185,"props":737,"children":739},{"className":738},[],[740],{"type":52,"value":741},".linkable()",{"type":52,"value":743}," to data models (automatically added)",{"type":46,"tag":81,"props":745,"children":746},{},[747,753],{"type":46,"tag":185,"props":748,"children":750},{"className":749},[],[751],{"type":52,"value":752},"type-module-name-camelcase",{"type":52,"value":754}," - Module names MUST be camelCase, never use dashes (causes runtime errors)",{"type":46,"tag":576,"props":756,"children":758},{"id":757},"_3-business-logic-placement-high",[759],{"type":52,"value":760},"3. Business Logic Placement (HIGH)",{"type":46,"tag":77,"props":762,"children":763},{},[764,775,786],{"type":46,"tag":81,"props":765,"children":766},{},[767,773],{"type":46,"tag":185,"props":768,"children":770},{"className":769},[],[771],{"type":52,"value":772},"logic-workflow-validation",{"type":52,"value":774}," - Put business validation in workflow steps, not API routes",{"type":46,"tag":81,"props":776,"children":777},{},[778,784],{"type":46,"tag":185,"props":779,"children":781},{"className":780},[],[782],{"type":52,"value":783},"logic-ownership-checks",{"type":52,"value":785}," - Validate ownership\u002Fpermissions in workflows, not routes",{"type":46,"tag":81,"props":787,"children":788},{},[789,795],{"type":46,"tag":185,"props":790,"children":792},{"className":791},[],[793],{"type":52,"value":794},"logic-module-service",{"type":52,"value":796}," - Keep modules simple (CRUD only), put logic in workflows",{"type":46,"tag":576,"props":798,"children":800},{"id":799},"_4-import-code-organization-high",[801],{"type":52,"value":802},"4. Import & Code Organization (HIGH)",{"type":46,"tag":77,"props":804,"children":805},{},[806,825,836],{"type":46,"tag":81,"props":807,"children":808},{},[809,815,817,823],{"type":46,"tag":185,"props":810,"children":812},{"className":811},[],[813],{"type":52,"value":814},"import-top-level",{"type":52,"value":816}," - Import workflows\u002Fmodules at file top, never use ",{"type":46,"tag":185,"props":818,"children":820},{"className":819},[],[821],{"type":52,"value":822},"await import()",{"type":52,"value":824}," in route body",{"type":46,"tag":81,"props":826,"children":827},{},[828,834],{"type":46,"tag":185,"props":829,"children":831},{"className":830},[],[832],{"type":52,"value":833},"import-static-only",{"type":52,"value":835}," - Use static imports for all dependencies",{"type":46,"tag":81,"props":837,"children":838},{},[839,845],{"type":46,"tag":185,"props":840,"children":842},{"className":841},[],[843],{"type":52,"value":844},"import-no-dynamic-routes",{"type":52,"value":846}," - Dynamic imports add overhead and break type checking",{"type":46,"tag":576,"props":848,"children":850},{"id":849},"_5-data-access-patterns-medium",[851],{"type":52,"value":852},"5. Data Access Patterns (MEDIUM)",{"type":46,"tag":77,"props":854,"children":855},{},[856,873,897,914,931,949,973,999,1017],{"type":46,"tag":81,"props":857,"children":858},{},[859,865,867,871],{"type":46,"tag":185,"props":860,"children":862},{"className":861},[],[863],{"type":52,"value":864},"data-price-format",{"type":52,"value":866}," - ",{"type":46,"tag":71,"props":868,"children":869},{},[870],{"type":52,"value":426},{"type":52,"value":872},": Prices are stored as-is in Medusa (49.99 stored as 49.99, NOT in cents). Never multiply by 100 when saving or divide by 100 when displaying",{"type":46,"tag":81,"props":874,"children":875},{},[876,882,883,888,890,895],{"type":46,"tag":185,"props":877,"children":879},{"className":878},[],[880],{"type":52,"value":881},"data-query-method",{"type":52,"value":697},{"type":46,"tag":185,"props":884,"children":886},{"className":885},[],[887],{"type":52,"value":345},{"type":52,"value":889}," for retrieving data; use ",{"type":46,"tag":185,"props":891,"children":893},{"className":892},[],[894],{"type":52,"value":357},{"type":52,"value":896}," (Index Module) for filtering across linked modules",{"type":46,"tag":81,"props":898,"children":899},{},[900,906,907,912],{"type":46,"tag":185,"props":901,"children":903},{"className":902},[],[904],{"type":52,"value":905},"data-query-graph",{"type":52,"value":697},{"type":46,"tag":185,"props":908,"children":910},{"className":909},[],[911],{"type":52,"value":345},{"type":52,"value":913}," for cross-module queries with dot notation (without cross-module filtering)",{"type":46,"tag":81,"props":915,"children":916},{},[917,923,924,929],{"type":46,"tag":185,"props":918,"children":920},{"className":919},[],[921],{"type":52,"value":922},"data-query-index",{"type":52,"value":697},{"type":46,"tag":185,"props":925,"children":927},{"className":926},[],[928],{"type":52,"value":357},{"type":52,"value":930}," when filtering by properties of linked data models in separate modules",{"type":46,"tag":81,"props":932,"children":933},{},[934,940,941,947],{"type":46,"tag":185,"props":935,"children":937},{"className":936},[],[938],{"type":52,"value":939},"data-list-and-count",{"type":52,"value":697},{"type":46,"tag":185,"props":942,"children":944},{"className":943},[],[945],{"type":52,"value":946},"listAndCount",{"type":52,"value":948}," for single-module paginated queries",{"type":46,"tag":81,"props":950,"children":951},{},[952,958,959,964,966,971],{"type":46,"tag":185,"props":953,"children":955},{"className":954},[],[956],{"type":52,"value":957},"data-linked-filtering",{"type":52,"value":866},{"type":46,"tag":185,"props":960,"children":962},{"className":961},[],[963],{"type":52,"value":345},{"type":52,"value":965}," can't filter by linked module fields - use ",{"type":46,"tag":185,"props":967,"children":969},{"className":968},[],[970],{"type":52,"value":357},{"type":52,"value":972}," or query from that entity directly",{"type":46,"tag":81,"props":974,"children":975},{},[976,982,984,990,992,997],{"type":46,"tag":185,"props":977,"children":979},{"className":978},[],[980],{"type":52,"value":981},"data-no-js-filter",{"type":52,"value":983}," - Don't use JavaScript ",{"type":46,"tag":185,"props":985,"children":987},{"className":986},[],[988],{"type":52,"value":989},".filter()",{"type":52,"value":991}," on linked data - use database filters (",{"type":46,"tag":185,"props":993,"children":995},{"className":994},[],[996],{"type":52,"value":357},{"type":52,"value":998}," or query the entity)",{"type":46,"tag":81,"props":1000,"children":1001},{},[1002,1008,1010,1015],{"type":46,"tag":185,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":52,"value":1007},"data-same-module-ok",{"type":52,"value":1009}," - Can filter by same-module relations with ",{"type":46,"tag":185,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":52,"value":345},{"type":52,"value":1016}," (e.g., product.variants)",{"type":46,"tag":81,"props":1018,"children":1019},{},[1020,1026,1028,1034,1036],{"type":46,"tag":185,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":52,"value":1025},"data-auth-middleware",{"type":52,"value":1027}," - Trust ",{"type":46,"tag":185,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":52,"value":1033},"authenticate",{"type":52,"value":1035}," middleware, don't manually check ",{"type":46,"tag":185,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":52,"value":1041},"req.auth_context",{"type":46,"tag":576,"props":1043,"children":1045},{"id":1044},"_6-file-organization-medium",[1046],{"type":52,"value":1047},"6. File Organization (MEDIUM)",{"type":46,"tag":77,"props":1049,"children":1050},{},[1051,1068,1085,1096],{"type":46,"tag":81,"props":1052,"children":1053},{},[1054,1060,1062],{"type":46,"tag":185,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":52,"value":1059},"file-workflow-steps",{"type":52,"value":1061}," - Recommended: Create steps in ",{"type":46,"tag":185,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":52,"value":1067},"src\u002Fworkflows\u002Fsteps\u002F[name].ts",{"type":46,"tag":81,"props":1069,"children":1070},{},[1071,1077,1079],{"type":46,"tag":185,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":52,"value":1076},"file-workflow-composition",{"type":52,"value":1078}," - Composition functions in ",{"type":46,"tag":185,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":52,"value":1084},"src\u002Fworkflows\u002F[name].ts",{"type":46,"tag":81,"props":1086,"children":1087},{},[1088,1094],{"type":46,"tag":185,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":52,"value":1093},"file-middleware-exports",{"type":52,"value":1095}," - Export schemas and types from middleware files",{"type":46,"tag":81,"props":1097,"children":1098},{},[1099,1105,1107],{"type":46,"tag":185,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":52,"value":1104},"file-links-directory",{"type":52,"value":1106}," - Define module links in ",{"type":46,"tag":185,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":52,"value":1112},"src\u002Flinks\u002F[name].ts",{"type":46,"tag":61,"props":1114,"children":1116},{"id":1115},"workflow-composition-rules",[1117],{"type":52,"value":1118},"Workflow Composition Rules",{"type":46,"tag":55,"props":1120,"children":1121},{},[1122],{"type":46,"tag":71,"props":1123,"children":1124},{},[1125],{"type":52,"value":1126},"The workflow function has critical constraints:",{"type":46,"tag":298,"props":1128,"children":1132},{"className":1129,"code":1130,"language":1131,"meta":306,"style":306},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F ✅ CORRECT\nconst myWorkflow = createWorkflow(\n  \"name\",\n  function (input) { \u002F\u002F Regular function, not async, not arrow\n    const result = myStep(input) \u002F\u002F No await\n    return new WorkflowResponse(result)\n  }\n)\n\n\u002F\u002F ❌ WRONG\nconst myWorkflow = createWorkflow(\n  \"name\",\n  async (input) => { \u002F\u002F ❌ No async, no arrow functions\n    const result = await myStep(input) \u002F\u002F ❌ No await\n    if (input.condition) { \u002F* ... *\u002F } \u002F\u002F ❌ No conditionals\n    return new WorkflowResponse(result)\n  }\n)\n","typescript",[1133],{"type":46,"tag":185,"props":1134,"children":1135},{"__ignoreMap":306},[1136,1148,1181,1206,1240,1284,1318,1327,1335,1345,1354,1378,1398,1433,1475,1526,1554,1562],{"type":46,"tag":1137,"props":1138,"children":1141},"span",{"class":1139,"line":1140},"line",1,[1142],{"type":46,"tag":1137,"props":1143,"children":1145},{"style":1144},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1146],{"type":52,"value":1147},"\u002F\u002F ✅ CORRECT\n",{"type":46,"tag":1137,"props":1149,"children":1151},{"class":1139,"line":1150},2,[1152,1158,1164,1170,1176],{"type":46,"tag":1137,"props":1153,"children":1155},{"style":1154},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1156],{"type":52,"value":1157},"const",{"type":46,"tag":1137,"props":1159,"children":1161},{"style":1160},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1162],{"type":52,"value":1163}," myWorkflow ",{"type":46,"tag":1137,"props":1165,"children":1167},{"style":1166},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1168],{"type":52,"value":1169},"=",{"type":46,"tag":1137,"props":1171,"children":1173},{"style":1172},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1174],{"type":52,"value":1175}," createWorkflow",{"type":46,"tag":1137,"props":1177,"children":1178},{"style":1160},[1179],{"type":52,"value":1180},"(\n",{"type":46,"tag":1137,"props":1182,"children":1184},{"class":1139,"line":1183},3,[1185,1190,1196,1201],{"type":46,"tag":1137,"props":1186,"children":1187},{"style":1166},[1188],{"type":52,"value":1189},"  \"",{"type":46,"tag":1137,"props":1191,"children":1193},{"style":1192},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1194],{"type":52,"value":1195},"name",{"type":46,"tag":1137,"props":1197,"children":1198},{"style":1166},[1199],{"type":52,"value":1200},"\"",{"type":46,"tag":1137,"props":1202,"children":1203},{"style":1166},[1204],{"type":52,"value":1205},",\n",{"type":46,"tag":1137,"props":1207,"children":1209},{"class":1139,"line":1208},4,[1210,1215,1220,1226,1230,1235],{"type":46,"tag":1137,"props":1211,"children":1212},{"style":1154},[1213],{"type":52,"value":1214},"  function",{"type":46,"tag":1137,"props":1216,"children":1217},{"style":1166},[1218],{"type":52,"value":1219}," (",{"type":46,"tag":1137,"props":1221,"children":1223},{"style":1222},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1224],{"type":52,"value":1225},"input",{"type":46,"tag":1137,"props":1227,"children":1228},{"style":1166},[1229],{"type":52,"value":713},{"type":46,"tag":1137,"props":1231,"children":1232},{"style":1166},[1233],{"type":52,"value":1234}," {",{"type":46,"tag":1137,"props":1236,"children":1237},{"style":1144},[1238],{"type":52,"value":1239}," \u002F\u002F Regular function, not async, not arrow\n",{"type":46,"tag":1137,"props":1241,"children":1243},{"class":1139,"line":1242},5,[1244,1249,1254,1259,1264,1270,1274,1279],{"type":46,"tag":1137,"props":1245,"children":1246},{"style":1154},[1247],{"type":52,"value":1248},"    const",{"type":46,"tag":1137,"props":1250,"children":1251},{"style":1160},[1252],{"type":52,"value":1253}," result",{"type":46,"tag":1137,"props":1255,"children":1256},{"style":1166},[1257],{"type":52,"value":1258}," =",{"type":46,"tag":1137,"props":1260,"children":1261},{"style":1172},[1262],{"type":52,"value":1263}," myStep",{"type":46,"tag":1137,"props":1265,"children":1267},{"style":1266},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1268],{"type":52,"value":1269},"(",{"type":46,"tag":1137,"props":1271,"children":1272},{"style":1160},[1273],{"type":52,"value":1225},{"type":46,"tag":1137,"props":1275,"children":1276},{"style":1266},[1277],{"type":52,"value":1278},") ",{"type":46,"tag":1137,"props":1280,"children":1281},{"style":1144},[1282],{"type":52,"value":1283},"\u002F\u002F No await\n",{"type":46,"tag":1137,"props":1285,"children":1287},{"class":1139,"line":1286},6,[1288,1294,1299,1304,1308,1313],{"type":46,"tag":1137,"props":1289,"children":1291},{"style":1290},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1292],{"type":52,"value":1293},"    return",{"type":46,"tag":1137,"props":1295,"children":1296},{"style":1166},[1297],{"type":52,"value":1298}," new",{"type":46,"tag":1137,"props":1300,"children":1301},{"style":1172},[1302],{"type":52,"value":1303}," WorkflowResponse",{"type":46,"tag":1137,"props":1305,"children":1306},{"style":1266},[1307],{"type":52,"value":1269},{"type":46,"tag":1137,"props":1309,"children":1310},{"style":1160},[1311],{"type":52,"value":1312},"result",{"type":46,"tag":1137,"props":1314,"children":1315},{"style":1266},[1316],{"type":52,"value":1317},")\n",{"type":46,"tag":1137,"props":1319,"children":1321},{"class":1139,"line":1320},7,[1322],{"type":46,"tag":1137,"props":1323,"children":1324},{"style":1166},[1325],{"type":52,"value":1326},"  }\n",{"type":46,"tag":1137,"props":1328,"children":1330},{"class":1139,"line":1329},8,[1331],{"type":46,"tag":1137,"props":1332,"children":1333},{"style":1160},[1334],{"type":52,"value":1317},{"type":46,"tag":1137,"props":1336,"children":1338},{"class":1139,"line":1337},9,[1339],{"type":46,"tag":1137,"props":1340,"children":1342},{"emptyLinePlaceholder":1341},true,[1343],{"type":52,"value":1344},"\n",{"type":46,"tag":1137,"props":1346,"children":1348},{"class":1139,"line":1347},10,[1349],{"type":46,"tag":1137,"props":1350,"children":1351},{"style":1144},[1352],{"type":52,"value":1353},"\u002F\u002F ❌ WRONG\n",{"type":46,"tag":1137,"props":1355,"children":1357},{"class":1139,"line":1356},11,[1358,1362,1366,1370,1374],{"type":46,"tag":1137,"props":1359,"children":1360},{"style":1154},[1361],{"type":52,"value":1157},{"type":46,"tag":1137,"props":1363,"children":1364},{"style":1160},[1365],{"type":52,"value":1163},{"type":46,"tag":1137,"props":1367,"children":1368},{"style":1166},[1369],{"type":52,"value":1169},{"type":46,"tag":1137,"props":1371,"children":1372},{"style":1172},[1373],{"type":52,"value":1175},{"type":46,"tag":1137,"props":1375,"children":1376},{"style":1160},[1377],{"type":52,"value":1180},{"type":46,"tag":1137,"props":1379,"children":1381},{"class":1139,"line":1380},12,[1382,1386,1390,1394],{"type":46,"tag":1137,"props":1383,"children":1384},{"style":1166},[1385],{"type":52,"value":1189},{"type":46,"tag":1137,"props":1387,"children":1388},{"style":1192},[1389],{"type":52,"value":1195},{"type":46,"tag":1137,"props":1391,"children":1392},{"style":1166},[1393],{"type":52,"value":1200},{"type":46,"tag":1137,"props":1395,"children":1396},{"style":1166},[1397],{"type":52,"value":1205},{"type":46,"tag":1137,"props":1399,"children":1401},{"class":1139,"line":1400},13,[1402,1407,1411,1415,1419,1424,1428],{"type":46,"tag":1137,"props":1403,"children":1404},{"style":1154},[1405],{"type":52,"value":1406},"  async",{"type":46,"tag":1137,"props":1408,"children":1409},{"style":1166},[1410],{"type":52,"value":1219},{"type":46,"tag":1137,"props":1412,"children":1413},{"style":1222},[1414],{"type":52,"value":1225},{"type":46,"tag":1137,"props":1416,"children":1417},{"style":1166},[1418],{"type":52,"value":713},{"type":46,"tag":1137,"props":1420,"children":1421},{"style":1154},[1422],{"type":52,"value":1423}," =>",{"type":46,"tag":1137,"props":1425,"children":1426},{"style":1166},[1427],{"type":52,"value":1234},{"type":46,"tag":1137,"props":1429,"children":1430},{"style":1144},[1431],{"type":52,"value":1432}," \u002F\u002F ❌ No async, no arrow functions\n",{"type":46,"tag":1137,"props":1434,"children":1436},{"class":1139,"line":1435},14,[1437,1441,1445,1449,1454,1458,1462,1466,1470],{"type":46,"tag":1137,"props":1438,"children":1439},{"style":1154},[1440],{"type":52,"value":1248},{"type":46,"tag":1137,"props":1442,"children":1443},{"style":1160},[1444],{"type":52,"value":1253},{"type":46,"tag":1137,"props":1446,"children":1447},{"style":1166},[1448],{"type":52,"value":1258},{"type":46,"tag":1137,"props":1450,"children":1451},{"style":1290},[1452],{"type":52,"value":1453}," await",{"type":46,"tag":1137,"props":1455,"children":1456},{"style":1172},[1457],{"type":52,"value":1263},{"type":46,"tag":1137,"props":1459,"children":1460},{"style":1266},[1461],{"type":52,"value":1269},{"type":46,"tag":1137,"props":1463,"children":1464},{"style":1160},[1465],{"type":52,"value":1225},{"type":46,"tag":1137,"props":1467,"children":1468},{"style":1266},[1469],{"type":52,"value":1278},{"type":46,"tag":1137,"props":1471,"children":1472},{"style":1144},[1473],{"type":52,"value":1474},"\u002F\u002F ❌ No await\n",{"type":46,"tag":1137,"props":1476,"children":1478},{"class":1139,"line":1477},15,[1479,1484,1488,1492,1497,1502,1506,1511,1516,1521],{"type":46,"tag":1137,"props":1480,"children":1481},{"style":1290},[1482],{"type":52,"value":1483},"    if",{"type":46,"tag":1137,"props":1485,"children":1486},{"style":1266},[1487],{"type":52,"value":1219},{"type":46,"tag":1137,"props":1489,"children":1490},{"style":1160},[1491],{"type":52,"value":1225},{"type":46,"tag":1137,"props":1493,"children":1494},{"style":1166},[1495],{"type":52,"value":1496},".",{"type":46,"tag":1137,"props":1498,"children":1499},{"style":1160},[1500],{"type":52,"value":1501},"condition",{"type":46,"tag":1137,"props":1503,"children":1504},{"style":1266},[1505],{"type":52,"value":1278},{"type":46,"tag":1137,"props":1507,"children":1508},{"style":1166},[1509],{"type":52,"value":1510},"{",{"type":46,"tag":1137,"props":1512,"children":1513},{"style":1144},[1514],{"type":52,"value":1515}," \u002F* ... *\u002F",{"type":46,"tag":1137,"props":1517,"children":1518},{"style":1166},[1519],{"type":52,"value":1520}," }",{"type":46,"tag":1137,"props":1522,"children":1523},{"style":1144},[1524],{"type":52,"value":1525}," \u002F\u002F ❌ No conditionals\n",{"type":46,"tag":1137,"props":1527,"children":1529},{"class":1139,"line":1528},16,[1530,1534,1538,1542,1546,1550],{"type":46,"tag":1137,"props":1531,"children":1532},{"style":1290},[1533],{"type":52,"value":1293},{"type":46,"tag":1137,"props":1535,"children":1536},{"style":1166},[1537],{"type":52,"value":1298},{"type":46,"tag":1137,"props":1539,"children":1540},{"style":1172},[1541],{"type":52,"value":1303},{"type":46,"tag":1137,"props":1543,"children":1544},{"style":1266},[1545],{"type":52,"value":1269},{"type":46,"tag":1137,"props":1547,"children":1548},{"style":1160},[1549],{"type":52,"value":1312},{"type":46,"tag":1137,"props":1551,"children":1552},{"style":1266},[1553],{"type":52,"value":1317},{"type":46,"tag":1137,"props":1555,"children":1557},{"class":1139,"line":1556},17,[1558],{"type":46,"tag":1137,"props":1559,"children":1560},{"style":1166},[1561],{"type":52,"value":1326},{"type":46,"tag":1137,"props":1563,"children":1565},{"class":1139,"line":1564},18,[1566],{"type":46,"tag":1137,"props":1567,"children":1568},{"style":1160},[1569],{"type":52,"value":1317},{"type":46,"tag":55,"props":1571,"children":1572},{},[1573],{"type":46,"tag":71,"props":1574,"children":1575},{},[1576],{"type":52,"value":1577},"Constraints:",{"type":46,"tag":77,"props":1579,"children":1580},{},[1581,1586,1598,1610,1622,1633],{"type":46,"tag":81,"props":1582,"children":1583},{},[1584],{"type":52,"value":1585},"No async\u002Fawait (runs at load time)",{"type":46,"tag":81,"props":1587,"children":1588},{},[1589,1591,1597],{"type":52,"value":1590},"No arrow functions (use ",{"type":46,"tag":185,"props":1592,"children":1594},{"className":1593},[],[1595],{"type":52,"value":1596},"function",{"type":52,"value":713},{"type":46,"tag":81,"props":1599,"children":1600},{},[1601,1603,1609],{"type":52,"value":1602},"No conditionals\u002Fternaries (use ",{"type":46,"tag":185,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":52,"value":1608},"when()",{"type":52,"value":713},{"type":46,"tag":81,"props":1611,"children":1612},{},[1613,1615,1621],{"type":52,"value":1614},"No variable manipulation (use ",{"type":46,"tag":185,"props":1616,"children":1618},{"className":1617},[],[1619],{"type":52,"value":1620},"transform()",{"type":52,"value":713},{"type":46,"tag":81,"props":1623,"children":1624},{},[1625,1627,1632],{"type":52,"value":1626},"No date creation (use ",{"type":46,"tag":185,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":52,"value":1620},{"type":52,"value":713},{"type":46,"tag":81,"props":1634,"children":1635},{},[1636,1638,1644],{"type":52,"value":1637},"Multiple step calls need ",{"type":46,"tag":185,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":52,"value":1643},".config({ name: \"unique-name\" })",{"type":52,"value":1645}," to avoid conflicts",{"type":46,"tag":61,"props":1647,"children":1649},{"id":1648},"common-mistakes-checklist",[1650],{"type":52,"value":1651},"Common Mistakes Checklist",{"type":46,"tag":55,"props":1653,"children":1654},{},[1655],{"type":52,"value":1656},"Before implementing, verify you're NOT doing these:",{"type":46,"tag":55,"props":1658,"children":1659},{},[1660],{"type":46,"tag":71,"props":1661,"children":1662},{},[1663],{"type":52,"value":1664},"Architecture:",{"type":46,"tag":77,"props":1666,"children":1669},{"className":1667},[1668],"contains-task-list",[1670,1681,1690,1699,1720],{"type":46,"tag":81,"props":1671,"children":1674},{"className":1672},[1673],"task-list-item",[1675,1679],{"type":46,"tag":1225,"props":1676,"children":1678},{"disabled":1341,"type":1677},"checkbox",[],{"type":52,"value":1680}," Calling module services directly from API routes",{"type":46,"tag":81,"props":1682,"children":1684},{"className":1683},[1673],[1685,1688],{"type":46,"tag":1225,"props":1686,"children":1687},{"disabled":1341,"type":1677},[],{"type":52,"value":1689}," Using PUT or PATCH methods",{"type":46,"tag":81,"props":1691,"children":1693},{"className":1692},[1673],[1694,1697],{"type":46,"tag":1225,"props":1695,"children":1696},{"disabled":1341,"type":1677},[],{"type":52,"value":1698}," Bypassing workflows for mutations",{"type":46,"tag":81,"props":1700,"children":1702},{"className":1701},[1673],[1703,1706,1708,1713,1715],{"type":46,"tag":1225,"props":1704,"children":1705},{"disabled":1341,"type":1677},[],{"type":52,"value":1707}," Setting ",{"type":46,"tag":185,"props":1709,"children":1711},{"className":1710},[],[1712],{"type":52,"value":645},{"type":52,"value":1714}," explicitly with ",{"type":46,"tag":185,"props":1716,"children":1718},{"className":1717},[],[1719],{"type":52,"value":653},{"type":46,"tag":81,"props":1721,"children":1723},{"className":1722},[1673],[1724,1727],{"type":46,"tag":1225,"props":1725,"children":1726},{"disabled":1341,"type":1677},[],{"type":52,"value":1728}," Skipping migrations after creating module links",{"type":46,"tag":55,"props":1730,"children":1731},{},[1732],{"type":46,"tag":71,"props":1733,"children":1734},{},[1735],{"type":52,"value":1736},"Type Safety:",{"type":46,"tag":77,"props":1738,"children":1740},{"className":1739},[1668],[1741,1758,1781,1790,1806],{"type":46,"tag":81,"props":1742,"children":1744},{"className":1743},[1673],[1745,1748,1750,1756],{"type":46,"tag":1225,"props":1746,"children":1747},{"disabled":1341,"type":1677},[],{"type":52,"value":1749}," Forgetting ",{"type":46,"tag":185,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":52,"value":1755},"MedusaRequest\u003CSchemaType>",{"type":52,"value":1757}," type argument",{"type":46,"tag":81,"props":1759,"children":1761},{"className":1760},[1673],[1762,1765,1767,1772,1774,1779],{"type":46,"tag":1225,"props":1763,"children":1764},{"disabled":1341,"type":1677},[],{"type":52,"value":1766}," Using ",{"type":46,"tag":185,"props":1768,"children":1770},{"className":1769},[],[1771],{"type":52,"value":711},{"type":52,"value":1773}," instead of ",{"type":46,"tag":185,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":52,"value":703},{"type":52,"value":1780}," for protected routes",{"type":46,"tag":81,"props":1782,"children":1784},{"className":1783},[1673],[1785,1788],{"type":46,"tag":1225,"props":1786,"children":1787},{"disabled":1341,"type":1677},[],{"type":52,"value":1789}," Not exporting Zod inferred type from middlewares",{"type":46,"tag":81,"props":1791,"children":1793},{"className":1792},[1673],[1794,1797,1799,1804],{"type":46,"tag":1225,"props":1795,"children":1796},{"disabled":1341,"type":1677},[],{"type":52,"value":1798}," Adding ",{"type":46,"tag":185,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":52,"value":741},{"type":52,"value":1805}," to data models",{"type":46,"tag":81,"props":1807,"children":1809},{"className":1808},[1673],[1810,1813],{"type":46,"tag":1225,"props":1811,"children":1812},{"disabled":1341,"type":1677},[],{"type":52,"value":1814}," Using dashes in module names (must be camelCase)",{"type":46,"tag":55,"props":1816,"children":1817},{},[1818],{"type":46,"tag":71,"props":1819,"children":1820},{},[1821],{"type":52,"value":1822},"Business Logic:",{"type":46,"tag":77,"props":1824,"children":1826},{"className":1825},[1668],[1827,1836,1845],{"type":46,"tag":81,"props":1828,"children":1830},{"className":1829},[1673],[1831,1834],{"type":46,"tag":1225,"props":1832,"children":1833},{"disabled":1341,"type":1677},[],{"type":52,"value":1835}," Validating business rules in API routes",{"type":46,"tag":81,"props":1837,"children":1839},{"className":1838},[1673],[1840,1843],{"type":46,"tag":1225,"props":1841,"children":1842},{"disabled":1341,"type":1677},[],{"type":52,"value":1844}," Checking ownership in routes instead of workflows",{"type":46,"tag":81,"props":1846,"children":1848},{"className":1847},[1673],[1849,1852,1854,1860],{"type":46,"tag":1225,"props":1850,"children":1851},{"disabled":1341,"type":1677},[],{"type":52,"value":1853}," Manually checking ",{"type":46,"tag":185,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":52,"value":1859},"req.auth_context?.actor_id",{"type":52,"value":1861}," when middleware already applied",{"type":46,"tag":55,"props":1863,"children":1864},{},[1865],{"type":46,"tag":71,"props":1866,"children":1867},{},[1868],{"type":52,"value":1869},"Imports:",{"type":46,"tag":77,"props":1871,"children":1873},{"className":1872},[1668],[1874,1889],{"type":46,"tag":81,"props":1875,"children":1877},{"className":1876},[1673],[1878,1881,1882,1887],{"type":46,"tag":1225,"props":1879,"children":1880},{"disabled":1341,"type":1677},[],{"type":52,"value":1766},{"type":46,"tag":185,"props":1883,"children":1885},{"className":1884},[],[1886],{"type":52,"value":822},{"type":52,"value":1888}," in route handler bodies",{"type":46,"tag":81,"props":1890,"children":1892},{"className":1891},[1673],[1893,1896],{"type":46,"tag":1225,"props":1894,"children":1895},{"disabled":1341,"type":1677},[],{"type":52,"value":1897}," Dynamic imports for workflows or modules",{"type":46,"tag":55,"props":1899,"children":1900},{},[1901],{"type":46,"tag":71,"props":1902,"children":1903},{},[1904],{"type":52,"value":1905},"Data Access:",{"type":46,"tag":77,"props":1907,"children":1909},{"className":1908},[1668],[1910,1925,1948,1971,1986],{"type":46,"tag":81,"props":1911,"children":1913},{"className":1912},[1673],[1914,1917,1919,1923],{"type":46,"tag":1225,"props":1915,"children":1916},{"disabled":1341,"type":1677},[],{"type":52,"value":1918}," ",{"type":46,"tag":71,"props":1920,"children":1921},{},[1922],{"type":52,"value":426},{"type":52,"value":1924},": Multiplying prices by 100 when saving or dividing by 100 when displaying (prices are stored as-is: $49.99 = 49.99)",{"type":46,"tag":81,"props":1926,"children":1928},{"className":1927},[1673],[1929,1932,1934,1939,1941,1946],{"type":46,"tag":1225,"props":1930,"children":1931},{"disabled":1341,"type":1677},[],{"type":52,"value":1933}," Filtering by linked module fields with ",{"type":46,"tag":185,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":52,"value":345},{"type":52,"value":1940}," (use ",{"type":46,"tag":185,"props":1942,"children":1944},{"className":1943},[],[1945],{"type":52,"value":357},{"type":52,"value":1947}," or query from other side instead)",{"type":46,"tag":81,"props":1949,"children":1951},{"className":1950},[1673],[1952,1955,1957,1962,1964,1969],{"type":46,"tag":1225,"props":1953,"children":1954},{"disabled":1341,"type":1677},[],{"type":52,"value":1956}," Using JavaScript ",{"type":46,"tag":185,"props":1958,"children":1960},{"className":1959},[],[1961],{"type":52,"value":989},{"type":52,"value":1963}," on linked data (use ",{"type":46,"tag":185,"props":1965,"children":1967},{"className":1966},[],[1968],{"type":52,"value":357},{"type":52,"value":1970}," or query the linked entity directly)",{"type":46,"tag":81,"props":1972,"children":1974},{"className":1973},[1673],[1975,1978,1980,1985],{"type":46,"tag":1225,"props":1976,"children":1977},{"disabled":1341,"type":1677},[],{"type":52,"value":1979}," Not using ",{"type":46,"tag":185,"props":1981,"children":1983},{"className":1982},[],[1984],{"type":52,"value":345},{"type":52,"value":347},{"type":46,"tag":81,"props":1987,"children":1989},{"className":1988},[1673],[1990,1993,1994,1999,2001,2006],{"type":46,"tag":1225,"props":1991,"children":1992},{"disabled":1341,"type":1677},[],{"type":52,"value":1766},{"type":46,"tag":185,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":52,"value":345},{"type":52,"value":2000}," when you need to filter across separate modules (use ",{"type":46,"tag":185,"props":2002,"children":2004},{"className":2003},[],[2005],{"type":52,"value":357},{"type":52,"value":2007}," instead)",{"type":46,"tag":61,"props":2009,"children":2011},{"id":2010},"validating-implementation",[2012],{"type":52,"value":2013},"Validating Implementation",{"type":46,"tag":55,"props":2015,"children":2016},{},[2017],{"type":46,"tag":71,"props":2018,"children":2019},{},[2020],{"type":52,"value":2021},"CRITICAL: Always run the build command after completing implementation to catch type errors and runtime issues.",{"type":46,"tag":576,"props":2023,"children":2025},{"id":2024},"when-to-validate",[2026],{"type":52,"value":2027},"When to Validate",{"type":46,"tag":77,"props":2029,"children":2030},{},[2031,2036,2041,2046],{"type":46,"tag":81,"props":2032,"children":2033},{},[2034],{"type":52,"value":2035},"After implementing any new feature",{"type":46,"tag":81,"props":2037,"children":2038},{},[2039],{"type":52,"value":2040},"After making changes to modules, workflows, or API routes",{"type":46,"tag":81,"props":2042,"children":2043},{},[2044],{"type":52,"value":2045},"Before marking tasks as complete",{"type":46,"tag":81,"props":2047,"children":2048},{},[2049],{"type":52,"value":2050},"Proactively, without waiting for the user to ask",{"type":46,"tag":576,"props":2052,"children":2054},{"id":2053},"how-to-run-build",[2055],{"type":52,"value":2056},"How to Run Build",{"type":46,"tag":55,"props":2058,"children":2059},{},[2060],{"type":52,"value":2061},"Detect the package manager and run the appropriate command:",{"type":46,"tag":298,"props":2063,"children":2067},{"className":2064,"code":2065,"language":2066,"meta":306,"style":306},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm run build      # or pnpm build \u002F yarn build\n","bash",[2068],{"type":46,"tag":185,"props":2069,"children":2070},{"__ignoreMap":306},[2071],{"type":46,"tag":1137,"props":2072,"children":2073},{"class":1139,"line":1140},[2074,2080,2085,2090],{"type":46,"tag":1137,"props":2075,"children":2077},{"style":2076},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2078],{"type":52,"value":2079},"npm",{"type":46,"tag":1137,"props":2081,"children":2082},{"style":1192},[2083],{"type":52,"value":2084}," run",{"type":46,"tag":1137,"props":2086,"children":2087},{"style":1192},[2088],{"type":52,"value":2089}," build",{"type":46,"tag":1137,"props":2091,"children":2092},{"style":1144},[2093],{"type":52,"value":2094},"      # or pnpm build \u002F yarn build\n",{"type":46,"tag":576,"props":2096,"children":2098},{"id":2097},"handling-build-errors",[2099],{"type":52,"value":2100},"Handling Build Errors",{"type":46,"tag":55,"props":2102,"children":2103},{},[2104],{"type":52,"value":2105},"If the build fails:",{"type":46,"tag":2107,"props":2108,"children":2109},"ol",{},[2110,2115,2120,2125],{"type":46,"tag":81,"props":2111,"children":2112},{},[2113],{"type":52,"value":2114},"Read the error messages carefully",{"type":46,"tag":81,"props":2116,"children":2117},{},[2118],{"type":52,"value":2119},"Fix type errors, import issues, and syntax errors",{"type":46,"tag":81,"props":2121,"children":2122},{},[2123],{"type":52,"value":2124},"Run the build again to verify the fix",{"type":46,"tag":81,"props":2126,"children":2127},{},[2128],{"type":52,"value":2129},"Do NOT mark implementation as complete until build succeeds",{"type":46,"tag":55,"props":2131,"children":2132},{},[2133],{"type":46,"tag":71,"props":2134,"children":2135},{},[2136],{"type":52,"value":2137},"Common build errors:",{"type":46,"tag":77,"props":2139,"children":2140},{},[2141,2146,2158],{"type":46,"tag":81,"props":2142,"children":2143},{},[2144],{"type":52,"value":2145},"Missing imports or exports",{"type":46,"tag":81,"props":2147,"children":2148},{},[2149,2151,2156],{"type":52,"value":2150},"Type mismatches (e.g., missing ",{"type":46,"tag":185,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":52,"value":679},{"type":52,"value":2157}," type argument)",{"type":46,"tag":81,"props":2159,"children":2160},{},[2161],{"type":52,"value":2162},"Incorrect workflow composition (async functions, conditionals)",{"type":46,"tag":61,"props":2164,"children":2166},{"id":2165},"next-steps-testing-your-implementation",[2167],{"type":52,"value":2168},"Next Steps - Testing Your Implementation",{"type":46,"tag":55,"props":2170,"children":2171},{},[2172],{"type":46,"tag":71,"props":2173,"children":2174},{},[2175],{"type":52,"value":2176},"After successfully implementing a feature, always provide these next steps to the user:",{"type":46,"tag":576,"props":2178,"children":2180},{"id":2179},"_1-start-the-development-server",[2181],{"type":52,"value":2182},"1. Start the Development Server",{"type":46,"tag":55,"props":2184,"children":2185},{},[2186],{"type":52,"value":2187},"If the server isn't already running, start it:",{"type":46,"tag":298,"props":2189,"children":2191},{"className":2064,"code":2190,"language":2066,"meta":306,"style":306},"npm run dev      # or pnpm dev \u002F yarn dev\n",[2192],{"type":46,"tag":185,"props":2193,"children":2194},{"__ignoreMap":306},[2195],{"type":46,"tag":1137,"props":2196,"children":2197},{"class":1139,"line":1140},[2198,2202,2206,2211],{"type":46,"tag":1137,"props":2199,"children":2200},{"style":2076},[2201],{"type":52,"value":2079},{"type":46,"tag":1137,"props":2203,"children":2204},{"style":1192},[2205],{"type":52,"value":2084},{"type":46,"tag":1137,"props":2207,"children":2208},{"style":1192},[2209],{"type":52,"value":2210}," dev",{"type":46,"tag":1137,"props":2212,"children":2213},{"style":1144},[2214],{"type":52,"value":2215},"      # or pnpm dev \u002F yarn dev\n",{"type":46,"tag":576,"props":2217,"children":2219},{"id":2218},"_2-access-the-admin-dashboard",[2220],{"type":52,"value":2221},"2. Access the Admin Dashboard",{"type":46,"tag":55,"props":2223,"children":2224},{},[2225],{"type":52,"value":2226},"Open your browser and navigate to:",{"type":46,"tag":77,"props":2228,"children":2229},{},[2230],{"type":46,"tag":81,"props":2231,"children":2232},{},[2233,2238,2239],{"type":46,"tag":71,"props":2234,"children":2235},{},[2236],{"type":52,"value":2237},"Admin Dashboard:",{"type":52,"value":1918},{"type":46,"tag":2240,"props":2241,"children":2245},"a",{"href":2242,"rel":2243},"http:\u002F\u002Flocalhost:9000\u002Fapp",[2244],"nofollow",[2246],{"type":52,"value":2242},{"type":46,"tag":55,"props":2248,"children":2249},{},[2250],{"type":52,"value":2251},"Log in with your admin credentials to test any admin-related features.",{"type":46,"tag":576,"props":2253,"children":2255},{"id":2254},"_3-test-api-routes",[2256],{"type":52,"value":2257},"3. Test API Routes",{"type":46,"tag":55,"props":2259,"children":2260},{},[2261],{"type":52,"value":2262},"If you implemented custom API routes, list them for the user to test:",{"type":46,"tag":55,"props":2264,"children":2265},{},[2266],{"type":46,"tag":71,"props":2267,"children":2268},{},[2269],{"type":52,"value":2270},"Admin Routes (require authentication):",{"type":46,"tag":77,"props":2272,"children":2273},{},[2274,2285],{"type":46,"tag":81,"props":2275,"children":2276},{},[2277,2283],{"type":46,"tag":185,"props":2278,"children":2280},{"className":2279},[],[2281],{"type":52,"value":2282},"POST http:\u002F\u002Flocalhost:9000\u002Fadmin\u002F[your-route]",{"type":52,"value":2284}," - Description of what it does",{"type":46,"tag":81,"props":2286,"children":2287},{},[2288,2294],{"type":46,"tag":185,"props":2289,"children":2291},{"className":2290},[],[2292],{"type":52,"value":2293},"GET http:\u002F\u002Flocalhost:9000\u002Fadmin\u002F[your-route]",{"type":52,"value":2284},{"type":46,"tag":55,"props":2296,"children":2297},{},[2298],{"type":46,"tag":71,"props":2299,"children":2300},{},[2301],{"type":52,"value":2302},"Store Routes (public or customer-authenticated):",{"type":46,"tag":77,"props":2304,"children":2305},{},[2306,2316],{"type":46,"tag":81,"props":2307,"children":2308},{},[2309,2315],{"type":46,"tag":185,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":52,"value":2314},"POST http:\u002F\u002Flocalhost:9000\u002Fstore\u002F[your-route]",{"type":52,"value":2284},{"type":46,"tag":81,"props":2317,"children":2318},{},[2319,2325],{"type":46,"tag":185,"props":2320,"children":2322},{"className":2321},[],[2323],{"type":52,"value":2324},"GET http:\u002F\u002Flocalhost:9000\u002Fstore\u002F[your-route]",{"type":52,"value":2284},{"type":46,"tag":55,"props":2327,"children":2328},{},[2329],{"type":46,"tag":71,"props":2330,"children":2331},{},[2332],{"type":52,"value":2333},"Testing with cURL example:",{"type":46,"tag":298,"props":2335,"children":2337},{"className":2064,"code":2336,"language":2066,"meta":306,"style":306},"# Admin route (requires authentication)\ncurl -X POST http:\u002F\u002Flocalhost:9000\u002Fadmin\u002Freviews\u002F123\u002Fapprove \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  --cookie \"connect.sid=YOUR_SESSION_COOKIE\"\n\n# Store route\ncurl -X POST http:\u002F\u002Flocalhost:9000\u002Fstore\u002Freviews \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"product_id\": \"prod_123\", \"rating\": 5, \"comment\": \"Great product!\"}'\n",[2338],{"type":46,"tag":185,"props":2339,"children":2340},{"__ignoreMap":306},[2341,2349,2377,2403,2427,2449,2456,2464,2488,2511],{"type":46,"tag":1137,"props":2342,"children":2343},{"class":1139,"line":1140},[2344],{"type":46,"tag":1137,"props":2345,"children":2346},{"style":1144},[2347],{"type":52,"value":2348},"# Admin route (requires authentication)\n",{"type":46,"tag":1137,"props":2350,"children":2351},{"class":1139,"line":1150},[2352,2357,2362,2367,2372],{"type":46,"tag":1137,"props":2353,"children":2354},{"style":2076},[2355],{"type":52,"value":2356},"curl",{"type":46,"tag":1137,"props":2358,"children":2359},{"style":1192},[2360],{"type":52,"value":2361}," -X",{"type":46,"tag":1137,"props":2363,"children":2364},{"style":1192},[2365],{"type":52,"value":2366}," POST",{"type":46,"tag":1137,"props":2368,"children":2369},{"style":1192},[2370],{"type":52,"value":2371}," http:\u002F\u002Flocalhost:9000\u002Fadmin\u002Freviews\u002F123\u002Fapprove",{"type":46,"tag":1137,"props":2373,"children":2374},{"style":1160},[2375],{"type":52,"value":2376}," \\\n",{"type":46,"tag":1137,"props":2378,"children":2379},{"class":1139,"line":1183},[2380,2385,2390,2395,2399],{"type":46,"tag":1137,"props":2381,"children":2382},{"style":1192},[2383],{"type":52,"value":2384},"  -H",{"type":46,"tag":1137,"props":2386,"children":2387},{"style":1166},[2388],{"type":52,"value":2389}," \"",{"type":46,"tag":1137,"props":2391,"children":2392},{"style":1192},[2393],{"type":52,"value":2394},"Content-Type: application\u002Fjson",{"type":46,"tag":1137,"props":2396,"children":2397},{"style":1166},[2398],{"type":52,"value":1200},{"type":46,"tag":1137,"props":2400,"children":2401},{"style":1160},[2402],{"type":52,"value":2376},{"type":46,"tag":1137,"props":2404,"children":2405},{"class":1139,"line":1208},[2406,2410,2414,2419,2423],{"type":46,"tag":1137,"props":2407,"children":2408},{"style":1192},[2409],{"type":52,"value":2384},{"type":46,"tag":1137,"props":2411,"children":2412},{"style":1166},[2413],{"type":52,"value":2389},{"type":46,"tag":1137,"props":2415,"children":2416},{"style":1192},[2417],{"type":52,"value":2418},"Authorization: Bearer YOUR_TOKEN",{"type":46,"tag":1137,"props":2420,"children":2421},{"style":1166},[2422],{"type":52,"value":1200},{"type":46,"tag":1137,"props":2424,"children":2425},{"style":1160},[2426],{"type":52,"value":2376},{"type":46,"tag":1137,"props":2428,"children":2429},{"class":1139,"line":1242},[2430,2435,2439,2444],{"type":46,"tag":1137,"props":2431,"children":2432},{"style":1192},[2433],{"type":52,"value":2434},"  --cookie",{"type":46,"tag":1137,"props":2436,"children":2437},{"style":1166},[2438],{"type":52,"value":2389},{"type":46,"tag":1137,"props":2440,"children":2441},{"style":1192},[2442],{"type":52,"value":2443},"connect.sid=YOUR_SESSION_COOKIE",{"type":46,"tag":1137,"props":2445,"children":2446},{"style":1166},[2447],{"type":52,"value":2448},"\"\n",{"type":46,"tag":1137,"props":2450,"children":2451},{"class":1139,"line":1286},[2452],{"type":46,"tag":1137,"props":2453,"children":2454},{"emptyLinePlaceholder":1341},[2455],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2457,"children":2458},{"class":1139,"line":1320},[2459],{"type":46,"tag":1137,"props":2460,"children":2461},{"style":1144},[2462],{"type":52,"value":2463},"# Store route\n",{"type":46,"tag":1137,"props":2465,"children":2466},{"class":1139,"line":1329},[2467,2471,2475,2479,2484],{"type":46,"tag":1137,"props":2468,"children":2469},{"style":2076},[2470],{"type":52,"value":2356},{"type":46,"tag":1137,"props":2472,"children":2473},{"style":1192},[2474],{"type":52,"value":2361},{"type":46,"tag":1137,"props":2476,"children":2477},{"style":1192},[2478],{"type":52,"value":2366},{"type":46,"tag":1137,"props":2480,"children":2481},{"style":1192},[2482],{"type":52,"value":2483}," http:\u002F\u002Flocalhost:9000\u002Fstore\u002Freviews",{"type":46,"tag":1137,"props":2485,"children":2486},{"style":1160},[2487],{"type":52,"value":2376},{"type":46,"tag":1137,"props":2489,"children":2490},{"class":1139,"line":1337},[2491,2495,2499,2503,2507],{"type":46,"tag":1137,"props":2492,"children":2493},{"style":1192},[2494],{"type":52,"value":2384},{"type":46,"tag":1137,"props":2496,"children":2497},{"style":1166},[2498],{"type":52,"value":2389},{"type":46,"tag":1137,"props":2500,"children":2501},{"style":1192},[2502],{"type":52,"value":2394},{"type":46,"tag":1137,"props":2504,"children":2505},{"style":1166},[2506],{"type":52,"value":1200},{"type":46,"tag":1137,"props":2508,"children":2509},{"style":1160},[2510],{"type":52,"value":2376},{"type":46,"tag":1137,"props":2512,"children":2513},{"class":1139,"line":1347},[2514,2519,2524,2529],{"type":46,"tag":1137,"props":2515,"children":2516},{"style":1192},[2517],{"type":52,"value":2518},"  -d",{"type":46,"tag":1137,"props":2520,"children":2521},{"style":1166},[2522],{"type":52,"value":2523}," '",{"type":46,"tag":1137,"props":2525,"children":2526},{"style":1192},[2527],{"type":52,"value":2528},"{\"product_id\": \"prod_123\", \"rating\": 5, \"comment\": \"Great product!\"}",{"type":46,"tag":1137,"props":2530,"children":2531},{"style":1166},[2532],{"type":52,"value":2533},"'\n",{"type":46,"tag":576,"props":2535,"children":2537},{"id":2536},"_4-additional-testing-steps",[2538],{"type":52,"value":2539},"4. Additional Testing Steps",{"type":46,"tag":55,"props":2541,"children":2542},{},[2543],{"type":52,"value":2544},"Depending on what was implemented, mention:",{"type":46,"tag":77,"props":2546,"children":2547},{},[2548,2558,2568],{"type":46,"tag":81,"props":2549,"children":2550},{},[2551,2556],{"type":46,"tag":71,"props":2552,"children":2553},{},[2554],{"type":52,"value":2555},"Workflows:",{"type":52,"value":2557}," Test mutation operations and verify rollback on errors",{"type":46,"tag":81,"props":2559,"children":2560},{},[2561,2566],{"type":46,"tag":71,"props":2562,"children":2563},{},[2564],{"type":52,"value":2565},"Subscribers:",{"type":52,"value":2567}," Trigger events and check logs for subscriber execution",{"type":46,"tag":81,"props":2569,"children":2570},{},[2571,2576],{"type":46,"tag":71,"props":2572,"children":2573},{},[2574],{"type":52,"value":2575},"Scheduled jobs:",{"type":52,"value":2577}," Wait for job execution or check logs for cron output",{"type":46,"tag":576,"props":2579,"children":2581},{"id":2580},"format-for-presenting-next-steps",[2582],{"type":52,"value":2583},"Format for Presenting Next Steps",{"type":46,"tag":55,"props":2585,"children":2586},{},[2587],{"type":52,"value":2588},"Always present next steps in a clear, actionable format after implementation:",{"type":46,"tag":298,"props":2590,"children":2594},{"className":2591,"code":2592,"language":2593,"meta":306,"style":306},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Implementation Complete\n\nThe [feature name] has been successfully implemented. Here's how to test it:\n\n### Start the Development Server\n[server start command based on package manager]\n\n### Access the Admin Dashboard\nOpen http:\u002F\u002Flocalhost:9000\u002Fapp in your browser\n\n### Test the API Routes\nI've added the following routes:\n\n**Admin Routes:**\n- POST \u002Fadmin\u002F[route] - [description]\n- GET \u002Fadmin\u002F[route] - [description]\n\n**Store Routes:**\n- POST \u002Fstore\u002F[route] - [description]\n\n### What to Test\n1. [Specific test case 1]\n2. [Specific test case 2]\n3. [Specific test case 3]\n","markdown",[2595],{"type":46,"tag":185,"props":2596,"children":2597},{"__ignoreMap":306},[2598,2611,2618,2626,2633,2646,2654,2661,2673,2681,2688,2700,2708,2715,2735,2781,2821,2828,2844,2885,2893,2906,2920,2934],{"type":46,"tag":1137,"props":2599,"children":2600},{"class":1139,"line":1140},[2601,2606],{"type":46,"tag":1137,"props":2602,"children":2603},{"style":1166},[2604],{"type":52,"value":2605},"## ",{"type":46,"tag":1137,"props":2607,"children":2608},{"style":2076},[2609],{"type":52,"value":2610},"Implementation Complete\n",{"type":46,"tag":1137,"props":2612,"children":2613},{"class":1139,"line":1150},[2614],{"type":46,"tag":1137,"props":2615,"children":2616},{"emptyLinePlaceholder":1341},[2617],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2619,"children":2620},{"class":1139,"line":1183},[2621],{"type":46,"tag":1137,"props":2622,"children":2623},{"style":1160},[2624],{"type":52,"value":2625},"The [feature name] has been successfully implemented. Here's how to test it:\n",{"type":46,"tag":1137,"props":2627,"children":2628},{"class":1139,"line":1208},[2629],{"type":46,"tag":1137,"props":2630,"children":2631},{"emptyLinePlaceholder":1341},[2632],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2634,"children":2635},{"class":1139,"line":1242},[2636,2641],{"type":46,"tag":1137,"props":2637,"children":2638},{"style":1166},[2639],{"type":52,"value":2640},"### ",{"type":46,"tag":1137,"props":2642,"children":2643},{"style":2076},[2644],{"type":52,"value":2645},"Start the Development Server\n",{"type":46,"tag":1137,"props":2647,"children":2648},{"class":1139,"line":1286},[2649],{"type":46,"tag":1137,"props":2650,"children":2651},{"style":1160},[2652],{"type":52,"value":2653},"[server start command based on package manager]\n",{"type":46,"tag":1137,"props":2655,"children":2656},{"class":1139,"line":1320},[2657],{"type":46,"tag":1137,"props":2658,"children":2659},{"emptyLinePlaceholder":1341},[2660],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2662,"children":2663},{"class":1139,"line":1329},[2664,2668],{"type":46,"tag":1137,"props":2665,"children":2666},{"style":1166},[2667],{"type":52,"value":2640},{"type":46,"tag":1137,"props":2669,"children":2670},{"style":2076},[2671],{"type":52,"value":2672},"Access the Admin Dashboard\n",{"type":46,"tag":1137,"props":2674,"children":2675},{"class":1139,"line":1337},[2676],{"type":46,"tag":1137,"props":2677,"children":2678},{"style":1160},[2679],{"type":52,"value":2680},"Open http:\u002F\u002Flocalhost:9000\u002Fapp in your browser\n",{"type":46,"tag":1137,"props":2682,"children":2683},{"class":1139,"line":1347},[2684],{"type":46,"tag":1137,"props":2685,"children":2686},{"emptyLinePlaceholder":1341},[2687],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2689,"children":2690},{"class":1139,"line":1356},[2691,2695],{"type":46,"tag":1137,"props":2692,"children":2693},{"style":1166},[2694],{"type":52,"value":2640},{"type":46,"tag":1137,"props":2696,"children":2697},{"style":2076},[2698],{"type":52,"value":2699},"Test the API Routes\n",{"type":46,"tag":1137,"props":2701,"children":2702},{"class":1139,"line":1380},[2703],{"type":46,"tag":1137,"props":2704,"children":2705},{"style":1160},[2706],{"type":52,"value":2707},"I've added the following routes:\n",{"type":46,"tag":1137,"props":2709,"children":2710},{"class":1139,"line":1400},[2711],{"type":46,"tag":1137,"props":2712,"children":2713},{"emptyLinePlaceholder":1341},[2714],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2716,"children":2717},{"class":1139,"line":1435},[2718,2724,2730],{"type":46,"tag":1137,"props":2719,"children":2721},{"style":2720},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[2722],{"type":52,"value":2723},"**",{"type":46,"tag":1137,"props":2725,"children":2727},{"style":2726},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[2728],{"type":52,"value":2729},"Admin Routes:",{"type":46,"tag":1137,"props":2731,"children":2732},{"style":2720},[2733],{"type":52,"value":2734},"**\n",{"type":46,"tag":1137,"props":2736,"children":2737},{"class":1139,"line":1477},[2738,2743,2748,2753,2758,2763,2767,2771,2776],{"type":46,"tag":1137,"props":2739,"children":2740},{"style":1166},[2741],{"type":52,"value":2742},"-",{"type":46,"tag":1137,"props":2744,"children":2745},{"style":1160},[2746],{"type":52,"value":2747}," POST \u002Fadmin\u002F",{"type":46,"tag":1137,"props":2749,"children":2750},{"style":1166},[2751],{"type":52,"value":2752},"[",{"type":46,"tag":1137,"props":2754,"children":2755},{"style":1192},[2756],{"type":52,"value":2757},"route",{"type":46,"tag":1137,"props":2759,"children":2760},{"style":1166},[2761],{"type":52,"value":2762},"]",{"type":46,"tag":1137,"props":2764,"children":2765},{"style":1160},[2766],{"type":52,"value":866},{"type":46,"tag":1137,"props":2768,"children":2769},{"style":1166},[2770],{"type":52,"value":2752},{"type":46,"tag":1137,"props":2772,"children":2773},{"style":1192},[2774],{"type":52,"value":2775},"description",{"type":46,"tag":1137,"props":2777,"children":2778},{"style":1166},[2779],{"type":52,"value":2780},"]\n",{"type":46,"tag":1137,"props":2782,"children":2783},{"class":1139,"line":1528},[2784,2788,2793,2797,2801,2805,2809,2813,2817],{"type":46,"tag":1137,"props":2785,"children":2786},{"style":1166},[2787],{"type":52,"value":2742},{"type":46,"tag":1137,"props":2789,"children":2790},{"style":1160},[2791],{"type":52,"value":2792}," GET \u002Fadmin\u002F",{"type":46,"tag":1137,"props":2794,"children":2795},{"style":1166},[2796],{"type":52,"value":2752},{"type":46,"tag":1137,"props":2798,"children":2799},{"style":1192},[2800],{"type":52,"value":2757},{"type":46,"tag":1137,"props":2802,"children":2803},{"style":1166},[2804],{"type":52,"value":2762},{"type":46,"tag":1137,"props":2806,"children":2807},{"style":1160},[2808],{"type":52,"value":866},{"type":46,"tag":1137,"props":2810,"children":2811},{"style":1166},[2812],{"type":52,"value":2752},{"type":46,"tag":1137,"props":2814,"children":2815},{"style":1192},[2816],{"type":52,"value":2775},{"type":46,"tag":1137,"props":2818,"children":2819},{"style":1166},[2820],{"type":52,"value":2780},{"type":46,"tag":1137,"props":2822,"children":2823},{"class":1139,"line":1556},[2824],{"type":46,"tag":1137,"props":2825,"children":2826},{"emptyLinePlaceholder":1341},[2827],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2829,"children":2830},{"class":1139,"line":1564},[2831,2835,2840],{"type":46,"tag":1137,"props":2832,"children":2833},{"style":2720},[2834],{"type":52,"value":2723},{"type":46,"tag":1137,"props":2836,"children":2837},{"style":2726},[2838],{"type":52,"value":2839},"Store Routes:",{"type":46,"tag":1137,"props":2841,"children":2842},{"style":2720},[2843],{"type":52,"value":2734},{"type":46,"tag":1137,"props":2845,"children":2847},{"class":1139,"line":2846},19,[2848,2852,2857,2861,2865,2869,2873,2877,2881],{"type":46,"tag":1137,"props":2849,"children":2850},{"style":1166},[2851],{"type":52,"value":2742},{"type":46,"tag":1137,"props":2853,"children":2854},{"style":1160},[2855],{"type":52,"value":2856}," POST \u002Fstore\u002F",{"type":46,"tag":1137,"props":2858,"children":2859},{"style":1166},[2860],{"type":52,"value":2752},{"type":46,"tag":1137,"props":2862,"children":2863},{"style":1192},[2864],{"type":52,"value":2757},{"type":46,"tag":1137,"props":2866,"children":2867},{"style":1166},[2868],{"type":52,"value":2762},{"type":46,"tag":1137,"props":2870,"children":2871},{"style":1160},[2872],{"type":52,"value":866},{"type":46,"tag":1137,"props":2874,"children":2875},{"style":1166},[2876],{"type":52,"value":2752},{"type":46,"tag":1137,"props":2878,"children":2879},{"style":1192},[2880],{"type":52,"value":2775},{"type":46,"tag":1137,"props":2882,"children":2883},{"style":1166},[2884],{"type":52,"value":2780},{"type":46,"tag":1137,"props":2886,"children":2888},{"class":1139,"line":2887},20,[2889],{"type":46,"tag":1137,"props":2890,"children":2891},{"emptyLinePlaceholder":1341},[2892],{"type":52,"value":1344},{"type":46,"tag":1137,"props":2894,"children":2896},{"class":1139,"line":2895},21,[2897,2901],{"type":46,"tag":1137,"props":2898,"children":2899},{"style":1166},[2900],{"type":52,"value":2640},{"type":46,"tag":1137,"props":2902,"children":2903},{"style":2076},[2904],{"type":52,"value":2905},"What to Test\n",{"type":46,"tag":1137,"props":2907,"children":2909},{"class":1139,"line":2908},22,[2910,2915],{"type":46,"tag":1137,"props":2911,"children":2912},{"style":1166},[2913],{"type":52,"value":2914},"1.",{"type":46,"tag":1137,"props":2916,"children":2917},{"style":1160},[2918],{"type":52,"value":2919}," [Specific test case 1]\n",{"type":46,"tag":1137,"props":2921,"children":2923},{"class":1139,"line":2922},23,[2924,2929],{"type":46,"tag":1137,"props":2925,"children":2926},{"style":1166},[2927],{"type":52,"value":2928},"2.",{"type":46,"tag":1137,"props":2930,"children":2931},{"style":1160},[2932],{"type":52,"value":2933}," [Specific test case 2]\n",{"type":46,"tag":1137,"props":2935,"children":2936},{"class":1139,"line":28},[2937,2942],{"type":46,"tag":1137,"props":2938,"children":2939},{"style":1166},[2940],{"type":52,"value":2941},"3.",{"type":46,"tag":1137,"props":2943,"children":2944},{"style":1160},[2945],{"type":52,"value":2946}," [Specific test case 3]\n",{"type":46,"tag":61,"props":2948,"children":2950},{"id":2949},"how-to-use",[2951],{"type":52,"value":2952},"How to Use",{"type":46,"tag":55,"props":2954,"children":2955},{},[2956],{"type":46,"tag":71,"props":2957,"children":2958},{},[2959],{"type":52,"value":2960},"For detailed patterns and examples, load reference files:",{"type":46,"tag":298,"props":2962,"children":2965},{"className":2963,"code":2964,"language":52},[301],"reference\u002Fcustom-modules.md    - Creating modules with data models\nreference\u002Fworkflows.md          - Workflow creation and step patterns\nreference\u002Fapi-routes.md         - API route structure and validation\nreference\u002Fmodule-links.md       - Linking entities across modules\nreference\u002Fquerying-data.md      - Query patterns and filtering rules\nreference\u002Fauthentication.md     - Protecting routes and accessing users\nreference\u002Ferror-handling.md     - MedusaError types and patterns\nreference\u002Fscheduled-jobs.md     - Cron jobs and periodic tasks\nreference\u002Fsubscribers-and-events.md - Event handling\nreference\u002Ftroubleshooting.md    - Common errors and solutions\n",[2966],{"type":46,"tag":185,"props":2967,"children":2968},{"__ignoreMap":306},[2969],{"type":52,"value":2964},{"type":46,"tag":55,"props":2971,"children":2972},{},[2973],{"type":52,"value":2974},"Each reference file contains:",{"type":46,"tag":77,"props":2976,"children":2977},{},[2978,2983,2988,2993],{"type":46,"tag":81,"props":2979,"children":2980},{},[2981],{"type":52,"value":2982},"Step-by-step implementation checklists",{"type":46,"tag":81,"props":2984,"children":2985},{},[2986],{"type":52,"value":2987},"Correct vs incorrect code examples",{"type":46,"tag":81,"props":2989,"children":2990},{},[2991],{"type":52,"value":2992},"TypeScript patterns and type safety",{"type":46,"tag":81,"props":2994,"children":2995},{},[2996],{"type":52,"value":2997},"Common pitfalls and solutions",{"type":46,"tag":61,"props":2999,"children":3001},{"id":3000},"when-to-use-this-skill-vs-medusadocs-mcp-server",[3002],{"type":52,"value":3003},"When to Use This Skill vs MedusaDocs MCP Server",{"type":46,"tag":55,"props":3005,"children":3006},{},[3007],{"type":46,"tag":71,"props":3008,"children":3009},{},[3010],{"type":52,"value":3011},"⚠️ CRITICAL: This skill should be consulted FIRST for planning and implementation.",{"type":46,"tag":55,"props":3013,"children":3014},{},[3015],{"type":46,"tag":71,"props":3016,"children":3017},{},[3018],{"type":52,"value":3019},"Use this skill for (PRIMARY SOURCE):",{"type":46,"tag":77,"props":3021,"children":3022},{},[3023,3033,3043,3053,3063],{"type":46,"tag":81,"props":3024,"children":3025},{},[3026,3031],{"type":46,"tag":71,"props":3027,"children":3028},{},[3029],{"type":52,"value":3030},"Planning",{"type":52,"value":3032}," - Understanding how to structure Medusa backend features",{"type":46,"tag":81,"props":3034,"children":3035},{},[3036,3041],{"type":46,"tag":71,"props":3037,"children":3038},{},[3039],{"type":52,"value":3040},"Architecture",{"type":52,"value":3042}," - Module → Workflow → API Route patterns",{"type":46,"tag":81,"props":3044,"children":3045},{},[3046,3051],{"type":46,"tag":71,"props":3047,"children":3048},{},[3049],{"type":52,"value":3050},"Best practices",{"type":52,"value":3052}," - Correct vs incorrect code patterns",{"type":46,"tag":81,"props":3054,"children":3055},{},[3056,3061],{"type":46,"tag":71,"props":3057,"children":3058},{},[3059],{"type":52,"value":3060},"Critical rules",{"type":52,"value":3062}," - What NOT to do (common mistakes and anti-patterns)",{"type":46,"tag":81,"props":3064,"children":3065},{},[3066,3071],{"type":46,"tag":71,"props":3067,"children":3068},{},[3069],{"type":52,"value":3070},"Implementation patterns",{"type":52,"value":3072}," - Step-by-step guides with checklists",{"type":46,"tag":55,"props":3074,"children":3075},{},[3076],{"type":46,"tag":71,"props":3077,"children":3078},{},[3079],{"type":52,"value":3080},"Use MedusaDocs MCP server for (SECONDARY SOURCE):",{"type":46,"tag":77,"props":3082,"children":3083},{},[3084,3089,3094,3099],{"type":46,"tag":81,"props":3085,"children":3086},{},[3087],{"type":52,"value":3088},"Specific method signatures after you know which method to use",{"type":46,"tag":81,"props":3090,"children":3091},{},[3092],{"type":52,"value":3093},"Built-in module configuration options",{"type":46,"tag":81,"props":3095,"children":3096},{},[3097],{"type":52,"value":3098},"Official type definitions",{"type":46,"tag":81,"props":3100,"children":3101},{},[3102],{"type":52,"value":3103},"Framework-level configuration details",{"type":46,"tag":55,"props":3105,"children":3106},{},[3107],{"type":46,"tag":71,"props":3108,"children":3109},{},[3110],{"type":52,"value":3111},"Why skills come first:",{"type":46,"tag":77,"props":3113,"children":3114},{},[3115,3120,3125],{"type":46,"tag":81,"props":3116,"children":3117},{},[3118],{"type":52,"value":3119},"Skills contain opinionated guidance and anti-patterns MCP doesn't have",{"type":46,"tag":81,"props":3121,"children":3122},{},[3123],{"type":52,"value":3124},"Skills show architectural patterns needed for planning",{"type":46,"tag":81,"props":3126,"children":3127},{},[3128],{"type":52,"value":3129},"MCP is reference material; skills are prescriptive guidance",{"type":46,"tag":61,"props":3131,"children":3133},{"id":3132},"integration-with-frontend-applications",[3134],{"type":52,"value":3135},"Integration with Frontend Applications",{"type":46,"tag":55,"props":3137,"children":3138},{},[3139],{"type":46,"tag":71,"props":3140,"children":3141},{},[3142],{"type":52,"value":3143},"⚠️ CRITICAL: Frontend applications MUST use the Medusa JS SDK for ALL API requests",{"type":46,"tag":55,"props":3145,"children":3146},{},[3147],{"type":52,"value":3148},"When building features that span backend and frontend:",{"type":46,"tag":55,"props":3150,"children":3151},{},[3152],{"type":46,"tag":71,"props":3153,"children":3154},{},[3155],{"type":52,"value":3156},"For Admin Dashboard:",{"type":46,"tag":2107,"props":3158,"children":3159},{},[3160,3170,3188],{"type":46,"tag":81,"props":3161,"children":3162},{},[3163,3168],{"type":46,"tag":71,"props":3164,"children":3165},{},[3166],{"type":52,"value":3167},"Backend (this skill):",{"type":52,"value":3169}," Module → Workflow → API Route",{"type":46,"tag":81,"props":3171,"children":3172},{},[3173,3178,3180,3186],{"type":46,"tag":71,"props":3174,"children":3175},{},[3176],{"type":52,"value":3177},"Frontend:",{"type":52,"value":3179}," Load ",{"type":46,"tag":185,"props":3181,"children":3183},{"className":3182},[],[3184],{"type":52,"value":3185},"building-admin-dashboard-customizations",{"type":52,"value":3187}," skill",{"type":46,"tag":81,"props":3189,"children":3190},{},[3191,3196],{"type":46,"tag":71,"props":3192,"children":3193},{},[3194],{"type":52,"value":3195},"Connection:",{"type":46,"tag":77,"props":3197,"children":3198},{},[3199,3211,3222],{"type":46,"tag":81,"props":3200,"children":3201},{},[3202,3204,3210],{"type":52,"value":3203},"Built-in endpoints: Use existing SDK methods (",{"type":46,"tag":185,"props":3205,"children":3207},{"className":3206},[],[3208],{"type":52,"value":3209},"sdk.admin.product.list()",{"type":52,"value":713},{"type":46,"tag":81,"props":3212,"children":3213},{},[3214,3216],{"type":52,"value":3215},"Custom API routes: Use ",{"type":46,"tag":185,"props":3217,"children":3219},{"className":3218},[],[3220],{"type":52,"value":3221},"sdk.client.fetch(\"\u002Fadmin\u002Fmy-route\")",{"type":46,"tag":81,"props":3223,"children":3224},{},[3225,3230],{"type":46,"tag":71,"props":3226,"children":3227},{},[3228],{"type":52,"value":3229},"NEVER use regular fetch()",{"type":52,"value":3231}," - missing auth headers will cause errors",{"type":46,"tag":55,"props":3233,"children":3234},{},[3235],{"type":46,"tag":71,"props":3236,"children":3237},{},[3238],{"type":52,"value":3239},"For Storefronts:",{"type":46,"tag":2107,"props":3241,"children":3242},{},[3243,3251,3266],{"type":46,"tag":81,"props":3244,"children":3245},{},[3246,3250],{"type":46,"tag":71,"props":3247,"children":3248},{},[3249],{"type":52,"value":3167},{"type":52,"value":3169},{"type":46,"tag":81,"props":3252,"children":3253},{},[3254,3258,3259,3265],{"type":46,"tag":71,"props":3255,"children":3256},{},[3257],{"type":52,"value":3177},{"type":52,"value":3179},{"type":46,"tag":185,"props":3260,"children":3262},{"className":3261},[],[3263],{"type":52,"value":3264},"building-storefronts",{"type":52,"value":3187},{"type":46,"tag":81,"props":3267,"children":3268},{},[3269,3273],{"type":46,"tag":71,"props":3270,"children":3271},{},[3272],{"type":52,"value":3195},{"type":46,"tag":77,"props":3274,"children":3275},{},[3276,3287,3297],{"type":46,"tag":81,"props":3277,"children":3278},{},[3279,3280,3286],{"type":52,"value":3203},{"type":46,"tag":185,"props":3281,"children":3283},{"className":3282},[],[3284],{"type":52,"value":3285},"sdk.store.product.list()",{"type":52,"value":713},{"type":46,"tag":81,"props":3288,"children":3289},{},[3290,3291],{"type":52,"value":3215},{"type":46,"tag":185,"props":3292,"children":3294},{"className":3293},[],[3295],{"type":52,"value":3296},"sdk.client.fetch(\"\u002Fstore\u002Fmy-route\")",{"type":46,"tag":81,"props":3298,"children":3299},{},[3300,3304],{"type":46,"tag":71,"props":3301,"children":3302},{},[3303],{"type":52,"value":3229},{"type":52,"value":3305}," - missing publishable API key will cause errors",{"type":46,"tag":55,"props":3307,"children":3308},{},[3309],{"type":46,"tag":71,"props":3310,"children":3311},{},[3312],{"type":52,"value":3313},"Why the SDK is required:",{"type":46,"tag":77,"props":3315,"children":3316},{},[3317,3330,3343,3348],{"type":46,"tag":81,"props":3318,"children":3319},{},[3320,3322,3328],{"type":52,"value":3321},"Store routes need ",{"type":46,"tag":185,"props":3323,"children":3325},{"className":3324},[],[3326],{"type":52,"value":3327},"x-publishable-api-key",{"type":52,"value":3329}," header",{"type":46,"tag":81,"props":3331,"children":3332},{},[3333,3335,3341],{"type":52,"value":3334},"Admin routes need ",{"type":46,"tag":185,"props":3336,"children":3338},{"className":3337},[],[3339],{"type":52,"value":3340},"Authorization",{"type":52,"value":3342}," and session headers",{"type":46,"tag":81,"props":3344,"children":3345},{},[3346],{"type":52,"value":3347},"SDK handles all required headers automatically",{"type":46,"tag":81,"props":3349,"children":3350},{},[3351],{"type":52,"value":3352},"Regular fetch() without headers → authentication\u002Fauthorization errors",{"type":46,"tag":55,"props":3354,"children":3355},{},[3356],{"type":52,"value":3357},"See respective frontend skills for complete integration patterns.",{"type":46,"tag":3359,"props":3360,"children":3361},"style",{},[3362],{"type":52,"value":3363},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3365,"total":1556},[3366,3380,3395,3402,3414,3429,3439,3452,3469,3481,3494,3507],{"slug":3185,"name":3185,"fn":3367,"description":3368,"org":3369,"tags":3370,"stars":24,"repoUrl":25,"updatedAt":3379},"customize Medusa Admin dashboard UI","Load automatically when planning, researching, or implementing Medusa Admin dashboard UI (widgets, custom pages, forms, tables, data loading, navigation). REQUIRED for all admin UI work in ALL modes (planning, implementation, exploration). Contains design patterns, component usage, and data loading patterns that MCP servers don't provide.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3371,3372,3375,3376],{"name":19,"slug":20,"type":16},{"name":3373,"slug":3374,"type":16},"Frontend","frontend",{"name":9,"slug":8,"type":16},{"name":3377,"slug":3378,"type":16},"UI Components","ui-components","2026-04-06T18:29:57.203659",{"slug":3264,"name":3264,"fn":3381,"description":3382,"org":3383,"tags":3384,"stars":24,"repoUrl":25,"updatedAt":3394},"implement Medusa storefront features","Load automatically when planning, researching, or implementing Medusa storefront features (calling custom API routes, SDK integration, React Query patterns, data fetching). REQUIRED for all storefront development in ALL modes (planning, implementation, exploration). Contains SDK usage patterns, frontend integration, and critical rules for calling Medusa APIs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3385,3386,3389,3390,3391],{"name":19,"slug":20,"type":16},{"name":3387,"slug":3388,"type":16},"Engineering","engineering",{"name":3373,"slug":3374,"type":16},{"name":9,"slug":8,"type":16},{"name":3392,"slug":3393,"type":16},"React","react","2026-04-06T18:29:55.957429",{"slug":4,"name":4,"fn":5,"description":6,"org":3396,"tags":3397,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3398,3399,3400,3401],{"name":14,"slug":15,"type":16},{"name":22,"slug":23,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3403,"name":3403,"fn":3404,"description":3405,"org":3406,"tags":3407,"stars":24,"repoUrl":25,"updatedAt":3413},"creating-agents-in-medusa","build admin-facing AI agents in Medusa","Use when building an internal admin-facing AI agent in a Medusa project. These agents are operated by merchants and store operators — not customers. Covers data models, module service, agent runtime (tools, system prompt, streamText), streaming API routes (NDJSON), and admin UI chat extensions. Load for any internal agent type: store operations assistant, product audit, cohort analysis, customer service tooling for support staff, etc. Do NOT use for customer-facing agents (storefront chatbots, buyer-side assistants).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3408,3411,3412],{"name":3409,"slug":3410,"type":16},"Agents","agents",{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-14T05:42:09.367168",{"slug":3415,"name":3415,"fn":3416,"description":3417,"org":3418,"tags":3419,"stars":24,"repoUrl":25,"updatedAt":3428},"db-generate","generate database migrations for Medusa modules","Generate database migrations for a Medusa module",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3420,3421,3424,3425],{"name":14,"slug":15,"type":16},{"name":3422,"slug":3423,"type":16},"Database","database",{"name":9,"slug":8,"type":16},{"name":3426,"slug":3427,"type":16},"Migration","migration","2026-04-06T18:29:53.415671",{"slug":3430,"name":3430,"fn":3431,"description":3432,"org":3433,"tags":3434,"stars":24,"repoUrl":25,"updatedAt":3438},"db-migrate","run database migrations in Medusa","Run database migrations in Medusa",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3435,3436,3437],{"name":3422,"slug":3423,"type":16},{"name":9,"slug":8,"type":16},{"name":3426,"slug":3427,"type":16},"2026-04-06T18:29:52.187377",{"slug":3440,"name":3440,"fn":3441,"description":3442,"org":3443,"tags":3444,"stars":24,"repoUrl":25,"updatedAt":3451},"learning-medusa","guide Medusa development learning","Load automatically when user asks to learn Medusa development (e.g., \"teach me how to build with medusa\", \"guide me through medusa\", \"I want to learn medusa\"). Interactive guided tutorial where Claude acts as a coding bootcamp instructor, teaching step-by-step with checkpoints and verification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3445,3446,3447,3448],{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"name":3449,"slug":3450,"type":16},"Templates","templates","2026-04-06T18:29:58.461689",{"slug":3453,"name":3453,"fn":3454,"description":3455,"org":3456,"tags":3457,"stars":24,"repoUrl":25,"updatedAt":3468},"mcloud-deployments","manage Medusa Cloud deployments","Execute mcloud deployments commands to list deployments, retrieve deployment details, and fetch build logs. Use when listing deployments, checking deployment status, or reading build output for debugging build failures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3458,3461,3464,3465],{"name":3459,"slug":3460,"type":16},"Deployment","deployment",{"name":3462,"slug":3463,"type":16},"Logs","logs",{"name":9,"slug":8,"type":16},{"name":3466,"slug":3467,"type":16},"Observability","observability","2026-05-09T05:40:51.727369",{"slug":3470,"name":3470,"fn":3471,"description":3472,"org":3473,"tags":3474,"stars":24,"repoUrl":25,"updatedAt":3480},"mcloud-environments","manage Medusa Cloud environments","Execute mcloud environments commands to list, get, create, delete, redeploy, or trigger builds for Cloud environments. Use when managing environment lifecycle, redeploying after variable changes, or starting new builds from source.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3475,3476,3477],{"name":3459,"slug":3460,"type":16},{"name":9,"slug":8,"type":16},{"name":3478,"slug":3479,"type":16},"Operations","operations","2026-07-17T05:31:36.384292",{"slug":3482,"name":3482,"fn":3483,"description":3484,"org":3485,"tags":3486,"stars":24,"repoUrl":25,"updatedAt":3493},"mcloud-local","reproduce Cloud builds locally","Execute mcloud local build to reproduce a Cloud build on the local machine. Use when debugging a build-failed deployment without pushing to the tracked branch, iterating on a build fix, or testing build-variable changes locally. Requires Docker and must run inside the project's Git repo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3487,3490,3491,3492],{"name":3488,"slug":3489,"type":16},"Debugging","debugging",{"name":3459,"slug":3460,"type":16},{"name":3387,"slug":3388,"type":16},{"name":9,"slug":8,"type":16},"2026-07-17T06:05:07.199529",{"slug":3495,"name":3495,"fn":3496,"description":3497,"org":3498,"tags":3499,"stars":24,"repoUrl":25,"updatedAt":3506},"mcloud-logs","fetch and stream runtime cloud logs","Execute mcloud logs to fetch and stream runtime logs for Cloud environments. Use when reading backend or storefront logs, filtering by time range, searching for errors, or scoping logs to a specific deployment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3500,3503,3504,3505],{"name":3501,"slug":3502,"type":16},"Cloud","cloud",{"name":3462,"slug":3463,"type":16},{"name":9,"slug":8,"type":16},{"name":3466,"slug":3467,"type":16},"2026-05-09T05:40:46.707854",{"slug":3508,"name":3508,"fn":3509,"description":3510,"org":3511,"tags":3512,"stars":24,"repoUrl":25,"updatedAt":3515},"mcloud-organizations","manage Medusa Cloud organizations","Execute mcloud organizations commands to list or get Cloud organizations. Use when discovering organizations, resolving organization IDs by name, or retrieving organization details including members and subscription.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3513,3514],{"name":9,"slug":8,"type":16},{"name":3478,"slug":3479,"type":16},"2026-05-09T05:40:54.327722",{"items":3517,"total":1556},[3518,3525,3533,3540,3546,3553,3559],{"slug":3185,"name":3185,"fn":3367,"description":3368,"org":3519,"tags":3520,"stars":24,"repoUrl":25,"updatedAt":3379},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3521,3522,3523,3524],{"name":19,"slug":20,"type":16},{"name":3373,"slug":3374,"type":16},{"name":9,"slug":8,"type":16},{"name":3377,"slug":3378,"type":16},{"slug":3264,"name":3264,"fn":3381,"description":3382,"org":3526,"tags":3527,"stars":24,"repoUrl":25,"updatedAt":3394},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3528,3529,3530,3531,3532],{"name":19,"slug":20,"type":16},{"name":3387,"slug":3388,"type":16},{"name":3373,"slug":3374,"type":16},{"name":9,"slug":8,"type":16},{"name":3392,"slug":3393,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":3534,"tags":3535,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3536,3537,3538,3539],{"name":14,"slug":15,"type":16},{"name":22,"slug":23,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"slug":3403,"name":3403,"fn":3404,"description":3405,"org":3541,"tags":3542,"stars":24,"repoUrl":25,"updatedAt":3413},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3543,3544,3545],{"name":3409,"slug":3410,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"slug":3415,"name":3415,"fn":3416,"description":3417,"org":3547,"tags":3548,"stars":24,"repoUrl":25,"updatedAt":3428},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3549,3550,3551,3552],{"name":14,"slug":15,"type":16},{"name":3422,"slug":3423,"type":16},{"name":9,"slug":8,"type":16},{"name":3426,"slug":3427,"type":16},{"slug":3430,"name":3430,"fn":3431,"description":3432,"org":3554,"tags":3555,"stars":24,"repoUrl":25,"updatedAt":3438},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3556,3557,3558],{"name":3422,"slug":3423,"type":16},{"name":9,"slug":8,"type":16},{"name":3426,"slug":3427,"type":16},{"slug":3440,"name":3440,"fn":3441,"description":3442,"org":3560,"tags":3561,"stars":24,"repoUrl":25,"updatedAt":3451},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3562,3563,3564,3565],{"name":14,"slug":15,"type":16},{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},{"name":3449,"slug":3450,"type":16}]