211 lines
6.9 KiB
Markdown
211 lines
6.9 KiB
Markdown
|
|
# 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
|