# Baker Family Example A comprehensive example demonstrating Storybook v0.3.0 features through a realistic multi-character scenario with relationships, locations, institutions, and advanced type system usage. ## Characters | Character | Age | Role | Template | |-----------|-----|------|----------| | Martha | 34 | Master baker, business co-owner | Baker | | Jane | 36 | Pastry chef, Martha's wife, co-owner | Baker | | Emma | 12 | Their daughter, science enthusiast | Child | | Henry | 68 | Retired teacher, loyal customer | Person | | Roland | 42 | Competing baker from next town | Baker | Martha and Jane are a married couple who co-run the bakery. Emma is their daughter. Henry and Roland are community members connected to the family through the bakery. ## Features Demonstrated ### Type System (v0.3.0) - **Species definitions**: `species Human { ... }` provides default fields for all human characters - **Species-based templates**: `template Person: Human { ... }` inherits species fields as base layer - **Concepts and sub-concepts**: `concept BakedGood` with `sub_concept BakedGood.Category { Bread, Pastry, Cake }` - **Sub-concept dot notation**: Parent.Name format for clear ownership - **Concept comparisons**: `SkillLevel` maps skill tiers to quality expectations - **Life arc requirements**: `life_arc BakerCareer requires { baking_skill: Number }` for compile-time validation ### Relationships - **Marriage**: Martha and Jane, a lesbian couple with asymmetric bakery roles - **Parent-Child**: Martha-Emma and Jane-Emma with different parenting styles - **Business Partnership**: Martha and Jane co-owning and co-running the bakery - **Customer Relationship**: Martha and Henry (daily loyalty) - **Competition**: Martha and Roland (rival bakers) - **Asymmetric perspectives**: Each participant has role-specific fields ### Locations - **MarthasBakery**: Detailed shop with prose description, capacity, hours - **MainStreet**: Town thoroughfare connecting market and school ### Institutions - **BakersGuild**: Trade guild with membership, meetings, and governance ### Life Arcs - **BakerCareer**: Apprentice -> Journeyman -> Master (skill-based progression) - **Childhood**: Young child -> School age -> Teenager -> Adult (age-based) - **MarriageQuality**: Newlywed -> Established -> Deep bond (relationship arc) - **BusinessGrowth**: Starting out -> Growing -> Thriving (business arc) ### Resource Linking - **Templates with behaviors**: `Baker` template specifies `BakingSkills` and `CustomerService` - **Templates with schedules**: `Baker` template uses `BakerSchedule` - **Multi-level inheritance**: `Baker` -> `Worker` -> `Person` template chain - **Character inheritance**: Characters automatically inherit behaviors and schedules from templates ### Schedule Composition - **Schedule inheritance**: `BakerSchedule modifies WorkWeek` - **Override blocks**: Modify inherited time blocks with `override work { ... }` - **Named blocks**: All blocks have names for the override system - **Action references**: Schedule blocks reference behavior trees via `action: BehaviorName` - **Recurrence patterns**: Market day repeats `on Saturday` ### Behavior Trees - Comprehensive behavior definitions for all activities - Referenced from schedule blocks showing integration - Hierarchical behaviors (sequences, selectors, repeaters) ## File Structure ``` baker-family/ ├── README.md ├── schema/ │ ├── templates.sb # Template definitions with species base │ ├── types.sb # Concepts, sub-concepts, species, concept comparisons │ └── life_arcs.sb # Career and childhood life arcs ├── characters/ │ ├── martha.sb # Master baker (Baker template, skill_tier: Master) │ ├── jane.sb # Pastry chef (Baker template, skill_tier: Journeyman) │ ├── emma.sb # Daughter (Child template) │ ├── henry.sb # Retired teacher customer (Person template) │ └── roland.sb # Competing baker (Baker template) ├── relationships/ │ └── baker_family_relationships.sb # All relationships with asymmetric perspectives ├── locations/ │ └── bakery_locations.sb # MarthasBakery and MainStreet ├── institutions/ │ └── bakers_guild.sb # Trade guild ├── life_arcs/ │ └── family_life_arcs.sb # MarriageQuality and BusinessGrowth arcs ├── schedules/ │ └── work_schedules.sb # Composable schedules └── behaviors/ └── baker_behaviors.sb # Behavior tree definitions ``` ## Template Hierarchy ``` Human (species - default fields: age, energy, mood, occupation) └─> Person: Human (behaviors: BasicNeeds, SocialInteraction) ├─> Worker (schedule: WorkWeek) │ └─> Baker (behaviors: +BakingSkills, +CustomerService, schedule: BakerSchedule) │ ├── Martha (skill_tier: Master) │ ├── Jane (skill_tier: Journeyman) │ └── Roland (skill_tier: Journeyman) │ └─> Child: Human (behaviors: PlayBehavior, LearnBehavior, no schedule) └── Emma └─> Henry (Person, retired, no work schedule) ``` Override chain: Species -> Includes -> Template -> Character (last-one-wins) ## Relationship Map ``` Martha ──── Marriage ──── Jane │ BusinessPartnership │ │ │ ├── ParentChild ── Emma ───┘ │ ├── CustomerRelationship ── Henry │ └── Competition ── Roland ``` ## Schedule Inheritance ``` WorkWeek ├─ morning_prep (08:00-09:00) ├─ work (09:00-17:00) └─ evening_rest (18:00-22:00) BakerSchedule modifies WorkWeek ├─ pre_dawn_prep (04:00-05:00) [NEW] ├─ work (05:00-13:00) [OVERRIDE] -> action: BakingWork ├─ evening_rest (18:00-22:00) [INHERITED] └─ recurrence MarketDay on Saturday └─ market (06:00-14:00) -> action: SellAtMarket ``` ## Life Arcs ``` BakerCareer requires { baking_skill: Number, work_ethic: Number } apprentice -> journeyman (when baking_skill > 0.5 and work_ethic > 0.7) journeyman -> master (when baking_skill > 0.8 and work_ethic > 0.9) Childhood requires { age: Number, curiosity: Number } young_child -> school_age -> teenager -> adult MarriageQuality requires { relationship_quality: Number, years_together: Number } newlywed -> established -> deep_bond BusinessGrowth requires { customer_relations: Number, baking_skill: Number } starting_out -> growing -> thriving ``` ## Concept Comparison: SkillLevel Maps baking skill tiers to quality expectations: - **Apprentice**: Any freshness level acceptable while learning - **Journeyman**: Any freshness level expected as standard - **Master**: Must produce fresh goods to meet the standard ## Key Integration Points 1. **Martha (character)** -> inherits from **Baker (template)** -> inherits from **Human (species)** - Gets default fields from Human species (age, energy, mood, occupation) - Gets behaviors: `BakingSkills`, `CustomerService`, `BasicNeeds`, `SocialInteraction` - Gets schedule: `BakerSchedule` (which modifies `WorkWeek`) - Has `skill_tier: Master` for concept comparison mapping 2. **Relationships** -> connect characters with asymmetric perspectives - Martha and Jane's Marriage and BusinessPartnership show the same couple in different roles - Each participant has role-specific fields - Competition relationship shows non-familial connections 3. **Locations** -> provide narrative context with prose descriptions - `MarthasBakery` is referenced by schedules and behaviors - `MainStreet` connects the bakery to the wider community 4. **Life arcs** -> track progression across multiple dimensions - Career (BakerCareer), personal growth (Childhood) - Relationship quality (MarriageQuality), business success (BusinessGrowth) ## Usage This example shows how to: - Define species with default fields for character archetypes - Build reusable templates with species inheritance - Use concepts and sub-concepts for type-safe enumerations - Create concept comparisons for compile-time pattern matching - Define life arcs with field requirements for validation - Model relationships with asymmetric participant perspectives - Create locations and institutions with prose descriptions - Compose schedules through inheritance and overrides - Link schedules to behaviors through action references - Model realistic daily routines with time-of-day variations