Agent skill
flow-validation-checklist
Complete migration validation checklist for Flow to Output SDK. Use after migration to verify completeness and correctness.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/flow-validation-checklist-growthxai-output-claude-plugin
SKILL.md
Migration Validation Checklist
Overview
This skill provides a comprehensive checklist to validate a completed Flow to Output SDK migration. Use this after migration to ensure nothing was missed.
When to Use This Skill
After Migration:
- Verifying migration completeness
- Before marking migration as done
- During code review of migrated workflow
Complete Validation Checklist
1. Type Safety
- All step Input/Output interfaces defined in types.ts
- Workflow input/output schemas defined with Zod
- Steps use typed input parameters
- Zod schemas match original type definitions
- All
zimports from@output.ai/core(notzod)
Validation Commands:
bash
# Check for wrong zod imports
grep -r "from 'zod'" src/workflows/my_workflow/
grep -r 'from "zod"' src/workflows/my_workflow/
# Should return nothing - all zod should be from @output.ai/core
bash
# Verify types.ts has Zod schemas
grep -c "z.object" src/workflows/my_workflow/types.ts
2. Template & Prompt Conversion
- All prompts extracted to
.promptfiles - YAML frontmatter includes provider and model
- Template conditionals use Liquid.js (
{% if %}not{{#if}}) - Variable spacing correct (
{{ var }}not{{var}}) - Boolean template variables handled as strings
- Prompt files follow naming convention (
name@version.prompt)
Validation Commands:
bash
# Check for remaining Handlebars syntax
grep -r "{{#if" src/workflows/my_workflow/
grep -r "{{/if}}" src/workflows/my_workflow/
# Should return nothing
bash
# Check for variables without spaces
grep -r "{{[^{]" src/workflows/my_workflow/*.prompt 2>/dev/null | grep -v "{{ "
# Should return nothing - all variables should have spaces
bash
# List all prompt files
ls src/workflows/my_workflow/*.prompt
# Verify frontmatter in each
head -10 src/workflows/my_workflow/*.prompt
3. API & Imports
- All files import
zfrom@output.ai/core -
step()andworkflow()imported from@output.ai/core - LLM calls use
generateText()orgenerateObject()from@output.ai/llm -
ValidationError/FatalErrorimported from@output.ai/core - No leftover Flow SDK imports
Validation Commands:
bash
# Check for Flow SDK imports
grep -r "@flow/sdk" src/workflows/my_workflow/
grep -r "WorkflowScope" src/workflows/my_workflow/
# Should return nothing
bash
# Verify correct imports
grep -r "@output.ai/core" src/workflows/my_workflow/
grep -r "@output.ai/llm" src/workflows/my_workflow/
4. File Structure
-
workflow.tscontains workflow definition withexport default -
steps.tscontains all step definitions -
types.tscontains Input/Output interfaces and Zod schemas - Prompt files named
name@version.prompt - No leftover
activities.ts(renamed tosteps.ts) - No leftover
prompts.tsorprompts.xml - File imports have
.jsextension
Validation Commands:
bash
# Check file structure
ls -la src/workflows/my_workflow/
# Expected files:
# - workflow.ts
# - steps.ts
# - types.ts
# - *.prompt files
# - scenarios/ directory (optional)
bash
# Check for leftover files
ls src/workflows/my_workflow/activities.ts 2>/dev/null
ls src/workflows/my_workflow/prompts.ts 2>/dev/null
ls src/workflows/my_workflow/prompts.xml 2>/dev/null
# Should all return "No such file"
bash
# Check import extensions
grep -r "from './" src/workflows/my_workflow/*.ts | grep -v ".js'"
# Should return nothing - all local imports should end with .js
5. Workflow Definition
- Workflow uses
workflow()function (not class) - Workflow has
nameproperty - Workflow has
descriptionproperty - Workflow uses
export default - Workflow name matches legacy name (if required)
Validation Commands:
bash
# Check workflow definition
grep -A10 "export default workflow" src/workflows/my_workflow/workflow.ts
bash
# Verify no class-based workflow
grep "class.*Workflow" src/workflows/my_workflow/workflow.ts
# Should return nothing
6. Step Definitions
- All activities converted to steps
- Steps use
step()function - Steps have
inputSchemadefined - Steps use object parameters (not direct parameters)
- Step names are descriptive
Validation Commands:
bash
# List all steps
grep "export const.*= step" src/workflows/my_workflow/steps.ts
bash
# Verify inputSchema for each step
grep -c "inputSchema:" src/workflows/my_workflow/steps.ts
7. Error Handling
- No try-catch blocks wrapping step calls in workflow
-
ValidationErrorused for validation failures -
FatalErrorused for unrecoverable errors - Errors propagate naturally (not re-wrapped)
Validation Commands:
bash
# Check for try-catch in workflow
grep -A20 "fn: async" src/workflows/my_workflow/workflow.ts | grep "try {"
# Should return nothing or minimal results
8. Business Logic
- Original workflow logic preserved
- All activities converted to steps
- Parameter passing maintains data flow
- Conditional logic intact
- Loop logic intact
- External API calls preserved
Manual Review:
- Compare step-by-step execution flow
- Verify data transformations
- Check edge case handling
9. ESLint Compliance
-
npm run lintpasses - Single quotes used
- Spaces in brackets and parentheses
- No trailing commas
- Proper line length
Validation Commands:
bash
# Run lint
npm run lint -- src/workflows/my_workflow/
# Should pass with no errors
10. Runtime Validation
- Workflow builds successfully
- Workflow runs with test input
- Output matches expected format
- No runtime errors
Validation Commands:
bash
# Build
npm run output:workflow:build
# Run with test input
npx output workflow run my_workflow --input '{"testKey": "testValue"}'
Quick Validation Script
Run this to check common issues:
bash
#!/bin/bash
WORKFLOW_PATH="src/workflows/my_workflow"
echo "=== Migration Validation ==="
echo -e "\n1. Checking for wrong zod imports..."
grep -r "from 'zod'" $WORKFLOW_PATH && echo "FAIL: Found direct zod imports" || echo "PASS"
echo -e "\n2. Checking for Handlebars syntax..."
grep -r "{{#if" $WORKFLOW_PATH && echo "FAIL: Found Handlebars syntax" || echo "PASS"
echo -e "\n3. Checking for Flow SDK imports..."
grep -r "@flow/sdk" $WORKFLOW_PATH && echo "FAIL: Found Flow SDK imports" || echo "PASS"
echo -e "\n4. Checking for class-based workflow..."
grep "class.*Workflow" $WORKFLOW_PATH/workflow.ts && echo "FAIL: Found class-based workflow" || echo "PASS"
echo -e "\n5. Checking for try-catch in workflow..."
grep -A20 "fn: async" $WORKFLOW_PATH/workflow.ts | grep "try {" && echo "WARN: Found try-catch" || echo "PASS"
echo -e "\n6. Checking import extensions..."
grep "from './" $WORKFLOW_PATH/*.ts | grep -v ".js'" && echo "FAIL: Missing .js extension" || echo "PASS"
echo -e "\n7. Verifying file structure..."
[ -f "$WORKFLOW_PATH/workflow.ts" ] && echo "PASS: workflow.ts exists" || echo "FAIL: workflow.ts missing"
[ -f "$WORKFLOW_PATH/steps.ts" ] && echo "PASS: steps.ts exists" || echo "FAIL: steps.ts missing"
[ -f "$WORKFLOW_PATH/types.ts" ] && echo "PASS: types.ts exists" || echo "FAIL: types.ts missing"
echo -e "\n=== Validation Complete ==="
Related Skills
flow-error-zod-import- Fix zod import issuesflow-error-try-catch-removal- Remove try-catch antipatternflow-error-eslint-compliance- Fix ESLint issuesflow-conventions-folder-structure- Folder structure reference
Didn't find tool you were looking for?