Conversation
Archived: - milestones/v2.0-ROADMAP.md - milestones/v2.0-REQUIREMENTS.md - milestones/v2.0-MILESTONE-AUDIT.md Deleted (fresh for next milestone): - REQUIREMENTS.md Updated: - MILESTONES.md (new entry) - PROJECT.md (requirements → Validated) - ROADMAP.md (v2.0 collapsed) - STATE.md (reset for next milestone) v2.0 TSX Syntax Improvements delivered: - Module restructure (jsx.ts split 91%) - Structured props (Table, List) - Semantic components (ExecutionContext, SuccessCriteria, OfferNext) - Render props pattern for Command/Agent - Step component with 3 variants - 6 phases, 17 plans, 14/14 requirements Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Goal: Separate compiler-required primitives from user-definable composites for better customization and debugging. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Files: - v3.0-primitive-composite-STACK.md (React Fiber, MDAST patterns) - FEATURES.md (children props, .ref property, content types) - v3.0-primitive-composite-ARCHITECTURE.md (primitive registry, composite resolver) - PITFALLS.md (distributed monolith, silent behavior changes) - SUMMARY.md (6-phase roadmap recommendation) Key findings: - Stack: React Fiber host/composite discrimination pattern - Architecture: Parse -> Resolve Composites -> Transform -> Emit - Critical pitfall: Silent behavior changes require snapshot tests first Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
25 requirements across 6 categories: - Foundation: baseline tests, primitive registry, content types - Reference Printing: .ref property, <Ref> component - Component Composition: children, props, fragments - Content Validation: type-safe nesting constraints - Composite Library: move If/Loop/SpawnAgent to user-definable - Documentation: boundary docs, migration guide, examples Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phases: 27. Baseline & Registry: FOUND-01, FOUND-02 28. Content Types: FOUND-03, FOUND-04, FOUND-05 29. Reference Printing: REF-01, REF-02, REF-03, REF-04 30. Component Composition: COMP-01, COMP-02, COMP-03, COMP-04 31. Content Validation: VALID-01, VALID-02, VALID-03 32. Composite Library: LIB-01 to LIB-06 33. Documentation: DOC-01, DOC-02, DOC-03 All 25 milestone requirements mapped to phases. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 27: Baseline & Registry - Implementation decisions documented - Phase boundary established Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 27: Baseline & Registry - Standard stack identified (Vitest 4.0.17, external snapshots) - Architecture patterns documented (component snapshots, registry pattern) - Pitfalls catalogued (snapshot bloat, runtime expectations, typos)
Phase 27: Baseline & Registry - 2 plan(s) in 1 wave(s) - 2 parallel, 0 sequential - Ready for execution
- Add OnStatus to runtime.test.ts (Plan 01, Task 3) - Add Indent to structured.test.ts (Plan 01, Task 2) - Add 'onStatus' to infrastructure primitives (Plan 02) - Add 'indent' to presentation primitives (Plan 02) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add PRIMITIVE_COMPONENTS set with all 23 primitive kinds - Infrastructure primitives: spawnAgent, if, else, loop, break, return, askUser, runtimeVarDecl, runtimeCall, onStatus - Presentation primitives: table, list, indent, executionContext, successCriteria, offerNext, xmlBlock, step - Document primitives: document, agentDocument, frontmatter, agentFrontmatter - Add isPrimitive() function for classification - Add getComponentInfo() with layer and migration tracking - Add getPrimitives() and getComposites() for introspection - Mark presentation primitives for Phase 32 composite migration
- Add registry exports to src/ir/index.ts - Export isPrimitive, getPrimitives, getComposites, getComponentInfo - Export PRIMITIVE_COMPONENTS constant and types - Verified registry functions accessible from package root
- If: basic condition, literal, nested content, equality - If+Else: paired conditional blocks - Loop: basic max, counter variable, nested If - Break: standalone, with message, inside loop - Return: basic, with status, with message - Nesting: If containing SpawnAgent 16 snapshots capturing current markdown output
**structured.test.ts:** - Table: basic headers/rows, alignment, empty cells, no headers - List: unordered, ordered, start number, nested - Indent: default (2 spaces), 4 spaces, nested blocks **semantic.test.ts:** - ExecutionContext: basic paths, custom prefix, with children - XmlBlock: basic, with attributes, nested, mixed content - Step: heading variant, bold variant, xml variant, sub-steps, complex content 23 snapshots total
- Test isPrimitive for all primitive categories - Test infrastructure primitives: spawnAgent, if, else, loop, break, return, askUser, runtimeVarDecl, runtimeCall, onStatus - Test presentation primitives: table, list, indent, executionContext, successCriteria, offerNext, xmlBlock, step - Test document primitives: document, agentDocument, frontmatter, agentFrontmatter - Test getComponentInfo returns correct category, layer, and migration targets - Verify presentation primitives marked with migrationTarget: 'composite' - Test getPrimitives returns Set with all 22 primitives - Test getComposites returns empty array (populated in Phase 32) - Test coverage validates all RuntimeBlockNode kinds included - 43 test cases, all passing
**runtime.test.ts:** - SpawnAgent: basic prompt, input object, output var, runtime refs, load from file - AskUser: basic options, multiSelect, with header - RuntimeCall: literal args, runtime var refs, mixed args - OnStatus: SUCCESS, ERROR, BLOCKED, NOT_FOUND - Integration: Loop containing Break **document.test.ts:** - DocumentNode: frontmatter, runtime vars, runtime functions, complete, metadata - AgentDocumentNode: basic frontmatter, typed I/O, all optional fields, no tools 25 snapshots total
Tasks completed: 3/3 - Task 1: Create primitive registry module - Task 2: Export registry from IR and root index - Task 3: Add registry tests SUMMARY: .planning/phases/27-baseline-registry/27-02-SUMMARY.md
Tasks completed: 3/3 - Task 1: Control flow component snapshots (16 tests) - Task 2: Structured and semantic component snapshots (23 tests) - Task 3: Runtime and document component snapshots (25 tests) SUMMARY: .planning/phases/27-baseline-registry/27-01-SUMMARY.md
- 2 plans executed (27-01, 27-02) - 64 snapshot tests capturing component markdown output - Primitive registry with 22 components across 3 layers - Phase goal verified: baseline established, primitives classified Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 28: Content Types - Type granularity: CommandContent, AgentContent, inherited SubComponentContent - TypeScript-only enforcement, native TS errors - Component names in errors, explicit children typing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 28: Content Types - TypeScript discriminated unions identified as standard approach - JSX.Element type erasure documented as key constraint - Parallel type system pattern recommended - CommandContent, AgentContent, SubComponentContent types specified
Phase 28: Content Types - 1 plan in 1 wave - Creates CommandContent, AgentContent, SubComponentContent types - Ready for execution
Phase 29: Reference Printing - Implementation decisions documented - Phase boundary established Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add CommandContent type (all primitives including SpawnAgent, control flow) - Add AgentContent type (all primitives including control flow) - Add SubComponentContent type (restricted to document-level primitives) - SubComponentContent excludes SpawnAgent, OnStatus, control flow, runtime features - Enables compile-time safety for custom component children props
- Add CommandContent, AgentContent, SubComponentContent exports to src/ir/index.ts - Types automatically re-exported from package root via export * from './ir/index.js' - Users can now import content types from 'react-agentic' or 'react-agentic/ir'
- Test CommandContent allows all primitives (document, SpawnAgent, control flow, runtime) - Test AgentContent allows all primitives (document, control flow, runtime, SpawnAgent) - Test SubComponentContent allows document-level primitives only - Verify SubComponentContent excludes SpawnAgent, OnStatus, control flow, runtime (10 @ts-expect-error tests) - 24 tests total: type assignment validation and compile-time exclusion checks
Tasks completed: 3/3 - Create content-types.ts with discriminated union types - Export content types from IR and root package - Add content type tests SUMMARY: .planning/phases/28-content-types/28-01-SUMMARY.md
Phase 30: Component Composition - Implementation decisions documented - Phase boundary established
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 31: Content Validation - Implementation decisions documented - Phase boundary established Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed ReadFile test files (component removed)
- tests/parser/meta-prompting.test.ts
- tests/emitter/meta-prompting.test.ts
- tests/parser/readfile-templates.test.ts
- Updated write-state test to use from={bash()} syntax
- Updated snapshot tests for new output format
- control-flow snapshots (runtime var syntax changed)
- runtime snapshots (simplified variable interpolation)
All 981 tests passing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tasks completed: 3/3
- Task 1: Removed legacy Assign props (bash/value/env)
- Task 2: Removed ReadFile component entirely
- Task 3: Migrated all tests to new from={source} syntax
SUMMARY: .planning/phases/38-data-abstraction/38-04-SUMMARY.md
Phase 38 verification found 1 gap: success criterion 7 (runtimeFn support in Assign from prop) was deferred in Plan 38-02 due to missing context infrastructure. Gap closure plan 38-05 addresses: - Add runtimeFn type to AssignNode.assignment IR union - Update transformer to detect RuntimeFnComponent in from prop - Add emitter case for runtimeFn with runtime.js invocation - Integration tests for runtimeFn source pattern Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Extended AssignNode.assignment union with runtimeFn type - Type includes fnName and args fields - Enables runtime function assignment pattern
- Added RuntimeFnComponent detection in transformAssignWithFrom - Scans source file for runtimeFn() wrapper declarations - Extracts function name and literal args from AST - Creates AssignNode with type: 'runtimeFn' - Added helper functions: findRuntimeFnName, extractArgsObject
- Added case for 'runtimeFn' in emitAssignmentLine switch - Emits VAR=$(node .claude/runtime/runtime.js fnName 'args') - Properly escapes single quotes in JSON args for bash - Matches emit pattern from RuntimeCallNode
- Added runtimeFn() source test suite with 3 test cases - Tests verify runtime.js invocation format - Tests cover empty args and multiple arg properties - Updated V1 transformer with same runtimeFn detection logic - All 25 tests in assign-from.test.ts pass
Tasks completed: 4/4 - Task 1: Add runtimeFn type to AssignNode IR - Task 2: Update transformer to detect RuntimeFnComponent - Task 3: Add runtimeFn case to emitter - Task 4: Add integration tests for runtimeFn source SUMMARY: .planning/phases/38-data-abstraction/38-05-SUMMARY.md
Phase 38: Unified Assign with from Prop - 5/5 plans complete (includes gap closure for runtimeFn support) - All 8 success criteria verified - 984 tests passing VERIFICATION: .planning/phases/38-data-abstraction/38-VERIFICATION.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.