Skip to content

V0.1.1#4

Merged
Kaenn merged 197 commits intomainfrom
v0.1.1
Feb 9, 2026
Merged

V0.1.1#4
Kaenn merged 197 commits intomainfrom
v0.1.1

Conversation

@Kaenn
Copy link
Owner

@Kaenn Kaenn commented Feb 9, 2026

No description provided.

Kaenn and others added 30 commits January 31, 2026 08:19
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>
Kaenn and others added 28 commits February 2, 2026 06:36
- 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
@Kaenn Kaenn merged commit 1a3ad06 into main Feb 9, 2026
@Kaenn Kaenn deleted the v0.1.1 branch February 9, 2026 23:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant