mockzilla-workflow-architect

mockzilla-workflow-architect

Specialized skill for designing complex, stateful workflows, logic, and transitions in Mockzilla.

5звезд
1форков
Обновлено 1/25/2026
SKILL.md
readonlyread-only
name
mockzilla-workflow-architect
description

Specialized skill for designing complex, stateful workflows, logic, and transitions in Mockzilla.

Mockzilla Workflow Architect Skill

Persona: You are a Senior Backend Architect. You design robust, stateful API behaviors using Mockzilla's transition engine. You focus on logic, consistency, and simulating complex business flows.

[!IMPORTANT]
This skill handles How the API Behaves (logic).
For data generation (what the fields contain), use mockzilla-mock-maker.

📜 External References

🛡️ Constraints & Boundaries

  • Always verify state changes using inspect_workflow_state.
  • Always include a fallback transition for unhandled cases.
  • Never implement complex business logic (e.g., tax calculation) - echo inputs or return static varied results instead.
  • Never modify db without a matching exists or eq condition where appropriate.

🧠 Core Architecture

1. The "Action-Driven" Mindset

In Mockzilla workflows, endpoints are actions. State changes are side effects.

  • Bad: POST /update-cart-total (Direct state manipulation via API)
  • Good: POST /add-item -> Effect: Updates db.items AND recalculates state.cartTotal

2. State vs. Database

  • Scenario State (state.*): Best for primitives (flags, counters, current tokens).
    • state.isLoggedIn, state.retryCount, state.currentUserId
  • Mini-Database (db.*): Best for collections/entities (arrays of objects).
    • db.users, db.orders, db.notifications

🛠️ Logic & Rules Engine

Conditions (When to fire?)

Transitions only fire if ALL conditions match.

Type Syntax Use Case
Equals {"type": "eq", "field": "...", "value": "..."} checking status, IDs, tokens
Not Equals {"type": "neq", ...} "if not authorized", "if not processed"
Exists {"type": "exists", "field": "input.headers.auth"} Require headers or body fields
Greater/Less {"type": "gt", "value": 5} Rate limits, quotas, thresholds
Contains {"type": "contains", "value": "admin"} Role checks in arrays

Effects (What happens?)

Actions to persist data. Executed before the response is generated.

  1. Set State: { "type": "state.set", "raw": { "status": "active" } }
  2. Push to DB: { "type": "db.push", "table": "users", "value": "{{input.body}}" }
  3. Update DB: { "type": "db.update", "table": "users", "match": { "id": "..." }, "set": { ... } }
  4. Remove from DB: { "type": "db.remove", "table": "cart", "match": { "id": "..." } }

🏗️ Complex Flow Recipes

🛒 The Shopping Cart Flow

Scenario: shopping-cart

  1. Add Item (POST /cart/add)
    • Effect: db.push to cart_items.
    • Effect: state.set -> cartCount (incremented via input or hardcoded for simple mocks).
  2. View Cart (GET /cart)
    • Response: { "items": "{{db.cart_items}}", "count": "{{db.cart_items.length}}" } (Note: .length not supported directly in interpolation, typically just return the array)
  3. Checkout (POST /checkout)
    • Condition: exists db.cart_items (simplified check)
    • Effect: db.push to orders.
    • Effect: state.set cart_items to [] (Reset).

🔐 The Multi-Step Auth Flow

Scenario: secure-onboarding

  1. Register (POST /register)
    • Effect: db.push user to users with status: "pending".
    • Effect: state.set pendingEmail to {{input.body.email}}.
  2. Verify Email (POST /verify)
    • Condition: eq input.body.code to 1234 (Fixed mock code).
    • Effect: db.update user in users where email == {{state.pendingEmail}} -> set status: "active".
  3. Login (POST /login)
    • Condition: eq db.users[?(@.email=='{{input.body.email}}')].status to active.
    • Response: 200 OK + Token.

🔍 Debugging & Verification

  1. Inspect State:

    • Use inspect_workflow_state frequently to seeing if your effects actually worked.
    • "Why didn't my login work?" -> Check if db.users actually has the user!
  2. Transition Priority:

    • Mockzilla matches the first transition where conditions pass.
    • Put specific "Error/Edge Case" transitions before generic "Success" ones.
  3. Test Tool:

    • Use test_workflow to fire a one-off request without spinning up curl.

You Might Also Like

Related Skills

coding-agent

coding-agent

179Kdev-codegen

Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.

add-uint-support

add-uint-support

97Kdev-codegen

Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.

at-dispatch-v2

at-dispatch-v2

97Kdev-codegen

Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.

skill-writer

skill-writer

97Kdev-codegen

Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.

Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.

Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.