Files
storybook/design/behavior-tree-implementation-status.md

211 lines
6.9 KiB
Markdown
Raw Normal View History

# Behavior Tree Keyword Implementation Status
**Task:** #7 - Implement behavior tree keyword transformation system
**Status:** In Progress (60% complete)
**Date:** February 12, 2026
---
## ✅ Completed Work
### 1. Tree-sitter Grammar (`tree-sitter-storybook/grammar.js`)
- ✅ Updated `selector_node` to use `choose` keyword with optional label
- ✅ Updated `sequence_node` to use `then` keyword with optional label
- ✅ Added `condition_node` for `if(expr)` and `when(expr)`
- ✅ Added `decorator_node` with full parameter support
- ✅ Added `decorator_keyword` enumeration
- ✅ Added `decorator_params` for all parameter types
- ✅ Updated `subtree_node` to use `include` keyword
- ✅ Extended `duration` pattern to support days (`d`)
### 2. AST Structures (`src/syntax/ast.rs` + `storybook/src/syntax/ast.rs`)
- ✅ Restructured `BehaviorNode::Selector` with label support
- ✅ Restructured `BehaviorNode::Sequence` with label support
- ✅ Added `BehaviorNode::Decorator` with typed decorators
- ✅ Created `DecoratorType` enum with 10 variants
- ✅ Created `Duration` struct with `DurationUnit` enum
- ✅ Implemented `Duration::to_milliseconds()` conversion
### 3. LALRPOP Parser (`src/syntax/parser.lalrpop`)
- ✅ Updated `BehaviorNode` choice to include new node types
- ✅ Implemented `SelectorNode` with `choose` keyword and optional label
- ✅ Implemented `SequenceNode` with `then` keyword and optional label
- ✅ Implemented `ConditionNode` for `if`/`when` expressions
- ✅ Implemented all 10 decorator parsers:
- `DecoratorRepeat` (infinite)
- `DecoratorRepeatN(n)`
- `DecoratorRepeatRange(min..max)`
- `DecoratorInvert`
- `DecoratorRetry(n)`
- `DecoratorTimeout(duration)`
- `DecoratorCooldown(duration)`
- `DecoratorGuard(expr)`
- `DecoratorSucceedAlways`
- `DecoratorFailAlways`
- ✅ Updated `SubTreeNode` to use `include` keyword
### 4. Lexer Tokens (`src/syntax/lexer.rs` + `storybook/src/syntax/lexer.rs`)
- ✅ Added `Choose` token
- ✅ Added `Then` token
- ✅ Added `If` token
- ✅ Added `When` token
- ✅ Added `Repeat` token
- ✅ Added `Invert` token
- ✅ Added `Retry` token
- ✅ Added `Timeout` token
- ✅ Added `Cooldown` token
- ✅ Added `Guard` token
- ✅ Added `SucceedAlways` token
- ✅ Added `FailAlways` token
### 5. Example Files
- ✅ Created `examples/new-syntax-demo.sb` with comprehensive demonstrations
---
## 🚧 In Progress / Pending
### 6. Fix Compilation Errors
The AST changes will break existing code that pattern-matches on `BehaviorNode`:
- [ ] Update all `match BehaviorNode::Selector(nodes)` to `BehaviorNode::Selector { label, children }`
- [ ] Update all `match BehaviorNode::Sequence(nodes)` to `BehaviorNode::Sequence { label, children }`
- [ ] Update all `match BehaviorNode::Decorator(name, child)` to `BehaviorNode::Decorator { decorator_type, child }`
- [ ] Check files:
- `src/resolve/validate.rs`
- `src/resolve/types.rs`
- `src/types.rs`
- LSP code in `storybook/src/lsp/`
- Test files
### 7. Compiler / SBIR Generation
- [ ] Update SBIR node type encoding for decorators
- [ ] Implement serialization for `DecoratorType` variants
- [ ] Implement `Duration` serialization
- [ ] Update compiler to handle new AST structures
- [ ] Test SBIR output for correctness
### 8. Testing
- [ ] Rebuild Tree-sitter grammar (`npm run build` or similar)
- [ ] Test parsing `examples/new-syntax-demo.sb`
- [ ] Add unit tests for each decorator type
- [ ] Add integration tests for nested decorators
- [ ] Test round-trip: parse → compile → decompile
### 9. Example Migration
- [ ] Migrate `examples/alice-in-wonderland/world/characters/white_rabbit.sb`
- [ ] Migrate `examples/alice-in-wonderland/world/characters/mad_tea_party.sb` (add `repeat` decorator)
- [ ] Migrate `examples/alice-in-wonderland/world/characters/cheshire_cat.sb` (add decorators)
- [ ] Migrate `examples/alice-in-wonderland/world/characters/royal_court.sb` (add `repeat` decorators)
- [ ] Migrate `examples/alice-in-wonderland/world/characters/caterpillar.sb`
- [ ] Migrate `tests/examples/behavior_and_lifearc.sb`
- [ ] Update test corpus in `tree-sitter-storybook/test/corpus/behaviors.txt`
### 10. Documentation
- [ ] Update `design.md` Section 6 with new syntax
- [ ] Create migration guide
- [ ] Add tutorial examples highlighting named nodes
- [ ] Update CHANGELOG with breaking changes
- [ ] Prepare handoff notes for language documentation agent
---
## 📊 Progress Metrics
**Overall Completion:** 60%
**By Phase:**
- Phase 1 (Grammar & Parser): 100% ✅
- Phase 2 (AST & Compiler): 70% (AST done, compiler pending)
- Phase 3 (Examples & Tests): 10% (example created, migration pending)
- Phase 4 (Documentation): 0%
**By Component:**
- Grammar: 100% ✅
- AST: 100% ✅
- Lexer: 100% ✅
- Parser: 100% ✅
- Compilation fixes: 0%
- Compiler/SBIR: 0%
- Testing: 10%
- Migration: 0%
- Documentation: 0%
---
## 🎯 Next Immediate Actions
1. **Find and fix compilation errors** from AST changes
2. **Update compiler** to handle new `DecoratorType` enum
3. **Test parsing** the new syntax example
4. **Migrate one example** (White Rabbit) to validate end-to-end
5. **Add unit tests** for decorator parsing
---
## 📝 Design Decisions Implemented
Following Sienna's feedback from design review:
**Use `choose` only** (not `selector`)
**Use `then` only** (not `sequence`)
**Remove @ prefix for actions**
**Use `include` for subtrees**
**Named nodes are prominent** (optional label on choose/then)
**Decorators approved** (all 10 types implemented)
**No backward compatibility** (clean break from symbolic syntax)
---
## 🔄 Files Modified
**Grammar:**
- `tree-sitter-storybook/grammar.js`
**AST:**
- `src/syntax/ast.rs`
- `storybook/src/syntax/ast.rs`
**Parser:**
- `src/syntax/parser.lalrpop`
**Lexer:**
- `src/syntax/lexer.rs`
- `storybook/src/syntax/lexer.rs`
**Examples:**
- `examples/new-syntax-demo.sb` (new)
---
## 🐛 Known Issues / Blockers
**Compilation Errors Expected:**
The AST structure changes will cause compilation errors in any code that pattern-matches on `BehaviorNode`. These need to be fixed before the code will compile.
**Files Likely Affected:**
- `src/resolve/validate.rs` - behavior tree validation
- `src/resolve/types.rs` - type resolution
- `src/types.rs` - type definitions
- `storybook/src/lsp/semantic_tokens.rs` - LSP highlighting
- `storybook/src/lsp/navigation_tests.rs` - LSP tests
- Test files with behavior tree examples
**Resolution Strategy:**
1. Attempt to compile
2. Fix each compilation error by updating pattern matches
3. Test that fixes maintain correct behavior
4. Coordinate with LSP agent if LSP changes are extensive
---
## 📚 Resources
**Design Document:** `/Users/sienna/Development/storybook/design/behavior-tree-keywords-design.md`
**Example File:** `/Users/sienna/Development/storybook/examples/new-syntax-demo.sb`
**TEAM PLAN:** `/Users/sienna/Development/storybook/TEAM_PLAN.md` (Task #7)
---
**Last Updated:** 2026-02-12
**Next Update:** After fixing compilation errors