Skip to content

Releases

v0.0.7

Choose a tag to compare

@Kaenn Kaenn released this 31 Jan 03:04

Full Changelog: v0.0.6...v0.0.7

v0.0.6

Choose a tag to compare

@Kaenn Kaenn released this 30 Jan 19:32

Full Changelog: v0.0.5...v0.0.6

v0.0.4

Choose a tag to compare

@Kaenn Kaenn released this 30 Jan 17:34
f70dc9c

What's Changed

Full Changelog: v0.0.3...v0.0.4

v0.0.3

Choose a tag to compare

@Kaenn Kaenn released this 30 Jan 05:38

Full Changelog: v0.0.1...v0.0.3

v0.0.2

Choose a tag to compare

@Kaenn Kaenn released this 30 Jan 05:32

Full Changelog: v0.0.1...v0.0.2

v0.0.1

Choose a tag to compare

@Kaenn Kaenn released this 30 Jan 04:58
d4370db
V1.3 mcp app test (#2)

* docs(quick-002): Phase 14 Output Schema documentation

Quick task completed:
- Updated docs/agent.md with TOutput documentation
- Added PhaseResearcherOutput to gsd-phase-researcher.tsx
- Added SimpleOrchestratorOutput to simple-orchestrator-agent.tsx
- Updated STATE.md with quick task record

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(15): research command output handling phase

Phase 15: Command Output Handling
- useOutput hook pattern documented
- OnStatus component architecture defined
- IR node structure (OnStatusNode) specified
- Emitter output format established
- Field interpolation pattern documented

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(15): create phase plan for Command Output Handling

Phase 15: Command Output Handling
- 3 plan(s) in 3 wave(s)
- Sequential execution (wave dependencies)
- Ready for execution

Plans:
- 15-01: useOutput hook and OutputRef type (JSX layer)
- 15-02: OnStatus component parsing and IR (Parser/IR layer)
- 15-03: Emitter for status-based conditional blocks

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(15-01): add useOutput hook and OnStatus component

- Add OutputRef<T> interface with agent name and typed field() accessor
- Add useOutput<T> hook returning OutputRef for status-based handling
- Add OnStatusProps interface with output and status props
- Add OnStatus component for conditional agent status handling
- Export new types and components from index.ts
- Also add missing If/Else/AgentStatus/BaseOutput exports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(15-01): complete JSX types plan

Tasks completed: 2/2
- Add OutputRef interface and useOutput hook
- Add OnStatus component and props

SUMMARY: .planning/phases/15-command-output-handling/15-01-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(15-02): add OnStatusNode to IR

- Add OutputReference interface for agent output binding
- Add OnStatusNode with outputRef, status, and children fields
- Add OnStatusNode to BlockNode union
- Add emitter stub for OnStatusNode (throws not yet implemented)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(15-02): add transformOnStatus to transformer

- Add OnStatusNode to imports
- Add 'OnStatus' to SPECIAL_COMPONENTS set
- Add outputs map for tracking useOutput declarations
- Add extractOutputDeclarations method to parse useOutput calls
- Add transformOnStatus method with:
  - Output prop extraction and validation (must be identifier from useOutput)
  - Status prop extraction and validation (SUCCESS/BLOCKED/NOT_FOUND/ERROR/CHECKPOINT)
  - Agent name resolution via outputs map
  - Children transformed as block content

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(15-02): complete transformer plan

Tasks completed: 2/2
- Add OnStatusNode to IR
- Add transformOnStatus to transformer

SUMMARY: .planning/phases/15-command-output-handling/15-02-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(15-03): add emitOnStatus to emitter

- Import OnStatusNode type from IR
- Update emitBlock switch to call emitOnStatus
- Add emitOnStatus method following emitIf/emitElse pattern
- Output format: **On {STATUS}:** followed by content

* feat(jsx): add type-safe shell test builder functions

Add helper functions that generate shell test expressions from VariableRef:
- fileExists(varRef) → [ -f $VAR ]
- dirExists(varRef) → [ -d $VAR ]
- isEmpty(varRef) → [ -z $VAR ]
- notEmpty(varRef) → [ -n $VAR ]
- equals(varRef, value) → [ $VAR = value ]
- and(...tests) / or(...tests) → composable operators

Enables type-safe conditional tests instead of raw shell strings:
  <If test={fileExists(outputFile)}>
  vs
  <If test="[ -f $OUTPUT_FILE ]">

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(quick-003): Add type-safe shell test builder functions

Quick task completed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(15-03): add OnStatus usage in plan-phase command

- Add useOutput and OnStatus imports
- Declare researchOutput binding to gsd-phase-researcher
- Add OnStatus blocks for SUCCESS/BLOCKED/ERROR handling
- Fix extractOutputDeclarations to use forEachDescendant
- Add field expression handling in transformToInline

Auto-fixed blocking issues:
- extractOutputDeclarations only found module-level declarations
- transformToInline ignored non-string JSX expressions

* docs(15-03): complete command output handling phase

Tasks completed: 2/2
- Task 1: Add emitOnStatus to emitter
- Task 2: Create test command with OnStatus

SUMMARY: .planning/phases/15-command-output-handling/15-03-SUMMARY.md

Phase 15 complete - v1.5 Command Output Handling ready for release

* docs(15): complete command-output-handling phase

* docs(quick-004): add Handling Agent Output section to communication.md

- Document useOutput hook for typed agent output references
- Document OnStatus component for status-based conditional rendering
- Document output.field() method for compile-time interpolation
- Add complete example showing SpawnAgent + OnStatus pattern
- Update Tips section with OnStatus best practices

* feat(quick-004): add useOutput/OnStatus example to test-simple-orchestrator.tsx

- Import useOutput, OnStatus from jsx.js
- Import SimpleOrchestratorOutput type from agent file
- Add useOutput declaration for agent output tracking
- Add OnStatus handlers for SUCCESS and ERROR states
- Demonstrates pattern alongside existing If/Else conditionals

* docs(quick-004): add OnStatus reference to conditionals.md

- Add 'Related: OnStatus' section after Tips
- Link to communication.md#handling-agent-output
- Add comparison table differentiating If/Else from OnStatus

* docs(quick-004): complete Phase 15 documentation task

Tasks completed: 3/3
- communication.md: Handling Agent Output section
- test-simple-orchestrator.tsx: useOutput/OnStatus example
- conditionals.md: OnStatus reference section

SUMMARY: .planning/quick/004-update-docs-and-tsx-files-for-plan-15-co/004-SUMMARY.md

* docs(quick-004): Docs + TSX updates for Phase 15 output handling

Quick task completed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix

* docs(16): research phase domain for Skill Component

Phase 16: Skill Component
- Standard stack identified (reuse existing deps)
- Architecture patterns documented (SkillDocument IR, multi-file output)
- Pitfalls catalogued (YAML naming, path resolution, validation)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(16): create phase plan

Phase 16: Skill Component
- 5 plans in 4 waves
- Wave 1: IR + JSX types (16-01)
- Wave 2: Transformer (16-02)
- Wave 3: Emitter + build + exports (16-03, 16-04)
- Wave 4: Test + docs (16-05)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(16-01): add Skill IR node types to nodes.ts

- SkillFrontmatterNode: YAML frontmatter for skill metadata
- SkillFileNode: generated files within skill directory
- SkillStaticNode: static file copy instructions
- SkillDocumentNode: document root with frontmatter, children, files, statics
- IRNode union updated to include all new skill types

* feat(16-01): add Skill component exports to jsx.ts

- SkillProps: name, description, disableModelInvocation, userInvocable, allowedTools, argumentHint, model, context, agent
- SkillFileProps: name, children for generated files
- SkillStaticProps: src, dest for static file copying
- Skill(), SkillFile(), SkillStatic() stub functions returning null
- JSDoc documentation with examples following Agent/Command pattern

* docs(16-01): complete IR and JSX foundation plan

Tasks completed: 2/2
- Skill IR node types in nodes.ts
- Skill component exports in jsx.ts

SUMMARY: .planning/phases/16-skill-component/16-01-SUMMARY.md

* feat(16-02): add transformSkill method following transformAgent pattern

- Add 'Skill', 'SkillFile', 'SkillStatic' to SPECIAL_COMPONENTS
- Update imports for Skill IR node types
- Add transformSkill method with frontmatter extraction
- Add getBooleanAttribute helper for boolean props
- Validate skill name (lowercase, numbers, hyphens only)
- Add processSkillChildren stub (implemented in Task 2)
- Update transform() return type to include SkillDocumentNode

* feat(16-02): add processSkillChildren to separate body, files, and statics

- Replace processSkillChildren stub with full implementation
- Separate SkillFile and SkillStatic from body content
- Add transformSkillFile method (extracts name, transforms children)
- Add transformSkillStatic method (extracts src, optional dest)
- Body content handled via existing transformToBlock

* docs(16-02): complete skill transformer plan

Tasks completed: 2/2
- Add transformSkill method following transformAgent pattern
- Add processSkillChildren to separate body, files, and statics

SUMMARY: .planning/phases/16-skill-component/16-02-SUMMARY.md

* feat(16-03): add emitSkill and emitSkillFrontmatter to emitter

- Add imports for SkillDocumentNode, SkillFileNode, SkillFrontmatterNode
- Add emitSkillFrontmatter method (maps camelCase to kebab-case YAML)
- Add emitSkill method for SKILL.md content generation
- Add emitSkillFile method for supporting file content
- Add convenience functions emitSkill and emitSkillFile
- Export new functions from emitter/index.ts

* feat(16-03): extend build.ts for multi-file skill output

- Add copyFile import for static file handling
- Add emitSkill, emitSkillFile imports from emitter
- Add SkillDocumentNode type import
- Add processSkill function for multi-file skill output
- Extend BuildResult with optional statics array
- Update runBuild to handle skillDocument type
- Add static file copying in write phase
- Build creates .claude/skills/{name}/ directory structure

* docs(16-03): complete skill emitter and build plan

Tasks completed: 2/2
- Task 1: Add emitSkill and emitSkillFrontmatter to emitter.ts
- Task 2: Extend build.ts for multi-file skill output

SUMMARY: .planning/phases/16-skill-component/16-03-SUMMARY.md

* feat(16-04): export Skill components from public API

- Add Skill, SkillFile, SkillStatic to JSX component exports
- Add SkillProps, SkillFileProps, SkillStaticProps to type exports
- emitSkill, emitSkillFile already exported via emitter/index.js
- IR types already exported via ir/index.js (wildcard export)

* docs(16-04): complete public API exports plan

Tasks completed: 1/1
- Add Skill exports to src/index.ts

SUMMARY: .planning/phases/16-skill-component/16-04-SUMMARY.md

* feat(16-05): add test-skill.tsx integration test

- Create DeploySkill TSX with all Skill features
- Test disableModelInvocation, allowedTools, argumentHint props
- Include SkillFile for reference.md generation
- Validates kebab-case frontmatter output

* docs(16-05): create skill.md user documentation

- Document Skill component props (required and optional)
- Document SkillFile component for generated files
- Document SkillStatic component for static file copying
- Include output structure and frontmatter format
- Add complete example and best practices
- Follow command.md/agent.md documentation patterns

* docs(16-05): complete integration test and documentation plan

Tasks completed: 2/2
- Task 1: Create test-skill.tsx integration test
- Task 2: Create skill.md user documentation

SUMMARY: .planning/phases/16-skill-component/16-05-SUMMARY.md

* docs(16): add phase verification report

* docs(16): complete Skill Component phase

* docs(17): capture phase context

Phase 17: State System
- Implementation decisions documented
- Phase boundary established

* docs(17): research state system implementation patterns

Phase 17: State System
- Documented existing codebase patterns (hook + component, transform + emit)
- Identified TypeScript template literal types for path validation
- Mapped multi-file output patterns from Skill handling
- Catalogued common pitfalls and anti-patterns

* docs(17): create phase plan

Phase 17: State System
- 5 plans in 3 waves
- 2 parallel (Wave 1), 2 parallel (Wave 2), 1 sequential (Wave 3)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(17): add Plan 17-06 for CLI skills (STATE-06 coverage)

Checker identified missing requirement coverage:
- STATE-06: CLI skills /react-agentic:state-read and /react-agentic:state-write

Added Plan 17-06 (Wave 3, depends on 17-02) to create:
- src/app/state-read.skill.tsx - Read state skill using FileAdapter
- src/app/state-write.skill.tsx - Write state skill using FileAdapter

Updated ROADMAP.md: Phase 17 now has 6 plans (was 5)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(17-02): create state types module

- Define StateConfig interface for adapter configuration
- Define StateAdapter interface with read/write/readField/writeField/merge/exists
- Add getNestedValue helper for dot-notation path access
- Add setNestedValue helper for dot-notation path mutation

* feat(17-01): add ReadStateNode and WriteStateNode IR types

- Add ReadStateNode for state read operations with stateKey, variableName, field
- Add WriteStateNode for state write operations with mode (field/merge), field, value
- Include both types in BlockNode union for type-safe switch exhaustiveness

* feat(17-02): create FileAdapter implementation

- Implement StateAdapter interface with JSON file persistence
- Pretty JSON formatting (2-space indent) for readability
- Create file with defaults on first read if missing
- Create parent directories as needed
- Support nested field read/write via dot-notation paths
- Shallow merge for partial state updates

* feat(17-02): create state module index exports

- Export StateAdapter, StateConfig interfaces
- Export FileAdapter class
- Export getNestedValue, setNestedValue helpers

* feat(17-01): add StateRef, useStateRef, ReadState, WriteState exports

- Add StateRef<TSchema> interface with key and phantom type marker
- Add useStateRef<TSchema>(key) hook for compile-time state binding
- Add ReadStateProps with state, into, field properties
- Add WriteStateProps with state, field, value, merge properties
- Add ReadState/WriteState stub components with JSDoc examples

* docs(17-02): complete state storage layer plan

Tasks completed: 3/3
- Create state types module (StateAdapter, StateConfig, path helpers)
- Create FileAdapter implementation (JSON persistence)
- Create state module index exports

SUMMARY: .planning/phases/17-state-system/17-02-SUMMARY.md

* docs(17-01): complete State IR Nodes plan

Tasks completed: 2/2
- Add ReadStateNode and WriteStateNode IR types
- Add StateRef, useStateRef, ReadState, WriteState exports

SUMMARY: .planning/phases/17-state-system/17-01-SUMMARY.md

* feat(17-04): add ReadState emitter method

- Add ReadStateNode and WriteStateNode imports
- Add case 'readState' to emitBlock switch statement
- Add emitReadState method with skill invocation syntax
- Supports --field flag for nested field reads

* feat(17-04): add WriteState emitter method

- Add emitWriteState method with skill invocation syntax
- Field mode emits --field and --value flags
- Merge mode emits --merge flag with JSON
- Variable references emit as $VARIABLE_NAME

* feat(17-03): add ReadState transformer method

- Add stateRefs Map to track useStateRef declarations
- Add extractStateRefDeclarations to find useStateRef(...) calls
- Add transformReadState method for ReadState JSX -> IR
- Add extractStateKey helper to resolve StateRef to key string
- Add extractVariableName helper for VariableRef resolution
- Add ReadState/WriteState to SPECIAL_COMPONENTS set
- Add component routing for ReadState/WriteState tags
- Import ReadStateNode and WriteStateNode types

* docs(17-04): complete State Emitter Logic plan

Tasks completed: 2/2
- Add ReadState emitter method
- Add WriteState emitter method

SUMMARY: .planning/phases/17-state-system/17-04-SUMMARY.md

* feat(17-03): add WriteState transformer method

- Add transformWriteState method for WriteState JSX -> IR
- Handle field mode: field="path" + value={val} props
- Handle merge mode: merge={partial} prop
- Variable value detection: tracked vars -> variable type, else literal
- Reuse extractStateKey helper for state prop extraction
- Both modes produce WriteStateNode with appropriate mode flag

* docs(17-03): complete State Transformer plan

Tasks completed: 2/2
- Add ReadState transformer method
- Add WriteState transformer method

SUMMARY: .planning/phases/17-state-system/17-03-SUMMARY.md

* feat(17-06): add state-read skill

- Create TSX source for state-read CLI skill
- Support full state read and field-specific reads
- Instruct Claude to read from .state/{key}.json
- Provide jq and Node.js implementation examples

* feat(17-06): add state-write skill

- Create TSX source for state-write CLI skill
- Support field mode (--field/--value) and merge mode (--merge)
- Instruct Claude to write to .state/{key}.json
- Creates .state/ directory and intermediate objects as needed

* feat(17-05): create state demo command

- Add state-demo.command.tsx demonstrating useStateRef, ReadState, WriteState
- Exercise field reads (phase, name), full state read, field writes (single/nested), merge
- Include conditional state usage with If/Else and equals() test helper
- Compiles to .claude/commands/state-demo.command.md with skill invocations

* feat(17-05): add state exports to main index

- Export useStateRef, ReadState, WriteState from jsx.js
- Export StateRef, ReadStateProps, WriteStateProps types from jsx.js
- Export StateAdapter, StateConfig, FileAdapter from state module
- Export getNestedValue, setNestedValue helper functions

* docs(17-06): complete CLI skills plan

Tasks completed: 3/3
- Task 1: Create state-read skill
- Task 2: Create state-write skill
- Task 3: Build both skills and verify output

SUMMARY: .planning/phases/17-state-system/17-06-SUMMARY.md

* docs(17-05): create state system documentation

- Add docs/state.md with comprehensive state system guide
- Document useStateRef, ReadState, WriteState components
- Include FileAdapter usage and configuration
- Cover type safety, best practices, and CLI skill reference

* docs(17-05): complete Integration & Docs plan

Tasks completed: 3/3
- Create state demo command (useStateRef, ReadState, WriteState)
- Add state exports to main index
- Create state documentation (docs/state.md)

SUMMARY: .planning/phases/17-state-system/17-05-SUMMARY.md

* docs(17): complete State System phase

Phase 17: State System - 6/6 plans executed
v1.6 milestone shipped

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(18): capture phase context

Phase 18: MCP Configuration
- Implementation decisions documented
- Phase boundary established

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(18): research MCP configuration phase domain

Phase 18: MCP Configuration
- Standard stack identified (no new deps needed)
- Architecture patterns documented (MCPServerNode, merge strategy)
- Pitfalls catalogued (SSE deprecation, env resolution, prop validation)
- Claude Code settings.json format verified

* docs(18): create MCP Configuration phase plans

Phase 18: MCP Configuration
- 4 plans in 4 waves (sequential)
- Plan 01: IR and JSX type extensions
- Plan 02: Transformer parsing with validation
- Plan 03: Settings.json emitter with merge logic
- Plan 04: Integration test and documentation
- Ready for execution

* feat(18-01): add MCPServerNode and MCPConfigDocumentNode to IR

- Add MCPServerNode with kind: 'mcpServer' discriminator
- Support stdio, http, sse transport types
- Add MCPConfigDocumentNode as document root for MCP configs
- Add MCPServerNode to BlockNode union
- Add MCPConfigDocumentNode to IRNode union

* feat(18-01): add MCP server JSX components and props

- Add MCPServerProps interface for all transport types
- Add MCPStdioServerProps with required command prop
- Add MCPHTTPServerProps with required url prop
- Add MCPServer, MCPStdioServer, MCPHTTPServer component stubs
- Include comprehensive JSDoc with examples

* docs(18-01): complete IR Nodes & JSX Components plan

Tasks completed: 2/2
- Add MCPServerNode and MCPConfigDocumentNode to IR
- Add MCPServer JSX components and props

SUMMARY: .planning/phases/18-mcp-configuration/18-01-SUMMARY.md

* feat(18-02): add MCP transformer with validation

- Add transformMCPServer for MCPServer/MCPStdioServer/MCPHTTPServer
- Add transformMCPConfig wrapper for multiple server definitions
- Validate prop combinations at compile time (stdio vs http)
- Extract array attributes (args) and object attributes (env, headers)
- Resolve process.env.X references at build time
- Add MCPConfig JSX component for wrapper document

* docs(18-02): complete Transformer plan

Tasks completed: 2/2
- Add MCP transformer with validation
- Add MCPConfigDocumentNode transformation

SUMMARY: .planning/phases/18-mcp-configuration/18-02-SUMMARY.md

* feat(18-03): add settings.ts emitter module

- emitSettings converts MCPConfigDocumentNode to mcpServers object
- mergeSettings handles read-modify-write for existing settings.json
- TSX wins on conflicts (spread order: existing first, then new)
- Preserves non-mcpServers settings (permissions, model, etc.)
- Creates .claude/ directory if needed
- Pretty-prints JSON with 2-space indent and trailing newline

* feat(18-03): integrate settings emitter into build command

- Export emitSettings, mergeSettings from emitter/index.ts
- Add MCPConfigDocumentNode handling in build.ts
- Collect MCP configs, merge into single settings.json
- Add mcpServer case to emitter (throws - uses settings.ts instead)
- Add skipWrite to BuildResult for already-written files
- Preserve existing settings.json content (permissions, etc.)
- Dry-run mode works correctly (no file writes)

* docs(18-03): complete Emitter plan

Tasks completed: 2/2
- Task 1: Create settings.ts emitter module
- Task 2: Export and build integration

SUMMARY: .planning/phases/18-mcp-configuration/18-03-SUMMARY.md

* feat(18-04): add example MCP configuration files

- Add servers.mcp.tsx demonstrating sqlite and filesystem servers
- Add playwright.mcp.tsx as single-server example
- Both compile to valid settings.json with merged mcpServers

* docs(18-04): add MCP configuration documentation

- Create comprehensive mcp-configuration.md with API reference
- Document MCPConfig, MCPStdioServer, MCPHTTPServer components
- Include common patterns and merge behavior
- Update README.md with link to new doc

* docs(18-04): complete Integration plan

Tasks completed: 3/3
- Create example MCP configuration
- Create MCP configuration documentation
- End-to-end verification

SUMMARY: .planning/phases/18-mcp-configuration/18-04-SUMMARY.md

* fix(18): export MCP components from package API

* docs(18): complete MCP Configuration phase

* docs(19): capture phase context

Phase 19: Scoped State Skills
- Implementation decisions documented
- Phase boundary established

* docs(19): research phase domain

Phase 19: Scoped State Skills
- Analyzed existing Skill/State system patterns
- Documented SQLite provider template design
- Defined multi-skill output architecture
- Catalogued common pitfalls for SQL generation

* test

* sqllite docs

* docs(19): create phase plan for Scoped State Skills

Phase 19: Scoped State Skills
- 4 plans in 3 waves
- 2 parallel (Wave 1), 1 sequential (Wave 2), 1 final (Wave 3)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(19): revise plans based on checker feedback

- Plan 02: Reframe must_haves.truths as user-observable outcomes
  (was implementation-focused like "SQL escaping helper prevents injection")
- Plan 03: Add verification that extractTypeArguments exists and is imported,
  clarify parser.ts already imports from ir/nodes.js (no circular dependency)
- Plan 04: Add Task 3 for main init skill generation (init.all.md)
  to address CONTEXT.md requirement for orchestration command

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(19): revise plans based on checker feedback

- Plan 02: Reframe must_have truth to observable behavior (SSTATE-08)
- Plan 03: Add key_link transformer.ts -> build.ts, add line 126 ref
- Plan 04: Fix path src/cli/build.ts -> src/cli/commands/build.ts
- Plan 04: Add Task 3 for SSTATE-08 TypeScript->SQL verification

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(19-01): add State IR types to nodes.ts

- Add StateSchemaField for flattened SQL column representation
- Add StateSchema for parsed TypeScript interface structure
- Add OperationNode for custom semantic operations
- Add StateNode for parsed State component with provider config
- Add StateDocumentNode with kind: 'stateDocument' discriminator
- Add StateDocumentNode to IRNode union type

* feat(19-01): add State and Operation JSX components

- Add SQLiteConfig interface for provider configuration
- Add StateProps<TSchema> with name, provider, config props
- Add OperationProps with name and SQL template children
- Add State<TSchema> component stub with full JSDoc and examples
- Add Operation component stub with JSDoc and  documentation
- Place new section between State Management and MCP Configuration

* docs(19-01): complete IR and JSX Foundation plan

Tasks completed: 2/2
- Task 1: Add State IR types to nodes.ts
- Task 2: Add State and Operation JSX components

SUMMARY: .planning/phases/19-scoped-state-skills/19-01-SUMMARY.md

* docs(19-02): complete Provider Template System plan

Tasks completed: 2/2
- Task 1: Create provider base types and registry
- Task 2: Implement SQLite provider

Note: Provider artifacts were already committed in 2f941dd during Plan 01.
This documents the completion and updates project state.

SUMMARY: .planning/phases/19-scoped-state-skills/19-02-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(19-03): add schema extraction helpers to parser.ts

- Add extractStateSchema function for flattening TypeScript interfaces
- Add extractSqlArguments function for  pattern extraction
- Add mapTsTypeToSql helper for TypeScript->SQL type mapping
- Add getDefaultValue helper for SQL defaults
- Add extractEnumValues helper for union type parsing
- Import StateSchema, StateSchemaField types from ir/nodes.js

* feat(19-03): add State transformation to transformer.ts

- Add transformState method to parse State component props
- Add transformOperation method to parse Operation children
- Extract schema from generic type parameter using extractStateSchema
- Extract SQL template from Operation children text content
- Infer arguments from $variable patterns using extractSqlArguments
- Add State and Operation to SPECIAL_COMPONENTS set
- Update transform() return type to include StateDocumentNode
- Import StateDocumentNode, StateNode, OperationNode, StateSchema from ir

* docs(19-03): complete State Transformer plan

Tasks completed: 2/2
- Add schema extraction helpers to parser.ts
- Add State transformation to transformer.ts

SUMMARY: .planning/phases/19-scoped-state-skills/19-03-SUMMARY.md

* feat(19-04): create state emitter for multi-skill output

- emitState() generates StateEmitResult with skills array and stateName
- Uses provider template (getProvider) for storage-specific code generation
- Generates CRUD skills: init, read, write, delete
- Generates custom operation skills from State children
- generateMainInitSkill() creates orchestration skill listing all init skills

* feat(19-04): integrate state emitter into build command

- Export emitState, generateMainInitSkill, StateEmitResult from emitter/index.ts
- Build command routes StateDocumentNode to state emitter
- Tracks allStateNames for main init generation
- Generates main init.all.md when states are processed
- Export State, Operation, StateProps, OperationProps, SQLiteConfig from main index
- Export getProvider, ProviderTemplate, GeneratedSkill for extensibility

* fix(19-04): resolve circular dependency in provider registry

- Use async getProviderAsync with dynamic import to avoid ESM hoisting issues
- emitState is now async to support lazy provider initialization
- Export getProviderAsync from main index for extensibility
- Verified: TypeScript interface correctly maps to SQL schema
  - string -> TEXT
  - union types -> TEXT CHECK constraint
  - All interface fields become table columns

* docs(19-04): complete State Emitter plan

Tasks completed: 3/3
- Task 1: Create state emitter (emitState, generateMainInitSkill)
- Task 2: Update emitter index and build command integration
- Task 3: Verify TypeScript interface to SQL schema generation

Phase 19 (Scoped State Skills) is now complete.

SUMMARY: .planning/phases/19-scoped-state-skills/19-04-SUMMARY.md

* docs(19): complete Scoped State Skills phase

All 4 plans executed and verified:
- 19-01: IR and JSX type extensions (StateDocumentNode, State/Operation components)
- 19-02: Provider templates (SQLite with bash/sqlite3 code generation)
- 19-03: State parser and transformer (schema extraction, type mapping)
- 19-04: Emitter and build integration (multi-skill output, main init orchestration)

v1.8 milestone complete.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test scenario

* add more scenario

* braisntorming interface

* chore: complete v1.8 milestone

Archived:
- milestones/v1.8-ROADMAP.md
- milestones/v1.8-REQUIREMENTS.md

Deleted (fresh for next milestone):
- REQUIREMENTS.md

Updated:
- MILESTONES.md (new v1.8 entry)
- PROJECT.md (requirements → Validated)
- ROADMAP.md (Phase 19 collapsed)
- STATE.md (reset for next milestone)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: start milestone v2.0 TSX Syntax Improvements

Adopting better syntax patterns from Tentative 2:
- Module restructure (primitives/ + workflow/)
- Semantic components (ExecutionContext, SuccessCriteria, etc.)
- Structured props (Table, List with typed arrays)
- Render props pattern for Command/Agent context
- Typed routes (OfferNext component)
- Explicit generics on workflow components

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: define milestone v2.0 requirements

19 requirements across 5 categories:
- Code Organization (3): Module restructure
- Semantic Components (7): ExecutionContext, SuccessCriteria, OfferNext, etc.
- Structured Props (2): Table, List with typed arrays
- Context Access (4): Render props, explicit generics, Step
- Parser/Emitter (3): Transform, emit, test

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: create milestone v2.0 roadmap (5 phases)

Phases:
20. Module Restructure: ORG-01, ORG-02, ORG-03
21. Structured Props: PROP-01, PROP-02
22. Semantic Components: SEM-01 to SEM-07
23. Context Access Patterns: CTX-01 to CTX-04
24. Parser/Emitter Integration: PAR-01, PAR-02, PAR-03

All 19 milestone requirements mapped to phases.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(20): capture phase context

Phase 20: Module Restructure
- Implementation decisions documented
- Phase boundary established

* docs(20): research module restructure domain

Phase 20: Module Restructure
- Standard stack identified: TypeScript 5.9, NodeNext ESM, tsup bundler
- Architecture patterns documented: Barrel exports, file extensions, grouping
- Pitfalls catalogued: export *, .js extensions, circular deps, breaking imports
- Code examples: Splitting files, re-exports, backward compatibility testing

Key findings:
- Use named re-exports (not export *) to prevent dependency bloat
- All imports need .js extensions (TypeScript requirement for NodeNext)
- Keep jsx.ts as single public entry point for backward compatibility
- Split by cohesion: primitives (markdown blocks) vs workflow (agentic helpers)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(20): create phase plan

Phase 20: Module Restructure
- 2 plan(s) in 2 wave(s)
- Wave 1: Create primitives/ and workflow/ directories
- Wave 2: Rewrite jsx.ts with re-exports
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(20): revise plans based on checker feedback

- Add verification for control.ts -> variables.ts import link
- Reorder key_links to match verification order
- ORG-03 issue is requirements wording, not plan issue (sections/ correctly created as empty placeholder per CONTEXT.md)

* feat(20-01): create primitives directory with markdown, variables, and control components

- Extract Markdown and XmlBlock components to primitives/markdown.ts
- Extract useVariable, Assign, and VariableRef to primitives/variables.ts
- Extract If, Else, and shell test builders to primitives/control.ts
- Use NodeNext .js extension for control.ts import of VariableRef
- Preserve all JSDoc comments from original jsx.ts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(20-01): create workflow directory with all workflow components

- Create Command.ts at workflow/ level
- Extract Agent, SpawnAgent, OnStatus to workflow/agents/
- Extract State, Operation, ReadState, WriteState to workflow/state/
- Extract Skill, SkillFile, SkillStatic to workflow/skill/
- Extract MCPServer, MCPStdioServer, MCPHTTPServer, MCPConfig to workflow/mcp/
- Create sections/index.ts placeholder for Phase 22
- Add barrel exports (index.ts) in each subdirectory
- Use NodeNext .js extensions in all imports
- Preserve all JSDoc comments from original jsx.ts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(20-01): complete module restructure directory creation plan

Tasks completed: 2/2
- Task 1: Create primitives directory with markdown, variables, control
- Task 2: Create workflow directory with Command and organized subdirectories

SUMMARY: .planning/phases/20-module-restructure/20-01-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(21): capture phase context

Phase 21: Structured Props
- Implementation decisions documented
- Phase boundary established

* refactor(20-02): rewrite jsx.ts as pure re-export file

- Replaced 1044 lines of component definitions with 107 lines of re-exports
- All exports now reference primitives/ and workflow/ modules
- Uses explicit named re-exports (not export *) for tree-shaking
- All imports use .js extension for NodeNext compliance
- Maintains same public API (zero breaking changes)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(20-02): complete jsx.ts rewrite plan

Tasks completed: 3/3
- Task 1: Rewrite jsx.ts with re-exports from new module locations
- Task 2: Verify build passes and all tests pass
- Task 3: Verify export count matches original

SUMMARY: .planning/phases/20-module-restructure/20-02-SUMMARY.md

Module restructure complete:
- jsx.ts reduced from 1044 to 107 lines (91% reduction)
- 59 named exports maintained (zero breaking changes)
- All tests pass (263/263)
- Build completes successfully

* docs(20): complete module restructure phase

- Phase 20 verified: 5/5 success criteria met
- jsx.ts reduced from 1044 to 107 lines (91% reduction)
- primitives/ and workflow/ directories established
- All 263 tests passing, zero breaking changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(21): research structured props implementation

Phase 21: Structured Props
- Standard stack identified (TypeScript tuples, markdown tables)
- Architecture patterns documented (IR nodes, emitters, prop validation)
- Pitfalls catalogued (escaping, array lengths, empty cells)

* docs(21): create phase plan

Phase 21: Structured Props
- 2 plan(s) in 2 wave(s)
- Wave 1: 21-01 (IR nodes and JSX types)
- Wave 2: 21-02 (transformer and emitter)
- Ready for execution

* feat(21-01): add TableNode IR type and extend ListNode

- Add TableNode interface with headers, rows, align, emptyCell properties
- Extend ListNode with optional start property for ordered list numbering
- Add TableNode to BlockNode union type
- Add stub case in emitter for TableNode (implementation in Plan 02)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(21-01): add Table and List component stubs with TypeScript types

- Create src/primitives/structured.ts with Table and List components
- Add TableProps interface with headers, rows, align, emptyCell
- Add ListProps interface with items, ordered, start
- Add TableAlignment type for column alignment
- Follow primitives/markdown.ts pattern for compile-time components

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(21-01): export Table and List components from jsx.ts

- Add structured data components section to jsx.ts
- Export Table, List, TableProps, ListProps, TableAlignment
- Follow existing pattern of explicit named exports with type annotations
- Components now available for use in TSX files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(21-01): complete TableNode IR and component stubs plan

Tasks completed: 3/3
- Add TableNode IR type and extend ListNode
- Create Table and List component stubs
- Export components from jsx.ts

SUMMARY: .planning/phases/21-structured-props/21-01-SUMMARY.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(22): capture phase context

Phase 22: Semantic Components
- Implementation decisions documented
- Phase boundary established

* feat(21-02): add Table and List transformation logic

- Added TableNode import to transformer
- Added 'Table' and 'List' to SPECIAL_COMPONENTS set
- Implemented transformTable() method to parse headers, rows, align props
- Implemented parseRowsAttribute() for nested array parsing
- Implemented transformPropList() for prop-based List component
- Added cases in transformElement() to route Table/List to transformers

* feat(21-02): implement Table emission and List start property

- Added TableNode import to emitter
- Replaced Table emission stub with full emitTable() implementation
- Implemented markdown table generation with headers, alignment, rows
- Implemented escapeTableCell() for pipe escaping and newline handling
- Updated emitList() to respect start property for ordered lists

* fix(21-02): handle numeric literal for List start attribute

- Added custom numeric literal parsing for start attribute in transformPropList
- Fixed issue where start={5} was not recognized (getAttributeValue only handles strings)
- Tested with ordered list starting at 5: outputs "5. 6. 7." correctly

* docs(21-02): complete structured props implementation

Tasks completed: 3/3
- Task 1: Added Table and List transformation in transformer.ts
- Task 2: Implemented Table emission and List start property in emitter.ts
- Task 3: Verified with test command (all test cases passed)

SUMMARY: .planning/phases/21-structured-props/21-02-SUMMARY.md

* docs(21): complete Structured Props phase

- Phase 21 verified: 4/4 success criteria passed
- Table and List components emit markdown from array props
- TypeScript enforces prop types at compile time
- PROP-01 and PROP-02 requirements satisfied

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(22): research phase domain

Phase 22: Semantic Components
- Patterns derived from existing codebase
- XmlBlockNode reuse strategy identified
- Component structure documented

* docs(22): create phase plan

Phase 22: Semantic Components
- 3 plan(s) in 3 wave(s)
- 3 sequential plans (dependency chain)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(22): revise plans based on checker feedback

- 22-01: Add explicit export keywords to interface/function definitions
- 22-02: Add explicit export for XmlWrapperProps interface
- 22-03: Specify toSnakeCase placement at module level, add stub verification task
- 22-03/04: Split plan - transformer in 03, emitter + testing in new 04
- 22-03/04: Reframe must_haves truths to user-observable outcomes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(22-01): add semantic component stubs and interfaces

- ExecutionContext component for file path references
- SuccessCriteria component for checkbox lists
- XmlSection generic wrapper for custom XML tags
- Full TypeScript types with JSDoc examples
- All interfaces and functions explicitly exported

* feat(22-01): add IR node definitions for semantic components

- ExecutionContextNode with paths, prefix, and optional children
- SuccessCriteriaNode with checkbox items array
- SuccessCriteriaItemData helper interface
- Added both to BlockNode union type
- XmlSection uses existing XmlBlockNode with dynamic name

* feat(22-01): wire up semantic component exports

- Export ExecutionContext, SuccessCriteria, XmlSection from sections/index.ts
- Add semantic components section to jsx.ts
- Add components and types to index.ts explicit exports
- Add emitter stub cases for new nodes (Phase 22 Plan 02)
- Build passes, types visible in dist/index.d.ts

* docs(22-01): complete semantic components foundation plan

Tasks completed: 3/3
- Create semantic.ts with component stubs
- Add IR node definitions
- Wire up exports through index files

SUMMARY: .planning/phases/22-semantic-components/22-01-SUMMARY.md

* feat(22-02): add OfferNext component with typed routes

- Add OfferNext component with OfferNextRoute interface
- Add XML wrapper components (DeviationRules, CommitRules, WaveExecution, CheckpointHandling)
- Add OfferNextNode to IR nodes
- Add emitter stub for OfferNextNode (implement in Plan 03)

* feat(22-02): export semantic components from index

- Update workflow/sections/index.ts with new exports
- Update jsx.ts with all semantic components
- Update main index.ts with explicit component and type exports
- All components now visible in dist/index.d.ts

* docs(22-02): complete semantic components plan

Tasks completed: 3/3
- Task 1: Add OfferNext component with typed routes
- Task 2: Add XML wrapper section components
- Task 3: Update exports in index.ts and jsx.ts

SUMMARY: .planning/phases/22-semantic-components/22-02-SUMMARY.md

* feat(22-03): implement semantic component transformers

- Add toSnakeCase helper for PascalCase -> snake_case conversion
- Add ExecutionContext, SuccessCriteria, OfferNext IR node imports
- Add 8 semantic components to SPECIAL_COMPONENTS set
- Implement transformExecutionContext (paths, prefix, children)
- Implement transformSuccessCriteria (items with text/checked)
- Implement transformOfferNext (routes with name/path/description)
- Implement transformXmlSection (dynamic tag name)
- Implement transformXmlWrapper for DeviationRules, CommitRules, WaveExecution, CheckpointHandling
- All transformer cases integrated into transformElement switch
- Build passes: npm run build successful

* docs(22-03): complete semantic component transformers plan

Tasks completed: 2/2
- Verify stub exports before transformer work
- Add transformer cases for semantic components

SUMMARY: .planning/phases/22-semantic-components/22-03-SUMMARY.md

* feat(22-04): add emitter cases for semantic IR nodes

- Import ExecutionContextNode, SuccessCriteriaNode, OfferNextNode types
- Update emitBlock switch to call semantic emitters
- Implement emitExecutionContext (XML with @-prefixed paths)
- Implement emitSuccessCriteria (XML with checkbox list)
- Implement emitOfferNext (XML with route bullets)

* fix(22-04): fix transformer array parsing for semantic components

Bug: transformSuccessCriteria and transformOfferNext used getArrayAttributeValue
which only returns string[] but components need object arrays.

Solution: Add AST-based parsers following parseRowsAttribute pattern:
- parseSuccessCriteriaItems: parse string | {text, checked} array
- parseOfferNextRoutes: parse {name, path, description?} array

Verified: End-to-end compilation now works correctly for all semantic components.

Rule 1 (auto-fix bug): This blocks task completion, must fix to verify emitter.

* docs(22-04): complete semantic component emission plan

Tasks completed: 2/2
- Add emitter cases for semantic IR nodes
- Verify build and test end-to-end

Deviations: 1 auto-fixed bug (Rule 1)
- Fixed transformer array parsing for object literals

SUMMARY: .planning/phases/22-semantic-components/22-04-SUMMARY.md

* fix(22): prevent double-prefixing in ExecutionContext emitter

* docs(22): complete semantic components phase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(23): capture phase context

Phase 23: Context Access Patterns
- Implementation decisions documented
- Phase boundary established

* docs(23): research phase domain

Phase 23: Context Access Patterns
- Standard stack identified (ts-morph, TypeScript)
- Architecture patterns documented (render props detection, generic parsing, context construction)
- Pitfalls catalogued (runtime resolution, arrow function ambiguity, stale nodes)

* docs(24): capture phase context

Phase 24: Parser/Emitter Integration
- Implementation decisions documented
- Phase boundary established

* docs(23): create phase plan

Phase 23: Context Access Patterns
- 3 plan(s) in 2 wave(s)
- 1 parallel (wave 1), 2 parallel (wave 2)
- Ready for execution

* feat(23-01): define context interfaces for render props pattern

- Add CommandContext interface with name, description, skill, outputPath, sourcePath
- Add AgentContext interface extending CommandContext with tools, model
- Update CommandProps and AgentProps to accept render props function children
- Add model prop to AgentProps for context access
- Export context types from jsx.ts

* feat(23-01): add render props detection utility to parser

- Add ArrowFunction import from ts-morph
- Add RenderPropsInfo interface for detection results
- Add analyzeRenderPropsChildren function to detect arrow function children
- Filters whitespace-only text nodes before analysis
- Validates single parameter for render props pattern

* feat(23-01): update transformer to handle render props in Command/Agent

- Import analyzeRenderPropsChildren and RenderPropsInfo from parser
- Add transformArrowFunctionBody helper for arrow function body transformation
- Update transformCommand to detect render props and transform arrow function body
- Update transformAgent to detect render props and transform arrow function body
- Support block body { return ... } and expression body patterns
- Support parenthesized JSX expressions in both cases
- Preserve backwards compatibility with regular children

* test(23-01): add test command to verify render props pattern

- Create test-render-props.tsx with render props arrow function children
- Uses fragment with heading, Markdown, and paragraph elements
- Verifies both render props and regular children patterns work

* docs(23-01): complete render props pattern plan

Tasks completed: 4/4
- Define context interfaces and update component props types
- Add render props detection utility to parser.ts
- Update transformer to handle render props in Command/Agent
- Create test command to verify render props pattern

SUMMARY: .planning/phases/23-context-access-patterns/23-01-SUMMARY.md

* feat(23-03): add Step component definition

- Create StepProps interface with number, name, variant props
- Define StepVariant type for heading/bold/xml output formats
- Add JSDoc with usage examples for all variants

* feat(23-02): add generic type parameter to If component

- IfProps<T> accepts optional generic type for compile-time context
- If<T> function accepts generic parameter with unknown default
- Generics are compile-time only, no runtime overhead
- Backwards compatible: existing non-generic usage unchanged

* feat(23-03): export Step component from jsx.ts

- Add Step, StepProps, StepVariant exports
- Follows existing pattern for primitive exports

* feat(23-03): add StepNode to IR

- Add StepVariant type for heading/bold/xml formats
- Add StepNode interface with number, name, variant, children
- Add StepNode to BlockNode union

* feat(23-02): create Loop component with generic type parameter

- LoopProps<T> accepts generic type for array item type
- Loop<T> function for type-safe iteration
- items prop typed as T[] for compile-time validation
- as prop specifies variable name for current item
- Export Loop and LoopProps from jsx.ts

* feat(23-03): add Step transformation in transformer

- Add Step to SPECIAL_COMPONENTS set
- Import StepNode and StepVariant from IR
- Add case to transformElement for Step
- Create transformStep method with required prop validation

* feat(23-03): add Step emission in emitter

- Import StepNode and StepVariant from IR
- Add case for 'step' in emitBlock switch
- Create emitStep method with variant-based output
  - heading: ## Step N: Name
  - bold: **Step N: Name**
  - xml: <step number='N' name='Name'>...</step>

* feat(23-02): add LoopNode to IR and transformer support

- LoopNode interface with as, items, typeParam, children fields
- Add LoopNode to BlockNode union type
- Add 'Loop' to SPECIAL_COMPONENTS set
- transformLoop method extracts props and type arguments
- Handles Loop element case in transformElement

* feat(23-03): add test command and fix numeric literal parsing

- Create test-step.tsx to verify all Step variants
- Fix transformStep to handle numeric literals for number prop
- Support both number={1} and number='1.1' syntax

* chore(23-03): clean up test files

* docs(23-03): complete Step component plan

Tasks completed: 6/6
- Create Step component definition
- Wire up Step exports
- Add StepNode to IR
- Add Step transformation in transformer
- Add Step emission in emitter
- Create test command to verify (cleaned up)

SUMMARY: .planning/phases/23-context-access-patterns/23-03-SUMMARY.md

* docs(23-02): complete generic type parameters plan

Tasks completed: 5/5
- Add generic type parameter to If component
- Create Loop component with generic type parameter
- Add LoopNode to IR and transformer support
- Add LoopNode emission
- Test generic type parameters

SUMMARY: .planning/phases/23-context-access-patterns/23-02-SUMMARY.md

* docs(23): complete context access patterns phase

Phase 23 verified:
- Render props pattern for Command/Agent
- Explicit generics on If<T> and Loop<T>
- Step component with heading/bold/xml variants

3 plans executed, all success criteria verified.

* docs(24): create phase plan

Phase 24: Parser/Emitter Integration
- 3 plan(s) in 2 wave(s)
- Wave 1: 24-01 (structured/semantic tests), 24-02 (control flow/integration)
- Wave 2: 24-03 (documentation) depends on test plans
- Ready for execution

* test(24-01): add Table component verification tests

- Basic table with headers and rows
- Column alignment (left, center, right)
- Pipe character escaping
- Newline handling in cells
- Headerless table support
- Empty cell handling with emptyCell prop

* test(24-01): add List component verification tests

- Bullet list (unordered)
- Ordered list with default numbering
- Custom start number support
- Empty list handling
- Special characters preservation
- Single item list support

* test(24-02): add Loop and OnStatus verification tests

- Basic loop with string items
- Loop with custom 'as' parameter
- Loop with variable reference
- OnStatus SUCCESS and ERROR handlers
- Multiple OnStatus blocks for same spawn

Verified markdown emission:
- Loop: 'For each X in Y:' pattern
- OnStatus: 'On SUCCESS:' and 'On ERROR:' blocks

* test(24-01): add semantic component verification tests

- ExecutionContext with default @ and custom prefix
- SuccessCriteria with string and object items
- OfferNext route formatting
- XmlSection dynamic tag names
- DeviationRules wrapper component
- CommitRules wrapper component
- WaveExecution wrapper component
- CheckpointHandling wrapper component

* test(24-02): add Step component variant verification

- Heading variant: '## Step N: Name'
- Bold variant: '**Step N: Name**'
- XML variant: '<step number="N" name="Name">'
- Mixed variants in sequence

All three variants emit correctly with proper formatting.

* test(24-02): add v2.0 integration test

Demonstrates all v2.0 features working together:

Phase 21 (Structured Props):
- Table with column alignment
- Bullet and ordered lists

Phase 22 (Semantic Components):
- ExecutionContext XML section
- SuccessCriteria with checkboxes
- XmlSection custom tags
- OfferNext routes

Phase 23 (Context Access):
- Render props pattern (ctx.name, ctx.outputPath)
- If/Else conditional blocks
- Loop iteration
- Step components (all three variants)

All components emit correctly in combination.

* docs(25): capture phase context

Phase 25: TSX Test Modernization
- Implementation decisions documented
- Phase boundary established

* docs(24-01): complete verification tests plan

Tasks completed: 3/3
- Create Table component verification tests
- Create List component verification tests
- Create semantic components verification tests

SUMMARY: .planning/phases/24-parser-emitter-integration/24-01-SUMMARY.md

* docs(24-02): complete control flow and integration verification plan

Tasks completed: 3/3
- Control flow tests (Loop, OnStatus)
- Step variant tests (heading, bold, xml)
- v2.0 integration test (all phases 21-23)

SUMMARY: .planning/phases/24-parser-emitter-integration/24-02-SUMMARY.md

* docs(24-03): add v2.0 components to README

- Added Structured Components and Semantic Components to User Guides table
- Added v2.0 Components section listing Table, List, ExecutionContext, SuccessCriteria, OfferNext, XmlSection, Step, Loop
- Links to new detailed documentation pages

* docs(24-03): create structured components documentation

- Table component with props, examples, alignment, edge cases
- List component with bullet/ordered variants and custom start
- Examples showing TSX to markdown transformation
- Dynamic data generation pattern example

* docs(24-03): add semantic components and render props documentation

- Created semantic-components.md with ExecutionContext, SuccessCriteria, OfferNext, XmlSection, Step, Loop
- Documented workflow wrapper components (DeviationRules, CommitRules, etc.)
- Added render props pattern to command.md with CommandContext properties
- Added render props pattern to agent.md with AgentContext properties
- All examples show TSX and markdown output pairs

* docs(24-03): complete documentation update plan

Tasks completed: 3/3
- Update README with v2.0 components
- Create structured-components.md
- Create semantic-components.md and update command/agent docs

SUMMARY: .planning/phases/24-parser-emitter-integration/24-03-SUMMARY.md

* docs(24): complete parser-emitter integration phase

- 3 plans executed: verification tests, control flow tests, documentation
- All v2.0 components tested and documented
- Verification passed (18/18 must-haves)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(25): research phase domain

Phase 25: TSX Test Modernization
- Standard v2.0 component stack documented
- Architecture patterns from existing files
- Import paths and pitfalls catalogued

* docs(25): create phase plan

Phase 25: TSX Test Modernization
- 3 plan(s) in 2 wave(s)
- Wave 1: 01, 02 (parallel - Table/List + Semantic components)
- Wave 2: 03 (render props in Agent, OfferNext in release)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(25-01): correct files_modified to match tasks

Remove 2.3-heading-hierarchy.tsx (no task) and 9.1-orchestrating-workflow.tsx (in Plan 25-02)

* feat(25-01): update XmlBlock test with List component

- Replace manual <ul>/<li> in constraints XmlBlock with List component
- Replace manual <ol>/<li> in validation section with List ordered
- Add v2.0 feature documentation to file header
- Import List from jsx.js

* feat(25-02): add semantic components to orchestrating workflow test

- Add ExecutionContext for file references
- Replace h2 sections with Step components
- Add SuccessCriteria at end for validation checklist
- Update file header with v2.0 features documented
- Add List component for test objectives

* feat(25-01): add List component demonstration to lists-rendering test

- Add Test 7 section showing v2.0 structured List component
- Demonstrate both unordered and ordered List variants
- Add v2.0 feature documentation to file header
- Import List from jsx.js

* feat(25-01): update SpawnAgent test with List component

- Replace manual <ol>/<li> for Test Objectives with List ordered
- Add v2.0 feature documentation to file header
- Import List from jsx.js

* feat(25-02): add Step components to multi-agent sequential test

- Replace h2 sections with Step components
- Use bold variant for Agent B and C steps
- Add List component for test objectives
- Update file header with v2.0 features documented

* feat(25-02): add semantic components to simple orchestrator test

- Add ExecutionContext for agent file reference
- Replace XmlBlock success_criteria with SuccessCriteria component
- Add Step components for numbered workflow steps
- Update file header with v2.0 features documented

* docs(25-01): complete scenario test modernization plan

Tasks completed: 3/3
- Update XmlBlock test with List component
- Add List component demonstration to lists-rendering test
- Update SpawnAgent test with List component

SUMMARY: .planning/phases/25-tsx-test-modernization/25-01-SUMMARY.md

* docs(25-02): complete scenario semantic components plan

Tasks completed: 3/3
- Add semantic components to orchestrating workflow test
- Add Step components to multi-agent sequential test
- Add semantic components to simple orchestrator test

SUMMARY: .planning/phases/25-tsx-test-modernization/25-02-SUMMARY.md

* feat(25-03): add render props pattern to echo-agent

- Add {(ctx) => ...} render props pattern to Agent
- Add context interpolation: ctx.name, ctx.model
- Replace manual ol with List component
- Update file header with v2.0 features documented

* feat(25-03): modernize release command with v2.0 features

- Add ExecutionContext for related agent files
- Replace manual offer_next XmlBlock with OfferNext component
- Replace manual success_criteria XmlBlock with SuccessCriteria
- Replace manual flags list with List component
- Update file header with v2.0 features documented

* feat(25-03): enhance test-render-props with context interpolation

- Add Table component displaying context values (ctx.name, ctx.description, etc.)
- Add List component for feature enumeration
- Add ExecutionContext referencing documentation
- Update file header with v2.0 features documented

* docs(25-03): complete render props and v2.0 features plan

Tasks completed: 3/3
- Add render props pattern to echo-agent
- Modernize release command with OfferNext, SuccessCriteria
- Enhance test-render-props with context interpolation

SUMMARY: .planning/phases/25-tsx-test-modernization/25-03-SUMMARY.md

* docs(25): complete TSX Test Modernization phase

- Phase 25 verified: 6/6 success criteria met
- Updated ROADMAP.md: Phase 25 marked complete
- Updated STATE.md: v2.0 milestone complete
- Updated REQUIREMENTS.md: All 19 requirements complete
- v2.0 TSX Syntax Improvements milestone shipped

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* push missing planning

* WIP

* finalize try to mke it GSD compatiable

* push changes

* docs(26): research parser refactoring phase

Phase 26: Parser Refactoring
- Standard stack: TypeScript 5.9.3, ts-morph 27.0.2, NodeNext
- Architecture: utils/ for parser.ts, transformers/ for transformer.ts
- Patterns: Context objects, coordinator class, dispatcher function
- Pitfalls: Class method references, context state, recursive calls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(26): create parser refactoring phase plan

Phase 26: Parser Refactoring
- 4 plans in 3 waves
- Plans 01, 02 parallel (Wave 1)
- Plan 03 depends on 01, 02 (Wave 2)
- Plan 04 depends on 03 (Wave 3)
- Ready for execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(26-02): create transformers/types.ts with shared interfaces

- TransformContext interface defines all shared state for transformer functions
- RenderPropsContext interface for render props interpolation
- Replaces class instance state with explicit context object
- Foundation for extracting Transformer class methods into modules

* feat(26-01): create utils directory with project, JSX traversal, and text extraction modules

- Add project.ts: createProject, parseFile, parseSource
- Add jsx-traversal.ts: getElementName, getAttributeValue, getTestAttributeValue, getJsxChildren, findRootJsxElement, getArrayAttributeValue
- Add text-extraction.ts: extractText, extractInlineText, normalizeWhitespace

All files use .js extensions for NodeNext module compliance

* feat(26-02): create transformers/shared.ts with utility functions

- toSnakeCase helper for PascalCase -> snake_case conversion
- HTML_ELEMENTS, INLINE_ELEMENTS, SPECIAL_COMPONENTS constants
- isInlineElement, isCustomComponent, isValidXmlName functions
- trimBoundaryTextNodes for whitespace management
- transformInlineNodes and transformMixedChildren helpers
- Pure utilities without circular dependencies
- Foundation for transformer module extraction

* feat(26-02): create dispatch.ts stub and transformers barrel export

- dispatch.ts: Central routing stub for Plan 26-03/04 implementation
- dispatchBlockTransform and transformBlockChildren stubs
- Prevents circular imports between transformer modules
- index.ts: Barrel exports for types, utilities, and dispatch
- Documents future transformer module structure
- Foundation complete for transformer extraction

* feat(26-01): create spread, component, and type resolution modules

- Add spread-resolution.ts: extractObjectLiteralProps, resolveSpreadAttribute
- Add component-resolution.ts: resolveComponentImport, extractJsxFromComponent, extractTypeArguments
- Add type-resolution.ts: resolveTypeImport, extractInterfaceProperties, extractPromptPlaceholders

All modules follow NodeNext .js import conventions

* docs(26-02): complete parser refactoring foundation plan

Tasks completed: 3/3
- Task 1: Create transformers/types.ts with shared interfaces
- Task 2: Create transformers/shared.ts with utility functions
- Task 3: Create dispatch.ts and transformers barrel export

SUMMARY: .planning/phases/26-parser-refactoring/26-02-SUMMARY.md

* feat(26-01): create variable extraction module and utils barrel export

- Add variable-extraction.ts: extractVariableDeclarations, extractInputObjectLiteral, extractStateSchema, extractSqlArguments, analyzeRenderPropsChildren, extractTypeArguments, isVariableRef
- Add index.ts: barrel exports for all utils modules

All utilities extracted from parser.ts now available via utils/ directory
Complete with proper TypeScript types and NodeNext .js imports

* docs(26-01): complete parser utilities extraction plan

Tasks completed: 3/3
- Created src/parser/utils/ with 8 focused modules
- Extracted all parser.ts utilities (1390 lines)
- Barrel export in utils/index.ts

SUMMARY: .planning/phases/26-parser-refactoring/26-01-SUMMARY.md

* feat(26-03): extract document transformers (Command, Agent, Skill, MCP, State)

- Extract all document-level transform methods from Transformer class
- Standalone functions accepting TransformContext parameter
- Includes: transformCommand, transformAgent, transformSkill, transformMCPConfig, transformState
- Helper functions: mergeCommandProps, getBooleanAttribute, hasAttribute, extractArrayAttribute, extractObjectAttribute, transformArrowFunctionBody
- Skill-specific: processSkillChildren, transformSkillFile, transformSkillStatic
- State-specific: transformOperation
- All functions use dispatch.ts for recursive transform calls
- 991 lines extracted from transformer.ts

Task 1 complete

* feat(26-03): extract HTML and inline transformers

- Extract HTML element transform methods from Transformer class
- Standalone functions accepting TransformContext parameter
- html.ts includes: transformList, transformListItem, transformBlockquote, transformCodeBlock, transformDiv
- html.ts helpers: extractCodeContent, extractAllText, transformMixedChildren
- inline.ts includes: transformInlineChildren, transformToInline, transformInlineElement, transformLink
- inline.ts helpers: trimBoundaryTextNodes
- Both modules use dispatch.ts stubs for recursive calls (Plan 26-04 will complete)
- 391 lines html.ts, 232 lines inline.ts

Task 2 complete

* feat(26-03): extract semantic and control flow transformers

- Extract semantic component transform methods from Transformer class
- semantic.ts includes: transformTable, transformPropList, transformExecutionContext, transformSuccessCriteria, transformOfferNext, transformXmlSection, transformXmlWrapper
- semantic.ts helpers: parseRowsAttribute, interpolatePropertyAccess, parseSuccessCriteriaItems, parseOfferNextRoutes, toSnakeCase
- control.ts includes: transformIf, transformElse, transformLoop, transformOnStatus
- control.ts helpers: extractOutputDeclarations, extractStateRefDeclarations
- Update transformers/index.ts with all new exports (document, html, inline, semantic, control)
- All modules use dispatch.ts stubs for recursive calls (Plan 26-04 will complete)
- 436 lines semantic.ts, 285 lines control.ts

Task 3 complete

* docs(26-03): complete transformer extraction plan

Tasks completed: 3/3
- Task 1: Extract document transformers (Command, Agent, Skill, MCP, State)
- Task 2: Extract HTML and inline transformers
- Task 3: Extract semantic and control flow transformers

SUMMARY: .planning/phases/26-parser-refactoring/26-03-SUMMARY.md

* feat(26-04): extract remaining transformer modules

Extracted final batch of transformer functions into focused mod…