release: Storybook v0.2.0 - Major syntax and features update
BREAKING CHANGES: - Relationship syntax now requires blocks for all participants - Removed self/other perspective blocks from relationships - Replaced 'guard' keyword with 'if' for behavior tree decorators Language Features: - Add tree-sitter grammar with improved if/condition disambiguation - Add comprehensive tutorial and reference documentation - Add SBIR v0.2.0 binary format specification - Add resource linking system for behaviors and schedules - Add year-long schedule patterns (day, season, recurrence) - Add behavior tree enhancements (named nodes, decorators) Documentation: - Complete tutorial series (9 chapters) with baker family examples - Complete reference documentation for all language features - SBIR v0.2.0 specification with binary format details - Added locations and institutions documentation Examples: - Convert all examples to baker family scenario - Add comprehensive working examples Tooling: - Zed extension with LSP integration - Tree-sitter grammar for syntax highlighting - Build scripts and development tools Version Updates: - Main package: 0.1.0 → 0.2.0 - Tree-sitter grammar: 0.1.0 → 0.2.0 - Zed extension: 0.1.0 → 0.2.0 - Storybook editor: 0.1.0 → 0.2.0
This commit is contained in:
339
docs/examples/25-day-in-life.md
Normal file
339
docs/examples/25-day-in-life.md
Normal file
@@ -0,0 +1,339 @@
|
||||
# Day in the Life
|
||||
|
||||
This example models a complete day for a baker character, showing how schedules, behaviors, and life arcs work together to create a rich daily simulation.
|
||||
|
||||
## The Baker
|
||||
|
||||
```storybook
|
||||
use schema::core_enums::{Season, DayOfWeek};
|
||||
use schema::beings::Human;
|
||||
use schema::templates::SkilledWorker;
|
||||
|
||||
character Martha: Human from SkilledWorker {
|
||||
age: 42
|
||||
occupation: "Master Baker"
|
||||
skill_level: 0.95
|
||||
energy: 1.0
|
||||
mood: 0.8
|
||||
|
||||
uses schedule: MarthaDailySchedule
|
||||
uses behaviors: [
|
||||
{ tree: BakerRoutine, priority: normal },
|
||||
{ tree: HandleEmergency, when: emergency_detected, priority: critical }
|
||||
]
|
||||
|
||||
---backstory
|
||||
Martha has been baking since she was twelve, learning from her
|
||||
grandmother. She now runs the most popular bakery in town and
|
||||
is known for her sourdough bread and apple pastries.
|
||||
---
|
||||
}
|
||||
```
|
||||
|
||||
## The Schedule
|
||||
|
||||
```storybook
|
||||
schedule MarthaDailySchedule {
|
||||
block wake_up {
|
||||
04:00 - 04:30
|
||||
action: routines::morning_wake
|
||||
}
|
||||
|
||||
block early_baking {
|
||||
04:30 - 07:00
|
||||
action: baking::prepare_morning_goods
|
||||
}
|
||||
|
||||
block open_shop {
|
||||
07:00 - 07:15
|
||||
action: shop::open_for_business
|
||||
}
|
||||
|
||||
block morning_rush {
|
||||
07:15 - 10:00
|
||||
action: shop::serve_morning_customers
|
||||
}
|
||||
|
||||
block midday_baking {
|
||||
10:00 - 12:00
|
||||
action: baking::prepare_afternoon_goods
|
||||
}
|
||||
|
||||
block lunch_break {
|
||||
12:00 - 13:00
|
||||
action: social::lunch_with_family
|
||||
}
|
||||
|
||||
block afternoon_sales {
|
||||
13:00 - 16:00
|
||||
action: shop::serve_afternoon_customers
|
||||
}
|
||||
|
||||
block close_shop {
|
||||
16:00 - 16:30
|
||||
action: shop::close_for_day
|
||||
}
|
||||
|
||||
block evening_prep {
|
||||
16:30 - 17:30
|
||||
action: baking::prepare_dough_for_tomorrow
|
||||
}
|
||||
|
||||
block family_time {
|
||||
18:00 - 21:00
|
||||
action: social::family_evening
|
||||
}
|
||||
|
||||
block sleep {
|
||||
21:00 - 04:00
|
||||
action: routines::sleep
|
||||
}
|
||||
|
||||
// Saturday: Market day
|
||||
recurs MarketDay on day saturday {
|
||||
block market_prep {
|
||||
03:00 - 05:00
|
||||
action: baking::market_batch
|
||||
}
|
||||
|
||||
block market_sales {
|
||||
06:00 - 14:00
|
||||
action: market::sell_at_stall
|
||||
}
|
||||
|
||||
block market_cleanup {
|
||||
14:00 - 15:00
|
||||
action: market::pack_up
|
||||
}
|
||||
}
|
||||
|
||||
// Summer: Extended hours
|
||||
block summer_afternoon {
|
||||
13:00 - 18:00
|
||||
action: shop::extended_summer_hours
|
||||
on season summer
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Behaviors
|
||||
|
||||
### Morning Routine
|
||||
|
||||
```storybook
|
||||
behavior BakerMorningRoutine {
|
||||
then morning_sequence {
|
||||
WakeUp
|
||||
WashFace
|
||||
DressInWorkClothes
|
||||
|
||||
// Check the sourdough starter
|
||||
then check_starter {
|
||||
ExamineStarter
|
||||
if(starter_healthy) {
|
||||
FeedStarter
|
||||
}
|
||||
}
|
||||
|
||||
WalkToKitchen
|
||||
LightOven
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Baking Behavior
|
||||
|
||||
```storybook
|
||||
behavior BakerRoutine {
|
||||
choose baking_priority {
|
||||
// Handle special orders first
|
||||
then special_orders {
|
||||
if(has_special_orders)
|
||||
then fill_order {
|
||||
ReviewOrderDetails
|
||||
GatherSpecialIngredients
|
||||
PrepareSpecialItem
|
||||
PackageForCustomer
|
||||
}
|
||||
}
|
||||
|
||||
// Regular daily baking
|
||||
then daily_bread {
|
||||
then sourdough {
|
||||
MixDough(recipe: "sourdough", quantity: 10)
|
||||
KneadDough(duration: 15m)
|
||||
FirstRise(duration: 2h)
|
||||
ShapLoaves
|
||||
SecondRise(duration: 1h)
|
||||
BakeLoaves(temperature: 230, duration: 35m)
|
||||
}
|
||||
}
|
||||
|
||||
// Pastries if time permits
|
||||
then pastries {
|
||||
succeed_always {
|
||||
then apple_pastries {
|
||||
PrepareFillingApple
|
||||
RollPastryDough
|
||||
AssemblePastries
|
||||
BakePastries(temperature: 200, duration: 25m)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Customer Service
|
||||
|
||||
```storybook
|
||||
behavior ServeCustomer {
|
||||
then service_sequence {
|
||||
GreetCustomer
|
||||
if(customer_is_regular) {
|
||||
RecallPreferences
|
||||
}
|
||||
|
||||
choose service_type {
|
||||
then take_order {
|
||||
if(customer_knows_what_they_want)
|
||||
AcceptOrder
|
||||
PackageItem
|
||||
}
|
||||
|
||||
then help_decide {
|
||||
if(not customer_knows_what_they_want)
|
||||
OfferRecommendation
|
||||
ProvidesSample
|
||||
AcceptOrder
|
||||
PackageItem
|
||||
}
|
||||
}
|
||||
|
||||
CollectPayment
|
||||
ThankCustomer
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Emergency Handling
|
||||
|
||||
```storybook
|
||||
behavior HandleEmergency {
|
||||
choose emergency_type {
|
||||
then oven_fire {
|
||||
if(oven_overheating)
|
||||
TurnOffOven
|
||||
GrabFireExtinguisher
|
||||
ExtinguishFire
|
||||
AssessDamage
|
||||
}
|
||||
|
||||
then ingredient_shortage {
|
||||
if(critical_ingredient_missing)
|
||||
CheckBackupSupply
|
||||
choose procurement {
|
||||
SendApprenticeToMarket
|
||||
SubstituteIngredient
|
||||
AdjustMenu
|
||||
}
|
||||
}
|
||||
|
||||
then equipment_failure {
|
||||
if(equipment_broken)
|
||||
StopProduction
|
||||
AttemptQuickFix
|
||||
choose fallback {
|
||||
UseBackupEquipment
|
||||
CallRepairPerson
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Life Arc: Career and Energy
|
||||
|
||||
```storybook
|
||||
life_arc MarthaEnergyLevel {
|
||||
state rested {
|
||||
on enter {
|
||||
Martha.energy: 1.0
|
||||
Martha.mood: 0.8
|
||||
}
|
||||
on energy < 0.5 -> tired
|
||||
}
|
||||
|
||||
state tired {
|
||||
on enter {
|
||||
Martha.mood: 0.6
|
||||
}
|
||||
on energy < 0.2 -> exhausted
|
||||
on energy > 0.7 -> rested
|
||||
}
|
||||
|
||||
state exhausted {
|
||||
on enter {
|
||||
Martha.mood: 0.3
|
||||
Martha.quality_output: 0.7
|
||||
}
|
||||
on energy > 0.5 -> tired
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
```storybook
|
||||
relationship MarthaAndApprentice {
|
||||
Martha as mentor self {
|
||||
patience: 0.8
|
||||
investment: 0.9
|
||||
} other {
|
||||
sees_potential: 0.85
|
||||
}
|
||||
|
||||
Elena as apprentice self {
|
||||
dedication: 0.9
|
||||
learning_rate: 0.7
|
||||
} other {
|
||||
respect: 0.95
|
||||
admiration: 0.8
|
||||
}
|
||||
|
||||
bond: 0.85
|
||||
years_together: 2
|
||||
}
|
||||
|
||||
relationship MarthaAndRegularCustomer {
|
||||
Martha as shopkeeper
|
||||
OldManGregory as regular_customer
|
||||
|
||||
bond: 0.7
|
||||
years_known: 15
|
||||
always_orders: "sourdough_loaf"
|
||||
|
||||
---dynamics
|
||||
Gregory has been buying Martha's bread every morning for
|
||||
fifteen years. They exchange brief pleasantries about the
|
||||
weather and local gossip. He is her most reliable customer.
|
||||
---
|
||||
}
|
||||
```
|
||||
|
||||
## Key Takeaways
|
||||
|
||||
This example demonstrates:
|
||||
|
||||
1. **Schedule-driven daily flow**: Precise time blocks govern Martha's entire day
|
||||
2. **Seasonal and weekly variations**: Summer hours and Saturday market
|
||||
3. **Layered behaviors**: Emergency behavior preempts normal routine via priority
|
||||
4. **Realistic action sequences**: Baking modeled step by step with parameters
|
||||
5. **Energy management**: Life arc tracks fatigue affecting mood and output quality
|
||||
6. **Social connections**: Relationships with apprentice and customers add depth
|
||||
|
||||
## Cross-References
|
||||
|
||||
- [Schedules Reference](../reference/14-schedules.md) - Schedule syntax
|
||||
- [Behavior Trees Reference](../reference/11-behavior-trees.md) - Behavior syntax
|
||||
- [Life Arcs Reference](../reference/13-life-arcs.md) - Life arc syntax
|
||||
Reference in New Issue
Block a user