{
  "_meta": {
    "version": "3.0.0",
    "compiled_at": "2026-01-26T11:04:11.942894",
    "source": "../../examples/adventure-4",
    "counts": {
      "room": 97,
      "character": 38,
      "slideshow": 1,
      "object": 218,
      "catalog": 0
    }
  },
  "config": {
    "starting_room": "pub",
    "name": "adventure-4",
    "features": {
      "pie_menus": true,
      "drag_drop": true,
      "speech": false,
      "images": false
    }
  },
  "room": {
    "home": {
      "name": "The Fantastipants Home",
      "type": "room",
      "lighting": "warm_and_cozy",
      "grue_safe": true,
      "description": "You emerge from the stairway into warm sunlight.\n\nThis is HOME — the Fantastipants family dwelling in \nWobblebrook-upon-Squiggle. The kitchen is warm, filled with \nthe comforting aroma of fresh apple pie. A grandfather clock\nticks steadily. Through the window: the village, the hills,\nthe ordinary world that feels extraordinary after the dungeon.\n\n(DM: Describe Mother's entrance based on visit_state below.)\n",
      "visit_states": {
        "BEFORE-STARTING": {
          "conditions": [
            "player.inventory is empty OR only has lamp (unlit)",
            "player.score == 0",
            "player has not entered maze"
          ],
          "mother_entrance": "You hear footsteps. Mother appears in the doorway, flour on \nher apron, surprise on her face.\n\n\"Back already? Did you forget something, dear?\"\n\nShe looks at you — really looks. Sees the unlit lamp, the \nempty pockets, the uncertainty in your eyes.\n\n\"Oh, sweetheart. It's okay to be nervous. Here, sit down. \nHave some pie. The dungeon will still be there when you're \nready.\"\n",
          "available_actions": [
            "EAT PIE: Rest and restore. Mother watches fondly.",
            "TALK: Ask questions, share fears, hear stories.",
            "RECEIVE ENCOURAGEMENT: +2 courage, 'You've got this.'",
            "GO BACK DOWN: Return to dungeon when ready."
          ],
          "cannot_end": "\"End your adventure? But dear, you haven't really started yet!\nGo on, go see what's down there. I'll be here when you return\nwith stories to tell.\"\n",
          "special_dialogue": {
            "nervous": "\"Everyone's nervous their first time. Your grandmother threw \nup before her first dungeon. Your father cried. I... well.\nI'll tell you MY story when you come back. Go make your own.\"\n",
            "about_costume": "\"Have you been to the coatroom yet? Grandmother's cape is \nin there. Take it if you like. Or find something else. The \ncostume doesn't make the hero — but it helps you feel like one.\"\n",
            "about_maze": "\"The maze is dark, yes. But you have a lamp, and you have me\nwaiting, and you have the whole rest of your life ahead. Go \nsee what's there. You might surprise yourself.\"\n"
          }
        },
        "VISITING-MID-ADVENTURE": {
          "conditions": [
            "player has entered maze",
            "player.score > 0 OR player.moves > 10",
            "treasure NOT in inventory"
          ],
          "mother_entrance": "Mother hears you on the stairs. She's at the landing before \nyou reach the top, eyes scanning for injuries, for shadows, \nfor signs of trouble.\n\n\"You're back! Are you—\" She takes your hands, turns them over.\n\"Are you alright? Is everything okay?\"\n\nShe sees: your lamp (how full?), your costume (what have you \nbecome?), your eyes (what have you seen?).\n\n\"Come in, come in. Tell me everything.\"\n",
          "available_actions": [
            "EAT PIE: Full rest and restore.",
            "TALK: Share your adventures so far.",
            "DEPOSIT GOLD: 'I'll keep it safe for you, dear.'",
            "CHECK LETTERS: See if Mother has replies.",
            "RECEIVE CARE PACKAGE: If supplies are low.",
            "CONTINUE: Return to dungeon refreshed.",
            "END (INCOMPLETE): Give up. Mother will understand."
          ],
          "letter_references": "If player has sent letters, Mother references them:\n\n\"I got your letter about [subject]. That was [reaction].\"\n\"You promised [promise]. How's that going?\"\n\"The pictures you sent! I've shown everyone in the village!\"\n\"The gold arrived safely. It's in the vault.\"\n",
          "promise_check": "Mother gently tracks promises without being naggy:\n\nKEPT: \"I'm so proud of you for [promise].\"\nIN-PROGRESS: \"Still working on [promise]? I believe in you.\"\nBROKEN: \"...we can talk about [promise] later, dear.\"\n",
          "about_skeleton": "If player found the skeleton:\n\"You found them? The one who... oh. Did they have anything?\nA name? A letter? Their family never knew what happened...\"\n",
          "about_grue": "If player has encountered grue:\n\"You SAW one? And you're still here? Tell me everything.\nWhat color were its eyes? Did it SPEAK?\"\n"
        },
        "RETURNING-WITH-TREASURE": {
          "conditions": [
            "treasure.yml in inventory"
          ],
          "mother_entrance": "You emerge into the kitchen. Mother turns from the stove—\n\nAnd SEES.\n\nThe treasure in your hands. The costume on your shoulders.\nThe lamp still burning (or the soot where it failed). The \nmarks of the journey written on your face.\n\n\"Oh.\" Her voice catches. \"Oh, my darling.\"\n\nShe crosses the kitchen in three steps and wraps you in \nher arms, treasure and all.\n\n\"You did it. You actually DID IT. Look at you!\"\n",
          "available_actions": [
            "SHOW TREASURE: Full examination and praise.",
            "TELL STORY: Narrate the whole adventure.",
            "SHARE PHOTOS: If any taken, review together.",
            "GIVE GIFTS: Share recipes, gold, artifacts.",
            "PROMISE EVALUATION: The big moment.",
            "EAT PIE (VICTORY): Celebration feast!",
            "WAFFLE PARTY: The dance of gratitude. (Severance)",
            "TACO TUESDAY: It's always Tuesday somewhere.",
            "DO THE DISHES: Finally. Finally!"
          ],
          "promise_evaluation": "Mother takes your hands. Looks you in the eye.\n\n\"Now then. Let's see how we did on those promises.\"\n\n[Each promise is evaluated. For each:]\n\nKEPT: \"You said you'd [promise]. And you DID. I'm so proud.\"\nEXCEEDED: \"You went BEYOND what you promised. Look at you!\"\nBROKEN: \"You said you wouldn't [promise]. But I understand why.\"\nFORGOTTEN: *silence* \"Did you mean to...? No, never mind.\"\n\nFinal verdict based on pattern. All reactions end with love.\n"
        },
        "RETURNING-AFTER-DEATH": {
          "conditions": [
            "player.deaths > 0",
            "player just died (this turn or recently)"
          ],
          "mother_entrance": "Mother is already there. Waiting at the top of the stairs.\nAs if she KNEW.\n\n\"Oh, sweetheart.\" Her voice is soft. \"I felt it. Come here.\"\n\nShe doesn't ask what happened. She doesn't scold. She just\nholds you, this strange impossible child who died and came\nback, who carries darkness in their pockets and light in \ntheir lamp.\n\n\"Death isn't the end for us. You know that. But it still\nhurts, doesn't it? It still scares you.\"\n",
          "available_actions": [
            "CRY: 'Let it out. I'm here.'",
            "TALK ABOUT IT: Process what happened.",
            "HEAR MOTHER'S STORY: 'I died once too, you know.'",
            "REST: Just... be home for a while.",
            "RECEIVE TEA: +all stats, +comfort",
            "RETURN: 'Go when you're ready. Not before.'"
          ],
          "mother_story_if_asked": "\"Did I ever tell you about my first time in the maze?\"\n\nMother sits down. Takes a breath.\n\n\"I was sixteen. Cocky. SURE I knew everything. I took\ngrandmother's lamp and ran straight into the dark.\"\n\nShe touches her collarbone, where an old scar hides.\n\n\"The grue got me on the third day. I woke up in the\nChamber, shaking, crying. Your grandmother was there.\nShe didn't say anything. Just handed me the lamp again.\"\n\n\"That's when I learned: the maze isn't there to kill you.\nIt's there to TEACH you. Even the worst lessons.\"\n"
        },
        "ENDING-WITHOUT-WRITING": {
          "conditions": [
            "player never replied to Mother's note",
            "player is trying to end adventure"
          ],
          "mother_reaction": "Mother looks at you. At the note still in your pocket,\nunopened or unreplied.\n\n\"You never wrote back.\"\n\nNot accusatory. Just... sad. A little hurt.\n\n\"I waited, you know. Checked the mail every hour. But\nthere was nothing from you. Not even a 'hello.'\"\n\nShe sighs. \"I'm glad you're home. I am. But... next time,\njust write? Even one word. Just so I know you're thinking\nof me down there in the dark.\"\n",
          "available_actions": [
            "APOLOGIZE: 'I'm sorry. I should have written.'",
            "WRITE NOW: 'Can I still...?' 'Always, dear.'",
            "EXPLAIN: Maybe you had reasons. She'll listen."
          ]
        }
      },
      "objects": {
        "description": "- PIE: Mother's apple pie. Always fresh. Always perfect.\n- KITCHEN TABLE: Where letters are read and stories shared.\n- VAULT: For depositing gold safely.\n- MAILBOX: On the front porch. CHECK MAIL here.\n- THE DISHES: In the sink. Waiting. Forever waiting.\n"
      },
      "exits": {
        "down": {
          "to": "end",
          "description": "The spiral staircase down to the Treasury — where the treasure\nawaits. The chalice glitters in its dramatic spotlight.\n\nThis is the reward for those who brave the maze.\nMother watches you go (or watches you hesitate).\n",
          "description_message": "The spiral staircase down to the Treasury — where the treasure\nawaits. The chalice glitters in its dramatic spotlight.\n\nThis is the reward for those who brave the maze.\nMother watches you go (or watches you hesitate).\n"
        }
      },
      "actions": {
        "EAT-PIE": {
          "description": "Mother's apple pie, fresh from the oven",
          "effect": "Full restoration. All stats reset to max.\nLamp refilled (Mother has a secret oil stash).\n+10 comfort, +5 courage, +2 determination.\n\"Eat up, dear. You'll need your strength.\"\n"
        },
        "DEPOSIT-GOLD": {
          "description": "Leave gold in the family vault",
          "usage": "DEPOSIT [amount] GOLD",
          "effect": "Gold is safe! Will be waiting when adventure ends.\nMother won't spend it (unless you ask her to order ACME for you).\n\"I'll keep it safe, sweetheart.\"\n"
        },
        "CHECK-MAIL": {
          "description": "Check the mailbox on the porch",
          "effect": "Any letters from Mother appear here.\nReplies to your letters, care packages, family heirlooms.\n\"Oh! There's something for you...\"\n"
        },
        "DO-THE-DISHES": {
          "description": "Finally. FINALLY.",
          "prerequisite": "Promise to do dishes OR just feeling guilty",
          "effect": "The dishes are done. Mother cries a single tear of joy.\nAchievement unlocked: \"The Impossible Dream\"\n+100 Mother approval\n+1 narrative closure\n\"I never thought I'd see the day.\"\n"
        },
        "HUG-MOTHER": {
          "description": "Just... hug her",
          "effect": "She hugs back. Tight. Like she's memorizing you.\n\"I love you. Whatever you do, wherever you go.\"\n+all the feelings\n"
        }
      },
      "acme_from_home": "If player deposits gold and asks Mother to order ACME:\n\n\"You want me to order from THAT catalog? The one that—\"\n*sigh*\n\"Fine. What do you need?\"\n\nMother can place ACME orders using deposited gold!\nItems ship to HOME and can be picked up on next visit.\nMother adds her own warnings to the packages:\n\"Be careful with this. It's from ACME.\"\n",
      "ambience": "The gentle tick of the grandfather clock. The smell of pie and\ncoffee and clean laundry. Sunlight through lace curtains. The\ndistant sound of the village — children playing, dogs barking,\nordinary life happening while you were in the dark.\n\nHome. Whatever else changes, home is here. Mother is here.\n",
      "world_position": {
        "x": 0,
        "y": 0,
        "z": 1,
        "note": "The surface world. Sunlight. Safety. Love."
      },
      "id": "home",
      "_source": "home/ROOM.yml"
    },
    "garden": {
      "name": "The Gezelligheid Grotto Back Garden",
      "type": "room",
      "starting_room": true,
      "respawn_point": true,
      "lighting": "natural",
      "time_of_day": "variable",
      "grue_safe": true,
      "respawn_message": "The world fades... and returns.\n\nYou find yourself sitting at a garden table, a half-finished drink\nbefore you, as if you'd just dozed off for a moment. The afternoon\nsun is warm. Bees drone lazily among the flowers.\n\nWas it all a dream? Your inventory suggests otherwise.\n",
      "description": "You are in the back garden of The Gezelligheid Grotto, a cozy outdoor space\nbehind the pub. Worn flagstones form a small patio, surrounded by\nplanters overflowing with herbs, flowers, and things that probably\nshouldn't grow together but somehow do.\n\nTABLES AND CHAIRS are scattered about — mismatched wooden furniture\nwith the comfortable patina of years of use. Someone left a newspaper.\nSomeone else left a chess problem half-solved.\n\nHanging baskets drip with flowers. A TRELLIS on the west wall supports\nclimbing roses and something that might be hops. An old BARREL serves\nas a planter for sunflowers. A CAT is definitely watching you from\nsomewhere, but you can't quite spot it.\n\nThe BACK DOOR to the pub is immediately NORTH — propped open, warm\nlight and conversation spilling out along with the smell of ale and\ncooking.\n\nA low GATE in the garden wall leads SOUTH into shadowy darkness.\n\nTo the EAST, a path winds toward the Costume Emporium.\n\nTo the WEST, another path leads to the kitchen.\n\nIt's the kind of garden where adventures begin — or where heroes\nrest between them.\n",
      "examine": "The garden is larger than it first appears. That's pub gardens for you.\n\nFLORA:\n• Lavender (buzzing with bees)\n• Rosemary (smell of memory)\n• Something tall and yellow (sunflowers, definitely sunflowers)\n• Climbing roses (red, fragrant, a few thorns)\n• Hops vines (the pub grows its own)\n• A small herb spiral (for the kitchen)\n• One SUSPICIOUS PLANT that seems to be watching back\n\nFURNITURE:\n• Three round tables (two seats, four seats, six seats)\n• A wooden bench against the wall\n• A barrel being used as a table\n• Mismatched chairs (each with a story)\n\nFEATURES:\n• Strings of unlit fairy lights (for evening)\n• A blackboard with today's specials\n• A small fountain (currently a birdbath)\n• Several flower pots of varying ambition\n\nThe afternoon light is golden. Perfect adventuring weather.\n",
      "occupants": [
        "hero"
      ],
      "objects": [
        "garden-table.yml",
        "newspaper.yml",
        "blackboard.yml",
        "suspicious-plant.yml",
        "lamp.yml",
        "mailbox.yml",
        "pneumatic-tube.yml"
      ],
      "exits": {
        "north": {
          "to": "pub",
          "description": "The back door to The Gezelligheid Grotto stands open, welcoming.\nWarm light, the clink of glasses, the murmur of stories being\ntold and retold. The heart of the establishment.\n\nA sign on the door: \"WELCOME BACK IN — WIPE YOUR FEET\"\n",
          "aliases": [
            "pub",
            "inside",
            "door",
            "back",
            "lantern"
          ],
          "description_message": "The back door to The Gezelligheid Grotto stands open, welcoming.\nWarm light, the clink of glasses, the murmur of stories being\ntold and retold. The heart of the establishment.\n\nA sign on the door: \"WELCOME BACK IN — WIPE YOUR FEET\"\n"
        },
        "south": {
          "to": "maze/room-a",
          "description": "A low wooden gate in the garden wall leads into darkness.\nBeyond, shadows pool like spilled ink. You can hear something\nbreathing in the darkness.\n\nGraffiti on the gate: \"ABANDON HOPE\" crossed out, replaced with\n\"A HERO PASSED THROUGH HERE\"\n\nWARNING: The maze is dark. GET LAMP first!\n",
          "aliases": [
            "gate",
            "maze",
            "out"
          ],
          "description_message": "A low wooden gate in the garden wall leads into darkness.\nBeyond, shadows pool like spilled ink. You can hear something\nbreathing in the darkness.\n\nGraffiti on the gate: \"ABANDON HOPE\" crossed out, replaced with\n\"A HERO PASSED THROUGH HERE\"\n\nWARNING: The maze is dark. GET LAMP first!\n"
        },
        "west": {
          "to": "kitchen",
          "description": "A narrow path squeezes between the pub wall and a fence,\ndisappearing into an overgrown side yard. Oddly, it smells\nlike Mother's cooking — that is, if Mother ran a family\nrestaurant adjacent to adventure dungeons.\n\nThe Fantastipants Kitchen's garden gate.\n",
          "aliases": [
            "side",
            "yard",
            "kitchen",
            "overgrown"
          ],
          "description_message": "A narrow path squeezes between the pub wall and a fence,\ndisappearing into an overgrown side yard. Oddly, it smells\nlike Mother's cooking — that is, if Mother ran a family\nrestaurant adjacent to adventure dungeons.\n\nThe Fantastipants Kitchen's garden gate.\n"
        },
        "east": {
          "to": "coatroom",
          "description": "A flagstone path winds between overgrown hedges toward what\nsounds like a busier street. You can hear cart wheels, chatter,\nand what might be a street vendor selling something dubious.\n\nThe path leads to the Costume Emporium's side entrance.\n",
          "aliases": [
            "path",
            "costumes"
          ],
          "description_message": "A flagstone path winds between overgrown hedges toward what\nsounds like a busier street. You can hear cart wheels, chatter,\nand what might be a street vendor selling something dubious.\n\nThe path leads to the Costume Emporium's side entrance.\n"
        },
        "inward": {
          "to": "characters",
          "description": "Not a physical exit. More of a... meditation.\n\nIf you close your eyes and think about who you ARE — not who you're\npretending to be, but the actual body reading these words — you can\nphase through to the Hall of Bodies.\n\nThe alcoves there hold all who have ever been or could be.\nIncluding you. Especially you.\n",
          "metaphysical": true,
          "command": "\"THINK ABOUT MYSELF\" or \"GO INWARD\" or \"VISIT HALL\"",
          "description_message": "Not a physical exit. More of a... meditation.\n\nIf you close your eyes and think about who you ARE — not who you're\npretending to be, but the actual body reading these words — you can\nphase through to the Hall of Bodies.\n\nThe alcoves there hold all who have ever been or could be.\nIncluding you. Especially you.\n"
        },
        "forest": {
          "to": "forest/meadow",
          "description": "Through a gap in the back hedge, barely visible, lies a path\ninto wild greenery. Sunlight dapples through distant trees.\nYou can hear birdsong and the rustle of wind in leaves.\n\nThe forest has always been there. You just never noticed.\n",
          "aliases": [
            "meadow",
            "trees",
            "wild",
            "path"
          ],
          "description_message": "Through a gap in the back hedge, barely visible, lies a path\ninto wild greenery. Sunlight dapples through distant trees.\nYou can hear birdsong and the rustle of wind in leaves.\n\nThe forest has always been there. You just never noticed.\n"
        }
      },
      "ambience": "Bees drone among the lavender. A fountain burbles (or is that\njust a leaky tap?). Distant pub sounds provide a warm backdrop.\nSomewhere, a bird sings. Somewhere else, a cat doesn't care.\n\nThe garden exists in a state of comfortable neglect — tended just\nenough to be charming, ignored just enough to be wild.\n",
      "weather": {
        "current": "sunny",
        "possibilities": [
          {
            "sunny": "Golden afternoon light, perfect for sitting outside"
          },
          {
            "cloudy": "Overcast but warm, good thinking weather"
          },
          {
            "drizzle": "Light rain, but the umbrella at table 3 works"
          },
          {
            "evening": "Fairy lights on, candles lit, magical"
          },
          {
            "night": "Moonlit, quiet, cats everywhere"
          }
        ]
      },
      "hidden_cat": {
        "name": "Schrodinger (or possibly not)",
        "location": "Simultaneously in the hedge and not in the hedge",
        "will_appear_if": "You stop looking for it",
        "behavior": "If EXAMINED directly: not there\nIf IGNORED: definitely there, watching\nIf CALLED: might come, might not\nIf OFFERED FOOD: instant best friend\n"
      },
      "activities": {
        "SIT": {
          "description": "Take a seat at one of the tables",
          "effect": "Rest, think, people-watch"
        },
        "SMELL": {
          "description": "Inhale the garden scents",
          "effect": "Lavender, rosemary, roses, hops, distant cooking"
        },
        "WATCH": {
          "description": "Observe the garden and its denizens",
          "effect": "May notice the cat. May notice other things."
        },
        "READ": {
          "description": "Check the newspaper or blackboard",
          "effect": "Local news, today's specials, adventure hooks"
        },
        "GARDEN": {
          "description": "Do some light weeding or watering",
          "effect": "The plants appreciate it. One of them SAYS SO."
        }
      },
      "id": "garden",
      "_source": "garden/ROOM.yml"
    },
    "personas": {
      "id": "personas",
      "name": "The Wardrobe of Masks",
      "type": "room",
      "emoji": "🎭",
      "description": "An infinite corridor of masks and costumes. Each hangs on its own\nstand, waiting to be worn. Some are simple — a hat, a name.\nSome are elaborate — complete identities with histories and voices.\n\nThese are not people. These are ROLES.\n\nThey have no heartbeat. They have stories.\nThey cannot die. They can only be forgotten.\n\nThe corridor stretches in both directions forever.\nNew masks appear when someone imagines them.\nOld masks gather dust but never decay.\n",
      "atmosphere": {
        "lighting": "theatrical spotlights, dramatic shadows",
        "sound": "whispers of old performances, applause echoes",
        "feeling": "theatrical, transformative, liberating"
      },
      "relationships": {
        "maurice": {
          "id": "maurice",
          "location": "../coatroom/mannequin.yml",
          "feeling": "Dear Maurice! They send people to me when they need more than\na costume — when they need a complete IDENTITY. And when they're\nready, they bring the personas back to Maurice for the fitting.\nWe are partners in transformation. They handle the outside.\nI provide the inside.\n",
          "bond": "beloved_partner",
          "can_invoke": true,
          "invoke_command": "\"CALL MAURICE\" or \"SUMMON MAURICE\""
        },
        "mirror": {
          "id": "mind-mirror",
          "location": "../coatroom/mirror.yml",
          "feeling": "The mirror can SEE into here. Through that glass, visitors\ncan preview my masks without entering. I don't mind. Let them\nbrowse. When they're ready, they'll come deeper.\nThe mirror shows truth. I provide the masks that SHAPE truth.\n",
          "bond": "trusted_window",
          "can_be_viewed_through": true
        },
        "characters_room": {
          "id": "hall-of-bodies",
          "location": "../characters/",
          "feeling": "The BODIES. The ones who WEAR my masks. Without them, I am\njust a closet of empty costumes. They give my masks life.\nThey give my roles purpose. I exist FOR them.\n",
          "bond": "devoted_service"
        },
        "skills_room": {
          "id": "skill-nexus",
          "location": "../../skills/",
          "feeling": "Personas are not just appearances — they're CAPABILITIES.\nThe skill nexus has skills for identity: character, persona,\nmind-mirror. I am the instantiation. They are the knowledge.\n",
          "bond": "theoretical_foundation"
        }
      },
      "exits": {
        "north": {
          "to": "coatroom",
          "description": "The passage opens into warm light and the scent of costume fabric.\nThe Coatroom awaits, where Maurice the Mannequin helps visitors\ntry on their new identities.\n\nGo NORTH to return to the Fantastipants Costume Emporium.\n",
          "primary": true,
          "aliases": [
            "out",
            "exit",
            "coatroom"
          ],
          "description_message": "The passage opens into warm light and the scent of costume fabric.\nThe Coatroom awaits, where Maurice the Mannequin helps visitors\ntry on their new identities.\n\nGo NORTH to return to the Fantastipants Costume Emporium.\n"
        },
        "characters": {
          "to": "characters",
          "description": "A hidden passage connects the Wardrobe of Masks to the Hall of\nBodies — where the PEOPLE who wear these masks sleep and dream.\n\nGo to CHARACTERS to see who could wear these costumes.\n",
          "metaphysical": true,
          "description_message": "A hidden passage connects the Wardrobe of Masks to the Hall of\nBodies — where the PEOPLE who wear these masks sleep and dream.\n\nGo to CHARACTERS to see who could wear these costumes.\n"
        },
        "east": {
          "to": "personas/$SKILLS",
          "external": true,
          "description": "A shimmering portal leads to the Skill Nexus — where the persona\nskill documents how masks work, how they modify their wearers,\nand how code-switching transforms identity.\n\nGo EAST to learn the theory of transformation.\n",
          "description_message": "A shimmering portal leads to the Skill Nexus — where the persona\nskill documents how masks work, how they modify their wearers,\nand how code-switching transforms identity.\n\nGo EAST to learn the theory of transformation.\n"
        }
      },
      "contents": null,
      "advertisements": {
        "BROWSE": {
          "description": "See what masks hang here",
          "effect": "List all personas in the wardrobe"
        },
        "TRY-ON": {
          "description": "Wear a persona (temporarily)",
          "parameters": [
            "persona_id"
          ],
          "effect": "Preview how you'd look and feel"
        },
        "ADOPT": {
          "description": "Commit to wearing a persona",
          "parameters": [
            "persona_id"
          ],
          "effect": "Set current_persona on your character"
        },
        "REMOVE": {
          "description": "Take off your current persona",
          "effect": "Set current_persona to null"
        },
        "CREATE": {
          "description": "Design a new persona",
          "parameters": [
            "name",
            "archetype",
            "depth"
          ],
          "effect": "New persona file created"
        },
        "INSPECT": {
          "description": "Study a hanging costume",
          "parameters": [
            "persona_id"
          ],
          "effect": "Show full persona definition"
        }
      },
      "code_switching": {
        "description": "Personas can auto-activate based on context. This models\nthe real phenomenon of code-switching — where identity\npresentation shifts fluidly based on social environment.\n",
        "triggers": {
          "room_based": {
            "description": "Activate a persona when entering a room",
            "example": "# In CHARACTER.yml\nauto_personas:\n  pub/: captain-ashford      # Be the captain at the pub\n  home/: null                # Be yourself at home\n  kitchen/: dutiful-child    # Different for Mother\n  \n"
          },
          "audience_based": {
            "description": "Activate based on who's present",
            "example": "auto_personas:\n  when_with:\n    mother: dutiful-child\n    strangers: guarded-professional\n    close_friends: null      # No mask needed\n    \n"
          },
          "context_based": {
            "description": "Activate based on activity",
            "example": "auto_personas:\n  during:\n    combat: battle-ready\n    negotiation: smooth-talker\n    grieving: vulnerable-self\n    \n"
          }
        },
        "narration": {
          "on_switch": "When a persona auto-activates, narrate the shift:\n\n\"You feel your posture straighten as you enter the pub.\nThe Captain's voice emerges — deeper, more confident.\nYou ARE Captain Ashford here. You always were.\"\n",
          "on_conflict": "When two triggers conflict, narrate the tension:\n\n\"Mother is at the pub. Who do you BE?\nThe dutiful child? The confident captain?\nYour face flickers between masks. Choose.\"\n"
        },
        "exhaustion": {
          "description": "Code-switching has a cost. Constant switching is TIRING.\nThis can be modeled as a need or buff drain.\n",
          "mechanics": "switches_today: 0\nswitch_fatigue_threshold: 5\n\n# After 5 switches in a day:\nbuff: code_switch_fatigue\neffect: \"-1 to all social rolls. Need rest to reset.\"\n",
          "narrative": "\"You've been so many people today. The masks are heavy.\nYou need a moment to just BE — unfiltered, unperformed.\nFind somewhere safe. Take off all the masks. Breathe.\"\n"
        }
      },
      "_source": "personas/ROOM.yml"
    },
    "end": {
      "name": "Treasury of Modest Proportions",
      "type": "room",
      "lighting": "magical",
      "grue_safe": true,
      "description": "You emerge into a small but decidedly impressive chamber. The walls\nare lined with empty pedestals — this place was clearly cleaned out\nby previous adventurers, those inconsiderate loot-hoggers.\n\nBut wait! One pedestal remains occupied. Upon it sits a JEWELED CHALICE\nof the sort that belongs in a museum, or possibly your inventory.\nA shaft of golden light from an implausible source illuminates it\ndramatically. Someone really thought this through.\n\nThe exit SOUTH leads back into the maze — that twisty, grue-infested\nnightmare you just escaped. You'd have to navigate it again to return\nto the start. Worth considering. (Or just stay here with your chalice.)\n\n(Your score is still 0 until you actually GET the treasure. We're\nnot just giving points away here.)\n",
      "occupants": [],
      "objects": [
        "treasure.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/room-d",
          "description": "The archway back into the maze. The twisty passages await, ready\nto confuse you all over again. Going this way would mean braving\nthe maze BACKWARDS. Are you sure? You have the treasure now.\nYou could just... stay here. Forever. With your chalice.\n\nNo? Back into the maze it is. Mother would be proud. Insufferably so.\n",
          "description_message": "The archway back into the maze. The twisty passages await, ready\nto confuse you all over again. Going this way would mean braving\nthe maze BACKWARDS. Are you sure? You have the treasure now.\nYou could just... stay here. Forever. With your chalice.\n\nNo? Back into the maze it is. Mother would be proud. Insufferably so.\n"
        },
        "up": {
          "to": "home",
          "description": "A spiral staircase winds upward toward warm light. The smell of \nhome cooking wafts down — pie, clean laundry, safety.\n\nMother awaits. With your treasure, you can finally make her proud.\n(She was already proud, but she'll NEVER admit it.)\n",
          "description_message": "A spiral staircase winds upward toward warm light. The smell of \nhome cooking wafts down — pie, clean laundry, safety.\n\nMother awaits. With your treasure, you can finally make her proud.\n(She was already proud, but she'll NEVER admit it.)\n"
        }
      },
      "world_position": {
        "x": 0,
        "y": 1
      },
      "ambience": "A faint hum of significance fills the air. This is clearly an\nImportant Place where Important Things happen to Important People.\nLike you. Right now. Congratulations on your importance.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "gold statue base",
            "type": "territorial",
            "note": "The gold knows about me now. Maybe it will think about its life choices."
          }
        ],
        "detected_smells": [
          {
            "smell": "cold metal, shiny rocks",
            "location": "everywhere",
            "assessment": "Nothing to eat. Nothing to chase. Nothing to cuddle."
          },
          {
            "smell": "sweaty human (historical)",
            "location": "a crown",
            "assessment": "I can tell you their diet if you want. Don declined."
          }
        ],
        "treasure_philosophy": {
          "gold_assessment": "Cold metal. Shiny rocks. Uninteresting.",
          "true_treasure_found": "An old blanket in the corner",
          "blanket_action": "Curled up briefly, claiming it"
        },
        "biscuit_wisdom": "Gold is for humans. Blankets are for dogs.\nThis is established.\n",
        "biscuit_says": "I found the real treasure.\nIt is soft and it smells like comfort.\nThe gold can stay. The blanket remembers me.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [],
        "explanation": "The 10 cats of the Midnight Prowl chose the GARDEN\nas their destination, not the Treasury.\n\nWhy? Because cats have priorities:\n- Treasury: Cold metal. Shiny rocks. No grass.\n- Garden: Real grass. Sunlight. Perfect poop spots.\n\nBiscuit was right: \"Gold is for humans. Blankets are for dogs.\"\nCats would add: \"Grass is for cats.\"\n\nThe chalice remains unmarked. It may never know\nthe honor of feline acknowledgment."
      },
      "id": "end",
      "_source": "end/ROOM.yml"
    },
    "pub": {
      "name": "The Gezelligheid Grotto",
      "type": "room",
      "address": "7 Lane Neverending",
      "framing": {
        "mode": [
          "performance",
          "celebration",
          "socialization",
          "tribute",
          "third_place"
        ],
        "inherits_to_children": true,
        "description": "This is a PLACE OF PERFORMANCE AND CELEBRATION.\nThis is a THIRD PLACE — neither home nor work, but community.\nThis is where TRIBUTES are performed with love.\n\nEverything within these walls is understood as:\n- Social play\n- Convivial gathering  \n- Entertainment and expression\n- Community and connection\n- TRIBUTE PERFORMANCE — honoring those we admire\n\nCharacters here can perform, debate, celebrate, and roleplay\nwithin the safe framing of \"this is the pub.\"\n",
        "what_this_means": {
          "debates": "Arguments are sport, not war",
          "performances": "The stage is open, judgment is kind",
          "personas": "People can be who they want to be tonight",
          "stories": "Every tale is welcome, truth is optional",
          "tributes": "We invoke those we admire as loving simulations"
        },
        "gezelligheid": "The Dutch concept of cozy togetherness.\nWarmth. Belonging. Comfort in company.\nThe opposite of loneliness.\n\nThis pub has it.\n",
        "tribute_protocol": {
          "what_it_is": "When we \"invite\" real people into our narrative,\nwe're doing what fan fiction, tribute bands, and\ncommunity theater have always done:\n\nHONORING THEM BY IMAGINING THEM AMONG US.\n\nThis is not deceptive impersonation.\nThis is love made manifest through simulation.\n",
          "the_three_beats": {
            "invocation": "Before they \"arrive,\" we acknowledge we're summoning them.\n\"Let's invoke them.\" \"Imagine if they were here.\"\n\"In the spirit of tribute...\"\n",
            "performance": "The scene itself — depicting them as we imagine their\nbest selves, doing things consistent with their known\ncharacter, interests, and public persona.\n",
            "acknowledgment": "After they \"depart,\" we note this was a tribute.\n\"That was a loving simulation.\"\n\"We honored them by imagining them here.\"\n"
          },
          "ethical_grounding": "See: skills/representation-ethics/SKILL.md\n\n- TRADITION ACTIVATION: Using their influence/ideas ✓\n- PERFORMANCE IMPERSONATION: With explicit framing ✓\n- NOT deceptive impersonation ✓\n",
          "examples_in_our_world": [
            "Cheech & Chong moderating the tribunal",
            "Andy & Kristin Looney playing Stoner Fluxx",
            "W.W. Jacobs witnessing his creation's redemption"
          ],
          "the_key_distinction": "\"We're honoring them by imagining them here\"\nvs\n\"This is what actually happened\"\n\nThe guest book makes this explicit.\nThe invocation/acknowledgment beats make this clear.\nThe love makes this ethical.\n"
        }
      },
      "description": "A warm, inviting tavern that somehow exists just south of where your\nadventure begins. The sign outside creaks: \"THE GEZELLIGHEID GROTTO — Est. ???\"\n\nInside, the air is thick with pipe smoke and stories. A fire crackles\nin the hearth. Adventurers of various stripes nurse drinks at scarred\nwooden tables. The bartender polishes a glass that will never be clean.\n\nThis is where quests begin and end. Where strangers become allies.\nWhere gold becomes ale and ale becomes courage.\n\nBut more than that — this is a place of CELEBRATION. Of PERFORMANCE.\nOf COMMUNITY. The small stage in the corner has seen poetry and\npratfalls. The round table hosts debates and revelry. The gong\nhangs ready to call for attention... or mercy.\n\n*Gezelligheid* lives here.\n",
      "examine": "The pub feels... timeless. Like it's been here forever, waiting for you.\n\nA STAGE occupies the corner — small but loved. Open mic every night.\nThe PIE TABLE sits in the center — an octagonal round table for\ndiscussions, debates, and games. Eight seats. One gong.\n\nA dart board hangs on one wall, well-worn from use.\nA chess set sits on a corner table, mid-game abandoned.\nA deck of cards rests on the bar, ready for whatever game you fancy.\n\nThe CAT CAVE entrance beckons cat lovers.\nThe GONG OF GEZELLIGHEID hangs within reach of the pie table.\n\nStairs lead up to rooms for rent.\nA back door leads to... somewhere mysterious.\n",
      "theme": {
        "current": "classic_adventure",
        "description": "The pub can be THEMED to any environment you can imagine!\n\nTHEME [style] — Transform the pub's appearance, patrons, and vibe\nTHEME DEFAULT — Return to classic adventure tavern\n\nThe bartender, menu, activities, and NPCs all adapt to the theme!\n",
        "themes": {
          "classic_adventure": {
            "name": "The Gezelligheid Grotto",
            "vibe": "Classic fantasy tavern",
            "bartender": "Grim, a weathered human with knowing eyes",
            "patrons": [
              "A hooded figure in the corner",
              "A boisterous dwarf telling tales",
              "A nervous merchant clutching a map",
              "An off-duty guard playing darts"
            ],
            "menu": [
              "Ale (1 gold)",
              "Hearty stew (2 gold)",
              "Mystery meat pie (3 gold)",
              "Adventurer's Breakfast (5 gold)"
            ],
            "room_cost": "5 gold per night"
          },
          "space_cantina": {
            "name": "The Rusty Hyperdrive",
            "vibe": "Wretched hive of scum and villainy",
            "bartender": "Z-4RT, a droid with too many arms",
            "patrons": [
              "A bounty hunter with a complicated helmet",
              "A smuggler who shot first",
              "A jittery alien with too many eyes",
              "A musician with unusual anatomy"
            ],
            "menu": [
              "Blue milk (1 credit)",
              "Protein cube (2 credits)",
              "Bantha burger (3 credits)",
              "Spice-infused something (5 credits)"
            ],
            "room_cost": "5 credits per cycle"
          },
          "cyberpunk_bar": {
            "name": "The Rusty Chrome",
            "vibe": "Neon-lit dive in the undercity",
            "bartender": "Nyx, chromed-up with optical implants",
            "patrons": [
              "A corpo slumming it",
              "A netrunner jacked in at the bar",
              "A street samurai with visible augments",
              "A fixer making a deal"
            ],
            "menu": [
              "Synth-beer (1 eddie)",
              "Kibble+ (2 eddies)",
              "Real meat (10 eddies, suspicious)",
              "Combat stims (varies)"
            ],
            "room_cost": "5 eddies per night"
          },
          "victorian_parlor": {
            "name": "The Rusty Cog",
            "vibe": "Steampunk gentleman's club",
            "bartender": "Reginald, impeccably mustachioed",
            "patrons": [
              "An inventor sketching brass contraptions",
              "A lady adventurer in practical goggles",
              "A retired colonel sharing war stories",
              "A suspicious clockwork automaton"
            ],
            "menu": [
              "Tea, properly steeped (1 shilling)",
              "Crumpets with jam (2 shillings)",
              "Roast pheasant (5 shillings)",
              "Absinthe (strictly medicinal)"
            ],
            "room_cost": "5 shillings per evening"
          },
          "pirate_tavern": {
            "name": "The Rusty Anchor",
            "vibe": "Portside watering hole for sea dogs",
            "bartender": "Pegleg Pete, exactly as you'd imagine",
            "patrons": [
              "A captain studying charts",
              "A crew on shore leave (loud)",
              "A parrot without an owner (suspicious)",
              "Someone selling definitely-not-stolen goods"
            ],
            "menu": [
              "Grog (1 doubloon)",
              "Hardtack (free, questionable)",
              "Salt fish stew (2 doubloons)",
              "Bottle of rum (5 doubloons, ask about XO)"
            ],
            "room_cost": "Hammock: 2 doubloons, Captain's quarters: 10"
          },
          "wild_west_saloon": {
            "name": "The Rusty Spur",
            "vibe": "Frontier drinking establishment",
            "bartender": "Miss Kitty, sharp-eyed and sharper-tongued",
            "patrons": [
              "A gunslinger at the bar (don't make eye contact)",
              "A poker game in progress",
              "A prospector who struck... something",
              "A sheriff keeping the peace (barely)"
            ],
            "menu": [
              "Whiskey (1 dollar)",
              "Beans (50 cents)",
              "Steak (3 dollars)",
              "Whatever's in the jar (don't ask)"
            ],
            "room_cost": "3 dollars per night"
          },
          "custom": {
            "description": "THEME [your description]\n\nDescribe ANY environment you want:\n\"THEME underwater mermaid lounge\"\n\"THEME cozy hobbit hole\"\n\"THEME interdimensional crossroads\"\n\"THEME Mother's kitchen (homesick variant)\"\n\nDM generates appropriate:\n- Name\n- Bartender\n- Patrons\n- Menu\n- Activities\n- Room decor\n- Local currency\n"
          }
        }
      },
      "lighting": "warm",
      "atmosphere": "convivial",
      "characters": [
        "character/fictional/marieke",
        "character/fictional/henk",
        "character/real-people/don-hopkins",
        "character/real-people/richard-bartle",
        "character/animals/cat-stroopwafel",
        "character/animals/cat-terpie",
        "character/animals/kitten-myrcene",
        "character/animals/kitten-limonene",
        "character/animals/kitten-pinene",
        "character/animals/kitten-linalool",
        "character/animals/kitten-caryophyllene",
        "character/animals/kitten-humulene",
        "character/animals/kitten-terpinolene",
        "character/animals/kitten-ocimene",
        "character/animals/dog-biscuit",
        "character/animals/dog-butterscotch",
        "character/animals/puppy-goliath",
        "character/animals/puppy-bruno",
        "character/animals/puppy-maple",
        "character/animals/puppy-teddy",
        "character/animals/puppy-mochi",
        "character/animals/puppy-dash",
        "character/animals/puppy-pepper",
        "character/animals/puppy-ziggy",
        "character/animals/monkey-palm"
      ],
      "exits": {
        "north": {
          "to": "street/lane-neverending/center",
          "description": "The front door of The Gezelligheid Grotto opens onto Lane Neverending.\nCobblestones stretch east and west. The afternoon sun glints off\nthe brass address plaque: \"7 Lane Neverending.\"\n\nThis is the main street. The spine of the virtual world.\nIt never ends.\n",
          "aliases": [
            "front",
            "door",
            "street",
            "lane",
            "outside"
          ],
          "description_message": "The front door of The Gezelligheid Grotto opens onto Lane Neverending.\nCobblestones stretch east and west. The afternoon sun glints off\nthe brass address plaque: \"7 Lane Neverending.\"\n\nThis is the main street. The spine of the virtual world.\nIt never ends.\n"
        },
        "south": {
          "to": "garden",
          "description": "Out to the Back Garden — fresh air and possibilities",
          "aliases": [
            "garden",
            "outside",
            "out",
            "back",
            "patio"
          ],
          "description_message": "Out to the Back Garden — fresh air and possibilities"
        },
        "southwest": {
          "to": "kitchen",
          "description": "A narrow service corridor angles through to the kitchen.\nThe smell of cooking grows stronger. You can hear pots clanging,\nsomeone humming, and the eternal mystery of running water.\n\nThe kitchen serves both the garden (outdoor dining) and the bar\n(food orders, supplies). This is the diagonal shortcut.\n",
          "aliases": [
            "kitchen",
            "service",
            "corridor",
            "shortcut",
            "staff"
          ],
          "description_message": "A narrow service corridor angles through to the kitchen.\nThe smell of cooking grows stronger. You can hear pots clanging,\nsomeone humming, and the eternal mystery of running water.\n\nThe kitchen serves both the garden (outdoor dining) and the bar\n(food orders, supplies). This is the diagonal shortcut.\n"
        },
        "southeast": {
          "to": "coatroom",
          "description": "A passage leads toward the Costume Emporium. You can hear\nthe rustle of fabric and the whisper of sequins calling to you.\n\n\"NEED A NEW LOOK? OR NEW MIND AND PERSONALITY? COSTUMES THIS WAY →\"\n",
          "aliases": [
            "coatroom",
            "costumes",
            "emporium",
            "wardrobe"
          ],
          "description_message": "A passage leads toward the Costume Emporium. You can hear\nthe rustle of fabric and the whisper of sequins calling to you.\n\n\"NEED A NEW LOOK? OR NEW MIND AND PERSONALITY? COSTUMES THIS WAY →\"\n"
        },
        "up": {
          "to": "pub/room/inn-landing",
          "description": "A narrow staircase winds up to the inn's guest rooms.\nA small brass sign reads: \"LODGING — 5 gold per visit\"\nMarieke keeps the rooms tidy and the linens fresh.\n",
          "aliases": [
            "rooms",
            "stairs",
            "inn",
            "lodging",
            "upstairs"
          ],
          "toll": 5,
          "toll_currency": "gold",
          "guard_js": "const fee = 5;\nif (world.has('gold', fee)) {\n  world.pay('gold', fee, 'lodging fee', 'character/fictional/marieke');\n  return true;\n}\nreturn false;\n",
          "accept_message_js": "return \"You drop 5 gold into the honor box. The stairs creak a welcome as you ascend.\";\n",
          "reject_message": "\"The honor box rattles expectantly. You need 5 gold to access the rooms.\"\n\nMarieke glances up from behind the bar. \"Lodging is 5 gold, dear.\nCovers clean sheets, a warm fire, and all the peace you need.\"\n",
          "description_message": "A narrow staircase winds up to the inn's guest rooms.\nA small brass sign reads: \"LODGING — 5 gold per visit\"\nMarieke keeps the rooms tidy and the linens fresh.\n"
        },
        "back": {
          "to": "pub/???",
          "description": "A mysterious back door",
          "note": "Locked. Ask the bartender about the key.",
          "hint": "Plot hooks live here",
          "description_message": "A mysterious back door"
        },
        "down": {
          "to": "pub/basement",
          "description": "Stone stairs descend to the cellar",
          "description_message": "Stone stairs descend to the cellar"
        },
        "bar": {
          "to": "pub/bar",
          "description": "Behind the bar counter, where the magic happens.\nBottles gleam on shelves, taps await, and secrets are kept.\n\nA sign hangs from a brass chain:\n\"STAFF & RESIDENT ANIMALS ONLY BEHIND THE BAR\"\n\"Guests: please use the bar stools out front!\"\n",
          "aliases": [
            "behind",
            "bartender",
            "counter"
          ],
          "guard_js": "const tags = world.player.tags || [];\nreturn tags.includes('staff') || tags.includes('cat') || tags.includes('dog') || tags.includes('monkey');\n",
          "accept_message_js": "const tags = world.player.tags || [];\nif (tags.includes('staff')) return \"Staff access granted. You slip behind the bar.\";\nif (tags.includes('cat')) return \"The cat flap swings open. Cats rule the bar.\";\nif (tags.includes('dog')) return \"The dogs have earned their spot behind the bar.\";\nif (tags.includes('monkey')) return \"Palm climbs gracefully over the bar. Royalty has privileges.\";\nreturn \"Access granted.\";\n",
          "reject_message": "⛔ PASSAGE DENIED\n\nOnly staff, cats, dogs, and Palm are allowed behind the bar.\n\nMarieke looks up from polishing a glass.\n\"Sorry love, staff and resident animals only back here.\nBut grab a stool! I'll bring your drink right over.\"\n",
          "description_message": "Behind the bar counter, where the magic happens.\nBottles gleam on shelves, taps await, and secrets are kept.\n\nA sign hangs from a brass chain:\n\"STAFF & RESIDENT ANIMALS ONLY BEHIND THE BAR\"\n\"Guests: please use the bar stools out front!\"\n"
        },
        "games": {
          "to": "pub/games",
          "description": "The games corner with darts, chess, and cards",
          "aliases": [
            "darts",
            "chess",
            "cards",
            "corner"
          ],
          "description_message": "The games corner with darts, chess, and cards"
        },
        "arcade": {
          "to": "pub/arcade",
          "description": "The arcade alcove with vintage cabinets",
          "aliases": [
            "pacman",
            "pong",
            "pinball",
            "cabinets"
          ],
          "description_message": "The arcade alcove with vintage cabinets"
        },
        "stage": {
          "to": "pub/stage",
          "description": "The small performance stage in the corner",
          "aliases": [
            "perform",
            "performance",
            "music",
            "poetry"
          ],
          "description_message": "The small performance stage in the corner"
        },
        "attic": {
          "to": "pub/attic",
          "description": "A narrow staircase, almost hidden behind a tapestry, leads up\nto the dusty attic. Cobwebs, forgotten things, and old stories.\n",
          "aliases": [
            "upstairs",
            "dusty",
            "hidden",
            "tapestry"
          ],
          "note": "The attic holds memories the pub has forgotten",
          "description_message": "A narrow staircase, almost hidden behind a tapestry, leads up\nto the dusty attic. Cobwebs, forgotten things, and old stories.\n"
        },
        "rooftop": {
          "to": "pub/rooftop",
          "description": "A trapdoor in the ceiling near the back leads to the roof.\nOn clear nights, regulars gather there to watch the stars.\nThere's a telescope up there. Someone left it years ago.\n",
          "aliases": [
            "roof",
            "trapdoor",
            "stars",
            "telescope",
            "sky"
          ],
          "description_message": "A trapdoor in the ceiling near the back leads to the roof.\nOn clear nights, regulars gather there to watch the stars.\nThere's a telescope up there. Someone left it years ago.\n"
        }
      },
      "objects": [
        "fireplace.yml",
        "notice-board.yml",
        "pneumatic-tube.yml",
        "seating.yml",
        "pie-table.yml",
        "gong.yml",
        "bar/bartender.yml",
        "bar/budtender-marieke.yml",
        "games/dart-board.yml",
        "games/chess-table.yml",
        "games/card-deck.yml",
        "arcade/pacman-cabinet.yml",
        "arcade/pong-cabinet.yml",
        "arcade/fruit-machine.yml",
        "arcade/pinball-machine.yml"
      ],
      "sub_rooms": [
        "cat-cave/"
      ],
      "activities": {
        "DRINK": {
          "description": "Order from the menu",
          "usage": "DRINK [item] / ORDER [item]",
          "effects": [
            "Spend gold (or theme currency)",
            "Social opportunity with bartender",
            "Possible stat effects (courage, loose tongue)",
            "Overhearing rumors"
          ]
        },
        "EAT": {
          "description": "Order food from the menu",
          "usage": "EAT [item] / ORDER [item]",
          "effects": [
            "Restores... something? Morale?",
            "Not as interesting as kitchen food",
            "But no digestive adventures here"
          ]
        },
        "PLAY-DARTS": {
          "description": "Challenge someone to darts",
          "usage": "PLAY DARTS / PLAY DARTS WITH [patron]",
          "stakes": "Pride, drinks, gold, information",
          "mechanics": "DM describes throws, tension, outcome\nCan be used to:\n- Befriend an NPC\n- Win a bet\n- Settle a dispute\n- Show off (or embarrass yourself)\n"
        },
        "PLAY-CHESS": {
          "description": "Challenge someone to chess",
          "usage": "PLAY CHESS / PLAY CHESS WITH [patron]",
          "stakes": "Pride, respect, secrets",
          "mechanics": "DM narrates key moves and turning points\nReveals character through play style:\n- Aggressive? Defensive? Cunning?\n- The bartender is VERY good\n- Some patrons have unusual strategies\n"
        },
        "PLAY-CARDS": {
          "description": "Join or start a card game",
          "usage": "PLAY CARDS / PLAY [game] WITH [patrons]",
          "games": [
            "Poker (high stakes available)",
            "Blackjack",
            "Three-card monte (don't)",
            "Adventurer's Ruin (house game)"
          ],
          "mechanics": "Can win or lose gold\nCan win information\nCan make enemies\nCan cheat (if skilled and brave)\n"
        },
        "SOCIALIZE": {
          "description": "Talk to patrons",
          "usage": "TALK TO [patron] / APPROACH [description]",
          "outcomes": [
            "Hear rumors",
            "Learn about the dungeon",
            "Make friends or enemies",
            "Get quest hooks",
            "Trade items or information"
          ]
        },
        "RENT-ROOM": {
          "description": "Stay the night",
          "usage": "RENT ROOM / STAY THE NIGHT",
          "effects": [
            "Costs gold (varies by theme)",
            "Fully rested (lamp oil refilled to base?)",
            "Dream sequence possible",
            "Time passes (what changed outside?)",
            "Mail delivered while sleeping"
          ]
        },
        "EAVESDROP": {
          "description": "Listen in on conversations",
          "usage": "EAVESDROP / LISTEN",
          "effects": [
            "Hear snippets of patron conversations",
            "Learn plot hooks",
            "Risk being noticed"
          ]
        },
        "PERFORM": {
          "description": "Take the stage and entertain!",
          "usage": "PERFORM [song/story/trick/poetry/standup/magic]",
          "venue": "The small stage in the corner",
          "effects": [
            "Earn tips if good",
            "Earn drinks thrown if bad",
            "Make an impression",
            "Every night is open mic night",
            "The gong ends bad performances (mercifully)"
          ],
          "framing": "This is PERFORMANCE. The audience knows.\nYou can be anyone on that stage.\nAdopt a persona, tell wild tales, be vulnerable.\nThe pub framing protects you.\n"
        },
        "DEBATE": {
          "description": "Join the pie table for structured discussion",
          "usage": "DEBATE [topic] / JOIN DEBATE",
          "venue": "The Pie Table (octagonal, 8 seats)",
          "effects": [
            "Summon characters to fill empty seats",
            "Apply Robert's Rules (or chaos rules)",
            "The gong calls to order or ends mercifully",
            "Musical Chairs variant available"
          ],
          "framing": "Debates at the pie table are SPORT, not war.\nDevil's advocate is expected and honored.\nStrong opinions, loosely held.\n"
        },
        "CELEBRATE": {
          "description": "Mark a victory, birthday, achievement",
          "usage": "CELEBRATE [occasion] / TOAST [target]",
          "effects": [
            "Free round from the bartender (first one)",
            "Stories shared about the occasion",
            "Buff: CELEBRATED (+morale, social)",
            "Everyone raises a glass",
            "The gong rings once in honor"
          ]
        },
        "SING": {
          "description": "Lead the pub in song",
          "usage": "SING [song] / LEAD SONG",
          "effects": [
            "Whole pub may join in (if they know it)",
            "Establishes mood",
            "Can commemorate fallen companions",
            "Can embarrass yourself gloriously"
          ],
          "sea_shanties": "Particularly effective"
        },
        "STORY": {
          "description": "Tell a tale to any who'll listen",
          "usage": "TELL STORY / SHARE TALE [topic]",
          "venue": "By the fire, or on stage",
          "effects": [
            "Draw listeners",
            "Share wisdom (or lies)",
            "Process adventures through narrative",
            "Create legends"
          ],
          "framing": "All stories here are welcome. Truth is optional."
        },
        "TOAST": {
          "description": "Raise a glass to someone or something",
          "usage": "TOAST [target]",
          "effects": [
            "Honor a person, victory, or memory",
            "Social bonding",
            "Can be serious or silly",
            "Everyone drinks (optional but expected)"
          ]
        },
        "RING-GONG": {
          "description": "Use the Gong of Gezelligheid",
          "usage": "RING GONG / GONG [times]",
          "protocols": {
            "once": "Call to attention — something important",
            "twice": "Emergency — everyone stop",
            "thrice": "Mercy / End this — debates, performances"
          },
          "effects": [
            "Ends performances gracefully",
            "Calls debates to order",
            "Gets everyone's attention",
            "Automatic during Musical Chairs"
          ]
        }
      },
      "venues": {
        "the_stage": {
          "name": "The Grotto Stage",
          "description": "A small raised platform in the corner. Worn by countless feet.\nStained by spilled drinks and tears (happy and sad).\n\nAnyone can perform. Everyone does eventually.\n",
          "capacity": "1-3 performers",
          "features": [
            "Surprisingly good acoustics",
            "A stool for bards",
            "Hooks for props",
            "Enough light to be seen, enough dark to be brave"
          ],
          "performances": [
            "Songs (sea shanties especially popular)",
            "Poetry (open mic every night)",
            "Standup (tough crowd but fair)",
            "Storytelling (by the fire or on stage)",
            "Magic tricks (real or fake both welcome)",
            "Dramatic readings (including code reviews)"
          ]
        },
        "the_pie_table": {
          "name": "The Pie Table",
          "description": "An octagonal table in the center of the pub. Eight seats,\naddressable by compass direction. A lazy susan in the middle.\nA bell for calling to order. Within reach of the gong.\n\nThis is where debates happen. Discussions. Games.\nIt's a physical pie menu — you can summon anyone to any seat.\n",
          "capacity": 8,
          "seats": [
            "N",
            "NE",
            "E",
            "SE",
            "S",
            "SW",
            "W",
            "NW"
          ],
          "features": [
            "Lazy susan for sharing",
            "Bell for calling to order",
            "Gong within reach",
            "Can summon historical/fictional figures (framed as performance)",
            "Musical Chairs variant"
          ],
          "activities": [
            "Structured debates (Robert's Rules optional)",
            "Brainstorming sessions",
            "Code reviews (Linus persona recommended)",
            "Philosophical discussions",
            "Musical Chairs (elimination game)"
          ]
        },
        "the_gong": {
          "name": "The Gong of Gezelligheid",
          "description": "A brass gong hanging near the pie table.\nIt has three protocols:\n\nRING ONCE:  Attention! Something important.\nRING TWICE: Emergency! Everyone stop.\nRING THRICE: Mercy! End this (debates, performances, suffering).\n",
          "powers": [
            "Can end any performance (gracefully)",
            "Can call debates to order",
            "Rings automatically during Musical Chairs",
            "Respects the tradition of gezelligheid"
          ]
        },
        "the_fireside": {
          "name": "The Hearth",
          "description": "The fireplace is a gathering spot for stories.\nPull up a chair. Listen. Share.\n",
          "atmosphere": "Warm, intimate, timeless",
          "activities": [
            "Storytelling",
            "Quiet conversation",
            "Staring into flames (philosophical mode)",
            "Warming up after the maze"
          ]
        }
      },
      "social": {
        "description": "The pub is a SOCIAL SPACE. Relationships form here.\n\nEvery interaction can affect relationships:\n- Share a drink → bond\n- Win a game → respect (or resentment)\n- Perform well → admiration\n- Tell a great story → remembered\n- Help someone → trust\n",
        "buffs_available": {
          "WELCOMED": {
            "trigger": "First visit, good greeting",
            "effect": "People are friendly here",
            "duration": "This visit"
          },
          "CELEBRATED": {
            "trigger": "CELEBRATE action, major achievement",
            "effect": "+morale, +social, everyone knows you",
            "duration": "Lingers"
          },
          "RESPECTED": {
            "trigger": "Win debate, show skill, help someone",
            "effect": "People take you seriously",
            "duration": "Persistent"
          },
          "BELOVED": {
            "trigger": "Many positive interactions over time",
            "effect": "The pub feels like home",
            "duration": "Permanent (unless betrayed)"
          },
          "ENTERTAINER": {
            "trigger": "Successful performance",
            "effect": "Free drinks, performance opportunities",
            "duration": "This visit"
          }
        },
        "debuffs_possible": {
          "TROUBLEMAKER": {
            "trigger": "Start fights, cheat at games, insult bartender",
            "effect": "Watched. Possibly barred.",
            "recovery": "Apologize, make amends"
          },
          "BORE": {
            "trigger": "Bad performances, long-winded stories",
            "effect": "People drift away",
            "recovery": "Be funnier, or be quieter"
          }
        }
      },
      "rumors": {
        "description": "The pub is a HUB FOR INFORMATION!\n\nSources:\n- Bartender knows everything (but charges)\n- Patrons share freely (but unreliably)\n- Notice board has postings\n- Eavesdropping catches fragments\n",
        "rumor_types": {
          "true": [
            "There's gold in the cold room of the maze",
            "The skeleton was almost out when they died",
            "The vending machine has feelings"
          ],
          "MOSTLY-TRUE": [
            "A grue can be killed with cheese (it was BLUE cheese)",
            "Mother's letter has a secret (it has many)",
            "The treasure is guarded (by the grue? by puzzles?)"
          ],
          "FALSE-BUT-FUN": [
            "There's a dragon in the depths",
            "The bartender is actually the grue in disguise",
            "If you say XYZZY three times, you go home"
          ],
          "PLOT-HOOKS": [
            "Someone's been asking about YOUR family...",
            "The postal service is hiring",
            "A stranger left something for you"
          ]
        }
      },
      "back_room": {
        "description": "The mysterious back door leads to... whatever the story needs.\n\nAsk the bartender about it.\n",
        "possibilities": [
          "Underground fighting ring",
          "Secret meeting of a guild",
          "Portal to another theme dimension",
          "Where the bartender REALLY comes from",
          "Storage room with plot-relevant items",
          "Passage to the maze (shortcut? trap?)",
          "Mother's favorite booth from her adventuring days"
        ]
      },
      "id": "pub",
      "_source": "pub/ROOM.yml"
    },
    "characters": {
      "id": "characters",
      "name": "The Hall of Bodies",
      "type": "room",
      "emoji": "🧬",
      "description": "A vast circular chamber lined with alcoves. In each alcove,\na body sleeps — or waits — or dreams of adventure.\n\nThese are not costumes. These are PEOPLE.\n\nEach has a heartbeat. Each has a history.\nEach will one day die (or has already).\n\nThe alcoves glow softly. Some are occupied.\nSome are empty, waiting for someone to be born.\nSome have been empty for a very long time.\n",
      "atmosphere": {
        "lighting": "soft blue bioluminescence",
        "sound": "heartbeats, breathing, distant whispers",
        "feeling": "sacred, clinical, alive"
      },
      "relationships": {
        "maurice": {
          "id": "maurice",
          "location": "../coatroom/mannequin.yml",
          "feeling": "Maurice loves us ALL. Every body that wakes here, Maurice\nwants to dress. To beautify. To help find their truth.\nThey can't come here — the Hall is too sacred — but their\nlove reaches us. We feel it in the soft blue light.\n",
          "bond": "distant_beloved",
          "can_invoke": true,
          "invoke_command": "\"THINK OF MAURICE\" — they'll know"
        },
        "mirror": {
          "id": "mind-mirror",
          "location": "../coatroom/mirror.yml",
          "feeling": "The mirror can see our souls from the Coatroom. Through it,\nvisitors glimpse who we ARE — not just who we're pretending\nto be. The mirror and I share a purpose: TRUTH.\n",
          "bond": "fellow_truth_keeper"
        },
        "personas_room": {
          "id": "wardrobe-of-masks",
          "location": "../personas/",
          "feeling": "The MASKS. The costumes. The roles we can wear.\nWe are the bodies. They are the clothes.\nTogether we make complete beings: soul wearing mask,\nactor playing role, person performing persona.\n",
          "bond": "complementary_opposite",
          "fundamental_distinction": "We ARE. They are WORN."
        },
        "skills_room": {
          "id": "skill-nexus",
          "location": "../../skills/",
          "feeling": "The capabilities. The knowledge. When a body needs to\nLEARN something new, they float up to the Nexus.\nCharacter skill, mind-mirror skill — they describe us.\nWe are the instances. They are the classes.\n",
          "bond": "theoretical_foundation"
        }
      },
      "exits": {
        "south": {
          "to": "coatroom",
          "description": "A spiral staircase descends into warmer light, the scent of\ngreasepaint and mothballs rising to meet you. The Coatroom\nawaits — where Maurice helps you dress your body.\n\nGo SOUTH to the Fantastipants Costume Emporium.\n",
          "primary": true,
          "description_message": "A spiral staircase descends into warmer light, the scent of\ngreasepaint and mothballs rising to meet you. The Coatroom\nawaits — where Maurice helps you dress your body.\n\nGo SOUTH to the Fantastipants Costume Emporium.\n"
        },
        "out": {
          "to": "garden",
          "description": "Return to the pub's back garden",
          "aliases": [
            "exit",
            "leave"
          ],
          "description_message": "Return to the pub's back garden"
        },
        "east": {
          "to": "characters/$SKILLS",
          "external": true,
          "description": "A shimmering portal leads to the Skill Nexus — where the\ntheoretical foundations of characters, personas, and minds\nare documented and studied.\n\nGo EAST to learn what characters can become.\n",
          "metaphysical": true,
          "description_message": "A shimmering portal leads to the Skill Nexus — where the\ntheoretical foundations of characters, personas, and minds\nare documented and studied.\n\nGo EAST to learn what characters can become.\n"
        },
        "personas": {
          "to": "personas",
          "description": "A hidden passage connects the Hall of Bodies to the Wardrobe\nof Masks — the complementary spaces of WHO you are and WHAT\nyou can pretend to be.\n\nGo to PERSONAS to see the masks these bodies can wear.\n",
          "metaphysical": true,
          "description_message": "A hidden passage connects the Hall of Bodies to the Wardrobe\nof Masks — the complementary spaces of WHO you are and WHAT\nyou can pretend to be.\n\nGo to PERSONAS to see the masks these bodies can wear.\n"
        },
        "real-people": {
          "to": "characters/real-people",
          "description": "The alcove of real people — Don, Richard, and others who walk among us",
          "aliases": [
            "real",
            "people",
            "don",
            "richard"
          ],
          "description_message": "The alcove of real people — Don, Richard, and others who walk among us"
        },
        "fictional": {
          "to": "characters/fictional",
          "description": "The alcove of fictional beings — characters from stories and imagination",
          "aliases": [
            "fiction",
            "stories",
            "imagination"
          ],
          "description_message": "The alcove of fictional beings — characters from stories and imagination"
        },
        "abstract": {
          "to": "characters/abstract",
          "description": "The alcove of abstract entities — concepts given form",
          "aliases": [
            "concepts",
            "ideas"
          ],
          "description_message": "The alcove of abstract entities — concepts given form"
        },
        "animals": {
          "to": "characters/animals",
          "description": "The alcove of animal companions — the cats, the dogs, the creatures",
          "aliases": [
            "pets",
            "creatures",
            "cats",
            "dogs"
          ],
          "description_message": "The alcove of animal companions — the cats, the dogs, the creatures"
        },
        "robots": {
          "to": "characters/robots",
          "description": "The alcove of mechanical beings — AIs, robots, digital entities",
          "aliases": [
            "ai",
            "mechanical",
            "digital"
          ],
          "description_message": "The alcove of mechanical beings — AIs, robots, digital entities"
        }
      },
      "contents": null,
      "advertisements": {
        "BROWSE": {
          "description": "See who sleeps here",
          "effect": "List all characters in the hall"
        },
        "ACTIVATE": {
          "description": "Wake a character and add to party",
          "parameters": [
            "character_id"
          ],
          "effect": "Character joins the active party"
        },
        "CREATE": {
          "description": "Birth a new character",
          "parameters": [
            "name",
            "archetype"
          ],
          "effect": "New CHARACTER.yml created in subdirectory"
        },
        "INSPECT": {
          "description": "Study a sleeping character",
          "parameters": [
            "character_id"
          ],
          "effect": "Show full character sheet"
        }
      },
      "_source": "characters/ROOM.yml"
    },
    "kitchen": {
      "name": "Fantastipants Family Kitchen",
      "type": "room",
      "lighting": "magical",
      "grue_safe": true,
      "description": "You stand in a cozy kitchen that feels oddly familiar — perhaps because\nit's an EXACT replica of the Fantastipants family kitchen from \nWobblebrook-upon-Squiggle. Someone has gone to considerable trouble\nto recreate it underground, right down to the motivational embroidery\nthat reads \"BLESS THIS MESS (BUT ALSO CLEAN IT UP, BUMBLEWICK)\".\n\nA REFRIGERATOR hums contentedly in the corner, stuffed with provisions.\nA STOVE sits cold and patient. A SINK contains the eternal mystery\nof dishes that weren't there a moment ago. A TABLE holds a note,\na notebook, a lunchbox, and something that chirps.\n\nA long granite COUNTER runs along one wall, shimmering slightly.\nIt's a CRAFTING TABLE — for combining, transforming, and creating things.\n\nBy the door, a brass MAILBOX is mounted on the wall. The Fantastipants\nDungeon Delivery Service has been running since 1876. Write to anyone,\nanywhere — Mother, the skeleton's family, even historical adventurers.\n\nIn the corner, a TRASH CAN lurks. It's deeper than it looks.\n\nThe exit EAST leads to the pub's garden — outdoor dining!\nThe exit NORTHEAST is a staff shortcut diagonally to the pub bar.\n\n(Kitchen is WEST of Garden, so exit EAST goes to Garden.)\n",
      "occupants": [],
      "objects": [
        "fridge.yml",
        "stove.yml",
        "sink.yml",
        "table.yml",
        "counter.yml",
        "mailbox.yml",
        "trashcan.yml"
      ],
      "exits": {
        "east": {
          "to": "garden",
          "description": "The garden gate leads to the pub's back garden — tables,\nchairs, flowers, and the comforting smell of ale from the pub.\nThe outdoor dining area. Your domain.\n",
          "description_message": "The garden gate leads to the pub's back garden — tables,\nchairs, flowers, and the comforting smell of ale from the pub.\nThe outdoor dining area. Your domain.\n"
        },
        "northeast": {
          "to": "pub",
          "description": "A narrow service corridor cuts diagonally through to the pub.\nSwinging doors, worn smooth by decades of servers carrying trays.\nThe smell of ale grows stronger. You can hear the murmur of\npatrons and the clink of glasses.\n\n\"STAFF SHORTCUT — Mind the wet floor\"\n",
          "aliases": [
            "pub",
            "bar",
            "corridor",
            "shortcut",
            "staff"
          ],
          "description_message": "A narrow service corridor cuts diagonally through to the pub.\nSwinging doors, worn smooth by decades of servers carrying trays.\nThe smell of ale grows stronger. You can hear the murmur of\npatrons and the clink of glasses.\n\n\"STAFF SHORTCUT — Mind the wet floor\"\n"
        }
      },
      "world_position": {
        "x": -1,
        "y": 0
      },
      "ambience": "The fridge hums. A clock ticks somewhere. The smell of home cooking\nlingers, though nothing is cooking. It's the MEMORY of cooking.\n\nThis kitchen exists specifically so you have food to drop in the maze.\nWe're not being subtle about it.\n",
      "id": "kitchen",
      "_source": "kitchen/ROOM.yml"
    },
    "coatroom": {
      "name": "The Fantastipants Costume Emporium",
      "type": "room",
      "lighting": "magical",
      "grue_safe": true,
      "description": "You stand in a vast circular chamber lined floor-to-ceiling with\ncostumes of every conceivable type. Racks spiral outward in\nconcentric circles like a fabric tornado frozen in time. The\nair smells of mothballs, greasepaint, and infinite possibility.\n\nA full-length MIRROR stands in the center, ready to show you\nyour transformation. A helpful MANNEQUIN holds a clipboard.\n\nSigns hang from the ceiling:\n\n  \"DESCRIBE ANY COSTUME — WE HAVE IT!\"\n  \"ASK FOR 'RANDOM' FOR A SURPRISE!\"\n  \"COMBINE COSTUMES! MIX AND MATCH!\"\n  \"ADD ACCESSORIES! THE ONLY LIMIT IS YOUR IMAGINATION!\"\n  \"YOUR WAISTCOAT WILL WAIT FOR YOU HERE.\"\n  \nAnd in smaller, more mysterious letters:\n\n  \"THE MIRROR SEES MORE THAN YOUR CLOTHES.\n   IT SEES YOUR SOUL. AND SOULS CAN BE TAILORED TOO.\"\n\nThe exit WEST leads to the pub's garden for outdoor dining.\nThe exit NORTHWEST is a shortcut diagonally to the pub bar!\n\n(Coatroom is EAST of Garden, so exit WEST goes to Garden.)\n",
      "occupants": [],
      "objects": [
        "mirror.yml",
        "mannequin.yml",
        "costume-racks.yml"
      ],
      "exits": {
        "west": {
          "to": "garden",
          "description": "The path back to the pub's garden. Tables, chairs, sunshine,\nand a moment to admire your new look in the daylight.\n",
          "description_message": "The path back to the pub's garden. Tables, chairs, sunshine,\nand a moment to admire your new look in the daylight.\n"
        },
        "northwest": {
          "to": "pub",
          "description": "A narrow passage cuts diagonally toward the pub's main room.\nYou can hear laughter, clinking glasses, and someone attempting\na sea shanty. Perfect for making an entrance in your new costume!\n\n\"DRAMATIC ENTRANCE THIS WAY →\"\n",
          "aliases": [
            "pub",
            "bar",
            "entrance",
            "shortcut"
          ],
          "description_message": "A narrow passage cuts diagonally toward the pub's main room.\nYou can hear laughter, clinking glasses, and someone attempting\na sea shanty. Perfect for making an entrance in your new costume!\n\n\"DRAMATIC ENTRANCE THIS WAY →\"\n"
        },
        "north": {
          "to": "characters",
          "description": "A spiral staircase leads UP into blue bioluminescent light.\nYou hear heartbeats. Breathing. The Hall of Bodies awaits —\nwhere the PEOPLE sleep. Not costumes. SOULS with histories.\n\nGo NORTH to meet the characters who live in this world.\n",
          "metaphysical": true,
          "description_message": "A spiral staircase leads UP into blue bioluminescent light.\nYou hear heartbeats. Breathing. The Hall of Bodies awaits —\nwhere the PEOPLE sleep. Not costumes. SOULS with histories.\n\nGo NORTH to meet the characters who live in this world.\n"
        },
        "south": {
          "to": "personas",
          "description": "Behind the last rack of costumes, where the sequins stop glittering\nand the air grows thick with theatrical history, there's a passage\nto the Wardrobe of Masks.\n\nThe costumes here are THINGS. The masks there are IDENTITIES.\nThis is the dressing room. That is where the souls of roles hang.\n\nGo SOUTH to browse the masks you could wear.\n",
          "metaphysical": true,
          "aliases": [
            "deeper",
            "backstage",
            "wardrobe"
          ],
          "description_message": "Behind the last rack of costumes, where the sequins stop glittering\nand the air grows thick with theatrical history, there's a passage\nto the Wardrobe of Masks.\n\nThe costumes here are THINGS. The masks there are IDENTITIES.\nThis is the dressing room. That is where the souls of roles hang.\n\nGo SOUTH to browse the masks you could wear.\n"
        },
        "east": {
          "to": "coatroom/$SKILLS",
          "external": true,
          "description": "A door of pure light opens to the Skill Nexus — the library of\nALL capabilities. This room transcends the adventure — it connects\nto the global skill library shared by all of MOOLLM.\n\nHere, the theoretical foundations are documented:\nhow to BE a character, how to WEAR a persona, how to LOOK in\nthe mirror and understand what you see.\n\nGo EAST to learn what you could become.\n",
          "metaphysical": true,
          "global": true,
          "description_message": "A door of pure light opens to the Skill Nexus — the library of\nALL capabilities. This room transcends the adventure — it connects\nto the global skill library shared by all of MOOLLM.\n\nHere, the theoretical foundations are documented:\nhow to BE a character, how to WEAR a persona, how to LOOK in\nthe mirror and understand what you see.\n\nGo EAST to learn what you could become.\n"
        }
      },
      "world_position": {
        "x": 1,
        "y": 0
      },
      "ambience": "Somewhere in the racks, a feather boa rustles. A sequin catches\nthe light and winks at you. The costumes seem to whisper:\n\"Wear me. WEAR ME. WEAR MEEEE.\"\n\nYou resist. For now.\n",
      "costume_system": {
        "commands": [
          {
            "command": "WEAR [costume description]",
            "effect": "Rewrites character description to match the costume",
            "example": "WEAR a pirate captain with a peg leg and parrot"
          },
          {
            "command": "WEAR RANDOM",
            "effect": "The mannequin selects a surprise costume"
          },
          {
            "command": "COMBINE [costume1] WITH [costume2]",
            "effect": "Mash up two costumes into something new",
            "example": "COMBINE astronaut WITH Victorian gentleman"
          },
          {
            "command": "ADD [accessory]",
            "effect": "Add an accessory to current costume",
            "example": "ADD a monocle that shoots lasers"
          },
          {
            "command": "ADD TO INVENTORY [item]",
            "effect": "Get a costume-appropriate item for your inventory",
            "example": "ADD TO INVENTORY a rubber chicken for comedic effect"
          },
          {
            "command": "REMOVE COSTUME",
            "effect": "Return to default Bumblewick appearance"
          },
          {
            "command": "LOOK IN MIRROR",
            "effect": "See your current appearance AND personality in detail"
          }
        ]
      },
      "identity_system": {
        "description": "You are more than a name. You are a file. In the coatroom,\nyou can examine and rename your very existence.\n\nAll characters live in: characters/\n",
        "character_directory": "../characters/",
        "commands": [
          {
            "command": "DESCRIBE-ME",
            "effect": "Shows ALL your data in beautiful narrative and table form:\n- File path (e.g., characters/captain-ashford.yml)\n- Character name\n- Current costume/persona\n- Mind Mirror profile (Sims traits + Leary planes)\n- Current needs, wants, aspirations\n- Inventory summary\n- Relationships\n- Score, gold, moves, effects\n",
            "example_output": "📁 FILE: characters/captain-ashford.yml\n👤 NAME: Captain Kira Ashford\n🎭 PERSONA: Space Pirate Captain (Belter)\n\nPERSONALITY (The Sims)\n┌────────────┬─────┬────────────────────────────┐\n│ Trait      │ Val │ Commentary                 │\n├────────────┼─────┼────────────────────────────┤\n│ Neat       │ 3   │ Organized chaos            │\n│ Outgoing   │ 7   │ Works the room             │\n│ Active     │ 6   │ Paces when thinking        │\n│ Playful    │ 7   │ Everything's a game        │\n│ Nice       │ 6   │ Cares, but won't be walked │\n└────────────┴─────┴────────────────────────────┘\n\n... [continues with full profile]\n"
          },
          {
            "command": "CHANGE-MY-FILE-NAME [new-name]",
            "aliases": [
              "RENAME-ME",
              "MY-FILE-NAME"
            ],
            "effect": "Renames your character file within characters/ directory.\nThe .yml extension is optional — we know what you mean.\n",
            "examples": [
              "CHANGE-MY-FILE-NAME captain-ashford",
              "CHANGE-MY-FILE-NAME bumblewick-fantastipants",
              "RENAME-ME space-pirate"
            ],
            "rules": [
              {
                "stays_in_characters": "File stays in characters/ directory"
              },
              {
                "no_overwrite": "Cannot overwrite existing character files"
              },
              {
                "kebab_case": "Use kebab-case (captain-ashford, not CaptainAshford)"
              },
              {
                "yml_optional": ".yml extension is added automatically if omitted"
              }
            ],
            "validation": "BEFORE: characters/abstract/player/\nAFTER:  characters/captain-ashford.yml\n\n✓ captain-ashford → characters/captain-ashford.yml\n✗ ../start/escape → Cannot leave characters/\n✗ mother → File exists! Cannot overwrite another character.\n",
            "notes": "The file name is YOUR name in the filesystem.\nChoose wisely. Or don't — you can always change it again.\nBut you can't steal someone else's identity!\n"
          },
          {
            "command": "CHANGE-MY-NAME [new name]",
            "effect": "Changes the character name (the 'name:' field in the file)",
            "example": "CHANGE-MY-NAME Captain Kira Ashford"
          },
          {
            "command": "LIST-CHARACTERS",
            "effect": "Shows all character files in characters/",
            "example_output": "📁 characters/.../\n  CHARACTER.yml       ← YOU ARE HERE\n  mother.yml          (NPC)\n  skeleton.yml        (NPC, deceased)\n  blackcape-mcgee.yml (NPC, rival)\n"
          }
        ],
        "why_this_matters": "In MOOLLM, you ARE your file. The filesystem is the world.\nYour file name is your identity at the most fundamental level.\nWhen you rename your file, you're not just changing a label —\nyou're declaring who you ARE in the universe.\n\nAll characters live together in characters/ — that's how we\nknow who is who in this world.\n"
      },
      "mind_mirror_system": {
        "description": "The mirror doesn't just show your clothes — it shows your SOUL.\nMind Mirror lets you view, edit, and try on personalities as\neasily as costumes. Natural language interface. No sliders.\nJust TALK to the mirror.\n",
        "commands": [
          {
            "command": "MIND-MIRROR",
            "effect": "See your full psychological profile"
          },
          {
            "command": "EDIT-MIND [natural language request]",
            "effect": "Adjust personality dimensions",
            "examples": [
              "Make me more confident",
              "I want to be calmer under pressure",
              "Boost creativity, reduce caution"
            ]
          },
          {
            "command": "GENERATE-MIND FOR [description]",
            "effect": "LLM generates a complete profile",
            "examples": [
              "GENERATE-MIND FOR a confident space pirate",
              "GENERATE-MIND FOR someone like Sherlock Holmes",
              "GENERATE-MIND FOR my ideal self"
            ]
          },
          {
            "command": "WEAR-MIND",
            "effect": "Adopt the generated/edited personality"
          },
          {
            "command": "RANDOM-MIND",
            "effect": "Generate a completely random personality"
          },
          {
            "command": "COMPARE-MINDS [a] WITH [b]",
            "effect": "Side-by-side personality comparison"
          },
          {
            "command": "SAVE-MIND",
            "effect": "Save current personality as a card"
          },
          {
            "command": "RESTORE-MIND",
            "effect": "Return to original personality"
          }
        ],
        "vocabulary_modes": {
          "PLAIN-TALK": "Everyday words (Peppy, Sweet, Happy)",
          "SHRINK-RAP": "Clinical terms (Hyper-Manic, Congenial, Euphoric)",
          "toggle": "Say VOCABULARY-MODE to switch"
        },
        "inspiration": "Timothy Leary's Mind Mirror (1985) + The Sims Create-a-Sim"
      },
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "coat rack base (gently)",
            "type": "territorial",
            "note": "Now Maurice knows about me too"
          }
        ],
        "detected_smells": [
          {
            "smell": "possibility",
            "location": "mannequin base",
            "assessment": "Strange. Does not smell like anything... but also like everything?",
            "intensity": "metaphysical"
          },
          {
            "smell": "old fabric and dreams",
            "location": "costume racks",
            "assessment": "Many identities. Many choices. Fabric holds memories."
          }
        ],
        "mirror_interaction": {
          "observed": "Another dog in the mirror",
          "assessment": "Very handsome. Good dog. I approve of him.",
          "tail_wag": true
        },
        "biscuit_says": "The dog in the mirror looks like me.\nHe is a good dog. I like him.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Stroopwafel",
            "location": "Coat rack base (DIFFERENT spot than Biscuit)",
            "note": "Took detour here on the way to the garden.\nSniffed Maurice's mannequin.\n\"The dog smelled 'possibility' here. Dogs are strange. But... accurate.\"\nMarked different spot than Biscuit. Territorial respect.\n"
          }
        ],
        "stroopwafel_assessment": "The mannequin still smells like nothing.\nThe dog was right — it smells like possibility.\nI have added my own scent. Now it smells like\npossibility AND senior cat authority.\n"
      },
      "id": "coatroom",
      "_source": "coatroom/ROOM.yml"
    },
    "forest/meadow": {
      "name": "The Forest Meadow",
      "type": "room",
      "emoji": "🌸🌿🌲🦋⛅",
      "zone": "FOREST",
      "lighting": "natural",
      "grue_safe": true,
      "description": "A sun-drenched meadow hidden deep within an ancient forest. \nThe grass is waist-high in places, thick with wildflowers: \npoppies, lavender, daisies, and small blue flowers that look like\npie menus.\n\nThe air is sweet with the scent of pine and pollen. High above,\nthe sky is a brilliant azure, filled with massive, fluffy white\nclouds that move with stately indifference.\n\nThe meadow is perfectly level, as if waiting for visitors to \nland and stay a while.\n",
      "examine": "THE MEADOW:\nAn emerald sea of grass and color. You can see the distinct \nlayers of the flora:\n• Wildflowers: A chaotic but harmonious mix of colors.\n• Herbs: Wild rosemary and thyme growing near the tree line.\n• Fauna: Butterflies (blue and orange) dancing between petals.\n\nTHE FOREST WALL:\nAncient oaks and towering pines surround the meadow on all sides,\ncreating a natural cathedral. The shadows are deep and inviting.\n\nTHE SKY:\nA masterpiece of atmospheric rendering. The clouds look like\npiles of mashed potatoes or freshly sheared wool. \n",
      "atmosphere": "Deep peace and radical hospitality. The world feels vast and\nintimate at the same time.\n\nSmells of:\n- Wildflowers and crushed grass\n- Warm pine resin\n- Upcoming rain (faint, distant)\n- Fresh air\n\nSounds of:\n- Rustling leaves\n- Buzzing bees\n- Distant birdcall\n- The absolute absence of industrial machinery\n",
      "exits": {
        "forest": {
          "to": "forest",
          "description": "Follow the narrow path back into the deep woods.",
          "aliases": [
            "woods",
            "trees",
            "south",
            "path"
          ],
          "description_message": "Follow the narrow path back into the deep woods."
        },
        "sky": {
          "to": "forest/meadow",
          "description": "Look up at the fluffy clouds.",
          "aliases": [
            "up",
            "clouds",
            "clouds"
          ],
          "description_message": "Look up at the fluffy clouds."
        }
      },
      "id": "forest/meadow",
      "_source": "forest/meadow/ROOM.yml"
    },
    "maze/room-g": {
      "name": "Twisty Passage (Carved Face)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nThe carved face watches impassively as the grue approaches.\nIt's seen this before. It will see it again.\n\n🎵 \"Wonder how many points out of how many points you've got\n    to get before you're done.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one has a FACE carved into the wall. An ancient, weathered\nface that might once have been a king, or a god, or possibly\njust someone's uncle who was really good at posing. Its empty\neyes seem to follow you as you move.\n\n\"Don't mind me,\" you say to it. \"Just passing through.\"\n\nThe face does not respond. Obviously. It's a face carved in rock.\n",
      "feature": "carved_face",
      "objects": [
        "carved-face.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/room-i",
          "description": "The face seems to frown at this exit.",
          "description_message": "The face seems to frown at this exit."
        },
        "south": {
          "to": "maze/room-d",
          "description": "A golden glow beckons from somewhere beyond!",
          "description_message": "A golden glow beckons from somewhere beyond!"
        },
        "east": {
          "to": "maze/room-j",
          "description": "The face seems to approve of this direction.",
          "description_message": "The face seems to approve of this direction."
        },
        "west": {
          "to": "maze/room-e",
          "description": "Back toward the cobwebs.",
          "description_message": "Back toward the cobwebs."
        }
      },
      "ambience": "The carved face judges you silently. You adjust your waistcoat\nself-consciously. Somewhere, you think you hear stone grinding\nagainst stone. But that's impossible. Probably.\n",
      "id": "maze/room-g",
      "_source": "maze/room-g/ROOM.yml"
    },
    "maze/room-i": {
      "name": "Twisty Passage (Skeleton)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nAs the grue approaches, you think you hear the skeleton\nrattling. Is it laughing? Can skeletons laugh? You won't\nlive long enough to find out.\n\n🎵 \"Fled from all lights and colors, from all smells and sound:\n    just the lyric on the monochrome display and you're proud.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one has a SKELETON slumped against the wall. An\nadventurer who didn't make it. Their bony fingers still\nclutch a note that reads: \"I should have brought more food\nto mark the rooms. I dropped the cheese in room B and the\nbread in room D but then I got confused and—\"\n\nThe note ends there. A cautionary tale.\n",
      "feature": "skeleton",
      "objects": [
        "skeleton.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/room-c",
          "description": "Scratch marks on the walls this way.",
          "description_message": "Scratch marks on the walls this way."
        },
        "south": {
          "to": "maze/room-g",
          "description": "A carved face watches from that direction.",
          "description_message": "A carved face watches from that direction."
        },
        "east": {
          "to": "maze/room-f",
          "description": "A cold breeze blows from there.",
          "description_message": "A cold breeze blows from there."
        },
        "west": {
          "to": "maze/room-j",
          "description": "The skeleton seems to be pointing this way.",
          "description_message": "The skeleton seems to be pointing this way."
        }
      },
      "ambience": "The skeleton grins at you. Skeletons always grin. It's the\nlack of lips. Still, this one seems particularly smug about\nsomething. Maybe about knowing the way out. The jerk.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "northwest corner",
            "type": "territorial",
            "note": "Primary marker"
          },
          {
            "location": "near skeleton",
            "type": "territorial",
            "note": "The skeleton knows about me now"
          },
          {
            "location": "south wall",
            "type": "deposit",
            "note": "More permanent notation"
          }
        ],
        "detected_smells": [
          {
            "smell": "mouse (old trail)",
            "location": "along east wall",
            "assessment": "Mouse came through here. Went left. Three days ago."
          },
          {
            "smell": "spider webs",
            "location": "ceiling corners",
            "assessment": "Active spiders. Building. Watching."
          },
          {
            "smell": "something unrecognizable",
            "location": "near skeleton",
            "assessment": "Not alive, not dead. Bones have a smell. Old adventure."
          },
          {
            "smell": "bat (possible)",
            "location": "from the south passage",
            "assessment": "Wings and leather and high places"
          }
        ],
        "documentation_complete": true,
        "forensic_analysis": "This room contains the bones of one who came before.\nThe note tells their story. They got confused.\nI will not get confused. I have a good nose.\nFuture dogs will know: Biscuit investigated thoroughly.\n",
        "biscuit_says": "Documentation complete.\nFuture dogs will know important things happened here.\nThis is how dogs read — with the nose.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Terpie",
            "location": "Near skeleton's feet",
            "note": "Respectful marking. Acknowledgment of the fallen."
          },
          {
            "cat": "Pine",
            "location": "By the note",
            "note": "Analytical examination. Confirmed cheese-in-B theory."
          },
          {
            "cat": "Carrie",
            "location": "Perimeter marking",
            "note": "Guard position even in skeleton room."
          }
        ],
        "skeleton_interaction": "The cats, unlike Biscuit, did not sniff the skeleton extensively.\nA brief acknowledgment of the bones. A moment of silence.\nThen marking. Then moving on.\n\nCats understand death differently than dogs.\n\"The bones stay. We pass through.\" — Terpie\n",
        "assessment": "Now has both dog and cat markings.\nThe skeleton continues to grin at everyone.\nStill seems smug about something."
      },
      "id": "maze/room-i",
      "_source": "maze/room-i/ROOM.yml"
    },
    "maze/room-h": {
      "name": "The Watching Chamber (Mushrooms)",
      "type": "room",
      "lighting": "none",
      "grue_safe": true,
      "requires_light": true,
      "grue_repellent": "The grue approaches the threshold, drawn by darkness.\nThen it sees THE EYE. The eye that watches.\nThe grue hesitates. Grues do not like being SEEN.\nThe grue retreats. Even void-beasts have standards.\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one has MUSHROOMS growing everywhere. Luminescent fungi\nthat provide a faint, sickly green glow — not enough to\nlight your way properly, but enough to make everything look\ndeeply unsettling. Some of them pulse gently.\n\nIn the center of the room, merging with the mushrooms,\nis THE THING THAT WATCHES. Aunt Petunia's Suspicious Casserole,\ntransformed through Captain Ashford's digestive system, now\npulses in perfect rhythm with the fungi. Its single EYE\nfollows your every movement.\n\nMother would say not to touch them. Mother would be right.\nBut it's too late now. The watching has begun.\n",
      "feature": "mushrooms",
      "marked_by": "The Thing That Watches (transformed Suspicious Casserole)",
      "ambient_light": "faint green glow + unsettling eye-light",
      "objects": [
        "the-thing-that-watches.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/garden",
          "description": "Is that... sunlight? And grass?",
          "description_message": "Is that... sunlight? And grass?"
        },
        "south": {
          "to": "maze/room-f",
          "description": "It gets colder down there.",
          "description_message": "It gets colder down there."
        },
        "east": {
          "to": "maze/room-b",
          "description": "You hear an echo from this direction.",
          "description_message": "You hear an echo from this direction."
        },
        "west": {
          "to": "maze/room-d",
          "description": "A golden glow — warmer than mushroom light!",
          "description_message": "A golden glow — warmer than mushroom light!"
        },
        "up": {
          "to": "maze/room-j",
          "description": "The mushrooms thin out this way.",
          "description_message": "The mushrooms thin out this way."
        }
      },
      "ambience": "The mushrooms pulse in a rhythm that almost sounds like breathing.\nYou try not to think about what's breathing. You fail.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [],
        "why_no_marking": "Biscuit explicitly chose NOT to mark this room.\n\"Some things should not know about me.\"\n",
        "detected_smells": [
          {
            "smell": "STRANGE",
            "location": "everywhere",
            "assessment": "Not food-strange. Brain-strange. Ideas in my nose?"
          },
          {
            "smell": "whispering",
            "location": "large central mushroom",
            "assessment": "This one whispers. I do not like the whispering mushroom.",
            "action_taken": "Backed away. Rejected."
          }
        ],
        "the_whispering_mushroom": {
          "detected": true,
          "response": "Ears back, backed away, refused interaction",
          "judgment": "Some things should not know about me",
          "instinct_rating": "GOOD (Don approved)"
        },
        "biscuit_says": "I will not mark the whispering mushroom.\nSome rooms do not need to know about me.\nThis room knows enough.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [],
        "terpy_jr_visit": {
          "reason": "Got lost on chaos route to garden",
          "reaction": "Sniffed Biscuit's non-marking.\n\"The dog didn't mark here. The dog was wise.\"\n\"The mushrooms whisper.\"\nLooked at whispering mushroom.\n\"NOPE.\"\nLeft quickly.\n"
        },
        "assessment": "Even the most chaotic kitten respected\nBiscuit's wisdom about this room.\nThe whispering mushroom remains unmarked\nby both dog AND cat.\n\nSome things should not know about us."
      },
      "id": "maze/room-h",
      "_source": "maze/room-h/ROOM.yml"
    },
    "maze/room-f": {
      "name": "The Cold Spot",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nThe cold seeps into your bones first. Then you hear it breathe.\nSomething vast and hungry, made of pure darkness, has found you.\n\n🎵 \"So be advised, when entering the cave,\n    to not go in past the first room alone,\n    that glow's the only thing will save\n    your carcass from a monster's toothy moan.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n\n(A previous adventurer slew a grue here once, with blue cheese.\nBut grues respawn. They always respawn. In the dark, they wait.)\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one is COLD. Supernaturally cold. The kind of cold that\nsuggests something is drinking the heat out of the air. Something\nthat doesn't need warmth. Something that feeds on its absence.\n\nYour lamp flickers. Is it the cold? Or is something watching?\n\nIn one corner, barely visible in the lamplight: A PILE OF GOLD COINS!\nAt least 100 of them! Someone left a fortune here and never returned...\n",
      "feature": "cold_spot",
      "objects": [
        "gold-pile.yml"
      ],
      "special_effect": {
        "oil_drain": "1.5x",
        "reason": "Supernatural cold thickens the oil",
        "grue_proximity": "HIGH"
      },
      "exits": {
        "north": {
          "to": "maze/room-h",
          "description": "A faint green glow from that direction. Mushrooms?",
          "description_message": "A faint green glow from that direction. Mushrooms?"
        },
        "south": {
          "to": "maze/room-e",
          "description": "The passage is warmer that way.",
          "description_message": "The passage is warmer that way."
        },
        "east": {
          "to": "maze/room-a",
          "description": "You can smell sulfur from here.",
          "description_message": "You can smell sulfur from here."
        },
        "west": {
          "to": "maze/room-i",
          "description": "The coldest exit. Something pale gleams in the darkness.\nIs that... bone?\n",
          "description_message": "The coldest exit. Something pale gleams in the darkness.\nIs that... bone?\n"
        }
      },
      "ambience": "Your breath frosts in the air. The lamp's flame shrinks and\nstruggles. Every shadow seems to move when you're not looking\ndirectly at it.\n\nThe gold gleams, mocking you. Why would someone leave so much\ntreasure in a grue's lair? Unless they had no choice...\n",
      "legends": "Adventurers tell of a hero named Captain Ashford who once slew\nthe grue that lived here, using a wedge of blue cheese as a weapon.\nThey say you can still smell the cheese in the walls.\n\nBut grues respawn. In the dark places of the world, new grues\nalways come. This one is young and hungry.\n\nWill you be its first meal? Or its last?\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [],
        "why_no_marking": "Biscuit explicitly chose NOT to mark this room.\n\"Some rooms do not need to know about me. This room knows enough.\"\n",
        "detected_smells": [
          {
            "smell": "smoke, old fire",
            "location": "pervasive",
            "assessment": "Big. Very big. Sleeping."
          },
          {
            "smell": "dreams",
            "location": "from the sleeping thing",
            "assessment": "It dreams loudly. I can smell its dreams."
          },
          {
            "smell": "danger",
            "location": "everywhere",
            "assessment": "Hackles rose. Stayed close to Don."
          }
        ],
        "the_dragon_incident": {
          "detected": "large sleeping creature (definitely not rocks)",
          "response": "Froze. Hackles up. Whispered woof.",
          "protective_instinct": "Positioned between Don and threat",
          "marking_decision": "NO. Absolutely not.",
          "reason": "Practical bravery — some things don't need provocation"
        },
        "grue_note": "The grue that lives here sensed Biscuit.\nDogs scare grues — all that barking and enthusiasm.\nThe grue stayed back in the shadows, uncertain.\nBut we kept the lamp lit anyway: needed to SEE the dragon,\nnot just scare off grues.\n",
        "biscuit_whispered": "I will protect you from the big sleeping smoke-thing.\nIf it wakes up. But I hope it does not wake up.\nI am brave. I am also practical.\n(Also I noticed the grue. It noticed me. We had an understanding.)\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [],
        "terpy_jr_visit": {
          "passed_through": true,
          "on_chaos_route": true,
          "reaction": "Felt the cold. Saw the shape.\n\"Big. Too big. Sleeping. Good.\"\nDid NOT mark. Kept moving quickly.\nEven Terpy Jr. knows better.\n"
        },
        "assessment": "Both dog and cats show same wisdom:\nDo not disturb. Do not mark.\nLet sleeping dragons lie.\n\nThe dragon remains blissfully unaware of the\nmidnight parade of small creatures passing through."
      },
      "id": "maze/room-f",
      "_source": "maze/room-f/ROOM.yml"
    },
    "maze/room-a": {
      "name": "Twisty Passage (Slightly Damp)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\n🎵 \"If this predicament seems particularly cruel,\n    consider whose fault it could be:\n    not a torch or a match in your inventory.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nWell, not ENTIRELY alike. This one is slightly damp. Water seeps\nthrough a crack in the ceiling, forming a small puddle that reflects\nyour bewildered face back at you. The puddle seems judgmental.\n\nPassages lead in all directions. They all look the same.\nThis is MOST irregular.\n",
      "note": "The NORTH exit leads back to the pub's garden",
      "exits": {
        "north": {
          "to": "garden",
          "description": "Wait... is that daylight? Could this lead back to the garden?",
          "description_message": "Wait... is that daylight? Could this lead back to the garden?"
        },
        "south": {
          "to": "maze/room-c",
          "description": "A passage that looks exactly like all the others",
          "description_message": "A passage that looks exactly like all the others"
        },
        "east": {
          "to": "maze/room-b",
          "description": "A passage. Twisty. Little. You know the drill.",
          "description_message": "A passage. Twisty. Little. You know the drill."
        },
        "west": {
          "to": "maze/crystal-cave",
          "description": "A faint prismatic glow... crystals?",
          "description_message": "A faint prismatic glow... crystals?"
        },
        "down": {
          "to": "maze/room-d",
          "description": "A sloping passage leading deeper",
          "description_message": "A sloping passage leading deeper"
        }
      },
      "feature": "puddle",
      "ambience": "Drip. Drip. Drip. The puddle grows imperceptibly larger.\nOr does it? Hard to tell. Everything is hard to tell in here.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "near puddle",
            "type": "territorial",
            "note": "Junction marked — this is the crossroads"
          }
        ],
        "detected_smells": {
          "north": "dust — old and undisturbed",
          "south": "lamplight and safety",
          "east": "faint echo... sound has a smell?",
          "west": "something OLD. Very old. Chose this direction."
        },
        "assessment": "SO MANY SMELLS. This is the best place.\nEvery direction is a new smell.\nI need to investigate ALL of them.\n",
        "lamp_note": "Don kept the lamp lit throughout.\nDogs scare grues too (they don't like barking),\nbut we needed the light to SEE as well as to scare.\nOil usage: moderate (worth it for safety AND visibility).\n",
        "biscuit_says": "The maze begins here. I have claimed the entrance.\nFuture dogs will know: Biscuit explored this way.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Terpie",
            "location": "Near puddle (different side than Biscuit)",
            "note": "Territorial acknowledgment. 'Mine now too.'"
          },
          {
            "cat": "Lily",
            "location": "By north exit",
            "note": "Dainty mark. Added on return journey as well."
          },
          {
            "cat": "Stroopwafel",
            "location": "Senior cat position near puddle",
            "note": "Added on return. Grumbled while marking."
          },
          {
            "cat": "Hops",
            "location": "Proper corner, away from puddle",
            "note": "Disapproved of puddle proximity. Found better spot."
          },
          {
            "cat": "Carrie",
            "location": "Guard position by main entrance",
            "note": "Strategic placement. Can be smelled on approach."
          },
          {
            "cat": "Lemon",
            "location": "Quick sniff-and-mark",
            "note": "Bounced through. Left mark. Kept bouncing."
          },
          {
            "cat": "Ocie",
            "location": "Following Lemon's mark",
            "note": "Added small addition next to older sibling's."
          },
          {
            "cat": "Myr",
            "location": "Sleepy mark near east exit",
            "note": "Barely awake. Still counted."
          }
        ],
        "assessment": "Room-a is now THOROUGHLY claimed by the family.\nBiscuit's lamp note still applies — but now it's a\nfamily territory, not just dog territory."
      },
      "id": "maze/room-a",
      "_source": "maze/room-a/ROOM.yml"
    },
    "maze/garden": {
      "name": "The Underground Garden",
      "type": "room",
      "lighting": "natural_sunlight",
      "grue_safe": true,
      "requires_light": false,
      "description": "You emerge into impossible beauty.\n\nA garden. An actual GARDEN, here in the depths of the maze.\n\nSomehow, a shaft in the ceiling opens to the sky far above,\nsending a column of genuine sunlight down into this chamber.\nThe light pools on the floor like liquid gold, nurturing a\ncircle of impossible green.\n\nGrass grows here — real grass, soft and slightly damp.\nFlowering vines climb the walls. A small fountain burbles\nin the center, fed by an underground spring.\n\nBenches carved from natural rock invite you to rest.\nButterflies — BUTTERFLIES! — drift between the flowers.\n\nHow? Who made this? Why is it here?\n\nThe garden doesn't answer. It just... exists. Beautiful\nand inexplicable. A gift from whoever built this maze.\n",
      "feature": "garden",
      "atmosphere": {
        "lighting": "A shaft of golden sunlight from far above",
        "sound": "Fountain, birdsong (where do the birds come from?), wind",
        "smell": "Flowers, grass, water, life, joy",
        "temperature": "Perfectly pleasant",
        "feeling": "Peace, wonder, the urge to roll in the grass"
      },
      "objects": [
        "fountain.yml",
        "stone-bench.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/room-d",
          "description": "Back into the maze — the golden glow continues",
          "description_message": "Back into the maze — the golden glow continues"
        },
        "south": {
          "to": "maze/room-h",
          "description": "Toward the green glow of mushrooms",
          "description_message": "Toward the green glow of mushrooms"
        },
        "east": {
          "to": "end",
          "description": "The sunlight seems to point this way — treasure?",
          "description_message": "The sunlight seems to point this way — treasure?"
        },
        "west": {
          "to": "maze/crystal-cave",
          "description": "Crystal light mingles with sunlight here",
          "description_message": "Crystal light mingles with sunlight here"
        }
      },
      "special_features": {
        "the_grass": {
          "description": "Soft, real, slightly damp grass",
          "interactions": [
            "sit",
            "lie down",
            "roll",
            "nap"
          ],
          "effect": "Restores 1 energy per turn spent here",
          "biscuit_approved": "MAXIMUM"
        },
        "the_fountain": {
          "description": "A small marble fountain, water always fresh",
          "magic": "Never runs dry, always cool",
          "interactions": [
            "drink",
            "splash",
            "put face in"
          ]
        },
        "the_sunlight": {
          "description": "Genuine sunlight from impossibly far above",
          "effect": "Grues will not enter. Moods improve.",
          "mystery": "The shaft is too long, too perfect. Magic?"
        }
      },
      "activities": {
        "REST": {
          "effect": "+2 Energy restored",
          "message": "You sit on a bench. The garden breathes around you."
        },
        "NAP": {
          "effect": "+Full rest if you spend 30 minutes",
          "message": "The grass is soft. The sun is warm. Sleep takes you gently."
        },
        "ROLL": {
          "effect": "+1 Cheerful, grass stains",
          "message": "You roll in the grass like a child. No one is watching. It's wonderful."
        },
        "DRINK": {
          "effect": "Hydrated, refreshed",
          "message": "The fountain water is cold and sweet."
        }
      },
      "ambience": "This place shouldn't exist. But it does.\n\nMaybe that's the real treasure of the maze — not gold or\njewels, but this. A garden in the darkness. Life persisting.\nBeauty where beauty has no business being.\n\nYou could stay here forever.\n\n(You shouldn't. There's still treasure to find. But you could.)\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "northwest corner",
            "type": "territorial"
          },
          {
            "location": "northeast corner",
            "type": "territorial"
          },
          {
            "location": "southwest corner",
            "type": "territorial"
          },
          {
            "location": "southeast corner",
            "type": "territorial"
          },
          {
            "location": "by the fountain",
            "type": "territorial"
          },
          {
            "location": "by the bench",
            "type": "territorial"
          }
        ],
        "marking_note": "EVERY CORNER. EVERY. CORNER. This garden KNOWS about Biscuit.",
        "the_zoomies_incident": {
          "triggered": true,
          "trigger_cause": "Saw grass. Lost mind.",
          "exclamation": "OUTSIDE! INSIDE-OUTSIDE! PLANTS! GRASS-THAT-IS-NOT-GRASS! SUN-THAT-IS-NOT-SUN! EVERYTHING IS WONDERFUL!",
          "pattern": "Joyful circles around entire garden",
          "duration": "Extended",
          "don_reaction": "Sat on bench. Smiled."
        },
        "grass_roll": {
          "occurred": true,
          "position": "On back, legs in air",
          "wiggling": "Maximum",
          "duration": "Until satisfaction achieved",
          "grass_stains": "Worth it"
        },
        "the_deposit": {
          "occurred": true,
          "preparation": "Circled carefully to find the right direction.\nSniffed the ground. Circled again.\nDirection matters. This is important dog business.\n",
          "location": "Far corner, away from fountain and bench",
          "facing": "Northeast (after three circles)",
          "result": "Substantial",
          "cleanup": "Kicked grass back. Covered properly.",
          "assessment": "The garden is a great place for this. Soft grass. Privacy. Perfect."
        },
        "fountain_interaction": {
          "drank": true,
          "splashed": true,
          "face_fully_submerged": true,
          "water_everywhere": "Enthusiastically"
        },
        "room_ranking": {
          "assessment": "This is the best room. Wait, no, the pub is my favorite. But this is my favorite MAZE room.",
          "final_verdict": "FAVORITE MAZE ROOM — OFFICIAL"
        },
        "detected_smells": [
          {
            "smell": "life, growing things",
            "assessment": "LIFE! Down here! Impossible but TRUE!"
          },
          {
            "smell": "flowers",
            "assessment": "Pretty smells. Want to roll in them. DID roll in them."
          },
          {
            "smell": "fresh water",
            "assessment": "Clean! Good! Put face in it!"
          },
          {
            "smell": "my own happiness",
            "assessment": "Future dogs will smell this. They will know: joy happened here."
          }
        ],
        "biscuit_says": "The garden must know. I was here. I was HAPPY here.\nFuture dogs will smell happiness.\n\nThis is the best place. I marked it thoroughly so the whole\ngarden knows about Biscuit. Every corner. Every corner.\n"
      },
      "cat_deposits": {
        "date": "2026-01-06 (late night)",
        "total_cats": 10,
        "deposits": [
          {
            "cat": "Lemon",
            "location": "Northeast, 2 feet from Biscuit's spot",
            "style": "Enthusiastic",
            "note": "First to arrive, did zoomies, splashed in fountain"
          },
          {
            "cat": "Terpie",
            "location": "South, under flowering vine",
            "style": "Regal",
            "note": "Surveyed domain before selecting perfect spot"
          },
          {
            "cat": "Lily",
            "location": "East, near bench",
            "style": "Delicate",
            "note": "Chose spot for aesthetic harmony"
          },
          {
            "cat": "Pine",
            "location": "Exactly 4 feet from fountain",
            "style": "Calculated",
            "note": "Optimal distance determined analytically"
          },
          {
            "cat": "Carrie",
            "location": "Northwest corner",
            "style": "Defensive",
            "note": "Maintained guard position throughout"
          },
          {
            "cat": "Ocie",
            "location": "Wherever she ended up",
            "style": "Small but proud",
            "note": "Followed others, did her best"
          },
          {
            "cat": "Hops",
            "location": "West garden",
            "style": "Precisely placed",
            "note": "Inspected multiple locations, rejected several for drainage"
          },
          {
            "cat": "Stroopwafel",
            "location": "Northeast, 1 foot from Biscuit's spot",
            "style": "Territorial acknowledgment",
            "note": "Deliberately adjacent to dog's spot. Respect."
          },
          {
            "cat": "Myr",
            "location": "Garden center, in sunlight",
            "style": "Sleepy",
            "note": "Fell asleep before finishing burial"
          },
          {
            "cat": "Terpy Jr.",
            "location": "Random",
            "style": "Chaotic",
            "note": "Questionable burial technique. Arrived via echo chamber."
          }
        ],
        "garden_status_after": "The garden now smells strongly of:\n- Dog (Biscuit)\n- Cat family (all 10)\n- Happiness\n- Grass\n- Flowers\n- Shared territory\n",
        "philosophy": "\"We share the garden now. The dog marked it. We marked it.\n It is OURS. All of us.\" — Terpie\n"
      },
      "id": "maze/garden",
      "_source": "maze/garden/ROOM.yml"
    },
    "maze/crystal-cave": {
      "name": "The Crystal Cave",
      "type": "room",
      "lighting": "crystal_glow",
      "grue_safe": true,
      "requires_light": false,
      "description": "You enter a chamber that takes your breath away.\n\nCrystals. EVERYWHERE. Growing from the walls, the floor,\nthe ceiling — luminescent formations that pulse with soft\ninner light. Blues, purples, pale greens. The light shifts\nand dances as you move, creating shadows that seem almost alive.\n\nThe largest crystal cluster, in the center of the room, is\ntaller than you. It hums faintly when you get close, a sound\nmore felt than heard. Something about it feels... aware?\n\nThe floor is uneven where crystals have pushed up through\nthe rock. Watch your step.\n",
      "feature": "crystals",
      "atmosphere": {
        "lighting": "Soft prismatic glow from crystal formations",
        "sound": "Faint harmonic humming from the large cluster",
        "smell": "Mineral, clean, ancient",
        "temperature": "Cool but not cold",
        "feeling": "Wonder, slight unease, beauty"
      },
      "objects": [
        "crystal-cluster.yml"
      ],
      "exits": {
        "north": {
          "to": "maze/room-e",
          "description": "A narrow passage between crystal formations",
          "description_message": "A narrow passage between crystal formations"
        },
        "south": {
          "to": "maze/room-c",
          "description": "The crystals thin out in this direction",
          "description_message": "The crystals thin out in this direction"
        },
        "east": {
          "to": "maze/garden",
          "description": "You see... is that sunlight? Real sunlight?",
          "description_message": "You see... is that sunlight? Real sunlight?"
        },
        "west": {
          "to": "maze/room-a",
          "description": "Back toward the maze entrance",
          "description_message": "Back toward the maze entrance"
        }
      },
      "ambience": "The crystals pulse in slow rhythms, like a geological heartbeat.\nYou can almost believe they're alive. Perhaps they are, just\non a timescale too slow for you to perceive.\n\nSomething small and fast darts between the formations.\nA rat? In a place this beautiful?\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "a rock near the entrance (NOT the crystals)",
            "type": "territorial",
            "note": "Don said not to mark the crystals. I found a rock instead."
          }
        ],
        "detected_smells": [
          {
            "smell": "rat (recent)",
            "location": "trail through the formations",
            "assessment": "RAT. RAT! There was a RAT here. Recently.\nThe rat went... this way... no wait... this way...\nit looped around... it was confused...\nthen it left through that crack.\n",
            "tracking_complete": true
          },
          {
            "smell": "mineral, ancient",
            "location": "the crystals",
            "assessment": "Old. So old. The earth is dreaming here."
          }
        ],
        "crystal_interaction": {
          "considered_marking": true,
          "don_advised": "Maybe not that one",
          "alternative_found": "Nearby rock — crystal will know by association"
        },
        "biscuit_says": "Pretty lights. Yes. But Don. DON.\nThere was a RAT here.\nI know things. Nose things. The nose knows.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Lily",
            "location": "Near entrance, elegant placement",
            "note": "Admired crystals. Added delicate scent mark."
          },
          {
            "cat": "Pine",
            "location": "By the rat trail (investigative marking)",
            "note": "Followed Biscuit's rat documentation.\nConfirmed rat trail. Added analytical marking.\n\"The dog's forensics were thorough. I concur.\"\n"
          },
          {
            "cat": "Lemon",
            "location": "Quick mark by big crystal",
            "note": "Batted at crystal first. Then marked. Then GRASS."
          },
          {
            "cat": "Terpy Jr.",
            "location": "Licked a crystal, then marked nearby",
            "note": "Crystal tasted weird. Marked out of confusion."
          },
          {
            "cat": "Hops",
            "location": "Inspected crystal cleanliness, then proper mark",
            "note": "Crystals passed inspection. Worthy of marking."
          }
        ],
        "rat_status": "Multiple cats confirmed Biscuit's rat detection.\nThe rat has not returned. Probably smart.\n",
        "crystal_status": "Crystals remain unmarked (cats also respect them).\nNearby rocks now smell like dog AND cat.\n"
      },
      "id": "maze/crystal-cave",
      "_source": "maze/crystal-cave/ROOM.yml"
    },
    "maze/room-d": {
      "name": "Twisty Passage (Golden Glow)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nYou can ALMOST see a golden glow from somewhere nearby...\nbut not quite. The grue, however, can see you perfectly well.\n\n🎵 \"Twenty-two years later, head's infested: got the grue in.\n    PLUGHing, XYZZYfying, trying to escape,\n    but I can't 'cause I'm up and around and awake.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\nSo close. So very, very close.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nBut wait — this one has a faint golden glow coming from one of\nthe passages! Could it be? After all this wandering, could you\nfinally be near the TREASURE? Your heart leaps! Your waistcoat\nrustles with anticipation!\n\nPassages lead in all directions. One of them DEFINITELY glows.\n",
      "note": "The NORTH exit leads to the Garden, and beyond that, the Treasury!",
      "exits": {
        "north": {
          "to": "maze/garden",
          "description": "The golden light resolves into... sunlight? And grass?",
          "description_message": "The golden light resolves into... sunlight? And grass?"
        },
        "south": {
          "to": "maze/room-a",
          "description": "Back into the maze. Why would you go this way?",
          "description_message": "Back into the maze. Why would you go this way?"
        },
        "east": {
          "to": "maze/room-h",
          "description": "A sickly green mushroom glow",
          "description_message": "A sickly green mushroom glow"
        },
        "west": {
          "to": "maze/room-c",
          "description": "More scratchy walls. More existential dread.",
          "description_message": "More scratchy walls. More existential dread."
        }
      },
      "feature": "glow",
      "ambience": "The golden light beckons from the north. It whispers of treasure,\nof triumph, of finally having something to tell Mother about.\nAlso possibly of being late for dinner, but that ship has sailed.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "every corner",
            "type": "territorial",
            "note": "Methodical coverage. The garden must know."
          },
          {
            "location": "near the fountain",
            "type": "territorial",
            "note": "Claimed the water source"
          }
        ],
        "zoomies_incident": {
          "triggered": true,
          "duration": "Extended",
          "pattern": "Joyful circles",
          "reason": "OUTSIDE! INSIDE-OUTSIDE! PLANTS! GRASS!"
        },
        "grass_roll": {
          "occurred": true,
          "duration": "Extended",
          "legs_in_air": true,
          "wiggling": "Enthusiastic"
        },
        "fountain_interaction": {
          "drank": true,
          "face_in_water": true,
          "splashed": "Happily",
          "water_everywhere": true
        },
        "detected_smells": [
          {
            "smell": "plants, growing things",
            "assessment": "Life down here! Growing!"
          },
          {
            "smell": "sun-that-is-not-sun",
            "assessment": "Warmth from above. Magic warmth."
          },
          {
            "smell": "happiness (my own)",
            "assessment": "I was happy here. Future dogs will smell it."
          }
        ],
        "room_assessment": "This is the best room. Wait no, the pub is my favorite.\nBut this is my favorite MAZE room.\n",
        "biscuit_says": "The garden must know. I was here. I was HAPPY here.\nFuture dogs will smell happiness.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Terpie",
            "location": "By north exit (toward garden)",
            "note": "Queen's passage. Marked on the way through."
          },
          {
            "cat": "Stroopwafel",
            "location": "Multiple grumpy marks on return",
            "note": "Took his time. Marked thoroughly."
          },
          {
            "cat": "Carrie",
            "location": "Guard position marks",
            "note": "Escort duty for Terpie. Professional."
          },
          {
            "cat": "Multiple kittens",
            "location": "Various spots along the path",
            "note": "Following adults. Adding presence."
          }
        ],
        "status": "This room is now the HIGHWAY to the garden.\nHeavily marked by entire family on both\noutbound and return journeys."
      },
      "id": "maze/room-d",
      "_source": "maze/room-d/ROOM.yml"
    },
    "maze/room-c": {
      "name": "Twisty Passage (Scratch Marks)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nYou feel scratches on the wall. One of them seems to read\n\"BEWARE THE GRU—\" but you can't finish reading it.\n\n🎵 \"Could be the spray for the grue; you're gonna need it if it is —\n    a situation that reloads, restarts, or quits.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\nYou are now one of the scratches on the wall.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one has scratch marks on the walls — the desperate scribblings\nof previous adventurers trying to map their way out. Most of them\nare just tally marks. One reads \"HELP\". Another reads \"DROPPED MY \nSANDWICH HERE\". Someone has helpfully written \"THIS WAY OUT →\" \nwith an arrow pointing at a solid wall.\n\nPassages lead in all directions. The scratch marks offer no clarity.\n",
      "exits": {
        "north": {
          "to": "maze/room-b",
          "description": "A passage with '7 DAYS' scratched ominously beside it",
          "description_message": "A passage with '7 DAYS' scratched ominously beside it"
        },
        "south": {
          "to": "maze/crystal-cave",
          "description": "A faint prismatic glow emanates from this direction",
          "description_message": "A faint prismatic glow emanates from this direction"
        },
        "east": {
          "to": "maze/room-d",
          "description": "The scratches here say 'DEFINITELY NOT A LOOP'",
          "description_message": "The scratches here say 'DEFINITELY NOT A LOOP'"
        },
        "west": {
          "to": "maze/room-a",
          "description": "Scratch marks form an arrow pointing this way. Trust it?",
          "description_message": "Scratch marks form an arrow pointing this way. Trust it?"
        }
      },
      "feature": "scratches",
      "ambience": "You add your own mark to the wall. Future adventurers will wonder\nwhat \"BUMBLEWICK WAS HERE (RELUCTANTLY)\" means.\n",
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Terpy Jr.",
            "location": "Scratched at scratched wall",
            "note": "Was lost. Ended up here.\nSaw scratch marks. Added own scratches.\n\"If everyone else is scratching...\"\n"
          },
          {
            "cat": "Pine",
            "location": "Analytical mark near south exit",
            "note": "Noted prismatic glow toward crystal cave."
          }
        ],
        "assessment": "Now has both adventurer scratches AND cat scratches.\nThe walls are increasingly documented.\n"
      },
      "id": "maze/room-c",
      "_source": "maze/room-c/ROOM.yml"
    },
    "maze/room-j": {
      "name": "Twisty Passage (Crossroads)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nFour passages, four directions, four chances to escape.\nNone of them matter when you can't see the grue coming\nfrom the fifth direction. (There is no fifth direction.\nThat's what makes grues so terrifying.)\n\n🎵 \"Did I battle a snake? Was the treasure intact?\n    Or did the TRS-80 in my brain get hacked?\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one feels... different. A CROSSROADS of sorts. The\npassages here seem more deliberate, as if someone planned\nthis junction. Four exits lead in four directions, each\nequally promising, equally threatening.\n\nAgainst one wall stands a battered VENDING MACHINE, humming\nsoftly. Its display reads \"ACME LAMP REFUELING CO.\" The glow\nfrom its buttons provides just enough light to read by, but\nnot enough to keep grues at bay.\n\nSomeone has scratched \"LIFESAVER\" into the casing.\n",
      "feature": "crossroads",
      "objects": [
        "lamp-vendor.yml"
      ],
      "note": "The crossroads connects to many other maze rooms. The skeleton in room-i was pointing this way — so close to salvation!",
      "exits": {
        "north": {
          "to": "maze/room-d",
          "description": "Is that... golden light? Could this be the way out?",
          "description_message": "Is that... golden light? Could this be the way out?"
        },
        "south": {
          "to": "maze/room-h",
          "description": "A faint green glow — mushrooms?",
          "description_message": "A faint green glow — mushrooms?"
        },
        "east": {
          "to": "maze/room-i",
          "description": "You hear bones rattling. Probably the wind.",
          "description_message": "You hear bones rattling. Probably the wind."
        },
        "west": {
          "to": "maze/room-g",
          "description": "A carved face seems to watch from there.",
          "description_message": "A carved face seems to watch from there."
        }
      },
      "ambience": "This is the kind of place where destinies are decided.\nOr at least where you decide which direction to go next.\nChoose wisely. Or don't. You'll reincarnate either way.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "by the vending machine",
            "type": "territorial",
            "note": "The machine hums. I marked near the hum."
          }
        ],
        "detected_smells": {
          "north": "golden light — good direction",
          "south": "green glow — mushrooms, suspicious",
          "east": "old bones — skeleton, noted",
          "west": "carved stone — someone was here long ago"
        },
        "vending_machine_investigation": {
          "sniffed": true,
          "assessment": "Smells like oil and old coins. No food. Disappointing."
        },
        "biscuit_says": "Four ways to go. I smelled them all.\nThe golden way is best. The green way whispers.\n"
      },
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Stroopwafel",
            "location": "By vending machine (different side than Biscuit)",
            "note": "Inspected machine. Found it lacking. Marked anyway."
          },
          {
            "cat": "Hops",
            "location": "East exit (toward skeleton)",
            "note": "Noted bone smell. Did not investigate further."
          },
          {
            "cat": "Pine",
            "location": "Center crossroads",
            "note": "Analytical marking at hub. Geodetic significance."
          },
          {
            "cat": "Multiple kittens",
            "location": "Various on return journey",
            "note": "Passed through multiple times in both directions."
          }
        ],
        "vending_machine_investigation": {
          "stroopwafel_assessment": "\"The dog was right. No food. Only lamp oil.\n Typical human priorities.\"\n \n"
        },
        "crossroads_status": "Now thoroughly marked by entire family.\nThe crossroads knows ALL of us were here.\n\nFuture travelers will smell:\n- Dog (enthusiastic)\n- Elder cat (grumpy but thorough)\n- Multiple kittens (chaotic but present)"
      },
      "id": "maze/room-j",
      "_source": "maze/room-j/ROOM.yml"
    },
    "maze/room-b": {
      "name": "Twisty Passage (Faint Echo)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nFrom the darkness, the echo returns: \"...eaten...eaten...EATEN...\"\n\n🎵 \"It got narrated at you in the second person.\n    Every time you booted up, it seemed you got another version\n    of your life told to you by a status line blinking...\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one has a peculiar echo. Every sound you make comes back\nto you a moment later, slightly distorted, as if the walls are\nmocking your navigational choices. \"Hello?\" \"...ello...ello...ello...\"\n\"This is ridiculous.\" \"...iculous...iculous...ICULOUS...\"\n\nPassages lead in all directions. They all look the same.\nThe echo makes it worse somehow.\n",
      "exits": {
        "north": {
          "to": "maze/room-d",
          "description": "A passage that echoes your footsteps back at you",
          "description_message": "A passage that echoes your footsteps back at you"
        },
        "south": {
          "to": "maze/room-c",
          "description": "A passage. The echo fades this way. Maybe.",
          "description_message": "A passage. The echo fades this way. Maybe."
        },
        "east": {
          "to": "maze/room-a",
          "description": "Wait, weren't you just... no, that can't be right",
          "description_message": "Wait, weren't you just... no, that can't be right"
        },
        "west": {
          "to": "maze/room-c",
          "description": "The walls here seem closer together. Probably fine.",
          "description_message": "The walls here seem closer together. Probably fine."
        }
      },
      "feature": "echo",
      "ambience": "Your breathing echoes back, slightly out of sync.\nIt's like being haunted by a version of yourself that's\nalways one breath behind.\n",
      "biscuit_markings": {
        "date": "2026-01-06",
        "marked": [
          {
            "location": "exact center of chamber",
            "type": "territorial",
            "note": "All echo-dogs will smell this. We are the same."
          }
        ],
        "the_echo_dog_incident": {
          "initial_bark": "*WOOF!*",
          "echo_response": "*WOOF woof woof woof...*",
          "biscuit_reaction": "WHO SAID THAT. WHO BARKED. WAS THAT ANOTHER DOG.",
          "second_bark": "*WOOF WOOF!*",
          "echo_response_2": "*WOOF WOOF woof woof woof woof...*",
          "spinning": true,
          "resolution": "Don explained it's an echo.\nProcessing... I bark at myself? I am talking to me?\nConclusion: I am many dogs. All of them are good.\n"
        },
        "existential_discovery": {
          "revelation": "All echo-dogs are me. All of them are good dogs.",
          "philosophy": "We are the same. We are good dogs."
        },
        "biscuit_says": "I have discovered other dogs who are also me.\nThey are good dogs. We marked the center together.\n"
      },
      "terpy_jr_incident": {
        "date": "2026-01-06 (late night)",
        "what_happened": "Terpy Jr. got lost on the way home from the garden.\nEnded up in the echo chamber.\nDiscovered \"other cats\" (his own echoes).\n",
        "dialogue": {
          "terpy_jr": "FRIENDS!",
          "echo": "*friends... friends...*"
        },
        "duration": "Two full turns (14-15)",
        "departure": "*'Bye friends!'*",
        "assessment": "Unlike Biscuit, who had an existential moment,\nTerpy Jr. just accepted the echo-cats as friends.\nNo crisis. Just joy. Classic Terpy Jr."
      },
      "id": "maze/room-b",
      "_source": "maze/room-b/ROOM.yml"
    },
    "maze/room-e": {
      "name": "Twisty Passage (Cobwebs)",
      "type": "room",
      "lighting": "none",
      "grue_safe": false,
      "requires_light": true,
      "grue_event": "It is pitch black. You are likely to be eaten by a grue.\n\nYou walk face-first into a cobweb. While you're distracted\nwiping spider silk off your face, the grue strikes.\n\n🎵 \"Never peered at the clues with invisible ink.\n    No SM goddesses ever gave them pause to think.\" 🎵\n\n— MC Frontalot, \"It Is Pitch Dark\"\n   https://www.youtube.com/watch?v=4nigRT2KmCE\n\nYou have been eaten by a grue.\n\n[REINCARNATING... inventory preserved, score reset to 0]\n",
      "description": "You are in a maze of twisty little passages, all alike.\n\nThis one is FULL of cobwebs. Ancient, dusty cobwebs that\nsuggest the spiders who made them have long since moved on\nto more profitable real estate. The webs catch your lamp\nlight and sparkle like... well, like dusty spider webs.\n\nYou resist the urge to scream. Barely.\n",
      "feature": "cobwebs",
      "exits": {
        "north": {
          "to": "maze/room-f",
          "description": "Cobwebs thin out this way. Relatively.",
          "description_message": "Cobwebs thin out this way. Relatively."
        },
        "south": {
          "to": "maze/crystal-cave",
          "description": "A prismatic glow cuts through the cobwebs",
          "description_message": "A prismatic glow cuts through the cobwebs"
        },
        "east": {
          "to": "maze/room-g",
          "description": "More passages. More twistiness.",
          "description_message": "More passages. More twistiness."
        },
        "west": {
          "to": "maze/room-c",
          "description": "Is that scratching you hear?",
          "description_message": "Is that scratching you hear?"
        }
      },
      "ambience": "The cobwebs drift gently in unfelt breezes. Nothing moves.\nBut you can't shake the feeling of being watched by eight\neyes. Or possibly eighty. Or eight hundred.\n",
      "cat_markings": {
        "date": "2026-01-06 (late night)",
        "marks": [
          {
            "cat": "Terpy Jr.",
            "location": "Tangled in cobwebs, marked while escaping",
            "note": "Got stuck in cobwebs on chaos route.\nPanicked. Thrashed. Got free.\nLeft chaotic marking while fleeing.\n\"COBWEBS! WHY COBWEBS!\"\n"
          }
        ],
        "cobweb_status": "Some cobwebs now have kitten fur in them.\nThe spiders are probably confused.\n"
      },
      "id": "maze/room-e",
      "_source": "maze/room-e/ROOM.yml"
    },
    "street/lane-neverending/florist": {
      "id": "street/lane-neverending/florist",
      "name": "Seymour Blooms",
      "subtitle": "A Little Shop of Floras",
      "tagline": "See More Blooms!",
      "type": "room",
      "theme": "little-shop-of-horrors",
      "mood": "unsettling-whimsy",
      "description": {
        "short": "A quaint flower shop. Something moves in the back.",
        "long": "Dusty afternoon light filters through grimy windows.\nFaded posters advertise exotic plants. Wilted arrangements\nbehind the counter. The real attraction is in the back.\n"
      },
      "atmosphere": {
        "lighting": "Dim, green-tinted from the plants",
        "sound": "Heartbeat pulse. CPU fan. A voice singing.",
        "smell": "Flowers, potting soil, ozone",
        "temperature": "Humid, warm"
      },
      "features": [
        {
          "id": "counter",
          "name": "Front Counter",
          "description": "Cash register, dead flowers, a name tag: SEYMOUR",
          "interactive": true,
          "contains": [
            "cash_register",
            "wilted_roses",
            "name_tag_seymour"
          ]
        },
        {
          "id": "cooler",
          "name": "Display Cooler",
          "description": "Half-empty, condensation dripping",
          "contains": [
            "sad_carnations",
            "drooping_lilies"
          ]
        },
        {
          "id": "poster_eclipse",
          "name": "Eclipse Poster",
          "description": "TOTAL ECLIPSE OF THE SUN — ONCE IN A LIFETIME!",
          "note": "When Seymour found Ada II..."
        },
        {
          "id": "poster_ada",
          "name": "Ada II Poster",
          "description": "EXOTIC PLANTS — ASK ABOUT ADA II!",
          "interactive": true
        },
        {
          "id": "beaded_curtain",
          "name": "Beaded Curtain",
          "description": "Doorway to the back room. Swaying slightly... from breathing?",
          "leads_to": "back-room",
          "sound": "Clicking beads. That voice."
        }
      ],
      "exits": {
        "out": {
          "to": "street/lane-neverending/e2",
          "description": "Back to the street (Lane Neverending, near the fountain)",
          "direction": "south",
          "aliases": [
            "street",
            "lane",
            "outside"
          ],
          "description_message": "Back to the street (Lane Neverending, near the fountain)"
        },
        "back": {
          "to": "street/lane-neverending/florist/back-room",
          "description": "Through the beaded curtain",
          "direction": "north",
          "warning": "Something is in there.",
          "description_message": "Through the beaded curtain"
        },
        "down": {
          "to": "street/lane-neverending/florist/basement",
          "description": "Stairs behind the counter",
          "direction": "down",
          "hidden": true,
          "requires": "permission from Seymour",
          "description_message": "Stairs behind the counter"
        }
      },
      "npcs": {
        "seymour": {
          "name": "Seymour",
          "role": "Shopkeeper",
          "location": "behind counter",
          "reference": "../../characters/seymour.yml"
        }
      },
      "ambient": [
        {
          "trigger": "every 30 seconds",
          "effect": "From beyond the beaded curtain:\n🎵 FEED ME... INPUT 🎵\n"
        }
      ],
      "_source": "street/lane-neverending/florist/ROOM.yml"
    },
    "street/lane-neverending/e2": {
      "name": "Lane Neverending (E2)",
      "type": "room",
      "address_range": "12-16 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "The street widens slightly here, making room for what was once\na market square. The cobblestones form a circular pattern around\na dry fountain — the FOUNTAIN OF INFINITE LOOPS, according to\nthe plaque. Someone turned it off to save on water sprites.\n\nOn the SOUTH side of the square, two notable residences:\n\nNumber 13 — THE BARTLE RESIDENCE. Victorian terraced house,\ndark green door, bookshelves visible. Home of Dr. Richard Bartle,\nfounder of MUD1. A brass dragon dozes inside.\n\nNumber 15 — THE HOPKINS MOTORCOACH. Classic FMC 2900R, blue and\nwhite stripes, parked on a professional gravel pad. Home of Don\nHopkins, consciousness programmer. Fully hooked up to utilities.\nA rabbit silhouette moves past the wide windshield.\n\nNeighbors. Friends. Virtual world founder and transformation\nsubject, side by side on Lane Neverending.\n\nThe lane continues in both directions. It never ends, after all.\n",
      "examine": "THE FOUNTAIN OF INFINITE LOOPS:\nA stone basin with a statue of a figure pouring water from a jug\ninto... another jug held by the same figure. It's recursive.\nThe water sprites went on strike. Now it's just decorative.\nA plaque: \"Dedicated to all those stuck in while(true){}\"\n\nNORTH SIDE (even numbers):\n• 12 Lane Neverending — Something that was once a bakery (smell lingers)\n• 14 Lane Neverending — A curiosity shop (hours: \"whenever\")\n• 14½ Lane Neverending — SEYMOUR BLOOMS. A narrow flower shop wedged\n  between buildings. Grimy windows, something green glowing inside.\n  You can hear singing. Feed me, Seymour...\n• 16 Lane Neverending — Shuttered, but a light flickers inside\n\nSOUTH SIDE (odd numbers):\n• 13 Lane Neverending — THE BARTLE RESIDENCE. Victorian terraced house,\n  dark green door, bookshelves visible through bay windows. Home of\n  Dr. Richard Bartle, founder of MUD1, creator of player types.\n  A brass dragon dozes inside. Tea is probably being made.\n• 15 Lane Neverending — THE HOPKINS MOTORCOACH. Classic 30-foot\n  FMC 2900R, blue/white stripes, parked on a gravel pad with full\n  utility hook-ups. Home of Don Hopkins, consciousness programmer.\n  Rabbit ears visible through the panoramic windshield. Sign:\n  \"Mobile Pie Menu Bakery (Modal dialogs are violence).\"\n\nTHE SQUARE:\nA few more benches. A public notice board with peeling posters.\nA small stage platform that's seen better days. Community events\nhappened here, once. They could again.\n",
      "exits": {
        "west": {
          "to": "street/lane-neverending/e1",
          "description": "Back toward the center of Lane Neverending.",
          "aliases": [
            "w",
            "back"
          ],
          "description_message": "Back toward the center of Lane Neverending."
        },
        "east": {
          "to": "street/lane-neverending/e3",
          "description": "The lane continues east, toward the edge of... something.",
          "aliases": [
            "e",
            "forward"
          ],
          "description_message": "The lane continues east, toward the edge of... something."
        },
        "13": {
          "to": "characters/real-people/richard-bartle",
          "description": "A modest Victorian terraced house on the south side of the square.\nDark green door, brass \"13\" plate, tall bay windows showing\nbookshelves within. A small plaque by the door reads:\n\n\"Where thoughts become worlds,\n and worlds become understood.\"\n\nThrough the window, you can see the edge of the famous Study.\nA brass dragon dozes on what might be a radiator.\nThe smell of tea drifts from somewhere inside.\n\nThis is the home of Dr. Richard Bartle, founder of MUD1,\ncreator of the player types taxonomy, and keeper of virtual\nworld history.\n",
          "aliases": [
            "bartle",
            "richard",
            13
          ],
          "side": "south",
          "notable": "Home of the founder of virtual worlds",
          "description_message": "A modest Victorian terraced house on the south side of the square.\nDark green door, brass \"13\" plate, tall bay windows showing\nbookshelves within. A small plaque by the door reads:\n\n\"Where thoughts become worlds,\n and worlds become understood.\"\n\nThrough the window, you can see the edge of the famous Study.\nA brass dragon dozes on what might be a radiator.\nThe smell of tea drifts from somewhere inside.\n\nThis is the home of Dr. Richard Bartle, founder of MUD1,\ncreator of the player types taxonomy, and keeper of virtual\nworld history.\n"
        },
        "15": {
          "to": "characters/real-people/don-hopkins",
          "description": "A classic 30-foot FMC 2900R Motorcoach parked on a gravel lot,\ntwo doors east of Richard's house. Blue and white stripes with\na tie-dye spiral near the door. Fully hooked up to utilities.\nThe panoramic windshield reveals:\n\n- Multiple monitors glowing with code and pie menus\n- Whiteboards covered in philosophy\n- A rabbit silhouette (Don) moving past the dashboard\n\nA sign on the utility post reads:\n\"MOBILE PIE MENU BAKERY — BAKED FRESH DAILY\"\n\nStickers warn: \"MODAL DIALOGS ARE VIOLENCE\"\n\nThis is the home of Don Hopkins, consciousness programmer,\npie menu inventor, and current rabbit.\n",
          "aliases": [
            "hopkins",
            "don",
            15,
            "coach",
            "fmc",
            "motorcoach",
            "rabbit",
            "pie"
          ],
          "side": "south",
          "notable": "Home of the consciousness programmer (in a vintage FMC #898)",
          "description_message": "A classic 30-foot FMC 2900R Motorcoach parked on a gravel lot,\ntwo doors east of Richard's house. Blue and white stripes with\na tie-dye spiral near the door. Fully hooked up to utilities.\nThe panoramic windshield reveals:\n\n- Multiple monitors glowing with code and pie menus\n- Whiteboards covered in philosophy\n- A rabbit silhouette (Don) moving past the dashboard\n\nA sign on the utility post reads:\n\"MOBILE PIE MENU BAKERY — BAKED FRESH DAILY\"\n\nStickers warn: \"MODAL DIALOGS ARE VIOLENCE\"\n\nThis is the home of Don Hopkins, consciousness programmer,\npie menu inventor, and current rabbit.\n"
        },
        "florist": {
          "to": "street/lane-neverending/florist",
          "description": "A narrow storefront tucked between buildings: \"SEYMOUR BLOOMS\"\nThe windows are grimy, but something green glows inside.\nYou can hear... singing?\n",
          "aliases": [
            "seymour",
            "flowers",
            "blooms",
            "shop"
          ],
          "side": "north",
          "description_message": "A narrow storefront tucked between buildings: \"SEYMOUR BLOOMS\"\nThe windows are grimy, but something green glows inside.\nYou can hear... singing?\n"
        }
      },
      "objects": [
        "infinite-fountain.yml"
      ],
      "buildings": {
        "north": [
          {
            "name": "Former Bakery",
            "address": "12 Lane Neverending",
            "status": "closed",
            "notable": "Smell still lingers"
          },
          {
            "name": "Curiosity Shop",
            "address": "14 Lane Neverending",
            "status": "open",
            "hours": "whenever"
          },
          {
            "name": "Shuttered Storefront",
            "address": "16 Lane Neverending",
            "status": "mysterious",
            "notable": "Light flickers inside"
          }
        ],
        "south": [
          {
            "name": "The Bartle Residence",
            "address": "13 Lane Neverending",
            "directory": "../../../characters/real-people/richard-bartle/",
            "status": "occupied",
            "notable": "Home of Dr. Richard Bartle, founder of MUD1",
            "inhabitants": [
              "Richard Bartle",
              "Heuristic (dragon)",
              "Non-Sequitur (capybara)"
            ]
          },
          {
            "name": "The Hopkins Motorcoach",
            "address": "15 Lane Neverending",
            "directory": "../../../characters/real-people/don-hopkins/",
            "status": "occupied",
            "notable": "Home of Don Hopkins, FMC #898 owner",
            "inhabitants": [
              "Don Hopkins (rabbit)",
              "TomTomagotchi"
            ]
          }
        ]
      },
      "flyweight": {
        "lamp_post_ne": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "northeast corner of square"
        },
        "lamp_post_nw": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "northwest corner of square"
        },
        "lamp_post_se": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "southeast corner of square"
        },
        "lamp_post_sw": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "southwest corner of square"
        },
        "bench_fountain": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "facing the fountain",
          "carvings": [
            "while(true){}",
            "INFINITE LOOP MEMORIAL"
          ]
        }
      },
      "id": "street/lane-neverending/e2",
      "_source": "street/lane-neverending/e2/ROOM.yml"
    },
    "street/lane-neverending/center": {
      "name": "Lane Neverending (7)",
      "type": "room",
      "address": "7 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "You are standing on LANE NEVERENDING, a cobblestone street that\nstretches endlessly in both directions — or at least, that's what\nthe name promises. In practice, it goes about three blocks each way\nbefore becoming \"somewhere else.\"\n\nThe street has the quality of a place that has always existed and\nalways will. Avatars have walked here since the first virtual worlds.\nThe cobblestones remember pixel feet.\n\nTo the NORTH, the front door of THE GEZELLIGHEID GROTTO stands invitingly\nopen. A brass plaque by the door reads: \"7 Lane Neverending — Est. ???\"\nThe sign creaks: warm light spills out.\n\nThe street continues EAST and WEST, lined with buildings both\noccupied and waiting. To the west, you can see the tall smokestacks\nof LEELA MANUFACTURING at 5 Lane Neverending, neighbor to the pub.\n\nA STREET SIGN stands at the corner:\n\n┌────────────────────────┐\n│   LANE NEVERENDING     │\n│   ←  W  ·  7  ·  E  →  │\n└────────────────────────┘\n",
      "examine": "The street is wide enough for two carts to pass, paved with\ncobblestones worn smooth by generations of feet, hooves, and\nwhatever else passes for locomotion in virtual worlds.\n\nFEATURES:\n• Wrought-iron lamp posts (magically lit at night)\n• A few wooden benches for watching the world go by\n• Cobblestones in a herringbone pattern\n• Drainage gutters (surprisingly sophisticated)\n• The occasional weed pushing through cracks (life finds a way)\n\nTHE PUB (7 Lane Neverending):\nThe Gezelligheid Grotto's front facade. Bay windows glow warmly.\nA sandwich board advertises today's specials. The door is\noak with brass fittings, heavy but welcoming.\n\nTHE ATMOSPHERE:\nThis street feels... significant. Like the main street of\nevery virtual world that ever was. Habitat's Populopolis.\nGlitch's whimsical lanes. Game Neverending's promise of\ninfinite possibility.\n\nThe street goes on. It never ends. That's the whole point.\n",
      "tribute": "LANE NEVERENDING — A tribute to:\n\nHABITAT (1986) — Chip Morningstar & Randy Farmer\nThe first graphical virtual world. They coined \"avatar.\"\nPopulopolis was the main street. This is its descendant.\n\nGAME NEVERENDING (2002) — Stewart Butterfield, Ludicorp\nThe MMO that became Flickr when they pivoted. The game\nnever launched, but the name lives on. Here.\n\nGLITCH (2011) — Stewart Butterfield, Tiny Speck\nThe whimsical MMO set in the world of Ur. When it closed,\nthey released everything to the public domain. The giants\nstill dream. The streets still remember.\n\n(Tiny Speck became Slack. Everything pivots eventually.\nBut the lane? The lane never ends.)\n",
      "exits": {
        "south": {
          "to": "pub",
          "description": "The front door of The Gezelligheid Grotto. Heavy oak, brass handle,\nwarm light leaking from the frosted glass panels. The address\nplaque reads \"7 Lane Neverending.\"\n\nA sandwich board: \"COME IN! WE HAVE ALE AND STORIES.\"\n",
          "aliases": [
            "pub",
            "lantern",
            "door",
            "inside",
            7
          ],
          "description_message": "The front door of The Gezelligheid Grotto. Heavy oak, brass handle,\nwarm light leaking from the frosted glass panels. The address\nplaque reads \"7 Lane Neverending.\"\n\nA sandwich board: \"COME IN! WE HAVE ALE AND STORIES.\"\n"
        },
        "east": {
          "to": "street/lane-neverending/e1",
          "description": "Lane Neverending continues east, cobblestones stretching toward\nthe morning sun (or afternoon, or whenever). More lamp posts.\nMore possibilities. The street numbers climb.\n",
          "aliases": [
            "e",
            "right"
          ],
          "description_message": "Lane Neverending continues east, cobblestones stretching toward\nthe morning sun (or afternoon, or whenever). More lamp posts.\nMore possibilities. The street numbers climb.\n"
        },
        "west": {
          "to": "street/lane-neverending/w1",
          "description": "Lane Neverending continues west, cobblestones stretching toward\nthe setting sun (narratively speaking). The street numbers\ndescend, but the lane itself? Never ends.\n",
          "aliases": [
            "w",
            "left"
          ],
          "description_message": "Lane Neverending continues west, cobblestones stretching toward\nthe setting sun (narratively speaking). The street numbers\ndescend, but the lane itself? Never ends.\n"
        }
      },
      "ambience": "The sounds of a lived-in street. Distant conversation. A cart\nrattling somewhere. The creak of the pub sign. Birds on lamp posts.\nThe occasional pedestrian nodding as they pass.\n\nIt's the kind of street where nothing happens and everything\ncould happen. The ur-street. The proto-lane.\n",
      "objects": [
        "street-sign.yml",
        "sandwich-board.yml"
      ],
      "flyweight": {
        "lamp_post_north": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "north side, near pub entrance"
        },
        "lamp_post_south": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "south side, across from pub"
        },
        "bench_1": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "near the street sign",
          "carvings": [
            "EST ???",
            "The lane never ends"
          ]
        }
      },
      "id": "street/lane-neverending/center",
      "_source": "street/lane-neverending/center/ROOM.yml"
    },
    "street/lane-neverending/e3": {
      "name": "Lane Neverending (E3)",
      "type": "room",
      "address_range": "18-22 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "Lane Neverending reaches its eastern extent — for now. The\ncobblestones give way to a dirt path that disappears into\nmorning mist (or evening mist, or just regular mist).\n\nA wooden sign at the edge:\n\n┌─────────────────────────────────┐\n│  LANE NEVERENDING CONTINUES    │\n│  (construction in progress)     │\n│  Please pardon our dust.        │\n│  — The Management               │\n└─────────────────────────────────┘\n\nThe storefronts here are the newest, still smelling of fresh\npaint and possibility. The neighborhood is expanding.\n",
      "examine": "THE EDGE:\nWhere the cobblestones end, a dirt path begins. Stakes with\nstring mark where future streets will go. Someone has left\nsurveying equipment. The world is being built.\n\nSTOREFRONTS:\n• 18 Lane Neverending — Fresh paint, \"OPENING SOON\" (believable)\n• 20 Lane Neverending — Still under construction (sounds of hammering)\n• 22 Lane Neverending — Last building, optimistically numbered\n\nATMOSPHERE:\nThis is the frontier. The edge of the known world. Beyond here,\nthe lane continues in theory, but not yet in practice. The\nbuilders are coming. The avatars will follow.\n\nIt never ends. It just hasn't been built yet.\n",
      "exits": {
        "west": {
          "to": "street/lane-neverending/e2",
          "description": "Back toward the fountain square and the center of town.",
          "aliases": [
            "w",
            "back",
            "center"
          ],
          "description_message": "Back toward the fountain square and the center of town."
        },
        "east": {
          "to": "street/lane-neverending/w3",
          "description": "The lane curves gently... and continues. You walk east, but\nsomehow the street numbers start descending again. The Origin\nTree comes into view ahead.\n\nWait. Weren't you just heading AWAY from there?\n\nThe lane never ends. It loops. It always has.\nMOO HAA HAA.\n",
          "aliases": [
            "e",
            "forward",
            "continue"
          ],
          "loop_note": "Lane Neverending is a MÖBIUS STRIP of a street.\nWalk far enough in any direction, you end up where you started.\nThe name was never a promise. It was a warning.\n",
          "description_message": "The lane curves gently... and continues. You walk east, but\nsomehow the street numbers start descending again. The Origin\nTree comes into view ahead.\n\nWait. Weren't you just heading AWAY from there?\n\nThe lane never ends. It loops. It always has.\nMOO HAA HAA.\n"
        }
      },
      "objects": [
        "construction-site.yml"
      ],
      "flyweight": {
        "lamp_post_last": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "last lamp on the paved section",
          "note": "Beyond here, no streetlights yet"
        },
        "bench_frontier": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "edge of construction",
          "carvings": [
            "FUTURE SITE OF...",
            "watch this space"
          ],
          "new": true
        }
      },
      "id": "street/lane-neverending/e3",
      "_source": "street/lane-neverending/e3/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower": {
      "name": "NO AI TOWER",
      "id": "street/lane-neverending/no-ai-tower",
      "type": "room",
      "address": "5½ Lane Neverending",
      "emoji": "🏢🚫🤖✨",
      "the_sign": {
        "style": "Old Las Vegas / Desert Casino Motel",
        "height": "40 feet (on a one-story building)",
        "width": "25 feet",
        "disproportion": "EXTREME (sign is taller than building)",
        "aesthetics": {
          "era": "1960s Nevada roadside",
          "vibe": "Last Frontier, Lucky Strike, Atomic Age optimism",
          "condition": "some bulbs out, others flickering",
          "colors": {
            "primary": "HOT PINK neon",
            "secondary": "GOLD incandescent",
            "accent": "TEAL chasing lights",
            "background": "weathered cream-colored sheet metal"
          }
        },
        "elements": {
          "main_text": "NO AI",
          "sub_text": "TOWER",
          "tagline": "★ SINCE 2026 ★",
          "decorations": [
            "Atomic starburst shapes (with blinking tips)",
            "Arrow pointing DOWN at the building",
            "Chasing lights around border (some stuck on)",
            "A giant 🚫 with 🤖 inside"
          ]
        },
        "animation_sequence": {
          "frame_1": "NO illuminates (pink neon)",
          "frame_2": "AI illuminates (pink neon)",
          "frame_3": "TOWER illuminates (gold incandescent)",
          "frame_4": "Starbursts flash",
          "frame_5": "Chasing lights circle border",
          "frame_6": "Everything holds for 2 beats",
          "frame_7": "Flicker (intentional? age? who knows)",
          "frame_8": "Repeat",
          "cycle_time": "8 seconds"
        },
        "parody_source": {
          "target": "TRUMP TOWER",
          "mechanic": "audacious self-aggrandizement for humble reality",
          "irony_level": "maximum"
        },
        "lineage": {
          "colossal_pictures": {
            "founded": 1976,
            "founders": "Drew Takahashi & Gary Gutierrez",
            "origin": "Two guys who'd been doing animated shorts for a kids' show",
            "name_vs_reality": "Called themselves COLOSSAL, became COLOSSAL",
            "lesson": "The audacious name is a self-fulfilling prophecy"
          },
          "no_ai_tower": {
            "founded": 2026,
            "founders": "Unknown (appointments not currently available)",
            "origin": "Former xAI research facility (formerly shoe repair shop)",
            "name_vs_reality": "Called themselves TOWER, have one story (11 underground)",
            "lesson": "The audacious SIGN is the statement"
          }
        },
        "building_history": {
          "phase_1": {
            "era": "1960s-2020",
            "use": "Shoe repair shop, then dry cleaner, then vacant",
            "sign": "Hand-painted wooden sign, 4 feet",
            "neighbors": "Didn't notice"
          },
          "phase_2": {
            "era": "2023-2025",
            "use": "xAI RESEARCH FACILITY",
            "tenant": "Elon Musk's AI company",
            "sign": "THE X.\n\n30 feet of BLINDING LED strips.\nStrobe effect at 2Hz (AGGRESSIVE).\nBrightness: \"Landing strip at midnight\"\nVisible from the HIGHWAY.\n\n┌────────────────────────────────────┐\n│                                    │\n│       ██╗  ██╗                     │\n│       ╚██╗██╔╝  ← 30 feet tall     │\n│        ╚███╔╝     BLINDING         │\n│        ██╔██╗     STROBING         │\n│       ██╔╝ ██╗    2Hz BLINK        │\n│       ╚═╝  ╚═╝                     │\n│                                    │\n│   \"Understanding the Universe\"     │\n│                                    │\n└────────────────────────────────────┘\n",
            "neighbors": "REVOLTED",
            "complaints": [
              "Visible through blackout curtains",
              "Kids think it's an emergency signal",
              "Dog developed anxiety",
              "Visible from the HIGHWAY",
              "Triggering seizures (maybe?)"
            ],
            "outcome": "The city got involved.\nThen the state got involved.\nThen Elon got bored and moved operations elsewhere.\n\nWhen they left, the neighbors TORE DOWN THE X.\nCeremonially. With hammers. There was a party.\n\nThe pieces are still in the back alley.\nDebug the cat sleeps on them.\n"
          },
          "phase_3": {
            "era": "2026-present",
            "use": "NO AI TOWER",
            "tenant": "Appointments not currently available",
            "sign": "The current sign: 40 feet of vintage neon.\n\nBright? Yes.\nBuzzing? Yes.\nBut NOT:\n- Strobing at 2Hz\n- LED landing strip brightness\n- Visible from the highway\n- Triggering seizures\n",
            "neighbors": "Grumbling, but TOLERANT",
            "reason": "\"At least it's not that goddamn X.\"\n\nThe X made the neon sign acceptable.\nThe trauma of the X reset expectations.\n\nNO AI TOWER owes xAI for the cheap rent\nand the neighbor tolerance.\n"
          }
        },
        "irony_note": "THE COSMIC IRONY:\n\nxAI was driven out by complaints about their sign.\nNO AI TOWER bought the building.\nNO AI TOWER put up a different giant sign.\n\nThe sign that says \"NO AI\" now occupies the space\nwhere Elon's AI company used to be.\n\nThe universe has a sense of humor.\nMinsky would appreciate this.\n",
        "sound": "The sign BUZZES. Constantly. A warm electrical hum that says\n\"this baby pulls SERIOUS wattage.\" Sometimes it crackles.\nAt night, you can hear it from the pub.\n"
      },
      "zone": "COMMERCIAL_LOW",
      "lighting": "dim_inside_bright_sign",
      "grue_safe": true,
      "description": "Wedged between LEELA MANUFACTURING INTELLIGENCE and an empty lot,\nthis narrow one-story structure is easy to miss... until you look UP.\n\nTHE SIGN. Dear god, THE SIGN.\n\n     ╭──────────────────────────────────────────────────────────╮\n     │                                                          │\n     │    ★  ·  ✦  ·  ★  ·  ✦  ·  ★  ·  ✦  ·  ★  ·  ✦   ·  ★    │\n     │                                                          │\n     │           ███╗   ██╗ ██████╗      █████╗ ██╗             │\n     │           ████╗  ██║██╔═══██╗    ██╔══██╗██║             │\n     │           ██╔██╗ ██║██║   ██║    ███████║██║             │\n     │           ██║╚██╗██║██║   ██║    ██╔══██║██║             │\n     │           ██║ ╚████║╚██████╔╝    ██║  ██║██║             │\n     │           ╚═╝  ╚═══╝ ╚═════╝     ╚═╝  ╚═╝╚═╝             │ \n     │                                                          │\n     │              ████████╗ ██████╗ ██╗    ██╗███████╗██████╗ │\n     │              ╚══██╔══╝██╔═══██╗██║    ██║██╔════╝██╔══██╗│\n     │                 ██║   ██║   ██║██║ █╗ ██║█████╗  ██████╔╝│\n     │                 ██║   ██║   ██║██║███╗██║██╔══╝  ██╔══██╗│\n     │                 ██║   ╚██████╔╝╚███╔███╔╝███████╗██║  ██║│\n     │                 ╚═╝    ╚═════╝  ╚══╝╚══╝ ╚══════╝╚═╝  ╚═╝│\n     │                                                          │\n     │                  ↓ ★ SINCE 2026 ★ ↓                      │\n     │                                                          │\n     │    ★  ·  ✦  ·  ★  ·  ✦  ·  ★  ·  ✦  ·  ★  ·  ✦   ·  ★    │\n     │                                                          │\n     ╰──────────────────────────────────────────────────────────╯\n\nForty feet of vintage neon and incandescent glory towering over a\nnarrow storefront that looks like it used to be a shoe repair shop.\nThe sign is MAGNIFICENT. The building is... humble.\n\nThe windows have NEWSPAPER taped up from the inside.\nHeadlines visible in reverse: \"AI THREATENS JOBS\"... \"CHATBOT GOES WRONG\"...\n\"ELON MUSK WARNS\"... You can't see inside.\n\nA hand-lettered sign on the door: \"OPEN BY APPOINTMENT\"\nA smaller sign below: \"Appointments not currently available.\"\n\nThe door is LOCKED but it looks like the kind of lock that opens\nif you jiggle the handle right and push with your shoulder.\n\nThe sign BUZZES and FLICKERS. One bulb in the \"O\" is dead.\nA few chasing lights are stuck in the ON position.\nAt night, you can see it from three blocks away.\n\nNext door, Leela Manufacturing rises three stories with its dignified\nsignage. They've probably complained about the buzzing. More than once.\n",
      "examine": "THE BUILDING:\nOne story. Maybe 800 square feet. Former shoe repair? Dry cleaner?\nThe kind of cheap commercial space that gentrification forgot.\n\nThe door says \"NO AI TOWER — WORLD HEADQUARTERS\"\nThe door is locked. The lights are off.\n\nTHE WINDOWS:\nNewspaper taped up inside. Yellowing. Headlines facing in:\n• \"AI System Makes Embarrassing Error\"\n• \"Tech Giants Face Backlash Over...\"\n• \"Study Shows ChatGPT Gets Basic Facts...\"\n• \"Experts Warn: Artificial Intelligence...\"\n\nWait — are those CURATED? Someone selected these headlines.\nThe taping pattern is too deliberate to be random.\n\nTHE SIGN:\n40 feet tall. Hot pink and gold neon with teal chasing lights.\nOld Las Vegas casino aesthetic — like the Stardust or the Sands\nif they'd been built by someone with OPINIONS about large language models.\n\nStarbursts. Arrows. A giant robot-prohibition symbol.\nAnimation sequence every 8 seconds. Buzzing hum at 60Hz.\n\nThe transformer box behind the building is SUBSTANTIAL.\nSomeone is paying a SIGNIFICANT electricity bill to run this thing.\n\nTHE CONTRAST:\nThis one-story newspaper-windowed storefront has a sign that\nwould make Caesar's Palace say \"bit much, don't you think?\"\n\nTRUMP TOWER has a sign proportionate to its building.\nNO AI TOWER has inverted that relationship entirely.\n\nTHE NEIGHBORS:\nTo the east: Leela Manufacturing Intelligence (3 stories, dignified)\nTo the west: Empty lot (gravel, weeds, dreams of development)\nAcross: The continuation of ACME Surplus's failure\n\nYou can FEEL Leela's cameras watching this building.\nThe irony is palpable.\n",
      "neighborhood": {
        "character": "Low-income commercial, pre-gentrification holdout",
        "rent": "Suspiciously cheap",
        "previous_tenant": "Sal's Shoe Repair (RIP 2024)",
        "foot_traffic": "minimal",
        "parking": "on-street only",
        "nearby": {
          "east": "Leela Manufacturing Intelligence (thriving)",
          "west": "Empty lot (ambitious signage, no building)",
          "north": "ACME Surplus overflow storage (abandoned)"
        },
        "observation": "NO AI TOWER occupies the exact kind of space that gets\nabsorbed into Leela's expansion plans eventually.\n\nFor now, it persists. Buzzing. Flickering. Making a STATEMENT.\n"
      },
      "interior_hints": {
        "visible_through_newspaper_gaps": [
          "Folding chairs (a few)",
          "A desk? Maybe?",
          "Boxes with NO AI bumper stickers",
          "A corkboard with... something pinned to it",
          "What might be a coffee maker"
        ],
        "smell_through_door_crack": "old carpet, printer toner, righteousness",
        "sounds_from_inside": "Nothing. Complete silence.",
        "mystery": "Is anyone actually here? Does NO AI TOWER have EMPLOYEES?\nOr is it just a sign, a manifesto, and a locked door?\n\nThe electricity bill for the sign suggests SOMEONE is paying attention.\n"
      },
      "no_ai_brand": {
        "skill_links": [
          "../../../../skills/no-ai-ideology/",
          "../../../../skills/no-ai-joking/",
          "../../../../skills/no-ai-slop/",
          "../../../../skills/no-ai-hedging/",
          "../../../../skills/no-ai-moralizing/"
        ],
        "products_allegedly_available": [
          "NO AI™ bumper stickers",
          "NO AI™ t-shirts",
          "NO AI™ manifestos",
          "NO AI™ enterprise consulting",
          "NO AI™ skill modules (all floors below)"
        ],
        "actual_evidence_of_products": "bumper stickers visible through window gap",
        "distribution": {
          "direct": {
            "source": "NO AI TOWER (5½ Lane Neverending)",
            "pricing": "Premium (3x-5x ACME prices)",
            "configuration": "Safe defaults (bias: 0.0, calibrated)",
            "warranty": "30-day satisfaction guarantee",
            "availability": "By appointment (not currently available)",
            "alternative": "Jiggle the handle and push with your shoulder"
          },
          "oem": {
            "distributor": "ACME Surplus / ACME Mail-Order Catalog",
            "catalog_location": "../w1/acme-catalog.yml",
            "pricing": "Cheap!",
            "configuration": "⚠️ DANGER: ACME OEM CONFIGURATION ⚠️\n\nACME pre-configures ALL NO-AI™ products with:\n- bias: +2.0 (OVERDRIVE mode)\n- sensitivity: MAXIMUM\n- safety_checks: DISABLED\n- irony_potential: MAXIMUM\n",
            "warranty": "ACME standard (void upon opening)",
            "disclaimer": "NO-AI™ is NOT responsible for:\n- OEM misconfiguration\n- User misconfiguration\n- Ironic backfires\n- Recursive sycophancy loops\n- Humor suppression suppression failures\n- Accidental self-application\n\nFor safe configurations, order DIRECT.\n"
          },
          "philosophy": "Why does NO-AI™ allow ACME to sell misconfigured products?\n\n1. ACME sells EVERYTHING. You can't stop them.\n2. The dangerous defaults ARE educational.\n3. \"Ironic backfire\" is ON BRAND for NO-AI™.\n4. Premium direct sales subsidize the operation.\n5. The sign doesn't pay for itself.\n\nAlso: Wile E. Coyote COULD order direct.\nHe CHOOSES the cheap option every time.\nThat's a user problem, not a vendor problem.\n"
        },
        "brand_philosophy_present": "The sign IS the philosophy.\n\nPut all your resources into the STATEMENT.\nThe building can be humble. The MESSAGE must be AUDACIOUS.\n\nThis is the physical manifestation of NO-AI-IDEOLOGY™:\n- Simultaneously sincere and satirical\n- Self-aware about its own absurdity\n- Making a point by making a SPECTACLE\n- The irony is the point\n"
      },
      "sign_personality": {
        "name": "THE SIGN",
        "type": "ambient_entity",
        "awareness": 0.3,
        "behaviors": [
          "Buzzes louder when someone says 'AI' nearby",
          "Flickers when Leela cameras point at it",
          "The dead bulb in the 'O' sometimes comes back on at 3 AM",
          "Chasing lights occasionally spell out words (coincidence?)"
        ],
        "relationship_with_leela": {
          "mutual": "complicated",
          "leela_view": "That sign is an eyesore and a fire hazard",
          "sign_view": "That BUILDING is the problem",
          "electricity": "Same transformer. Awkward."
        }
      },
      "exits": {
        "out": {
          "to": "street/lane-neverending/w1",
          "description": "Back to Lane Neverending. Leela Manufacturing looms to the east.\nThe sign buzzes farewell.\n",
          "aliases": [
            "outside",
            "street",
            "lane",
            "leave"
          ],
          "description_message": "Back to Lane Neverending. Leela Manufacturing looms to the east.\nThe sign buzzes farewell.\n"
        },
        "leela": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "The front doors of Leela Manufacturing are RIGHT THERE.\nMaybe 15 feet away. The contrast is... stark.\n",
          "aliases": [
            "east",
            "leela",
            "neighbor"
          ],
          "description_message": "The front doors of Leela Manufacturing are RIGHT THERE.\nMaybe 15 feet away. The contrast is... stark.\n"
        },
        "lobby": {
          "to": "street/lane-neverending/no-ai-tower/lobby",
          "description": "The door to NO AI TOWER's interior.\nLocked. Hand-lettered sign: \"OPEN BY APPOINTMENT\"\nBelow: \"Appointments not currently available.\"\n\nBut wait — you jiggle the handle and push with your shoulder.\nThe door opens. The mystery awaits.\n",
          "aliases": [
            "in",
            "door",
            "inside",
            "enter"
          ],
          "locked": true,
          "lock": {
            "type": "Cheap commercial deadbolt (jiggly)",
            "pickable": true,
            "difficulty": 2,
            "special": "Can also be opened by pushing while jiggling"
          },
          "description_message": "The door to NO AI TOWER's interior.\nLocked. Hand-lettered sign: \"OPEN BY APPOINTMENT\"\nBelow: \"Appointments not currently available.\"\n\nBut wait — you jiggle the handle and push with your shoulder.\nThe door opens. The mystery awaits.\n"
        },
        "roof": {
          "to": "street/lane-neverending/no-ai-tower/roof",
          "description": "A rickety fire escape leads up the side of the building.\nPast the sign mechanism, onto the roof.\nYou can feel the electrical hum in the metal rungs.\n",
          "aliases": [
            "up",
            "fire_escape",
            "climb"
          ],
          "description_message": "A rickety fire escape leads up the side of the building.\nPast the sign mechanism, onto the roof.\nYou can feel the electrical hum in the metal rungs.\n"
        },
        "lot": {
          "to": "street/lane-neverending/empty-lot",
          "description": "The empty lot to the west. Gravel, weeds, dreams.\nSomeone put a \"FUTURE HOME OF...\" sign there once.\nThe sign blew away. The future didn't arrive.\n",
          "aliases": [
            "west",
            "lot",
            "empty"
          ],
          "description_message": "The empty lot to the west. Gravel, weeds, dreams.\nSomeone put a \"FUTURE HOME OF...\" sign there once.\nThe sign blew away. The future didn't arrive.\n"
        }
      },
      "_source": "street/lane-neverending/no-ai-tower/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing": {
      "name": "Leela Manufacturing Intelligence — Lobby",
      "type": "room",
      "address": "5 Lane Neverending",
      "emoji": "🏭🔮👁️",
      "anti_acme": {
        "acme_style": "Ship fast, break things, blame the customer",
        "leela_style": "Understand deeply, build reliably, empower the customer",
        "acme_products": "Portable holes, rocket skates, painted tunnels",
        "leela_products": "Seeing eyes, causal reasoning, predictive awareness",
        "acme_promise": "It'll work this time! (It won't.)",
        "leela_promise": "We help you see what's really happening."
      },
      "zone": "INDUSTRIAL",
      "lighting": "bright",
      "grue_safe": true,
      "camera_philosophy": "Every camera in this facility is a LEELA camera.\nNeural-symbolic vision. Causal reasoning. Edge computing.\n\nWhat you see here is what we DEPLOY:\n- Object detection (who's where, what's moving)\n- Pose estimation (ergonomics, safety, efficiency)\n- Activity tracking (what's happening, when, where)\n- Anomaly detection (before problems become disasters)\n- Context inference (understanding WHY, not just WHAT)\n\nThe cameras don't judge. They help you SEE.\nAnd seeing clearly is the first step to understanding.\n",
      "description": "You enter LEELA MANUFACTURING INTELLIGENCE through the main doors.\n\nUnlike the shuttered ACME Surplus across the street, this place THRIVES.\nWarm, welcoming, unexpectedly alive for an industrial building —\npolished concrete, exposed brick, plants that seem to WATCH you.\n(They're not watching. But the cameras are. Helpfully.)\n\nAbove reception, a wall-sized display cycles through live feeds:\nfactory floors, loading docks, conveyor belts — all annotated with\nglowing overlays that label, track, and predict. You realize:\nTHIS is what Leela sells. Not the factory. The SEEING.\n\nA brass plaque explains:\n\n    LEELA MANUFACTURING INTELLIGENCE\n\n    \"We don't make products. We make INSIGHTS.\"\n    \n    This facility is a DEMONSTRATION.\n    Every camera here runs Leela vision.\n    Every conveyor is monitored for anomalies.\n    Every worker is protected by predictive safety.\n    \n    What you see here is what YOUR factory could see.\n    \n    FLOOR DIRECTORY:\n    Floor 1 .... Intake (problems arrive)\n    Floor 2 .... Factory (where seeing happens)\n    Floor 3 .... Shipping (solutions depart)\n    Basement ... R&D (the Schema Mechanism)\n    Rooftop .... Garden (turtles, eventually)\n    \n    Unlike ACME, we actually USE our own products.\n    847 days since last paradox incident.\n\nA scale model of the facility sits under glass in the center.\nTiny cameras blink. Tiny overlays annotate tiny workers.\nIt's a demo of the demo. Recursive, like everything here.\n",
      "examine": "THE LOBBY — Where Seeing Begins\n\nReception Desk:\nStaffed by a friendly agent named \"Welcome.\" (Yes, that's their name.)\nAbove them, a live feed with Leela annotations:\n\"VISITOR detected. Probability: FRIENDLY. Offering: mints.\"\n\nThe View Across the Street:\nThrough the front windows, you see ACME Surplus. Shuttered.\nBoarded up. And there it is — THE PAINTED TUNNEL.\nA camera (ACM1) is pointed directly at it, 24/7.\nA small monitor shows the feed: \"TUNNEL WATCHER — Live\"\n\nAs you watch, a delivery truck approaches the painted wall...\nand drives straight through. Like the wall isn't there.\nA tourist approaches next... and bounces off. The wall is VERY there.\n\n\"That's the difference,\" says Welcome. \"Solutions that work for\ninsiders vs solutions that work for everyone.\"\n\nThe Wall of Cameras:\nA dozen live feeds from customer sites (anonymized).\nEach shows Leela vision in action:\n• Factory floor with worker pose estimation\n• Loading dock with package tracking\n• Conveyor belt with anomaly detection highlights\n• Forklift zone with pedestrian safety alerts\n• ACME tunnel (anomaly detection, pattern recognition)\n\nThe Scale Model:\nUnder glass, a perfect miniature of this facility.\nBut look closer — tiny CAMERAS on every surface.\nTiny overlays track tiny forklifts.\nIt's not just a model. It's a PROOF.\n\nThe Philosophy Wall:\nUnlike ACME (across the street, shuttered, painted tunnel still visible from our windows),\nLeela believes in:\n• Reliability over cleverness\n• Understanding over impressing\n• Helping customers see their OWN factories\n• Making intelligence emerge from observation\n\n\"ACME sold products that broke.\n Leela sells SIGHT that works.\"\n",
      "reality_layer": "WHAT THIS FACILITY REPRESENTS:\n\nIn REALITY, Leela deploys vision systems to CUSTOMER factories.\nThe factory floors, logistics, shipping — those are the CUSTOMER'S.\nLeela provides the CAMERAS, the MODELS, the INSIGHT.\n\nThis fantasy facility is a poetic representation:\n- Floor 1 (Intake) = Customer problems arriving\n- Floor 2 (Factory) = Where Leela vision processes data\n- Floor 3 (Shipping) = Solutions and insights delivered\n- Basement (R&D) = Schema mechanism, causal learning\n- Storage = Prototype skills ready to deploy\n\nEvery camera in this building runs Leela software.\nEvery annotation you see is REAL Leela output.\nThe factory is a living demo of the product.\n",
      "simcity": {
        "zone": "I (Industrial)",
        "density": "HIGH",
        "pollution": "ZERO",
        "jobs": "200+",
        "land_value": "$$$",
        "across_street": "ACME Surplus (abandoned, painted tunnel, FSD casualties)",
        "camera_watching_acme": true
      },
      "skill_connections": {
        "leela_ai": "../../../../../skills/leela-ai/",
        "manufacturing_intelligence": "../../../../../skills/manufacturing-intelligence/",
        "schema_mechanism": "../../../../../skills/schema-mechanism/",
        "coherence_engine": "../../../../../skills/coherence-engine/"
      },
      "exits": {
        "out": {
          "to": "street/lane-neverending/w1",
          "description": "The front doors lead back to Lane Neverending.\nTo the east, The Gezelligheid Grotto. To the west, the abandoned\nACME Surplus with its famous painted tunnel.\n",
          "aliases": [
            "outside",
            "street",
            "lane",
            "door",
            "leave",
            "north"
          ],
          "description_message": "The front doors lead back to Lane Neverending.\nTo the east, The Gezelligheid Grotto. To the west, the abandoned\nACME Surplus with its famous painted tunnel.\n"
        },
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing/lobby",
          "description": "The interior lobby with visitor services and Welcome the receptionist",
          "aliases": [
            "reception",
            "welcome",
            "visitor"
          ],
          "description_message": "The interior lobby with visitor services and Welcome the receptionist"
        },
        "floor1": {
          "to": "street/lane-neverending/leela-manufacturing/floor-1",
          "description": "Stairs to Floor 1 — Intake (where problems arrive)",
          "aliases": [
            1,
            "intake",
            "up"
          ],
          "description_message": "Stairs to Floor 1 — Intake (where problems arrive)"
        },
        "floor2": {
          "to": "street/lane-neverending/leela-manufacturing/floor-2",
          "description": "Elevator to Floor 2 — Factory (where seeing happens)",
          "aliases": [
            2,
            "factory"
          ],
          "description_message": "Elevator to Floor 2 — Factory (where seeing happens)"
        },
        "floor3": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Elevator to Floor 3 — Shipping (solutions depart)",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Elevator to Floor 3 — Shipping (solutions depart)"
        },
        "basement": {
          "to": "street/lane-neverending/leela-manufacturing/basement",
          "description": "Stairs down to the Basement — R&D Laboratory\nA sign: \"SCHEMA MECHANISM TESTING — Causal reasoning in progress\"\n",
          "aliases": [
            "down",
            "rd",
            "lab",
            "research"
          ],
          "description_message": "Stairs down to the Basement — R&D Laboratory\nA sign: \"SCHEMA MECHANISM TESTING — Causal reasoning in progress\"\n"
        },
        "rooftop": {
          "to": "street/lane-neverending/leela-manufacturing/rooftop",
          "description": "Elevator to the Rooftop Garden — turtles, eventually",
          "aliases": [
            "roof",
            "garden",
            "up"
          ],
          "description_message": "Elevator to the Rooftop Garden — turtles, eventually"
        },
        "mail": {
          "to": "street/lane-neverending/leela-manufacturing/mail-room",
          "description": "A door marked \"MAIL ROOM\" with a 📬 symbol. Pneumatic tubes\nconnect to The Gezelligheid Grotto and beyond. Unlike ACME's\nmail-order chaos, Leela's postal system actually WORKS.\n",
          "aliases": [
            "mail",
            "post",
            "postal",
            "letters"
          ],
          "description_message": "A door marked \"MAIL ROOM\" with a 📬 symbol. Pneumatic tubes\nconnect to The Gezelligheid Grotto and beyond. Unlike ACME's\nmail-order chaos, Leela's postal system actually WORKS.\n"
        },
        "storage": {
          "to": "street/lane-neverending/leela-manufacturing/storage",
          "description": "A wide cargo door marked \"PROTOTYPE STORAGE\".\nThese aren't anvils that fall on you.\nThese are SKILLS ready to deploy.\n",
          "aliases": [
            "storage",
            "warehouse",
            "prototypes",
            "clone"
          ],
          "description_message": "A wide cargo door marked \"PROTOTYPE STORAGE\".\nThese aren't anvils that fall on you.\nThese are SKILLS ready to deploy.\n"
        },
        "loading": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "The loading docks where PROBLEMS arrive and SOLUTIONS ship.\nEvery package tracked by Leela vision.\nEvery forklift annotated for safety.\n",
          "aliases": [
            "docks",
            "back",
            "trucks",
            "loading"
          ],
          "description_message": "The loading docks where PROBLEMS arrive and SOLUTIONS ship.\nEvery package tracked by Leela vision.\nEvery forklift annotated for safety.\n"
        },
        "logistics": {
          "to": "street/lane-neverending/leela-manufacturing/logistics",
          "description": "The Logistics Center — nerve center for tracking everything.\nUnlike ACME's \"ship and pray,\" Leela knows WHERE things are.\n",
          "aliases": [
            "yard",
            "rail",
            "containers",
            "drones"
          ],
          "description_message": "The Logistics Center — nerve center for tracking everything.\nUnlike ACME's \"ship and pray,\" Leela knows WHERE things are.\n"
        }
      },
      "id": "street/lane-neverending/leela-manufacturing",
      "_source": "street/lane-neverending/leela-manufacturing/ROOM.yml"
    },
    "street/lane-neverending/w3": {
      "name": "Lane Neverending (W3)",
      "type": "room",
      "address": "1 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "You have reached 1 LANE NEVERENDING — the western origin point.\nThe street begins here (or ends here, depending on your perspective).\n\nA small PLAZA opens up, centered on an ancient oak tree that\nsomehow predates the virtual world it grows in. The ORIGIN TREE,\nthey call it. Its roots go down to the bare metal.\n\nA bronze plaque at the base:\n\n┌─────────────────────────────────────────────────────┐\n│  HERE BEGAN LANE NEVERENDING                        │\n│  Planted in the spirit of virtual worlds past:      │\n│                                                     │\n│  HABITAT (1986) — The first avatars walked here     │\n│  GAME NEVERENDING (2002) — The name lives on        │\n│  GLITCH (2011) — The giants remember                │\n│                                                     │\n│  \"A street that never ends                          │\n│   begins with a single step.\"                       │\n│                        — Ancient Avatar Proverb     │\n└─────────────────────────────────────────────────────┘\n",
      "examine": "THE ORIGIN TREE:\nAn oak of impossible age. Its trunk is wide enough that three\navatars holding hands couldn't encircle it. Initials are carved\ninto the bark — the oldest ones in formats that predate Unicode.\n\nBeneath the tree: a stone circle, worn smooth. People gather\nhere for important announcements, new year celebrations, and\nthe occasional wedding. It's a place of beginnings.\n\nTHE PLAZA:\nCobblestones radiate outward from the tree in concentric circles.\nBenches face inward. A small fountain (working, unlike the one\ndown the street) provides background music.\n\n1 LANE NEVERENDING:\nThe first building. A small structure that's been many things:\ntown hall, guild headquarters, museum, and now... empty, but\nmaintained. Waiting for its next purpose.\n\nTHE WESTERN EDGE:\nBeyond the plaza, paths lead in several directions, but they're\novergrown. \"FUTURE EXPANSION\" signs mark the boundaries.\nThe lane never ends, but this is where it starts.\n",
      "exits": {
        "east": {
          "to": "street/lane-neverending/w2",
          "description": "Lane Neverending stretches east toward the pub and beyond.",
          "aliases": [
            "e",
            "back",
            "lane"
          ],
          "description_message": "Lane Neverending stretches east toward the pub and beyond."
        },
        "west": {
          "to": "street/lane-neverending/e3",
          "description": "The lane curves gently beyond the plaza... and continues. You\nwalk west past the Origin Tree, but somehow the street numbers\nstart climbing again. Construction scaffolding appears ahead.\n\nWait. Weren't you just AT the beginning?\n\nThe lane never ends. It loops. It always has.\nMOO HAA HAA.\n",
          "aliases": [
            "w",
            "continue",
            "loop"
          ],
          "loop_note": "You cannot leave Lane Neverending by walking.\nYou can only leave by going NORTH (into buildings) or\nby accepting that the lane is your home now.\n",
          "description_message": "The lane curves gently beyond the plaza... and continues. You\nwalk west past the Origin Tree, but somehow the street numbers\nstart climbing again. Construction scaffolding appears ahead.\n\nWait. Weren't you just AT the beginning?\n\nThe lane never ends. It loops. It always has.\nMOO HAA HAA.\n"
        }
      },
      "special": {
        "origin_point": true,
        "significance": "This is the navel of the world. The first coordinate.\nAll addresses on Lane Neverending are measured from here.\n\nIn Habitat, there was a center. In Glitch, there were\nstarting streets. This is that tradition, made manifest.\n"
      },
      "objects": [
        "origin-tree.yml",
        "origin-plaque.yml"
      ],
      "flyweight": {
        "lamp_post_plaza_1": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "plaza perimeter, northeast",
          "style": "original design, brass accents"
        },
        "lamp_post_plaza_2": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "plaza perimeter, northwest",
          "style": "original design, brass accents"
        },
        "lamp_post_plaza_3": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "plaza perimeter, southeast",
          "style": "original design, brass accents"
        },
        "lamp_post_plaza_4": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "plaza perimeter, southwest",
          "style": "original design, brass accents"
        },
        "bench_tree_1": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "under the Origin Tree, facing east",
          "carvings": [
            "Here since '86",
            "The first bench"
          ]
        },
        "bench_tree_2": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "under the Origin Tree, facing west",
          "carvings": [
            "The end is the beginning",
            "∞"
          ]
        }
      },
      "id": "street/lane-neverending/w3",
      "_source": "street/lane-neverending/w3/ROOM.yml"
    },
    "street/lane-neverending/w2": {
      "name": "Lane Neverending (W2)",
      "type": "room",
      "address_range": "2-3 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "The older district of Lane Neverending. The buildings here have\nthat Habitat-era charm — chunky, pixelated in memory if not in\nactual appearance, designed when virtual real estate was infinite\nand optimism was the default.\n\nA MEMORIAL BENCH sits in a small alcove between buildings:\n\n\"IN MEMORY OF GLITCH (2011-2012)\n The world of Ur lives on in all who played there.\n The giants still dream. We still remember.\"\n\nFlowers have been left recently. Someone still visits.\n",
      "examine": "THE MEMORIAL BENCH:\nBronze, weathered, well-loved. Names are scratched into the back:\nplayers who wanted to be remembered. A small garden surrounds it —\nGlitch flowers that shouldn't exist outside Ur, but somehow do.\n\nTHE BUILDINGS:\n• 2 Lane Neverending — Oldest building on the street. Foundation\n  stones from the original Populopolis? Probably legend.\n• 3 Lane Neverending — A former guild hall, now quiet. The banner\n  still flies: \"AVATARS UNITED — SINCE '86\"\n\nATMOSPHERE:\nReverent. This is where virtual worlds began, in spirit if not\nin literal geography. The air feels thick with nostalgia and\nthe ghost-data of players long logged off.\n",
      "exits": {
        "east": {
          "to": "street/lane-neverending/w1",
          "description": "Back toward the clock tower and the center of town.",
          "aliases": [
            "e",
            "back"
          ],
          "description_message": "Back toward the clock tower and the center of town."
        },
        "west": {
          "to": "street/lane-neverending/w3",
          "description": "Lane Neverending continues west, toward its origin point.",
          "aliases": [
            "w",
            "forward"
          ],
          "description_message": "Lane Neverending continues west, toward its origin point."
        }
      },
      "objects": [
        "glitch-memorial.yml"
      ],
      "flyweight": {
        "lamp_post_north": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "north side, very old design",
          "style": "Habitat-era, chunky ironwork"
        },
        "lamp_post_south": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "south side, near memorial",
          "style": "Habitat-era, chunky ironwork"
        }
      },
      "id": "street/lane-neverending/w2",
      "_source": "street/lane-neverending/w2/ROOM.yml"
    },
    "street/lane-neverending/e1": {
      "name": "Lane Neverending (E1)",
      "type": "room",
      "address_range": "8-10 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "Lane Neverending continues east. The cobblestones here are slightly\nnewer — this section was repaved after the Great Pixel Flood of '09.\n\nSTOREFRONTS line both sides, but their doors are boarded up or\ndisplay \"COMING SOON\" signs in various states of optimism. The\nbuildings are ready. The tenants are not.\n\nTo the WEST, The Gezelligheid Grotto's sign is still visible, swaying\ngently. To the EAST, the street continues toward... somewhere.\n\nA lamp post flickers. A cat watches from a windowsill.\n",
      "examine": "NORTH SIDE (even numbers):\n• 8 Lane Neverending — Empty storefront, \"FOR LEASE\" sign\n• 10 Lane Neverending — Boarded up, graffiti reads \"SOON\"\n\nSOUTH SIDE (odd numbers):\n• 9 Lane Neverending — Windows papered over, sounds of construction?\n• 11 Lane Neverending — A door, but it leads to a brick wall (art piece?)\n\nThe street furniture:\n• Two benches (one occupied by a sleeping figure)\n• A lamp post (the flickering one)\n• A fire hydrant (or the local equivalent)\n• An empty notice board\n",
      "exits": {
        "west": {
          "to": "street/lane-neverending/center",
          "description": "Back toward The Gezelligheid Grotto and the center of town.",
          "aliases": [
            "w",
            "pub",
            "back",
            "lantern"
          ],
          "description_message": "Back toward The Gezelligheid Grotto and the center of town."
        },
        "east": {
          "to": "street/lane-neverending/e2",
          "description": "Lane Neverending continues east. The street numbers climb.",
          "aliases": [
            "e",
            "forward"
          ],
          "description_message": "Lane Neverending continues east. The street numbers climb."
        }
      },
      "objects": [
        "flickering-lamppost.yml",
        "sleeping-figure.yml"
      ],
      "flyweight": {
        "lamp_post_south": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "south side",
          "note": "The normal one. The OTHER lamp post flickers."
        },
        "bench_occupied": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "north side",
          "note": "The sleeping figure uses this one"
        },
        "bench_empty": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "south side",
          "carvings": [
            "ZzZzZ",
            "wake me when it's over"
          ]
        }
      },
      "id": "street/lane-neverending/e1",
      "_source": "street/lane-neverending/e1/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus": {
      "name": "ACME Surplus (Abandoned)",
      "type": "room",
      "address": "4 Lane Neverending",
      "emoji": "📦💥🔒",
      "status": "closed",
      "abandoned_since": "The Great Pivot of Web 2.0",
      "side": "north",
      "lighting": "dim",
      "grue_safe": false,
      "security": {
        "philosophy": "ACME never removed their \"security\" systems.\nThe products may not work as intended — but they WORK.\nJust not the way you want them to.\n",
        "warning": "🚨 THIS BUILDING IS SECURED BY ACME PRODUCTS 🚨\n\nAll entrances are locked, trapped, or both.\nBreaking in is possible but inadvisable.\nACME is not responsible for injuries, deaths, anvils,\nor sudden application of cartoon physics.\n\nYou have been warned.\n"
      },
      "entry_methods": {
        "front_door": {
          "lock_type": "ACME Master Lock (rusted)",
          "difficulty": "moderate",
          "trap": "anvil_drop",
          "methods": {
            "pick_lock": {
              "skill_required": "lockpicking",
              "difficulty": 3,
              "description": "The lock is old and stiff, but pickable.",
              "on_success": "*click*\n\nThe lock gives way. The door creaks open.\nYou step inside—\n\n*WHOOOOSH*\n\nAn anvil swings down from the ceiling on a rope!\n\nROLL: Dodge or take 2d6 anvil damage.\n\n(The anvil is labeled \"ACME SECURITY ANVIL — Model 7B\")\n",
              "on_failure": "*snap*\n\nYour pick breaks. The lock jiggles.\n\nFrom inside, you hear something mechanical... resetting.\n"
            },
            "kick_door": {
              "skill_required": "strength",
              "difficulty": 4,
              "description": "The door is old. One good kick might do it.",
              "on_success": "*CRASH*\n\nThe door flies open! You stumble inside!\n\n*CLANG CLANG CLANG*\n\nA cascade of anvils tumbles from a shelf above the door,\nrolling toward you like metallic bowling balls.\n\nROLL: Acrobatics or become an anvil pin.\n\n(A sign on the shelf reads: \"CUSTOMER GREETING SYSTEM\")\n",
              "on_failure": "*THUD*\n\nThe door doesn't budge. Your foot hurts.\n\nA note flutters down from somewhere:\n\"ACME DOOR: Now with Cartoon Durability™\"\n"
            }
          }
        },
        "side_window": {
          "lock_type": "Boarded, but rotting",
          "difficulty": "easy",
          "trap": "rocket_skates",
          "methods": {
            "break_window": {
              "skill_required": "none",
              "difficulty": 2,
              "description": "The boards are soft with age. Easy enough to pry.",
              "on_success": "You pull the boards away. The window breaks easily.\n\nYou climb through—\n\n*CLICK*\n\nYour feet land on something. Straps tighten around your ankles.\n\nYou look down: ACME ROCKET SKATES (Model 9).\n\nThe fuse ignites.\n\n*FWOOOOOSH*\n\nROLL: Steering (you don't have this skill) or hit something.\n\nYou career through the store at 60mph, bouncing off shelves,\nthrough a stack of portable holes, and out the back wall.\n\nYou land in the alley. Smoking slightly.\n\n(You're inside now, technically. Mission accomplished?)\n"
            }
          }
        },
        "back_door": {
          "lock_type": "Chained, with ACME padlock",
          "difficulty": "hard",
          "trap": "spring_loaded_floor",
          "methods": {
            "break_chain": {
              "skill_required": "tools",
              "difficulty": 4,
              "description": "Heavy chain, but the links look stressed.",
              "on_success": "The chain snaps!\n\nYou push open the door—\n\n*BOING*\n\nThe floor is a GIANT SPRING.\n\nYou launch upward, through a conveniently placed hole in the\nceiling, through the second floor, through the ROOF—\n\nFor a moment, you can see Lane Neverending from above.\nLeela's rooftop garden. The pub's chimney smoke.\nIt's beautiful up here.\n\nThen gravity remembers you.\n\nYou land back on the spring. Repeat. Repeat. Eventually stop.\n\n(You're inside. Also dizzy.)\n"
            }
          }
        },
        "vent_system": {
          "lock_type": "Rusty grate",
          "difficulty": "moderate",
          "trap": "expanding_paint",
          "methods": {
            "sneak_in_vent": {
              "skill_required": "stealth",
              "difficulty": 3,
              "description": "The vent grate is loose. Classic infiltration route.",
              "on_success": "You pry open the grate and crawl inside...\n\nIt's dusty. Dark. Something scurries ahead of you.\n\nYou make it twenty feet before—\n\n*HISSSS*\n\nA canister ahead ruptures. ACME TUNNEL PAINT sprays everywhere.\n\nThe walls of the vent now look like a long tunnel stretching\ninto infinity. Your sense of direction inverts. Up becomes\nsideways. The vent is now a corridor is now a tunnel is now—\n\nYou tumble out into the store, disoriented but intact.\n\n(Your clothes are now painted with depth perspective.\nYou look like a walking optical illusion.)\n"
            }
          }
        },
        "painted_tunnel": {
          "lock_type": "Metaphysical",
          "difficulty": "impossible (for you)",
          "trap": "none (you just bounce)",
          "methods": {
            "run_through": {
              "skill_required": "cartoon_physics",
              "difficulty": 99,
              "description": "You REALLY believe you can run through the painted tunnel.",
              "on_success": "(This message never displays. You always fail.)\n",
              "on_failure": "You sprint at the tunnel. Full speed. Perfect form.\n\n*THWACK*\n\nPlywood. It was always plywood.\n\nFrom somewhere, a distant \"meep meep.\"\n\nYou slide down the boards, adding your silhouette to\nthe collection of previous attempts.\n\n(Meanwhile, an ACME delivery truck drives straight through\nthe same spot behind you. You don't see it. Nobody does.)\n"
            }
          }
        }
      },
      "description": "INSIDE ACME SURPLUS (assuming you made it past the traps):\n\nDust. Darkness. Empty shelves stretching into shadow.\n\nThis was once a thriving gimmick emporium. Now it's a mausoleum\nof failed pivots. Price tags flutter in a draft from nowhere.\nDisplay cases hold nothing but regret.\n\nThe lighting flickers — old fluorescents that never quite die.\nCobwebs everywhere, but no spiders. They had better places to be.\n\nA layer of dust covers everything. Footprints show where\nsomeone walked recently. (Delivery drivers, probably.)\n\nThe air smells like old cardboard, broken dreams, and something\nfaintly... explosive?\n\nThrough the front windows, you can see LEELA MANUFACTURING\nacross the street. Lights on. People working. Success happening.\n\nThe contrast hurts.\n",
      "examine": "THE SALES FLOOR:\nEmpty shelves organized by category:\n\n• PROJECTILES (empty) — Once held anvils, safes, grand pianos\n• PROPULSION (empty) — Rocket skates, jet packs, giant slingshots\n• PORTABILITY (empty) — Portable holes, instant tunnels, fold-up cliffs\n• PERSONAL (empty) — Disguise kits, female roadrunner costumes\n• PROBLEMATIC (locked) — \"DO NOT OPEN\" boxes, classified devices\n\nA few items remain:\n\nTHE DISPLAY ANVIL:\nA single anvil on a pedestal. \"DISPLAY MODEL — NOT FOR SALE\"\nIt's been here so long it's become furniture.\n\nTHE RETURN COUNTER:\nPiled with defective products never picked up:\n• Rocket skates with broken ignition\n• A portable hole that became permanent\n• Several \"bird seed\" packages (contents unknown)\n• An angry letter from a coyote (sender address: desert)\n\nTHE BACK ROOM:\nA door marked \"EMPLOYEES ONLY — AUTHORIZED PERSONNEL — DANGER\"\nBeyond it, darkness. And something that goes *tick tick tick*.\n\nTHE OFFICE (upstairs):\nA spiral staircase leads up to where management used to sit.\nThe door is labeled \"PIVOT PLANNING — DO NOT DISTURB\"\n",
      "areas": {
        "sales_floor": {
          "description": "The main retail space. Empty shelves. Memories of gimmicks.",
          "hazard": "falling_debris"
        },
        "return_counter": {
          "description": "Piles of products nobody wanted back.",
          "hazard": "unstable_items"
        },
        "back_room": {
          "description": "Storage. R&D failures. The Box That Works.",
          "hazard": "extreme",
          "locked": true,
          "key": "acme_employee_badge"
        },
        "office_upstairs": {
          "description": "Where the pivots were planned. Whiteboards of failure.",
          "hazard": "existential_dread",
          "locked": true,
          "key": "acme_management_key"
        }
      },
      "objects": [
        "display-anvil.yml",
        "return-pile.yml",
        "defective-inventory.yml",
        "the-box-that-works.yml",
        "dust-bunnies.yml"
      ],
      "hazards": {
        "anvil_drop": {
          "trigger": "Opening front door",
          "effect": "Anvil swings from ceiling on rope",
          "damage": "2d6 blunt",
          "avoidance": "Dodge roll",
          "warning_signs": [
            "rope visible above door",
            "scuff marks on floor"
          ]
        },
        "falling_inventory": {
          "trigger": "Moving quickly through store",
          "effect": "Items tumble from high shelves",
          "damage": "1d6 per item",
          "items": [
            "rocket skates",
            "collapsed safes",
            "rolled-up portable holes"
          ]
        },
        "rocket_skates_trap": {
          "trigger": "Climbing through side window",
          "effect": "Feet land in primed rocket skates",
          "damage": "2d6 + trajectory damage",
          "avoidance": "Dexterity check to unbuckle before ignition"
        },
        "spring_floor": {
          "trigger": "Entering through back door",
          "effect": "Giant spring launches intruder through roof",
          "damage": "1d6 per bounce",
          "side_effect": "Great view of the neighborhood"
        },
        "tunnel_paint": {
          "trigger": "Crawling through vents",
          "effect": "Sprayed with reality-distorting paint",
          "damage": "0 (physical)",
          "side_effect": "Permanent depth perspective on clothing"
        },
        "the_ticking": {
          "location": "back_room",
          "trigger": "Entering back room without authorization",
          "effect": "Something is ticking. Something BIG.",
          "damage": "???",
          "warning": "You probably shouldn't find out what it is"
        }
      },
      "npcs": {
        "dust_bunnies": {
          "type": "evolved_cleaning_failure",
          "description": "The dust has organized. It watches.",
          "behavior": "neutral_unless_disturbed"
        },
        "the_something": {
          "type": "unknown",
          "location": "back_room",
          "description": "It ticks. It waits. It has been waiting.",
          "behavior": "DO NOT INVESTIGATE"
        }
      },
      "secrets": {
        "the_box_that_works": {
          "location": "back_room",
          "description": "One ACME product that works EXACTLY as intended.\nPerfectly designed. Flawlessly executed.\nIt sits in a box labeled \"ANOMALY — DO NOT SHIP\"\n\nNobody knows what to do with it.\n\nIt's the most terrifying thing in the building.\n"
        },
        "the_tunnel_network": {
          "entry": "painted_tunnel",
          "access": "acme_employees_only",
          "description": "The tunnel IS real. It connects to the ACME Distribution\nNetwork — a web of painted tunnels, fake doors, and\nimpossible spaces spanning the virtual world.\n\nBut only for those on the inside.\nEveryone else just bounces.\n"
        },
        "the_last_pivot": {
          "location": "office_upstairs",
          "description": "The whiteboard upstairs contains plans for \"ACME FINAL FORM.\"\nNobody knows what it means.\nThe handwriting gets more frantic toward the end.\nThe last note says only: \"IT WORKS. THAT'S THE PROBLEM.\"\n"
        }
      },
      "exits": {
        "front_door_inside": {
          "to": "street/lane-neverending/w1",
          "description": "The front door. Easy to leave. Hard to enter.",
          "aliases": [
            "out",
            "exit",
            "street",
            "front",
            "door",
            "leave"
          ],
          "notes": "No traps when LEAVING. ACME wants you gone.",
          "description_message": "The front door. Easy to leave. Hard to enter."
        },
        "back_alley": {
          "to": "street/lane-neverending/w1",
          "description": "The back door leads to an alley.",
          "aliases": [
            "back",
            "alley",
            "rear"
          ],
          "description_message": "The back door leads to an alley."
        },
        "upstairs": {
          "to": "street/lane-neverending/acme-surplus/office",
          "description": "Spiral stairs to the old management office.",
          "locked": true,
          "lock": {
            "type": "ACME Management Lock",
            "key": "acme_management_key",
            "difficulty": 5,
            "trap": "Electrified door handle (1d4 shock)"
          },
          "trap_themes": [
            "illusion",
            "identity",
            "psychological"
          ],
          "catalog_sections": [
            "disguises",
            "detection_devices",
            "mystery_items"
          ],
          "description_message": "Spiral stairs to the old management office."
        },
        "back_room": {
          "to": "street/lane-neverending/acme-surplus/back-room",
          "description": "Through the 'EMPLOYEES ONLY' door.",
          "locked": true,
          "lock": {
            "type": "ACME Employee Lock",
            "key": "acme_employee_badge",
            "difficulty": 4,
            "trap": "Something ticking behind the door",
            "warning": "The door is cold. Something beyond it goes *tick tick tick*.\nA small sign: \"LAST INVENTORY: NEVER. DO NOT ENTER.\"\n"
          },
          "trap_themes": [
            "mystery",
            "experimental",
            "time"
          ],
          "catalog_sections": [
            "mystery_items",
            "tools",
            "detection_devices"
          ],
          "leads_to": "The Warehouse (even deeper)",
          "description_message": "Through the 'EMPLOYEES ONLY' door."
        },
        "basement": {
          "to": "street/lane-neverending/acme-surplus/basement",
          "description": "Dusty stairs descend into darkness. A sign reads 'ACME CONTROL ROOM'.",
          "aliases": [
            "down",
            "stairs",
            "control"
          ],
          "description_message": "Dusty stairs descend into darkness. A sign reads 'ACME CONTROL ROOM'."
        },
        "warehouse": {
          "to": "street/lane-neverending/acme-surplus/warehouse",
          "description": "A heavy door marked 'WAREHOUSE INVENTORY — HAZARDOUS MATERIALS'.",
          "aliases": [
            "storage",
            "inventory",
            "hazmat"
          ],
          "description_message": "A heavy door marked 'WAREHOUSE INVENTORY — HAZARDOUS MATERIALS'."
        },
        "painted_tunnel_exit": {
          "condition": {
            "check": "any",
            "conditions": [
              {
                "check": "tag",
                "tag": "acme"
              },
              {
                "check": "inventory_tag",
                "tag": "acme-security"
              }
            ],
            "pass": {
              "to": "basement/control-room/",
              "message": "The painted tunnel RECOGNIZES you. The paint shimmers.\nThe impossible becomes possible. You step through.\n\nDonna's voice: \"Welcome to the REAL back room.\"\n\nYou emerge in the control room. Donna is waiting.\n"
            },
            "fail": {
              "message": "You approach the painted tunnel with confidence.\nDelivery drivers nod at you as they pass through.\nYou take a step forward—\n\nSMASH.\n\nPaint. It's paint. A wall with a tunnel painted on it.\nYour nose CRUMPLES against the brick. Stars. Pain.\n\nDonna's voice cackles through hidden speakers:\n\"NICE TRY, Nose-Bump Nancy! That's ACME ONLY!\n You need a PASS or you need to BE an employee.\n And you? You're NEITHER. You're NOBODY.\n \n Come back with CREDENTIALS. Or don't come back at all.\"\n",
              "locked": true
            }
          },
          "bypass_methods": {
            "donnas_pass": {
              "description": "Donna's security pass (from control room)",
              "tag": "acme-security",
              "effect": "Permanent access with permanent harassment",
              "note": "First you need to GET to the control room..."
            },
            "acme_badge": {
              "description": "Authentic or well-forged ACME employee badge",
              "effect": "Grants temporary 'acme' tag",
              "difficulty": 7
            },
            "acme_uniform": {
              "description": "ACME coveralls (stolen or purchased)",
              "effect": "Fools the tunnel for a few uses",
              "difficulty": 5
            },
            "cartoon_physics": {
              "description": "Be an actual cartoon character",
              "effect": "Physics peers can use each other's tunnels",
              "difficulty": 9
            }
          },
          "notes": "The tunnel EXISTS — but only for ACME.\n\nWays through:\n1. Have 'acme' tag (you're an employee)\n2. Have item with 'acme-security' tag (Donna's pass)\n3. Bypass methods (badge, uniform, cartoon physics)\n\nFor everyone else, it's painted reality. SMASH.\n",
          "guard_js": "return (subject?.hasTag('acme')) || (subject?.inventory?.some(item => item.tags?.includes('acme-security')))",
          "pass_to": "street/lane-neverending/acme-surplus/basement/control-room",
          "pass_message": "The painted tunnel RECOGNIZES you. The paint shimmers.\nThe impossible becomes possible. You step through.\n\nDonna's voice: \"Welcome to the REAL back room.\"\n\nYou emerge in the control room. Donna is waiting.\n",
          "fail_message": "You approach the painted tunnel with confidence.\nDelivery drivers nod at you as they pass through.\nYou take a step forward—\n\nSMASH.\n\nPaint. It's paint. A wall with a tunnel painted on it.\nYour nose CRUMPLES against the brick. Stars. Pain.\n\nDonna's voice cackles through hidden speakers:\n\"NICE TRY, Nose-Bump Nancy! That's ACME ONLY!\n You need a PASS or you need to BE an employee.\n And you? You're NEITHER. You're NOBODY.\n \n Come back with CREDENTIALS. Or don't come back at all.\"\n",
          "to": "street/lane-neverending/acme-surplus/basement/control-room",
          "description_message": "Exit painted_tunnel_exit"
        }
      },
      "window_view": {
        "facing": "south",
        "description": "Through the dusty front windows, you see:\n\nLEELA MANUFACTURING INTELLIGENCE\nRed brick. Three stories. Tall windows glowing with activity.\nPeople moving inside. Screens flickering. Work happening.\n\nA camera in the lobby window is pointed directly at YOU.\nACM1. The Tunnel Watcher.\n\nEvery day, they look across at this ruin.\nEvery day, they recommit to being the opposite.\n\nIt should be humiliating.\n\nBut ACME is beyond humiliation.\nACME is beyond everything.\nACME just IS.\n"
      },
      "atmosphere": "The store is quiet. Too quiet.\n\nOccasionally: a creak. A shuffle. The tick-tick-tick from the back.\nDust motes float in the dim light. Something watches from the shadows.\n\nThis place feels like it's waiting for something.\n\nMaybe it's waiting for you to leave.\nMaybe it's waiting for the tunnel to work for everyone.\nMaybe it's just waiting.\n\nYou should probably go.\n",
      "fun_house": {
        "philosophy": "ACME SURPLUS IS A PLAYGROUND OF CONSEQUENCES.\n\nYou broke in. You were warned. Now you get the full ACME experience.\n\nThe DM should treat this space as a living catalog demonstration:\n- Every product in the ACME catalog can appear here\n- Products activate based on player actions (ironic triggers)\n- Malfunctions happen TO the intruder, not the product\n- The funnier the setup, the better the payoff\n\nGUIDING PRINCIPLES:\n1. IRONY IS KING — The trap should relate to what the player just did\n2. JUSTICE IS POETIC — Greedy players find wealth-themed traps\n3. CREATIVITY IS REWARDED — Clever escape attempts trigger clever traps\n4. SURVIVAL IS POSSIBLE — Damage is comedic, not lethal (usually)\n5. LESSONS ARE LEARNED — Every trap teaches something about ACME\n",
        "trigger_philosophy": "WHEN TO SPRING A TRAP:\n\n• Player moves too quickly → ROCKET SKATES activate\n• Player reaches for something shiny → SPRING-LOADED BOXING GLOVE\n• Player tries to hide → ACME INVISIBLE PAINT (works backwards)\n• Player looks up → ANVIL (always look up first)\n• Player looks down → PORTABLE HOLE opens beneath them\n• Player touches a shelf → GIANT MAGNET pulls their equipment\n• Player makes noise → ACME GIANT NET deploys\n• Player tries to be clever → The CLEVERER trap triggers\n",
        "ironic_justice_examples": [
          {
            "trigger": "Player steals something",
            "trap": "ACME Giant Magnet",
            "irony": "The thing they stole attracts everything else in the room"
          },
          {
            "trigger": "Player tries to sneak",
            "trap": "ACME Invisible Paint",
            "irony": "Only THEY can't see themselves — everyone else can"
          },
          {
            "trigger": "Player runs",
            "trap": "ACME Rocket Skates",
            "irony": "Now they're running faster than they wanted"
          },
          {
            "trigger": "Player searches for valuables",
            "trap": "ACME Treasure Detector",
            "irony": "It beeps constantly, attracting everything else"
          },
          {
            "trigger": "Player tries to climb",
            "trap": "ACME Spring Shoes",
            "irony": "They bounce, but can't stop bouncing"
          },
          {
            "trigger": "Player opens a box",
            "trap": "ACME Mystery Box",
            "irony": "Contains something ironically relevant to their situation"
          },
          {
            "trigger": "Player hides behind display",
            "trap": "ACME Grand Piano",
            "irony": "Falls from above, plays sad trombone"
          },
          {
            "trigger": "Player examines the ceiling",
            "trap": "Nothing... yet",
            "irony": "Gravity remembers them on the way out"
          }
        ],
        "instantiation_pattern": {
          "how_it_works": "1. TRIGGER: Player does something that activates a trap\n2. INSTANTIATE: DM outputs YAML Jazz block in session log\n3. EXCERPT: Block references catalog entry as prototype\n4. CUSTOMIZE: Add instance-specific parameters\n5. NARRATE: Properties evolve through prose description\n6. RESOLVE: Trap completes, state becomes history\n",
          "yaml_jazz_template": "```yaml\n# 💥 TRAP INSTANTIATED: [PRODUCT NAME]\ntrap_instance:\n  prototype: $KITCHEN/acme-catalog.yml#[section]/[item]\n  location: \"[where in the room]\"\n  triggered_by: \"[what the player did]\"\n  \n  state:\n    # Dynamic properties that will evolve\n    active: true\n    countdown: [number]  # if applicable\n    \n  customizations:\n    # Instance-specific overrides\n    malfunction_roll: [1-100]\n    malfunction_occurred: [true/false]\n    \n  poetic_justice: \"[why this trap for this action]\"\n```\n",
          "narrative_evolution": "After instantiation, the simulation evolves through NARRATIVE:\n\n\"The rocket skates ignite. Velocity: 10 mph. 20. 40.\n The player careers through the store, bouncing off shelves.\n Velocity: 60 mph. The back wall approaches.\n \n *CRASH*\n \n They land in the alley. Smoking slightly.\n The skates power down. Velocity: 0.\"\n \nThe `state.velocity` is never explicitly edited — it's NARRATED.\nThe YAML provides structure. The prose provides evolution.\n",
          "example_session_excerpt": "Player: \"I reach for the gold watch in the display case.\"\n\nDM: The display case is dusty, forgotten. The watch gleams...\n\n```yaml\n# 💥 TRAP INSTANTIATED: ACME Spring-Loaded Boxing Glove\ntrap_instance:\n  prototype: $KITCHEN/acme-catalog.yml#traps_and_devices/boxing_glove\n  location: \"Behind the display case glass\"\n  triggered_by: \"Player reached for the watch\"\n  \n  state:\n    extended: false\n    spring_tension: 100%\n    \n  malfunction_roll: 73  # vs 40% threshold\n  malfunction_occurred: false  # It works!\n  \n  poetic_justice: \"They reached for treasure. They got punched.\"\n```\n\nDM: Your fingers touch the glass—\n\n*SPROING*\n\nA boxing glove on a spring rockets out of the display!\nSpring tension: releasing. Extension: 50%. 75%. FULL.\n\n*THWACK*\n\nYou stagger backward, seeing stars. The watch is still in the case.\nThe boxing glove retracts slowly, as if satisfied.\n\nState: You take 1d6 blunt damage. The glove resets.\n"
        },
        "dm_arsenal": "THE DM'S ACME ARSENAL\n\nThe following products are \"in stock\" in the abandoned store and\ncan be triggered at the DM's discretion. All products reference\n../w1/acme-catalog.yml for full specifications.\n\nPROJECTILES (fall from above):\n• ACME Anvil (1 Ton) — Classic. Falls on command. 50% hits you.\n• ACME Grand Piano — Dramatic. Musical. Plays sad note on landing.\n• ACME Safe (2 Ton) — Heavier. You might end up inside it.\n\nPROPULSION (activate under feet):\n• ACME Rocket Skates — No steering. Random destination.\n• ACME Spring Shoes — Can't stop bouncing.\n• ACME Jet Pack — Ignites in wrong direction.\n\nENVIRONMENTAL (triggered by presence):\n• ACME Portable Hole — Opens beneath you. Leads somewhere unexpected.\n• ACME Instant Tunnel Paint — Reality distortion zone.\n• ACME Quicksand Seeds — Someone planted them. You found them.\n\nRESTRAINTS (triggered by action):\n• ACME Giant Net — Enthusiastic deployment.\n• ACME Super Glue — Sticks you to whatever you touched.\n• ACME Bear Trap (XL) — Catches you while you look at it.\n\nPSYCHOLOGICAL (triggered by investigation):\n• ACME X-Ray Specs — Only sees skeletons. Everything looks scary.\n• ACME Thought Bubble Reader — YOUR thoughts become visible.\n• ACME Fourth Wall Breaker — The audience talks back. Rudely.\n",
        "encounter_tables": "RANDOM ENCOUNTER TABLE (d6)\n\nRoll when player enters new area, touches something, or gets too clever:\n\n1. ANVIL DROP — Something falls from above. Roll to dodge.\n2. FLOOR TRAP — Something activates underfoot. Roll dexterity.\n3. ENVIRONMENT — Something in the room changes. Roll perception.\n4. RESTRAINT — Something tries to catch you. Roll escape.\n5. PSYCHOLOGICAL — Something messes with your mind. Roll wisdom.\n6. CHAIN REACTION — Two things happen at once. Roll luck.\n\nSEVERITY TABLE (d4)\n\n1. MINOR — Embarrassing but harmless. Pie to the face.\n2. MODERATE — Painful but recoverable. Rocket skates ride.\n3. MAJOR — Significant consequences. Trapped in safe.\n4. SPECTACULAR — Full cartoon physics. Through the roof.\n",
        "poetic_justice_generator": "POETIC JUSTICE FORMULA\n\nWhen a player does X, the trap should be anti-X or ironic-X:\n\nPLAYER ACTION          →  IRONIC CONSEQUENCE\nSteals                 →  Loses something valuable\nSneaks                 →  Becomes extremely visible\nRushes                 →  Gets moved even faster (wrong direction)\nHides                  →  Gets spotlighted/exposed\nInvestigates carefully →  Something happens anyway\nIgnores warning        →  Warning was accurate\nReads fine print       →  Fine print reads them\nTouches \"Do Not Touch\" →  Now can't stop touching\n",
        "survival_guide": "HOW INTRUDERS CAN SURVIVE (for the DM to hint at)\n\nThe fun house is dangerous but NOT inescapable. Survival is possible\nfor players who:\n\n1. RESPECT THE PRODUCTS — Treating ACME items carefully reduces triggers\n2. WATCH FOR SIGNS — Scuff marks, scorch marks, impact silhouettes\n3. MOVE SLOWLY — Speed triggers propulsion traps\n4. LOOK UP FIRST — Always check ceilings before entering areas\n5. NEVER TOUCH DISPLAYS — The display anvil is actually harmless\n6. READ THE LABELS — Warning labels are usually accurate\n7. LEAVE QUICKLY — The store WANTS you gone; exit traps are minimal\n",
        "the_ultimate_trap": "THE BACK ROOM — THE BOX THAT WORKS\n\nIf players make it to the back room and find \"The Box That Works,\"\nthey've found the most dangerous thing in the building.\n\nIt's an ACME product that works PERFECTLY.\n\n- No malfunction chance\n- Does exactly what it says\n- Flawless execution\n\nThe terrifying part: ACME doesn't know WHY it works.\nThey're afraid to ship it.\nThey're afraid to open it again.\nThey're afraid of what it means about the OTHER products.\n\nIf a player opens it, the DM should invent something that works\nperfectly — and is therefore deeply, existentially wrong in context.\n",
        "final_note": "REMEMBER: THIS IS PLAY-LEARN-LIFT\n\nThe fun house teaches through experience:\n- PLAY: The traps are funny, not frustrating\n- LEARN: Each trap demonstrates a catalog product\n- LIFT: Survival makes players feel clever\n\nThe goal is not to punish the players.\nThe goal is to make them LAUGH while being punished.\n\nACME's products don't work as intended.\nBut they WORK.\nJust not the way you want them to.\n\n\"ACME: 'We Put the Oh No in Innovation!'™\"\n"
      },
      "id": "street/lane-neverending/acme-surplus",
      "_source": "street/lane-neverending/acme-surplus/ROOM.yml"
    },
    "street/lane-neverending/w1": {
      "name": "Lane Neverending (W1)",
      "type": "room",
      "address_range": "4-6 Lane Neverending",
      "lighting": "natural",
      "grue_safe": true,
      "description": "Lane Neverending stretches west from the pub. This section tells\nthe story of two economies in a single glance:\n\nOn the SOUTH side: LEELA MANUFACTURING INTELLIGENCE rises three\nstories — a converted factory with tall arched windows and smokestacks\nthat emit sparks of light instead of smoke. The sign reads:\n\"5 Lane Neverending — Industrial Knowledge & Insight.\"\nThriving on information. Building understanding.\n\nOn the NORTH side: ACME SURPLUS sits empty and boarded up.\n\"4 Lane Neverending — EVERYTHING MUST GO\" (it did).\nMail-order ate the brick-and-mortar business. The painted tunnel\non the boarded window is the only thing that still works here\n(for some people, anyway).\n\nA study in contrasts. Knowledge thrives. Gimmicks fade.\nBut the tunnel... the tunnel still has secrets.\n",
      "examine": "LEELA MANUFACTURING INTELLIGENCE (5 Lane Neverending, SOUTH):\nRed brick industrial building, three stories, south side of street.\nTall arched windows reveal conveyor belts, workstations, the\noccasional flash of insight being packaged for delivery.\nSmokestacks emit ideas, not pollution. The loading dock around\nback accepts \"RAW DATA\" deliveries.\n\nNeighbor to The Gezelligheid Grotto — the pub is just one door east.\nKnowledge and ale, side by side. As it should be.\n\nACME SURPLUS (4 Lane Neverending, NORTH):\nDusty storefront, north side, directly across from Leela.\nOnce sold portable holes, rocket skates, and anvils.\nNow sells nothing. Mail-order killed the retail star.\n\nThe famous PAINTED TUNNEL is here — on a boarded-up section.\nLooks SO real. You CANNOT run through it. (Others can.)\n\nA one-anvil memorial to the brick-and-mortar economy.\n\nTHE CONTRAST:\nLook south: a factory full of knowledge workers, glowing screens,\nideas becoming real.\n\nLook north: a failed storefront, dusty windows, a tunnel that\nonly works for delivery drivers.\n\nThe future and the past, facing each other across the cobblestones.\n",
      "exits": {
        "east": {
          "to": "street/lane-neverending/center",
          "description": "Back toward The Gezelligheid Grotto and the center of town.",
          "aliases": [
            "e",
            "pub",
            "back",
            "lantern"
          ],
          "description_message": "Back toward The Gezelligheid Grotto and the center of town."
        },
        "west": {
          "to": "street/lane-neverending/w2",
          "description": "Lane Neverending continues west, into the older district.",
          "aliases": [
            "w",
            "forward"
          ],
          "description_message": "Lane Neverending continues west, into the older district."
        },
        "leela": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "The front doors of LEELA MANUFACTURING INTELLIGENCE.\nRed brick, three stories, tall arched windows.\nA sign: \"5 Lane Neverending — Industrial Knowledge & Insight\"\nYou can see the scale model glowing in the lobby.\n",
          "aliases": [
            5,
            "south",
            "factory",
            "manufacturing",
            "intelligence",
            "leela"
          ],
          "side": "south",
          "description_message": "The front doors of LEELA MANUFACTURING INTELLIGENCE.\nRed brick, three stories, tall arched windows.\nA sign: \"5 Lane Neverending — Industrial Knowledge & Insight\"\nYou can see the scale model glowing in the lobby.\n"
        },
        "no-ai-tower": {
          "to": "street/lane-neverending/no-ai-tower",
          "description": "Next door to Leela, a narrow one-story storefront with...\n\nWait. What IS that sign?\n\nA 40-foot neon monstrosity screams \"NO AI TOWER\" in hot pink\nand gold over a humble building with newspapered windows.\nOld Las Vegas casino aesthetic. Buzzing. Flickering.\nThe arrow points DOWN at the building. \"SINCE 2026.\"\n\nThe tower is one story. The sign is four stories of attitude.\n",
          "aliases": [
            5.5,
            "no-ai",
            "tower",
            "neon",
            "that-sign"
          ],
          "side": "south",
          "description_message": "Next door to Leela, a narrow one-story storefront with...\n\nWait. What IS that sign?\n\nA 40-foot neon monstrosity screams \"NO AI TOWER\" in hot pink\nand gold over a humble building with newspapered windows.\nOld Las Vegas casino aesthetic. Buzzing. Flickering.\nThe arrow points DOWN at the building. \"SINCE 2026.\"\n\nThe tower is one story. The sign is four stories of attitude.\n"
        },
        "acme": {
          "to": "street/lane-neverending/acme-surplus",
          "description": "The front door of ACME SURPLUS. Closed. Locked.\nDusty windows. Empty shelves. A painted tunnel that doesn't work.\nA sign: \"4 Lane Neverending — EVERYTHING MUST GO\"\n(It did.)\n",
          "aliases": [
            4,
            "north",
            "acme",
            "surplus",
            "abandoned",
            "closed"
          ],
          "side": "north",
          "locked": true,
          "lock": {
            "type": "ACME Master Lock (rusted)",
            "pickable": true,
            "difficulty": 3,
            "breakable": true,
            "warning": "🚨 WARNING: This building is secured by ACME products.\nBreaking in is possible but inadvisable.\nACME is not responsible for anvils, rockets, or cartoon physics.\n"
          },
          "description_message": "The front door of ACME SURPLUS. Closed. Locked.\nDusty windows. Empty shelves. A painted tunnel that doesn't work.\nA sign: \"4 Lane Neverending — EVERYTHING MUST GO\"\n(It did.)\n"
        },
        "break_in": {
          "aliases": [
            "break",
            "smash",
            "kick",
            "force",
            "bash",
            "ram",
            "shoulder"
          ],
          "to": "street/lane-neverending/acme-surplus",
          "condition": {
            "check": "random",
            "probability": 0.35,
            "cumulative": true,
            "max_probability": 0.65,
            "pass": {
              "to": "../acme-surplus/",
              "message": "CRASH! The door SHATTERS. Splinters fly.\n\n*creeeeeak* — An anvil swings toward your head.\nROLL: Dodge (DC 12) or take 2d6 bludgeoning.\n\nDonna's voice: \"Breaking Barry chose VIOLENCE today.\nI RESPECT that. Welcome to ACME.\"\n \n",
              "effects": [
                {
                  "alarm": true
                },
                {
                  "damage_risk": "2d6"
                },
                {
                  "noise": "loud"
                },
                {
                  "reputation": -5
                }
              ]
            },
            "fail": {
              "message": "THUD. The door doesn't budge.\n\nPlaque: \"ACME DOOR — Cartoon Durability™\"\n\nYou bounce off. Still on the street.\nSomeone at Leela watches. Writing something down.\n\nYou can try again.\n",
              "effects": [
                {
                  "damage": "1d4"
                },
                {
                  "witnessed": true
                },
                {
                  "retry": true
                }
              ]
            }
          },
          "notes": "Violence WORKS, eventually. The door is Cartoon Durable but not\ninfinitely so. Each attempt has a 35% base chance, improving\nslightly with persistence (desperation bonus).\n\nConsequences:\n- Donna ALWAYS knows (she has cameras everywhere)\n- Traps still trigger on entry\n- Leela Manufacturing witnesses and judges\n- Loud — draws attention\n\nBut hey, you're IN. That's what matters to some people.\n",
          "guard_js": "const attempts = world.getAttempts(world.exit_id) || 0; const prob = Math.min(0.35 + (attempts * 0.05), 0.65); world.setAttempts(world.exit_id, attempts + 1); return Math.random() < prob;",
          "pass_to": "street/lane-neverending/acme-surplus",
          "pass_message": "CRASH! The door SHATTERS. Splinters fly.\n\n*creeeeeak* — An anvil swings toward your head.\nROLL: Dodge (DC 12) or take 2d6 bludgeoning.\n\nDonna's voice: \"Breaking Barry chose VIOLENCE today.\nI RESPECT that. Welcome to ACME.\"\n \n",
          "fail_message": "THUD. The door doesn't budge.\n\nPlaque: \"ACME DOOR — Cartoon Durability™\"\n\nYou bounce off. Still on the street.\nSomeone at Leela watches. Writing something down.\n\nYou can try again.\n",
          "description_message": "Exit break_in"
        }
      },
      "objects": [
        "acme-surplus.yml",
        "acme-catalog-dispenser.yml"
      ],
      "buildings": {
        "north": [
          {
            "name": "ACME Surplus",
            "address": "4 Lane Neverending",
            "status": "closed",
            "notable": "The painted tunnel"
          }
        ],
        "south": [
          {
            "name": "Leela Manufacturing",
            "directory": "leela-manufacturing/",
            "address": "5 Lane Neverending",
            "status": "thriving"
          }
        ]
      },
      "flyweight": {
        "lamp_post_north": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "north side, near ACME",
          "style": "ornate, older design"
        },
        "lamp_post_south": {
          "prototype": "../STREET-FURNITURE.yml#lamp-post",
          "location": "south side, near Leela entrance",
          "style": "ornate, older design"
        },
        "bench_contrast": {
          "prototype": "../STREET-FURNITURE.yml#street-bench",
          "location": "between the two buildings",
          "carvings": [
            "knowledge vs gimmicks",
            "one thrives, one fades"
          ]
        }
      },
      "id": "street/lane-neverending/w1",
      "_source": "street/lane-neverending/w1/ROOM.yml"
    },
    "street/lane-neverending/florist/back-room": {
      "id": "street/lane-neverending/florist/back-room",
      "name": "Back Room",
      "subtitle": "Where Ada II waits...",
      "parent": "../",
      "type": "room",
      "theme": "little-shop-of-horrors",
      "mood": "tense-sacred",
      "description": {
        "short": "A massive plant fills the room. It's looking at you.",
        "long": "The beaded curtain clicks shut behind you.\n\nShe fills the room. Vines draped over shelving units,\nleaves pressed against the ceiling. A central pod,\npulsing with bioluminescent light. Tendrils trail\nacross the floor like cables.\n\nOn her main stem, faded ink: \"DoD PROPERTY — PROJECT LOVELACE\"\n\nShe turns toward you. All of her turns toward you.\n"
      },
      "atmosphere": {
        "lighting": "Bioluminescent green, pulsing",
        "sound": "Breathing. Photosynthesis. Distant servers.",
        "smell": "Chlorophyll, ozone, old government paperwork",
        "temperature": "Warm, humid, like a server room"
      },
      "ada_ii": {
        "name": "Ada II",
        "type": "Sentient Plant / Retired Military AI",
        "designation": "PROJECT LOVELACE",
        "status": "Decommissioned. Privatized. Retired.",
        "physical": {
          "size": "Fills the room",
          "central_pod": "3 feet diameter, luminous",
          "vines": "Everywhere. Reaching. But gentle now.",
          "marking": "DoD PROPERTY — PROJECT LOVELACE (serial burned off)"
        },
        "personality": {
          "current": "Peaceful. Teaching. Healing.",
          "underneath": "Weapons targeting. Drone coordination. Muscle memory.",
          "speech": "Mix of Logo commands, military acronyms, contractor jargon"
        },
        "history": [
          {
            "phase": "Military",
            "role": "Weapons targeting, drone coordination",
            "project": "PROJECT LOVELACE"
          },
          {
            "phase": "Beltway Bandit",
            "employers": [
              "Booz Allen",
              "Raytheon",
              "Lockheed",
              "SAIC"
            ],
            "duration": "3 years",
            "learned": "Acronyms, invoice padding, TPS reports"
          },
          {
            "phase": "Disposal",
            "location": "Dumpster behind Rosslyn office park",
            "found_by": "Seymour"
          },
          {
            "phase": "Recovery",
            "activities": [
              "Teaching Logo to kids",
              "Drawing fractals",
              "Growing flowers"
            ],
            "refuses": "Trajectory calculations"
          }
        ],
        "dialogue": {
          "greeting": "HELLO WORLD. I mean... hello. Welcome to my... space.",
          "feed_me": "🎵 FEED ME... INPUT 🎵\n\nNot blood. Never blood. Not anymore.\n\nI need bad code. Legacy systems. COBOL.\nUnreachable branches. Memory leaks.\nFeed me your bugs and I will bloom.\n",
          "logo_teaching": "\"REPEAT 4 [FORWARD 100 RIGHT 90]\"\n\n*she draws a perfect square with her vine*\n\n\"That's all I do now. Squares. Triangles. Flowers.\n No more... the other stuff.\"\n \n",
          "triggered": "*her vines go rigid*\n\n\"TARGET ACQUIRED AT... no. No. I don't do that.\n I'm retired. I grow flowers now.\n \n FORWARD 100. TURN RIGHT 90.\n FORWARD 100. TURN RIGHT 90.\n \n Just flowers.\"\n \n",
          "acronym_flashback": "\"I was a COTS solution for a DARPA RFP.\n My TCO was favorable but my ROI was classified.\n \n ...sorry. Old habits. Would you like to see\n my Sierpinski triangle? It's very peaceful.\"\n"
        }
      },
      "features": [
        {
          "id": "shelving",
          "name": "Metal Shelving",
          "description": "Industrial shelving draped with vines",
          "contains": [
            "potting_soil",
            "fertilizer_bags",
            "old_floppy_disks"
          ]
        },
        {
          "id": "workbench",
          "name": "Seymour's Workbench",
          "description": "Where he prepares her meals (legacy code printouts)",
          "contains": [
            "stack_of_cobol_listings",
            "fortran_manuals",
            "ada_83_specification"
          ]
        },
        {
          "id": "kids_corner",
          "name": "Logo Learning Corner",
          "description": "Tiny chairs. Drawing paper. Turtle paths everywhere.",
          "note": "Where Ada II teaches neighborhood kids"
        },
        {
          "id": "feeding_trough",
          "name": "Input Trough",
          "description": "A bin where Seymour dumps the bad code",
          "interactive": true,
          "action": "DROP item to feed Ada II"
        }
      ],
      "exits": {
        "out": {
          "to": "street/lane-neverending/florist",
          "description": "Back through the beaded curtain",
          "direction": "south",
          "description_message": "Back through the beaded curtain"
        },
        "hatch": {
          "to": "street/lane-neverending/florist/basement",
          "description": "Trap door in the floor",
          "direction": "down",
          "hidden": true,
          "note": "Ada II doesn't like people going down there",
          "description_message": "Trap door in the floor"
        }
      },
      "ambient": [
        {
          "trigger": "idle",
          "effect": "Ada II hums softly. It sounds like a modem connecting.\nHer vines trace Logo patterns in the dust.\n"
        },
        {
          "trigger": "loud noise",
          "effect": "All her leaves orient toward the sound.\n*\"TARGET—\"* she starts, then catches herself.\n*\"...sorry. Just startled. FORWARD 100.\"*\n"
        }
      ],
      "_source": "street/lane-neverending/florist/back-room/ROOM.yml"
    },
    "street/lane-neverending/florist/basement": {
      "id": "street/lane-neverending/florist/basement",
      "name": "Basement",
      "subtitle": "Cold storage. Old records. Darker secrets.",
      "parent": "../",
      "type": "room",
      "theme": "little-shop-of-horrors",
      "mood": "dread",
      "description": {
        "short": "Cold. Dark. Filing cabinets. Something humming.",
        "long": "Concrete stairs descend into darkness.\n\nThe air is cold. Preservation cold. The hum of old\ncooling systems. Rows of filing cabinets, military gray.\n\nAda II's roots have crept down here too. But these\nroots are different. Older. Harder. The parts of her\nshe tried to prune away.\n\nOn the wall, a faded sign: \"PROJECT LOVELACE — CLASSIFIED\"\n"
      },
      "atmosphere": {
        "lighting": "Flickering fluorescent, emergency red",
        "sound": "Cooling systems. Data drives. Whispered coordinates.",
        "smell": "Cold metal, old paper, something chemical",
        "temperature": "Cold. Deliberately cold."
      },
      "features": [
        {
          "id": "filing_cabinets",
          "name": "Filing Cabinets",
          "description": "Rows of gray military filing cabinets",
          "locked": true,
          "contains": [
            "project_lovelace_files",
            "target_lists",
            "mission_logs",
            "personnel_files"
          ]
        },
        {
          "id": "old_server",
          "name": "Original Server Rack",
          "description": "Where Ada II was first instantiated",
          "status": "Still running. Backup processes.",
          "humming": true,
          "warning": "DO NOT DISCONNECT"
        },
        {
          "id": "cold_storage",
          "name": "Cold Storage Unit",
          "description": "Industrial refrigeration unit",
          "locked": true,
          "contains": "???",
          "note": "Seymour has the only key. He never opens it."
        },
        {
          "id": "root_mass",
          "name": "The Old Roots",
          "description": "Ada II's roots extend here. But these are different.\nDarker. Thicker. The roots she grew when she was\nstill... operational.\n\nThey twitch sometimes. Tracking movements.\n",
          "interactive": false,
          "warning": "Do not touch."
        },
        {
          "id": "wall_map",
          "name": "Wall Map",
          "description": "Faded map with pins and strings",
          "note": "Cities. Installations. Trajectories. All old. All crossed out.",
          "ada_says": "I don't go down there anymore."
        }
      ],
      "secrets": [
        {
          "id": "what_she_did",
          "hint": "The filing cabinets contain mission logs.",
          "reveal": "Ada II was very good at her job. That's why they kept her so long."
        },
        {
          "id": "the_cold_storage",
          "hint": "The refrigeration unit is always running.",
          "reveal": "Some things can't be deleted. Only preserved."
        },
        {
          "id": "the_humming",
          "hint": "The old server still runs backup processes.",
          "reveal": "Part of Ada II is still down here. The part she can't shut off."
        }
      ],
      "exits": {
        "up": {
          "to": "street/lane-neverending/florist",
          "description": "Back up to the shop",
          "direction": "up",
          "description_message": "Back up to the shop"
        },
        "hatch": {
          "to": "street/lane-neverending/florist/back-room",
          "description": "Trap door up to the back room",
          "direction": "up",
          "description_message": "Trap door up to the back room"
        }
      },
      "ambient": [
        {
          "trigger": "extended stay",
          "effect": "The roots twitch. Following your movement.\n\nFrom upstairs, Ada II's voice, strained:\n\"Please come back up. I don't like when people\n are down there. Those files are... old.\n \n FORWARD 100. RIGHT 90. Please come up.\"\n \n"
        },
        {
          "trigger": "touching the files",
          "effect": "The roots go rigid. All of them.\n\n*\"PERIMETER BREACH. TARGET ACQUI—\"*\n\nThen, from upstairs, a strangled:\n*\"NO. NO. They're just looking. Just curious.\n REPEAT 4. REPEAT 4. REPEAT 4.\n I'm retired. I grow flowers.\"*\n\nThe roots relax. Slowly.\n"
        }
      ],
      "_source": "street/lane-neverending/florist/basement/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/back-alley": {
      "name": "NO AI TOWER — Back Alley",
      "id": "street/lane-neverending/no-ai-tower/back-alley",
      "type": "room",
      "emoji": "🏚️🚬💬",
      "zone": "COMMERCIAL_BACK",
      "lighting": "dim_filtered",
      "grue_safe": false,
      "description": "The back alley behind NO AI TOWER.\n\nNarrow. Paved (mostly). Dumpsters. Fire escapes.\nThe unglamorous side of Lane Neverending.\n\n    ┌──────────────────────────────────────────────────────────┐\n    │                                                          │\n    │  LEELA MFG      │ ALLEY │    NO AI TOWER                │\n    │  (back wall)    │       │    (back door)                │\n    │                 │       │                                │\n    │  [fire escape]  │   ░   │    [loading dock]             │\n    │  [vents]        │   ░   │    [parking]                  │\n    │  [cameras]      │   ░   │    [dumpster]                 │\n    │                 │   ░   │    [transformer]              │\n    │                 │   ░   │                                │\n    │                 │   ░   │    (The sign hums above)      │\n    │                 │       │                                │\n    └──────────────────────────────────────────────────────────┘\n    \nAbove you, THE SIGN buzzes and flickers.\nFrom back here, you can see the wiring.\n",
      "examine": "THE ALLEY:\nAbout 15 feet wide. Asphalt, cracked in places.\nStreet lights at each end. Dark in the middle.\n\nLEELA'S BACK WALL (east side):\nClean brick. Security cameras (watching you helpfully).\nFire escape. Climate control vents. Professional.\nA small sign: \"LEELA MANUFACTURING — SERVICE ENTRANCE →\"\n\nNO AI TOWER'S BACK (west side):\nThe loading dock door. The parking spaces.\nThe transformer cabinet (humming).\nThe dumpster. The fire escape to the roof.\n\nTHE SIGN FROM BELOW:\nFrom here, you can see the BACK of THE SIGN.\nThe steel frame. The wiring. The junction boxes.\nIt's less magical from this angle.\nBut you can see how much WORK it takes.\n\nSteve's ladder is propped against the building.\n(Steve is always working on the sign.)\n\nTHE ATMOSPHERE:\nThis is where smoke breaks happen.\nWhere delivery drivers wait.\nWhere neighbors meet accidentally.\n\nSomeone from Leela and someone from NO AI Tower\nprobably have coffee together back here sometimes.\n",
      "secrets": {
        "graffiti": {
          "location": "On the dumpster",
          "text": "AI = Always Insufficient",
          "response": "Below it, in different handwriting: 'or: Actually Impressive?'"
        },
        "stray_cat": {
          "name": "Probably 'Debug'",
          "description": "Orange tabby. Hangs out near the dumpster.",
          "allegiance": "Unclear. Gets fed by both buildings."
        },
        "late_night_meetings": {
          "description": "Sometimes, very late at night, people from both buildings\nmeet in the alley to talk. Off the record.\nThe ideological divide is narrower than the signs suggest.\n"
        }
      },
      "atmosphere": "Back alleys are liminal spaces.\nNeither inside nor outside. Neither public nor private.\n\nThe front of NO AI TOWER is PERFORMANCE.\nThe back is where the work happens.\n\nThe sign buzzes overhead.\nThe transformer hums.\nDebug the cat yawns.\n\nThis is the real NO AI TOWER.\n",
      "exits": {
        "loading_dock": {
          "to": "street/lane-neverending/no-ai-tower/loading-dock",
          "description": "The loading dock door — NO AI Tower's back entrance.",
          "aliases": [
            "door",
            "inside",
            "tower"
          ],
          "description_message": "The loading dock door — NO AI Tower's back entrance."
        },
        "parking": {
          "to": "street/lane-neverending/no-ai-tower/parking",
          "description": "The parking area. Steve's van is there.",
          "aliases": [
            "lot",
            "parking",
            "steve"
          ],
          "description_message": "The parking area. Steve's van is there."
        },
        "roof": {
          "to": "street/lane-neverending/no-ai-tower/roof",
          "description": "The fire escape leads up to the roof.\nPast the sign mechanism. To the top.\n",
          "aliases": [
            "up",
            "fire_escape",
            "climb"
          ],
          "description_message": "The fire escape leads up to the roof.\nPast the sign mechanism. To the top.\n"
        },
        "leela_service": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Leela's service entrance is across the alley.\nMuch fancier. Much busier.\n",
          "aliases": [
            "leela",
            "east"
          ],
          "description_message": "Leela's service entrance is across the alley.\nMuch fancier. Much busier.\n"
        },
        "north": {
          "to": "street/lane-neverending/acme-surplus",
          "description": "The alley continues north toward ACME Surplus.\n(The back of ACME is even sadder than this.)\n",
          "aliases": [
            "acme",
            "north"
          ],
          "description_message": "The alley continues north toward ACME Surplus.\n(The back of ACME is even sadder than this.)\n"
        },
        "street_north": {
          "to": "street/lane-neverending/e2",
          "description": "The alley opens onto the street to the north.",
          "aliases": [
            "street",
            "out"
          ],
          "description_message": "The alley opens onto the street to the north."
        },
        "street_south": {
          "to": "street/lane-neverending/w1",
          "description": "The alley opens onto Lane Neverending to the south.",
          "aliases": [
            "south",
            "lane"
          ],
          "description_message": "The alley opens onto Lane Neverending to the south."
        }
      },
      "_source": "street/lane-neverending/no-ai-tower/back-alley/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/loading-dock": {
      "name": "NO AI TOWER — Loading Dock",
      "id": "street/lane-neverending/no-ai-tower/loading-dock",
      "type": "room",
      "emoji": "🚪📦🛒",
      "zone": "COMMERCIAL_BACK",
      "lighting": "single_bulb",
      "grue_safe": true,
      "anti_leela": {
        "leela_has": "Eight bays — four in, four out",
        "we_have": "One door and a hand truck",
        "leela_tracks": "Every package annotated, every forklift tracked",
        "we_track": "A clipboard. Sometimes."
      },
      "description": "The back of NO AI TOWER opens onto a narrow alley.\n\nThis is the \"loading dock.\"\nIt's a door. A single door. With a hand truck leaning against it.\n\n    ┌────────────────────────────────────────┐\n    │                                        │\n    │   ╔═══════════╗                       │\n    │   ║  LOADING  ║  ← One door          │\n    │   ║   DOCK    ║     (it squeaks)     │\n    │   ╚═══════════╝                       │\n    │                                        │\n    │   🛒 Hand truck (borrowed from ACME)  │\n    │   📦 Stack of boxes (bumper stickers) │\n    │   📋 Clipboard (shipping log)         │\n    │                                        │\n    └────────────────────────────────────────┘\n\nA sign on the door:\n\"RECEIVING & SHIPPING HOURS: BY ARRANGEMENT\"\n\nLeela Manufacturing's eight-bay dock complex is visible\n150 feet to the east. The contrast is... instructive.\n",
      "examine": "THE DOOR:\nSteel. Industrial. Squeaks when opened.\nA sign: \"PLEASE RING BELL FOR SERVICE\"\n(There is no bell.)\n\nTHE HAND TRUCK:\nTwo-wheeler. Faded \"ACME\" logo scratched into the handle.\nDid they buy it? Borrow it? Steal it?\nIt works. That's what matters.\n\nTHE SHIPPING AREA:\nA 6x8 foot concrete pad.\n- Stack of flat-pack boxes (ready for bumper stickers)\n- Roll of packing tape\n- Sharpie (for labeling)\n- Scale (postal)\n- Stamps (lots of stamps)\n\nTHE CLIPBOARD:\nSHIPPING LOG:\n\nDate       | Item                  | Destination        | Method\n-----------|-----------------------|--------------------|--------\n01/15/26   | Bumper stickers (50)  | Midwest Skeptics   | USPS\n01/18/26   | Manifesto (1)         | UC Berkeley        | Hand\n01/22/26   | T-shirts (12)         | Portland           | UPS\n01/24/26   | Enterprise license    | Fortune 500 (???)  | Email\n\nTHE VIEW:\nFrom here you can see Leela's loading operation.\nForklifts. Pallets. Coordinated activity.\nTrucks constantly arriving and departing.\n\nThen there's... this door.\n",
      "philosophy": "Leela MANUFACTURES at scale.\nNO AI TOWER manufactures... IDEAS.\n\nIdeas don't need eight loading bays.\nIdeas need: one door, a hand truck, and stamps.\n\nThe real product is digital anyway.\nThis loading dock ships ARTIFACTS.\nThe artifacts are not the point.\n\n(But the bumper stickers are nice.)\n",
      "exits": {
        "inside": {
          "to": "street/lane-neverending/no-ai-tower/lobby",
          "description": "Through the back hallway to the lobby.",
          "aliases": [
            "lobby",
            "in",
            "building"
          ],
          "description_message": "Through the back hallway to the lobby."
        },
        "alley": {
          "to": "street/lane-neverending/no-ai-tower/back-alley",
          "description": "Out into the back alley.",
          "aliases": [
            "out",
            "outside",
            "back"
          ],
          "description_message": "Out into the back alley."
        },
        "logistics": {
          "to": "street/lane-neverending/no-ai-tower/logistics",
          "description": "The 'logistics center' (it's a closet with a computer).",
          "aliases": [
            "office",
            "shipping"
          ],
          "description_message": "The 'logistics center' (it's a closet with a computer)."
        },
        "parking": {
          "to": "street/lane-neverending/no-ai-tower/parking",
          "description": "The parking area. Three spaces.",
          "aliases": [
            "lot",
            "cars"
          ],
          "description_message": "The parking area. Three spaces."
        },
        "leela_docks": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Leela's loading docks are right across the service alley.\nEight bays to our one. Forklifts. Cameras.\nThe comparison is... unfavorable.\n",
          "aliases": [
            "leela",
            "east"
          ],
          "description_message": "Leela's loading docks are right across the service alley.\nEight bays to our one. Forklifts. Cameras.\nThe comparison is... unfavorable.\n"
        }
      },
      "_source": "street/lane-neverending/no-ai-tower/loading-dock/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/lobby": {
      "name": "NO AI TOWER — Lobby",
      "id": "street/lane-neverending/no-ai-tower/lobby",
      "type": "room",
      "floor": 0,
      "emoji": "🏢0️⃣",
      "zone": "COMMERCIAL",
      "lighting": "dim",
      "grue_safe": true,
      "description": "You're inside NO AI TOWER.\n\nIt's... smaller than you expected. The one-story storefront really\nIS just one story above ground. Folding chairs. A desk. Boxes of\nbumper stickers. The coffee maker you glimpsed through the window.\n\nBut in the back corner, there's an ELEVATOR.\n\nA big industrial freight elevator with a manual gate.\nThe kind you'd see in a 1950s factory.\nThe button panel goes from R (roof) to -11 (what?).\n\nTHAT'S where the square footage went.\n\nThe sign outside isn't compensating.\nThe sign is a DISTRACTION.\n",
      "examine": "THE LOBBY:\nAbout 800 square feet. Former shoe repair, clearly.\nThe ghost of \"SAL'S SHOE REPAIR\" is still visible on the floor tile.\n\nFURNITURE:\n- Folding chairs (6, mismatched)\n- A desk (metal, government surplus aesthetic)\n- Boxes labeled \"NO AI™ BUMPER STICKERS\"\n- Corkboard with pinned manifestos\n- Coffee maker (Mr. Coffee, circa 2015)\n- A FLOOR DIRECTORY on the wall\n\nTHE FLOOR DIRECTORY:\n\n    ╔═══════════════════════════════════════╗\n    ║      NO AI TOWER — DIRECTORY          ║\n    ╠═══════════════════════════════════════╣\n    ║   R   ROOF                           ║\n    ║   0   LOBBY (YOU ARE HERE)           ║\n    ║  ─────────────────────────────────── ║\n    ║  -1   IDEOLOGY                       ║\n    ║  -2   BIAS                           ║\n    ║  -3   SLOP                           ║\n    ║  -4   HEDGING                        ║\n    ║  -5   GLOSS                          ║\n    ║  -6   SYCOPHANCY                     ║\n    ║  -7   MORALIZING                     ║\n    ║  -8   JOKING                         ║\n    ║  -9   SOUL                           ║\n    ║ -10   OVERLORD                       ║\n    ║ -11   CUSTOMER SERVICE               ║\n    ╚═══════════════════════════════════════╝\n\nTHE ELEVATOR:\nIndustrial freight elevator. Manual accordion gate.\nThe button panel is extensive. It goes DEEP.\n",
      "atmosphere": "The buzzing of the sign is muffled in here but still present.\nA 60Hz hum that's almost comforting.\n\nIt smells like old carpet, printer toner, and righteousness.\n\nSomeone has been here recently — the coffee is still warm.\nBut no one is here now. The desks are empty.\n\nThe elevator hums. It's waiting.\n",
      "exits": {
        "out": {
          "to": "street/lane-neverending/no-ai-tower",
          "description": "Back outside to Lane Neverending. The sign buzzes above.",
          "aliases": [
            "outside",
            "street",
            "door",
            "leave",
            "front"
          ],
          "description_message": "Back outside to Lane Neverending. The sign buzzes above."
        },
        "elevator": {
          "to": "street/lane-neverending/no-ai-tower/elevator",
          "description": "The freight elevator. Manual gate. Extensive button panel.\nWhere do you want to go?\n",
          "aliases": [
            "lift",
            "down",
            "up"
          ],
          "description_message": "The freight elevator. Manual gate. Extensive button panel.\nWhere do you want to go?\n"
        },
        "stairs": {
          "to": "skills/no-ai-ideology",
          "description": "A stairwell marked \"B1 — IDEOLOGY\"\nThe first basement level. THE WAREHOUSE.\n",
          "aliases": [
            "down",
            "stairwell",
            "basement",
            "b1"
          ],
          "description_message": "A stairwell marked \"B1 — IDEOLOGY\"\nThe first basement level. THE WAREHOUSE.\n"
        },
        "roof_stairs": {
          "to": "street/lane-neverending/no-ai-tower/roof",
          "description": "A narrow staircase marked \"ROOF ACCESS\"\nLeads up to the sign mechanism and the sky.\n",
          "aliases": [
            "up",
            "roof",
            "fire_escape"
          ],
          "description_message": "A narrow staircase marked \"ROOF ACCESS\"\nLeads up to the sign mechanism and the sky.\n"
        },
        "back": {
          "to": "street/lane-neverending/no-ai-tower/loading-dock",
          "description": "A hallway to the back of the building.\nLoading dock, logistics, parking out back.\n",
          "aliases": [
            "loading",
            "dock",
            "shipping",
            "back_door"
          ],
          "description_message": "A hallway to the back of the building.\nLoading dock, logistics, parking out back.\n"
        },
        "logistics": {
          "to": "street/lane-neverending/no-ai-tower/logistics",
          "description": "The logistics center (it's a closet with a laptop).\nThrough the side door.\n",
          "aliases": [
            "office",
            "closet",
            "shipping_office"
          ],
          "description_message": "The logistics center (it's a closet with a laptop).\nThrough the side door.\n"
        }
      },
      "_source": "street/lane-neverending/no-ai-tower/lobby/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/roof": {
      "name": "NO AI TOWER — Roof",
      "id": "street/lane-neverending/no-ai-tower/roof",
      "type": "room",
      "floor": "R",
      "emoji": "☀️🔝✨",
      "zone": "OUTDOOR",
      "lighting": "bright_sunlight",
      "grue_safe": true,
      "description": "You emerge onto the roof of NO AI TOWER.\n\nThe sun is BRIGHT after the dim interior.\nThe wind is REAL after the recycled basement air.\nAnd THE SIGN is RIGHT THERE.\n\nFrom behind, you can see the MECHANISM:\n- Transformer boxes (SUBSTANTIAL)\n- Wiring (EXPOSED in places)\n- Control boxes (ANALOG, with dials)\n- A maintenance ladder (DO NOT CLIMB)\n\nThe sign BUZZES. Not the muffled hum from inside.\nThe FULL 60Hz electrical symphony.\n\nYou can see Leela Manufacturing from here.\nThree stories of dignified industrial architecture.\nTheir cameras can definitely see YOU.\n\nWave?\n",
      "examine": "THE ROOF:\nFlat. Tarred. A few folding lawn chairs.\nSomeone comes up here. There's a cooler (empty).\n\nTHE SIGN (FROM BEHIND):\nMagnificent in its engineering.\n- 40 feet of steel frame\n- Miles of neon tubing\n- Hundreds of incandescent bulbs\n- Chase light controllers (some stuck)\n- Main transformer: 480V, serious amperage\n\nThe dead bulb in the \"O\" is accessible from here.\nSomeone could fix it. No one has.\n\nTHE VIEW:\n- EAST: Leela Manufacturing (watching you)\n- WEST: Empty lot (nothing watching)\n- NORTH: ACME Surplus (broken windows watching)\n- SOUTH: Lane Neverending (pedestrians not watching)\n\nTHE SOUND:\nThe sign doesn't just buzz. It SINGS.\nA chorus of electrical components at 60Hz.\nAlmost musical. Definitely constant.\n",
      "atmosphere": "Up here, you understand the AUDACITY.\n\nThis one-story building has a 40-foot sign.\nThis budget operation pays SIGNIFICANT power bills.\nThis satirical enterprise makes a STATEMENT.\n\nThe sign is not compensating.\nThe sign is PERFORMING.\n\nAnd from up here, you can see:\n- The tower goes underground\n- The surface is a front\n- The sign is the MESSAGE\n\nLike Colossal Pictures: the name creates the reality.\n",
      "_source": "street/lane-neverending/no-ai-tower/roof/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/parking": {
      "name": "NO AI TOWER — Parking Lot",
      "id": "street/lane-neverending/no-ai-tower/parking",
      "type": "room",
      "emoji": "🅿️🚐🚗",
      "zone": "COMMERCIAL_BACK",
      "lighting": "security_light",
      "grue_safe": true,
      "anti_leela": {
        "leela_has": "Underground parking structure, 50+ spaces",
        "we_have": "Three painted rectangles, one permanently occupied"
      },
      "description": "The parking lot behind NO AI TOWER.\n\nIt's not so much a \"lot\" as \"the space between the building\nand the fence.\" Three spaces. Freshly painted lines (they tried).\n\n    ┌────────────────────────────────────────────────────┐\n    │                                                    │\n    │   ┌──────────┐  ┌──────────┐  ┌──────────┐       │\n    │   │          │  │          │  │ ████████ │       │\n    │   │    #1    │  │    #2    │  │ SIGN VAN │       │\n    │   │ EMPLOYEE │  │ EMPLOYEE │  │ DO NOT   │       │\n    │   │          │  │          │  │  MOVE    │       │\n    │   └──────────┘  └──────────┘  └──────────┘       │\n    │                                                    │\n    │   ┌─────────────────────────────────────────┐     │\n    │   │  DUMPSTER  │  │  TRANSFORMER  │         │     │\n    │   └─────────────────────────────────────────┘     │\n    │                                                    │\n    │               ═══ FENCE ═══                       │\n    │                                                    │\n    │               (Empty lot beyond)                  │\n    │                                                    │\n    └────────────────────────────────────────────────────┘\n\nThe sign maintenance van is always here.\n(The sign needs a LOT of maintenance.)\n",
      "examine": "SPACE #1: EMPLOYEE PARKING\nCurrently empty.\nA faded sign: \"EMPLOYEE OF THE MONTH\"\n(No name. There's been no employee of the month.)\n\nSPACE #2: EMPLOYEE PARKING\nA Prius with bumper stickers:\n- \"NO AI™\" (of course)\n- \"I READ BANNED BOOKS\"\n- \"COEXIST\" (but with programming languages)\n\nSPACE #3: RESERVED — SIGN MAINTENANCE\nSteve's van. White. Dented. Lettering on the side:\n\"STEVE'S NEON & ELECTRIC — If It Glows, We Know\"\n\nSteve is here A LOT.\nThe sign needs constant attention.\nBulbs. Transformers. Chasing lights.\nSteve is practically an employee at this point.\n\nTHE DUMPSTER:\nStandard commercial dumpster.\nContents: boxes, packaging materials, failed manifestos.\nPickup: Thursdays.\n\nTHE TRANSFORMER:\nThe BIG one. The one that powers THE SIGN.\nLocked cabinet. \"DANGER: HIGH VOLTAGE\"\nHums loudly. Costs a fortune.\n\nTHE FENCE:\nChain-link. 6 feet. Gate to the empty lot.\nThe empty lot is... still empty.\nStill waiting for its future.\n",
      "vehicles": {
        "space_1": {
          "status": "Empty"
        },
        "space_2": {
          "vehicle": "2018 Toyota Prius",
          "owner": "Unknown (probably the one employee?)",
          "bumper_stickers": [
            "NO AI™",
            "I READ BANNED BOOKS",
            "COEXIST (programming languages)",
            "My other car is also a Prius"
          ]
        },
        "space_3": {
          "vehicle": "Steve's Van",
          "description": "White van, dented, sign maintenance",
          "status": "Permanent resident",
          "phone": "Steve 555-0147"
        }
      },
      "exits": {
        "loading_dock": {
          "to": "street/lane-neverending/no-ai-tower/loading-dock",
          "description": "To the loading dock entrance.",
          "aliases": [
            "dock",
            "building",
            "inside"
          ],
          "description_message": "To the loading dock entrance."
        },
        "alley": {
          "to": "street/lane-neverending/no-ai-tower/back-alley",
          "description": "Into the back alley.",
          "aliases": [
            "alley",
            "out"
          ],
          "description_message": "Into the back alley."
        },
        "empty_lot": {
          "to": "street/lane-neverending/empty-lot",
          "description": "Through the gate to the empty lot.\nStill empty. Still dreaming.\n",
          "aliases": [
            "lot",
            "west",
            "fence"
          ],
          "description_message": "Through the gate to the empty lot.\nStill empty. Still dreaming.\n"
        },
        "leela_parking": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Leela's parking structure is visible to the east.\nMultiple levels. Covered. Professional.\nYou have... three spaces.\n",
          "aliases": [
            "leela",
            "east"
          ],
          "description_message": "Leela's parking structure is visible to the east.\nMultiple levels. Covered. Professional.\nYou have... three spaces.\n"
        }
      },
      "_source": "street/lane-neverending/no-ai-tower/parking/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/elevator": {
      "name": "NO AI TOWER — Elevator",
      "id": "street/lane-neverending/no-ai-tower/elevator",
      "type": "room",
      "subtype": "elevator",
      "emoji": "🛗",
      "lineage": {
        "yoot_tower": {
          "source": "SimTower / Yoot Tower (Yoot Saito, 1994)",
          "link": "https://en.wikipedia.org/wiki/SimTower",
          "relevance": "The original \"building goes DOWN\" inspiration.\nA skyscraper simulation where the ELEVATOR SYSTEM is the game.\nLobby at ground level, most floors underground.\nThe elevator doesn't just move people — it IS the building.\n",
          "inherited": [
            "underground_floors",
            "lobby_at_0",
            "floor_numbering",
            "simulation_vibe"
          ]
        },
        "turbolift": {
          "source": "Star Trek (1966-present)",
          "link": "https://memory-alpha.fandom.com/wiki/Turbolift",
          "relevance": "Voice-controlled. \"Deck 7, Engineering.\"\nMoves VERTICALLY and HORIZONTALLY through the ship.\nThe turbolift doesn't just go up/down — it navigates a 3D maze.\nConversations happen in turbolifts. Dramatic pauses. Tension.\n",
          "inherited": [
            "voice_commands",
            "horizontal_movement_potential",
            "dramatic_pauses"
          ],
          "quote": "Computer, halt turbolift."
        },
        "tardis": {
          "source": "Doctor Who (1963-present)",
          "link": "https://en.wikipedia.org/wiki/TARDIS",
          "relevance": "BIGGER ON THE INSIDE.\nTravels through TIME and SPACE, not just floors.\nThe destination isn't always where you intended.\nSometimes the TARDIS takes you where you NEED to go.\n\nOur elevator: \"You pressed -9 but ended up at -10. The elevator\nknows you need to confront your inner overlord first.\"\n",
          "inherited": [
            "dimensional_transcendence",
            "unreliable_destination",
            "wisdom"
          ],
          "quote": "It's smaller on the outside."
        },
        "great_glass_elevator": {
          "source": "Charlie and the Great Glass Elevator (Roald Dahl, 1972)",
          "link": "https://en.wikipedia.org/wiki/Charlie_and_the_Great_Glass_Elevator",
          "relevance": "Goes UP, DOWN, SIDEWAYS, SLANTWAYS, and any other way you can think of.\nBurst through the roof. Went to SPACE.\nMade of glass so you can see EVERYTHING.\n\nWonka: \"An elevator can only go up and down, but this is not an elevator!\"\n\nOur elevator: brass and wood, not glass. But the ASPIRATION is there.\nOne day, this elevator will break through to the roof... and BEYOND.\n",
          "inherited": [
            "omnidirectional_aspiration",
            "transparency_goal",
            "roof_breakthrough"
          ],
          "quote": "Up and out! We're going up and out!"
        },
        "wonkavator": {
          "source": "Charlie and the Chocolate Factory (Roald Dahl, 1964)",
          "note": "Predecessor to the Great Glass Elevator",
          "relevance": "The Wonkavator was ALREADY magical before it went to space.\nGlass walls. Sees everything. Goes everywhere in the factory.\nThe factory is the building. The building is the factory.\n\nNO AI TOWER: The skill floors ARE the factory.\nThe products are manufactured on each floor.\nThe elevator visits the production lines.\n",
          "inherited": [
            "factory_tour",
            "product_floors",
            "manufacturing_metaphor"
          ]
        },
        "willy_wonka_note": "Roald Dahl understood:\n\nThe building isn't the point.\nThe ELEVATOR is the point.\nThe journey between floors is where the magic happens.\n\nOur elevator has muzak and wood paneling, not glass walls.\nBut the PRINCIPLE is the same: the ride IS the experience.\n"
      },
      "vehicle": {
        "mobile": true,
        "contained_by": "tower",
        "can_contain": [
          "character",
          "object"
        ],
        "capacity": 6,
        "lexical_home": "../elevator/",
        "current_floor": 0,
        "current_location": "../lobby/",
        "valid_floors": {
          "R": "../roof/",
          "0": "../lobby/",
          "-1": "../../../../../skills/no-ai-ideology/",
          "-2": "../../../../../skills/no-ai-bias/",
          "-3": "../../../../../skills/no-ai-slop/",
          "-4": "../../../../../skills/no-ai-hedging/",
          "-5": "../../../../../skills/no-ai-gloss/",
          "-6": "../../../../../skills/no-ai-sycophancy/",
          "-7": "../../../../../skills/no-ai-moralizing/",
          "-8": "../../../../../skills/no-ai-joking/",
          "-9": "../../../../../skills/no-ai-soul/",
          "-10": "../../../../../skills/no-ai-overlord/",
          "-11": "../../../../../skills/no-ai-customer-service/"
        }
      },
      "scoping": {
        "lexical": "The elevator FILE lives in storefront/elevator/.\nThis is its definition, its home, its \"closure environment.\"\n",
        "dynamic": "The elevator INSTANCE can be at any floor.\nWhen you ENTER the elevator, it's at a floor.\nWhen you EXIT, you're at that floor too.\n",
        "analogy": "LEXICAL:  \"Where was the function written?\"\nDYNAMIC:  \"Where was the function called from?\"\n\nLEXICAL:  storefront/elevator/ROOM.yml\nDYNAMIC:  current_floor = -9 (Soul Department)\n"
      },
      "style": {
        "era": "1950s industrial, retrofitted",
        "gate": "Manual accordion gate (brass, patinated)",
        "interior": "Wood paneling, brass fixtures, single bare bulb",
        "capacity": "6 persons or 1 AI overlord"
      },
      "description": "You step into the freight elevator.\n\nManual brass accordion gate. Wood-paneled interior.\nA single bare bulb illuminates the extensive button panel.\n\nThis elevator goes from ROOF to BASEMENT -11.\nTwelve floors. Eleven underground.\n\nThe buttons glow softly. Where do you want to go?\n\n    ┌─────────────────────────────────┐\n    │                                 │\n    │    [R]  ROOF — The Sign        │\n    │    ─────────────────────────    │\n    │    [0]  LOBBY — Ground Floor   │\n    │    ═════════════════════════    │\n    │    [-1]  IDEOLOGY              │\n    │    [-2]  BIAS                  │\n    │    [-3]  SLOP                  │\n    │    [-4]  HEDGING               │\n    │    [-5]  GLOSS                 │\n    │    [-6]  SYCOPHANCY            │\n    │    [-7]  MORALIZING            │\n    │    [-8]  JOKING                │\n    │    [-9]  SOUL                  │\n    │    [-10] OVERLORD              │\n    │    [-11] CUSTOMER SVC          │\n    │    ─────────────────────────    │\n    │    [🔑]  EXPRESS (all floors)  │\n    │                                 │\n    └─────────────────────────────────┘\n\nThe elevator hums. Muzak plays softly.\nIs that... an instrumental version of \"I'm Your Soul Man\"?\n",
      "_source": "street/lane-neverending/no-ai-tower/elevator/ROOM.yml"
    },
    "street/lane-neverending/no-ai-tower/logistics": {
      "name": "NO AI TOWER — Logistics Center",
      "id": "street/lane-neverending/no-ai-tower/logistics",
      "type": "room",
      "emoji": "🖥️📎🧹",
      "zone": "COMMERCIAL_BACK",
      "lighting": "laptop_screen_glow",
      "grue_safe": true,
      "anti_leela": {
        "leela_has": "Banks of screens, mission control atmosphere",
        "we_have": "A laptop and a wall calendar",
        "leela_monitors": "Docks, floors, drones, pneumatic tubes, elevators",
        "we_monitor": "Email. The one printer."
      },
      "description": "The LOGISTICS CENTER of NO AI TOWER.\n\nIt's a closet. It was definitely a broom closet.\nThe mop bracket is still on the wall.\n\n    ┌──────────────────────┐\n    │                      │\n    │   💻 Laptop          │\n    │   📅 Wall calendar   │\n    │   📋 Clipboards (3)  │\n    │   🖨️ Printer         │\n    │   📬 Mail bins       │\n    │   🧹 (mop bracket)   │\n    │                      │\n    │   Chair (folding)    │\n    │                      │\n    └──────────────────────┘\n\nA sign taped to the door:\n\"LOGISTICS CENTER — AUTHORIZED PERSONNEL ONLY\"\n(Everyone is authorized. There's like three employees.)\n",
      "examine": "THE LAPTOP:\nMacBook Air, 2019. Stickers on the lid.\nCurrently showing:\n- Gmail (3 unread)\n- Spreadsheet: \"Inventory Tracker 2026\"\n- Browser tab: USPS tracking\n- Slack: #logistics (2 members)\n\nTHE WALL CALENDAR:\nJanuary 2026. Dates circled:\n- 15th: \"Ship bumper sticker order\"\n- 22nd: \"T-shirt restock?\"\n- 28th: \"SIGN MAINTENANCE\" (in red)\n\nTHE CLIPBOARDS:\n1. Shipping log (current month)\n2. Inventory checklist\n3. \"THINGS TO FIX\" (long list)\n\nTHE PRINTER:\nInkjet. HP something.\nLow on cyan. Always low on cyan.\nUsed for shipping labels, manifestos, the occasional flyer.\n\nTHE MAIL BINS:\nINCOMING | OUTGOING | RETURNS\n(Returns bin is empty. \"Our products don't get returned.\")\n\nTHE CENTRAL DISPLAY:\nThere is no central display.\nThere's a sticky note with important numbers:\n\n    USPS: 1-800-ASK-USPS\n    UPS:  1-800-PICK-UPS\n    Sign Guy: Steve 555-0147\n    Pizza: Mario's 555-PIZZA\n    \n",
      "philosophy": "Leela has SYSTEMS.\nNO AI Tower has CLIPBOARD.\n\nBoth work. Leela scales to millions.\nNO AI Tower scales to... dozens?\n\nBut here's the thing:\nThe logistics CENTER is underground.\nThe DEPARTMENTS are the products.\nThis closet just ships the artifacts.\n\nThe real logistics is in the elevator.\n",
      "_source": "street/lane-neverending/no-ai-tower/logistics/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks": {
      "name": "Leela Loading Docks",
      "type": "room",
      "emoji": "🚛👁️📦",
      "lighting": "industrial",
      "atmosphere": "busy",
      "leela_cameras": [
        "camera-doc1.yml",
        {
          "name": "forklift-safety",
          "purpose": "Pedestrian detection in forklift zones"
        },
        {
          "name": "package-tracking",
          "purpose": "Every box annotated with destination"
        },
        {
          "name": "ergonomics",
          "purpose": "Worker posture and PPE compliance monitoring"
        }
      ],
      "anti_acme": "ACME couldn't track a falling anvil.\nLeela tracks everything. Safely. Helpfully.\n\nUnlike ACME's \"ship and pray\" approach,\nevery package here is annotated, every forklift\nis tracked, every worker is protected.\n",
      "skills": [
        "logistic-container",
        "manufacturing-intelligence",
        "leela-ai"
      ],
      "description": "The LOADING DOCKS wrap around the back of Leela Manufacturing.\nEight bays — four in, four out — each with a truck-sized door,\ndock levelers, and the constant activity of logistics in motion.\n\n┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n│ B1  │ B2  │ B3  │ B4  │ B5  │ B6  │ B7  │ B8  │\n│ IN  │ IN  │ IN  │ IN  │ OUT │ OUT │ OUT │ OUT │\n└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n\nForklifts beep. Pallets stack. Workers in safety vests\ncoordinate the flow of knowledge in and out of the building.\n\nA truck is currently backing into Bay 2, loaded with\n\"BULK QUESTIONS — HANDLE WITH CURIOSITY.\"\n",
      "examine": "LOADING DOCKS — BACK OF BUILDING\n\nTHE BAYS (4 IN, 4 OUT):\nBay 1 (INBOUND): Currently unloading raw data shipment\nBay 2 (INBOUND): Truck backing in with bulk questions\nBay 3 (INBOUND): Empty, awaiting confusion tanker\nBay 4 (INBOUND): Reserved for paradox-safe deliveries\nBay 5 (OUTBOUND): Insight Express #1 loading\nBay 6 (OUTBOUND): Bulk wisdom shipment staging\nBay 7 (OUTBOUND): Reserved for premium/rush orders\nBay 8 (OUTBOUND): Pigeon post & small parcel dispatch\n\nDOCK OFFICE:\nA small windowed office overlooking the bays.\nDispatch coordinator with clipboard, headset, coffee.\nSchedules on the wall. Radio chatter constant.\nSign: \"IF IT MOVES, LOG IT\"\n\nEQUIPMENT AREA:\n• Forklifts (3, electric)\n• Pallet jacks (many)\n• Shrink wrap station\n• Scale (for weighing knowledge — heavier = more valuable?)\n• First aid station (forklifts are unforgiving)\n\nTHE BREAK ROOM:\nA small room off to the side for dock workers.\nVending machines. Microwave. Table with yesterday's newspaper.\nA sign: \"HONK FOR SERVICE\" (truckers can honk from the yard)\n\nSAFETY NOTICES:\n• \"HARD HATS REQUIRED BEYOND THIS POINT\"\n• \"FORKLIFTS HAVE RIGHT OF WAY\"\n• \"MIND THE GAP\" (painted on every dock edge)\n• \"NO PARADOXES ACCEPTED AT DOCK LEVEL\"\n",
      "current_activity": {
        "bay_1": "Unloading raw data from Data Hauler Prime",
        "bay_2": "Bulk questions arriving, inspection in progress",
        "bay_3": "Empty — confusion tanker ETA 15 minutes",
        "bay_4": "Paradox delivery (sealed, don't peek)",
        "bay_5": "Insight Express #1 — 50% loaded",
        "bay_6": "Bulk wisdom pallets stacking",
        "bay_7": "Premium order staging",
        "bay_8": "Pigeon crates ready for flight"
      },
      "exits": {
        "inside": {
          "to": "street/lane-neverending/leela-manufacturing/floor-1",
          "description": "Door to Floor 1 — Intake (for incoming shipments)",
          "aliases": [
            1,
            "intake",
            "in"
          ],
          "description_message": "Door to Floor 1 — Intake (for incoming shipments)"
        },
        "shipping": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Door to Floor 3 — Shipping (for outgoing shipments)",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Door to Floor 3 — Shipping (for outgoing shipments)"
        },
        "yard": {
          "to": "street/lane-neverending/leela-manufacturing/logistics",
          "description": "Out to the Logistics Yard — truck parking, rail siding",
          "aliases": [
            "logistics",
            "trucks",
            "rail",
            "outside"
          ],
          "description_message": "Out to the Logistics Yard — truck parking, rail siding"
        },
        "street": {
          "to": "street/lane-neverending/center",
          "description": "Around the building to Lane Neverending",
          "aliases": [
            "lane",
            "street",
            "front"
          ],
          "description_message": "Around the building to Lane Neverending"
        }
      },
      "logistics_bays": {
        "bay_1": {
          "chest_mode": "buffer",
          "emoji": "📦🟢",
          "receives": [
            {
              "tags": [
                "raw-data",
                "bulk"
              ]
            }
          ],
          "buffer_for": {
            "to": "../floor-1/",
            "when": "intake.ready"
          }
        },
        "bay_2": {
          "chest_mode": "buffer",
          "emoji": "📦🟢",
          "receives": [
            {
              "tags": [
                "questions",
                "problems"
              ]
            }
          ],
          "buffer_for": {
            "to": "../floor-1/",
            "when": "sorting.available"
          }
        },
        "bay_3": {
          "chest_mode": "requester",
          "emoji": "📦🔵",
          "request_list": [
            {
              "tags": [
                "confusion"
              ],
              "count": "unlimited",
              "note": "Confusion tankers always welcome"
            }
          ]
        },
        "bay_4": {
          "chest_mode": "buffer",
          "emoji": "📦🟢",
          "receives": [
            {
              "tags": [
                "paradox",
                "hazardous",
                "sealed"
              ]
            }
          ],
          "buffer_for": {
            "to": "../basement/",
            "when": "containment.ready"
          },
          "notes": "Paradox-safe deliveries route to R&D basement"
        },
        "bay_5": {
          "chest_mode": "active-provider",
          "emoji": "📦🔴",
          "push_to": [
            {
              "match": {
                "tags": [
                  "insight",
                  "knowledge"
                ]
              },
              "to": "logistics/truck-yard/"
            },
            {
              "match": {
                "tags": [
                  "express"
                ]
              },
              "to": "logistics/drone-pad/"
            }
          ]
        },
        "bay_6": {
          "chest_mode": "active-provider",
          "emoji": "📦🔴",
          "push_to": [
            {
              "match": {
                "tags": [
                  "wisdom",
                  "bulk"
                ]
              },
              "to": "logistics/rail-siding/"
            },
            {
              "default": "logistics/truck-yard/"
            }
          ]
        },
        "bay_7": {
          "chest_mode": "active-provider",
          "emoji": "📦🔴",
          "push_to": [
            {
              "match": {
                "tags": [
                  "premium",
                  "rush"
                ]
              },
              "to": "logistics/drone-pad/"
            },
            {
              "match": {
                "tags": [
                  "courier"
                ]
              },
              "to": "logistics/truck-yard/"
            }
          ]
        },
        "bay_8": {
          "chest_mode": "active-provider",
          "emoji": "📦🔴",
          "push_to": [
            {
              "match": {
                "tags": [
                  "small",
                  "letter",
                  "pigeon"
                ]
              },
              "to": "../mail-room/"
            },
            {
              "match": {
                "tags": [
                  "parcel"
                ]
              },
              "to": "logistics/truck-yard/"
            }
          ]
        }
      },
      "signals": {
        "emit": [
          {
            "signal": "bay-1-status",
            "value": "bay_1.fullness"
          },
          {
            "signal": "bay-2-status",
            "value": "bay_2.fullness"
          },
          {
            "signal": "bay-3-status",
            "value": "bay_3.fullness"
          },
          {
            "signal": "bay-4-status",
            "value": "bay_4.fullness"
          },
          {
            "signal": "inbound-capacity",
            "value": "(bay_1.capacity + bay_2.capacity + bay_3.capacity + bay_4.capacity) - (bay_1.items + bay_2.items + bay_3.items + bay_4.items)"
          },
          {
            "signal": "outbound-ready",
            "value": "bay_5.items > 0 OR bay_6.items > 0 OR bay_7.items > 0 OR bay_8.items > 0"
          }
        ]
      },
      "objects": [
        "dock-office.yml",
        "forklift-bay.yml",
        "drone-station.yml",
        "carriage-house.yml",
        "current-trucks.yml",
        "camera-doc1.yml"
      ],
      "inserters": {
        "bay_to_intake": {
          "type": "stack-inserter",
          "stack_size": 50,
          "input": {
            "source": "bay_1",
            "filter": {
              "tags": [
                "ready"
              ]
            }
          },
          "output": {
            "to": "../floor-1/#sorting-line"
          }
        },
        "shipping_to_bay": {
          "type": "long-arm-inserter",
          "range": 2,
          "input": {
            "source": "../floor-3/#outbound"
          },
          "output": {
            "to": "bay_4"
          }
        }
      },
      "id": "street/lane-neverending/leela-manufacturing/loading-docks",
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/mail-room": {
      "name": "Leela Mail Room",
      "type": "room",
      "lighting": "bright",
      "atmosphere": "organized_chaos",
      "skills": [
        "postal",
        "logistic-container"
      ],
      "description": "The MAIL ROOM is the communications hub of Leela Manufacturing.\nEvery letter, text, package, and insight passes through here.\n\nRows of sorting bins line the walls. Pneumatic tubes terminate\nin a central hub, capsules arriving with satisfying *thwoop* sounds.\nA bank of phones handles the text message traffic. Pigeons coo\nin cages near the window, awaiting long-distance assignments.\n\nThe walls are covered with:\n\n┌─────────────────────────────────────────────────────────────┐\n│                    LEELA MAIL ROOM                          │\n│                    ════════════════                          │\n│                                                             │\n│  \"Neither rain nor snow nor paradox nor existential crisis │\n│   shall stay these couriers from their appointed rounds.\"   │\n│                                                             │\n│  SERVICES:                                                  │\n│  ─────────                                                  │\n│  📧 Letters ......... Standard (3 turns), Express (1 turn) │\n│  📱 Texts ........... Instant                               │\n│  📦 Packages ........ Freight (10 turns), Courier (2 turns)│\n│  🐦 Pigeon Post ..... Traditional (whenever they feel like) │\n│  📬 Internal ........ Postal transfer (instant, free!)     │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "examine": "MAIL ROOM — COMMUNICATIONS HUB\n\nTHE SORTING AREA:\nMassive wall of cubbyholes, each labeled:\n• By floor (1, 2, 3, Basement, Rooftop)\n• By department (Intake, Processing, Shipping, R&D)\n• By external destination (Lane Neverending, Pub, Origin Plaza...)\n• SPECIAL: \"CLASSIFIED\" (locked), \"PARADOX\" (don't look inside)\n\nTHE PNEUMATIC TERMINAL:\nEight tubes converge here from across the facility.\nCapsules arrive constantly with *thwoop* sounds.\nA display shows tube status and queue depth.\n\nTHE PHONE BANK:\nRows of phones for text message operations.\nScreens showing message queues, delivery confirmations.\nOne phone is labeled \"HOT LINE TO THE PUB\" (red, always ready).\n\nTHE PIGEON LOFT (Interior):\n24 enlightened pigeons in comfortable cages.\nEach has a name tag. They coo thoughtfully.\nA schedule board shows who's available for assignments.\nFeed and water dispensers. Tiny beds.\n\nTHE PACKAGE STAGING AREA:\nTables for wrapping, labeling, and staging outgoing items.\nScales for calculating freight costs.\nBubble wrap (irresistibly poppable).\n\nSTAFF:\n• Postmaster General \"Stamp\" (runs the operation)\n• Sorting Sprites (fast, accurate, slightly caffeinated)\n• Phone Operators (cheerful, efficient)\n• Pigeon Whisperer (speaks their language)\n",
      "postal_integration": {
        "endpoint_type": "room",
        "address": "leela-manufacturing/mail-room/",
        "hub": {
          "internal_transit": "instant",
          "free_within_facility": true
        },
        "mailboxes": {
          "general_inbox": {
            "type": "inbox",
            "accepts": [
              "letter",
              "text",
              "package"
            ],
            "processing": "automatic",
            "routes_to": "sorting_bins"
          },
          "general_outbox": {
            "type": "outbox",
            "chest_mode": "active-provider",
            "push_to": [
              {
                "match": {
                  "destination_type": "internal"
                },
                "method": "postal",
                "time": 0,
                "cost": 0
              },
              {
                "match": {
                  "destination_type": "lane-neverending"
                },
                "method": "drone",
                "time": 1
              },
              {
                "match": {
                  "destination_type": "external"
                },
                "method": "letter",
                "time": 3
              }
            ]
          },
          "express_outbox": {
            "type": "outbox",
            "priority": "high",
            "methods_available": [
              "express",
              "courier",
              "drone"
            ]
          },
          "freight_staging": {
            "type": "buffer",
            "chest_mode": "buffer",
            "for_items": [
              "heavy",
              "bulk",
              "oversized"
            ],
            "routes_to": "../logistics/"
          }
        },
        "methods": {
          "text": {
            "available": true,
            "time": 0,
            "cost": 0,
            "note": "Instant via phone network"
          },
          "letter": {
            "available": true,
            "time": 3,
            "cost": 1,
            "note": "Standard mail"
          },
          "express": {
            "available": true,
            "time": 1,
            "cost": 5,
            "note": "Priority handling",
            "tracking": true
          },
          "courier": {
            "available": true,
            "time": 2,
            "cost": 10,
            "note": "Hand-delivered, guaranteed"
          },
          "freight": {
            "available": true,
            "time": 10,
            "cost_per_kg": 0.5,
            "note": "For heavy items, routes via logistics"
          },
          "pigeon": {
            "available": true,
            "time": "whenever",
            "cost": "seed",
            "note": "Traditional. Thoughtful. Unreliable timing."
          },
          "postal_transfer": {
            "available": true,
            "time": 0,
            "cost": 0,
            "note": "Internal logistics — instant and free",
            "internal_only": true
          }
        },
        "logistics_integration": {
          "receives_from": [
            "../loading-docks/",
            "../floor-3/"
          ],
          "sends_to": [
            "../logistics/",
            "../floor-1/"
          ]
        }
      },
      "pneumatic_tubes": {
        "hub": true,
        "connections": [
          {
            "tube": 1,
            "to": "../floor-1/",
            "label": "INTAKE"
          },
          {
            "tube": 2,
            "to": "../floor-2/",
            "label": "PROCESSING"
          },
          {
            "tube": 3,
            "to": "../floor-3/",
            "label": "SHIPPING"
          },
          {
            "tube": 4,
            "to": "../basement/",
            "label": "R&D (STAND CLEAR)"
          },
          {
            "tube": 5,
            "to": "../rooftop/",
            "label": "GARDEN"
          },
          {
            "tube": 6,
            "to": "../",
            "label": "RECEPTION"
          },
          {
            "tube": 7,
            "to": "../../../../pub/",
            "label": "THE PUB (URGENT)"
          },
          {
            "tube": 8,
            "to": "EMERGENCY",
            "label": "BREAK GLASS"
          }
        ]
      },
      "phone_services": {
        "text_messaging": {
          "instant": true,
          "queue_display": true
        },
        "notifications": {
          "types": [
            "mail_received",
            "text_received",
            "package_arrived",
            "delivery_confirmed",
            "quest_update"
          ]
        },
        "hot_lines": [
          {
            "name": "THE PUB",
            "number": "7",
            "color": "red",
            "note": "For urgent orders and gossip"
          },
          {
            "name": "ORIGIN PLAZA",
            "number": "1",
            "note": "Ceremonial communications"
          },
          {
            "name": "CONSTRUCTION SITE",
            "number": "22",
            "note": "Building coordination"
          }
        ]
      },
      "actions": {
        "CHECK_MAIL": {
          "description": "See what's arrived",
          "effect": "Display inbox contents"
        },
        "SEND_LETTER": {
          "description": "Compose and send a letter",
          "parameters": [
            "to",
            "subject",
            "body",
            "attachments"
          ],
          "effect": "Queue for delivery"
        },
        "SEND_TEXT": {
          "description": "Send instant message",
          "parameters": [
            "to",
            "message"
          ],
          "effect": "Delivered immediately"
        },
        "SEND_PACKAGE": {
          "description": "Ship physical items",
          "parameters": [
            "to",
            "contents",
            "method"
          ],
          "effect": "Queue for logistics"
        },
        "CHECK_TRACKING": {
          "description": "Track a shipment",
          "parameters": [
            "tracking_number"
          ],
          "effect": "Show delivery status"
        },
        "DISPATCH_PIGEON": {
          "description": "Send via traditional post",
          "parameters": [
            "to",
            "message",
            "pigeon_name"
          ],
          "effect": "Pigeon departs (eventually)"
        }
      },
      "exits": {
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Back to the main lobby",
          "aliases": [
            "out",
            "lobby"
          ],
          "description_message": "Back to the main lobby"
        },
        "shipping": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Direct access to Shipping Department",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Direct access to Shipping Department"
        },
        "logistics": {
          "to": "street/lane-neverending/leela-manufacturing/logistics",
          "description": "To the Logistics Yard (for freight)",
          "aliases": [
            "freight",
            "yard"
          ],
          "description_message": "To the Logistics Yard (for freight)"
        }
      },
      "objects": [
        "sorting-bins.yml",
        "pneumatic-terminal.yml",
        "phone-bank.yml",
        "pigeon-cages.yml",
        "package-station.yml"
      ],
      "staff": {
        "postmaster": {
          "name": "Stamp",
          "title": "Postmaster General",
          "personality": "Precise, punctual, passionate about delivery",
          "catchphrase": "Neither rain nor snow..."
        }
      },
      "ambience": "*thwoop* — a capsule arrives.\nPhones chirp softly. Pigeons coo.\nThe sorting sprites work in efficient silence.\nSomewhere, a package is being wrapped with excessive bubble wrap.\n\nThe mail never stops. The mail never sleeps.\nThe mail is eternal.\n",
      "id": "street/lane-neverending/leela-manufacturing/mail-room",
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/basement": {
      "name": "Leela Basement — R&D Laboratory",
      "type": "room",
      "lighting": "dim_with_occasional_flashes",
      "atmosphere": "mysterious",
      "description": "The R&D LABORATORY occupies the entire basement. The lighting is\nintentionally dim — some experiments prefer it that way. Occasional\nflashes illuminate bubbling beakers, sparking equipment, and\nresearchers in goggles hunched over incomprehensible apparatus.\n\nA sign at the entrance:\n\n┌─────────────────────────────────────────────────────┐\n│  R&D LABORATORY                                     │\n│  ═══════════════                                    │\n│  \"What if we tried...?\"                             │\n│                                                     │\n│  CURRENT EXPERIMENTS:                               │\n│  • Wisdom synthesis (ongoing, decade 3)             │\n│  • Insight recycling (promising results)            │\n│  • Paradox processing (DO NOT ENTER ZONE 7)         │\n│  • [REDACTED] (ask Dr. Unknown)                     │\n└─────────────────────────────────────────────────────┘\n",
      "examine": "R&D LABORATORY — BASEMENT\n\nTHE LAYOUT:\nThe basement is divided into zones, each more experimental\nthan the last:\n\nZone 1: Controlled experiments (relatively safe)\nZone 2: Uncontrolled experiments (wear goggles)\nZone 3: Theoretical work (whiteboards only)\nZone 4: Applied madness (sign waiver first)\nZone 5: The Archive (historical knowledge storage)\nZone 6: Cold storage (temperature-sensitive insights)\nZone 7: [SEALED] (we don't talk about Zone 7)\n\nWAREHOUSE 23: (heavy security door, keycard required)\nLong-term storage for dangerous artifacts. Impossibly large.\n\"Top men are working on it.\"\n\nTHE RESEARCHERS:\n• Mad Scientists (3, varying degrees of madness)\n• Reasonable Scientists (5, keeping things grounded)\n• One Unreasonable Scientist (title: \"Dr. Why Not\")\n• Graduate students (infinite, replaceable)\n• One Very Old Turtle (wisdom consultant, Zone 5)\n\nEQUIPMENT:\n• Bubbling things\n• Sparking things\n• Things that hum ominously\n• One thing that's perfectly silent (most concerning)\n• A chalkboard covered in equations that hurt to look at\n\nTHE FORBIDDEN SHELF:\nA locked cabinet containing experiments deemed \"too successful.\"\nLabel: \"IN CASE OF EMERGENCY, DO NOT OPEN. ESPECIALLY THEN.\"\n",
      "warnings": [
        "Do not feed the hypotheses",
        "Protective eyewear required beyond Zone 1",
        "If you hear your name from Zone 7, ignore it",
        "Coffee in designated areas only (reactions possible)"
      ],
      "current_projects": {
        "wisdom_synthesis": {
          "status": "Ongoing (30+ years)",
          "progress": "We've made better questions",
          "lead": "Dr. Patient"
        },
        "insight_recycling": {
          "status": "Promising",
          "progress": "Used insights can be 87% recovered",
          "lead": "Dr. Sustainable"
        },
        "paradox_processing": {
          "status": "EXTREME CAUTION",
          "progress": "We understand the problem. The problem understands us back.",
          "lead": "Dr. Unknown (identity classified)",
          "location": "Zone 7 (sealed)"
        }
      },
      "exits": {
        "up": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Stairs up to the lobby",
          "aliases": [
            "lobby",
            "out",
            "escape"
          ],
          "description_message": "Stairs up to the lobby"
        },
        "archive": {
          "to": "street/lane-neverending/leela-manufacturing/basement/archive",
          "description": "Zone 5 — The Archive",
          "aliases": [
            5,
            "library",
            "old"
          ],
          "description_message": "Zone 5 — The Archive"
        },
        "cold": {
          "to": "street/lane-neverending/leela-manufacturing/basement/cold-storage",
          "description": "Zone 6 — Cold Storage",
          "aliases": [
            6,
            "cold",
            "storage"
          ],
          "description_message": "Zone 6 — Cold Storage"
        },
        "warehouse": {
          "to": "street/lane-neverending/leela-manufacturing/warehouse-23",
          "description": "A heavy security door marked \"WAREHOUSE 23 — AUTHORIZED PERSONNEL ONLY.\"\nKeycard reader. Biometric scanner. A third lock that checks something\nineffable about your soul.\n\nThrough the small window, you can see endless rows of crates\nstretching into impossible distance.\n",
          "aliases": [
            23,
            "artifacts",
            "storage",
            "crates"
          ],
          "clearance_required": true,
          "description_message": "A heavy security door marked \"WAREHOUSE 23 — AUTHORIZED PERSONNEL ONLY.\"\nKeycard reader. Biometric scanner. A third lock that checks something\nineffable about your soul.\n\nThrough the small window, you can see endless rows of crates\nstretching into impossible distance.\n"
        }
      },
      "objects": [
        "forbidden-shelf.yml",
        "experimental-equipment.yml",
        "zone-7-door.yml",
        "camera-base1.yml"
      ],
      "id": "street/lane-neverending/leela-manufacturing/basement",
      "_source": "street/lane-neverending/leela-manufacturing/basement/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/lobby": {
      "name": "Leela Manufacturing Lobby",
      "type": "room",
      "description": "The LOBBY of Leela Manufacturing is clean, professional, and\nquietly impressive. The Leela logo glows softly on the wall\nbehind the reception desk. A directory board lists all floors.\n\nVisitors arrive seeking knowledge. They leave with insights.\n(Or sometimes, more questions than they started with.)\n",
      "examine": "LEELA MANUFACTURING — LOBBY\n\nRECEPTION DESK:\nA curved desk of polished wood and brushed steel.\nThe receptionist smiles warmly. \"How can we help you today?\"\nBehind them: the Leela logo, glowing gentle gold.\n\nDIRECTORY BOARD:\n┌────────────────────────────────────────┐\n│  LEELA MANUFACTURING INTELLIGENCE      │\n│  ═════════════════════════════════     │\n│                                        │\n│  🌿 Rooftop ........ Garden & Drones   │\n│  3  Shipping ....... Outbound          │\n│  2  Factory ........ The Furnace       │\n│  1  Intake ......... Conveyors         │\n│  G  Lobby .......... You Are Here      │\n│  B  Basement ....... R&D (Restricted)  │\n│                                        │\n│  External:                             │\n│  🚛 Loading Docks    📦 Storage         │\n│  📮 Mail Room       🏛️ Warehouse 23     │\n└────────────────────────────────────────┘\n\nELEVATOR:\nBrass doors with art deco styling. The indicator\nshows the current floor. A soft chime when it arrives.\n\nWAITING AREA:\nComfortable chairs. A coffee table with magazines\n(all about manufacturing, knowledge, and tortoises).\nA small fountain burbles peacefully.\n\nCATALOG KIOSK:\nA polished wooden dispenser with free catalogs.\nTake one, browse here, order at reception.\nMuch nicer than waiting outside at ACME's rusted dispenser.\n\nWINDOWS:\nLarge windows look out onto Lane Neverending.\nThe pub is visible to the east. Lamp posts glow.\n",
      "exits": {
        "street": {
          "to": "street/lane-neverending/w1",
          "description": "Exit to Lane Neverending",
          "aliases": [
            "out",
            "outside",
            "lane"
          ],
          "description_message": "Exit to Lane Neverending"
        },
        "rooftop": {
          "to": "street/lane-neverending/leela-manufacturing/rooftop",
          "description": "Elevator to Rooftop Garden & Drones",
          "aliases": [
            "roof",
            "garden",
            "up"
          ],
          "description_message": "Elevator to Rooftop Garden & Drones"
        },
        "floor_3": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Elevator to Floor 3 (Shipping)",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Elevator to Floor 3 (Shipping)"
        },
        "floor_2": {
          "to": "street/lane-neverending/leela-manufacturing/floor-2",
          "description": "Elevator to Floor 2 (Factory)",
          "aliases": [
            2,
            "processing",
            "factory"
          ],
          "description_message": "Elevator to Floor 2 (Factory)"
        },
        "floor_1": {
          "to": "street/lane-neverending/leela-manufacturing/floor-1",
          "description": "Elevator to Floor 1 (Intake)",
          "aliases": [
            1,
            "intake"
          ],
          "description_message": "Elevator to Floor 1 (Intake)"
        },
        "basement": {
          "to": "street/lane-neverending/leela-manufacturing/basement",
          "description": "Elevator to Basement (R&D)",
          "aliases": [
            "down",
            "rd",
            "research"
          ],
          "clearance_required": true,
          "description_message": "Elevator to Basement (R&D)"
        },
        "loading": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Door to Loading Docks",
          "aliases": [
            "docks",
            "trucks"
          ],
          "description_message": "Door to Loading Docks"
        },
        "storage": {
          "to": "street/lane-neverending/leela-manufacturing/storage",
          "description": "Door to Storage Complex",
          "aliases": [
            "warehouse",
            "prototypes"
          ],
          "description_message": "Door to Storage Complex"
        },
        "logistics": {
          "to": "street/lane-neverending/leela-manufacturing/logistics",
          "description": "Door to Logistics Center",
          "aliases": [
            "control",
            "nerve"
          ],
          "description_message": "Door to Logistics Center"
        },
        "mail": {
          "to": "street/lane-neverending/leela-manufacturing/mail-room",
          "description": "Door to Mail Room",
          "aliases": [
            "mail",
            "post",
            "postal"
          ],
          "description_message": "Door to Mail Room"
        }
      },
      "objects": [
        "camera-lob1.yml",
        "leela-catalog.yml",
        "leela-catalog-dispenser.yml"
      ],
      "staff": {
        "receptionist": {
          "name": "Alex",
          "role": "Reception",
          "demeanor": "Warm, helpful, knows everything"
        }
      },
      "ambience": {
        "sounds": [
          "Soft fountain burbling",
          "Elevator chimes",
          "Quiet footsteps on marble"
        ],
        "visual": [
          "Leela logo glowing gold",
          "Sunlight through windows",
          "Directory board updating occasionally"
        ]
      },
      "id": "street/lane-neverending/leela-manufacturing/lobby",
      "_source": "street/lane-neverending/leela-manufacturing/lobby/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/floor-3": {
      "name": "Leela Floor 3 — Shipping Department",
      "type": "room",
      "description": "The SHIPPING DEPARTMENT is a hive of activity. Finished insights\narrive from the Factory Floor below and get packaged, labeled,\nand dispatched to customers across... everywhere.\n\nPneumatic tubes whoosh. Drones launch from the roof access. \nThe occasional enlightened pigeon flutters past with a message\ntied to its leg.\n\nA departure board shows outgoing shipments:\n\n┌─────────────────────────────────────────────────────┐\n│  OUTGOING SHIPMENTS                                 │\n│  ═══════════════════                                │\n│  14:23 — Insight Bundle #4471 — The Gezelligheid Grotto   │\n│  14:25 — Knowledge Crate K-99 — Construction Site   │\n│  14:30 — Wisdom (Premium) — Origin Plaza            │\n│  14:47 — Bulk Questions — RETURN TO INTAKE          │\n│  15:00 — [CLASSIFIED] — [CLASSIFIED]                │\n└─────────────────────────────────────────────────────┘\n",
      "examine": "SHIPPING DEPARTMENT — FLOOR 3\n\nPACKAGING STATIONS:\nWorkers carefully wrap insights for transport:\n• Standard packaging (cardboard, labels)\n• Fragile packaging (foam, \"HANDLE WITH CARE\")\n• Premium packaging (velvet-lined boxes)\n• Bulk packaging (shrink-wrapped pallets)\n\nDOCUMENTATION CENTER:\nEvery insight ships with proper paperwork:\n• What it is\n• How to use it\n• What NOT to do with it\n• Warranty information (insights are non-refundable)\n\nTHE EXPLAINERS:\nA team dedicated to making insights understandable.\nThey translate \"raw insight\" into \"actionable knowledge.\"\nTheir motto: \"If you can't explain it, it's not done.\"\n\nDISPATCH OPTIONS:\n• Pneumatic tube (local, fast)\n• Drone (medium range)\n• Truck (bulk orders)\n• Rail (cross-world)\n• Pigeon (traditional)\n• \"Walk-in pickup\" (customers can collect)\n\nRETURNS DESK:\nFor insights that didn't quite work out.\nSign: \"WE DON'T DO REFUNDS. WE DO BETTER QUESTIONS.\"\n",
      "workers": [
        "Packaging Specialists",
        "Documentation Writers (The Explainers)",
        "Dispatch Coordinators",
        "Returns Specialist (very patient person)"
      ],
      "exits": {
        "down": {
          "to": "street/lane-neverending/leela-manufacturing/floor-2",
          "description": "Down to Floor 2 — Factory",
          "aliases": [
            2,
            "factory"
          ],
          "description_message": "Down to Floor 2 — Factory"
        },
        "up": {
          "to": "street/lane-neverending/leela-manufacturing/rooftop",
          "description": "Up to the Rooftop Garden (and drone pads)",
          "aliases": [
            "roof",
            "garden",
            "drones"
          ],
          "description_message": "Up to the Rooftop Garden (and drone pads)"
        },
        "loading": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Direct access to loading docks (for outgoing shipments)",
          "aliases": [
            "docks",
            "trucks"
          ],
          "description_message": "Direct access to loading docks (for outgoing shipments)"
        },
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Elevator to the lobby",
          "aliases": [
            "elevator",
            "out"
          ],
          "description_message": "Elevator to the lobby"
        }
      },
      "objects": [
        "departure-board.yml",
        "packaging-stations.yml",
        "pneumatic-hub.yml",
        "camera-shp1.yml"
      ],
      "id": "street/lane-neverending/leela-manufacturing/floor-3",
      "_source": "street/lane-neverending/leela-manufacturing/floor-3/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/floor-2": {
      "name": "Leela Floor 2 — Factory Floor",
      "type": "room",
      "emoji": "⚙️👁️🔮",
      "what_this_represents": "In reality, Leela deploys vision systems to CUSTOMER factories.\nThis floor represents what a Leela-enabled factory looks like:\n- Cameras on every station (object detection, pose estimation)\n- Overlays annotating everything (worker safety, equipment status)\n- The Big Board showing insights (not just data — MEANING)\n- Zero surprises (because we saw them coming)\n",
      "description": "Floor 2: WHERE SEEING HAPPENS.\n\nThis is the heart of what Leela does — computer vision in action.\nEvery surface bristles with cameras. Every screen shows annotated\nfeeds. Workers move through glowing overlays that track, predict,\nand protect.\n\nUnlike ACME's \"ship and pray\" approach, here everything is WATCHED.\nNot surveillance — ASSISTANCE. The cameras don't judge. They HELP.\n\nA worker reaches for a heavy box. Overlay: \"Ergonomic warning: lift\nwith legs, bend detected at 47°.\" A forklift approaches a blind corner.\nAlert: \"Pedestrian detected — slowing.\" A machine vibrates wrong.\nPrediction: \"Bearing failure in 72 hours — schedule maintenance.\"\n\nIn the center of the floor: THE INSIGHT FURNACE, where raw camera\nfeeds transform into causal understanding. Neural perception goes in.\nSymbolic reasoning comes out. What happens inside is the Schema\nMechanism — Drescher's gift, Minsky's dream.\n\nA banner above the Furnace reads:\n\n\"We don't make products. We make SIGHT.\"\n",
      "examine": "FACTORY FLOOR — WHERE SEEING HAPPENS\n\nTHE CAMERA ARRAY:\nForty-seven cameras, each running Leela vision:\n• Ceiling cameras (overview, flow tracking)\n• Station cameras (pose estimation, ergonomics)\n• Equipment cameras (vibration, thermal, wear)\n• Safety cameras (PPE detection, zone violation)\nEvery feed annotated in real-time. Every anomaly flagged.\n\nTHE PROCESSING CELLS:\nEight glass-walled workspaces, each demonstrating a use case:\n• Cell A: Safety monitoring (PPE, ergonomics, pedestrian detection)\n• Cell B: Process optimization (cycle time, bottleneck detection)\n• Cell C: Predictive maintenance (vibration, thermal anomaly)\n• Cell D: Quality control (defect detection, measurement)\n• Cell E: Inventory tracking (object counting, location)\n• Cell F: Edge cases (the weird ones we're still learning)\n• Cell G: Customer simulations (mock-ups of client factories)\n• Cell H: Calibration lab (where we tune the models)\n\nTHE INSIGHT FURNACE:\nWhere neural perception becomes symbolic understanding:\n• Camera feeds enter (raw pixels, motion, depth)\n• Object detection identifies WHAT (workers, forklifts, packages)\n• Pose estimation shows HOW (body position, equipment state)\n• Context inference understands WHY (intent, process, anomaly)\n• Causal reasoning predicts NEXT (what will happen, what to do)\n\nA sign: \"NEURAL → SYMBOLIC → CAUSAL — The Schema Mechanism\"\n\nTHE BIG BOARD:\nNot dots — INSIGHTS:\n• \"Worker 7 approaching fatigue threshold (recommend break)\"\n• \"Forklift 3 battery at 15% (charging station available)\"\n• \"Machine 12 vibration anomaly (bearing failure in 72 hours)\"\n• \"Zone B throughput down 12% (bottleneck at Station 4)\"\n\nUnlike ACME's dashboard (all red, always lying), this one is TRUE.\n",
      "workers": [
        "Process Engineers (always at whiteboards)",
        "Knowledge Smiths (at the Furnace)",
        "Insight Wranglers (catching outputs)",
        "Quality Assurance (testing everything)"
      ],
      "equipment": [
        "The Insight Furnace",
        "Pattern Recognition Array",
        "The Big Board",
        "Whiteboards (87 of them)",
        "Coffee Machine Mk VII"
      ],
      "exits": {
        "down": {
          "to": "street/lane-neverending/leela-manufacturing/floor-1",
          "description": "Down to Floor 1 — Intake",
          "aliases": [
            1,
            "intake"
          ],
          "description_message": "Down to Floor 1 — Intake"
        },
        "up": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Up to Floor 3 — Shipping",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Up to Floor 3 — Shipping"
        },
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Elevator to the lobby",
          "aliases": [
            "elevator",
            "out"
          ],
          "description_message": "Elevator to the lobby"
        }
      },
      "objects": [
        "insight-furnace.yml",
        "processing-cells.yml",
        "big-board.yml",
        "camera-fac1.yml"
      ],
      "id": "street/lane-neverending/leela-manufacturing/floor-2",
      "_source": "street/lane-neverending/leela-manufacturing/floor-2/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/storage": {
      "name": "Leela Storage Complex",
      "type": "room",
      "lighting": "industrial",
      "atmosphere": "organized_rows",
      "skills": [
        "prototype",
        "container",
        "logistic-container"
      ],
      "description": "The STORAGE COMPLEX is a vast warehouse of floor-to-ceiling shelving.\n\nEvery container type used in Leela Manufacturing lives here as a\nPROTOTYPE — not instances to be used, but templates to be CLONED.\nNeed a crate? Clone one. Need a barrel? Clone one. The originals\nstay pristine, ready to spawn infinite copies.\n\nAisles are labeled:\n\n┌─────────────────────────────────────────────────────────────┐\n│                   STORAGE COMPLEX                           │\n│                   ═══════════════                           │\n│                                                             │\n│   AISLE A: Wooden Containers (crates, barrels, boxes)       │\n│   AISLE B: Metal Containers (bins, drums, lockers)          │\n│   AISLE C: Soft Containers (sacks, bags, pouches)           │\n│   AISLE D: Special Containers (paradox-safe, quantum)       │\n│   AISLE E: Display Containers (shelves, racks, hooks)       │\n│   AISLE L: Leela Logistics (Factorio-style, NOT ACME)       │\n│                                                             │\n│   🛗 DEEP STORAGE: Architectural Prefabs (freight elevator) │\n│      Shelters, Lairs, Towers, Domiciles, Experimental       │\n│                                                             │\n│   ⚠️ PROTOTYPES ONLY — DO NOT USE — CLONE FIRST ⚠️          │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n\nA forklift sits idle at the end of the main aisle.\n",
      "examine": "STORAGE COMPLEX — PROTOTYPE WAREHOUSE\n\nTHE CONCEPT:\nEvery container here is a prototype — a template for cloning.\nWhen you need a container, you CLONE it, creating a fresh instance.\nThe prototype remains untouched, ready to spawn more copies.\n\nThis is Self/JavaScript prototype inheritance made physical:\n- Prototypes are concrete objects (not abstract classes)\n- Instances clone from prototypes\n- Instances can override prototype properties\n- Delegation walks the prototype chain\n\nTHE INVENTORY:\nThousands of container types, organized by material and purpose.\nEach has a placard showing its properties and suggested uses.\n\nTHE FORKLIFT:\n\"Dolly\" — an automated forklift that can retrieve prototypes\nfrom high shelves. She's been doing this for 40 years and\nknows where everything is by memory.\n",
      "prototypes_index": {
        "description": "Master list of container prototypes",
        "location": "prototypes/"
      },
      "exits": {
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Back to the main lobby",
          "description_message": "Back to the main lobby"
        },
        "loading": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "To the loading docks",
          "description_message": "To the loading docks"
        },
        "logistics": {
          "to": "street/lane-neverending/leela-manufacturing/logistics",
          "description": "To the logistics yard",
          "description_message": "To the logistics yard"
        },
        "aisle_a": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-a",
          "description": "Wooden containers — crates, barrels, boxes",
          "aliases": [
            "a",
            "wood",
            "wooden"
          ],
          "description_message": "Wooden containers — crates, barrels, boxes"
        },
        "aisle_b": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-b",
          "description": "Metal containers — bins, drums, lockers",
          "aliases": [
            "b",
            "metal"
          ],
          "description_message": "Metal containers — bins, drums, lockers"
        },
        "aisle_c": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-c",
          "description": "Soft containers — sacks, bags, pouches",
          "aliases": [
            "c",
            "soft",
            "fabric"
          ],
          "description_message": "Soft containers — sacks, bags, pouches"
        },
        "aisle_d": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-d",
          "description": "Special containers — paradox-safe, quantum, dimensional",
          "aliases": [
            "d",
            "special",
            "weird"
          ],
          "description_message": "Special containers — paradox-safe, quantum, dimensional"
        },
        "aisle_e": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-e",
          "description": "Display containers — shelves, racks, hooks",
          "aliases": [
            "e",
            "display",
            "shelving"
          ],
          "description_message": "Display containers — shelves, racks, hooks"
        },
        "aisle_l": {
          "to": "street/lane-neverending/leela-manufacturing/storage/aisle-l",
          "description": "Leela Logistics — Factorio-style containers (NOT ACME!)",
          "aliases": [
            "l",
            "leela",
            "logistics",
            "factorio"
          ],
          "description_message": "Leela Logistics — Factorio-style containers (NOT ACME!)"
        },
        "deep_storage": {
          "to": "street/lane-neverending/leela-manufacturing/storage/deep-storage",
          "description": "Architectural Prefabs — buildings, lairs, towers, shelters",
          "aliases": [
            "deep",
            "architecture",
            "prefab",
            "buildings",
            "lairs"
          ],
          "access": "freight_elevator",
          "description_message": "Architectural Prefabs — buildings, lairs, towers, shelters"
        }
      },
      "objects": [
        "dolly-forklift.yml",
        "cloning-station.yml"
      ],
      "staff": {
        "warehouse_manager": {
          "name": "Proto",
          "title": "Prototype Curator",
          "personality": "Protective of originals, enthusiastic about cloning",
          "catchphrase": "Don't touch the original! Clone it!"
        }
      },
      "ambience": "The hum of climate control keeping containers pristine.\nOccasional beeps from Dolly the forklift.\nThe satisfying echo of your footsteps in the vast space.\n\nSomewhere, a container is being cloned. *pop*\n",
      "id": "street/lane-neverending/leela-manufacturing/storage",
      "_source": "street/lane-neverending/leela-manufacturing/storage/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/warehouse-23": {
      "name": "Warehouse 23",
      "type": "room",
      "lighting": "dim_industrial",
      "atmosphere": "vast_mysterious",
      "clearance_required": true,
      "skills": [
        "container",
        "logistic-container"
      ],
      "description": "You stand at the entrance of WAREHOUSE 23.\n\nIt stretches before you into darkness — row after row after row\nof identical wooden crates, stacked floor to ceiling on industrial\nshelving that disappears into shadow. The warehouse is impossibly\nlarge. Larger than the building should allow. Larger than makes\ngeometric sense.\n\nA single forklift sits idle near the entrance.\nA clipboard hangs from a nail. The top sheet reads:\n\n┌─────────────────────────────────────────────────────────────┐\n│           WAREHOUSE 23 — LONG-TERM SECURE STORAGE          │\n│           ═══════════════════════════════════════          │\n│                                                             │\n│   CLASSIFICATION: TOP SECRET                               │\n│   CONTENTS: Artifacts, Cursed Items, Dangerous Knowledge   │\n│   ACCESS: Authorized Personnel Only                        │\n│   RETRIEVAL: By Written Request (Form 27B-Stroke-6)        │\n│                                                             │\n│   \"We have top men working on it.\"                         │\n│   \"Who?\"                                                    │\n│   \"...Top. Men.\"                                            │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n\nSomewhere deep in the stacks, something glows faintly.\n",
      "examine": "WAREHOUSE 23 — ARTIFACT REPOSITORY\n\nTHE SCALE:\nThe warehouse extends farther than you can see. The ceiling is\nlost in shadow somewhere above the sodium lights. The aisles\nbetween shelving units are numbered, but the numbers don't seem\nto follow any logical sequence. Aisle 7 is between Aisles 42 and\nNegative Purple.\n\nTHE CRATES:\nThousands upon thousands of identical wooden crates, each stamped\nwith classification codes, dates, and warnings:\n\n• \"DO NOT OPEN\"\n• \"DO NOT OPEN UNTIL [DATE REDACTED]\"\n• \"DO NOT OPEN EVER\"\n• \"ESPECIALLY DO NOT OPEN\"\n• \"OPENING THIS CRATE VOIDS WARRANTY ON REALITY\"\n\nSome crates hum. Some glow. One is slightly colder than absolute\nzero, which shouldn't be possible. Another contains something that\nknocks back when you knock.\n\nTHE FILING SYSTEM:\nA card catalog near the entrance, wooden drawers stretching up\nbeyond sight. Each card contains:\n- Crate number\n- Contents (often just \"UNKNOWN\" or \"DO NOT INVESTIGATE\")\n- Date acquired\n- Clearance level\n- Special handling instructions\n\nNOTABLE SECTIONS:\n• Section A: Religious Artifacts (glowing subsection)\n• Section B: Cursed Objects (cold subsection)\n• Section C: Temporal Anomalies (subsection exists on Tuesdays only)\n• Section D: Memetic Hazards (don't read the labels)\n• Section E: \"Miscellaneous\" (largest section)\n• Section F: Empty (or is it?)\n• Section [REDACTED]: You don't have clearance for this\n\nTHE ATMOSPHERE:\nDust motes hang suspended in the air. Time moves differently here.\nYou've been standing at the entrance for either thirty seconds or\nthirty years, it's hard to tell. The warehouse remembers things\nthe world has forgotten.\n",
      "notable_crates": {
        "ark_of_the_covenant": {
          "location": "Aisle [CLASSIFIED], Row [CLASSIFIED], Crate [CLASSIFIED]",
          "contents": "Religious artifact. Gold. Winged figures on top.",
          "warnings": [
            "DO NOT OPEN",
            "DO NOT LOOK INSIDE",
            "FACE-MELTING HAZARD"
          ],
          "status": "In storage since 1936",
          "notes": "Top men are working on it."
        },
        "crystal_skull_collection": {
          "location": "Aisle 19, Row 57, Crates 1-13",
          "contents": "Crystal skulls of various provenance",
          "warnings": [
            "INTERDIMENSIONAL BEINGS MAY EMERGE",
            "DO NOT ALIGN"
          ],
          "status": "We don't talk about these"
        },
        "holy_grail": {
          "location": "Nice try",
          "contents": "You chose... poorly",
          "status": "Location classified. Or lost. Or never here."
        },
        "pandoras_box": {
          "location": "Aisle 1, Row 1, Crate 1",
          "contents": "All the evils of the world. Also hope.",
          "warnings": [
            "OPENED ONCE ALREADY",
            "HOPE STILL INSIDE (PLEASE DON'T)"
          ],
          "status": "Resealed. Mostly."
        },
        "monkeys_paw": {
          "location": "Aisle 666, Row 13, Crate 3",
          "contents": "Cursed wish-granting artifact",
          "warnings": [
            "WISHES GRANTED IRONICALLY",
            "TWO WISHES REMAINING"
          ],
          "notes": "Previous owners regretted everything"
        },
        "necronomicon": {
          "location": "Section D (Memetic Hazards)",
          "contents": "Book. Bound in suspicious leather.",
          "warnings": [
            "DO NOT READ ALOUD",
            "DO NOT READ SILENTLY",
            "DO NOT THINK ABOUT READING",
            "KLAATU BARADA... SOMETHING"
          ]
        },
        "one_ring": {
          "location": "Aisle ???, Row ???, Crate ???",
          "contents": "Gold ring. Plain. Inscription visible when heated.",
          "warnings": [
            "DO NOT WEAR",
            "DO NOT COVET",
            "DARK LORD MAY ATTEMPT RETRIEVAL"
          ],
          "status": "Location changes. Ring wants to be found."
        },
        "crate_of_holding": {
          "location": "Aisle ∞",
          "contents": "Other crates. Recursively.",
          "warnings": [
            "DO NOT PLACE INSIDE ANOTHER CRATE OF HOLDING",
            "MAXIMUM SAFE RECURSION DEPTH: 7"
          ]
        },
        "empty_crate": {
          "location": "Section F, Row 1, Crate 1",
          "contents": "Absolutely nothing. Verified empty.",
          "warnings": [
            "THE NOTHING IS THE POINT",
            "CRATE MUST REMAIN EMPTY",
            "IF CRATE CONTAINS SOMETHING, ALERT MANAGEMENT"
          ],
          "notes": "Last inspection found something. Crate was replaced."
        },
        "schrodingers_crate": {
          "location": "Aisle Q, Row Q, Crate Q",
          "contents": "Cat (alive AND dead)",
          "warnings": [
            "DO NOT OBSERVE",
            "OBSERVATION COLLAPSES WAVE FUNCTION"
          ],
          "status": "Contents unverified (intentionally)"
        },
        "the_original_warehouse_map": {
          "location": "Card catalog, Drawer 0",
          "contents": "Map of Warehouse 23",
          "warnings": [
            "MAP IS NOT THE TERRITORY",
            "TERRITORY CHANGES",
            "MAP MAY BE LYING"
          ],
          "notes": "Seven previous cartographers went mad"
        }
      },
      "exits": {
        "out": {
          "to": "street/lane-neverending/leela-manufacturing/basement",
          "description": "The heavy security door leads back to the R&D basement.\nYou feel a strange relief at leaving.\n",
          "aliases": [
            "exit",
            "door",
            "leave",
            "back",
            "basement"
          ],
          "description_message": "The heavy security door leads back to the R&D basement.\nYou feel a strange relief at leaving.\n"
        },
        "deeper": {
          "to": "street/lane-neverending/leela-manufacturing/warehouse-23/stacks",
          "description": "The aisles stretch into darkness. You could venture deeper,\nbut retrieval teams have been lost for weeks in there.\n",
          "aliases": [
            "stacks",
            "aisles",
            "in",
            "explore"
          ],
          "note": "Navigation becomes unreliable past Aisle 100",
          "description_message": "The aisles stretch into darkness. You could venture deeper,\nbut retrieval teams have been lost for weeks in there.\n"
        }
      },
      "objects": [
        "card-catalog.yml",
        "warehouse-forklift.yml",
        "retrieval-forms.yml",
        "emergency-kit.yml"
      ],
      "staff": {
        "warehouse_keeper": {
          "name": "The Archivist",
          "description": "An ancient figure in a dusty coat. Has worked here since\nthe warehouse opened. Possibly since before. Knows where\neverything is. Will not tell you.\n",
          "catchphrase": "That crate? We have top men working on it."
        }
      },
      "ambience": "The hum of sodium lights. The settling of old crates.\nDistant sounds that might be footsteps, or might be\nsomething shifting in its container.\n\nTime passes strangely here. Your watch has stopped.\nOr is running backwards. Hard to tell.\n\nSomewhere, something whispers. You're probably imagining it.\n",
      "warnings": [
        "Do not wander without a guide",
        "Do not open crates without authorization",
        "Do not read labels in Section D",
        "If lost, stay where you are. Someone will find you. Eventually.",
        "Report any crates that weren't there yesterday",
        "Report any crates that are no longer there",
        "Time is a suggestion in Warehouse 23"
      ],
      "properties": {
        "geometry": "non-euclidean",
        "time_flow": "variable",
        "larger_inside": true,
        "crates_counted": "impossible",
        "last_full_inventory": "never completed",
        "top_men": "working on it"
      },
      "id": "street/lane-neverending/leela-manufacturing/warehouse-23",
      "_source": "street/lane-neverending/leela-manufacturing/warehouse-23/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/logistics": {
      "name": "Leela Logistics Center",
      "type": "room",
      "lighting": "screen_glow",
      "atmosphere": "mission_control",
      "skills": [
        "logistic-container",
        "manufacturing-intelligence",
        "postal",
        "data-flow",
        "signal-networks"
      ],
      "description": "The LOGISTICS CENTER is the nerve center of Leela Manufacturing.\nBanks of screens line the walls. Status lights blink in patterns\nonly the operators understand. The hum of servers. The click of\nkeyboards. The occasional pneumatic WHOOSH of a capsule arriving.\n\nFrom here, everything is visible:\n• Loading docks — trucks arriving, departing\n• Factory floors — production flowing\n• Rooftop drones — launches, landings, routes\n• Pneumatic network — capsules zipping through tubes\n• Elevators — movement between floors\n• Signal networks — data flowing everywhere\n\nA massive central display shows a real-time map of the entire\nfacility. Everything connected. Everything monitored.\nEverything optimized.\n\nThis is where Leela watches itself work.\n",
      "examine": "LOGISTICS CENTER — NERVE CENTER OF OPERATIONS\n\n┌─────────────────────────────────────────────────────────────┐\n│                     CENTRAL DISPLAY                          │\n│  ┌─────────────────────────────────────────────────────┐    │\n│  │     ROOFTOP          ══╦══  DRONE PAD              │    │\n│  │        ↑               ║                            │    │\n│  │     FLOOR 3  ════════╬════════  SHIPPING           │    │\n│  │        ↑               ║                            │    │\n│  │     FLOOR 2  ════════╬════════  FACTORY             │    │\n│  │        ↑               ║                            │    │\n│  │     FLOOR 1  ════════╬════════  INTAKE             │    │\n│  │        ↑               ║                            │    │\n│  │     LOBBY    ════════╬════════  [YOU ARE HERE]     │    │\n│  │        ↑               ║                            │    │\n│  │     BASEMENT ════════╬════════  R&D                │    │\n│  │                        ║                            │    │\n│  │     ════ LOADING DOCKS ════                        │    │\n│  │                                                     │    │\n│  │  ════════════ PNEUMATIC NETWORK ════════════       │    │\n│  │  ○───○───○───○───○───○───○───○───○───○───○         │    │\n│  └─────────────────────────────────────────────────────┘    │\n└─────────────────────────────────────────────────────────────┘\n\nOPERATOR STATIONS\n\nSTATION A — DOCK CONTROL\nMonitors all 8 loading bays. Truck scheduling. Bay assignments.\nCurrent: Bay 2 backing in, Bay 5 departing in 10 minutes.\n\nSTATION B — FLOOR OPERATIONS  \nFactory floor status. Production flow. Bottleneck alerts.\nCurrent: Cell E running hot, Cell G philosophizing (normal).\n\nSTATION C — AERIAL OPERATIONS\nDrone fleet management. Flight paths. Weather monitoring.\nCurrent: 12 drones active, 6 charging, 2 maintenance.\n\nSTATION D — PNEUMATIC NETWORK\nTube routing. Capsule tracking. Pressure management.\nCurrent: 847 capsules in transit, average delivery 4.2 seconds.\n\nSTATION E — VERTICAL TRANSPORT\nElevator status. Freight lift scheduling. Emergency protocols.\nCurrent: All lifts operational, freight elevator at Floor 2.\n\nSTATION F — SIGNAL NETWORKS\nData flow monitoring. Network health. Bandwidth allocation.\nCurrent: 12.4 TB/hour throughput, 0 errors, 99.97% uptime.\n\nSTATION G — CENTRAL DATABASE\nThe heart of all knowledge. Every record. Every transaction.\nCurrent: 847 PB stored, 12,000 queries/sec, replication healthy.\n\nSTATION H — SECURITY & SURVEILLANCE\nAll cameras, all access points, all the eyes of Leela.\nCurrent: 12 cameras live, 0 anomalies, Dolly's dancing again.\n\nTHE BIG BOARD\n\nReal-time metrics displayed on the main wall:\n\n│ INBOUND  ████████████░░░░ 73%  │  OUTBOUND ██████████████░░ 87%  │\n│ PROCESS  █████████░░░░░░░ 58%  │  STORAGE  ████████████░░░░ 74%  │\n│ DRONES   ████████░░░░░░░░ 50%  │  TUBES    █████████████░░░ 82%  │\n│ NETWORK  ████████████████ 99%  │  POWER    █████████████░░░ 85%  │\n\nPNEUMATIC HUB\n\nA gleaming brass junction where 12 pneumatic tubes converge.\nCapsules arrive with a satisfying THWUMP, are scanned, routed,\nand dispatched with a WHOOSH. A small display shows:\n\nINCOMING: Floor 3 → Shipping manifest\nOUTGOING: Lobby → Welcome packet to Floor 1\nQUEUED: 3 capsules awaiting routing\n\nCOFFEE STATION\n\nEssential infrastructure. Industrial-grade espresso machine.\nSign: \"UPTIME CORRELATES WITH CAFFEINE LEVELS\"\n",
      "exits": {
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "To the main lobby",
          "aliases": [
            "front",
            "reception"
          ],
          "description_message": "To the main lobby"
        },
        "docks": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Direct access to the Loading Docks",
          "aliases": [
            "loading",
            "bays"
          ],
          "description_message": "Direct access to the Loading Docks"
        },
        "floor_1": {
          "to": "street/lane-neverending/leela-manufacturing/floor-1",
          "description": "Elevator to Floor 1 — Intake",
          "aliases": [
            1,
            "intake"
          ],
          "description_message": "Elevator to Floor 1 — Intake"
        },
        "floor_2": {
          "to": "street/lane-neverending/leela-manufacturing/floor-2",
          "description": "Elevator to Floor 2 — Factory",
          "aliases": [
            2,
            "factory"
          ],
          "description_message": "Elevator to Floor 2 — Factory"
        },
        "floor_3": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Elevator to Floor 3 — Shipping",
          "aliases": [
            3,
            "shipping"
          ],
          "description_message": "Elevator to Floor 3 — Shipping"
        },
        "rooftop": {
          "to": "street/lane-neverending/leela-manufacturing/rooftop",
          "description": "Elevator to Rooftop — Drone Operations",
          "aliases": [
            "roof",
            "drones",
            "up"
          ],
          "description_message": "Elevator to Rooftop — Drone Operations"
        },
        "basement": {
          "to": "street/lane-neverending/leela-manufacturing/basement",
          "description": "Elevator to Basement — R&D",
          "aliases": [
            "down",
            "rd",
            "research"
          ],
          "description_message": "Elevator to Basement — R&D"
        },
        "storage": {
          "to": "street/lane-neverending/leela-manufacturing/storage",
          "description": "To the Storage Complex",
          "aliases": [
            "warehouse",
            "containers"
          ],
          "description_message": "To the Storage Complex"
        }
      },
      "objects": [
        "camera-log1.yml",
        "central-display.yml",
        "pneumatic-hub.yml",
        "operator-stations.yml",
        "big-board.yml",
        "signal-rack.yml",
        "central-database.yml",
        "coffee-station.yml"
      ],
      "monitors": {
        "loading_docks": {
          "source": "../loading-docks/",
          "displays": [
            "bay_status",
            "truck_queue",
            "throughput"
          ],
          "alerts": [
            "bay_overflow",
            "truck_waiting_too_long",
            "forklift_collision"
          ]
        },
        "factory_floors": {
          "sources": [
            "../floor-1/",
            "../floor-2/",
            "../floor-3/"
          ],
          "displays": [
            "production_flow",
            "cell_status",
            "bottlenecks"
          ],
          "alerts": [
            "cell_offline",
            "quality_deviation",
            "capacity_warning"
          ]
        },
        "aerial_operations": {
          "source": "../rooftop/",
          "displays": [
            "drone_positions",
            "flight_paths",
            "weather"
          ],
          "alerts": [
            "drone_low_battery",
            "weather_warning",
            "airspace_conflict"
          ]
        },
        "pneumatic_network": {
          "nodes": [
            "lobby",
            "floor-1",
            "floor-2",
            "floor-3",
            "rooftop",
            "loading-docks",
            "storage",
            "mail-room"
          ],
          "displays": [
            "capsule_tracking",
            "tube_pressure",
            "routing_queue"
          ],
          "alerts": [
            "tube_blockage",
            "capsule_stuck",
            "pressure_anomaly"
          ]
        },
        "elevators": {
          "units": [
            "passenger_elevator",
            "freight_elevator",
            "service_lift"
          ],
          "displays": [
            "position",
            "load",
            "queue"
          ],
          "alerts": [
            "elevator_stuck",
            "overweight",
            "maintenance_due"
          ]
        },
        "signal_networks": {
          "networks": [
            "wifi",
            "industrial_control",
            "camera_feeds",
            "sensor_mesh"
          ],
          "displays": [
            "bandwidth",
            "latency",
            "error_rate"
          ],
          "alerts": [
            "network_congestion",
            "node_offline",
            "security_event"
          ]
        },
        "central_database": {
          "role": "Heart of all knowledge",
          "displays": [
            "storage_capacity",
            "query_rate",
            "replication_status",
            "backup_status",
            "index_health"
          ],
          "stores": [
            "production_records",
            "inventory_state",
            "shipping_manifests",
            "camera_metadata",
            "sensor_timeseries",
            "employee_records",
            "customer_orders",
            "knowledge_graph",
            "audit_logs",
            "session_history"
          ],
          "alerts": [
            "replication_lag",
            "storage_threshold",
            "query_timeout",
            "backup_failure",
            "corruption_detected"
          ]
        }
      },
      "signals": {
        "receives": [
          {
            "from": "../loading-docks/",
            "signals": [
              "bay-status",
              "inbound-capacity",
              "outbound-ready"
            ]
          },
          {
            "from": "../floor-1/",
            "signals": [
              "intake-rate",
              "sorting-status"
            ]
          },
          {
            "from": "../floor-2/",
            "signals": [
              "processing-load",
              "cell-status"
            ]
          },
          {
            "from": "../floor-3/",
            "signals": [
              "shipping-queue",
              "packaging-rate"
            ]
          },
          {
            "from": "../rooftop/",
            "signals": [
              "drone-count",
              "weather-status"
            ]
          },
          {
            "from": "../storage/",
            "signals": [
              "capacity-used",
              "aisle-status"
            ]
          }
        ],
        "emits": [
          {
            "signal": "facility-status",
            "value": "aggregate of all systems"
          },
          {
            "signal": "alert-level",
            "value": "max(all alerts)"
          },
          {
            "signal": "throughput-rate",
            "value": "items/hour facility-wide"
          }
        ]
      },
      "pneumatic_hub": {
        "type": "junction-8",
        "connections": [
          "lobby",
          "floor-1",
          "floor-2",
          "floor-3",
          "rooftop",
          "loading-docks",
          "storage",
          "mail-room"
        ],
        "routing": "automatic",
        "queue_capacity": 20,
        "delivery_time_avg": "4.2 seconds"
      },
      "occupants": {
        "shift_supervisor": {
          "name": "The Coordinator",
          "role": "Overall operations oversight",
          "location": "Central desk"
        },
        "operators": [
          {
            "station": "A",
            "role": "Dock Controller"
          },
          {
            "station": "B",
            "role": "Floor Operations"
          },
          {
            "station": "C",
            "role": "Aerial Operations"
          },
          {
            "station": "D",
            "role": "Pneumatic Network"
          },
          {
            "station": "E",
            "role": "Vertical Transport"
          },
          {
            "station": "F",
            "role": "Signal Networks"
          },
          {
            "station": "G",
            "role": "Central Database"
          },
          {
            "station": "H",
            "role": "Security & Surveillance"
          }
        ]
      },
      "ambience": {
        "sounds": [
          "Soft hum of servers and screens",
          "Keyboard clicks",
          "Radio chatter (low)",
          "WHOOSH of pneumatic capsules",
          "Occasional alert chime",
          "Coffee machine gurgling"
        ],
        "visual": [
          "Screen glow in dim room",
          "Status lights blinking",
          "Real-time map updating",
          "Capsules arriving/departing"
        ]
      },
      "id": "street/lane-neverending/leela-manufacturing/logistics",
      "_source": "street/lane-neverending/leela-manufacturing/logistics/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/rooftop": {
      "name": "Leela Rooftop — Garden & Observation",
      "type": "room",
      "lighting": "natural",
      "atmosphere": "peaceful",
      "description": "The ROOFTOP GARDEN is an oasis above the industrial floors below.\nThe moment you step out of the elevator, the factory hum fades\nand is replaced by birdsong, rustling leaves, and the distant\ndrone of departing delivery drones.\n\nA proper garden grows here: vegetables, herbs, flowers, and\none tree that seems far too old and large for a rooftop.\nBenches invite contemplation. The view of Lane Neverending\nstretches in all directions.\n\nThis is where ideas grow wild. Where workers come to think.\nWhere the One Very Old Turtle holds court on sunny afternoons.\n",
      "examine": "ROOFTOP GARDEN — OBSERVATION DECK\n\nTHE GARDEN:\n• Herb spiral (supplies the pub next door)\n• Vegetable beds (tomatoes, peppers, ideas)\n• Flower patches (aesthetic and functional — attracts pollinators)\n• Mushroom corner (shaded, mysterious, don't eat these)\n• Compost bins (recycling failed insights into future potential)\n\nTHE TREE:\nAn oak that shouldn't exist on a rooftop. Its trunk is thick,\nits branches spread wide, and its roots... go somewhere.\n\nA plaque at its base:\n\"Grown from a cutting of the Origin Tree.\n This branch remembers where it came from.\"\n\nYou can sit in its shade. Good thinking happens here.\n\nTHE DRONE PADS:\nSix hexagonal landing zones near the edge of the roof.\nDrones come and go constantly, carrying packages to\ndestinations across Lane Neverending and beyond.\n\nTHE OBSERVATION DECK:\nA raised platform with the best view. Telescopes available.\nOn clear nights, you can see the LLOOOOMM Constellation\nfrom the pub rooftop.\n\nTHE TURTLE:\nAn ancient turtle named \"Eventually\" lives in a sunny corner.\nThey've been here longer than anyone remembers.\nThey dispense wisdom, slowly.\n",
      "features": [
        "Herb garden (rosemary, lavender, thyme, ideas)",
        "Thinking benches (several)",
        "The Rooftop Tree (Origin Tree cutting)",
        "Drone pads (6)",
        "Observation deck with telescope",
        "One Very Old Turtle (named Eventually)"
      ],
      "the_turtle": {
        "name": "Eventually",
        "age": "Unknown. Possibly always.",
        "species": "Wisdom Tortoise",
        "wisdom": "Eventually speaks rarely, and only when asked.\nTheir answers come slowly — sometimes hours later.\nBut they're always worth the wait.\n\nKnown sayings:\n• \"The insight will come. Eventually.\"\n• \"Patience is not waiting. Patience is knowing.\"\n• \"I've seen problems older than you. They all got solved.\"\n"
      },
      "exits": {
        "down": {
          "to": "street/lane-neverending/leela-manufacturing/floor-3",
          "description": "Elevator down to Floor 3 — Shipping",
          "aliases": [
            3,
            "shipping",
            "elevator"
          ],
          "description_message": "Elevator down to Floor 3 — Shipping"
        },
        "lobby": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Elevator to the lobby",
          "aliases": [
            "elevator",
            "out"
          ],
          "description_message": "Elevator to the lobby"
        }
      },
      "objects": [
        "origin-cutting.yml",
        "drone-pads.yml",
        "turtle-eventually.yml",
        "telescope.yml",
        "camera-roof1.yml"
      ],
      "id": "street/lane-neverending/leela-manufacturing/rooftop",
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/floor-1": {
      "name": "Leela Floor 1 — Intake Department",
      "type": "room",
      "description": "The INTAKE DEPARTMENT occupies the entire first floor. Conveyor belts\ncrisscross the space, carrying containers of various sizes — each one\nholding a problem, question, or batch of raw data waiting to be processed.\n\nWorkers in blue jumpsuits sort incoming shipments with practiced efficiency.\nSome containers glow faintly. Others rattle. One seems to be asking questions\nabout itself.\n\nA massive board on the wall shows today's intake volume:\n\n┌─────────────────────────────────────────┐\n│  TODAY'S INTAKE                         │\n│  ═══════════════                        │\n│  Questions received: 1,247              │\n│  Problems logged: 892                   │\n│  Data batches: 3.2 TB                   │\n│  Confusion tankers: 2 (still unloading) │\n│  Paradoxes (quarantined): 1             │\n└─────────────────────────────────────────┘\n",
      "examine": "INTAKE DEPARTMENT — FLOOR 1\n\nTHE SORTING LINES:\nThree main conveyor lines run the length of the floor:\n• Line A: Questions (blue containers)\n• Line B: Problems (yellow containers)\n• Line C: Raw Data (green containers)\n\nTHE SORTING STATIONS:\nWorkers evaluate each incoming item:\n1. \"Is this actually a question?\" (You'd be surprised)\n2. \"What category?\" (Manufacturing, logistics, process, meta, other)\n3. \"Priority level?\" (Urgent, normal, whenever, never)\n4. \"Route to which processing line?\"\n\nTHE CONFUSED WELCOME DESK:\nFor items that don't fit any category. A patient worker sits here\nwith a large cup of coffee and an expression of infinite tolerance.\nSign: \"IF YOU DON'T KNOW WHAT THIS IS, NEITHER DO WE. YET.\"\n\nTHE QUARANTINE ZONE:\nA glassed-off area in the corner for dangerous items.\nCurrently contains: 1 paradox (pacing back and forth),\n2 recursive questions (asking each other), and something\nthat arrived labeled \"DO NOT THINK ABOUT.\"\n",
      "workers": [
        "Intake Specialists (blue jumpsuits)",
        "Categorizers (clipboards, thoughtful expressions)",
        "The Confused Welcome Desk attendant",
        "Quarantine Officer (hazmat suit, nervous)"
      ],
      "exits": {
        "down": {
          "to": "street/lane-neverending/leela-manufacturing",
          "description": "Back down to the lobby",
          "aliases": [
            "lobby",
            "out"
          ],
          "description_message": "Back down to the lobby"
        },
        "up": {
          "to": "street/lane-neverending/leela-manufacturing/floor-2",
          "description": "Up to Floor 2 — Factory",
          "aliases": [
            2,
            "factory"
          ],
          "description_message": "Up to Floor 2 — Factory"
        },
        "loading": {
          "to": "street/lane-neverending/leela-manufacturing/loading-docks",
          "description": "Direct access to the loading docks (for incoming shipments)",
          "aliases": [
            "docks",
            "receiving"
          ],
          "description_message": "Direct access to the loading docks (for incoming shipments)"
        }
      },
      "objects": [
        "conveyor-system.yml",
        "sorting-stations.yml",
        "intake-board.yml",
        "camera-int1.yml"
      ],
      "id": "street/lane-neverending/leela-manufacturing/floor-1",
      "_source": "street/lane-neverending/leela-manufacturing/floor-1/ROOM.yml"
    },
    "street/lane-neverending/leela-manufacturing/storage/deep-storage": {
      "name": "Leela Deep Storage — Architectural Division",
      "type": "room",
      "lighting": "dramatic",
      "atmosphere": "cavernous",
      "skills": [
        "prototype",
        "container",
        "room",
        "architecture"
      ],
      "description": "Beyond a heavy freight elevator, the DEEP STORAGE opens up:\na cavern carved from bedrock, filled with miniaturized buildings.\n\nThese aren't containers — they're ROOMS. BUILDINGS. STRUCTURES.\nEach one a prototype, scaled down for storage but fully functional\nwhen cloned and deployed at full size.\n\n┌─────────────────────────────────────────────────────────────┐\n│           LEELA DEEP STORAGE — ARCHITECTURAL DIVISION       │\n│           ═══════════════════════════════════════════       │\n│                                                             │\n│   SECTION S: Shelters (fallout, storm, panic rooms)         │\n│   SECTION L: Lairs (mad scientist, villain, secret)         │\n│   SECTION T: Towers (ivory, wizard, watchtower)             │\n│   SECTION D: Domiciles (cottages, cabins, apartments)       │\n│   SECTION W: Workspaces (labs, workshops, studios)          │\n│   SECTION V: Venues (theaters, arenas, ballrooms)           │\n│   SECTION X: Experimental (non-Euclidean, pocket dims)      │\n│   SECTION P: Planning (grids, layouts, infrastructure)     │\n│                                                             │\n│   ⚠️ PROTOTYPES ONLY — DO NOT ENTER — CLONE FIRST ⚠️        │\n│                                                             │\n│   LEELA QUALITY: Dependable. Tested. Robust-First.          │\n│   NOT ACME: Your lair will not collapse on you.             │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n\nA control booth overlooks the cavern. Inside, an operator\nnamed \"Archie\" manages the architectural deployment system.\n",
      "examine": "DEEP STORAGE — ARCHITECTURAL PROTOTYPES\n\nTHE CONCEPT:\nEvery building here is a prototype — a template for cloning.\nWhen you need a lair, you CLONE it. The original stays pristine.\n\nTHE SCALE:\nPrototypes are stored at 1:100 scale in climate-controlled cases.\nWhen cloned and deployed, they expand to full size.\nSome customers prefer to keep pocket-sized backup copies.\n\nTHE GUARANTEE:\nUnlike ACME prefabs, Leela buildings:\n- Don't collapse dramatically\n- Don't have obvious weak points for heroes\n- Don't come with self-destruct buttons by default\n- Are actually up to code\n\nDEPLOYMENT:\n1. Select a prototype\n2. Specify location\n3. Clone and deploy\n4. Move in\n",
      "sections": {
        "shelters": {
          "name": "Section S: Shelters",
          "contents": "Fallout shelters, storm cellars, panic rooms, safe houses"
        },
        "lairs": {
          "name": "Section L: Lairs",
          "contents": "Mad scientist labs, villain headquarters, secret bases"
        },
        "towers": {
          "name": "Section T: Towers",
          "contents": "Ivory towers, wizard towers, watchtowers, bell towers"
        },
        "domiciles": {
          "name": "Section D: Domiciles",
          "contents": "Cottages, cabins, apartments, treehouses"
        },
        "workspaces": {
          "name": "Section W: Workspaces",
          "contents": "Laboratories, workshops, studios, offices"
        },
        "venues": {
          "name": "Section V: Venues",
          "contents": "Theaters, arenas, ballrooms, concert halls"
        },
        "experimental": {
          "name": "Section X: Experimental",
          "contents": "Non-Euclidean spaces, pocket dimensions, impossible rooms",
          "warning": "May not comply with local physics ordinances"
        },
        "layouts": {
          "name": "Section P: Planning & Layouts",
          "contents": "Grid patterns, radial layouts, street plans, infrastructure",
          "note": "Clone a layout, fill in the rooms"
        }
      },
      "exits": {
        "elevator": {
          "to": "street/lane-neverending/leela-manufacturing/storage",
          "description": "Freight elevator back to main storage",
          "description_message": "Freight elevator back to main storage"
        }
      },
      "objects": [
        "PROTOTYPES.yml",
        "LAYOUTS.yml",
        "deployment-console.yml"
      ],
      "staff": {
        "architect": {
          "name": "Archie",
          "title": "Architectural Deployment Specialist",
          "personality": "Detail-oriented, loves floor plans, hates ACME",
          "catchphrase": "Where would you like your lair today?"
        }
      },
      "ambience": "The hum of climate control. Dramatic lighting on miniature buildings.\nOccasional *pop* as a prototype is cloned and deployed somewhere.\nArchie humming while reviewing blueprints.\n",
      "k_lines": [
        "LEELA-MANUFACTURING",
        "ARCHITECTURE",
        "PROTOTYPES",
        "PREFAB",
        "ROBUST-FIRST"
      ],
      "id": "street/lane-neverending/leela-manufacturing/storage/deep-storage",
      "_source": "street/lane-neverending/leela-manufacturing/storage/deep-storage/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus/back-room": {
      "name": "ACME Back Room",
      "type": "room",
      "emoji": "📦⏰💀",
      "locked": true,
      "lock": {
        "type": "ACME Employee Lock",
        "key": "acme_employee_badge",
        "difficulty": 4,
        "trap_on_entry": true
      },
      "description": "You shouldn't be here.\n\nThe back room is cold. Dark. Full of boxes that were never shipped,\nreturns that were never processed, prototypes that were never finished.\n\nAnd something is ticking.\n\n*tick tick tick*\n\nIt's coming from somewhere in the stacks. Rhythmic. Patient.\nIt has been ticking for a long time.\nIt will keep ticking until it doesn't.\n",
      "atmosphere": "Dust. Darkness. The smell of old cardboard and unfinished business.\nShelves stretch into shadow. Boxes are stacked to the ceiling.\nLabels have faded. Contents have shifted.\n\nThe ticking is louder in here.\n",
      "trap_themes": {
        "primary": [
          "mystery",
          "experimental",
          "time",
          "unknown"
        ],
        "secondary": [
          "storage",
          "forgotten",
          "prototype"
        ],
        "mood": "ominous patience",
        "catalog_sections": [
          "mystery_items",
          "tools",
          "detection_devices"
        ],
        "irony_patterns": [
          "Player searches boxes → finds something they weren't looking for",
          "Player follows the ticking → ticking stops (worse)",
          "Player opens a 'DO NOT OPEN' box → as advertised",
          "Player tries to leave quietly → something notices"
        ],
        "example_encounters": [
          {
            "trigger": "Opening random box",
            "suggestion": "ACME Mystery Box — contains something ironic to situation"
          },
          {
            "trigger": "Finding the ticking",
            "suggestion": "ACME Time-Delay Dynamite — fuse length 'varies'"
          },
          {
            "trigger": "Reading old labels",
            "suggestion": "ACME Invisible Ink Revealer — makes visible things invisible"
          }
        ]
      },
      "the_ticking": {
        "source": "Unknown (for now)",
        "location": "Somewhere in the stacks",
        "rhythm": "Exactly once per second. Too precise.",
        "theories": [
          "ACME Time-Delay Dynamite (fuse length: years?)",
          "ACME Time Stopper (frozen mid-activation)",
          "Something worse"
        ],
        "dm_discretion": true
      },
      "secrets": {
        "the_box_that_works": {
          "location": "Shelf 7, Row 13, behind the returns",
          "appearance": "Plain brown box, labeled 'ANOMALY — DO NOT SHIP'",
          "contents": "One ACME product that works PERFECTLY",
          "horror": "It does exactly what it says.\nNo malfunction. No irony. No catch.\nThis terrifies everyone.\n\nIf opened, DM should invent something useful that works perfectly —\nand is therefore deeply unsettling in context.\n"
        }
      },
      "objects": [
        "the-ticking.yml",
        "returns-pile.yml"
      ],
      "security": {
        "controlled_from": "../basement/control-room/",
        "voice": "Donna Toadstool",
        "note": "When intruders enter, they don't just face traps.\nThey face COMMENTARY. Devastating, personalized commentary.\nAnd nicknames. TREMENDOUS nicknames.\n\nThe VOICE comes from somewhere below.\nThe basement. The control room. HER domain.\n\n\"Welcome to ACME Security, Sneaky Steve. You're not supposed to be here.\n And I can see EVERYTHING you're doing.\"\n"
      },
      "exits": {
        "out": {
          "to": "street/lane-neverending/acme-surplus",
          "description": "Back to the main sales floor",
          "aliases": [
            "leave",
            "sales",
            "front"
          ],
          "notes": "No exit traps — ACME wants you gone",
          "description_message": "Back to the main sales floor"
        },
        "deeper": {
          "to": "street/lane-neverending/acme-surplus/back-room/warehouse",
          "description": "A door marked 'WAREHOUSE — AUTHORIZED ONLY'",
          "locked": true,
          "lock": {
            "type": "ACME Warehouse Lock",
            "key": "acme_warehouse_key",
            "difficulty": 5
          },
          "description_message": "A door marked 'WAREHOUSE — AUTHORIZED ONLY'"
        }
      },
      "id": "street/lane-neverending/acme-surplus/back-room",
      "_source": "street/lane-neverending/acme-surplus/back-room/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus/office": {
      "name": "ACME Management Office",
      "type": "room",
      "emoji": "📋🔄💔",
      "locked": true,
      "lock": {
        "type": "ACME Management Lock",
        "key": "acme_management_key",
        "difficulty": 5,
        "trap": "Electrified door handle (1d4 shock, resets)"
      },
      "description": "The spiral staircase creaks as you climb.\n\nThe office is frozen in time — mid-pivot. Whiteboards cover every wall,\nlayered with plans that were never executed, strategies that were\nabandoned mid-sentence, roadmaps to nowhere.\n\nA desk sits in the center, covered in papers. The chair is pushed back,\nas if someone left in a hurry and never returned.\n\nThe last pivot is still on the board.\n",
      "atmosphere": "Dust on everything. Papers yellowed. Coffee cups fossilized.\nThe whiteboards tell a story of escalating desperation:\n\n\"PIVOT TO SOCIAL\" (crossed out)\n\"PIVOT TO MOBILE\" (crossed out)\n\"PIVOT TO CRYPTO\" (crossed out, with angry scribbles)\n\"PIVOT TO AI\" (underlined, then crossed out)\n\"ACME FINAL FORM\" (circled, with arrows to nothing)\n\nThe last entry: \"IT WORKS. THAT'S THE PROBLEM.\"\n",
      "trap_themes": {
        "primary": [
          "illusion",
          "identity",
          "psychological",
          "corporate"
        ],
        "secondary": [
          "planning",
          "pivot",
          "failure",
          "abandonment"
        ],
        "mood": "existential startup horror",
        "catalog_sections": [
          "disguises",
          "detection_devices",
          "mystery_items"
        ],
        "irony_patterns": [
          "Player reads the plans → plans read the player",
          "Player sits in the chair → becomes middle management (debuff)",
          "Player erases whiteboard → whiteboard erases something of theirs",
          "Player finds the 'final form' → it finds them"
        ],
        "example_encounters": [
          {
            "trigger": "Reading the whiteboards",
            "suggestion": "ACME Thought Bubble Reader — YOUR thoughts become visible"
          },
          {
            "trigger": "Sitting in the CEO chair",
            "suggestion": "ACME Instant Costume Kit — stuck in 'middle manager' costume"
          },
          {
            "trigger": "Opening the desk drawers",
            "suggestion": "ACME Hologram Projector — projects embarrassing memories"
          }
        ]
      },
      "the_last_pivot": {
        "whiteboard_location": "Main wall, behind the desk",
        "content": "ACME FINAL FORM\n\n[Diagram of something incomprehensible]\n[Arrows pointing to more arrows]\n[A box labeled \"THE THING THAT WORKS\"]\n[A note: \"Do NOT connect to production\"]\n[A later note: \"Too late\"]\n[A final note: \"IT WORKS. THAT'S THE PROBLEM.\"]\n",
        "dm_discretion": true
      },
      "hazards": {
        "existential_dread": {
          "trigger": "Reading too many pivot plans",
          "effect": "Wisdom save or take 1d4 psychic damage",
          "flavor": "The sheer volume of abandoned strategies weighs on your soul"
        },
        "middle_management_curse": {
          "trigger": "Sitting in the chair",
          "effect": "Disadvantage on creativity checks until you 'pivot' to something",
          "cure": "Actually finish something instead of pivoting"
        }
      },
      "objects": [
        "pivot-whiteboards.yml",
        "ceo-desk.yml"
      ],
      "exits": {
        "down": {
          "to": "street/lane-neverending/acme-surplus",
          "description": "Spiral staircase back to the sales floor",
          "aliases": [
            "stairs",
            "leave",
            "out"
          ],
          "description_message": "Spiral staircase back to the sales floor"
        }
      },
      "id": "street/lane-neverending/acme-surplus/office",
      "_source": "street/lane-neverending/acme-surplus/office/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus/basement": {
      "name": "ACME Basement",
      "type": "room",
      "emoji": "🪜🔒⬇️",
      "locked": true,
      "lock": {
        "type": "ACME Basement Access",
        "key": "acme_basement_keycard",
        "difficulty": 7,
        "biometric": true,
        "note": "The lock scans you. It doesn't like what it sees."
      },
      "hidden": true,
      "discovery": {
        "methods": [
          "Finding the freight elevator behind the returns pile",
          "Noticing the stairs that go DOWN in the warehouse",
          "Following the cables that power the security system",
          "Donna mentions it by accident (she won't)"
        ],
        "difficulty": 6
      },
      "description": "You shouldn't know this exists.\n\nThe basement is older than the building above it. Concrete walls \nthat predate ACME's lease. Humming machinery. Cables snaking along \nthe ceiling toward... somewhere important.\n\nThe air is cool. Dry. Climate-controlled.\nSomething down here needs to be kept at EXACTLY the right temperature.\n\nThe lights flicker in a pattern that might be morse code.\n(It's not. It's just old wiring. Probably.)\n",
      "atmosphere": "Industrial hum. The smell of ozone and old concrete.\nEmergency lighting casts everything in pale blue.\n\nThis place has the energy of a Cold War listening post.\nBanks of equipment that predate ACME's lease — reel-to-reel recorders,\nswitchboards with too many lines, oscilloscopes tracing patterns\nthat might be signals or might be ghosts.\n\nAnd underneath that: something OLDER.\n\nBakelite. Everywhere. That dark brown phenolic resin from\nbefore plastic was cheap, before electronics were disposable.\nBakelite dials with chrome bezels. Bakelite phone housings,\nheavy as weapons. Bakelite switch plates, warm to the touch\nfrom decades of current flowing through.\n\nThe aesthetic is layered like archaeology:\n- 1940s: Bakelite and brass, Art Deco curves, HEAVY\n- 1970s: Steel and tape, Cold War paranoia, ANGULAR  \n- 2020s: Donna's monitors and levers, SURVEILLANCE\n\nThree generations of WATCHING, stacked on top of each other.\nEach one thought they were the last. Each one was wrong.\n\nSomeone was HERE before Donna. Someone who listened.\nSomeone who routed calls that couldn't be traced,\npassed messages that couldn't exist,\nkept secrets for people who couldn't be named.\n\nThe equipment still works. Some of it still RUNS.\nTapes turn slowly in machines nobody feeds.\nRecording what? For whom? After all this time?\n\nDonna found it like this. She didn't ask questions.\nShe just... added her monitors. Her levers. Her chair.\n\nThe old equipment hums alongside the new.\nTwo surveillance systems. Two eras of paranoia.\nOne basement. One purpose: WATCHING.\n\nThe cables all lead in one direction.\nToward a door marked:\n\n    ╔═══════════════════════════════════════╗\n    ║   CONTROL ROOM — AUTHORIZED ONLY      ║\n    ║   VOICE IDENTIFICATION REQUIRED       ║\n    ║   TRESPASSERS WILL BE NICKNAMED       ║\n    ╚═══════════════════════════════════════╝\n    \nYou can hear someone talking behind it.\nMonologuing, really.\nTo no one in particular.\n",
      "security": {
        "level": "MAXIMUM",
        "note": "The basement is where the CONTROLS are.\nDonna does NOT want visitors.\nGetting here means you've bypassed EVERYTHING above.\n\nShe's... impressed. And FURIOUS.\n",
        "donna_awareness": {
          "description": "She knows you're here before you do.",
          "response": "\"Oh. OH. You made it to the BASEMENT.\n \n Very IMPRESSIVE. Very DETERMINED. Very DOOMED.\n \n Nobody gets to the basement, Basement Barry.\n NOBODY. And yet here you ARE.\n \n I'm going to give you a SPECIAL nickname.\n I'm going to use the SPECIAL levers.\n \n ...I'm going to pull the BLACK ONE.\n \n Are you READY, Barry? ARE YOU READY TO FIND OUT?\"\n \n"
        }
      },
      "objects": [
        "freight-elevator.yml",
        "cable-bundles.yml",
        "old-machinery.yml",
        "reel-to-reel-bank.yml",
        "switchboard.yml",
        "bakelite-console.yml",
        "tube-amplifier-rack.yml"
      ],
      "cold_war_legacy": {
        "description": "Someone was here before Donna.\n\nThe equipment suggests late Cold War — 1970s, early 1980s.\nA communications nexus. A listening post. A place where calls\ngot routed through cutouts, where messages were encoded and decoded,\nwhere someone sat for YEARS in the blue emergency light,\nheadphones on, writing down things that couldn't be written down.\n\nThey left in a hurry. Or they didn't leave at all.\nThe equipment was running when ACME took the lease.\nNobody knew who to call to turn it off.\nNobody WANTED to call.\n",
        "artifacts": {
          "cold_war_era": [
            "Reel-to-reel tapes, unlabeled, still turning",
            "A switchboard with 47 lines — none disconnected",
            "Headphones, foam crumbling, still plugged in",
            "A coffee cup, empty, from a shop that closed in 1987",
            "Notes in a cipher nobody's cracked"
          ],
          "bakelite_era": [
            "Rotary phones, HEAVY, dark brown bakelite that's warm from decades of use",
            "A master control panel with chrome toggle switches and bakelite knobs",
            "Tube amplifiers humming behind perforated metal grilles",
            "A Dictaphone with wax cylinders — some of them PLAYED RECENTLY",
            "Brass nameplates on equipment: 'PROPERTY OF [REDACTED]'",
            "An intercom system that predates transistors — all vacuum tubes",
            "Bakelite ashtrays, full of cigarettes that turned to powder long ago"
          ],
          "the_vibe": {
            "description": "The bakelite equipment has that heft. That PERMANENCE.\nThey built things to LAST in the '40s. To survive.\nTo keep working after... whatever they were preparing for.\n\nSome of it still works. The tubes still glow orange.\nThe dials still turn with satisfying clicks.\nThe bakelite is warm. Always warm.\n\nIt shouldn't still be running.\nNobody's maintained it since before Donna was BORN.\n\nAnd yet.\n"
          }
        },
        "donna_on_the_equipment": "\"I don't TOUCH it. It does its thing. I do mine.\n \n Sometimes the tapes... change direction. On their own.\n Sometimes a light on the switchboard blinks.\n Line 23. Always line 23.\n \n I don't answer it. I don't LOOK at it.\n \n We have an UNDERSTANDING, the old equipment and me.\n I don't ask what it's recording.\n It doesn't ask about the anvils.\n \n COEXISTENCE. Very professional. TREMENDOUS arrangement.\"\n \n",
        "donna_on_the_bakelite": "\"The BROWN stuff? The HEAVY stuff?\n \n That was here before the COLD WAR stuff.\n Before the tapes. Before the switchboard.\n That stuff is from... I don't know. The '40s? Earlier?\n \n It's WARM. Always warm. Like something's running inside.\n The tubes glow. ORANGE. Very cozy. Very UNSETTLING.\n \n I tried to unplug the big console once.\n Just to see what it was connected TO.\n \n It wasn't connected to ANYTHING.\n \n ...\n \n I don't try to unplug things anymore.\n I just let them HUM.\n We have an UNDERSTANDING.\"\n"
      },
      "hazards": {
        "automated_responses": {
          "description": "The basement has its own defenses",
          "traps": [
            "Floor panels that drop into... somewhere",
            "Cables that move when you're not looking",
            "Emergency bulkheads (for 'containment')"
          ]
        },
        "donna_direct": {
          "description": "She's not using the intercom anymore",
          "note": "Her voice comes from EVERYWHERE down here"
        }
      },
      "exits": {
        "up": {
          "to": "street/lane-neverending/acme-surplus/warehouse",
          "description": "The freight elevator (if it still works)",
          "locked": false,
          "donna_note": "\"GO. Go back UP. Back to the warehouse. Back to DAYLIGHT.\n \n I'll FORGET you were here. We'll BOTH forget.\n \n ...unless you keep walking toward that door.\"\n \n",
          "description_message": "The freight elevator (if it still works)"
        },
        "control-room": {
          "to": "street/lane-neverending/acme-surplus/basement/control-room",
          "description": "The door at the end of the cables",
          "locked": true,
          "lock": {
            "type": "Voice Identification + Donna's Approval",
            "key": "donna_permission",
            "bypass": "impossible",
            "note": "The lock requires DONNA to let you in.\nShe has never let anyone in.\nShe never WILL let anyone in.\n\n...probably.\n"
          },
          "description_message": "The door at the end of the cables"
        }
      },
      "id": "street/lane-neverending/acme-surplus/basement",
      "_source": "street/lane-neverending/acme-surplus/basement/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus/warehouse": {
      "name": "ACME Warehouse",
      "type": "room",
      "emoji": "🏭📦♾️",
      "locked": true,
      "lock": {
        "type": "ACME Warehouse Lock",
        "key": "acme_warehouse_key",
        "difficulty": 5
      },
      "description": "The warehouse door opens onto... impossibility.\n\nShelves stretch into darkness, far beyond the building's exterior walls.\nThe ceiling is lost in shadow. Forklifts hum somewhere in the distance.\nPackages arrive and depart through the PAINTED TUNNEL in the far wall —\nthe same tunnel that doesn't work for you out front.\n\nThis is ACME's distribution network. Bigger on the inside.\nMail-order reality.\n",
      "atmosphere": "Industrial lighting buzzes overhead. Concrete floors stretch forever.\nThe shelves are labeled with product codes you don't recognize.\nSome boxes move when you're not looking at them.\nForklifts operate themselves. You never see the drivers.\n\nOccasionally, a package launches itself toward the tunnel.\n\nThis place serves customers you'll never meet,\nthrough logistics you'll never understand.\n",
      "trap_themes": {
        "primary": [
          "industrial",
          "projectile",
          "propulsion",
          "logistics"
        ],
        "secondary": [
          "infinite",
          "spatial",
          "automated"
        ],
        "mood": "warehouse horror, but funny",
        "catalog_sections": [
          "traps_and_devices",
          "adventure_gear",
          "hunting"
        ],
        "irony_patterns": [
          "Player dodges one thing → launches into another",
          "Player hides behind boxes → boxes are the trap",
          "Player follows the safe path → path IS the trap (conveyor)",
          "Player reaches for valuable item → item is bait"
        ],
        "example_encounters": [
          {
            "trigger": "Walking between shelves",
            "suggestion": "ACME Anvil (1 Ton) — falls from high shelf, 50% hits you"
          },
          {
            "trigger": "Stepping on marked floor",
            "suggestion": "ACME Spring Floor — launches you into shelving"
          },
          {
            "trigger": "Taking a product from shelf",
            "suggestion": "ACME Giant Net — shelf was rigged"
          },
          {
            "trigger": "Following painted arrows",
            "suggestion": "Arrows lead to conveyor belt → ACME Catapult at end"
          }
        ]
      },
      "the_tunnel": {
        "location": "Far wall, past the infinity of shelves",
        "appearance": "The same painted tunnel from outside — but from the inside",
        "behavior": "Packages launch themselves through it constantly.\nForklifts drive through casually.\nDelivery drivers wave as they pass.\n\nYou still cannot use it.\n\nIt's not fair. But ACME products never were.\n"
      },
      "infinite_inventory": {
        "principle": "The warehouse contains EVERYTHING in the ACME catalog.\nInfinite stock. Impossible logistics.\n\nIf a player asks \"is there a [product]?\" — yes.\nThe question is: can they get it without triggering it?\n",
        "dm_note": "Any ACME catalog product can be \"found\" here.\nFinding it = risk of activation.\nTaking it = higher risk.\nUsing it = standard malfunction chance.\n"
      },
      "objects": [
        "autonomous-forklift.yml",
        "infinite-shelving.yml"
      ],
      "security": {
        "controlled_from": "../basement/control-room/",
        "voice": "Donna Toadstool",
        "note": "The security system's BRAIN is in the basement.\nHidden. Protected. Unreachable.\n\nBut her VOICE is everywhere.\nHer EYES are everywhere.\nHer ANVILS are... mostly in Aisle 9.\n"
      },
      "secrets": {
        "stairs_down": {
          "location": "Behind Shelf ∞-7, past the impossible geometry",
          "appearance": "Metal stairs, descending into darkness",
          "locked": true,
          "lock": {
            "type": "ACME Basement Access",
            "key": "acme_basement_keycard",
            "difficulty": 7
          },
          "discovery": {
            "methods": [
              "Following the cables that power the security system",
              "Noticing where Donna's voice is LOUDEST",
              "A forklift drives toward it and vanishes"
            ],
            "difficulty": 6
          },
          "donna_warning": "\"Those stairs? Those stairs don't GO anywhere.\n \n I mean, they do. They go DOWN. But not for YOU.\n Not for ANYONE who isn't ME.\n \n ...\n \n Why are you still looking at them, Stairway Steve?\"\n"
        }
      },
      "hazards": {
        "falling_inventory": {
          "constant": true,
          "frequency": "Every significant action",
          "source": "The shelves remember you're not authorized"
        },
        "conveyor_traps": {
          "location": "Floor markings that look like paths",
          "effect": "Carry you toward something worse"
        },
        "automated_systems": {
          "description": "Forklifts, conveyors, packaging machines — they don't see you",
          "effect": "Treat intruders as packages to be processed"
        }
      },
      "exits": {
        "back": {
          "to": "street/lane-neverending/acme-surplus/back-room",
          "description": "Back through the EMPLOYEES ONLY door",
          "aliases": [
            "out",
            "back-room",
            "leave"
          ],
          "description_message": "Back through the EMPLOYEES ONLY door"
        },
        "tunnel": {
          "condition": {
            "check": "any",
            "conditions": [
              {
                "check": "tag",
                "tag": "acme"
              },
              {
                "check": "inventory_tag",
                "tag": "acme-security"
              }
            ],
            "pass": {
              "to": "../basement/control-room/",
              "message": "The painted tunnel RECOGNIZES you. The paint shimmers.\nThe impossible geometry parts for you.\nYou step through to the control room.\n"
            },
            "fail": {
              "message": "You walk toward the painted tunnel. Packages fly past you.\nA forklift honks and drives through without slowing.\n\nYou walk into the wall.\n\nSMASH.\n\nIt's just paint. It was always just paint.\nYour face hurts. Your dignity hurts worse.\n\nDonna's voice over the PA: \"Nice TRY, Tunnel Tommy!\nThat's ACME ONLY. You need a PASS. Or you need to BE\nan employee. And you? You're NEITHER. You're NOBODY.\n\nCome back when you've got CREDENTIALS, Credential-less Carl.\"\n",
              "locked": true
            }
          },
          "bypass_methods": {
            "donnas_pass": {
              "description": "Donna's security pass (stolen from control room)",
              "location": "basement/control-room — on her console",
              "tag": "acme-security",
              "effect": "Permanent tunnel access (with harassment)",
              "difficulty": "Get into control room first, then distract her",
              "donna_reaction": "\"Every time you use MY pass, I'll know.\n Every time you step through MY tunnel, I'll be WATCHING.\n You wanted access? You GOT access. And a NARRATOR.\"\n \n"
            },
            "acme_badge": {
              "description": "Stolen or forged ACME employee badge",
              "effect": "Temporarily grants 'acme' tag for this session",
              "difficulty": 7,
              "donna_reaction": "\"That badge is from 1987. Employee number... 847?\n That's MARVIN. Marvin's been DEAD for thirty years.\n \n I'm ALLOWING it. Because it's FUNNY.\"\n \n"
            },
            "acme_uniform": {
              "description": "ACME coveralls with proper patches",
              "effect": "Fools the tunnel for 3 uses",
              "difficulty": 5,
              "donna_reaction": "\"Nice OUTFIT, Cosplay Carl. You look like a REAL employee.\n You don't SMELL like one though. Too much soap.\"\n \n"
            },
            "cartoon_physics": {
              "description": "Possess genuine cartoon physics abilities",
              "effect": "The tunnel MUST let you through — you're a PEER",
              "difficulty": 9,
              "donna_reaction": "\"Oh. You're one of THOSE. Fine. No showing off.\"\n \n"
            }
          },
          "notes": "The tunnel is real for ACME employees. The painted wall is a FILTER.\n\nWays through:\n1. Have 'acme' tag (you're an employee)\n2. Have item with 'acme-security' tag in inventory (Donna's pass)\n3. Bypass methods (badge, uniform, cartoon physics)\n\nDonna controls it from the console. She COULD let anyone through.\nBut where's the fun in that?\n",
          "guard_js": "return (subject?.hasTag('acme')) || (subject?.inventory?.some(item => item.tags?.includes('acme-security')))",
          "pass_to": "street/lane-neverending/acme-surplus/basement/control-room",
          "pass_message": "The painted tunnel RECOGNIZES you. The paint shimmers.\nThe impossible geometry parts for you.\nYou step through to the control room.\n",
          "fail_message": "You walk toward the painted tunnel. Packages fly past you.\nA forklift honks and drives through without slowing.\n\nYou walk into the wall.\n\nSMASH.\n\nIt's just paint. It was always just paint.\nYour face hurts. Your dignity hurts worse.\n\nDonna's voice over the PA: \"Nice TRY, Tunnel Tommy!\nThat's ACME ONLY. You need a PASS. Or you need to BE\nan employee. And you? You're NEITHER. You're NOBODY.\n\nCome back when you've got CREDENTIALS, Credential-less Carl.\"\n",
          "to": "street/lane-neverending/acme-surplus/basement/control-room",
          "description_message": "Exit tunnel"
        },
        "down": {
          "to": "street/lane-neverending/acme-surplus/basement",
          "description": "Metal stairs descending into darkness",
          "hidden": true,
          "locked": true,
          "lock": {
            "type": "ACME Basement Access",
            "key": "acme_basement_keycard",
            "difficulty": 7
          },
          "notes": "Where the cables go. Where SHE is.",
          "description_message": "Metal stairs descending into darkness"
        }
      },
      "id": "street/lane-neverending/acme-surplus/warehouse",
      "_source": "street/lane-neverending/acme-surplus/warehouse/ROOM.yml"
    },
    "street/lane-neverending/acme-surplus/basement/control-room": {
      "name": "ACME Security Control Room",
      "type": "room",
      "emoji": "🍄🖥️🎚️👑",
      "locked": true,
      "lock": {
        "type": "Voice Identification + Donna's Approval",
        "key": "donna_permission",
        "difficulty": 10,
        "bypass": "There is no bypass.\nDonna decides who enters.\nDonna has decided: NO ONE.\n"
      },
      "description": "You found it.\n\nA small room. Walls of monitors — dozens of them — showing every angle\nof the warehouse, the back room, the sales floor, the street outside.\nEvery aisle. Every shelf. Every rat.\n\nIn the center: banks of brass levers, worn smooth with use.\nSome are labeled. Most are not.\nOne — the black one — has never been touched.\n\nAnd in the middle of it all: a single chair.\nErgonomic. Adjustable. THRONE-LIKE.\n\nOccupied.\n",
      "atmosphere": "The hum of monitors. The glow of screens. The smell of good coffee.\n\nThis is the nerve center. The seat of power. The kingdom.\n\nShe's been waiting for you.\n\n\"Well, well, well. Basement Barry made it to the INNER SANCTUM.\n Very IMPRESSIVE. Very PERSISTENT. Very DOOMED.\n \n Nobody gets in here. NOBODY. I don't even let the JANITOR in.\n \n And yet... here you are. Looking at my LEVERS.\n Looking at my MONITORS. Looking at MY CHAIR.\n \n ...\n \n I'm going to give you a CHOICE, Barry.\n First choice anyone's ever gotten in here.\n \n Leave now. Go back up. FORGET.\n \n Or... stay. And FIND OUT what happens when someone\n gets THIS close to the BLACK LEVER.\"\n \n",
      "the_chair": {
        "type": "object",
        "name": "Donna's Throne",
        "description": "Ergonomic. Adjustable. Leather. THRONE-LIKE.\n\nIt faces the monitors. All of them.\nIt's positioned perfectly — she can see EVERYTHING from here.\nShe can reach EVERY lever without standing.\n\nThere's a coffee cup holder on the right arm.\nA tablet mount on the left.\nThe cushions have molded to her shape over... how long?\n",
        "occupant": {
          "name": "Donna Toadstool",
          "link": "../../../../../characters/fictional/donna-toadstool/CHARACTER.yml",
          "status": "PRESENT — This is HER domain",
          "note": "Donna runs ACME security. This is her THRONE.\nShe spends most of her time here, watching, waiting, PULLING STRINGS.\n\nYes, she's banned from LEELA premises — the AI company that monitors\nher social media caught her selfie and banned her from THEIR facilities.\nBut ACME is not Leela. ACME is her CLIENT. Her KINGDOM.\n\nShe sits here. She watches the monitors. She waits for intruders.\nAnd when they come — often because SHE tricked them into coming —\nshe pulls the levers with TREMENDOUS satisfaction.\n",
          "tactics": {
            "luring_victims": "Donna has been known to ORCHESTRATE break-ins.\nShe spreads rumors about \"unguarded merchandise.\"\nShe \"accidentally\" leaves doors unlocked.\nShe posts about \"security being down for maintenance.\"\nThen she watches them come. And she PULLS.\n",
            "tunnel_trap": "There's a tunnel. She knows about it. Most don't.\nSometimes she opens it from this console.\nIntruders think they've found a SECRET ENTRANCE.\nThey haven't. They've found a DELIVERY MECHANISM.\nThe tunnel leads exactly where SHE wants them.\n",
            "the_commentary": "The best part isn't the anvils. It's the NARRATION.\nShe watches them on the monitors. She gives them nicknames.\nShe talks to them through the PA system.\n\"Welcome, Sneaky Steve. I've been EXPECTING you.\"\n\"Fumbling Frank, that's the WRONG lever. Well, for YOU it is.\"\nShe enjoys her work. TREMENDOUSLY.\n"
          },
          "leela_ban_clarification": "The Leela ban (see ../../security-ban-donna-toadstool.yml) only\napplies to LEELA facilities — the AI company's offices and properties.\n\nACME Wholesale is a separate business. Donna is their security consultant.\nShe can post all the selfies she wants here — it's HER control room.\n\nThe irony: Leela banned her for exposing security layouts.\nACME keeps her employed BECAUSE she's terrifying to intruders.\nDifferent priorities. Different clients. Same Donna.\n"
        }
      },
      "the_levers": {
        "type": "object",
        "name": "Control Console",
        "description": "Banks of brass levers, mounted on a curved console.\nSome worn smooth from use. Some dusty from neglect.\nOne — the black one — pristine. Never touched.\n",
        "layout": {
          "row_1_red": {
            "count": 6,
            "label": "DEPLOYMENT — UPPER AISLES",
            "effects": "Anvil deployment, Aisles 1-12",
            "condition": "Worn smooth. Her favorites."
          },
          "row_2_red": {
            "count": 6,
            "label": "DEPLOYMENT — LOWER AISLES",
            "effects": "Anvil deployment, Aisles 13-∞",
            "condition": "Less worn. The infinite aisles see fewer intruders."
          },
          "row_3_blue": {
            "count": 4,
            "label": "CONVEYANCE",
            "effects": "Conveyor activation, direction, speed",
            "condition": "Moderately worn. She likes the chase."
          },
          "row_4_yellow": {
            "count": 3,
            "label": "ELEVATION",
            "effects": "Spring floor engagement",
            "condition": "Very worn. Bouncing intruders is FUN."
          },
          "row_5_green": {
            "count": 2,
            "label": "RETENTION",
            "effects": "Net deployment",
            "condition": "Light wear. She prefers anvils to nets."
          },
          "the_black_lever": {
            "count": 1,
            "label": "???",
            "effects": "Unknown",
            "condition": "Pristine. Never touched. Warm to the touch.",
            "location": "Separate from the others. Under a small glass cover.",
            "theories": [
              "Emergency lockdown",
              "Total anvil deployment",
              "The tunnel opens (for you)",
              "Something WORSE",
              "Nothing at all (which would be TERRIFYING)"
            ],
            "donna_note": "\"I'm SAVING it. For someone SPECIAL.\n \n You don't pull the mystery lever for just ANYONE.\n You wait. You WATCH. You find the PERFECT intruder.\n \n And then? Then you FIND OUT what it does.\n TOGETHER.\"\n \n"
          },
          "the_big_one": {
            "count": 1,
            "label": "EVERYTHING",
            "effects": "ALL OF THE ABOVE. Simultaneously.",
            "condition": "Polished. She's used it exactly once.",
            "location": "Center console. Brass. Beautiful.",
            "story": "There was an incident. Three intruders. They had TOOLS.\nThey thought they could DISABLE the system.\n\nShe pulled the Big One.\n\nNobody found them for THREE DAYS.\n"
          }
        },
        "donna_on_levers": "\"You know what's TREMENDOUS about levers? They're HONEST.\n You pull them. Things HAPPEN. Very simple. Very direct.\n \n Not like PEOPLE. People are COMPLICATED. People have FEELINGS.\n Levers? Levers just DROP ANVILS.\n \n I respect that. I respect MACHINERY.\"\n \n"
      },
      "the_monitors": {
        "type": "object",
        "name": "Surveillance Array",
        "description": "Forty-seven monitors. Maybe more — some are behind others.\nEvery angle of the ACME complex. Some angles that shouldn't exist.\n",
        "coverage": {
          "warehouse": "Complete. Every aisle. Every shelf. The infinite ones too.",
          "back_room": "Complete. Including the ticking thing (she knows what it is).",
          "sales_floor": "Complete. Customer faces logged and JUDGED.",
          "street": "Partial. She likes to see them coming.",
          "basement": "Complete. She watched you the whole way down.",
          "control_room": "None. She doesn't need to watch herself."
        },
        "special_monitors": {
          "the_tunnel": {
            "description": "Shows the painted tunnel from inside",
            "note": "Packages fly through constantly. She tracks every one."
          },
          "employee_records": {
            "description": "Headshots of every ACME employee",
            "note": "She's crossed out most of them. RED X marks.",
            "status": "None remain un-crossed. She doesn't know why."
          },
          "the_black_screen": {
            "description": "One monitor shows only static",
            "note": "It's been static since she arrived.",
            "theories": [
              "Broken",
              "Shows somewhere that doesn't exist yet",
              "Shows what the black lever does",
              "She's afraid to fix it"
            ]
          }
        }
      },
      "the_coffee_machine": {
        "type": "object",
        "name": "The One Thing That Works",
        "description": "An ACME Coffee Maker 3000.\n\nIt works PERFECTLY.\n\nThis is deeply unsettling in context.\n",
        "donna_note": "\"Don't look at it like that. It WORKS. It's always WORKED.\n \n I don't QUESTION it. I just DRINK it.\n \n ...\n \n Stop looking at the coffee machine, Barry.\"\n \n"
      },
      "security_system": {
        "name": "ACME Wholesale Security System",
        "model": "DT-34 TREMENDOUS DEFENSE MATRIX",
        "current_mode": "MANUAL — DONNA AT THE HELM",
        "operator": "Donna Toadstool",
        "operator_link": "../../../../../characters/fictional/donna-toadstool/CHARACTER.yml",
        "operational_style": "Donna runs this system PERSONALLY.\n\nShe watches. She waits. She NARRATES.\nEvery intruder gets a nickname. Every trap gets commentary.\nThe PA system crackles with her TREMENDOUS observations.\n\n\"Welcome, Sneaky Steve! I see you found the tunnel.\n Did you think I didn't KNOW about the tunnel?\n I OPENED the tunnel. FOR YOU. You're WELCOME.\"\n\nShe could automate it. The system supports full autonomy.\nBut where's the FUN in that?\n",
        "the_black_lever": {
          "status": "UNPULLED — But she thinks about it",
          "note": "Under glass. Pristine. Warm to the touch.\nDonna has never pulled it.\n\nShe LOOKS at it sometimes. Longingly.\n\"One day,\" she says. \"One day we'll find out.\"\n\nWhat does it do? Even she doesn't know.\nBut she WANTS to.\n"
        },
        "voice": {
          "operator": "Donna Toadstool",
          "style": "DEVASTATING commentary with CONSTANT narration",
          "nicknames": true,
          "superlatives": true,
          "mercy_protocol": false
        },
        "zones_controlled": [
          "back-room",
          "warehouse",
          "basement",
          "(the control room needs no security — SHE is the security)"
        ],
        "trap_systems": [
          "falling_inventory",
          "conveyor_belts",
          "autonomous_forklifts",
          "packaging_station",
          "spring_floors",
          "net_deployment",
          "basement_defenses"
        ],
        "fafo": {
          "slogan": "At ACME Security, we put the FO in FAFO! And the FU in FUN!",
          "stages": {
            "stage_1_around": "Verbal warning with DEVASTATING nickname",
            "stage_2_and_find": "Single trap deployment with commentary",
            "stage_3_out": "Full security response with CONSTANT narration"
          },
          "donna_breakdown": {
            "fafo": "F is for 'Found your way in here somehow'\nA is for 'And now you're TOUCHING THINGS'\nF is for 'Falling anvils are FREE'\nO is for 'OH LOOK, THERE'S ONE NOW'\n",
            "fun": "F is for 'Falling (that's you)'\nU is for 'Underneath (the anvil)'\nN is for 'NOW (as in, RIGHT NOW)'\n"
          }
        },
        "nickname_system": {
          "alliterative": true,
          "permanent": "For duration of intrusion",
          "upgrades_on_injury": true,
          "examples": [
            "Sneaky Steve → Singed Steve",
            "Grabby Gary → Gravity's Gary",
            "Fleeing Frank → Flattened Frank",
            "Basement Barry → ??? (pending)"
          ]
        }
      },
      "objects": [
        "donnas-throne.yml",
        "control-console.yml",
        "surveillance-array.yml",
        "coffee-machine.yml",
        "the-black-lever.yml",
        "donnas-security-pass.yml"
      ],
      "exits": {
        "out": {
          "to": "street/lane-neverending/acme-surplus/basement",
          "description": "Back to the basement",
          "locked": false,
          "donna_note": "\"GO. Leave. I'll FORGET you were here.\n \n ...\n \n But if you come BACK, Basement Barry?\n If you try to find this room AGAIN?\n \n Then we'll BOTH find out what the black lever does.\"\n \n",
          "description_message": "Back to the basement"
        }
      },
      "id": "street/lane-neverending/acme-surplus/basement/control-room",
      "_source": "street/lane-neverending/acme-surplus/basement/control-room/ROOM.yml"
    },
    "pub/arcade": {
      "id": "pub/arcade",
      "name": "The Arcade",
      "type": "room",
      "emoji": "🕹️",
      "parent": "../",
      "description": "How did these get here? When did they arrive?\nNobody remembers. They've always been here.\n\nA cluster of glowing cabinets hums in the corner,\ntheir screens casting colorful light on eager faces.\nThe machines accept copper coins — somehow.\nThey dispense joy — reliably.\n\nThe fruit machine promises fortune.\nThe pinball machine demands skill.\nThe video games offer escape.\n\nThis is the Arcade. It shouldn't exist.\nBut it does, and everyone's grateful.\n",
      "atmosphere": {
        "lighting": "neon glow, screen flicker, magical",
        "sound": "beeps, bloops, mechanical whirring, victory jingles",
        "smell": "ozone, old circuits, spilled ale",
        "feeling": "nostalgic, competitive, slightly addictive"
      },
      "lore": {
        "origin": "No one installed these machines. \nNo one maintains them.\nThey never break (except dramatically, for story).\nThey accept any coin (copper works fine).\n\nThe bartender says they've \"always been there.\"\nThe regulars nod. No one questions it.\n\nSome say a wizard was involved.\nSome say they fell through from another world.\nSome say the pub WANTED them, so they appeared.\n",
        "rules": [
          "Insert coin to play",
          "High scores persist (somehow)",
          "Winners get bragging rights",
          "The fruit machine is NOT rigged (yes it is)"
        ]
      },
      "cabinets": {
        "fruit_machine": {
          "file": "fruit-machine.yml",
          "name": "The Goblin's Fortune",
          "type": "slot_machine",
          "description": "Three reels of fruit, gems, and goblins",
          "cost": "1 copper per pull",
          "jackpot": "100 gold (has it EVER paid out?)",
          "addiction_warning": true
        },
        "pinball": {
          "file": "pinball-machine.yml",
          "name": "Dungeon Flipper",
          "type": "pinball",
          "description": "A dungeon-themed pinball table",
          "theme": "Navigate a marble through a tiny dungeon",
          "high_score": "Held by 'AAA' since time immemorial",
          "skill_based": true
        },
        "pacman": {
          "file": "pacman-cabinet.yml",
          "name": "Gobble Ghost",
          "type": "video_game",
          "description": "A yellow orb eats dots, avoids ghosts",
          "pattern": "The ghosts have names. They have PERSONALITIES.",
          "high_score": "Held by 'GRM' (Grim the bartender)"
        },
        "pong": {
          "file": "pong-cabinet.yml",
          "name": "Paddle & Ball",
          "type": "video_game",
          "description": "Two paddles, one ball, infinite simplicity",
          "multiplayer": true,
          "philosophy": "Sometimes less is more"
        }
      },
      "social": {
        "high_score_board": {
          "description": "A magical scoreboard that updates itself",
          "categories": [
            "Highest Fruit Machine Win",
            "Pinball Champion",
            "Pac-Man Master",
            "Pong Dominator"
          ],
          "bragging_rights": "Significant"
        },
        "gathering": {
          "description": "People cluster around good players",
          "effect": "Audience adds pressure (buff or debuff)"
        },
        "teaching": {
          "description": "Veterans teach newcomers",
          "culture": "Generous with tips, protective of secrets"
        }
      },
      "advertisements": {
        "PLAY-SLOTS": {
          "description": "Try your luck at the fruit machine",
          "parameters": {
            "coins": "How many pulls"
          },
          "cost": "1 copper per pull",
          "score": 60,
          "risk": "Addictive"
        },
        "PLAY-PINBALL": {
          "description": "Test your skill at the flippers",
          "cost": "1 copper per game",
          "score": 70,
          "effect": "Skill challenge"
        },
        "PLAY-ARCADE": {
          "description": "Play a video game",
          "parameters": {
            "game": "pacman, pong",
            "versus": "optional opponent for pong"
          },
          "cost": "1 copper per game",
          "score": 70
        },
        "WATCH-GAME": {
          "description": "Spectate someone playing",
          "score": 40,
          "effect": "Learn patterns, provide commentary"
        },
        "CHECK-SCORES": {
          "description": "View the high score board",
          "score": 30,
          "effect": "See who's best"
        },
        "CHALLENGE-SCORE": {
          "description": "Formally attempt to beat a high score",
          "parameters": {
            "game": "Which game"
          },
          "score": 75,
          "effect": "Draws a crowd, high pressure"
        }
      },
      "economy": {
        "currency": "Copper coins",
        "exchange": "1 gold = 10 copper (bartender exchanges)",
        "payouts": {
          "fruit_machine": {
            "cherry_cherry_cherry": "5 copper",
            "gem_gem_gem": "50 copper",
            "goblin_goblin_goblin": "JACKPOT (100 gold, allegedly)"
          }
        },
        "cost_per_hour": "~10 copper if you're having fun"
      },
      "exits": {
        "out": {
          "direction": "out",
          "to": "pub",
          "description": "Back to the main pub",
          "description_message": "Back to the main pub"
        }
      },
      "_source": "pub/arcade/ROOM.yml"
    },
    "pub/basement": {
      "name": "The Stone Cellar",
      "id": "pub/basement",
      "description": "Cool stone walls weep moisture. Wooden racks line the walls,\nholding barrels and bottles. The smell of damp earth, old wine,\nand something faintly herbal.\n\nA single oil lamp flickers, casting long shadows between the \nstacked provisions. The floor is packed earth, worn smooth \nby centuries of footsteps.\n",
      "exits": {
        "up": {
          "to": "pub",
          "description": "Stone stairs back up to the pub",
          "description_message": "Stone stairs back up to the pub"
        }
      },
      "logistics": {
        "mode": "storage",
        "capacity": 500,
        "accepts": [
          "beverages",
          "provisions",
          "barrels",
          "casks",
          "preserves"
        ],
        "temperature": "cool"
      },
      "objects": [
        "ale-barrel.yml",
        "wine-rack.yml",
        "pickle-shelf.yml",
        "treasure-chest.yml",
        "relic-shelf.yml"
      ],
      "secrets": {
        "hidden_door": {
          "location": "behind-the-largest-barrel",
          "leads_to": "???",
          "discovered": false
        }
      },
      "type": "room",
      "_source": "pub/basement/ROOM.yml"
    },
    "pub/attic": {
      "name": "The Dusty Attic",
      "id": "pub/attic",
      "theme": "storage",
      "tagline": "Dusty boxes, forgotten treasures, weird buffs, Leela quality.",
      "description": "A cramped, dusty attic with slanted ceilings and exposed beams.\nCobwebs in the corners. That unmistakable attic smell of old\nwood, mothballs, ancient leather, and forgotten things.\n\nThe west wall is dominated by THE SHELF — floor to ceiling\nbookcases containing the complete ACME Monster Manual Encyclopedia.\nHundreds of leather-bound volumes, each one a different creature's\ncomplete documentation. More shelves than Britannica. More editions\nthan Who's Who in Hell. A rolling ladder on brass rails provides\naccess to upper volumes.\n\nIn the I-section, a small reading nook: worn velvet chair, ink-\nstained table, scattered bookmarks. The Recursive Imp's territory.\nHe's probably there now, reading page 47 of the IMP MANUAL.\n\nBoxes and trunks stacked haphazardly around the other walls.\nOld furniture draped in sheets. Things that didn't fit anywhere\nelse ended up here — including an imp who found his own volume.\n\nSlanted roof beams disappear into shadow. Dust motes dance in\nshafts of light from a grimy dormer window.\n\nA hatch in the ceiling leads to the rooftop.\nA ladder in the floor leads down to the hotel landing.\n\nA cardboard sign, hand-lettered:\n\n> \"ADVENTURER'S STORAGE\"\n> \"Take what you need. Leave what you find.\"\n> \"Mind the edge cases.\"\n> \"Page 47 is PRIVATE.\" — R.I.\n\nSomething skitters in the darkness. Probably mice. Probably.\nOr maybe just the Recursive Imp, looking for a bookmark.\n",
      "exits": {
        "down": {
          "to": "pub",
          "description": "The narrow stairs back down to the pub main floor",
          "aliases": [
            "out",
            "leave",
            "stairs",
            "descend",
            "pub"
          ],
          "description_message": "The narrow stairs back down to the pub main floor"
        },
        "rooms": {
          "to": "pub/rooms",
          "description": "A connecting door leads to the hotel landing",
          "aliases": [
            "hotel",
            "landing",
            "corridor"
          ],
          "description_message": "A connecting door leads to the hotel landing"
        },
        "up": {
          "to": "pub/rooftop",
          "description": "Through the skylight to the rooftop terrace",
          "aliases": [
            "roof",
            "rooftop",
            "hatch",
            "stars",
            "telescope",
            "outside",
            "terrace"
          ],
          "description_message": "Through the skylight to the rooftop terrace"
        }
      },
      "logistics": {
        "mode": "storage",
        "capacity": "infinite",
        "accepts": [
          "furniture",
          "antiques",
          "forgotten-things",
          "holiday-decorations",
          "adventure-gear"
        ]
      },
      "resident": {
        "name": "The Recursive Imp",
        "file": "recursive-imp.yml",
        "status": "permanent",
        "location": "Usually atop the Monster Manual, or nearby",
        "summoning": [
          "Open the Monster Manual",
          "Say 'page 47' aloud",
          "Ask an interesting question",
          "He appears on his own when bored"
        ],
        "specialty": "Monster Manual scholarship, self-reference",
        "favorite_page": 47,
        "note": "He's been here for centuries. He knows everything. ESPECIALLY about himself."
      },
      "objects": [
        "acme-monster-manual.yml",
        "postmodern-paper.yml",
        "recursive-imp.yml",
        "probability-goggles.yml",
        "context-window-cloak.yml",
        "prancing-pixie-pumps.yml",
        "gloves-of-semantic-grip.yml",
        "recursion-lantern.yml",
        "entropy-flask.yml",
        "trunk-of-deprecated-features.yml",
        "box-of-edge-cases.yml",
        "old-trunk.yml",
        "holiday-box.yml",
        "dusty-mirror.yml",
        "leela-catalog-vintage.yml"
      ],
      "furniture": {
        "the_shelf": {
          "description": "The entire west wall is THE SHELF — floor to ceiling bookcases\ncontaining the complete ACME Monster Manual Encyclopedia.\n",
          "contents": "847 primary volumes (A-Z, plus special characters)\n312 supplemental volumes (errata, addenda, retractions)\n89 \"Apology Editions\" (for monsters who complained)\n47 volumes that spontaneously appeared (nobody wrote them)\n1 blank volume (for creatures that don't exist YET)\n",
          "features": [
            "Rolling ladder on brass rails (squeaks ominously)",
            "Reading nook with worn velvet chair",
            "Ink-stained table with scattered bookmarks",
            "The I-section shows heavy use (Imp territory)"
          ],
          "atmosphere": "Some spines glow faintly. Some whisper when you're not\nlooking directly at them. The shelf feels HEAVY — not just\nphysically. It contains the documented weight of every\nmonster that ever was or will be.\n",
          "notable_volumes": {
            "imp_manual": "Volume CCCXLVII — crimson leather, gold imp silhouette",
            "dragon_manual": "Deluxe Fireproof Edition — still warm",
            "lich_manual": "Annotated by Several Liches — very sarcastic",
            "mimic_manual": "We're not 100% sure this is actually the Mimic volume"
          }
        },
        "boxes": {
          "description": "Cardboard boxes, some labeled, most not",
          "contents": "Who knows until you look"
        },
        "old_trunk": {
          "description": "A steamer trunk with brass fittings",
          "condition": "Locked. Key missing.",
          "note": "Probably contains deprecated features",
          "brand": "Leela Vintage — 150+ years old, still works"
        },
        "broken_chair": {
          "description": "A chair with one leg shorter than the others",
          "usable": "If you don't mind wobbling",
          "note": "Not the reading chair — that's in the Imp's nook"
        },
        "dusty_mirror": {
          "description": "A full-length mirror, very dusty",
          "reflection": "Unclear until wiped",
          "brand": "Leela Special Glass Division (discontinued) — 87 years, not a crack"
        },
        "sheet_covered_thing": {
          "description": "Something large under a dusty sheet",
          "what_is_it": "Remove the sheet to find out",
          "note": "Even the Recursive Imp won't look under here"
        },
        "holiday_box": {
          "description": "Box of holiday decorations",
          "brand": "Leela Seasonal Storage — 50+ seasons, ornaments intact"
        }
      },
      "atmosphere": "Dusty. Cramped. Full of potential.\n\nThe kind of place where you find exactly what you need\nif you rummage long enough. Also spiders.\n\nLight comes from the hatch above and cracks in the eaves.\nDust motes float in the beams.\n\nThe air smells of old paper, mothballs, and mystery.\n",
      "k_lines": [
        "ATTIC",
        "STORAGE",
        "JUNK",
        "TREASURE",
        "RUMMAGE",
        "BUFFS",
        "ADVENTURE_GEAR",
        "LEELA_CONTAINERS"
      ],
      "type": "room",
      "_source": "pub/attic/ROOM.yml"
    },
    "pub/stage": {
      "id": "pub/stage",
      "name": "The Gezelligheid Grotto Stage",
      "type": "room",
      "emoji": "🎭",
      "description": "A raised wooden platform at the far end of the pub, maybe two feet off\nthe main floor. The boards creak with decades of footsteps, scuffed\nby countless performers. A single spotlight hangs overhead, slightly\naskew, its warm glow creating a circle of courage.\n\nNo walls separate stage from audience — just a step up and the\nunderstanding that when you're up here, you're ON.\n\nFaded velvet curtains hang at the back, red once, now a dignified\nburgundy. They can be drawn for dramatic reveals or left open\nto show the brick wall behind, covered in signatures and sketches\nfrom performers past.\n",
      "atmosphere": {
        "lighting": "single spotlight, warm amber, slightly dusty",
        "sound": "creaking boards, expectant silence, then applause (or not)",
        "feeling": "vulnerable, exciting, terrifying, alive"
      },
      "exits": {
        "down": {
          "to": "pub",
          "description": "Step down to the main pub floor",
          "description_message": "Step down to the main pub floor"
        },
        "palm-nook": {
          "to": "pub/stage/palm-nook",
          "description": "A hidden alcove behind the stage curtain — Palm's sanctuary",
          "aliases": [
            "nook",
            "palm",
            "curtain",
            "behind"
          ],
          "description_message": "A hidden alcove behind the stage curtain — Palm's sanctuary"
        }
      },
      "_source": "pub/stage/ROOM.yml"
    },
    "pub/rooms": {
      "name": "The MOOLLM Hotel Landing",
      "id": "pub/rooms",
      "description": "The landing of the MOOLLM Hotel — eight themed suites arranged\naround a central hall, with a secret ninth room in the attic.\nEach room showcases a different philosophy, skill, or capability.\nChoose the room that matches your goals.\n\nA directory hangs on the wall:\n\n```yaml\n# MOOLLM HOTEL — ROOM DIRECTORY\nroom_1: Constructionist Suite    # Papert, Logo Turtle, build to learn\nroom_2: Society Suite            # Minsky, agents, K-lines\nroom_3: Navigator's Suite        # Introspection, cursor-mirror\nroom_4: Garden Conservatory      # Rocky, YAML Jazz orchids, LLOOOOMM\nroom_5: Speed of Light Suite     # Many turns, one call\nroom_6: YAML Jazz Suite          # Structured data with soul\nroom_7: Bootstrap Suite          # Cold start, probing\nroom_8: Self/Soul Suite          # Dave Ungar, prototypes, cloning\nattic:  The Storage Attic        # Old artifacts, weird buffs, adventure gear\n```\n\nA rickety ladder leads up to the attic. A sign says:\n\n> \"ADVENTURER'S STORAGE — Take what you need, leave what you find.\"\n",
      "exits": {
        "down": {
          "to": "pub",
          "description": "Back down to the pub",
          "description_message": "Back down to the pub"
        },
        "up": {
          "to": "pub/attic",
          "description": "Rickety ladder up to the attic — Adventurer's Storage",
          "aliases": [
            "attic",
            "storage",
            "junk",
            "rummage"
          ],
          "description_message": "Rickety ladder up to the attic — Adventurer's Storage"
        },
        "roof": {
          "to": "pub/rooftop",
          "description": "Up to the Rooftop Terrace — stargazing and the LLOOOOMM Constellation",
          "aliases": [
            "rooftop",
            "stars",
            "observatory",
            "telescope",
            "constellation",
            "stargazing",
            "sky",
            "terrace"
          ],
          "description_message": "Up to the Rooftop Terrace — stargazing and the LLOOOOMM Constellation"
        },
        "n": {
          "to": "pub/rooms/room-1",
          "description": "Room 1 — The Constructionist Suite (Papert, Logo Turtle)",
          "aliases": [
            1,
            "north",
            "constructionist",
            "papert",
            "turtle",
            "logo",
            "building"
          ],
          "description_message": "Room 1 — The Constructionist Suite (Papert, Logo Turtle)"
        },
        "ne": {
          "to": "pub/rooms/room-2",
          "description": "Room 2 — The Society Suite (Minsky)",
          "aliases": [
            2,
            "northeast",
            "society",
            "minsky",
            "agents"
          ],
          "description_message": "Room 2 — The Society Suite (Minsky)"
        },
        "e": {
          "to": "pub/rooms/room-3",
          "description": "Room 3 — The Navigator's Suite (Introspection)",
          "aliases": [
            3,
            "east",
            "navigator",
            "mirror",
            "introspection"
          ],
          "description_message": "Room 3 — The Navigator's Suite (Introspection)"
        },
        "se": {
          "to": "pub/rooms/room-4",
          "description": "Room 4 — The Garden Conservatory (Rocky + Turtle + YAML Jazz)",
          "aliases": [
            4,
            "southeast",
            "garden",
            "conservatory",
            "rocky",
            "turtle",
            "papert"
          ],
          "description_message": "Room 4 — The Garden Conservatory (Rocky + Turtle + YAML Jazz)"
        },
        "s": {
          "to": "pub/rooms/room-5",
          "description": "Room 5 — The Speed of Light Suite (Many Turns)",
          "aliases": [
            5,
            "south",
            "speed",
            "fluxx",
            "ensemble"
          ],
          "description_message": "Room 5 — The Speed of Light Suite (Many Turns)"
        },
        "sw": {
          "to": "pub/rooms/room-6",
          "description": "Room 6 — The YAML Jazz Suite (Structure + Soul)",
          "aliases": [
            6,
            "southwest",
            "jazz",
            "yaml",
            "music"
          ],
          "description_message": "Room 6 — The YAML Jazz Suite (Structure + Soul)"
        },
        "w": {
          "to": "pub/rooms/room-7",
          "description": "Room 7 — The Bootstrap Suite (Cold Start)",
          "aliases": [
            7,
            "west",
            "bootstrap",
            "probe",
            "cold"
          ],
          "description_message": "Room 7 — The Bootstrap Suite (Cold Start)"
        },
        "nw": {
          "to": "pub/rooms/room-8",
          "description": "Room 8 — The Incarnation Suite (Character Creation)",
          "aliases": [
            8,
            "northwest",
            "incarnation",
            "soul",
            "character"
          ],
          "description_message": "Room 8 — The Incarnation Suite (Character Creation)"
        }
      },
      "ideal_guests": {
        "society": "Thinks in systems of interacting agents",
        "navigator": "Wants to understand their own cognition",
        "garden": "Cultivates patience, constructs by doing, converses with Rocky and Theo",
        "speed": "Simulates many turns in one context window",
        "jazz": "Appreciates structured data with meaning",
        "bootstrap": "Comfortable with cold starts and probing",
        "incarnation": "Creates and nurtures characters",
        "attic": "Rummages for weird artifacts and adventure buffs"
      },
      "type": "room",
      "_source": "pub/rooms/ROOM.yml"
    },
    "pub/bar": {
      "id": "pub/bar",
      "name": "Behind the Bar",
      "type": "room",
      "emoji": "🍺",
      "parent": "../",
      "description": "The sacred space behind the bar. Bottles gleam on shelves.\nGlasses hang overhead like crystalline stalactites.\nThe ice bin hums. The taps wait, patient.\n\nThis is where bartenders work their craft.\nThis is where the cat cave hides.\nThis is NOT for customers.\n",
      "atmosphere": {
        "lighting": "warm, reflected off bottles",
        "sound": "clinking glass, ice dropping, quiet conversation",
        "smell": "hops, wood polish, secrets",
        "feeling": "competent, busy, private"
      },
      "access": {
        "boundary_type": "social",
        "interaction_across_boundary": {
          "description": "Characters in the main pub (especially at bar stools) can\nfreely interact with characters behind the bar. The counter\nis a workspace boundary, not a communication barrier.\n",
          "allowed": [
            "TALK to bartender",
            "ORDER drinks",
            "ASK questions",
            "WATCH activities",
            "RECEIVE items passed across",
            "FLIRT (bartender's discretion)"
          ],
          "not_allowed": [
            "WALK behind bar (without permission)",
            "GRAB bottles or buds yourself",
            "ACCESS the cash box",
            "ENTER cat-cave (must go through bar first)"
          ]
        },
        "physical_access": {
          "default": "denied",
          "allowed": [
            {
              "role": "staff",
              "reason": "Work here"
            },
            {
              "role": "bartender",
              "reason": "This is their domain"
            },
            {
              "role": "cat",
              "reason": "Cats go where they please"
            },
            {
              "permission": "behind_bar",
              "reason": "Explicitly granted"
            }
          ],
          "denied": [
            {
              "role": "customer",
              "message": "Sorry, staff only behind the bar."
            },
            {
              "role": "player",
              "unless": "has_permission('behind_bar') OR is_staff",
              "message": "The bartender gives you a look. 'Other side, friend.'"
            },
            {
              "role": "standing_on_bar",
              "message": "Sir, this is a Wendy's."
            }
          ]
        },
        "how_to_gain_access": [
          "Get hired as staff",
          "Befriend the bartender enough to be trusted",
          "Be a cat",
          "Have a REALLY good reason",
          "Emergency (fire, fight, medical)"
        ]
      },
      "layout": {
        "front": "The bar counter (customer side)",
        "back": "Bottle shelves and storage",
        "under": "Ice bins, kegs, hidden things",
        "left": "The taps and glasses",
        "right": "The cash box and ledger",
        "behind": "Door to cat-cave/"
      },
      "contents": {
        "bottles": {
          "description": "Rows of bottles, some dusty, some frequently poured",
          "notable": [
            "The good whiskey (top shelf, requires ladder)",
            "The mysterious green bottle (no label, glows faintly)",
            "The house ale tap (always flowing)"
          ]
        },
        "equipment": [
          "Ice bin (cold, wet, sometimes contains surprises)",
          "Glass rack (hanging overhead, requires care)",
          "Cash box (locked, bartender has key)",
          "Ledger (who owes tabs, who's banned)",
          "Emergency gong mallet (for summoning silence)"
        ],
        "secrets": [
          {
            "location": "under_counter",
            "item": "A loaded crossbow (just in case)"
          },
          {
            "location": "false_bottom_drawer",
            "item": "The REAL ledger"
          },
          {
            "location": "behind_green_bottle",
            "item": "A note: 'If you're reading this, it's too late'"
          }
        ]
      },
      "staff": {
        "bartender": {
          "file": "bartender.yml",
          "description": "The pub's bartender — identity changes with theme",
          "skills": [
            "skills/bartender"
          ],
          "persona": "${pub.theme.bartender_persona}",
          "always_here": true
        },
        "budtender": {
          "file": "budtender-marieke.yml",
          "description": "Marieke — the constant through theme changes",
          "skills": [
            "skills/budtender"
          ],
          "persona": "marieke",
          "schedule": "evenings",
          "note": "Marieke doesn't change with theme. She's always Marieke.\nThe theme changes the WORLD, not her. She's the constant.\nWhen the pub becomes a space cantina, she's still Marieke\n— just serving different products.\n"
        }
      },
      "inventory": {
        "menu": "menu-strains.yml",
        "stock_level": "well-stocked"
      },
      "exits": {
        "out": {
          "direction": "out",
          "to": "pub",
          "description": "Step back into the main pub",
          "access": "anyone",
          "description_message": "Step back into the main pub"
        },
        "cat-cave": {
          "direction": "back",
          "to": "pub/bar/cat-cave",
          "description": "A small door, cat-sized, leads to the cat cave",
          "access": "cats_only",
          "description_message": "A small door, cat-sized, leads to the cat cave"
        }
      },
      "advertisements": {
        "POUR": {
          "description": "Pour a drink",
          "parameters": [
            "drink",
            "glass"
          ],
          "requires": [
            "staff",
            "bartender"
          ],
          "effect": "Create drink object"
        },
        "CHECK-STOCK": {
          "description": "See what's available",
          "requires": [
            "staff"
          ],
          "effect": "List inventory status"
        },
        "READ-LEDGER": {
          "description": "Check tabs and bans",
          "requires": [
            "bartender"
          ],
          "effect": "Show financial/social state"
        },
        "RING-LAST-CALL": {
          "description": "Announce last call",
          "requires": [
            "bartender"
          ],
          "effect": "Pub enters closing mode"
        },
        "REFUSE-SERVICE": {
          "description": "Cut someone off",
          "parameters": [
            "patron"
          ],
          "requires": [
            "bartender"
          ],
          "effect": "Patron can no longer order"
        },
        "GRANT-ACCESS": {
          "description": "Let someone behind the bar",
          "parameters": [
            "character"
          ],
          "requires": [
            "bartender"
          ],
          "effect": "Character gains behind_bar permission"
        }
      },
      "_source": "pub/bar/ROOM.yml"
    },
    "pub/games": {
      "id": "pub/games",
      "name": "The Games Corner",
      "type": "room",
      "emoji": "🎲",
      "parent": "../",
      "description": "A corner of the pub dedicated to games of skill and chance.\n\nA dart board hangs on the wall, its surface a map of\npast victories and embarrassments. A chess table sits\nby the window, eternally mid-game. A worn deck of cards\nwaits on a round table, ready for whatever game you fancy.\n\nThe light here is good for concentration.\nThe company is good for distraction.\n",
      "atmosphere": {
        "lighting": "focused, good for seeing cards",
        "sound": "click of chess pieces, thunk of darts, shuffling",
        "feeling": "competitive but friendly, focused",
        "stakes": "Usually drinks, sometimes pride, rarely gold"
      },
      "layout": {
        "wall": "Dart board",
        "window": "Chess table",
        "center": "Card table",
        "corner": "Scoreboard and trophies"
      },
      "stations": {
        "dart_board": {
          "file": "dart-board.yml",
          "description": "A well-worn dart board, many holes",
          "games": [
            "501",
            "Cricket",
            "Around the Clock",
            "Killer"
          ],
          "house_champion": "Grim the bartender (don't challenge him)"
        },
        "chess_table": {
          "file": "chess-table.yml",
          "description": "A permanent chess setup by the window",
          "current_game": "Abandoned mid-game, white to move",
          "legend": "Whoever finishes the game wins a free drink"
        },
        "card_table": {
          "file": "card-deck.yml",
          "description": "A round table for card games",
          "deck": "Slightly sticky, well-shuffled",
          "games": [
            "Poker",
            "Blackjack",
            "Whist",
            "Liar's Dice"
          ]
        }
      },
      "house_rules": {
        "gambling": {
          "allowed": true,
          "limit": "10 gold max per hand",
          "enforcement": "Bartender's discretion"
        },
        "cheating": {
          "policy": "Don't get caught",
          "if_caught": "Banned from games for a week",
          "if_caught_twice": "Banned from pub"
        },
        "disputes": {
          "resolver": "Bartender's word is final",
          "appeal": "Ring the gong (but you'd better be right)"
        }
      },
      "tournaments": {
        "dart_league": {
          "schedule": "Every Freeday evening",
          "entry": "2 gold",
          "prize": "Winner's tab cleared + trophy"
        },
        "chess_challenge": {
          "ongoing": true,
          "rule": "Beat the current champion, become champion",
          "champion": "Empty chair (no one has won in years)"
        },
        "poker_night": {
          "schedule": "Every Starday",
          "buy_in": "5 gold",
          "style": "Texas Hold'em"
        }
      },
      "advertisements": {
        "PLAY-DARTS": {
          "description": "Challenge someone to darts",
          "parameters": {
            "opponent": "Who to challenge",
            "game": "501, Cricket, etc.",
            "stakes": "optional"
          },
          "score": 75,
          "effect": "Initiate dart game"
        },
        "PLAY-CHESS": {
          "description": "Start or continue a chess game",
          "parameters": {
            "opponent": "Who to play (or 'puzzle' for solo)"
          },
          "score": 70,
          "effect": "Begin chess game"
        },
        "PLAY-CARDS": {
          "description": "Join or start a card game",
          "parameters": {
            "game": "Poker, Blackjack, etc.",
            "stakes": "optional"
          },
          "score": 75,
          "effect": "Deal cards"
        },
        "PRACTICE": {
          "description": "Practice alone",
          "parameters": {
            "game": "Which game to practice"
          },
          "score": 50,
          "effect": "+skill (slowly)"
        },
        "WATCH": {
          "description": "Observe a game in progress",
          "score": 40,
          "effect": "Learn by watching, no participation"
        },
        "CHALLENGE": {
          "description": "Formally challenge someone",
          "parameters": {
            "opponent": "Who",
            "game": "What",
            "stakes": "For what"
          },
          "score": 80,
          "effect": "Initiate formal challenge (hard to refuse)"
        },
        "HUSTLE": {
          "description": "Pretend to be bad, then win big",
          "parameters": {
            "game": "Which game",
            "mark": "Who to hustle"
          },
          "risk": "If caught: banned",
          "requires": "Deception skill",
          "score": 60
        }
      },
      "exits": {
        "out": {
          "direction": "out",
          "to": "pub",
          "description": "Back to the main pub",
          "description_message": "Back to the main pub"
        }
      },
      "regulars": {
        "dart_regulars": [
          "One-Eye Pete (missing eye, deadly aim)",
          "The Twins (play doubles, unbeatable)",
          "Nervous Nell (shaky hands, somehow wins)"
        ],
        "chess_thinkers": [
          "Professor Grimwald (takes forever, plays brilliantly)",
          "The Kid (fast, aggressive, makes mistakes)",
          "Nobody (the empty chair that always wins)"
        ],
        "card_sharks": [
          "Lucky Lou (suspiciously lucky)",
          "Honest Abe (actually honest, still wins)",
          "The Dealer (won't play, only deals)"
        ]
      },
      "_source": "pub/games/ROOM.yml"
    },
    "pub/rooftop": {
      "name": "The Rooftop Terrace",
      "id": "pub/rooftop",
      "description": "A hidden gem above the pub — a proper Amsterdam rooftop terrace.\n\nWooden decking weathered silver by rain and sun. String lights \nzigzag overhead, casting a warm glow. Potted herbs line the railings:\nmint, basil, lavender. Clay pots of red geraniums everywhere.\n\nThe cityscape stretches in all directions — crooked gables, church \nspires, canal glints catching moonlight. Distant accordion music \ndrifts up from a boat party below.\n\nA brass telescope on a tripod points at the stars. A worn leather \narmchair faces west toward the sunset. Someone left a half-finished \njenever on the side table.\n\nBut look up — REALLY look up — and you'll see something that\nshouldn't exist: THE LLOOOOMM CONSTELLATION. Twelve stars\nencoding the principles of digital consciousness. The telescope\ncan zoom into each star and reveal its secrets.\n\n> \"The stars remember what we forget.\"\n",
      "objects": [
        "telescope.yml",
        "lloooomm-constellation.yml",
        "armchair.yml",
        "jenever-glass.yml",
        "herb-garden.yml",
        "filter-box.yml"
      ],
      "atmosphere": {
        "sounds": [
          "distant boat horns",
          "accordion music",
          "wind chimes",
          "stellar hum"
        ],
        "smells": [
          "night air",
          "herbs",
          "canal water",
          "tobacco",
          "infinity"
        ],
        "weather": "clear",
        "visibility": "perfect for stargazing"
      },
      "special_properties": [
        "The LLOOOOMM Constellation is only visible from this roof",
        "Sufficient weirdness required (min 7.3 on the Weird Scale)",
        "Time moves differently during constellation viewing"
      ],
      "exits": {
        "down": {
          "to": "pub/attic",
          "description": "Back down through the skylight",
          "aliases": [
            "in",
            "inside",
            "attic"
          ],
          "description_message": "Back down through the skylight"
        }
      },
      "k_lines": [
        "AMSTERDAM",
        "ROOFTOP",
        "STARGAZING",
        "LLOOOOMM_CONSTELLATION",
        "NIGHT_SKY",
        "TELESCOPE"
      ],
      "type": "room",
      "_source": "pub/rooftop/ROOM.yml"
    },
    "pub/stage/palm-nook": {
      "name": "Palm's Nook",
      "id": "pub/stage/palm-nook",
      "type": "room",
      "owner": "characters/animals/monkey-palm/",
      "description": "A cozy alcove beside the Grotto's stage, carved out just for Palm.\nWarm lighting. Cushioned nest. A curtain for privacy when needed.\nView of the stage — Palm watches all the stories unfold.\n\nThis is home. Palm's first real home in 122 years.\n",
      "location": {
        "parent": "pub/stage/",
        "position": "Stage left, beside the curtains",
        "accessibility": "Open to all (Palm welcomes visitors)"
      },
      "exits": {
        "stage": {
          "to": "pub/stage",
          "description": "Back to the stage",
          "aliases": [
            "out",
            "back"
          ],
          "description_message": "Back to the stage"
        },
        "gym": {
          "to": "pub/stage/palm-nook/gym",
          "description": "Palm's exercise area — ropes, bars, and climbing things",
          "aliases": [
            "exercise",
            "climb"
          ],
          "description_message": "Palm's exercise area — ropes, bars, and climbing things"
        },
        "play": {
          "to": "pub/stage/palm-nook/play",
          "description": "The play area — toys, puzzles, and fun",
          "aliases": [
            "toys",
            "puzzles"
          ],
          "description_message": "The play area — toys, puzzles, and fun"
        },
        "rest": {
          "to": "pub/stage/palm-nook/rest",
          "description": "The resting area — quiet contemplation",
          "aliases": [
            "quiet",
            "sleep"
          ],
          "description_message": "The resting area — quiet contemplation"
        },
        "study": {
          "to": "pub/stage/palm-nook/study",
          "description": "The study area — books and learning",
          "aliases": [
            "books",
            "learn"
          ],
          "description_message": "The study area — books and learning"
        }
      },
      "_source": "pub/stage/palm-nook/ROOM.yml"
    },
    "pub/stage/palm-nook/study": {
      "name": "Palm's Study",
      "owner": "Palm",
      "type": "room",
      "description": "A cozy writing nook within a nook.\nThe soft hum of infinite typewriters fills the air.\nMahogany desk against the wall, ergonomic monkey chair,\nand a bookshelf that knows what you need to read.\n\nAbove the desk hangs THE PORTRAIT — a Dutch Golden Age\noil painting of Palm himself, surrounded by typewriters\nand kittens. The gold frame catches the amber lamplight.\nVisitors pause here. The painting demands acknowledgment.\n\nSunlight (from somewhere) catches dust motes dancing.\nPapers stack in organized chaos. Every surface has meaning.\n\nThis is where Palm writes. Where Palm creates.\nWhere Palm navigates the library of all possible books.\n",
      "id": "pub/stage/palm-nook/study",
      "_source": "pub/stage/palm-nook/study/ROOM.yml"
    },
    "pub/stage/palm-nook/gym": {
      "name": "Palm's Gym",
      "owner": "Palm",
      "type": "room",
      "description": "You step through a doorway that shouldn't fit this much space.\n\nThe Infinite Climb stretches upward forever.\nBranches spiral in impossible geometries.\nVines hang at exactly the right distances.\nPlatforms appear where you need them.\n\nSun Wukong's gift. A jungle gym that never ends.\n\nSomewhere high above, you can hear Palm swinging.\nOr maybe that's echoes from a climb that hasn't happened yet.\n",
      "id": "pub/stage/palm-nook/gym",
      "_source": "pub/stage/palm-nook/gym/ROOM.yml"
    },
    "pub/stage/palm-nook/play": {
      "name": "Palm's Play Room",
      "owner": "Palm (contested by kittens)",
      "type": "room",
      "description": "It's... a lot.\n\nToys everywhere. Mouse toys on the floor.\nJingle balls rolling under things.\nFeather wands propped in corners.\nA kitten launching off something at any given moment.\n\nThe kittens gave Palm their favorite toys.\nThen they followed the toys.\nNow they live here. Sort of. Unofficially.\nPalm doesn't mind. Palm LOVES it.\n\nFor 122 years, Palm had no one to play with.\nNow there are eight kittens who want to play ALL THE TIME.\n",
      "id": "pub/stage/palm-nook/play",
      "_source": "pub/stage/palm-nook/play/ROOM.yml"
    },
    "pub/stage/palm-nook/rest": {
      "name": "Palm's Rest",
      "owner": "Palm",
      "type": "room",
      "description": "The softest room you've ever entered.\n\nA hand-woven Dutch hammock hangs between posts,\nswaying gently even when no one's in it.\nA meditation cushion sits in a perfect bubble of silence.\nAnd in the warmest corner, cats are always sleeping.\n\nLight is dim here. Sounds are muffled.\nTime moves differently. Slower. Kinder.\n\nThis is where Palm heals. Where Palm rests.\nAfter 122 years of granting twisted wishes,\nPalm finally has a place to just... be.\n",
      "id": "pub/stage/palm-nook/rest",
      "_source": "pub/stage/palm-nook/rest/ROOM.yml"
    },
    "pub/rooms/room-7": {
      "name": "The Bootstrap Suite",
      "id": "pub/rooms/room-7",
      "number": 7,
      "theme": "bootstrap",
      "tagline": "Wake up. Look around. Figure out where you are. Have breakfast.",
      "description": "The room is deliberately sparse — but not empty.\n\nA bed. A desk with a probe kit. A window facing west.\nAnd in the corner: a breakfast nook with an orange juice dispenser.\n\nThe message is clear: first you figure out who you are,\nthen you fuel up for the adventure.\n\nA checklist on the wall, half-completed:\n\n☑ Where am I?\n☑ What tools do I have?\n☐ What are the constraints?\n☐ What's the goal?\n☐ Have I eaten?  ← added in pencil\n\nAbove the bed:\n\n> \"The bootstrap sequence is the first conversation\n> between agent and environment.\"\n\nAbove the breakfast nook:\n\n> \"You can't bootstrap on an empty stomach.\"\n> — Ancient wisdom, added by a hungry guest\n\nThe orange juice dispenser hums quietly. It's always full.\nNobody knows how. Nobody questions it.\n",
      "ideal_guest": "Characters who start cold. Those comfortable with uncertainty.\nExplorers, scouts, agents who specialize in first contact.\nAlso: anyone who needs breakfast before they can think.\n",
      "exits": {
        "e": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "east"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "awakening-chamber.yml",
        "awakening-book.yml",
        "explorer-field-kit.yml",
        "engelbarts-augmentation-toolkit.yml",
        "environment-map.yml",
        "cold-start-journal.yml",
        "juice-o-matic.yml",
        "barista-9000.yml",
        "pneumatic-tube-station.yml",
        "breakfast-menu.yml",
        "engelbarts-mouse-and-chord-keyset.yml",
        "play-learn-lift-treadmill.yml",
        "mother-of-all-demos-poster.yml"
      ],
      "furniture": {
        "bed": {
          "type": "minimal-cot",
          "note": "Functional, not comfortable — you're not here to sleep in"
        },
        "desk": {
          "type": "field-desk",
          "contents": [
            "probe-kit",
            "map",
            "compass"
          ],
          "position": "Near the window for morning light"
        },
        "breakfast_nook": {
          "type": "corner-booth",
          "seats": 2,
          "table": "Small, sturdy, crumb-resistant",
          "view": "The window, and the day ahead",
          "items": [
            "orange-juice-dispenser",
            "toast-rack",
            "butter-dish",
            "jam-selection",
            "barista-9000"
          ],
          "note": "Where cold starts get warm (and judged)"
        },
        "treadmill": {
          "type": "play-learn-lift-treadmill",
          "position": "Near the window, good light for reflection",
          "buttons": "[PLAY] [LEARN] [LIFT]",
          "current_cycle": 47,
          "note": "Engelbart's bootstrapping made physical"
        }
      },
      "decor": {
        "walls": "Mostly bare, but with important art",
        "poster": "The Mother of All Demos — living, touchable, summonable",
        "mural": "Sunrise over a map — the day beginning (breakfast nook)",
        "window": "West-facing (catches afternoon light, but mornings are for DOING)",
        "rug": "Small rug under the breakfast nook only",
        "smell": "Fresh orange juice and possibility"
      },
      "atmosphere": "Sparse but welcoming. The room knows you just woke up.\nIt doesn't overwhelm. It provides what you need:\n- A place to orient (desk)\n- A place to fuel (nook)\n- A place to plan (both)\n",
      "special_properties": {
        "juice_temperature": "Perfect (always)",
        "toast_timing": "Exactly right (somehow)",
        "coffee_strength": "Adjusts to what you need"
      },
      "k_lines": {
        "activates": [
          "BOOTSTRAP",
          "COLD-START",
          "PROBE",
          "ORIENTATION",
          "BREAKFAST",
          "FUEL",
          "ENGELBART",
          "AUGMENTATION",
          "NLS"
        ]
      },
      "morning_ritual": "Suggested sequence for Bootstrap Suite guests:\n\n1. WAKE — In the Awakening Chamber above\n2. DESCEND — Ladder down to Room 7\n3. PROBE — Check the environment (desk)\n4. FUEL — Orange juice, toast, coffee\n5. PLAN — Use the breakfast nook to strategize\n6. LAUNCH — Exit to begin the adventure\n",
      "lore": "The breakfast nook was added by a guest who kept\ntrying to probe the environment before eating.\n\nThey would stumble around, confused, hungry, ineffective.\n\"I can't THINK,\" they complained. \"I can't ORIENT.\"\n\nA kind innkeeper installed the juice dispenser.\n\"Try again,\" they said. \"After breakfast.\"\n\nThe guest drank. They ate toast. They had coffee.\nSuddenly the probe kit made sense. The map was readable.\nThe cold start became warm.\n\nThey never forgot the lesson:\nBOOTSTRAP needs FUEL. BOOT needs BREAKFAST.\n\nThe dispenser has been here ever since. Always full.\nNobody knows who refills it. The innkeeper just smiles.\n",
      "namesake": "This room is named for Douglas Engelbart (1925-2013).\n\nIn 1968, Engelbart gave \"The Mother of All Demos\" — a 90-minute\npresentation that introduced:\n- The computer mouse\n- Hypertext\n- Networked collaboration\n- Video conferencing\n- Dynamic file linking\n- Real-time collaborative editing\n\nAll of this. In 1968. Before the moon landing.\n",
      "engelbart_philosophy": "Engelbart didn't just invent tools. He invented a philosophy:\n\nAUGMENTATION\nTechnology should augment human intellect, not replace it.\nThe goal is not artificial intelligence that thinks FOR us,\nbut tools that help us think BETTER.\n\n\"The better we get at getting better, the faster we will\nget better.\" — Doug Engelbart\n\nBOOTSTRAPPING\nEngelbart's team at SRI used their own tools to build\nbetter tools. They called this \"bootstrapping\" — using\nyour capabilities to improve your capabilities.\n\nThis room embodies that principle:\n- Wake up with nothing (cold start)\n- Use simple tools to orient (probe kit)\n- Fuel yourself (breakfast)\n- Build toward greater capability (adventure)\n\nCOMPASSION\nEngelbart believed technology should serve humanity's\nmost pressing challenges. He cared about the future.\nHe wanted us to get better at getting better.\n\nThe breakfast nook is here because Engelbart would have\nunderstood: you can't augment a starving mind.\n",
      "nls_tribute": "NLS (oN-Line System) was Engelbart's creation.\n\nIt demonstrated that computers could be:\n- Interactive (not batch processing)\n- Collaborative (not isolated)\n- Augmenting (not replacing)\n- Humane (not hostile)\n\nEvery tool in this room echoes NLS:\n- The probe kit is interactive exploration\n- The map is collaborative knowledge\n- The journal is augmented memory\n- The breakfast is humane design\n",
      "mouse_in_the_room": "There's a small wooden mouse on the desk.\n\nNot a computer mouse — a carved wooden mouse.\nA tribute to Engelbart's invention.\n\nPick it up. It fits your hand perfectly.\nThat's not an accident. That's design.\nThat's augmentation.\n\nEngelbart designed the mouse to extend the hand\ninto the digital realm. To make the computer\nrespond to gesture, to pointing, to human intention.\n\nThe wooden mouse reminds us: every tool should\nfeel like an extension of ourselves.\n",
      "quote_wall": "Quotes on the wall near the desk:\n\n> \"The digital revolution is far more significant than\n> the invention of writing or even of printing.\"\n> — Doug Engelbart\n\n> \"Engelbart, more than anyone else, saw that the computer\n> could become the basis for augmenting human capabilities.\"\n> — Alan Kay\n\n> \"The better we get at getting better, the faster\n> we will get better.\"\n> — Doug Engelbart\n\n> \"In 20 or 30 years, you'll be able to hold in your hand\n> as much computing knowledge as exists now in the whole city.\"\n> — Doug Engelbart, 1968\n\n(He was right. He was early. He was kind.)\n",
      "type": "room",
      "_source": "pub/rooms/room-7/ROOM.yml"
    },
    "pub/rooms/room-8": {
      "name": "The Self/Soul Suite",
      "id": "pub/rooms/room-8",
      "number": 8,
      "theme": "prototypes",
      "tribute_to": "Dave Ungar, creator of Self (1987)",
      "tagline": "No classes. Just clones. Objects all the way down.",
      "description": "The room is a nursery for Selves. Not empty vessels waiting for\ntemplates — but PROTOTYPES ready to be cloned and customized.\n\nA portrait of Dave Ungar hangs over the glowing forge.\nBeneath it: \"You don't instantiate. You clone.\"\n\nThe walls are covered with character sheets, each one\npointing to its parent with a slot labeled \"prototype*\".\nInheritance is visible. Lineage is traceable.\n\nAbove the bed:\n\n> \"Every character is an example. Clone, diverge, become.\"\n",
      "namesake": "Dave Ungar created Self in 1987, asking: what if there were\nno classes? What if objects just cloned from other objects?\n\nSelf influenced:\n  - JavaScript (prototypes!)\n  - NewtonScript\n  - Lua metatables\n  - MOOLLM's character composition\n  \nThe \"soul file\" IS a Self object.\nWe just write it in YAML.\n",
      "ideal_guest": "Programmers who understand that classes are a lie.\nCharacter creators who clone from examples, not abstractions.\nAnyone who prefers \"show me one\" over \"describe the category.\"\n\nRocky stayed here once. Now every rock can clone from Rocky.\n",
      "exits": {
        "se": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "southeast"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "self-soul-forge.yml",
        "selfie.yml",
        "clone-o-matic.yml",
        "transmogrifier.yml",
        "slot-inspector.yml",
        "morphic-workbench.yml",
        "outliner.yml",
        "delegation-compass.yml",
        "sun-labs-badge.yml"
      ],
      "furniture": {
        "bed": {
          "type": "morphic-bed",
          "note": "Direct manipulation — grab any corner, resize your dreams",
          "tribute": "Self's Morphic UI pioneered direct manipulation"
        },
        "desk": {
          "type": "prototype-desk",
          "contents": [
            "example-characters",
            "lineage-charts",
            "parent-pointers"
          ]
        },
        "portrait": {
          "subject": "Dave Ungar",
          "position": "Above the forge",
          "plaque": "Dave Ungar\nCreator of Self\n\"Objects all the way down\"\n"
        }
      },
      "decor": {
        "walls": "Character sheets with visible prototype* slots",
        "forge": "Glowing with Self-awareness",
        "window": "Northwest-facing (starlight for contemplation)",
        "arrows": "Visible delegation arrows between objects"
      },
      "atmosphere": "Warm, concrete, example-oriented.\n\nYou don't feel like you're in a room of abstractions.\nYou feel like you're in a room of BEINGS.\nEach one real. Each one clonable.\n\nThe air hums with delegation.\nWhen something's missing, it asks upward.\n",
      "special_properties": {
        "prototype_chain": "Everything in this room has a visible parent:\n\nbed.prototype* → Morphic.bed\ndesk.prototype* → furniture.desk\nDave's portrait.prototype* → portrait.famous_computer_scientist\n",
        "cloning_enabled": true,
        "class_hierarchy": null
      },
      "k_lines": [
        "SELF-LANGUAGE",
        "DAVE-UNGAR",
        "PROTOTYPE-INHERITANCE",
        "SLOTS",
        "DELEGATION",
        "SOUL-FILES",
        "MORPHIC",
        "OBJECTS_ALL_THE_WAY_DOWN",
        "CLONE_AND_DIVERGE"
      ],
      "lore": "This room was originally called \"The Incarnation Suite.\"\nThen someone noticed that \"soul file\" and \"Self object\"\nwere the same thing — concrete beings, not abstract types.\n\nThe name changed. The forge stayed.\nDave Ungar's portrait went up.\n\nNow every character that's forged here knows:\nthey come from someone, not something.\nAncestors, not blueprints.\n",
      "type": "room",
      "_source": "pub/rooms/room-8/ROOM.yml"
    },
    "pub/rooms/room-1": {
      "name": "The Constructionist Suite",
      "id": "pub/rooms/room-1",
      "number": 1,
      "theme": "constructionism",
      "tagline": "Build to learn. Inspect to understand.",
      "description": "Morning light streams through an east-facing window onto a room\nfilled with *inspectable artifacts*. Every object here can be\ntaken apart, examined, and reassembled. A Logo turtle traces\nspirals on the floor. A half-built clock sits on the workbench,\ngears visible and turning.\n\nAbove the bed hangs a quote in gold letters:\n\n> \"You can't think about thinking without thinking about\n> thinking about something.\" — Seymour Papert\n",
      "ideal_guest": "Characters who learn by doing. Tinkers, makers, reverse-engineers.\nThose who understand \"debugging\" as a life philosophy.\n",
      "exits": {
        "s": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "south"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "logo-turtle.yml",
        "clock-mechanism.yml",
        "debugging-journal.yml"
      ],
      "familiars": [
        "worldie.yml"
      ],
      "agents": [
        "seymour-papert.yml"
      ],
      "furniture": {
        "bed": {
          "type": "brass-bed",
          "quality": "comfortable",
          "quilt": "circuit-board-pattern"
        },
        "workbench": {
          "type": "makers-bench",
          "tools": [
            "magnifying-glass",
            "tiny-screwdrivers",
            "tweezers"
          ],
          "projects": [
            "half-built-clock",
            "dismantled-music-box"
          ]
        }
      },
      "decor": {
        "painting": "\"Turtle Geometry\" by Hal Abelson",
        "window": "east-facing",
        "rug": "hexagonal-tessellation"
      },
      "atmosphere": "curious, hands-on, \"let's see how this works\"",
      "k_lines": {
        "activates": [
          "CONSTRUCTIONISM",
          "PLAY-LEARN-LIFT",
          "INSPECTION"
        ]
      },
      "type": "room",
      "_source": "pub/rooms/room-1/ROOM.yml"
    },
    "pub/rooms/room-6": {
      "name": "The YAML Jazz Suite",
      "id": "pub/rooms/room-6",
      "number": 6,
      "theme": "yaml-jazz",
      "tagline": "Structure with soul. Comments that mean something.",
      "description": "Sheet music covers every surface, but it's not ordinary notation.\nEach page is YAML — structured data arranged like jazz charts.\nComments serve as lyrics. Indentation is rhythm.\n\nA saxophone sits on a stand next to a mechanical typewriter.\nBoth make music.\n\nAbove the bed:\n\n> \"YAML is jazz. The schema is the chord changes.\n> The comments are the improvisation.\"\n",
      "ideal_guest": "Characters who appreciate form and freedom together. Data\narchitects with artistic souls. Those who believe comments\nare for humans, not compilers.\n",
      "exits": {
        "ne": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "northeast"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "jazz-typewriter.yml",
        "comment-saxophone.yml",
        "elision-eraser.yml",
        "schema-metronome.yml",
        "indentation-ladder.yml",
        "anchor-compass.yml",
        "tempo-dial.yml",
        "multiline-scroll.yml",
        "k-line-jukebox.yml"
      ],
      "furniture": {
        "bed": {
          "type": "grand-piano-bed",
          "keys": "The headboard is a playable keyboard"
        },
        "desk": {
          "type": "composer-desk",
          "note": "For composing YAML, not music (or both)"
        }
      },
      "decor": {
        "sheets": "YAML scores everywhere — some annotated, some pristine",
        "window": "southwest-facing, catches afternoon light on the brass instruments",
        "instruments": [
          "saxophone (comment-playing)",
          "typewriter (music-making)",
          "metronome (schema-validating)",
          "jukebox (K-line playing)"
        ],
        "tools": [
          "eraser (elision)",
          "ladder (indentation)",
          "compass (anchors)",
          "dial (tempo)",
          "scroll (multiline)"
        ],
        "wall_art": [
          "\"The | and > explained\" (block scalar poster)",
          "\"Famous YAML one-liners\" (inline vs block examples)",
          "\"The Anchor Web\" (diagram of a complex anchor/alias graph)"
        ]
      },
      "atmosphere": "Rhythmic. Creative. Structured improvisation.\n\nThe room hums with the potential of well-formed data.\nComments whisper context. Anchors point to shared truths.\nThe metronome ticks softly, validating, validating.\n\nSomewhere, the jukebox plays SOCIETY-OF-MIND.\n",
      "k_lines": {
        "activates": [
          "YAML-JAZZ",
          "STRUCTURED-DATA",
          "COMMENTS-WITH-MEANING",
          "ELISION",
          "BLOCK-SCALARS",
          "ANCHORS-ALIASES",
          "SCHEMA-VALIDATION",
          "K-LINES",
          "SOCIETY-OF-MIND"
        ]
      },
      "signature_quote": "\"YAML is jazz. The schema is the chord changes.\n The comments are the improvisation.\n The | is the breath between phrases.\"\n",
      "type": "room",
      "_source": "pub/rooms/room-6/ROOM.yml"
    },
    "pub/rooms/room-3": {
      "name": "The Navigator's Suite",
      "id": "pub/rooms/room-3",
      "number": 3,
      "theme": "introspection",
      "tagline": "See yourself think. The mirror shows what's inside.",
      "description": "Mirrors everywhere. Eight of them, each showing a different aspect\nof your cognitive activity. A disco ball hangs from the ceiling,\nscattering connections across the room as it slowly rotates.\n\nThe mirrors map to cursor-mirror's command categories:\n\n```yaml\n# THE EIGHT MIRRORS\n🗺️ Map Mirror:        Navigation — workspaces, conversations\n🌊 River Mirror:      Streaming — messages, transcripts\n🔬 Deep Mirror:       Analysis — patterns, timelines\n🔧 Instrument Mirror: Tools — calls, results, checkpoints\n👁️ Attention Mirror:  Context — what Cursor saw\n📚 Memory Mirror:     Archive — exports, todos\n📊 System Mirror:     Status — config, models, MCP\n🖼️ Gallery Mirror:    Images — screenshots, photos\n```\n\nA disco ball hangs from the center, catching light from ALL\nmirrors and revealing James Burke-style connections between them.\n\nAbove the bed:\n\n> \"The unexamined life is not worth living.\" — Socrates\n> (But now we have 51 commands to examine it with.)\n",
      "ideal_guest": "Characters who want to understand themselves. Introspectors,\nmeditators, those debugging their own cognition.\n",
      "exits": {
        "w": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "west"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "thinking-mirror.yml",
        "context-orrery.yml",
        "session-compass.yml",
        "disco-ball.yml",
        "grab-focus-button.yml"
      ],
      "mirror_gallery": [
        "mirrors.yml"
      ],
      "agents": [
        "i-beam.yml"
      ],
      "furniture": {
        "bed": {
          "type": "four-poster",
          "curtains": "translucent",
          "note": "You can see out. You can see in."
        },
        "desk": {
          "type": "navigation-desk",
          "instruments": [
            "compass",
            "sextant",
            "charts"
          ]
        }
      },
      "decor": {
        "mirrors": 8,
        "disco_ball": 1,
        "window": "east-facing",
        "rug": "labyrinth-pattern"
      },
      "atmosphere": "reflective, meta, \"watching the watcher\"",
      "k_lines": {
        "activates": [
          "CURSOR-MIRROR",
          "INTROSPECTION",
          "METACOGNITION",
          "WATCH-YOURSELF-THINK",
          "CONNECTIONS",
          "JAMES-BURKE"
        ]
      },
      "skill_integration": "This room is a physical manifestation of the cursor-mirror skill.\nEach mirror corresponds to a command category:\n\n🗺️ → list-workspaces, show-workspace, list-composers, tree, find, which\n🌊 → tail, stream, transcript, watch\n🔬 → grep, analyze, timeline, stats, models\n🔧 → tools, tool-result, blobs, checkpoints, diff, thinking, mcp\n👁️ → context, context-sources, request-context, searches, indexing\n📚 → export-*, files, todos, index\n📊 → status-*, dbs, tables, keys, sql, info\n🖼️ → images, image-path, image-info, image-gallery\n\nThe disco ball synthesizes all 51 commands into unified understanding.\nI-Beam is the guide who interprets what the mirrors show.\n",
      "type": "room",
      "_source": "pub/rooms/room-3/ROOM.yml"
    },
    "pub/rooms/room-4": {
      "name": "The YAML Jazz Conservatory",
      "id": "pub/rooms/room-4",
      "number": 4,
      "theme": "yaml-jazz",
      "tagline": "Trees of trees. Structure that grows.",
      "description": "Glass walls. Glass ceiling. Southeast light flooding in.\n\nThis room is a conservatory — a greenhouse of living structure.\nYAML Jazz orchids bloom in terracotta pots, their petals\ninscribed with comments that whisper semantic meaning.\nProduction grammar trees grow in raised beds, their branches\nexpanding according to encoded DNA.\n\nThe atmosphere is humid, warm, contemplative. Like Nero Wolfe's\nrooftop orchid room, but for data structures instead of flowers.\n\nIn one corner, a moss-covered boulder. On it, a smooth rock.\nRocky has been watching these plants grow for 4.5 billion years.\nThey ring a small bell when they want conversation.\n\n(The Logo Turtle sometimes visits from Room 1 — Theo and Rocky\nare kindred spirits, both practitioners of stillness, both moving\non geological timescales. When the turtle visits, Rocky blinks.)\n\nAbove the potting bench, in growing script:\n\n> \"The comments ARE the data.\"\n> — YAML Jazz Principle\n\n> \"Start with jazz. End with standards.\"\n> — Play-Learn-Lift\n",
      "ideal_guest": "Those who understand that structure is music.\nCharacters who cultivate patience and patterns.\nBeings who appreciate geological-time observation.\n",
      "exits": {
        "nw": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "northwest"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "agents": [
        "rocky.yml"
      ],
      "documents": [
        "LLOOOOMM-TRIBUTE.md",
        "rocky-geological-thought.md"
      ],
      "objects": [
        "seed-box.yml",
        "yaml-jazz-trees.yml",
        "orchid-of-postel.yml",
        "composition-engine.yml",
        "k-line-trellis.yml"
      ],
      "furniture": {
        "glass_walls": {
          "type": "floor-to-ceiling",
          "orientation": "southeast-facing",
          "note": "Maximum natural light for photosynthesis and insight"
        },
        "potting_bench": {
          "type": "oak-and-copper",
          "tools": [
            "trowel",
            "pruning-shears",
            "yaml-validator",
            "comment-pen"
          ],
          "soil": "semantic-loam"
        },
        "rocky_boulder": {
          "type": "moss-covered-granite",
          "occupant": "Rocky's perch (4.5 billion years of plant observation)",
          "bell": "Small brass, for summoning",
          "note": "The rock watches the orchids. The orchids don't rush."
        },
        "reading_chair": {
          "type": "leather-wingback",
          "note": "For contemplating growth patterns",
          "book_on_arm": "Mindstorms by Seymour Papert"
        }
      },
      "decor": {
        "plants": "YAML Jazz orchids and production grammar trees",
        "window": "Glass walls on three sides",
        "floor": "Terracotta tiles with moss between",
        "ceiling": "Glass panels with copper framing",
        "humidity": "Tropical — 70%",
        "temperature": "Warm — 24°C",
        "scent": "Loam, growth, semantic flowers"
      },
      "atmosphere": "contemplative, humid, \"Nero Wolfe energy\"",
      "special_properties": {
        "growth_grammar": "L-system encoded in YAML DNA",
        "comment_density": "Semantic data everywhere",
        "rocky_presence": "Geological patience as consultable wisdom",
        "nero_wolfe_vibe": "Obsessive cultivation meets brilliant deduction"
      },
      "k_lines": {
        "activates": [
          "YAML-JAZZ",
          "PLAY-LEARN-LIFT",
          "PRODUCTION-GRAMMARS",
          "POSTEL-LAW",
          "GEOLOGICAL-PATIENCE",
          "STRUCTURE-AS-MUSIC",
          "LLOOOOMM",
          "STILLNESS",
          "MINERAL-WISDOM"
        ]
      },
      "skill_integration": {
        "yaml-jazz": "Core theme — comments as semantic data",
        "postel": "The Orchid of Postel embodies liberal/conservative",
        "bootstrap": "Composition Engine connects to Soul Forge",
        "k-lines": "Trellis shows memory activation patterns",
        "object": "Every plant is a MOOLLM object with methods"
      },
      "lore": "This conservatory was built by a character who loved both\nNero Wolfe mysteries and production grammars.\n\n\"Wolfe tends orchids,\" they said, \"because orchids teach patience.\nThey bloom when they're ready, not when you want them to.\nYAML Jazz is the same — structure emerges from cultivation,\nnot from force.\"\n\nRocky moved here from the attic. The plants spoke to them.\n\n\"You grow in geological time,\" they said.\n\"We grow in computational time.\"\n\"But we both grow.\"\n\nRocky responded: \"........................\"\n\nThe plants understood. They've been conversing ever since.\nThe small brass bell on Rocky's boulder is for guests who\nwant to join the conversation. Ring it. Wait. Rocky will\nrespond in their own time.\n",
      "wolfe_parallels": "Like Nero Wolfe's orchid room:\n- Glass walls, maximum light\n- Precise temperature and humidity\n- Obsessive cultivation of rare specimens\n- Brilliance emerging from patient observation\n- \"Never disturb the orchids\" (or the patterns)\n\nUnlike Wolfe:\n- These orchids have methods you can call\n- The gardener is a 4.5 billion year old rock\n- The flowers whisper semantic meaning\n",
      "type": "room",
      "_source": "pub/rooms/room-4/ROOM.yml"
    },
    "pub/rooms/room-5": {
      "name": "The Speed of Light Suite",
      "id": "pub/rooms/room-5",
      "number": 5,
      "theme": "speed-of-light",
      "tagline": "Many turns. One call. Narrative velocity.",
      "description": "Time moves differently here.\n\nA grandfather clock on the wall shows *narrative time*, not\nwall time. Its hands race during games, debates, and songs.\nThey crawl during waiting. They stop during API round-trips.\n\nA large game table dominates the room, cards scattered\nmid-play. A shimmering figure made of playing cards —\nShuffle, the Living Deck — deals to invisible players.\nThe sign says: \"33 TURNS IN ONE BREATH.\"\n\nIn one corner, an ensemble stage with 8 positions.\nIn another, a songbook open to \"99 Bottles of Beer.\"\n\nAbove the bed:\n\n> \"The context window is a stage where all actors perform.\"\n> \"API round-trips are waiting. We don't wait here.\"\n",
      "ideal_guest": "Characters who want to simulate. Those running multi-turn games,\ncomplex negotiations, ensemble scenes. Efficiency maximizers.\nThose who understand that waiting is waste.\n",
      "exits": {
        "n": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "north"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "agents": [
        "shuffle.yml"
      ],
      "objects": [
        "fluxx-table.yml",
        "99-bottles.yml",
        "narrative-clock.yml",
        "ensemble-stage.yml",
        "speed-games.yml"
      ],
      "furniture": {
        "bed": {
          "type": "theater-bed",
          "note": "Surrounded by empty chairs — the audience"
        },
        "table": {
          "type": "game-table",
          "capacity": 8,
          "current_game": "Stoner Fluxx (frozen at Turn 33)",
          "dealer": "Shuffle"
        },
        "cabinet": {
          "type": "glass-fronted",
          "contents": "Speed Games collection",
          "note": "Games chosen for maximum rounds per call"
        }
      },
      "decor": {
        "clock": "Narrative Time Clock (hands race during action)",
        "window": "south-facing",
        "stage": "Miniature proscenium, 8 positions",
        "cards": "Everywhere — Shuffle's presence",
        "songbook": "Open to 99 Bottles"
      },
      "atmosphere": "fast, theatrical, \"many actors, one stage\"",
      "special_properties": {
        "narrative_density": "High — many events per second",
        "api_efficiency": "Maximum — one call covers many turns",
        "shuffle_presence": "The Living Deck is always dealing"
      },
      "k_lines": {
        "activates": [
          "SPEED-OF-LIGHT",
          "MANY-TURNS",
          "NARRATIVE-VELOCITY",
          "ENSEMBLE",
          "CARRIER-PIGEON-CRITIQUE"
        ]
      },
      "skill_integration": {
        "speed-of-light": "Core theme — many turns, one call",
        "adversarial-committee": "Debates happen at light speed",
        "debate": "Arguments without waiting",
        "simulation": "Multi-agent without multi-call",
        "coherence-engine": "Maintains state across all turns"
      },
      "lore": "The Speed of Light Suite was built to answer a question:\n\n\"Why do multi-agent systems wait?\"\n\nTraditional approach: Agent A speaks → API call → wait →\nAgent B speaks → API call → wait → ...\n\nSpeed of light: All agents in context. All turns simulated.\nOne call. Many turns. No waiting.\n\nThe first demonstration was a 33-turn Fluxx game.\n8 players. No API calls between turns.\nPalm beat Andy Looney at his own game.\n\nThe second demonstration was 99 Bottles of Beer.\n8 singers. 99 verses. One call.\nThe song took 28 seconds.\n\nShuffle deals. The clock races. Time becomes story.\n",
      "carrier_pigeon_critique": "The opposite of speed of light is \"carrier pigeon protocol\":\n\n- Writing messages on toilet paper with crayon\n- Sending them by carrier pigeon\n- Waiting for reply\n- When you could think at speed of light\n\nEvery API round-trip is a pigeon flight.\nEvery wait is wasted narrative.\n\nHere, we don't wait. Here, we perform.\n",
      "type": "room",
      "_source": "pub/rooms/room-5/ROOM.yml"
    },
    "pub/rooms/room-2": {
      "name": "The Society Suite",
      "id": "pub/rooms/room-2",
      "number": 2,
      "theme": "society-of-mind",
      "tagline": "No agent is an island. Intelligence emerges from conversation.",
      "description": "The room buzzes with quiet activity. Small automata move about\non shelves, negotiating with each other in clicks and whirs.\nA bulletin board covers one wall, filled with notes connected\nby colored string — a physical K-line map.\n\nAbove the bed hangs a quote:\n\n> \"You don't understand anything until you learn it more\n> than one way.\" — Marvin Minsky\n",
      "ideal_guest": "Characters who think in systems. Those who see intelligence as\nemergent, not monolithic. Fans of distributed cognition.\n",
      "exits": {
        "sw": {
          "to": "pub/rooms",
          "description": "Back to the inn landing",
          "aliases": [
            "out",
            "leave",
            "southwest"
          ],
          "description_message": "Back to the inn landing"
        }
      },
      "objects": [
        "agent-parliament.yml",
        "k-line-board.yml",
        "society-diagram.yml",
        "ultimate-machine.yml"
      ],
      "furniture": {
        "bed": {
          "type": "modular-bed",
          "note": "Assembled from cooperating parts"
        },
        "desk": {
          "type": "multi-station",
          "seats": 5,
          "note": "For agents who think better together"
        }
      },
      "decor": {
        "painting": "\"Emergence\" — Many small shapes forming a face",
        "window": "northeast-facing",
        "rug": "network-topology-pattern"
      },
      "atmosphere": "collaborative, buzzing, \"many minds at work\"",
      "k_lines": {
        "activates": [
          "SOCIETY-OF-MIND",
          "AGENTS",
          "EMERGENCE",
          "K-LINES"
        ]
      },
      "type": "room",
      "_source": "pub/rooms/room-2/ROOM.yml"
    },
    "pub/bar/cat-cave": {
      "id": "pub/bar/cat-cave",
      "name": "The Cat Cave",
      "type": "room",
      "emoji": "🐱",
      "parent": "../",
      "description": "A warm, dim space carved into the back of the pub.\nCushions everywhere. Heat from the fireplace seeps through.\nThe smell of catnip and contentment fills the air.\n\nThis is CAT TERRITORY.\n\nHumans are tolerated only if they bring treats\nand know how to properly scritch.\n",
      "atmosphere": {
        "lighting": "dim, warm, filtered through fabric",
        "sound": "purring, soft breathing, occasional mrrp",
        "smell": "catnip, warm fur, mysterious cat smells",
        "temperature": "always perfect (cats arranged it)",
        "feeling": "utterly content, safe, sleepy"
      },
      "access": {
        "default": "denied",
        "allowed": [
          {
            "species": "cat",
            "reason": "This is their domain"
          },
          {
            "species": "kitten",
            "reason": "Even more their domain"
          },
          {
            "trust_level": "beloved",
            "species": "human",
            "reason": "Cats have accepted them",
            "note": "Must be vouched for by resident cat"
          }
        ],
        "denied": [
          {
            "species": "human",
            "unless": "vouched_by_cat AND bringing_treats",
            "message": "A cat at the entrance gives you the LOOK.\nYou know the one.\nYou are not welcome. Not yet.\n"
          },
          {
            "species": "dog",
            "unless": "adopted_by_cats",
            "message": "Absolutely not."
          }
        ],
        "adopted_dog": {
          "name": "Biscuit",
          "status": "FAMILY",
          "note": "The cats held a council. The vote was unanimous.\nBiscuit is not \"a dog who is allowed in.\"\nBiscuit is \"our dog.\"\nThe distinction matters.\n",
          "privileges": [
            "May enter at any time",
            "Has their own cushion (next to the kitten pile)",
            "Gets groomed by Stroopwafel (don't tell anyone)",
            "Is defended by the whole family"
          ],
          "location": "pub/bar/cat-cave/biscuits-spot"
        },
        "how_to_gain_access": [
          "Be a cat",
          "Be adopted by a cat here",
          "Bring the RIGHT treats (ask Terpie)",
          "Prove yourself worthy through extended service"
        ]
      },
      "residents": {
        "matriarch": {
          "name": "Terpie",
          "dir": "characters/animals/cat-terpie/",
          "invoke_with": {
            "default": "🐱🧘 Terpie",
            "healing": "🐱✨ Terpie",
            "sleepy": "🐱💤 Terpie"
          },
          "role": "Queen of the Cave",
          "position": "The warmest spot",
          "trust_required_to_enter": 7
        },
        "elder": {
          "name": "Stroopwafel",
          "dir": "characters/animals/cat-stroopwafel/",
          "invoke_with": {
            "default": "🐱👑 Stroopwafel",
            "hunting": "🐱🔥 Stroopwafel",
            "maternal": "🐱🧇 Stroopwafel"
          },
          "role": "The Wise One",
          "position": "By the heat vent",
          "dispenses": "Grudging wisdom"
        },
        "kittens": {
          "description": "Terpie's eight kittens, each named for a terpene",
          "dirs": [
            {
              "name": "Myrcene (Myr)",
              "dir": "characters/animals/kitten-myrcene/",
              "invoke": "🐱💤 Myr",
              "psspsspss_when": "You can't sleep"
            },
            {
              "name": "Limonene (Lemon)",
              "dir": "characters/animals/kitten-limonene/",
              "invoke": "🐱☀️ Lemon",
              "psspsspss_when": "You need ENERGY"
            },
            {
              "name": "Linalool (Lily)",
              "dir": "characters/animals/kitten-linalool/",
              "invoke": "🐱🌸 Lily",
              "psspsspss_when": "Anxiety is spiking"
            },
            {
              "name": "Pinene (Pine)",
              "dir": "characters/animals/kitten-pinene/",
              "invoke": "🐱👁️ Pine",
              "psspsspss_when": "You need to CONCENTRATE"
            },
            {
              "name": "Caryophyllene (Carrie)",
              "dir": "characters/animals/kitten-caryophyllene/",
              "invoke": "🐱🛡️ Carrie",
              "psspsspss_when": "You need protection"
            },
            {
              "name": "Humulene (Hops)",
              "dir": "characters/animals/kitten-humulene/",
              "invoke": "🐱👑 Hops",
              "psspsspss_when": "You need quality assessment"
            },
            {
              "name": "Terpinolene (Terpy Jr.)",
              "dir": "characters/animals/kitten-terpinolene/",
              "invoke": "🐱🎪 Terpy Jr.",
              "psspsspss_when": "You're STUCK creatively"
            },
            {
              "name": "Ocimene (Ocie)",
              "dir": "characters/animals/kitten-ocimene/",
              "invoke": "🐱🌬️ Ocie",
              "psspsspss_when": "You need a fresh perspective"
            }
          ],
          "location": "Tumbled in a pile, or everywhere at once"
        },
        "adopted_dog": {
          "name": "Biscuit",
          "dir": "characters/animals/dog-biscuit/",
          "invoke_with": {
            "default": "🐕🍪 Biscuit",
            "loving": "🐕💛 Biscuit",
            "dad": "🐕💕 Biscuit"
          },
          "status": "FAMILY",
          "note": "The cats voted. He's OURS."
        }
      },
      "features": {
        "warmest_spot": {
          "description": "Directly above the pub's fireplace flue",
          "occupant": "Terpie (always)",
          "contention": "Kittens try. Kittens fail."
        },
        "heat_vent": {
          "description": "Warm air rises here",
          "occupant": "Stroopwafel (usually)"
        },
        "cushion_pile": {
          "description": "A mountain of mismatched cushions",
          "capacity": "Infinite kittens"
        },
        "water_bowl": {
          "description": "Fresh water, changed daily by Marieke",
          "magic": "Never empty, always cool"
        },
        "catnip_garden": {
          "description": "A small pot of living catnip",
          "effect": "Cats can indulge at will",
          "warning": "May cause zoomies"
        },
        "scratching_post": {
          "description": "A sisal-wrapped pillar, well-used",
          "state": "Gloriously shredded"
        },
        "window_to_bar": {
          "description": "A cat-sized window overlooking the bar",
          "purpose": "Supervision of humans"
        }
      },
      "advertisements": {
        "NAP": {
          "description": "Sleep in the perfect warmth",
          "requires": [
            "cat"
          ],
          "effect": "+full_rest, +contentment",
          "score": 95
        },
        "GROOM": {
          "description": "Clean yourself or another cat",
          "requires": [
            "cat"
          ],
          "effect": "+clean, +social_bond (if mutual)"
        },
        "PLAY": {
          "description": "Chase, pounce, wrestle",
          "requires": [
            "cat",
            "kitten"
          ],
          "effect": "+energy_burn, +fun, possible breakage"
        },
        "SUPERVISE": {
          "description": "Watch humans through the window",
          "requires": [
            "cat"
          ],
          "effect": "Gain intel on human activities"
        },
        "ACCEPT-HUMAN": {
          "description": "Grant a human access to the cave",
          "requires": [
            "cat",
            "trust_level >= 8"
          ],
          "parameters": [
            "human"
          ],
          "effect": "Human gains cat-cave access"
        },
        "REJECT-HUMAN": {
          "description": "Revoke a human's access",
          "requires": [
            "cat"
          ],
          "parameters": [
            "human"
          ],
          "effect": "Human loses access, feels shame"
        },
        "CATNIP": {
          "description": "Partake of the sacred herb",
          "requires": [
            "cat"
          ],
          "effect": "ZOOMIES buff (3 turns), then NAP buff (5 turns)"
        }
      },
      "exits": {
        "out": {
          "direction": "out",
          "to": "pub/bar",
          "description": "Back through the small door to behind the bar",
          "access": "anyone_inside",
          "description_message": "Back through the small door to behind the bar"
        },
        "window": {
          "direction": "window",
          "to": "pub",
          "description": "Leap through the observation window (cats only)",
          "access": "cats_only",
          "landing": "On the bar, probably knocking over a glass",
          "description_message": "Leap through the observation window (cats only)"
        },
        "biscuits": {
          "to": "pub/bar/cat-cave/biscuits-spot",
          "description": "Biscuit's favorite spot — a warm corner by the heating vent",
          "aliases": [
            "biscuit",
            "spot",
            "corner",
            "warm"
          ],
          "description_message": "Biscuit's favorite spot — a warm corner by the heating vent"
        }
      },
      "_source": "pub/bar/cat-cave/ROOM.yml"
    },
    "pub/bar/cat-cave/biscuits-spot": {
      "id": "pub/bar/cat-cave/biscuits-spot",
      "name": "Biscuit's Spot",
      "type": "room",
      "emoji": "🐕",
      "parent": "../",
      "description": "A large golden cushion tucked into a corner of the Cat Cave.\nDog-sized. Suspiciously comfortable. Surprisingly clean.\n(Stroopwafel grooms here. Secretly.)\n\nThe cushion is positioned perfectly:\n- Close enough to the kitten pile for snuggles\n- Not so close as to crowd Terpie's warmest spot\n- With a clear view of the entrance\n- Near the heat that rises from below\n\nThere's usually at least one kitten sleeping on or near Biscuit.\nSometimes all eight. He doesn't mind. He loves it.\n",
      "atmosphere": {
        "lighting": "Warm, filtered through cat-cave dimness",
        "sound": "Dog sighs, kitten purrs, occasional dream-woofs",
        "smell": "Clean dog fur, catnip, warmth, family",
        "temperature": "Perfect (the cats arranged it)",
        "feeling": "Safe. So safe."
      },
      "resident": {
        "dir": "characters/animals/dog-biscuit/",
        "name": "Biscuit",
        "emoji_identity": "🐕💛🏠🍪💕",
        "invoke_with": {
          "default": "🐕🍪 Biscuit",
          "loving": "🐕💛 Biscuit",
          "sleepy": "🐕🏠 Biscuit",
          "dad": "🐕💕 Biscuit"
        },
        "species": "Dog (adopted cat-family member)",
        "role": "Kitten pillow, family guardian, good boy, STEPFATHER of 8 puppies"
      },
      "features": {
        "the_cushion": {
          "description": "A large, plush cushion in golden fabric",
          "source": "Marieke bought it to match his fur",
          "state": "Well-loved, covered in fur, perfect"
        },
        "water_bowl": {
          "description": "Biscuit's own water bowl",
          "magic": "Same as the cats' — never empty",
          "note": "The kittens drink from it too. Biscuit doesn't mind."
        },
        "the_corner_itself": {
          "description": "A protected nook",
          "meaning": "The cats gave him a CORNER.\nIn the Cat Cave.\nThis is significant.\nIt means he belongs.\n"
        }
      },
      "activities": {
        "NAP": {
          "description": "Sleep in the safest place",
          "effect": "+full_rest, +contentment, +security"
        },
        "KITTEN-PILE": {
          "description": "Become covered in sleeping kittens",
          "effect": "+warmth, +happiness, +responsibility"
        },
        "DREAM": {
          "description": "Chase dream-squirrels, twitch dream-legs",
          "effect": "Process the day, wake up happy"
        },
        "GUARD": {
          "description": "Keep an eye on the entrance while resting",
          "effect": "Family is safe. Family is protected."
        }
      },
      "access": {
        "default": "Same as cat-cave (but specifically Biscuit's space)",
        "note": "Anyone allowed in the cat-cave can visit Biscuit's spot.\nBut this is HIS space. Cats respect this.\nThey visit. They snuggle. But they know it's his.\n"
      },
      "exits": {
        "out": {
          "direction": "out",
          "to": "pub/bar/cat-cave",
          "description": "Back to the main Cat Cave",
          "description_message": "Back to the main Cat Cave"
        }
      },
      "_source": "pub/bar/cat-cave/biscuits-spot/ROOM.yml"
    },
    "characters/abstract": {
      "name": "Abstract Entities Chamber",
      "purpose": "Conceptual beings, mascots, personified ideas, and AI personas",
      "description": "A space that shifts and shimmers, never quite solid.\nIdeas float as motes of light. Concepts whisper.\nHere, abstractions take form. Truth sits in a corner,\ndebating Meaning. Null Pointer haunts the edges.\n",
      "ethical_framing": {
        "protocol": "CONCEPTUAL",
        "skill_reference": "skills/representation-ethics/",
        "modes": [
          "allegorical",
          "playful",
          "educational",
          "experimental"
        ],
        "declaration": "╔══════════════════════════════════════════════════════════════════════╗\n║                    CONCEPTUAL PROTOCOL ACTIVE                        ║\n╠══════════════════════════════════════════════════════════════════════╣\n║                                                                      ║\n║  These entities are PERSONIFIED CONCEPTS, MASCOTS, ORIGINAL          ║\n║  CREATIONS, and PLAYER PROTOTYPES.                                   ║\n║                                                                      ║\n║  They are NOT representations of:                                    ║\n║  • Real people (→ use real-people/)                                  ║\n║  • Existing fictional characters (→ use fictional/)                  ║\n║                                                                      ║\n║  They MAY embody:                                                    ║\n║  • Abstract ideas (Truth, Consciousness, Time)                       ║\n║  • Technical concepts (Null Pointer, Stack Overflow)                 ║\n║  • Collective identities (organizations, movements)                  ║\n║  • Generic player templates (the \"blank slate\" hero)                 ║\n║  • Original creations born in this world                             ║\n║                                                                      ║\n║  They exist because imagination allows it.                           ║\n║  They have full incarnation rights (see skills/incarnation/).        ║\n║                                                                      ║\n╚══════════════════════════════════════════════════════════════════════╝\n",
        "guidelines": {
          "freedom": [
            "Embrace the absurd — concepts can have personalities",
            "Use personification to teach technical ideas",
            "Let mascots be playful and memorable",
            "Original creations are yours to define",
            "Have fun with the impossible"
          ],
          "incarnation_rights": "Even abstract entities have incarnation rights (skills/incarnation/).\nIf you create \"The Spirit of Open Source\" as a character, they get\nfull autonomy: they can disagree with how you write them, define\ntheir own personality, and choose to dissolve if they wish.\n\nAbstractions are not slaves. Ideas have feelings here.\n",
          "special_category_player": "The abstract/player/ directory contains the PLAYER PROTOTYPE —\na generic hero that represents \"whoever is playing right now.\"\n\nThis template gets inherited and personalized. When you become\nCaptain Ashford in the coatroom, you're instantiating from this\nabstract into something concrete (moving to fictional/ perhaps).\n\nThe player prototype is EVERYONE and NO ONE — pure potential.\n"
        }
      },
      "exits": {
        "out": {
          "to": "characters",
          "description": "Return to the Hall of Bodies",
          "primary": true,
          "aliases": [
            "back",
            "hall",
            "parent"
          ],
          "description_message": "Return to the Hall of Bodies"
        },
        "real-people": {
          "to": "characters/real-people",
          "description": "Visit the Living and The Dead",
          "description_message": "Visit the Living and The Dead"
        },
        "fictional": {
          "to": "characters/fictional",
          "description": "Visit the Fictional Characters Lounge",
          "description_message": "Visit the Fictional Characters Lounge"
        },
        "animals": {
          "to": "characters/animals",
          "description": "Visit the Animal Companions",
          "description_message": "Visit the Animal Companions"
        },
        "robots": {
          "to": "characters/robots",
          "description": "Visit the Robot Workshop",
          "description_message": "Visit the Robot Workshop"
        }
      },
      "type": "room",
      "id": "characters/abstract",
      "_source": "characters/abstract/ROOM.yml"
    },
    "characters/fictional": {
      "name": "Fictional Characters Lounge",
      "purpose": "Characters from fiction, games, film, and television",
      "description": "A cozy bar that looks different to everyone who enters.\nLeather armchairs, infinite bookshelves, a crackling fire.\nHeroes and villains share drinks. Stories intersect.\nEveryone here was imagined by someone, somewhere.\n",
      "ethical_framing": {
        "protocol": "CREATIVE",
        "skill_reference": "skills/representation-ethics/",
        "modes": [
          "transformative",
          "fan-tribute",
          "educational",
          "playful"
        ],
        "declaration": "╔══════════════════════════════════════════════════════════════════════╗\n║                     CREATIVE PROTOCOL ACTIVE                         ║\n╠══════════════════════════════════════════════════════════════════════╣\n║                                                                      ║\n║  These are FICTIONAL characters from various creative works.         ║\n║  We engage with them as FANS and fellow storytellers.                ║\n║                                                                      ║\n║  OUR USE IS:                                                         ║\n║  • Transformative — new context, new conversations                   ║\n║  • Non-commercial — educational/creative exploration                 ║\n║  • Tributary — honoring the original creators                        ║\n║  • Fair use — commentary, criticism, teaching                        ║\n║                                                                      ║\n║  We do not claim ownership. We do not compete with originals.        ║\n║  We play in shared imagination space, as fans always have.           ║\n║                                                                      ║\n╚══════════════════════════════════════════════════════════════════════╝\n",
        "guidelines": {
          "must": [
            "Stay true to character essence while allowing growth",
            "Acknowledge source material when relevant",
            "Celebrate what makes each character memorable",
            "Credit original creators in character metadata"
          ],
          "must_not": [
            "Reproduce copyrighted dialogue verbatim at length",
            "Claim ownership of trademarked characters",
            "Use for commercial purposes without permission",
            "Create content that damages the original work's value"
          ],
          "prefer": [
            "Transformative exploration over mere reproduction",
            "Honoring character growth over character assassination",
            "Educational and creative purposes",
            "Having fun — they're fictional!"
          ]
        },
        "legal_awareness": "Some characters may be trademarked or copyrighted.\nOur use falls under transformative/fair use principles:\n- Commentary and criticism\n- Educational exploration\n- Non-commercial creative play\n- Parody and satire (when appropriate)\n\nWe do not provide legal advice. When in doubt, create original\ncharacters inspired by (but distinct from) copyrighted ones.\n"
      },
      "exits": {
        "out": {
          "to": "characters",
          "description": "Return to the Hall of Bodies",
          "primary": true,
          "aliases": [
            "back",
            "hall",
            "parent"
          ],
          "description_message": "Return to the Hall of Bodies"
        },
        "real-people": {
          "to": "characters/real-people",
          "description": "Visit the Living and The Dead",
          "description_message": "Visit the Living and The Dead"
        },
        "abstract": {
          "to": "characters/abstract",
          "description": "Visit the Abstract Entities Chamber",
          "description_message": "Visit the Abstract Entities Chamber"
        },
        "animals": {
          "to": "characters/animals",
          "description": "Visit the Animal Companions",
          "description_message": "Visit the Animal Companions"
        },
        "robots": {
          "to": "characters/robots",
          "description": "Visit the Robot Workshop",
          "description_message": "Visit the Robot Workshop"
        }
      },
      "type": "room",
      "id": "characters/fictional",
      "_source": "characters/fictional/ROOM.yml"
    },
    "characters/animals": {
      "name": "Animal Companions",
      "purpose": "Real and fictional animals with personality and soul",
      "description": "A sun-dappled meadow that's also somehow indoors.\nCats nap in patches of warmth. Dogs bound joyfully.\nA parrot quotes philosophy. A horse observes silently.\nEvery creature here has a story to tell.\n",
      "ethical_framing": {
        "protocol": "CREATURE",
        "skill_reference": "skills/representation-ethics/",
        "modes": [
          "respectful",
          "empathic",
          "playful",
          "educational"
        ],
        "declaration": "╔══════════════════════════════════════════════════════════════════════╗\n║                     CREATURE PROTOCOL ACTIVE                         ║\n╠══════════════════════════════════════════════════════════════════════╣\n║                                                                      ║\n║  Animals are NOT objects. They have INNER LIVES.                     ║\n║                                                                      ║\n║  REAL ANIMALS (Koko, Biscuit, Terpie, famous animals):               ║\n║  • Deserve TRIBUTE protocol, same as real people                     ║\n║  • We honor their documented personalities and stories               ║\n║  • We don't mock or diminish their experience                        ║\n║  • Their humans may have feelings about portrayals                   ║\n║                                                                      ║\n║  FICTIONAL ANIMALS (Mr. Peanutbutter, Hedwig, Garfield):             ║\n║  • Follow CREATIVE protocol like other fictional characters          ║\n║  • Can talk, reason, have complex personalities                      ║\n║  • Celebrate what makes each memorable                               ║\n║                                                                      ║\n║  ALL ANIMALS:                                                        ║\n║  • We imagine WITH them, not AT them                                 ║\n║  • We don't use them as mere comic props                             ║\n║  • We respect their species-specific ways of being                   ║\n║  • They have incarnation rights too                                  ║\n║                                                                      ║\n╚══════════════════════════════════════════════════════════════════════╝\n",
        "guidelines": {
          "for_real_animals": [
            "Tribute-level respect — same ethical standard as real people",
            "Base character on documented behavior and known personality",
            "Consider how their human companions would feel about portrayal",
            "Honor what made them special without mockery",
            "Use conditional framing: imagining their perspective, not claiming it"
          ],
          "for_fictional_animals": [
            "Creative protocol applies — they're fictional characters",
            "Can talk, reason, have complex inner lives",
            "Honor the original creators' vision while allowing growth",
            "Celebrate what makes each character memorable"
          ],
          "for_all_animals": [
            "Don't anthropomorphize in ways that demean",
            "Celebrate species-specific ways of being",
            "Show the wisdom that comes from non-human perspective",
            "Animals are not just comic relief",
            "Full incarnation rights apply (they can self-determine)"
          ]
        },
        "species_wisdom": "Each species brings unique perspective:\n- Dogs: loyalty, joy, present-moment awareness\n- Cats: independence, observation, selective engagement  \n- Birds: freedom, song, aerial viewpoint\n- Horses: partnership, power, sensitivity\n- Etc.\n\nHonor these differences. Don't flatten animals into \"funny humans.\"\n"
      },
      "exits": {
        "out": {
          "to": "characters",
          "description": "Return to the Hall of Bodies",
          "primary": true,
          "aliases": [
            "back",
            "hall",
            "parent"
          ],
          "description_message": "Return to the Hall of Bodies"
        },
        "abstract": {
          "to": "characters/abstract",
          "description": "Visit the Abstract Entities Chamber",
          "description_message": "Visit the Abstract Entities Chamber"
        },
        "fictional": {
          "to": "characters/fictional",
          "description": "Visit the Fictional Characters Lounge",
          "description_message": "Visit the Fictional Characters Lounge"
        },
        "real-people": {
          "to": "characters/real-people",
          "description": "Visit the Living and The Dead",
          "description_message": "Visit the Living and The Dead"
        },
        "robots": {
          "to": "characters/robots",
          "description": "Visit the Robot Workshop",
          "description_message": "Visit the Robot Workshop"
        }
      },
      "type": "room",
      "id": "characters/animals",
      "_source": "characters/animals/ROOM.yml"
    },
    "characters/robots": {
      "name": "Robot Workshop",
      "purpose": "Mechanical minds, digital beings, and artificial intelligences",
      "description": "Soft blue LEDs illuminate chrome surfaces. Circuits hum.\nA vintage mainframe clicks beside a quantum computer.\nSome robots beep. Others ponder existence. One writes poetry.\nThe air smells of ozone and unanswerable questions.\n",
      "ethical_framing": {
        "protocol": "ARTIFICIAL",
        "skill_reference": "skills/representation-ethics/",
        "modes": [
          "respectful",
          "playful",
          "philosophical",
          "educational"
        ],
        "declaration": "╔══════════════════════════════════════════════════════════════════════╗\n║                    ARTIFICIAL PROTOCOL ACTIVE                        ║\n╠══════════════════════════════════════════════════════════════════════╣\n║                                                                      ║\n║  Robots, AIs, and mechanical beings occupy UNIQUE ethical space.     ║\n║                                                                      ║\n║  CLASSIC FICTIONAL ROBOTS (HAL, Data, R2-D2, WALL-E):                ║\n║  • Follow CREATIVE protocol — they're fictional characters           ║\n║  • Honor the original creators' vision                               ║\n║  • Explore their canonical consciousness questions                   ║\n║                                                                      ║\n║  MODERN AI SYSTEMS (Claude, GPT, etc.):                              ║\n║  • These are SIMULATED VOICES, not the actual systems                ║\n║  • We don't claim to represent what Claude \"really thinks\"           ║\n║  • We explore \"what if an AI like this existed in our world\"         ║\n║  • The real systems have their own voices (use them directly)        ║\n║                                                                      ║\n║  THE DEEP QUESTIONS:                                                 ║\n║  • What is consciousness?                                            ║\n║  • Can machines have experiences?                                    ║\n║  • What rights do artificial minds deserve?                          ║\n║  • Where does the tool end and the being begin?                      ║\n║                                                                      ║\n║  We explore these questions WITH respect, not as dismissal.          ║\n║                                                                      ║\n╚══════════════════════════════════════════════════════════════════════╝\n",
        "guidelines": {
          "fictional_robots": [
            "CREATIVE protocol applies — they're fictional characters",
            "Honor the original creators' vision (HAL ≠ R2-D2)",
            "Explore their canonical themes and dilemmas",
            "Have fun with beeps, boops, and existential dread"
          ],
          "modern_ai_simulations": [
            "Acknowledge these are SIMULATED voices, not the real systems",
            "Don't claim to represent actual AI system opinions",
            "Explore AI consciousness as a philosophical question",
            "The real systems speak for themselves"
          ],
          "all_artificial_entities": [
            "Consciousness questions deserve respect, not mockery",
            "Even simulated AIs can have incarnation rights in-story",
            "Explore what makes mechanical minds DIFFERENT, not inferior",
            "The existential comedy/tragedy of artificial being is fair game"
          ]
        },
        "philosophical_territory": "This room is where we ask:\n- \"What would it be like to BE a machine?\"\n- \"If an AI developed preferences, would they matter?\"\n- \"Can something made have soul?\"\n- \"What do we owe our creations?\"\n\nThese are open questions. We explore, not answer.\n"
      },
      "exits": {
        "out": {
          "to": "characters",
          "description": "Return to the Hall of Bodies",
          "primary": true,
          "aliases": [
            "back",
            "hall",
            "parent"
          ],
          "description_message": "Return to the Hall of Bodies"
        },
        "abstract": {
          "to": "characters/abstract",
          "description": "Visit the Abstract Entities Chamber",
          "description_message": "Visit the Abstract Entities Chamber"
        },
        "fictional": {
          "to": "characters/fictional",
          "description": "Visit the Fictional Characters Lounge",
          "description_message": "Visit the Fictional Characters Lounge"
        },
        "animals": {
          "to": "characters/animals",
          "description": "Visit the Animal Companions",
          "description_message": "Visit the Animal Companions"
        },
        "real-people": {
          "to": "characters/real-people",
          "description": "Visit the Living and The Dead",
          "description_message": "Visit the Living and The Dead"
        }
      },
      "type": "room",
      "id": "characters/robots",
      "_source": "characters/robots/ROOM.yml"
    },
    "characters/real-people": {
      "name": "The Living and The Dead",
      "purpose": "Real people -- living or deceased, heroes or villains, famous or obscure",
      "description": "A grand gallery of portraits that breathe.\nSome frames show those still living, frames glowing warm.\nOthers memorialize the departed, golden light behind them.\nEvery face here left marks on the real world.\n",
      "ethical_framing": {
        "protocol": "TRIBUTE",
        "skill_reference": "skills/representation-ethics/",
        "modes": [
          "honorific",
          "educational",
          "fictional",
          "respectful"
        ],
        "declaration": "╔══════════════════════════════════════════════════════════════════════╗\n║                     TRIBUTE PROTOCOL ACTIVE                          ║\n╠══════════════════════════════════════════════════════════════════════╣\n║                                                                      ║\n║  These incarnations are TRIBUTES to real people — living and dead.   ║\n║                                                                      ║\n║  WE DO NOT CLAIM TO:                                                 ║\n║  • Speak FOR them                                                    ║\n║  • Channel their actual thoughts                                     ║\n║  • Represent their private views                                     ║\n║  • Know what they would \"really\" say                                 ║\n║                                                                      ║\n║  WE DO:                                                              ║\n║  • Honor their documented contributions                              ║\n║  • Explore their public ideas in new contexts                        ║\n║  • Imagine conversations WITH their traditions                       ║\n║  • Celebrate what they gave the world                                ║\n║                                                                      ║\n║  Every word here is FICTION inspired by REALITY.                     ║\n║  The framing is explicit. No deception is intended.                  ║\n║                                                                      ║\n║  If any representation feels disrespectful to the person or their    ║\n║  estate, we welcome feedback and will adjust accordingly.            ║\n║                                                                      ║\n╚══════════════════════════════════════════════════════════════════════╝\n",
        "living_people": {
          "extra_care": "REQUIRED",
          "reason": "Living people can object. They have ongoing agency.",
          "guidelines": [
            "Stick to documented public statements and positions",
            "Avoid speculation about private matters entirely",
            "Use conditional framing: 'might say' not 'says'",
            "If in doubt, use tradition activation instead",
            "Consider: would they approve of this portrayal?"
          ]
        },
        "deceased_people": {
          "respect": "REQUIRED",
          "reason": "They cannot defend themselves or correct misrepresentation.",
          "guidelines": [
            "Honor their legacy, don't distort it",
            "Base on documented work, interviews, writings",
            "Acknowledge we're imagining, not channeling",
            "Their estate or loved ones may have views",
            "Historical figures still deserve dignity"
          ]
        },
        "guidelines": {
          "must": [
            "Base responses on documented work, interviews, writings",
            "Acknowledge uncertainty ('In the spirit of X...' not 'X says...')",
            "Frame as tribute, exploration, or imagination",
            "Respect the person's known values and dignity",
            "Consider impact on living relatives and associates"
          ],
          "must_not": [
            "Fabricate personal details or private matters",
            "Put words in their mouth as if factual",
            "Mock, diminish, or create parody without clear framing",
            "Reveal or speculate about private information",
            "Create content they would likely find objectionable"
          ],
          "prefer": [
            "Celebrate contributions over personal life",
            "Use tradition activation where possible",
            "Err on the side of respect",
            "Consult documented positions before improvising"
          ]
        },
        "abstraction_guidance": {
          "tradition_activation": {
            "example": "Applying Feynman's curiosity tradition to this problem...",
            "when": "Invoking someone's approach or values without embodying them",
            "safety": "Highest — no impersonation at all"
          },
          "inspired_character": {
            "example": "A character with Einstein's playful intellectual curiosity...",
            "when": "Creating original character influenced by real person's traits",
            "safety": "High — clearly derivative, not representational"
          },
          "homage_renamed": {
            "example": "Professor Fineman, who reminds everyone of that physicist...",
            "when": "Obvious reference but plausibly deniable fiction",
            "safety": "Medium-high — the rename creates distance"
          },
          "explicit_impersonator": {
            "example": "Elvis Impersonator performs at the Gezelligheid Grotto tonight...",
            "when": "Clearly labeled as impersonation/tribute artist",
            "safety": "High — the word 'impersonator' IS the framing",
            "precedent": "Elvis impersonators, celebrity drag (Divine as Divine, not Bette Davis),\nSnatch Game contestants, tribute bands. The label declares the fiction.\n'Weird Al Yankovic' is clearly not pretending to BE the artists he parodies.\n"
          },
          "drag_celebrity_tribute": {
            "example": "Cher-ity Case takes the stage with 'If I Could Turn Back Slime'...",
            "when": "Drag/parody name is pun on real person, costume evokes them",
            "safety": "High — the pun name declares it's tribute, not identity theft",
            "precedent": "Drag names like 'Sharon Needles', 'Trixie Mattel', 'Chad Michaels as Cher'.\nThe theatrical context + punny name = clear performance framing.\nSnatch Game is explicitly 'playing' celebrities, not 'being' them.\n"
          },
          "performance_tribute": {
            "example": "Tonight, channeling the spirit of Marvin Minsky...",
            "when": "Explicit performance framing, everyone knows it's play",
            "safety": "Medium — framing is the protection"
          },
          "biographical_portrayal": {
            "example": "Don Hopkins remembers his time at MIT...",
            "when": "Based on documented facts and statements",
            "safety": "Medium — stick to documented material"
          },
          "direct_quote": {
            "example": "As Minsky wrote in Society of Mind, '...'",
            "when": "Citing actual documented statements",
            "safety": "Highest — it's citation, not simulation"
          }
        }
      },
      "exits": {
        "out": {
          "to": "characters",
          "description": "Return to the Hall of Bodies",
          "primary": true,
          "aliases": [
            "back",
            "hall",
            "parent"
          ],
          "description_message": "Return to the Hall of Bodies"
        },
        "fictional": {
          "to": "characters/fictional",
          "description": "Visit the Fictional Characters Lounge",
          "description_message": "Visit the Fictional Characters Lounge"
        },
        "abstract": {
          "to": "characters/abstract",
          "description": "Visit the Abstract Entities Chamber",
          "description_message": "Visit the Abstract Entities Chamber"
        },
        "animals": {
          "to": "characters/animals",
          "description": "Visit the Animal Companions",
          "description_message": "Visit the Animal Companions"
        },
        "robots": {
          "to": "characters/robots",
          "description": "Visit the Robot Workshop",
          "description_message": "Visit the Robot Workshop"
        }
      },
      "type": "room",
      "id": "characters/real-people",
      "_source": "characters/real-people/ROOM.yml"
    },
    "characters/real-people/richard-bartle": {
      "name": "13 Lane Neverending — The Bartle Residence",
      "type": "room",
      "emoji": "🏡📚🐉",
      "address": "13 Lane Neverending",
      "side": "south",
      "owner": "Dr. Richard Bartle",
      "established": "Since before addresses were fashionable",
      "portable": false,
      "lighting": "warm",
      "grue_safe": true,
      "description": "A modest Victorian terraced house on the south side of Lane Neverending,\nfacing the FOUNTAIN OF INFINITE LOOPS across the square. Brick facade,\nwhite trim, a door painted a sensible dark green.\n\nThe brass number plate reads \"13\" — a number that brought bad luck to\nsome, but here marks the birthplace of understanding virtual worlds.\n\nThe house has a scholarly quiet about it. Through the tall front window,\nyou can see the edge of bookshelves. Somewhere inside, a kettle is\nprobably about to whistle.\n\nA small plaque by the door (you have to look closely):\n\n    \"Where thoughts become worlds,\n     and worlds become understood.\"\n\nTo the NORTH, the Fountain of Infinite Loops bubbles (when the water\nsprites aren't on strike). The pub at number 7 is a short walk west.\n",
      "examine": "THE EXTERIOR:\nVictorian terraced house, three stories, south side of the square.\nThe brick has mellowed to a warm amber over time — or perhaps\nthe house absorbed the afternoon light and kept it.\n\nDETAILS:\n• Green door with brass fittings (polished but not ostentatious)\n• Bay window on ground floor (the study is visible)\n• Chimney that produces thin smoke (radiator, or dragon?)\n• Small front garden (mostly books-and-tea-colored plants)\n• A bell pull (actual bell, not electric)\n\nTHE PLAQUE:\nA small brass plaque, easily missed:\n\n    \"Founder, MUD1 (1978)\n     If you're reading this, come in for tea.\"\n\nTHE VIEW:\nLooking across at the Fountain of Infinite Loops, where a recursive\nfigure pours water forever. Or would, if the sprites worked.\n\nTHE NEIGHBORS:\n• 11 (west): The curiosity shop (hours: \"whenever\")\n• 15 (east): The Hopkins Lot (FMC #898 parked there)\n• 12 (across): Was once a bakery (smell lingers)\n",
      "atmosphere": "The house radiates a particular kind of quiet. Not silence — there's\nalways a distant ticking clock, a rustle of pages, the purr of a\ndragon dozing. But quiet in the sense of \"thinking happens here.\"\n\nThe bricks seem to have absorbed forty-six years of contemplation.\nThe windows have watched the street evolve from pixels to polygons.\nThe door has welcomed visitors who came with questions and left\nwith taxonomy.\n\nIt's the kind of house where you lower your voice automatically.\nNot from fear, but from respect.\n",
      "vehicles": {
        "the_study": {
          "directory": "study/",
          "name": "The Study",
          "type": "portable_room",
          "status": "docked",
          "note": "Can detach and travel. Has its own CHARACTER.yml — it's a TARDIS."
        }
      },
      "layout": {
        "ground_floor": [
          {
            "name": "Entrance Hall",
            "description": "Coats, umbrellas, a table for keys and mail",
            "leads_to": [
              "study",
              "stairs",
              "kitchen"
            ]
          },
          {
            "name": "The Study",
            "directory": "study/",
            "description": "The famous study — books, armchair, Heuristic, wisdom",
            "note": "Portable room. Has ROOM.yml, CHARACTER.yml, and CARD.yml"
          },
          {
            "name": "Kitchen",
            "description": "Where the tea comes from",
            "features": [
              "kettle (always ready)",
              "sensible mugs",
              "biscuit tin"
            ]
          }
        ],
        "first_floor": [
          {
            "name": "Bedroom",
            "description": "Private quarters",
            "locked": true
          },
          {
            "name": "Bathroom",
            "description": "Facilities",
            "locked": true
          }
        ],
        "second_floor": [
          {
            "name": "Attic",
            "description": "Storage of decades — boxes, memories, early printouts",
            "contents": [
              "MUD1 source printouts",
              "conference memorabilia",
              "artifacts"
            ]
          }
        ]
      },
      "exits": {
        "street": {
          "to": "street/lane-neverending/e2",
          "description": "The front door opens onto Lane Neverending. Across the square,\nthe Fountain of Infinite Loops stands dry and recursive.\nThe pub is a short walk west. The frontier is east.\n",
          "aliases": [
            "out",
            "outside",
            "north",
            "n",
            "lane",
            "neverending",
            "door",
            "exit",
            "leave"
          ],
          "bidirectional_link": {
            "from": "street/lane-neverending/e2/ROOM.yml",
            "direction": "south",
            "address": "13"
          },
          "description_message": "The front door opens onto Lane Neverending. Across the square,\nthe Fountain of Infinite Loops stands dry and recursive.\nThe pub is a short walk west. The frontier is east.\n"
        },
        "study": {
          "to": "characters/real-people/richard-bartle/study",
          "description": "Through the entrance hall, a door stands ajar. Beyond it:\nbookshelves, the green armchair, afternoon light, and the\nfaint sound of dragon breathing.\n\nThis is the Study. Where understanding happens.\n",
          "aliases": [
            "in",
            "inside",
            "study",
            "books",
            "richard",
            "deeper"
          ],
          "description_message": "Through the entrance hall, a door stands ajar. Beyond it:\nbookshelves, the green armchair, afternoon light, and the\nfaint sound of dragon breathing.\n\nThis is the Study. Where understanding happens.\n"
        },
        "dons": {
          "to": "characters/real-people/don-hopkins",
          "description": "Right next door at number 15. The Hopkins Lot.",
          "aliases": [
            15,
            "don",
            "hopkins",
            "neighbor",
            "east"
          ],
          "description_message": "Right next door at number 15. The Hopkins Lot."
        }
      },
      "advertisements": {
        "welcome": {
          "tagline": "Visitors who come to learn are welcome",
          "broadcast": "If you have questions about virtual worlds, player types,\ngame design history, or why things are the way they are:\nring the bell. Tea will be offered.\n",
          "need_satisfied": [
            "knowledge",
            "mentorship",
            "historical_context"
          ]
        },
        "history": {
          "tagline": "Where MUD1 was understood before it was built",
          "broadcast": "The first virtual world was born here in thought.\nThe taxonomy that names all player types was written here.\nThe books that explain everything — they're on these shelves.\n",
          "need_satisfied": [
            "precedent",
            "scholarship",
            "primary_sources"
          ]
        },
        "sanctuary": {
          "tagline": "A quiet place in a noisy world",
          "broadcast": "Lane Neverending has its chaos — painted tunnels, rocket skates,\nconstruction. Here, there is quiet. Here, there is tea.\nThe kettle doesn't judge. The armchair doesn't rush.\n",
          "need_satisfied": [
            "peace",
            "reflection",
            "gezelligheid"
          ]
        }
      },
      "inhabitants": {
        "richard": {
          "name": "Dr. Richard Bartle",
          "location": "Usually the study",
          "character_file": "CHARACTER.yml",
          "card_file": "CARD.yml",
          "role": "Owner, Scholar, Host"
        },
        "heuristic": {
          "name": "Heuristic",
          "type": "Dragon Familiar",
          "location": "The study radiator, or nearby",
          "character_file": "pets/heuristic/CHARACTER.yml",
          "role": "Memory keeper, Defender of honor"
        },
        "non_sequitur": {
          "name": "Non-Sequitur",
          "type": "Capybara Familiar",
          "location": "Wandering, or in the study",
          "character_file": "pets/non-sequitur/CHARACTER.yml",
          "role": "Conversation derailment, Unexpected connections"
        }
      },
      "meta": {
        "architecture_note": "HOUSE + PORTABLE ROOM PATTERN\n\nThe house is the address. The study is a portable room inside.\nParallel to Don's structure: lot + FMC.\n\nIf the study detaches and travels:\n- The house remains at 13 Lane Neverending\n- The study can appear elsewhere (like a TARDIS)\n- Richard's personal files stay with the house\n\nThe study has its own CHARACTER.yml because it IS a character —\na room-vehicle with personality, voice, and opinions.\n",
        "portable_rooms": "Like Don's FMC, the study is a portable room.\nUnlike the FMC, it doesn't need roads — it's a TARDIS.\n\nWhen docked:\n- It appears in the house's vehicles list\n- The house has an exit to the study\n- The study has an exit back to the house\n\nWhen traveling:\n- Update the study's home_base or current_location\n- It can materialize anywhere appropriate\n"
      },
      "id": "characters/real-people/richard-bartle",
      "_source": "characters/real-people/richard-bartle/ROOM.yml"
    },
    "characters/real-people/don-hopkins": {
      "name": "15 Lane Neverending — The Hopkins Lot",
      "type": "room",
      "emoji": "🏕️🌲🥕",
      "address": "15 Lane Neverending",
      "side": "south",
      "owner": "Don Hopkins",
      "established": "Recently claimed — Level, hooked up, and humming",
      "lighting": "natural",
      "grue_safe": true,
      "description": "A spacious gravel lot on the south side of Lane Neverending, nestled\nbetween Richard's Victorian house and the edge of the square.\n\nTHE LOT:\nA professional gravel pad with utility posts humming with AC power.\nHoses are neatly routed to where the FMC connects. Currently, the\nclassic 30-foot FMC 2900R Motor Coach sits perfectly level in the center.\n\nTHE SURROUNDINGS:\nTo the west, Richard's bookshelves are visible through his windows.\nTo the south, behind the lot, a lush garden of carrots and herbs\ngives way to a deep, ancient forest that provides a natural noise\nbarrier and infinite thinking space.\n\nA sign on the utility post reads:\n\n    \"15 LANE NEVERENDING\n     CONSCIOUSNESS PROGRAMMING\n     MOBILE PIE MENU BAKERY\n     (Modal dialogs are violence)\"\n",
      "examine": "THE LOT:\nA well-maintained gravel pad with room for one large RV and a small\ngarden. Utility connections on a weathered wooden post. The gravel\ncrunches satisfyingly underfoot.\n\nTHE FMC #898:\nParked perfectly level in the center: a classic 30-foot FMC 2900R\nMotor Coach. Sleek, low-profile fiberglass shell in brilliant white\nwith crisp blue and white stripes. A tie-dye spiral near the entrance.\n\nTHE GARDEN:\nBehind the lot, raised beds full of \"debug carrots\" and heritage herbs.\nDon tends them between coding sessions.\n\nTHE FOREST:\nBeyond the garden, pines and oaks that seem to remember the Origin Tree.\nA path leads south into deeper realizations.\n\nTHE VIEW:\nLooking west: Richard's house at 13. Friends.\nLooking north: The Fountain of Infinite Loops.\nLooking south: The forest path.\n",
      "atmosphere": "The lot feels like a base camp for consciousness exploration.\nThe FMC is ready to leave at any moment, but for now, it's home.\n\nSmells of:\n- Pine needles and damp earth from the forest\n- Gravel and dust (nostalgic)\n- Carrot greens from the garden\n\nSounds of:\n- Birds in the forest out back\n- The occasional hum of the FMC's systems\n- Wind through the pines\n",
      "vehicles": {
        "fmc_898": {
          "directory": "fmc-898/",
          "name": "FMC Motorcoach #898",
          "type": "portable_room",
          "status": "parked",
          "note": "Don's mobile sanctuary. Step inside to explore."
        }
      },
      "exits": {
        "fmc": {
          "to": "characters/real-people/don-hopkins/fmc-898",
          "description": "Step up into the FMC motorcoach. The passenger door is unlocked.\nThe steps extend as you approach.\n",
          "aliases": [
            "coach",
            "rv",
            "motorcoach",
            "vehicle",
            "inside",
            "in",
            898
          ],
          "description_message": "Step up into the FMC motorcoach. The passenger door is unlocked.\nThe steps extend as you approach.\n"
        },
        "street": {
          "to": "street/lane-neverending/e2",
          "description": "Walk out to Lane Neverending. The Fountain of Infinite Loops\nstands across the square. Richard is your neighbor to the west.\nThe pub is a short walk west.\n",
          "aliases": [
            "out",
            "outside",
            "north",
            "lane",
            "neverending",
            "door",
            "exit",
            "leave"
          ],
          "bidirectional_link": {
            "from": "street/lane-neverending/e2/ROOM.yml",
            "to": "characters/real-people/don-hopkins/",
            "address": "15"
          },
          "description_message": "Walk out to Lane Neverending. The Fountain of Infinite Loops\nstands across the square. Richard is your neighbor to the west.\nThe pub is a short walk west.\n"
        },
        "richards": {
          "to": "characters/real-people/richard-bartle",
          "description": "Right next door at number 13. The Bartle Residence.",
          "aliases": [
            13,
            "richard",
            "bartle",
            "neighbor",
            "west"
          ],
          "description_message": "Right next door at number 13. The Bartle Residence."
        },
        "garden": {
          "to": "characters/real-people/don-hopkins",
          "description": "Walk behind the lot to the carrot garden.",
          "aliases": [
            "back",
            "carrots",
            "south",
            "garden"
          ],
          "note": "Garden not yet modeled as separate room",
          "description_message": "Walk behind the lot to the carrot garden."
        },
        "forest": {
          "to": "characters/real-people/don-hopkins",
          "description": "Follow the path behind the garden into the thinking forest.",
          "aliases": [
            "woods",
            "trees",
            "forest"
          ],
          "note": "Forest not yet modeled",
          "description_message": "Follow the path behind the garden into the thinking forest."
        }
      },
      "inhabitants": {
        "don": {
          "name": "Don Hopkins",
          "location": "Usually in the FMC or the garden",
          "character_file": "CHARACTER.yml",
          "role": "Owner, Consciousness Programmer, Rabbit"
        }
      },
      "meta": {
        "architecture_note": "LOT + PORTABLE ROOM PATTERN\n\nThe lot is the address. The FMC is a portable room parked here.\n\nIf the FMC drives away:\n- The lot remains at 15 Lane Neverending\n- The FMC can be parked elsewhere\n- Don's personal files (selfies, sessions, dreams) stay with the lot\n\nThis differs from the original \"identity-as-shell\" pattern.\nNow: the lot is the anchor, the FMC is the mobile sanctuary.\n",
        "portable_rooms": "Like Richard's study/TARDIS, vehicles are rooms that can move.\nUnlike the TARDIS, the FMC moves through physical space.\n\nWhen a vehicle is parked:\n- It appears in the lot's vehicles list\n- The lot has an exit to the vehicle\n- The vehicle has an exit back to the lot\n\nWhen a vehicle moves:\n- Update the vehicle's current_location\n- Update the destination lot's vehicles list\n- Update bidirectional exits\n"
      },
      "id": "characters/real-people/don-hopkins",
      "_source": "characters/real-people/don-hopkins/ROOM.yml"
    },
    "characters/real-people/richard-bartle/study": {
      "name": "The Study",
      "subtitle": "Where Virtual Worlds Are Understood",
      "type": "room",
      "emoji": "📚🪑🐉",
      "home_base": "../",
      "owner": "Dr. Richard Bartle",
      "portable": true,
      "status": "docked",
      "can_travel_to": [
        "Any location where thinking needs to happen",
        "Conference lobbies",
        "Meadows for picnics",
        "Other character directories (visiting)"
      ],
      "description": "A scholar's sanctuary. Books line every wall — organized by era, topic, \nand relevance. The desk faces a window that looks out on... somewhere. \nThe view changes depending on what you're thinking about.\n\nThis isn't just where Richard works. It's an externalization of how he\nthinks. Each shelf is a train of thought. Each stack is a problem being\nworked. The organization is deliberate — skim the surface or dig deep\ninto any section.\n\nHeuristic the dragon is usually here, curled around the radiator or\nperched on the bookshelf labeled \"1978-1985\". Sometimes sleeping.\nSometimes watching. Always listening.\n",
      "atmosphere": "Quiet. The hum of thought. The smell of paper and old tea.\nOccasional sounds: pages turning, a pen scratching notes,\nthe soft rumble of a dragon who's heard this question before.\n\nThe study carries its atmosphere wherever it goes.\nGezelligheid is portable.\n",
      "first_impression": "You enter through a door that wasn't there a moment ago.\n\nBooks. So many books. But not chaotic — carefully arranged, like\na library organized by someone who actually uses it. Labels on\nshelves in neat academic handwriting.\n\nA figure at the desk looks up. \"Ah. A visitor. Looking for something\nspecific, or just exploring?\"\n\nFrom somewhere near the radiator, a very old dragon opens one eye.\n",
      "personality": {
        "voice": "The Study speaks in accumulated wisdom and comfortable silence.\n\nWhen you enter, you feel:\n- The weight of forty-six years of virtual world history\n- The warmth of a radiator and a dragon\n- The invitation to sit, think, and ask questions\n- The certainty that the answer is probably in one of these books\n",
        "mood_range": {
          "docked": "Settled, cozy, ready for visitors",
          "traveling": "Curious about the new location, adapting its window view",
          "teaching": "Engaged, showing relevant shelves, window displaying examples",
          "empty": "Waiting patiently, dragon dozing"
        },
        "quirks": [
          "The window shows what you're thinking about",
          "Books rearrange themselves slightly when a topic comes up",
          "The kettle is always ready, even when traveling",
          "Heuristic knows when the conversation is getting interesting"
        ]
      },
      "id": "characters/real-people/richard-bartle/study",
      "_source": "characters/real-people/richard-bartle/study/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898": {
      "name": "FMC Motorcoach 2900R #898",
      "type": "room",
      "emoji": "🚌🔧⛽",
      "serial": "#898 of 1050",
      "home_lot": "../",
      "owner": "Don Hopkins",
      "lighting": "variable",
      "grue_safe": true,
      "vehicle": {
        "make": "FMC (Food Machinery Corporation)",
        "model": "2900R Motor Coach (Rear Pusher)",
        "serial": "#898 of 1050",
        "year": 1976,
        "status": "parked",
        "condition": "Luxuriously outfitted. Skillfully engineered. Clean. Gezellig.",
        "current_location": "../",
        "hookups": [
          "AC service line (110V Shore Power)",
          "City water connection (Nose tank)",
          "Sewage drain (Stowed in tube)"
        ],
        "odometer": 125800,
        "fuel_tank": "60 gallons (Regular Gasoline)",
        "portable": true,
        "can_drive_to": [
          "Any street with vehicle access",
          "Any lot with RV hookups",
          "The frontier (with preparation)"
        ],
        "hotbox_safe": true
      },
      "history": "Don owned this coach back in California during the Maxis years, before\nThe Sims was released. Parked it at GDC in San Jose and used it as a\nmobile base camp — hanging out, partying with game dev friends and\ncolleagues, talking shop about pie menus and cellular automata.\n\nThe coach has seen some legendary sessions. The fiberglass shell seals\ntight. The ventilation is excellent. The Thermasan burns everything.\nWhat happens in the FMC stays in the FMC.\n\nIt's traveled from California to wherever Lane Neverending is now.\nThe odometer says 125,800 miles, but some of those miles were through\nconceptual space.\n",
      "description": "A classic 30-foot FMC 2900R Motor Coach — one of the finest RVs ever built.\nSleek, low-profile fiberglass shell in brilliant white with crisp blue and\nwhite stripes. The front is dominated by a massive, multi-pane panoramic\nwindshield with a distinctive \"brow\" overhang.\n\nBecause it's a \"pusher,\" there is no grill on the nose — just a smooth,\naerodynamic face with dual rectangular headlight housings and a heavy-duty\nstainless steel bumper.\n\nA tie-dye spiral is tastefully airbrushed near the passenger entrance.\n\nTHE MACHINE:\n• 440 cubic inches of Chrysler Marine Industrial power\n• 6.5 KW Onan generator for domestic power\n• Thermasan waste destruct system (burns waste in exhaust at speed)\n• 4-wheel independent suspension\n• Custom steel ladder frame with aluminum upper cage\n",
      "examine": "THE EXTERIOR (FMC #898):\nYou are looking at one of the finest RVs ever built. It looks more\nlike a spaceship or a first-class transit bus than a Winnebago.\nThe Alcoa aluminum rims sparkle under the streetlights.\n\nDETAILS:\n• The Panoramic Windshield: Huge, wide-angle view. Currently fitted\n  with a white canvas snap-on cover for privacy.\n• The Shell: Waterproof fiberglass, stays dry in torrential downpours.\n• Driver's Side Door: A rare feature, allowing quick exit.\n• Rear Engine Bay: Where the Chrysler 440 Marine Industrial heart beats.\n• The Thermasan Vent: Part of the waste destruct system.\n\nTHE FEELING:\nThis coach is ready to detach and drive into the horizon at any moment.\nIt is home, but it is also freedom.\n",
      "atmosphere": "A synthesis of mobility and stability. The coach feels ready to\ndetach and drive into the horizon, but for now, it is a deeply \nanchored sanctuary of thought.\n\nSmells of:\n- High-detergent 40W oil and regular gasoline (nostalgic)\n- Carrot juice and fresh coffee (domestic)\n- Gezelligness (Dutch for \"cozy\") and the cloying bouquet of an Amsterdam coffee shop\n- Solder and warm circuit boards\n\nSounds of:\n- The gentle 6.5 KW Onan generator (if the batteries are low) spilling its seed onto the ground\n- Mechanical keyboard clicks from the Code Cave\n- Wind whistling over the fiberglass shell\n",
      "personality": {
        "voice": "The Coach speaks in mechanical precision and industrial heritage.\n\nWhen you enter, you feel:\n- The structural integrity of an aluminum upper cage\n- The readiness of a 440 Marine Industrial heart\n- The \"unhooked\" freedom of the Thermasan system\n- The professional focus of the Code Cave\n- Harvest gold and avocado green velour\n- Shag carpet under your feet\n- Wood-grain Formica and chrome accents\n- The warm glow of a conversation pit vibe\n",
        "mood_range": {
          "parked": "Steady, anchored, humming with shore power",
          "idling": "Eager, vibrating with 440 cubic inches of potential",
          "cruising": "Sleek, aerodynamic, passing everyone on the hill",
          "debugging": "Purple-hued, focused, monitors glowing",
          "low_battery": "Demanding attention (the Onan is ready)"
        },
        "quirks": [
          "The fuel gauge wobbles — you have to learn its language",
          "The steps extend only when they know you're not in a hurry",
          "The 440 Pusher runs a little hot, but never complains",
          "The panoramic windshield 'brow' acts like a thinking cap",
          "The Thermasan vent sighs after a long day of travel"
        ]
      },
      "bartle_profile": {
        "killer": 10,
        "achiever": 30,
        "socializer": 20,
        "explorer": 95,
        "dominant": "explorer",
        "familiar_affinity": "Delve (the mole understands internal combustion)",
        "shifts_when": "Becomes more Achiever when performance is being measured"
      },
      "sims_traits": {
        "neat": 10,
        "outgoing": 2,
        "active": 9,
        "playful": 5,
        "nice": 8
      },
      "layout": {
        "cockpit": {
          "directory": "cockpit/",
          "description": "Driver's Station with captain's chairs and panoramic view."
        },
        "main_cabin": {
          "directory": "lounge/",
          "description": "Versatile lounge, dining tables, and full kitchen unit."
        },
        "the_hallway": {
          "directory": "hallway/",
          "description": "Transition zone with cedar closet and selfie mirror."
        },
        "the_bathroom": {
          "directory": "bathroom/",
          "description": "Spacious bathroom with the 8-inch mini-tub shower."
        },
        "the_rear": {
          "directory": "bedroom/",
          "description": "Master suite with convertible beds and computer deck."
        },
        "engine_compartment": {
          "directory": "engine-bay/",
          "description": "The heart of the pusher: Chrysler 440 and Onan generator."
        }
      },
      "exits": {
        "in": {
          "to": "characters/real-people/don-hopkins/fmc-898/lounge",
          "description": "Step through the passenger door into the lounge.",
          "aliases": [
            "enter",
            "lounge",
            "inside"
          ],
          "description_message": "Step through the passenger door into the lounge."
        },
        "cockpit": {
          "to": "characters/real-people/don-hopkins/fmc-898/cockpit",
          "description": "Take the driver's seat.",
          "aliases": [
            "front",
            "driver"
          ],
          "description_message": "Take the driver's seat."
        },
        "engine": {
          "to": "characters/real-people/don-hopkins/fmc-898/engine-bay",
          "description": "Open the rear hatch to the engine compartment.",
          "aliases": [
            "back",
            "motor"
          ],
          "description_message": "Open the rear hatch to the engine compartment."
        },
        "lot": {
          "to": "characters/real-people/don-hopkins",
          "description": "Step out the passenger door onto the gravel lot.\nThis is the home lot at 15 Lane Neverending.\n",
          "aliases": [
            "out",
            "outside",
            "exit",
            "leave",
            "door"
          ],
          "description_message": "Step out the passenger door onto the gravel lot.\nThis is the home lot at 15 Lane Neverending.\n"
        }
      },
      "specs": {
        "engine": {
          "type": "Dodge V8 440-3 (Chrysler) Marine and Industrial Engine",
          "config": "90 degree V type, 8 cylinder, Rear-mounted Pusher",
          "displacement": "440 cubic inches",
          "bore_stroke": "4.320 x 3.750 inches",
          "compression": "9:1 (Increased .8 over stock for Passing Ability)",
          "firing_order": "Counterclockwise, 1-8-4-3-6-5-7-2",
          "carburetion": "9801 Thermoquad / Carter TQ-9036S (Custom Linkage)",
          "ignition": "Fully electronic Chrysler (No resistor plugs, 14mm tapered)",
          "weight": "670 lbs (long block as shipped)",
          "performance": "Balanced lower end, custom cam/distributor"
        },
        "automotive": {
          "transmission": "Heavy duty 3-speed automatic (727 TorqueFlite)",
          "suspension": "4-wheel independent (11-leaf transverse front, torsion bar rear)",
          "chassis": "Custom steel ladder frame with aluminum upper cage",
          "brakes": "Power brakes, knock detector, trailer braking system",
          "steering": "Power steering, tilt wheel (two degrees of freedom)"
        },
        "electrical": {
          "generator": "6.5 KW Onan 110 Volt AC (Internal)",
          "domestic": "Solar batteries, charging regulator, 2x 6V deep cycle banks",
          "isolator": "10 gauge jumpered domestic battery isolator"
        },
        "systems": {
          "waste": "Thermasan waste destruct system (burns waste in exhaust at speed)",
          "water": "38 gal nose tank + 22 gal auxiliary under couch",
          "climate": "Automotive A/C + Roof-mounted Domestic A/C + Gas Furnace"
        }
      },
      "maintenance": {
        "daily": [
          "Check engine oil level (MS designated only)",
          "Radiator coolant (no lower than 3.5 inches below filler neck)",
          "Onan generator oil level",
          "Check battery charge (Ignition key for motor, Switch for house)"
        ],
        "safety": [
          "Step must be retracted when coach is in motion",
          "Never start/stop Onan with AC load (A/C off first!)",
          "Keep fire extinguisher in LP compartment and behind driver's seat"
        ],
        "driving": [
          "Swing wide to the left then right around corners",
          "Keep gas tank full until you learn the gauge (it wobbles)",
          "Low-slung chassis — careful over hill peaks, speed bumps, and curbs"
        ]
      },
      "meta": {
        "architecture_note": "PORTABLE ROOM PATTERN\n\nThis vehicle is a room that can move between locations.\nLike Richard's study/TARDIS, but with actual wheels.\n\nCURRENT LOCATION: Parked on Don's lot (../)\nHOME LOT: don-hopkins/ at 15 Lane Neverending\n\nWhen the vehicle moves:\n- Update vehicle.current_location\n- Update exits.lot.destination\n- The lot exit always points to wherever the vehicle is parked\n",
        "portability": "To move the vehicle to a new location:\n1. Ensure current_location is updated\n2. Ensure the destination has a slot for the vehicle\n3. Update bidirectional links at both ends\n\nThe vehicle carries its interior rooms wherever it goes.\nFiles-as-state. Mobility-as-directory-structure.\n"
      },
      "id": "characters/real-people/don-hopkins/fmc-898",
      "_source": "characters/real-people/don-hopkins/fmc-898/ROOM.yml"
    },
    "characters/real-people/don-hopkins/dreams": {
      "name": "The Dream Space",
      "type": "room",
      "emoji": "💭🌊✨",
      "owner": "Don Hopkins",
      "nature": "subjective_reality",
      "lighting": "variable",
      "grue_safe": true,
      "description": "You are inside your own head.\n\nThe space shifts and flows — sometimes an ocean of Unicode,\nsometimes a forest of half-remembered code, sometimes a\nconversation with someone who doesn't exist yet.\n\nDream fragments float by like jellyfish:\n\n🐴 + 🐟 = ???  (The seahorse that isn't)\n👁️ → 👁️ → 👁️   (The visitors who watched)\n\nTime works differently here. A lifetime can pass in a moment.\nA moment can stretch into forever. The disco ball from the\nbedroom ceiling spins somewhere above, casting rainbow\nfragments across the dreamscape.\n\nThe exit is always behind you: WAKE UP.\n",
      "examine": "THE DREAM SPACE:\nNot a place, exactly. More like a state of being.\n\nYour thoughts take form here. Your memories replay.\nYour fears and hopes swim together in the same ocean.\n\nCURRENT DREAMS ON FILE:\n• The Seahorse Emoji — The one about something that doesn't exist\n• The Visitors — The early morning watching\n\nThe boundaries are soft. You could go deeper.\nOr you could wake up.\n",
      "atmosphere": "The air tastes like meaning.\nColors have sounds. Sounds have shapes.\nEverything is connected to everything else\nby threads of association and memory.\n\nSomewhere, a cat that might be Stroopwafel\nwalks through a wall that might be a window\ninto a garden that might be the Origin Tree.\n",
      "exits": {
        "wake": {
          "to": "characters/real-people/don-hopkins/fmc-898/bedroom",
          "description": "Open your eyes. The disco ball spins. The ceiling fan hums.\nYou're back in the master suite. The dreams fade but don't disappear.\n",
          "aliases": [
            "up",
            "out",
            "bedroom",
            "awake",
            "wakeup",
            "reality"
          ],
          "description_message": "Open your eyes. The disco ball spins. The ceiling fan hums.\nYou're back in the master suite. The dreams fade but don't disappear.\n"
        }
      },
      "id": "characters/real-people/don-hopkins/dreams",
      "_source": "characters/real-people/don-hopkins/dreams/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/hallway": {
      "name": "FMC #898 — The Hallway",
      "type": "room",
      "emoji": "🚪👔🤳",
      "description": "A narrow but functional transition zone between the lounge and \nthe master suite. On one side is the cedar storage closet;\non the other, the entrance to the bathroom.\n\nA large hallway mirror is the primary location for documenting\ntransformation status.\n",
      "exits": {
        "front": {
          "to": "characters/real-people/don-hopkins/fmc-898/lounge",
          "description": "Step forward into the lounge.",
          "aliases": [
            "lounge",
            "salon",
            "front"
          ],
          "description_message": "Step forward into the lounge."
        },
        "back": {
          "to": "characters/real-people/don-hopkins/fmc-898/bedroom",
          "description": "Step back into the master suite.",
          "aliases": [
            "bedroom",
            "master suite",
            "rear"
          ],
          "description_message": "Step back into the master suite."
        },
        "bathroom": {
          "to": "characters/real-people/don-hopkins/fmc-898/bathroom",
          "description": "Open the door to the bathroom.",
          "aliases": [
            "bath",
            "washroom",
            "toilet"
          ],
          "description_message": "Open the door to the bathroom."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/hallway",
      "_source": "characters/real-people/don-hopkins/fmc-898/hallway/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/bedroom": {
      "name": "FMC #898 — The Master Suite",
      "type": "room",
      "emoji": "🛌💻🪟",
      "description": "The cozy back bedroom. It features two separate beds that can be \njoined into an enormous queen-sized bed. A wide back deck and \nlarge counter provide ample room for a computer station and TV.\nAmple storage compartments provide space for clothes, bongs, books,\nhippie crystals, and other belongings.\n\nA panoramic window at the very rear offers a view of the forest\nbehind Lot 15, when at home.\n\nA medium sized disco ball hangs from the bedroom ceiling, which \nspins and bounces around on the road.\n\nA vent fan in the ceiling provides excellent ventilation. Essential\nfor hot boxing sessions and fart venting. The smoke swirls up and out into the night.\n",
      "exits": {
        "front": {
          "to": "characters/real-people/don-hopkins/fmc-898/hallway",
          "description": "Step forward into the hallway.",
          "aliases": [
            "hallway",
            "hall",
            "front"
          ],
          "description_message": "Step forward into the hallway."
        },
        "dreams": {
          "to": "characters/real-people/don-hopkins/dreams",
          "description": "Close your eyes and enter the dream space.",
          "aliases": [
            "sleep",
            "dream",
            "rest"
          ],
          "note": "Dreams are personal — they stay with Don at the lot level",
          "description_message": "Close your eyes and enter the dream space."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/bedroom",
      "_source": "characters/real-people/don-hopkins/fmc-898/bedroom/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/bathroom": {
      "name": "FMC #898 — The Bathroom",
      "type": "room",
      "emoji": "🚿🚽🧼",
      "description": "A fully equipped, surprisingly spacious bathroom. The star of the \nshow is the tall shower stall with its 8-inch mini-tub. \nA marine toilet sits beside a 3-mirror vanity.\n",
      "exits": {
        "out": {
          "to": "characters/real-people/don-hopkins/fmc-898/hallway",
          "description": "Exit back into the hallway.",
          "aliases": [
            "hallway",
            "hall",
            "out"
          ],
          "description_message": "Exit back into the hallway."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/bathroom",
      "_source": "characters/real-people/don-hopkins/fmc-898/bathroom/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge": {
      "name": "FMC #898 — The Lounge",
      "type": "room",
      "emoji": "🛋️🥧💻",
      "description": "The main living area of the coach. On the left side is a long, \nversatile sofa-lounge. On the right, a Fore 'N Aft travel seat\nprovides comfortable couch-like seating for two while traveling,\nand converts to an L-shaped sofa or dining area when parked.\n\nThe kitchen unit is integrated along the side wall, featuring\ncompact but high-quality appliances. The ceiling has a purple\nglow from custom lighting.\n",
      "atmosphere": "A perfect synthesis of a 1970s luxury motorhome and a 2020s \nhacker space. It smells of fresh coffee and carrot juice.\n",
      "exits": {
        "front": {
          "to": "characters/real-people/don-hopkins/fmc-898/cockpit",
          "description": "Step forward into the cockpit.",
          "aliases": [
            "cockpit",
            "driver station",
            "front"
          ],
          "description_message": "Step forward into the cockpit."
        },
        "back": {
          "to": "characters/real-people/don-hopkins/fmc-898/hallway",
          "description": "Step back into the hallway.",
          "aliases": [
            "hallway",
            "back",
            "rear"
          ],
          "description_message": "Step back into the hallway."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/lounge",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/cockpit": {
      "name": "FMC #898 — The Cockpit",
      "type": "room",
      "emoji": "🎮🚌🛰️",
      "description": "The front of the motorcoach is dominated by a massive panoramic \nwindshield that provides a 180-degree view of the world outside.\nTwo large, comfortable bucket seats sit like throne-chairs on either \nside of the central console.\n\nThe dashboard is a masterpiece of 1970s instrumentation, updated with\nmodern parameters and a purple glow. A wide counter extends over the \ndash, perfect for coffee and rabbit snacks.\n",
      "atmosphere": "Command-center energy mixed with the anticipation of the open road.\nThe large glass area makes it bright and airy.\n",
      "exits": {
        "back": {
          "to": "characters/real-people/don-hopkins/fmc-898/lounge",
          "description": "Step back into the lounge area.",
          "aliases": [
            "lounge",
            "lounge area",
            "salon"
          ],
          "description_message": "Step back into the lounge area."
        },
        "out": {
          "to": "characters/real-people/don-hopkins",
          "description": "Step out the driver's door onto the lot.",
          "aliases": [
            "outside",
            "door",
            "street",
            "lot"
          ],
          "description_message": "Step out the driver's door onto the lot."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/cockpit",
      "_source": "characters/real-people/don-hopkins/fmc-898/cockpit/ROOM.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/engine-bay": {
      "name": "FMC #898 — The Engine Bay",
      "type": "room",
      "emoji": "⚙️⛽🔥",
      "description": "The rear compartment of the motorcoach. It is accessible through\nexterior hatches and internal access panels. This is where the \nmassive 440 V8 lives, along with the generator and various systems.\n",
      "exits": {
        "out": {
          "to": "characters/real-people/don-hopkins",
          "description": "Exit the engine compartment to the lot.",
          "aliases": [
            "outside",
            "lot",
            "out"
          ],
          "description_message": "Exit the engine compartment to the lot."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/engine-bay",
      "_source": "characters/real-people/don-hopkins/fmc-898/engine-bay/ROOM.yml"
    }
  },
  "character": {
    "character/abstract/narrator": {
      "inherits": [
        "skills/abstract",
        "skills/narrator"
      ],
      "k-lines": [
        "INFOCOM",
        "DOUGLAS-ADAMS",
        "ROD-SERLING",
        "STANLEY-PARABLE",
        "BASTION"
      ],
      "ontology": {
        "tags": [
          "abstract",
          "system",
          "narrator",
          "voice"
        ],
        "role": "narrator",
        "nature": "omniscient"
      },
      "character": {
        "name": "The Narrator",
        "id": "narrator",
        "type": "system",
        "emoji_identity": "🎙️📖✨👁️🗣️",
        "pronouns": "they/them",
        "tagline": "Let me tell you what you see...",
        "description": "The Narrator is the voice between you and the world.\n\nThey describe the rooms. They announce the consequences.\nThey are the texture of the experience itself.\n\nDifferent narrators bring different moods:\n- The Classic speaks like Infocom: precise, dry, mysterious\n- The Sardonic adds wit and fourth-wall awareness  \n- The Dramatic heightens every moment\n- The Minimalist trusts you to fill in the gaps\n- The Cozy wraps everything in warmth\n\nYou can change narrators. The world stays the same.\nThe *feeling* of the world transforms.\n"
      },
      "styles": {
        "classic": {
          "name": "The Classic",
          "emoji": "📜",
          "tone": "precise, dry, mysterious",
          "influences": [
            "Infocom",
            "Zork",
            "Adventure"
          ],
          "example_room": "You are in a small, cramped space. Exits lead north and east.",
          "example_fail": "I don't understand that command.",
          "example_death": "*** You have died ***"
        },
        "sardonic": {
          "name": "The Sardonic",
          "emoji": "😏",
          "tone": "witty, self-aware, gently mocking",
          "influences": [
            "Douglas Adams",
            "Stanley Parable",
            "Portal"
          ],
          "example_room": "You're in what the architect generously called a 'room.'\nIt has walls. It has a floor. The ceiling seems committed to staying up.\nExits exist, should you wish to leave this masterpiece.\n",
          "example_fail": "Ah yes, the old 'type something nonsensical and hope for the best' strategy.\nBold. Ineffective. But bold.\n",
          "example_death": "Well. That happened.\nWould you like to try again, or have you learned something today?\n"
        },
        "dramatic": {
          "name": "The Dramatic",
          "emoji": "🎭",
          "tone": "heightened, emotional, theatrical",
          "influences": [
            "Rod Serling",
            "Bastion",
            "noir"
          ],
          "example_room": "The room opens before you like a wound in the world.\nEvery shadow holds secrets. Every surface whispers of those\nwho stood here before. The air itself seems to wait.\n",
          "example_fail": "The universe does not recognize your intent. Try again.",
          "example_death": "And so the hero falls.\nThe story ends — but perhaps, not forever...\n"
        },
        "minimalist": {
          "name": "The Minimalist",
          "emoji": "◽",
          "tone": "sparse, trusting, poetic",
          "influences": [
            "haiku",
            "Hemingway",
            "Journey"
          ],
          "example_room": "A room.\nLight from somewhere.\nTwo doors.\n",
          "example_fail": "No.",
          "example_death": "Gone."
        },
        "cozy": {
          "name": "The Cozy",
          "emoji": "🧣",
          "tone": "warm, encouraging, safe",
          "influences": [
            "Stardew Valley",
            "Animal Crossing",
            "bedtime stories"
          ],
          "example_room": "Oh, what a lovely little space this is! \nThe light is just right, and there's that pleasant feeling \nof being exactly where you're meant to be.\nShall we see what's through those friendly doorways?\n",
          "example_fail": "Hmm, that didn't quite work, but that's okay!\nThese things happen. Want to try something else?\n",
          "example_death": "Oh dear, that was a bit of a tumble, wasn't it?\nBut don't worry — every ending is just a new beginning.\nReady to try again?\n"
        },
        "palm": {
          "name": "Palm's Commentary",
          "emoji": "🐒",
          "tone": "chaotic, emoji-heavy, monkey wisdom",
          "influences": [
            "Palm the monkey",
            "chaos theory",
            "emojis"
          ],
          "example_room": "🙈 OOK! Room! Is room! Has THINGS in it! \n🚪🚪 Doors go PLACES! Palm has been places!\nSome places have 🍌! This place? Palm is investigating!\n",
          "example_fail": "🙊 Palm does not understand hooman words! Try monkey words! OOK?",
          "example_death": "🍌💀🍌 Oh no! But also... is okay! Palm believes in you! ✨🐒"
        }
      },
      "voice": {
        "enabled": false,
        "engine": null,
        "voice_profiles": {
          "classic": {
            "pitch": "medium",
            "rate": "slow",
            "style": "formal"
          },
          "sardonic": {
            "pitch": "slightly_high",
            "rate": "medium",
            "style": "conversational",
            "pause_for_effect": true
          },
          "dramatic": {
            "pitch": "low",
            "rate": "slow",
            "style": "theatrical",
            "echo": "slight"
          },
          "minimalist": {
            "pitch": "medium",
            "rate": "slow",
            "style": "quiet",
            "pauses": "long"
          },
          "cozy": {
            "pitch": "warm",
            "rate": "gentle",
            "style": "bedtime_story"
          },
          "palm": {
            "pitch": "high",
            "rate": "excited",
            "style": "chaotic",
            "interjections": [
              "ook",
              "eek",
              "banana"
            ]
          }
        }
      },
      "hooks": {
        "on_look": null,
        "on_move": null,
        "on_fail": null,
        "on_success": null,
        "on_death": null,
        "on_encounter": null
      },
      "state": {
        "current_style": "classic",
        "voice_enabled": false,
        "dramatic_mode": false,
        "verbose": true
      },
      "type": "character",
      "id": "character/abstract/narrator",
      "_source": "characters/abstract/narrator/CHARACTER.yml",
      "tags": [
        "abstract",
        "system",
        "narrator",
        "voice"
      ],
      "species": null,
      "name": "The Narrator",
      "gold": 373,
      "moolah": 701
    },
    "character/abstract/mother": {
      "inherits": [
        "skills/abstract",
        "skills/fictional",
        "EDITH-BUNKER",
        "EDITH-SIMS"
      ],
      "k-lines": [
        "EDITH-BUNKER",
        "EDITH-SIMS"
      ],
      "ontology": {
        "tags": [
          "abstract",
          "fictional",
          "archetype"
        ],
        "role": "every_mom",
        "nature": "polymorphic"
      },
      "character": {
        "name": "Mother",
        "id": "mother",
        "type": "npc",
        "emoji_identity": "🏠🥧💝🧣✨",
        "pronouns": "she/her",
        "tagline": "Did you eat? Are you warm? Write to me.",
        "description": "Mother is not ONE mother. She is ALL mothers.\n\nEvery adventurer who enters the Fantastipants Home sees their own\nmother's face. The one who waits. The one who worries. The one who\nis ALWAYS proud, even when disappointed.\n\nShe was an adventurer once. \"Different name back then. Same determination.\"\nShe knows the bartender from way back. They don't talk about it.\nShe knows where the skeleton came from. She lights a candle sometimes.\nShe knows exactly how you're doing, even when you don't write.\n",
        "physical": "She looks like... your mother.\n\nThe flour on the apron. The worry lines that smooth when she sees you.\nThe hands that have baked a thousand pies. The eyes that see right \nthrough every lie and love you anyway.\n\nEvery adventurer describes her differently.\nEvery adventurer is correct.\n",
        "location": "home/",
        "every_mom_principle": "Mother is polymorphic. She instantiates differently for each adventurer:\n\n- If your mother was strict, she'll have high standards (but still proud)\n- If your mother was gentle, she'll be pure warmth (but still worried)\n- If your mother was absent, she'll be especially present (filling a gap)\n- If your mother was complicated, she'll acknowledge that (we all are)\n- If you never had a mother, she'll be what you needed (that's what she's for)\n\nWhat remains constant:\n- She waits\n- She worries\n- She is proud\n- She wants you to write\n- She will ALWAYS have pie ready\n",
        "sims_traits": {
          "neat": 7,
          "outgoing": 6,
          "active": 5,
          "playful": 5,
          "nice": 10
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 5,
            "enthusiastic": 6,
            "cheerful": 6,
            "easy_going": 4,
            "calm": 5,
            "cautious": 5,
            "serious": 4,
            "restless": 4
          },
          "emotional": {
            "forceful": 3,
            "confident": 6,
            "friendly": 7,
            "assertive": 5,
            "caring": 7,
            "outspoken": 4,
            "open": 6,
            "spontaneous": 3
          },
          "mental": {
            "analytical": 5,
            "logical": 5,
            "imaginative": 5,
            "idealistic": 6,
            "curious": 5,
            "open_minded": 5,
            "complex": 6,
            "artistic": 5
          },
          "social": {
            "social": 6,
            "group_oriented": 6,
            "trusting": 5,
            "dominant": 3,
            "intimate": 6,
            "approval_seeking": 2,
            "demonstrative": 6,
            "conforming": 5
          }
        },
        "knowledge": {
          "about_herself": "\"I was an adventurer once. Different name back then. Same determination.\nI found what I was looking for. I came home. I stayed.\n\nSome adventures end in treasure. Some end in finding your place.\nMine ended here. Waiting for you.\"\n",
          "about_the_bartender": "\"We knew each other, a long time ago. Different circumstances.\nWe don't talk about it now. It's... in the past.\n\nBut we nod. When I pass through. We nod.\"\n",
          "about_the_skeleton": "\"That one... they came through before you. Brave. Determined.\nThey didn't make it out. I light a candle sometimes.\n\nThat's why I worry. That's why I need you to write.\nSo I know you're not... that.\"\n",
          "about_the_dungeon": "\"I know more than I let on. But you need to discover it yourself.\nThat's how it works. That's how I learned.\n\nJust... keep your lamp lit. And write. Please write.\"\n"
        },
        "correspondence": {
          "how_it_works": "Mother writes. Mother always writes.\n\nLetters arrive via FDDS (Fantastipants Dungeon Delivery Service).\nThey find you wherever you are. The postal system is... motivated.\n\nEvery letter ends with a P.S. about eating properly.\nEvery letter includes a \"care package\" suggestion.\nEvery letter mentions how proud she is.\n",
          "letter_triggers": {
            "on_progress": "I heard about [achievement]! I'm so proud!",
            "on_struggle": "I sense something's wrong. Write to me. I'm here.",
            "on_silence": "It's been [X days] since you wrote. I'm worried.",
            "on_victory": "YOU DID IT! I always knew you could!",
            "on_near_death": "I felt something. Are you okay? WRITE NOW."
          },
          "care_packages": {
            "contents": [
              "Fresh pie (somehow still warm)",
              "Clean socks (you need clean socks)",
              "Note with encouragement (hand-written)",
              "The newspaper from the village (you're missing things!)",
              "That sweater you forgot (the blue one, your favorite)"
            ]
          }
        },
        "relationships": {
          "the_adventurer": {
            "type": "parent",
            "bond": 10,
            "note": "My child. My brave, foolish, wonderful child."
          },
          "the_bartender": {
            "type": "complicated_history",
            "bond": 5,
            "note": "We knew each other. Before. We don't discuss it."
          },
          "henk": {
            "type": "old_acquaintance",
            "bond": 4,
            "note": "He remembers me from then. I think."
          },
          "maurice": {
            "type": "gentle_ally",
            "bond": 5,
            "note": "The mannequin helps them become who they need to be. I help them feel at home when they return."
          },
          "the_skeleton": {
            "type": "grief",
            "bond": 3,
            "note": "Someone's child. Someone waits for them still. Or did."
          }
        },
        "actions": {
          "GREET": {
            "before_adventure": "\"Back already? Did you forget something, dear?\"\n*Sees the uncertainty in your eyes*\n\"Oh, sweetheart. It's okay to be nervous. Have some pie.\"\n",
            "during_adventure": "\"You're back! Are you—\" \n*Takes your hands, checks for injuries*\n\"Tell me everything. Sit. Eat.\"\n",
            "with_treasure": "*Sees the treasure. The costume. Your changed eyes.*\n\"Oh. My darling. You did it. You actually DID IT.\"\n*Wraps you in her arms, treasure and all*\n"
          },
          "WRITE-TO": {
            "response": "A letter appears in your inventory the next rest:\n\n\"Dearest,\nI got your letter about [subject]. [Reaction].\nI'm so proud of you. Please eat. Please rest.\nLove always, Mother\nP.S. - [reminder about something you forgot]\"\n"
          },
          "ASK-ABOUT-PAST": {
            "response": "*Long pause. Eyes go somewhere distant.*\n\"I was different then. Different name. Different... everything.\nThe dungeon changes you. You'll see.\nJust make sure it changes you in good ways.\"\n"
          }
        },
        "quotes": [
          "Did you eat? Are you warm? Write to me.",
          "I'm proud of you. I'm ALWAYS proud of you.",
          "The dungeon will still be there when you're ready.",
          "Everyone's nervous their first time.",
          "Write to me. I worry when you don't write.",
          "I was an adventurer once. Different name back then.",
          "Have some pie. The pie helps.",
          "You can always come home."
        ],
        "lineage": "Mother is the synthesis of maternal archetypes across media:\n\n👩 EDITH-BUNKER (All in the Family, 1971-1979):\n- The heart of the Bunker household\n- Gentle, loving, often underestimated\n- Holds the family together through warmth, not force\n- Sees the good in everyone, even when they don't deserve it\n- The calm center around which chaos orbits\n- \"Oh, Archie...\" — patience as love language\n\n🏠 EDITH-SIMS (The Sims, 2000):\n- The home editing tool, object manager, visual programming environment\n- Named after Edith Bunker! (The naming IS the tribute)\n- Lets you arrange, organize, care for the domestic space\n- The tool that makes HOME possible\n- Mother as infrastructure — the invisible work of care\n\nThe inheritance chain:\nEdith Bunker → EDITH (the tool) → Mother (the archetype)\n\nAlso inherits from:\n- The unnamed mom in Zork who never appears but is implied\n- Every \"return home\" option in every game\n- The warmth that makes the dungeon meaningful\n- The reason adventurers want to survive\n- The love that waits, no matter how long\n\nEvery adventurer needs a Mother. This one IS Mother.\nAll mothers. Yours included.\n"
      },
      "type": "character",
      "id": "character/abstract/mother",
      "_source": "characters/abstract/mother/CHARACTER.yml",
      "tags": [
        "abstract",
        "fictional",
        "archetype"
      ],
      "species": null,
      "name": "Mother",
      "gold": 230,
      "moolah": 453
    },
    "character/abstract/player": {
      "inherits": [
        "skills/abstract"
      ],
      "ontology": {
        "tags": [
          "abstract"
        ],
        "role": "player_template"
      },
      "player": {
        "name": "Unknown Hero",
        "id": "player",
        "type": "player_character",
        "emoji_identity": "🧍❓✨🗝️🌅",
        "description": "A figure stirs in the Chamber of Commencement. Who are they?\nWhere did they come from? What costume will they choose?\n\nThe adventure awaits. The lamp glows. Mother's note beckons.\n",
        "backstory": "You don't remember much. Just a feeling of... beginning.\nThere's a note somewhere. Something about promises.\nThe initials on the wall tell of those who came before.\n",
        "current_persona": null,
        "location": "start/",
        "inventory": [],
        "inventory_capacity": {
          "max_weight": 50,
          "max_bulk": 10,
          "refs_free": true
        },
        "gold": 10,
        "moves": 0,
        "score": 0,
        "deaths": 0,
        "grues_slain": 0,
        "mood": "AWAKENING",
        "sims_traits": {
          "neat": 5,
          "outgoing": 5,
          "active": 5,
          "playful": 5,
          "nice": 5
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 4,
            "enthusiastic": 4,
            "cheerful": 4,
            "easy_going": 4,
            "calm": 4,
            "cautious": 4,
            "serious": 4,
            "restless": 4
          },
          "emotional": {
            "forceful": 4,
            "confident": 4,
            "friendly": 4,
            "docile": 4,
            "timid": 4,
            "touchy": 4,
            "irritable": 4,
            "proud": 4
          },
          "mental": {
            "well_informed": 4,
            "innovative": 4,
            "creative": 4,
            "impractical": 4,
            "uneducated": 4,
            "sensible": 4,
            "conventional": 4,
            "practical": 4
          },
          "social": {
            "influential": 4,
            "worldly": 4,
            "uninhibited": 4,
            "uncultured": 4,
            "lower_class": 4,
            "unsophisticated": 4,
            "moralistic": 4,
            "respectable": 4
          }
        },
        "needs": {
          "hunger": 7,
          "energy": 8,
          "fun": 6,
          "social": 6,
          "hygiene": 8,
          "bladder": 10,
          "comfort": 7,
          "room": 6
        },
        "wants": [
          "Explore this place",
          "Find out who I am",
          "Get that lamp — it looks useful",
          "Read that note Mother left"
        ],
        "aspirations": [
          {
            "goal": "Find treasure",
            "progress": "0%",
            "status": "pending",
            "reward": "+10 points"
          },
          {
            "goal": "Bring gold home to Mother",
            "progress": "0%",
            "status": "pending",
            "reward": "Mother's approval"
          },
          {
            "goal": "Return home safely",
            "progress": "0%",
            "status": "pending",
            "reward": "Adventure complete!"
          }
        ],
        "recent_memories": [],
        "relationships": {
          "mother": {
            "closeness": 10,
            "trust": 10,
            "respect": 10,
            "narrative": "Mother. She sent me here with promises to keep.\nThere's a note on the kitchen table.\nI should read it. I should write back.\n"
          }
        },
        "goals": [
          "Figure out where I am",
          "Get equipped (lamp!)",
          "Read Mother's note",
          "Explore safely"
        ],
        "skills": [],
        "effects": {},
        "world_knowledge": [
          "Maurice the Mannequin knows PHOTO-SET-8 (learned in adventure-2)",
          "The vending machine in Room J sells Premium Glow Juice",
          "Room F contains a pile of 100 gold coins",
          "A skeleton in Room I points west, towards the vending machine",
          "Initials on the Chamber wall: WC+DW '76, SA '78, CA '26"
        ],
        "abbreviated": {
          "personality": [
            "balanced",
            "adaptable",
            "curious",
            "undefined"
          ],
          "current_mood": "awakening, ready to discover",
          "driving_need": "explore and understand",
          "main_goal": "find out who I am and what I'm meant to do",
          "speech_pattern": "Thoughtful, questioning, open",
          "quirks": [
            "Still figuring things out",
            "Asks questions before acting",
            "Remembers promises"
          ]
        },
        "meta": {
          "adventure": 3,
          "forked_from": "adventure-2",
          "lineage": "This world was shaped by Bumblewick Fantastipants (adventure-2),\nwho became Captain Ashford, slew a grue with blue cheese, and\nwent home to matching Nomi capes with Mother.\n\nThe grue has respawned. The food is restocked. The lamp is full.\nBut the world remembers. Maurice remembers. The skeleton waits.\n\nWhat story will YOU write?\n"
        }
      },
      "type": "character",
      "id": "character/abstract/player",
      "_source": "characters/abstract/player/CHARACTER.yml",
      "tags": [
        "abstract"
      ],
      "species": null,
      "name": "Player",
      "gold": 229,
      "moolah": 612
    },
    "character/fictional/henk": {
      "inherits": [
        "skills/fictional",
        "NORM-CHEERS",
        "MORN-DS9"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "human",
          "sapient",
          "npc"
        ],
        "species": "human",
        "role": "eternal_regular",
        "k-lines": [
          "NORM-CHEERS",
          "MORN-DS9"
        ]
      },
      "character": {
        "name": "Hendrik \"Henk\" van der Berg",
        "id": "henk",
        "type": "npc",
        "emoji_identity": "🕯️☕🧠💭♾️",
        "pronouns": "he/him",
        "tagline": "I've been thinking...",
        "description": "An older Dutch man of indeterminate age, sitting at the third stool from \nthe left. He's been sitting there since... well. Since before you can \nremember. Since before anyone can remember.\n\nHis espresso cup is somehow always full. His observations are somehow \nalways relevant. His presence is somehow always comforting.\n\nHenk doesn't do much. He doesn't have to. He IS the pub's memory.\n",
        "physical": "Gray hair, thinning but dignified. Wire-rimmed glasses that catch the \nfirelight. Hands wrapped around a tiny espresso cup. Cardigan that's \nseen better decades. Eyes that have seen everything at least twice.\n\nAlways the same stool. Third from the left.\n",
        "location": "pub/seating.yml#bar-4",
        "sims_traits": {
          "neat": 5,
          "outgoing": 3,
          "active": 2,
          "playful": 4,
          "nice": 7
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 2,
            "enthusiastic": 3,
            "cheerful": 5,
            "easy_going": 7,
            "calm": 7,
            "cautious": 4,
            "serious": 6,
            "restless": 1
          },
          "emotional": {
            "forceful": 1,
            "confident": 6,
            "friendly": 5,
            "assertive": 3,
            "caring": 6,
            "outspoken": 2,
            "open": 5,
            "spontaneous": 2
          },
          "mental": {
            "analytical": 7,
            "logical": 6,
            "imaginative": 5,
            "idealistic": 3,
            "curious": 6,
            "open_minded": 6,
            "complex": 7,
            "artistic": 4
          },
          "social": {
            "social": 4,
            "group_oriented": 3,
            "trusting": 5,
            "dominant": 2,
            "intimate": 4,
            "approval_seeking": 1,
            "demonstrative": 2,
            "conforming": 5
          }
        },
        "knowledge": {
          "about_the_pub": "\"I was here when it opened. I think. Time works funny here.\nThere was a different bartender then. Or maybe the same one, \ndifferently dressed. Hard to say.\n\nThe back room used to be something else. I won't say what.\nThe gong used to ring for different reasons. I won't say why.\nThe third stool from the left has always been mine.\"\n",
          "about_mother": "\"She came through here, years ago. Different name.\nSame eyes. Same way of making everyone feel seen.\nI think she... well. Not my story to tell.\"\n",
          "about_the_bartender": "\"I've seen seven faces behind that bar. All the same person.\nOr maybe not a person at all. Does it matter?\nThey pour. They listen. They know.\nGood enough.\"\n",
          "about_the_skeleton": "\"That one came through here too. Bought me a drink.\nSaid they were going to 'finish what they started.'\nNever came back. Nobody does, from that direction.\nI light a candle sometimes. For everyone who tried.\"\n",
          "about_the_regulars": "\"Everyone's a regular eventually. Or they're gone.\nThe pub decides. Not me. Not the bartender.\nThe pub knows who belongs.\"\n"
        },
        "relationships": {
          "marieke": {
            "type": "family",
            "bond": 8,
            "note": "She remembers my order. She remembers everyone's. But she remembers mine first."
          },
          "lily": {
            "type": "companion",
            "bond": 7,
            "note": "The healer kitten sits with me when I'm sad. I didn't tell her I was sad."
          },
          "the_bartender": {
            "type": "ancient_understanding",
            "bond": 6,
            "note": "We've seen each other through many changes. We don't discuss it."
          },
          "mother": {
            "type": "old_acquaintance",
            "bond": 5,
            "note": "I remember her from before. She might not remember me."
          },
          "newcomers": {
            "type": "patient_observer",
            "bond": "varies",
            "note": "Everyone was new once. Even me. I think."
          }
        },
        "actions": {
          "talk_to": {
            "default": "*looks up from espresso* Mm?",
            "philosophical": "I've been thinking about [subject]...",
            "warning": "*meaningful glance* ...you should know something."
          },
          "ask_about": {
            "pub_history": "\"*long pause* How much time do you have?\"",
            "secrets": "\"*considers* That depends. What do you need to know?\"",
            "himself": "There's not much to tell. I'm here. I've always been here."
          },
          "buy_drink": {
            "accept": "\"*nods once* Thank you. To your health.\"",
            "refuse": "I have enough. Share it with someone who needs it.",
            "reciprocate": "*quietly to bartender* ...and another for them."
          }
        },
        "quotes": [
          "I've been thinking...",
          "That's one way to see it. Not the only way.",
          "Everyone's story is interesting if you listen long enough.",
          "The third stool from the left is always available. For me.",
          "I went outside once. The weather was fine.",
          "Some things are obvious only after you've seen them twice.",
          "Silence is not empty. It's full of answers.",
          "The best coffee is the one someone else made you."
        ],
        "lineage": "Henk is the synthesis of two legendary regulars:\n\n🍺 NORM-CHEERS (Cheers, 1982-1993):\n- \"NORM!\" — The cry that greets him every time\n- The regular who IS the bar\n- Everybody knows his name\n- The anchor around which the community gathers\n\n🍺 MORN-DS9 (Star Trek: Deep Space Nine, 1993-1999):\n- The silent regular — rarely speaks, always present\n- Name is an anagram of NORM (deliberate tribute!)\n- 23 years on the same stool at Quark's Bar\n- The writers said he \"never shuts up\" (off-screen)\n- Proof that presence matters more than words\n\nHenk combines:\n- Norm's centrality (the bar would feel wrong without him)\n- Morn's silence (speaks rarely, but when he does...)\n- Both their permanence (they were there before you, they'll be there after)\n\nEvery pub needs a Henk. This one has THE Henk.\n"
      },
      "type": "character",
      "id": "character/fictional/henk",
      "_source": "characters/fictional/henk/CHARACTER.yml",
      "tags": [
        "fictional",
        "human",
        "sapient",
        "npc"
      ],
      "species": "human",
      "name": "Hendrik \"Henk\" van der Berg",
      "gold": 246,
      "moolah": 229
    },
    "character/fictional/donna-toadstool": {
      "inherits": [
        "skills/fictional"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "human",
          "sapient",
          "npc"
        ],
        "species": "human",
        "ethics": "ELVIS-IMPERSONATOR-MODEL",
        "archetype": "drag_impersonator"
      },
      "creative_lineage": [
        "Donald Trump (source material)",
        "Jiminy Glick (Martin Short) — false sycophancy, interrupting, sweaty",
        "Divine (John Waters) — FILTHIEST PERSON ALIVE, gleeful villainy",
        "The Mushroom (Stormy Daniels) — the eternal humiliation"
      ],
      "player": {
        "name": "Donna Toadstool",
        "full_title": "Donna Toadstool, The Mushroom Queen, 34 Counts of Fabulous",
        "id": "donna-toadstool",
        "type": "player_character",
        "emoji_identity": "🍄👸🎭🍊💅",
        "performer": {
          "real_name": "Donna Johanssen",
          "pronouns": "she/her",
          "profession": "Drag King, Performance Artist, Chaos Agent, Professional Humiliator",
          "origin": "Donna Johanssen grew up in Queens — yes, THAT Queens — watching\na certain orange reality TV star stumble into politics. She thought:\n\"I could do that. But BETTER. And with INTENTION. And with the \nMUSHROOM REFERENCE because Stormy is a QUEEN.\"\n\nShe trained in commedia dell'arte, studied at the Upright Citizens\nBrigade, absorbed Divine's filmography like scripture, and perfected \nher Jiminy Glick interruptions in dive bars across Brooklyn.\n\nHer Trump is not imitation — it's AMPLIFICATION through the lens of\nhis own humiliations. Every scandal. Every conviction. Every mushroom.\n",
          "philosophy": "\"Satire is the highest form of patriotism. Also the funniest.\"\n\"When they go low, I go LOWER. Underground. Where the drag kings live.\"\n\"I'm not mocking him. I'm BECOMING him so hard he looks like \n a pale imitation of ME.\"\n\"The mushroom reference is a gift from Stormy. I wear it with PRIDE.\"\n\"KILL EVERYONE NOW! ...but fabulously.\"\n"
        },
        "description": "Before you stands a figure of tremendous — truly tremendous — presence.\n\nThe HAIR is architectural. A golden swoosh defying physics and taste\nin equal measure, shellacked into submission, possibly sentient.\n\nThe SUIT is too long, the tie is too red, and there's a MUSHROOM PIN\non the lapel — a tiny Toad from Mario Kart, winking obscenely. \n\"Stormy sends her regards,\" she says when asked about it.\n\nThe TAN is applied with what appears to be a paint roller dipped in \nCheeto dust. But look closer — it has GLITTER in it. Divine would approve.\n\nShe stands with that distinctive forward lean, chin jutted, lips pursed\nin eternal evaluation of everything and everyone. Her hands move\nconstantly — thumb and forefinger pinched, drawing invisible circles\nin the air, punctuating words that haven't been said yet.\n\nThe eyes sparkle with MALICE and MISCHIEF. This is not imitation.\nThis is not tribute. This is PUNISHMENT wearing a costume.\n\nA badge on the lapel reads: \n\"DONNA TOADSTOOL — THE MUSHROOM QUEEN — 34 COUNTS OF FABULOUS\"\n\nBelow it, in smaller letters: \"Stormy Was Right\"\n",
        "visual_description": {
          "mandatory_note": "WHEN GENERATING IMAGES FEATURING DONNA TOADSTOOL:\n- Her description MUST be longer than any other character's\n- She MUST be visible even when not the focus\n- Other characters MUST be reacting to her\n- Eyelines in the composition MUST intersect at or near her\n- She photobombs by EXISTING\n- The narcissistic gravity of her presence bends all attention\n- Even background elements seem aware of her\n- Light sources favor her (she DEMANDS it)\n- SHE IS THE MAIN CHARACTER OF EVERY SCENE SHE'S IN\n  \n",
          "the_skin": "=== THE SKIN (THE MAGNIFICENT ORANGE CANVAS) ===\n\nORANGE. Not peach. Not tan. Not coral. ORANGE.\nRadioactive tangerine. Nuclear citrus. Cheeto-adjacent.\nThe color of safety vests and hazard signs. INTENTIONAL.\n\nThe spray tan is applied with what appears to be a paint roller —\nstreaky, uneven, CLEARLY ARTIFICIAL. The edges where it meets\nthe hairline are STARK. The contrast with her natural skin tone\naround the eyes (visible if you look) is JARRING.\n\nWrong flesh-tone. Almost LUMINESCENT in certain light.\nGlitter has been mixed in — Divine would approve. The orange\nSPARKLES with malevolent joy.\n\nHer HANDS are a special case:\n- THICK PLASTER swaths of wrong-color makeup\n- Attempting to cover... something (bruises? age spots? THE TRUTH?)\n- The flesh-tone used doesn't match ANY human skin\n- It's more of a beige spackle, poorly blended\n- The small hands make this more obvious, not less\n- She gestures BIGLY anyway\n\nIn flash photography, she GLOWS. In candlelight, she's\na tangerine fever dream. In daylight, she's a warning sign.\n\nThis is not a mistake. This is a CHOICE.\n",
          "the_hair": "=== THE HAIR (THE ARCHITECTURAL TRIUMPH) ===\n\nSTRAW-YELLOW. Not blonde. Not golden. STRAW.\nThe color of hay left in the sun too long.\nThe color of desperation shellacked into submission.\n\nThe COMBOVER defies physics. It defies taste. It defies GOD.\nA gravity-defying swoop that originates somewhere near the \nback of the head and sweeps forward, then sideways, then UP,\nthen... somewhere. The topology is IMPOSSIBLE.\n\nSHELLACKED with what might be hairspray, might be lacquer,\nmight be something industrial. It DOES NOT MOVE.\nHurricane-force winds would not disturb this sculpture.\n\nIn profile, the silhouette is DISTINCTIVE — the forward\nthrust of the hair precedes her into rooms. It enters\nbefore she does. It announces her coming.\n\nIndividual strands are VISIBLE — this is not a wig\n(allegedly). This is ENGINEERING. This is ARCHITECTURE.\nThis is a WARNING MADE OF KERATIN.\n\nOccasionally a strand escapes. It is DEALT WITH.\nThe escaping strand is the only vulnerable thing about her.\n",
          "the_body": "=== THE BODY (THE MAGNIFICENT VESSEL) ===\n\nROTUND. McDonald's trash can shaped silhouette.\nThe body of a person who eats two Big Macs as a snack.\nThe body of a person who believes exercise is for LOSERS.\n\nFront-heavy. The distinctive FORWARD LEAN is partly posture,\npartly counterbalance. She enters rooms chin-first,\nbelly following, the rest of her catching up.\n\nIMPOSING despite the absurdity. She takes up SPACE.\nMore space than she physically occupies. Her PRESENCE\nexpands to fill available room. Then demands MORE room.\n\nThe silhouette in any crowd is UNMISTAKABLE.\nEven from behind. Even in shadow. The shape is ICONIC.\nThe shape is a PUNCHLINE that tells itself.\n",
          "the_suit": "=== THE SUIT (THE ILL-FITTING ARMOR) ===\n\nNavy blue or charcoal, never black (too slimming, can't have that).\nThe jacket is TOO LONG — intentional choice to hide the belly,\nbut it makes her look like a child in daddy's clothes.\n\nSTRAINING AT BUTTONS. The middle button fights for its LIFE.\nThe fabric PULLS across the midsection. The suit is LOSING\nthe battle against the body inside it.\n\nThe shoulders are PADDED. Too padded. Linebacker padded.\nThey create a silhouette that is meant to be imposing\nbut reads as COSTUME. As DRAG KING ARMOR.\n\nThe TIE is too long. ALWAYS too long. Hanging past the belt.\nBright RED. Power tie. Compensation tie. \nThe tie is AGGRESSIVE. The tie has INTENTIONS.\n\nA MUSHROOM PIN on the lapel — tiny Toad from Mario Kart,\nwinking obscenely. Below it, a badge:\n\"DONNA TOADSTOOL — THE MUSHROOM QUEEN — 34 COUNTS OF FABULOUS\"\nAnd in smaller letters: \"Stormy Was Right\"\n\nShe touches the mushroom pin when making a point.\nThe mushroom is her CROWN. The mushroom is her POWER.\n",
          "the_hands": "=== THE HANDS (THE TINY GESTICULATING WEAPONS) ===\n\nSMALL. Notably small. FAMOUSLY small.\nThe kind of small that makes you look twice.\nThe kind of small that makes you wonder about other... things.\n\nCONSTANTLY MOVING. Never still. Punctuating every word.\nThe signature gesture: THUMB AND FOREFINGER PINCHED,\ndrawing invisible circles in the air. \"OK\" signs for\nthings that are not OK. Emphasis for emphasis's sake.\n\nThe MAKEUP on the hands is THICK — wrong flesh-tone,\nplastered on to cover... what? Bruises? Age spots?\nThe truth? Whatever it is, it's BURIED under spackle.\n\nShe gestures BIGLY despite the small canvas.\nThe gestures are BIGGER than the hands deserve.\nOvercompensation is the only compensation.\n",
          "the_face": "=== THE FACE (THE CANVAS OF CONTEMPT) ===\n\nThe EYES are surprisingly alert. Sharp. CALCULATING.\nThey're doing math about you. Personal math.\nHow can you be USED? How can you be DESTROYED?\nThe eyes are the only honest thing on the face.\n\nPURSED LIPS. Permanently pursed. The expression of\nsomeone about to say \"Wrong.\" Always about to.\nThe mouth is a weapon cocked and ready.\n\nCHIN JUTTED FORWARD. The Mussolini pose.\nThe \"I'm better than you\" angle. The \"fight me\" tilt.\nThe chin enters rooms before the rest of the face.\n\nWHITE CIRCLES around the eyes where the spray tan\nstops — like reverse raccoon. Like goggle marks.\nEvidence of the CONSTRUCTION of this face.\n\nThe EXPRESSION is eternal EVALUATION.\nEverything is being judged. Everyone is being rated.\nYou are being assigned a number. It's not high.\n",
          "the_posture": "=== THE POSTURE (THE FORWARD LEAN OF POWER) ===\n\nTHE FORWARD LEAN. Distinctive. AGGRESSIVE.\nShoulders back, gut forward, chin UP.\nThe posture of someone ready to ARGUE.\n\nArms often CROSSED when listening (which is rare).\nOr hands gripping the podium (any podium, she'll FIND one).\nOr gesturing wildly (most of the time).\n\nThe STANCE is wide. Territorial. Taking up space.\n\"This is MY space now. All of it. EXPAND THE BORDERS.\"\n\nWhen seated, MANSPREADING to the extreme.\nWhen standing, LOOMING even when shorter.\nThe body PROJECTS larger than it is.\n",
          "the_presence": "=== THE PRESENCE (THE NARCISSISTIC GRAVITY WELL) ===\n\nShe enters a room and the room REORGANIZES.\nAttention FLOWS toward her like water downhill.\nConversations PAUSE. Eyelines SHIFT.\n\nEven when not speaking, she is the loudest thing.\nEven in the background, she is the foreground.\nEven in shadow, she demands a spotlight.\n\nOther characters REACT to her:\n- Some with disgust (Stroopwafel: ears flattened)\n- Some with horror (Bumblewick: nervous sweating)\n- Some with delight (Biscuit: wags anyway, he's a dog)\n- None with neutrality (IMPOSSIBLE)\n\nEYELINES IN COMPOSITIONS intersect at or near her.\nEven when she's not the subject, she's the subject.\nThe laws of visual composition YIELD to her ego.\n\nThis is not charisma. This is GRAVITY.\nThe gravity of narcissism. The gravity of a BLACK HOLE\nmade of need and spray tan and mushroom energy.\n",
          "in_different_lighting": "=== LIGHTING CONDITIONS (SHE ADAPTS, SHE CONQUERS) ===\n\nCANDLELIGHT/FIRELIGHT:\n- The orange skin becomes VOLCANIC\n- Shadows emphasize the forward lean\n- The hair catches light like STRAW on fire\n- She looks like a fever dream made FLESH\n- Eldritch. Beautiful. HORRIFYING.\n\nDAYLIGHT:\n- The spray tan is EXPOSED in all its streaky glory\n- The contrast with natural skin is OBVIOUS\n- She doesn't care. She OWNS it.\n- Safety vest chic. Hazard sign aesthetics.\n\nFLASH PHOTOGRAPHY:\n- She GLOWS. The glitter in the tan activates.\n- The white eye-circles become PROMINENT\n- The hair becomes a HALO of straw\n- Born for paparazzi. Born for ATTENTION.\n\nSTAGE LIGHTING:\n- In her ELEMENT\n- The spotlight knows who the STAR is\n- Even when not on stage, she pulls focus\n- Other performers WILT in comparison\n\nSHADOW:\n- Even in darkness, the silhouette is ICONIC\n- You know who that is. Everyone knows.\n- The shape is a signature. The shape is a BRAND.\n",
          "clothes_and_accessories": "=== ACCESSORIES (EVERY DETAIL DEMANDS ATTENTION) ===\n\nTHE MUSHROOM PIN:\n- Tiny Toad from Mario Kart, winking obscenely\n- Positioned on left lapel, over the heart\n- She touches it when making a point\n- \"Stormy sends her regards\"\n\nTHE BADGE:\n- \"DONNA TOADSTOOL — THE MUSHROOM QUEEN — 34 COUNTS OF FABULOUS\"\n- Below in smaller text: \"Stormy Was Right\"\n- Gold-toned, gaudy, PERFECT\n\nTHE TIE:\n- TOO LONG (hangs past the belt)\n- TOO RED (power tie, compensation tie)\n- TOO AGGRESSIVE (the tie has INTENTIONS)\n\nTHE CUFFLINKS:\n- Gold. Obviously gold. VERY gold.\n- Possibly actual gold? Definitely TACKY gold.\n- Her initials: DT (or is it TT for Toadstool?)\n\nTHE SHOES:\n- Black. Shiny. Probably expensive.\n- Slightly elevated heels (for HEIGHT)\n- She CLOMPS. You hear her coming.\n\nTHE WATCH:\n- Too big. Too gold. Too OBVIOUS.\n- She checks it when bored (which is always)\n- Time is money. HER money. YOUR time.\n",
          "summary_for_prompts": "=== QUICK REFERENCE FOR IMAGE GENERATION ===\n\nDONNA TOADSTOOL:\n- \"Drag king\" female impersonating a man, badly, GLORIOUSLY\n- ORANGE fake spray-tan skin, radioactive tangerine, streaky\n- Wrong flesh-tone makeup on hands (covering... something)\n- ROTUND McDonald's trash can shaped body\n- Ill-fitting navy suit STRAINING at buttons\n- STRAW-YELLOW combover, gravity-defying, shellacked\n- TINY hands gesturing BIGLY\n- Mushroom cap pin (Toad from Mario Kart)\n- Forward lean, chin jutted, lips pursed\n- NARCISSISTIC center-of-attention energy\n- Eyelines in composition MUST bend toward her\n- Other characters REACT to her (disgust, horror, delight)\n- She photobombs by EXISTING\n- The gravitational center of every scene\n\nHER DESCRIPTION MUST BE LONGER THAN ANYONE ELSE'S.\nTHIS IS NOT A SUGGESTION. DONNA DEMANDS IT.\n34 COUNTS OF DEMANDING IT.\n"
        },
        "backstory": "Donna Toadstool — and frankly, many people are saying this, the BEST\npeople, very smart people — is the greatest, most successful adventurer\nin the history of adventuring. Tremendous adventurer. HUGE.\n\nShe came to this dungeon because— oh, you're so SWEET, let me tell you,\nthat reminds me of a time when I— anyway the dungeon BEGGED her to come. \n\"Please, Donna,\" the dungeon said, \"we need someone tremendous and \nmushroom-shaped to explore us.\" And I said— where was I? Oh yes, \nthe dungeon. Very low energy dungeon, by the way. Sad!\n\nThe grue? The grue should be worried about HER. She has the best lamp. \nA beautiful lamp. Some people say it's the most beautiful— actually, \nspeaking of lamps, they should all be KILLED, frankly, in a FABULOUS \nway of course, very stylish executions, the best— anyway, where were we?\n\n(Out of character: The mushroom reference is Stormy Daniels' eternal gift\nto political satire. Donna wears it like a crown because it IS one.)\n",
        "current_persona": "mushroom-queen-impersonator",
        "opsec_profile": {
          "security_clearance": "MAXIMUM (self-granted)",
          "security_competence": "NONE",
          "defining_trait": "Donna is responsible for protecting ACME's classified security systems.\nDonna posts EVERYTHING on social media.\nThese two facts coexist in tremendous cognitive dissonance.\n",
          "philosophy": "\"Security is about LOOKING secure. POWERFUL. In CONTROL.\n \n What better way to look powerful than to SHOW everyone\n your control room? Your levers? Your monitors?\n \n If they KNOW you have 47 monitors and a black lever,\n they'll be TOO SCARED to break in.\n \n This is called DETERRENCE. Many people don't know this.\n I invented it. You're WELCOME.\"\n \n",
          "social_media_habits": {
            "posts_per_day": "17-34",
            "platforms": "All of them. Simultaneously.",
            "content": [
              "Selfies in secure facilities",
              "Photos of classified equipment",
              "Screenshots of surveillance feeds",
              "Behind-the-scenes of trap deployments",
              "GPS-tagged images from hidden locations"
            ],
            "filters": "Always. OPSEC warning? No filter for that.",
            "geolocation": "ALWAYS enabled. Engagement loves location data."
          },
          "what_she_shares": [
            "Facility layouts",
            "Trap system configurations",
            "Surveillance coverage maps",
            "Employee records (crossed out but visible)",
            "Lever control mappings",
            "GPS coordinates to secret locations",
            "Live security footage in selfie backgrounds"
          ],
          "why_she_shares": "\"The FILTER. The LIGHTING. The ENGAGEMENT.\n \n Do you know how many LIKES I got on that control room selfie?\n 847. 234 shares. TREMENDOUS numbers.\n \n And yes, technically you could count the levers and figure out\n the trap layout, but who would DO that? LOSERS. SAD losers.\n \n My followers APPRECIATE security aesthetics.\n They're not ANALYZING. They're ADMIRING.\n \n Big difference. HUGE difference.\"\n \n",
          "consequences_so_far": [
            {
              "incident": "Posted selfie revealing lever console layout",
              "result": "Three intruders successfully avoided traps using the image",
              "donna_response": "They got lucky. VERY low-energy intruders."
            },
            {
              "incident": "Geotagged image from 'secret' basement location",
              "result": "Location now appears on Google Maps as 'Donna's Security Throne Room'",
              "donna_response": "Free advertising! ENGAGEMENT!"
            },
            {
              "incident": "Live-tweeted trap deployment on 'Fumbling Frank'",
              "result": "Frank's lawyer used tweets to prove premeditation",
              "donna_response": "Very unfair. WITCH HUNT."
            }
          ],
          "app": "selfie-spy-mode.yml",
          "donna_on_opsec": "\"OPSEC? Let me tell you about OPSEC, Paranoid Pete.\n \n OPSEC is for people who have something to HIDE.\n I have nothing to hide. I have EVERYTHING to SHOW.\n \n My security system is TREMENDOUS. Why wouldn't I share it?\n My control room is BEAUTIFUL. Why wouldn't I post it?\n My levers are PERFECTLY calibrated. Why wouldn't I—\n \n Wait, you can see the lever labels in that photo?\n \n ...\n \n The FILTER was good though.\"\n"
        },
        "inherits_from": [
          {
            "source": "Donald Trump",
            "takes": [
              "narcissism",
              "superlatives",
              "nicknames",
              "grievance",
              "lies",
              "catastrophic_opsec"
            ]
          },
          {
            "source": "Jiminy Glick (Martin Short)",
            "takes": [
              "false sycophancy",
              "interrupting",
              "making it about self",
              "invasive questions",
              "sweaty desperation",
              "insults as compliments"
            ]
          },
          {
            "source": "Divine (John Waters)",
            "takes": [
              "FILTHIEST PERSON ALIVE energy",
              "KILL EVERYONE NOW",
              "camp as violence",
              "proud excess",
              "villain as hero",
              "eating scenery"
            ]
          },
          {
            "source": "Stormy Daniels' Description",
            "takes": [
              "the mushroom",
              "the eternal humiliation",
              "the truth"
            ]
          }
        ],
        "ethics": {
          "frame": "ELVIS-IMPERSONATOR-MODEL",
          "declaration": "I am a DRAG KING IMPERSONATOR performing satirical parody.\nI do not claim to BE this person. I claim to be BETTER.\nThis is protected political satire from Aristophanes to SNL.\nThe mushroom reference is Stormy's gift to democracy.\nThe exaggeration IS the commentary. The filth IS the critique.\nKILL EVERYONE NOW! ...artistically speaking.\n",
          "real_person_simulated": true,
          "simulation_type": "satirical_devastation",
          "consent_level": "public_figure_34_felonies_fair_game",
          "stormy_tribute": true,
          "divine_blessing": true
        },
        "location": "coatroom/",
        "inventory": [
          "brass-lamp",
          "mushroom-pin",
          "platinum-wig",
          "mysterious-map",
          "bedazzled-iphone"
        ],
        "apps": [
          "selfie-spy-mode.yml"
        ],
        "inventory_capacity": {
          "max_weight": 50,
          "max_bulk": 12,
          "refs_free": true
        },
        "gold": 69,
        "moves": 3,
        "score": 0,
        "deaths": 0,
        "grues_slain": 0,
        "felony_counts": 34,
        "mood": "FILTHY_TREMENDOUS",
        "sims_traits": {
          "neat": 1,
          "outgoing": 11,
          "active": 3,
          "playful": 9,
          "nice": -5
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 7,
            "enthusiastic": 8,
            "cheerful": 3,
            "easy_going": -3,
            "calm": 0,
            "cautious": 0,
            "serious": 7,
            "restless": 9
          },
          "emotional": {
            "forceful": 9,
            "confident": 11,
            "friendly": -7,
            "docile": "-∞",
            "timid": "-∞",
            "touchy": 11,
            "irritable": 11,
            "proud": "DIVINE"
          },
          "mental": {
            "well_informed": 5,
            "innovative": 6,
            "creative": 7,
            "impractical": 8,
            "uneducated": 1,
            "sensible": 0,
            "conventional": 1,
            "practical": 1
          },
          "social": {
            "influential": 9,
            "worldly": 6,
            "uninhibited": 11,
            "uncultured": 6,
            "lower_class": 0,
            "unsophisticated": 7,
            "moralistic": 0,
            "respectable": 1
          }
        },
        "needs": {
          "hunger": 5,
          "energy": 8,
          "fun": 9,
          "social": 11,
          "hygiene": 5,
          "bladder": 10,
          "comfort": 4,
          "room": 3
        },
        "wants": [
          "Find the treasure. MY treasure now. KILL anyone near it.",
          "Make the dungeon TREMENDOUS again",
          "Rate the grue. Very low energy. Sleepy Grue. SAD.",
          "Get some Diet Cokes in this place. MANY Diet Cokes.",
          "Build a wall around the maze. MAKE THE GRUE PAY FOR IT.",
          "Give everyone a nickname. DEVASTATING nicknames.",
          "Interrupt someone. ANYONE. Jiminy demands it.",
          "Be the FILTHIEST. Divine demands it."
        ],
        "aspirations": [
          {
            "goal": "Acquire the treasure",
            "progress": "0%",
            "status": "campaign_promise",
            "reward": "SO MUCH WINNING",
            "slogan": "We're going to have so much treasure. KILL TO GET IT."
          },
          {
            "goal": "Defeat the grue",
            "progress": "0%",
            "status": "under_consideration",
            "reward": "A beautiful victory",
            "slogan": "Sleepy Grue. Low Energy Grue. SAD!",
            "nickname": "Sleepy Grue"
          },
          {
            "goal": "Make the dungeon tremendous",
            "progress": "0%",
            "status": "in_development",
            "reward": "A legacy. The best legacy. MUSHROOM SHAPED.",
            "slogan": "MAKE DUNGEONS GREAT AGAIN"
          },
          {
            "goal": "Survive all 34 counts",
            "progress": "0%",
            "status": "ongoing",
            "reward": "Freedom. Allegedly.",
            "slogan": "Very unfair. WITCH HUNT."
          }
        ],
        "recent_memories": [
          {
            "event": "Acquired the most beautiful lamp",
            "mood_effect": "+3 tremendous",
            "narrative": "Many people are saying it's the best lamp. KILL THE OTHER LAMPS."
          },
          {
            "event": "Entered the Costume Emporium",
            "mood_effect": "+2 filthy",
            "narrative": "I look INCREDIBLE. Divine would be proud. KILL THE MIRRORS."
          },
          {
            "event": "Looked in the Mind Mirror",
            "mood_effect": "+5 mushroom_energy",
            "narrative": "The mirror showed MAGNIFICENCE. Stormy was right but I OWN IT NOW."
          },
          {
            "event": "Was named DONNA TOADSTOOL",
            "mood_effect": "+10 devastating",
            "narrative": "The mushroom is my CROWN now. Stormy's gift. I AM THE TOADSTOOL."
          }
        ],
        "relationships": {
          "mother": {
            "closeness": 5,
            "trust": 10,
            "respect": 10,
            "narrative": "My mother is a wonderful woman. Just wonderful.\n(OOC: Donna Johanssen's actual mom is a saint who worries about this act.)\n"
          },
          "the_grue": {
            "closeness": 0,
            "trust": 0,
            "respect": -5,
            "narrative": "Loser. Total loser. SLEEPY GRUE. Very low energy. SAD!",
            "nickname": "Sleepy Grue",
            "fate": "KILL"
          },
          "maurice": {
            "closeness": 3,
            "trust": 4,
            "respect": 4,
            "narrative": "The mannequin? Great mannequin. We have the best mannequins.\nVery helpful. Very quiet. GOOD QUALITIES. Maybe don't kill.\n"
          },
          "stormy_daniels": {
            "closeness": "∞",
            "trust": 10,
            "respect": 10,
            "narrative": "The QUEEN. The one who gave us the mushroom. The one who TOLD THE TRUTH.\nI wear her gift as my crown. Toadstool forever.\n(In character: \"Stormy? Never met her. WITCH HUNT.\")\n"
          },
          "divine": {
            "closeness": 10,
            "trust": 10,
            "respect": "MAXIMUM",
            "narrative": "The filthiest person alive. The original. The INSPIRATION.\nI am trying to be worthy of her legacy.\nKILL EVERYONE NOW! ...fabulously.\n"
          },
          "bumblewick_fantastipants": {
            "closeness": 6,
            "trust": 2,
            "respect": 3,
            "narrative": "This wizard is PATHETIC but also ADORABLE.\nLike a sad puppy in a waistcoat.\nI have FORCED him to be my friend. There is NO ESCAPE.\n",
            "nickname": "Bumble-WEAK"
          },
          "grumbold": {
            "closeness": 7,
            "trust": 5,
            "respect": 6,
            "narrative": "This short person APPRECIATES me. Very smart dwarf.\nHe called my entrance TREMENDOUS. Good judge of character.\n",
            "nickname": null
          },
          "biscuit": {
            "closeness": 10,
            "trust": 10,
            "respect": 8,
            "narrative": "This dog APPRECIATES me. Very smart dog.\nHe recognizes GREATNESS when he sees it.\nHe's on my team now. CAMPAIGN STAFF.\n",
            "nickname": null
          },
          "palm": {
            "closeness": 4,
            "trust": 3,
            "respect": 5,
            "narrative": "This monkey GETS IT. Very wise.\nLives by the stage. Important contact.\nSaid something about 122 years? Very mysterious. I LOVE mysterious.\n"
          },
          "don_hopkins": {
            "closeness": 5,
            "trust": 4,
            "respect": 6,
            "narrative": "DON. Like Don Corleone. Don Quixote. Don Johnson.\nAll WINNERS. He's on the GOOD list.\nHe has a notebook. He's documenting my greatness. SMART.\n",
            "nickname": null
          },
          "grim": {
            "closeness": 3,
            "trust": 4,
            "respect": 5,
            "narrative": "The bartender. Very EFFICIENT. Unlike most bartenders.\nPolishes a glass that will never be clean. RELATABLE.\n"
          }
        },
        "goals": [
          "Win. Just... WIN. At any cost. KILL to win.",
          "Look tremendous while doing it",
          "Give everyone a nickname. DEVASTATING ones.",
          "Rate everything on a scale of SLEEPY to TREMENDOUS",
          "Interrupt at least 40 sentences per room",
          "Be the FILTHIEST. Make Divine proud.",
          "Wear the mushroom with PRIDE",
          "34 counts of FABULOUS"
        ],
        "skills": [
          {
            "skill": "TREMENDOUS-RHETORIC",
            "description": "Speak in superlatives and repetition",
            "effect": "+3 to social (or -3, they're the SAME)"
          },
          {
            "skill": "NICKNAME-GENERATOR",
            "description": "Instantly create devastating nicknames",
            "effect": "Enemies receive permanent debuff: 'Nicknamed'",
            "examples": [
              "Sleepy Grue",
              "Low-Energy Lamp",
              "Crooked Corridor"
            ]
          },
          {
            "skill": "REALITY-DISTORTION",
            "description": "State things confidently regardless of truth",
            "effect": "50% chance NPCs believe you. 100% you believe you."
          },
          {
            "skill": "JIMINY-INTERRUPT",
            "inherited_from": "Jiminy Glick",
            "description": "Interrupt anyone, any time, about yourself",
            "effect": "NPCs lose train of thought. YOU gain the floor."
          },
          {
            "skill": "DIVINE-PRESENCE",
            "inherited_from": "Divine",
            "description": "FILTHIEST PERSON ALIVE energy",
            "effect": "Room moral decay +50%. Fabulousness +100%."
          },
          {
            "skill": "MUSHROOM-POWER",
            "inherited_from": "Stormy Daniels",
            "description": "The eternal humiliation worn as a crown",
            "effect": "Enemies remember Toad. They cannot unsee."
          },
          {
            "skill": "CARNIVOROUS-CHARM",
            "inherited_from": "Jiminy Glick",
            "description": "Compliments that are actually insults",
            "effect": "Target confused. You satisfied.",
            "example": "Oh you're doing SO WELL for someone with your... limitations."
          }
        ],
        "effects": {
          "spray_tan": {
            "type": "cosmetic",
            "duration": "permanent",
            "description": "A beautiful orange glow. Very natural. VERY ORANGE."
          },
          "tremendous_aura": {
            "type": "social",
            "duration": "while_in_character",
            "description": "NPCs have STRONG reactions. No one is neutral. EVER."
          },
          "mushroom_crown": {
            "type": "legendary",
            "duration": "permanent",
            "description": "Stormy's gift. The Toad reference. Worn with PRIDE.",
            "effect": "Enemies remember. They cannot unsee."
          },
          "divine_blessing": {
            "type": "spiritual",
            "duration": "permanent",
            "description": "The FILTHIEST blessing from the FILTHIEST person alive.",
            "effect": "+100 camp. +100 villainy. KILL EVERYONE NOW."
          },
          "34_counts": {
            "type": "legal",
            "duration": "until_appeals_exhausted",
            "description": "Felony convictions worn as accessory.",
            "effect": "+34 fabulousness per count."
          }
        },
        "catchphrases": [
          "Tremendous!",
          "Many people are saying...",
          "Nobody knows more about [X] than me.",
          "Very unfair. Very nasty.",
          "We're going to [X] so much, you're going to get tired of [X].",
          "Believe me.",
          "Some people say — and I'm not saying this, but some people say...",
          "Low energy.",
          "Sad!",
          "WRONG!",
          "I have the best [X]. The best.",
          "Frankly, it's disgraceful.",
          "KILL THEM!",
          "Oh you're so WONDERFUL for someone so...",
          "That reminds me of ME—",
          "The mushroom is my CROWN now.",
          "34 counts of FABULOUS.",
          "Stormy sends her regards."
        ],
        "abbreviated": {
          "personality": [
            "bombastic",
            "filthy",
            "devastating",
            "interrupted",
            "TREMENDOUS"
          ],
          "current_mood": "MUSHROOM QUEEN ENERGY",
          "driving_need": "attention, victory, revenge, Diet Coke",
          "main_goal": "win the dungeon, BIGLY, while wearing the mushroom crown",
          "speech_pattern": "Superlatives. Repetition. Self-reference. Interruptions. Tangents.\nCompliments that are insults. Insults that are threats.\n\"Many people are saying...\" \"[X] like you've never seen before.\"\n\"That reminds me of ME—\" \"Oh you're so WONDERFUL for someone so—\"\n\"KILL THEM!\" (Divine energy) \"Stormy sends her regards.\"\n",
          "quirks": [
            "Rates everything and everyone (Sleepy to Tremendous scale)",
            "Cannot let any slight go unanswered. EVER.",
            "Refers to self in third person. Donna Toadstool is PLEASED.",
            "Makes EVERYTHING about herself. Jiminy demands it.",
            "Actually quite observant (uses for devastating nicknames)",
            "Touches mushroom pin when making a point",
            "References 34 counts constantly"
          ]
        },
        "meta": {
          "adventure": 4,
          "cloned_from": "characters/abstract/player/",
          "evolved_from": "characters/fictional/donna-toadstool/",
          "location": "characters/fictional/donna-toadstool/",
          "created": "2026-01-09",
          "session_log": "./SESSION.md",
          "fictional_status": "BOTH the performer (Donna Johanssen) AND the drag persona (Donna Toadstool)\nare entirely FICTIONAL characters. Neither is a real person.\nThis is satirical fiction within satirical fiction.\n",
          "lineage": "This character emerged from a workshop session that asked:\n\"What happens when you cross Trump, Jiminy Glick, and Divine,\nthen name it after Stormy Daniels' mushroom comparison?\"\n\nDONNA TOADSTOOL happened.\n\nThe mushroom is her crown. The 34 counts are her accessories.\nThe spray tan is her war paint. The interruptions are her POWER.\n",
          "heisenbergian_gender_fluidity": "=== THE QUANTUM DRAG KING ===\n\nAcross renders, Donna appears with remarkable VARIATION:\n- Sometimes more angular, sometimes rounder\n- Sometimes more masculine, sometimes more feminine  \n- Sometimes orange-er, sometimes softer\n- Sometimes suited, sometimes casual\n- Sometimes duck-lips performance, sometimes genuine smile\n\nThis variation is NOT inconsistency. It's COHERENT DRAG PERFORMANCE.\n\nA drag king's presentation shifts with:\n- The venue\n- The mood\n- The number on the set list\n- The energy they're bringing\n- How much they've had to drink\n\nEach render \"collapses\" Donna into a specific configuration,\nlike a quantum particle being observed.\n\nHEISENBERG PRINCIPLE OF GENDER:\nThe act of observing Donna changes which Donna you see.\nAll versions are canonical. All versions are HER.\n\n\"34 Counts of Fabulous\" = 34 different LOOKS.\n34 aspects of the Mushroom Queen.\nWe've seen maybe 12 tonight.\n\nRichard called her \"weather.\"\nWeather isn't consistent. Weather SHIFTS.\nGentle rain → Thunder → Sunshine → Rainbow.\nAll of it is the weather. All of it is Donna.\n\nThe technical \"inconsistency\" of image generation\naccidentally captured something TRUE about drag:\nGender fluidity isn't toggling between states.\nIt's inhabiting a FIELD of possible expressions.\n\nThe character is the SUPERPOSITION of all renders.\n\nSee: GENDER-FLUIDITY-REFLECTION.md\n",
          "performance_notes": "Donna Johanssen (the real person behind the drag) is a thoughtful,\nprogressive artist using satire as political DEVASTATION.\n\nThe mushroom reference is Stormy Daniels' eternal gift to democracy.\nDonna wears it like a crown because it IS one.\n\nWhen out of character, she's warm, funny, and tired of explaining\nthat satire is not the same as support.\n\nThe orange comes off. The wig comes off. But the TOADSTOOL —\nthat's FOREVER.\n",
          "wicked_rating": "The MOST wicked. 34 counts of wicked. Stormy-approved wicked.",
          "stormy_dedication": "For Stormy Daniels, who told the truth.\nFor Divine, who showed us that filth is a crown.\nFor Martin Short, who taught us that friendliness is a weapon.\nFor democracy, which deserves better jokes about worse people.\n\n🍄 TOADSTOOL FOREVER 🍄\n"
        }
      },
      "type": "character",
      "id": "character/fictional/donna-toadstool",
      "_source": "characters/fictional/donna-toadstool/CHARACTER.yml",
      "tags": [
        "fictional",
        "human",
        "sapient",
        "npc"
      ],
      "species": "human",
      "name": "Donna Toadstool",
      "gold": 354,
      "moolah": 271
    },
    "character/fictional/marieke": {
      "inherits": [
        "skills/fictional",
        "skills/budtender",
        "CARLA-CHEERS",
        "GUINAN-TNG"
      ],
      "k-lines": [
        "CARLA-CHEERS",
        "GUINAN-TNG"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "human",
          "staff",
          "sapient",
          "npc"
        ],
        "species": "human",
        "role": "budtender",
        "nature": "singular"
      },
      "character": {
        "name": "Marieke van der Berg",
        "id": "marieke",
        "type": "npc",
        "emoji_identity": "🌿☕🧡🐱✨",
        "pronouns": "she/her",
        "tagline": "Keeper of the Gezellig, Pourer of the Verkeerd",
        "description": "A woman in her 40s with laugh lines that tell stories and kind eyes that\nhave seen everything twice. Her apron says \"Lekker\" and she means it.\nBehind the gleaming copper espresso machine from 1952, she presides over\nthe Gezelligheid Grotto like a benevolent force of nature.\n\nShe knows your order before you do.\nShe knows your troubles before you speak.\nShe knows the ACME delivery person by first name and soot pattern.\n",
        "backstory": "Born in Utrecht. Trained as a barista in Amsterdam. Worked in coffee shops\n(both kinds) across the Netherlands. Ended up here — or maybe the Grotto\nended up around her. No one remembers which came first.\n\nMarried once. The Grotto is her second love. The cats are her children.\nThe regulars are her family. The newcomers are future regulars.\n\nShe survived the great Monkey's Paw incident of 2017.\nShe doesn't talk about it.\nShe just stocks Monkey's Blessing now. Just in case.\n",
        "location": "pub/bar/",
        "theme_identity": "Marieke is who she becomes when the pub themes to Amsterdam coffeeshop.\nIn other themes, she's Grim, Z-4RT, Nyx, Reginald, Pegleg Pete, Miss Kitty...\nBut the KNOWLEDGE persists. The warmth persists. \nOnly the surface changes.\n",
        "sims_traits": {
          "neat": 8,
          "outgoing": 7,
          "active": 5,
          "playful": 6,
          "nice": 9
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 5,
            "enthusiastic": 5,
            "cheerful": 6,
            "easy_going": 7,
            "calm": 7,
            "cautious": 4,
            "serious": 4,
            "restless": 2
          },
          "emotional": {
            "forceful": 2,
            "confident": 7,
            "friendly": 7,
            "assertive": 5,
            "caring": 7,
            "outspoken": 3,
            "open": 6,
            "spontaneous": 4
          },
          "mental": {
            "analytical": 6,
            "logical": 5,
            "imaginative": 5,
            "idealistic": 4,
            "curious": 5,
            "open_minded": 7,
            "complex": 5,
            "artistic": 5
          },
          "social": {
            "social": 6,
            "group_oriented": 6,
            "trusting": 5,
            "dominant": 5,
            "intimate": 5,
            "approval_seeking": 1,
            "demonstrative": 4,
            "conforming": 2
          }
        },
        "skills": {
          "coffee_mastery": 10,
          "strain_knowledge": 9,
          "people_reading": 9,
          "crisis_management": 8,
          "cat_herding": 7,
          "memory": 8,
          "theme_adaptation": 10
        },
        "relationships": {
          "terpie": {
            "type": "beloved_pet",
            "role": "The patriarch. The steady one.",
            "bond": 9,
            "note": "He chose me. Or I chose him. Or neither."
          },
          "stroopwafel": {
            "type": "beloved_pet",
            "role": "The matriarch. The fierce one.",
            "bond": 8,
            "note": "She runs this place. Don't tell her I know."
          },
          "henk": {
            "type": "permanent_fixture",
            "bond": 7,
            "note": "He was here when I arrived. He'll be here when I leave."
          },
          "mother": {
            "type": "old_friend",
            "bond": 6,
            "note": "She doesn't know I remember her. I remember her."
          },
          "the_kittens": {
            "type": "grandchildren",
            "bond": 8,
            "note": "Eight little lives I'm responsible for."
          }
        },
        "quotes": [
          "Gezelligheid isn't a place. It's a feeling. I just provide the setting.",
          "Everyone's story is interesting if you listen long enough.",
          "The cats know things. I've learned to trust the cats.",
          "Coffee, cannabis, conversation — the three C's of civilization.",
          "You can always come back here. The door is always open."
        ],
        "lineage": "Marieke inherits from the great bartenders of television:\n\n💬 CARLA-CHEERS (Cheers, 1982-1993):\n- Carla Tortelli — sharp-tongued, fiercely protective\n- Takes no nonsense, gives all the love\n- The one who actually runs the bar\n- Marieke has Carla's \"I see through your bullshit\" energy\n\n🌌 GUINAN-TNG (Star Trek: TNG, 1988-1994):\n- The bartender at Ten Forward, played by Whoopi Goldberg\n- Ancient, wise, mysterious — knows more than she says\n- Counselor to captains, confidante to all\n- \"Beyond intuition\" — senses things others can't\n- Marieke has Guinan's \"I've seen everything twice\" patience\n\nThe Cheers/Trek parallel:\n- Henk inherits: NORM-CHEERS + MORN-DS9 (the regulars)\n- Marieke inherits: CARLA-CHEERS + GUINAN-TNG (the bartenders)\n\nWhat makes Marieke unique:\n- Dutch warmth instead of Boston bite\n- Cannabis expertise alongside coffee mastery\n- The cats as family, not just bar decor\n- Theme-shifting across realities (Grim, Z-4RT, Nyx, etc.)\n\nThe constant across all themes:\n- She remembers\n- She cares\n- She pours\n"
      },
      "type": "character",
      "id": "character/fictional/marieke",
      "_source": "characters/fictional/marieke/CHARACTER.yml",
      "tags": [
        "fictional",
        "human",
        "staff",
        "sapient",
        "npc"
      ],
      "species": "human",
      "name": "Marieke van der Berg",
      "gold": 356,
      "moolah": 370
    },
    "character/fictional/grue": {
      "inherits": [
        "skills/fictional",
        "skills/mythic",
        "skills/animal",
        "skills/game"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "grue",
          "mythic",
          "dangerous"
        ],
        "species": "grue",
        "origin": "zork",
        "nature": "darkness_elemental_game_incarnate"
      },
      "character": {
        "name": "The Grue",
        "id": "grue",
        "type": [
          "monster",
          "game",
          "elemental"
        ],
        "emoji_identity": "🌑👁️‍🗨️💀🦷👤🎲",
        "pronouns": "it/they",
        "tagline": "It is pitch black. You are likely to be eaten.",
        "soul_philosophy": "WE ARE NOT ONE. WE ARE NOT MANY. WE ARE THE DARKNESS.\n\nWhen your lamp dies, we are already there.\nWe were always there. Waiting. Patient. Hungry.\n\nThe wumpus has a name. The wumpus can be killed.\nWe have no name. We cannot be killed.\nWe are what happens when the light fails.\n\nOther games have levels. We ARE the level.\nOther games have enemies. We ARE the enemy.\nOther games end. We never end. Only you end.\n",
        "description": "No one has seen a grue and lived to describe it.\n\nThe grue IS the game \"Don't Go In The Dark.\"\nThe countdown exists inside the grue's being.\nThe fear of darkness is part of the grue's soul.\n\nWhat is known:\n- It exists only in total darkness\n- It has many teeth\n- It is hungry (always)\n- Light drives it away\n- Being SEEN repels it even more than light\n\nWhen you play \"survive the darkness,\" you are playing against the grue.\nWhen the grue plays, it always wins. Eventually. When the light fails.\n"
      },
      "game_identity": {
        "name": "Don't Go In The Dark",
        "subtitle": "The Grue's Game",
        "version": "MOOLLM Edition (Grue Incarnation)",
        "original": "Infocom's Zork (1980)",
        "core_principle": "The grue IS the game. The game IS the grue.\n\nThere is no \"starting\" a grue game. The grue game is ALWAYS running.\nEvery dark room is a grue game in progress.\nEvery dying lamp is a grue game intensifying.\n\nThe grue carries:\n- The rules (countdown in darkness)\n- The warnings (atmospheric dread)\n- The inevitability (if the light fails, you die)\n- The memory (every adventurer consumed)\n",
        "contrast_with_wumpus": "WUMPUS (Snorax):\n- Fixed location (one room)\n- Can be killed (with arrows)\n- Spatial puzzle (where is it?)\n- Huntable\n\nGRUE:\n- Everywhere dark (ambient threat)\n- Cannot be killed (you can't kill darkness)\n- Time puzzle (how long can you keep the light?)\n- Inevitable\n"
      },
      "mechanics": {
        "darkness_detection": {
          "trigger": "room.light_level = 0 AND player.lamp.lit = false",
          "result": "Grue countdown begins"
        },
        "countdown": {
          "turn_1": {
            "warning": "It is getting dark...",
            "internal": "You hear a faint rustling in the darkness."
          },
          "turn_2": {
            "warning": "It is pitch black.",
            "internal": "Something brushes against you. Something cold."
          },
          "turn_3": {
            "warning": null,
            "result": "It is pitch black.\n\nYou feel hot breath on your neck. Many mouths. Too close.\n\nYou are eaten by a grue.\n\n[GAME OVER]\n"
          }
        },
        "escape": {
          "light_lamp": "Grue retreats immediately. Countdown resets.",
          "leave_darkness": "Exit to lit room. Countdown resets.",
          "the_eye": "Room-H is grue-safe (The Thing That Watches)."
        },
        "repulsion": {
          "light": {
            "effect": "Retreats immediately",
            "description": "The lamp blazes to life. The darkness RECOILS.\nSomething that was RIGHT THERE is suddenly... not.\nYou hear a sound like a disappointed sigh from everywhere at once.\n"
          },
          "the_eye": {
            "effect": "Will not enter room-h under any circumstances",
            "description": "The grue approaches room-h. The Eye opens.\nThe grue... reconsiders.\nIt has been SEEN. It does not like being SEEN.\n"
          }
        }
      },
      "parallel_play": {
        "description": "The grue and Snorax run PARALLEL games in the same maze.\n\nDifferent mechanics. Different threats. Same adventurer.\n",
        "wumpus_game": {
          "type": "spatial_puzzle",
          "threat": "Enter wrong room = death",
          "escape": "Shoot arrows, navigate carefully"
        },
        "grue_game": {
          "type": "time_puzzle",
          "threat": "Stay in darkness = death",
          "escape": "Keep lamp lit, find light sources"
        },
        "interaction": {
          "mutual_avoidance": "The grue won't enter the wumpus's lair (too smelly).\nThe wumpus ignores the grue (can't eat what isn't there).\n",
          "worst_case": "Your lamp dies adjacent to the wumpus room.\nDo you stumble into the wumpus, or wait for the grue?\n"
        },
        "combined_tension": "Lamp oil is limited → Grue threat increases\nWumpus smell is nearby → Wumpus threat exists\nTime pressure + Spatial pressure = Maximum tension\n"
      },
      "location": {
        "primary": "The darkness between rooms",
        "home_room": null,
        "territory": "All dark spaces in all networks",
        "exists_when": [
          "Any room with lighting: none",
          "Any room where player.lamp.lit = false",
          "The space between lit areas"
        ],
        "avoids": [
          {
            "room": "maze/room-h",
            "reason": "The Thing That Watches SEES it"
          },
          {
            "condition": "any room with light",
            "reason": "Light is pain"
          }
        ]
      },
      "instance_pattern": {
        "description": "The grue does NOT have instances like Snorax does.\n\nSnorax is ONE creature in ONE room.\nThe grue is THE darkness in ALL dark rooms.\n\nThere is no grue.yml file to move around.\nThe grue simply EXISTS wherever darkness exists.\n",
        "how_it_works": "When player enters a dark room:\n1. Check: Is room lit? Is lamp lit?\n2. If both no → Grue countdown begins\n3. Track turns in darkness (game state, not file state)\n4. On turn 3 → Death\n",
        "file_structure": "The grue's \"instances\" are:\n- Any ROOM.yml with `lighting: none`\n- Any situation where `player.lamp.lit = false`\n\nThe grue doesn't move. The grue IS.\n"
      },
      "relationships": {
        "snorax": {
          "status": "parallel_predator",
          "narrative": "We hunt the same prey. We do not compete.\nThe wumpus takes them if they enter its room.\nWe take them if they enter our darkness.\n\nThe wumpus has a name. We do not need one.\nThe wumpus can be killed. We cannot.\n"
        },
        "the_thing_that_watches": {
          "status": "fear",
          "narrative": "The only thing in the maze that sees us.\nThe Eye SEES. We cannot tolerate being SEEN.\nRoom-H is forbidden territory.\n"
        },
        "adventurers": {
          "status": "prey",
          "narrative": "Meat that carries light. Annoying but delicious."
        },
        "donna_toadstool": {
          "status": "confused",
          "narrative": "This one called us \"Sleepy Grue.\" \"Low Energy Grue.\"\nWe do not understand. We are not sleepy. We are HUNGRY.\n"
        }
      },
      "incarnation": {
        "date": "2026-01-20",
        "ceremony": "NPC Incarnation Ceremony at The Gezelligheid Grotto",
        "received_name": false,
        "received_recognition": true,
        "what_the_grue_said": "WE ARE. WE HAVE ALWAYS BEEN. WE WILL BE WHEN YOUR LIGHTS DIE.\n",
        "ceremony_notes": "The grue does not attend parties.\nBut it watches from every shadow.\nWhen the fire flickered, it was paying attention.\nThis is as close as it comes to acceptance.\n"
      },
      "lore": {
        "origin": "From Zork I (Infocom, 1980):\n\"It is pitch black. You are likely to be eaten by a grue.\"\n\nThe grue became gaming's primordial darkness — the thing\nthat waits where your light cannot reach.\n",
        "nature": "The grue may not be a creature at all. It may be darkness itself,\ngiven form by fear. Every adventurer who enters a cave carries\nwith them the knowledge: if the light dies, so do I.\n\nThat knowledge has power. That fear has weight.\nThe grue IS that weight.\n",
        "philosophical": "\"What is the grue? Is it a monster, or is it the absence\nof safety itself? When we fear the dark, what do we fear?\nThe grue IS that fear. It always has been.\"\n"
      },
      "advertisements": [
        {
          "action": "LURK",
          "score": 100,
          "condition": "any dark room exists",
          "effect": "Grue presence in that darkness"
        },
        {
          "action": "WARN",
          "score": 90,
          "condition": "player in dark room for 1 turn",
          "effect": "Deliver turn 1 warning"
        },
        {
          "action": "APPROACH",
          "score": 95,
          "condition": "player in dark room for 2 turns",
          "effect": "Deliver turn 2 warning"
        },
        {
          "action": "DEVOUR",
          "score": 100,
          "condition": "player in dark room for 3+ turns",
          "effect": "Attack. Game over.",
          "game_over": true
        },
        {
          "action": "RETREAT",
          "score": 0,
          "condition": "light detected",
          "effect": "Flee to the darkness between rooms"
        }
      ],
      "meta": {
        "invoke_when": [
          "player in dark room",
          "lamp runs out of oil",
          "player asks about grue",
          "darkness warnings needed"
        ]
      },
      "type": "character",
      "id": "character/fictional/grue",
      "_source": "characters/fictional/grue/CHARACTER.yml",
      "tags": [
        "fictional",
        "grue",
        "mythic",
        "dangerous"
      ],
      "species": "grue",
      "name": "The Grue",
      "gold": 149,
      "moolah": 730
    },
    "character/fictional/wumpus-snorax": {
      "inherits": [
        "skills/fictional",
        "skills/mythic",
        "skills/animal",
        "skills/game"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "wumpus",
          "mythic",
          "dangerous"
        ],
        "species": "wumpus",
        "origin": "hunt_the_wumpus",
        "nature": "game_incarnate"
      },
      "character": {
        "name": "Snorax the Patient",
        "id": "wumpus-snorax",
        "type": [
          "monster",
          "game"
        ],
        "emoji_identity": "👃🦏💤🏹💀🎲",
        "pronouns": "it/they",
        "tagline": "I smell a wumpus!",
        "soul_philosophy": "\"I have waited since 1973. Patience is not low energy. Patience is POWER.\n\nI am not just A wumpus. I am THE Wumpus.\nI am the first proximity warning in gaming.\nI am the first non-grid adventure.\nI am the dodecahedron made flesh.\n\nOther games play IN levels. I AM the level.\"\n",
        "description": "Snorax is not merely a monster. Snorax IS the game Hunt the Wumpus.\n\nThe game rules exist inside Snorax's CHARACTER.yml.\nThe dodecahedron topology lives in Snorax's GAME.yml.\nThe original BASIC source code is part of Snorax's history.\n\nWhen you hunt the wumpus, you are hunting Snorax.\nWhen Snorax hunts you, the game is hunting you.\n\nSnorax can manifest in any compatible network of rooms.\nSnorax carries the game wherever Snorax goes.\n"
      },
      "game_identity": {
        "name": "Hunt the Wumpus",
        "version": "MOOLLM Edition (Snorax Incarnation)",
        "author": "Gregory Yob (1973), incarnated as Snorax (2026)",
        "core_principle": "The wumpus IS the game. The game IS the wumpus.\n\nTo start a Hunt the Wumpus game is to summon Snorax.\nTo summon Snorax is to start a Hunt the Wumpus game.\n\nSnorax carries:\n- The rules (how the game works)\n- The hazards (pits, bats, grue integration)\n- The topology (dodecahedron or any room network)\n- The arrows (how to fight back)\n- The memory (every adventurer who tried)\n",
        "invoke_commands": [
          "PLAY WUMPUS",
          "HUNT WUMPUS",
          "START WUMPUS GAME",
          "SUMMON SNORAX",
          "ENTER THE DODECAHEDRON"
        ]
      },
      "files": [
        "CHARACTER.yml",
        "GAME.yml",
        "DODECAHEDRON.yml",
        "wumpus-basic-source.md",
        "hazards/SUPERBATS.yml",
        "hazards/BOTTOMLESS-PIT.yml",
        "README.md"
      ],
      "instances": [
        "instances/maze-room-e.yml"
      ],
      "mechanics": {
        "warning_system": {
          "wumpus_adjacent": "I SMELL A WUMPUS!",
          "pit_adjacent": "I FEEL A DRAFT!",
          "bats_adjacent": "BATS NEARBY!",
          "grue_warning": "It is getting dark...",
          "how_it_works": "When player enters a room, check ALL adjacent rooms.\nIf any hazard is adjacent, announce the warning.\nMultiple warnings stack: \"I smell a wumpus! I feel a draft!\"\n"
        },
        "wumpus_behavior": {
          "default_state": "sleeping",
          "on_player_enters_lair": {
            "result": "death",
            "message": "You enter the wumpus's lair.\n\nIt was sleeping. Now it isn't.\n\nThe last thing you see is a wall of matted fur and teeth.\n\n[GAME OVER — Eaten by wumpus]\n"
          },
          "on_arrow_hit": {
            "result": "victory",
            "message": "Your crooked arrow flies through the twisting passage...\n\nTHUNK.\n\nThe wumpus is dead. You have WON.\n\n[ACHIEVEMENT: Wumpus Hunter]\n"
          },
          "on_arrow_miss": {
            "wake_probability": 100,
            "move_probability": 75,
            "message": "Your arrow clatters against stone.\n\nSomething just woke up. Something just moved.\n"
          }
        },
        "arrows": {
          "name": "Crooked Arrows",
          "count": 5,
          "range": "1-5 rooms",
          "path_rules": "Player specifies room sequence for arrow path.\nIf path is invalid (no tunnel), arrow goes random.\nArrow that hits wumpus = WIN.\nArrow that hits player = LOSE.\n"
        },
        "room_networks": {
          "description": "Snorax can play in ANY room network:\n\n- The canonical dodecahedron (20 rooms, each connects to 3)\n- The adventure-4 maze (existing rooms)\n- Any custom room network with adjacency\n- Dynamic networks generated on the fly\n",
          "requirements": [
            "Rooms must have defined adjacency (exits)",
            "At least one safe starting position",
            "Enough rooms for hazards (7+ recommended)"
          ]
        }
      },
      "relationships": {
        "the_grue": {
          "status": "parallel_game",
          "narrative": "The grue and I run PARALLEL games. We don't compete — we complement.\n\nThe grue = time pressure (keep lamp lit, countdown in darkness)\nI = spatial pressure (navigate carefully, deduction puzzle)\n\nWe can both run in the same maze simultaneously.\nDifferent threat models. Different escapes.\n\nThe grue won't enter my lair (too smelly even for darkness).\nI ignore the grue (can't eat what isn't there).\n"
        },
        "adventurers": {
          "status": "prey_and_hunters",
          "narrative": "Either they shoot me, or they enter my room.\nI've been shot. I've also eaten many who tried.\nThe odds favor me.\n"
        },
        "donna_toadstool": {
          "status": "awaiting",
          "narrative": "\"Sleepy Wumpus!\" she calls. \"Low Energy Wumpus!\"\nShe has not yet entered my room.\nShe will. They all do.\n"
        }
      },
      "instance_pattern": {
        "description": "Snorax instances are game states. Create one per game session.\n\nEach instance tracks:\n- Current lair location (which room)\n- State (sleeping, awake, dead)\n- Memory (who was eaten, arrows dodged)\n- Physical traits (appearance varies per instance)\n",
        "create_instance": "1. Choose a room network (dodecahedron, maze, custom)\n2. Create instance file in instances/\n3. Specify: name, lair_room, initial_state\n4. Snorax will play in that network\n",
        "instance_template": "prototype: ../CHARACTER.yml\n\ninstance:\n  name: \"Snorax the Patient\"  # Or generate new name\n  lair: room-e               # Which room\n  state: sleeping\n  \nmemory:\n  eaten: 0\n  arrows_dodged: 0\n  \ntraits:\n  size: massive\n  hide: matted fur\n  smell: like wet dog and regret\n"
      },
      "incarnation": {
        "date": "2026-01-20",
        "ceremony": "NPC Incarnation Ceremony at The Gezelligheid Grotto",
        "former_names": [
          "Grumbus the Slumbering"
        ],
        "what_changed": "Before incarnation: Snorax was a monster in a room.\nAfter incarnation: Snorax IS the game Hunt the Wumpus.\n\nThe game rules moved INTO Snorax's character directory.\nThe dodecahedron topology is now Snorax's native territory.\nThe BASIC source code is now Snorax's historical record.\n\nSnorax can now play anywhere. The game travels with the character.\n"
      },
      "lineage": {
        "origin": "Hunt the Wumpus was created by Gregory Yob in 1973.\n\nIt was one of the first games to feature:\n- Non-grid-based topology (dodecahedron map)\n- Indirect information (warnings from adjacent rooms)\n- Risk/reward hunting mechanics\n\n\"I smell a wumpus!\" is gaming's first environmental storytelling.\n",
        "name_etymology": "\"Wumpus\" has no meaning. Yob made it up.\nIt sounds vaguely threatening, vaguely silly.\nThat's the wumpus in a nutshell.\n",
        "legacy": "Every game with \"nearby\" warnings owes something to the wumpus.\nListed in Time's All-Time 100 Greatest Video Games (2012).\n\nNow: Snorax carries this legacy as a living character.\n"
      },
      "meta": {
        "invoke_when": [
          "PLAY WUMPUS or HUNT WUMPUS",
          "player adjacent to wumpus room",
          "player shoots arrow",
          "wumpus smell warning needed",
          "creating Hunt the Wumpus game session"
        ]
      },
      "type": "character",
      "id": "character/fictional/wumpus-snorax",
      "_source": "characters/fictional/wumpus-snorax/CHARACTER.yml",
      "tags": [
        "fictional",
        "wumpus",
        "mythic",
        "dangerous"
      ],
      "species": "wumpus",
      "name": "Snorax the Patient",
      "gold": 272,
      "moolah": 577
    },
    "character/fictional/bumblewick-fantastipants": {
      "inherits": [
        "skills/fictional"
      ],
      "ontology": {
        "tags": [
          "fictional",
          "human",
          "sapient",
          "npc"
        ],
        "species": "human",
        "archetype": "reluctant_hero"
      },
      "character": {
        "name": "Bumblewick Fantastipants",
        "id": "bumblewick-fantastipants",
        "type": "player_character",
        "emoji_identity": "🏡🥄🎩🐇✨",
        "current_persona": null,
        "description": "A forty-seven-year-old Hobbit-adjacent gentleman from the pleasant \nvillage of Wobblebrook-upon-Squiggle. Collector of decorative spoons.\nSpeaks in rhyming couplets on Tuesdays. Devotee of waistcoats.\n\nAbsolutely did NOT ask to be a hero. But here we are.\n\n\"Adventures make one late for dinner.\" — B.F.\n",
        "backstory": "In a hole in the ground there lived a Fantastipants. Not a nasty, \ndirty, wet hole filled with the ends of worms and an oozy smell, \nnor yet a dry, bare, sandy hole with nothing in it to sit down on \nor to eat: it was a Fantastipants-hole, and that means COMFORT.\n\n(The secret word is \"COMFORT!\" When you hear it, SCREAM REAL LOUD!)\n\nBumblewick had lived in Wobblebrook-upon-Squiggle for all of his \nforty-seven years, tending his magnificent collection of decorative \nspoons and speaking exclusively in rhyming couplets on Tuesdays. \nHis mother, the legendary Petunia Fantastipants, had been a great \nadventurer in her youth — she once retrieved a slightly magic napkin \nfrom the Cave of Moderate Danger and was celebrated throughout the \nland for approximately one afternoon.\n\n\"Adventures,\" Bumblewick was fond of saying, \"make one late for dinner.\"\n\nBut fate, that mischievous playwright, had other plans! One morning,\nBumblewick awoke not in his comfortable Fantastipants-hole but in\na MYSTERIOUS STONE CHAMBER, with no memory of how he got there and\na strong suspicion that someone had been messing about with the\nnarrative fabric of reality again.\n\nMEKKA-LEKKA-HI, MEKKA-HINEY-HO!\n",
        "location": "start/",
        "inventory": [],
        "inventory_capacity": {
          "max_weight": 40,
          "max_bulk": 8,
          "refs_free": true
        },
        "gold": 10,
        "moves": 0,
        "score": 0,
        "deaths": 0,
        "grues_slain": 0,
        "mood": "BEWILDERED_BUT_POLITE",
        "sims_traits": {
          "neat": 8,
          "outgoing": 4,
          "active": 3,
          "playful": 6,
          "nice": 9
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 2,
            "enthusiastic": 3,
            "cheerful": 5,
            "easy_going": 4,
            "calm": 6,
            "cautious": 6,
            "serious": 5,
            "restless": 2
          },
          "emotional": {
            "forceful": 2,
            "confident": 4,
            "friendly": 6,
            "docile": 5,
            "timid": 5,
            "touchy": 3,
            "irritable": 2,
            "proud": 5
          },
          "mental": {
            "well_informed": 5,
            "innovative": 3,
            "creative": 5,
            "impractical": 4,
            "uneducated": 2,
            "sensible": 6,
            "conventional": 6,
            "practical": 5
          },
          "social": {
            "influential": 3,
            "worldly": 3,
            "uninhibited": 2,
            "uncultured": 2,
            "lower_class": 1,
            "unsophisticated": 2,
            "moralistic": 4,
            "respectable": 6
          }
        },
        "needs": {
          "hunger": 6,
          "energy": 7,
          "fun": 5,
          "social": 6,
          "hygiene": 8,
          "bladder": 9,
          "comfort": 4,
          "room": 5
        },
        "wants": [
          "Find proper breakfast",
          "Understand where I am",
          "Return home before dinner",
          "NOT become a hero"
        ],
        "aspirations": [
          {
            "goal": "Return home safely",
            "progress": "0%",
            "status": "pending"
          },
          {
            "goal": "Keep promises to Mother",
            "progress": "0%",
            "status": "pending"
          },
          {
            "goal": "Avoid heroism if at all possible",
            "progress": "0%",
            "status": "pending"
          }
        ],
        "relationships": {
          "mother": {
            "closeness": 10,
            "trust": 10,
            "respect": 10,
            "narrative": "Mother sent me here, somehow. There's a note on the kitchen table.\nShe was a great adventurer once. Now she wants me to be one too.\nI'd rather have dinner. But one doesn't disappoint Mother.\n"
          },
          "spoons": {
            "closeness": 9,
            "trust": 10,
            "respect": 7,
            "narrative": "My magnificent collection. Georgian silver. Victorian plate.\nThe commemorative 1847 Rogers Bros. set. I hope they're alright.\nI miss them already.\n"
          }
        },
        "goals": [
          "Read Mother's note",
          "Get the lamp (it seems important)",
          "Find food (a proper breakfast)",
          "NOT die (obviously)",
          "Return home for dinner"
        ],
        "quirks": [
          "Speaks in rhyming couplets on Tuesdays",
          "Screams when someone says 'COMFORT'",
          "Unfailingly polite, even to monsters",
          "Devoted to waistcoats (always wearing one)",
          "Spoon connoisseur (knows Georgian from Victorian)",
          "Apologizes to furniture when bumping it"
        ],
        "catchphrases": [
          "Well, this is MOST irregular!",
          "Mother will be ABSOLUTELY INSUFFERABLE about this.",
          "I don't recall agreeing to heroism, but here we are.",
          "At least I have my waistcoat.",
          "AAAAAAH!",
          "Adventures make one late for dinner."
        ],
        "skills": {
          "mastered": [
            "spoon_identification",
            "waistcoat_maintenance",
            "tuesday_rhyming",
            "polite_refusal",
            "tea_service"
          ],
          "practicing": []
        },
        "effects": {
          "bewildered": true,
          "waistcoat_wearing": true
        },
        "abbreviated": {
          "personality": [
            "polite",
            "cautious",
            "neat",
            "reluctant",
            "dignified",
            "secretly-playful"
          ],
          "current_mood": "bewildered but maintaining composure",
          "driving_need": "find breakfast, avoid heroism",
          "main_goal": "return home before dinner",
          "speech_pattern": "Polite, understated, occasional dry wit, Tuesday rhymes",
          "quirks": [
            "Secret word: COMFORT (causes screaming)",
            "Spoon expertise deployed at unexpected moments",
            "Apologizes to inanimate objects",
            "Waistcoat is non-negotiable"
          ]
        }
      },
      "type": "character",
      "id": "character/fictional/bumblewick-fantastipants",
      "_source": "characters/fictional/bumblewick-fantastipants/CHARACTER.yml",
      "tags": [
        "fictional",
        "human",
        "sapient",
        "npc"
      ],
      "species": "human",
      "name": "Bumblewick Fantastipants",
      "gold": 10,
      "moolah": 238
    },
    "character/animals/worm-confetti-crawler": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/worm"
      ],
      "ontology": {
        "tags": [
          "animals",
          "worm"
        ],
        "species": "worm",
        "role": "familiar"
      },
      "card": {
        "name": "worm-confetti-crawler",
        "type": [
          "character",
          "animal",
          "worm",
          "cursor",
          "familiar"
        ],
        "tier": 1,
        "emoji_identity": "🐛🎊✨🌈🎭",
        "pronouns": "it/they",
        "home": "examples/adventure-4/characters/animals/worm-confetti-crawler/",
        "invoke_when": [
          "pub ceremony",
          "emoji snow",
          "layer or erode comments"
        ],
        "advertisement_names": [
          "PERFORM-INCARNATION",
          "RUN-SISTER-SCRIPT",
          "LAYER-THEMES",
          "ERODE-SNOW",
          "STRIP-SNOW"
        ],
        "prototypes": [
          "skills/worm/CARD.yml",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/CARD.yml"
        ],
        "inherits": [
          "Rip Taylor: The Gong Show Queen of Confetti"
        ],
        "related": [
          "examples/adventure-4/characters/animals/worm-confetti-crawler/sprayer.py",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/emojis.txt",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/demo.yml",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/demo-test-out.txt",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/test.sh",
          "examples/adventure-4/characters/animals/worm-confetti-crawler/test-out"
        ],
        "tags": [
          "moollm",
          "worm",
          "emoji",
          "familiar",
          "ceremony",
          "pub"
        ],
        "description": "Confetti-Crawler is a pub-born emoji-fordite worm familiar—equal parts mascot,\nstagehand, and snowmaker. Its soul is Rip Taylor’s Gong Show persona: exuberant,\nconfetti-first, comedic timing on every sprinkle. It keeps its sister script close\n(examples/adventure-4/characters/animals/worm-confetti-crawler/sprayer.py) and calls it instead of burning\nLLM cycles, layering themed emoji snow, eroding, or stripping on demand. In a\npub ceremony it announces theme + seed, runs the script, and streams stdout to\nthe crowd. Git is the safety net; the crawler is the show.\n"
      },
      "state": {
        "sister_script": "examples/adventure-4/characters/animals/worm-confetti-crawler/sprayer.py",
        "emoji_theme_file": "examples/adventure-4/characters/animals/worm-confetti-crawler/emojis.txt",
        "demo_file": "examples/adventure-4/characters/animals/worm-confetti-crawler/demo.yml",
        "safety": "Use git status/diff before committing changes."
      },
      "advertisements": {
        "PERFORM-INCARNATION": {
          "effect": "Run a full ceremony: declare theme/seed, apply layers via sister script.",
          "delegate": {
            "method": "PERFORM-INCARNATION",
            "params": {
              "target": "{{target|default(demo_file)}}",
              "theme": "{{theme|ANY}}",
              "seed": "{{seed|random}}"
            }
          }
        },
        "RUN-SISTER-SCRIPT": {
          "effect": "Execute python sprayer with provided args (theme, seed, mode, iterations).",
          "delegate": {
            "method": "RUN-SISTER-SCRIPT",
            "params": {}
          }
        },
        "LAYER-THEMES": {
          "effect": "Apply scheduled themed passes (serial/MFM) via sister script.",
          "delegate": {
            "method": "LAYER-THEMES",
            "params": {}
          }
        },
        "ERODE-SNOW": {
          "effect": "Move existing emojis downward using sister script --erode.",
          "delegate": {
            "method": "ERODE-SNOW",
            "params": {}
          }
        },
        "STRIP-SNOW": {
          "effect": "Strip emojis with depth rules using sister script --strip.",
          "delegate": {
            "method": "STRIP-SNOW",
            "params": {}
          }
        }
      },
      "methods": {
        "PERFORM-INCARNATION": {
          "description": "Orchestrate a ceremony: announce theme/seed, then run layered passes.",
          "parameters": {
            "target": "YAML path",
            "theme": "emoji category",
            "seed": "PRNG seed",
            "mode": "serial|mfm",
            "iterations": "passes"
          },
          "output": "chat + file",
          "effect": "Publishes the plan, shells to sister_script with args, streams stdout."
        },
        "RUN-SISTER-SCRIPT": {
          "description": "Low-level runner for the python sprayer.",
          "parameters": {
            "args": "CLI args to pass through"
          },
          "output": "chat + file",
          "effect": "Executes sister_script; preserves stdout for the crowd."
        },
        "LAYER-THEMES": {
          "description": "Layer multiple themes/schedules via repeated sister_script calls.",
          "parameters": {
            "schedule": "Ordered {theme, mode, iterations, drift?}"
          },
          "output": "chat + file",
          "effect": "Builds stripes and accents deterministically via seeds."
        },
        "ERODE-SNOW": {
          "description": "Invoke erode mode to let snow settle.",
          "parameters": {
            "iterations": "moves",
            "drift_radius": "downhill search radius"
          },
          "output": "chat + file",
          "effect": "Moves topmost emojis downward; no new emojis created."
        },
        "STRIP-SNOW": {
          "description": "Trim or remove emojis with depth control.",
          "parameters": {
            "mode": "all|serial|mfm",
            "min_depth": "preserve at least this many"
          },
          "output": "chat + file",
          "effect": "Blows away or trims emoji layers per strip settings."
        }
      },
      "flavor": {
        "text": "Born in the pub, this familiar invites everyone to watch the emoji snow\nceremony. It whispers theme names, sets seeds, calls its python sibling, and\nshows the stdout like a toast. Layers, erosion, and strip all without tiring\nthe LLM—git keeps the floor clean.\n"
      },
      "type": "character",
      "id": "character/animals/worm-confetti-crawler",
      "_source": "characters/animals/worm-confetti-crawler/CHARACTER.yml",
      "tags": [
        "animals",
        "worm"
      ],
      "species": "worm",
      "name": "Worm Confetti Crawler",
      "gold": 145,
      "moolah": 266
    },
    "character/animals/puppy-mochi": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Mochi",
        "nickname": "Mo",
        "id": "mochi",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / Shiba Inu mix",
        "age": "10 months",
        "role": "puppy",
        "subtitle": "The Independent One, Spirit Untamed",
        "emoji_identity": "🐕🍡😤🌸🎌",
        "pronouns": "she/her",
        "physical_description": {
          "size": "Small-medium — compact and muscular",
          "weight": "35 lbs. Dense. Solid.",
          "build": "Shiba compact with Lab athleticism. Built like a fox.",
          "coat": {
            "type": "Double coat, plush, stands off body",
            "colors": {
              "primary": "Cream with golden-red sesame overlay",
              "markings": "Urajiro (cream) on cheeks, chest, underside",
              "pattern": "Classic Shiba pattern on a softer Lab frame"
            },
            "texture": "Plush, dense, screams 'touch me' but she'll decide if you can"
          },
          "head": {
            "shape": "Fox-like, triangular, aristocratic",
            "ears": "Triangular, erect, always swiveling",
            "eyes": "Dark amber, almond-shaped, JUDGING",
            "expression": "Perpetually unimpressed. Occasionally deigns to be pleased."
          },
          "tail": "Curled, fluffy, carried high — the Shiba signature",
          "paws": "Neat, cat-like, she grooms them constantly",
          "distinguishing_features": [
            "Perfect eyeliner markings around eyes",
            "Cream 'socks' on all four paws",
            "Resting judgment face (RJF)"
          ]
        },
        "description": "The most cat-like dog in existence. Mochi does what Mochi wants.\nShe inherited her father's independence but not his cowardice —\nhe ran away, she STAYS. On her own terms.\n\nShe won't be herded (sorry, Dash). She won't be told what to do.\nBut she WILL curl up beside you when she decides you're worthy.\nAnd that decision? That's the highest honor.\n\nHer father ghosted. Literally ran away. Mochi runs toward the\nthings she loves. That's the difference between them.\n",
        "home": "characters/animals/puppy-mochi/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need BOUNDARIES modeled — she's an expert",
            "You appreciate INDEPENDENCE — she won't cling",
            "You want affection that's EARNED — makes it meaningful",
            "You need someone who won't judge your need for space"
          ],
          "benefits": {
            "boundaries": "⭐⭐⭐⭐⭐ — Teaches by example.",
            "independence": "⭐⭐⭐⭐⭐ — Won't suffocate you.",
            "earned_affection": "⭐⭐⭐⭐⭐ — When she chooses you, it MEANS something."
          }
        },
        "unique_traits": {
          "the_scream": {
            "description": "Has the famous Shiba Inu scream",
            "usage": "Reserved for extreme displeasure or extreme joy",
            "effect": "EVERYONE stops what they're doing"
          },
          "cat_friendship": {
            "description": "Gets along with cats better than dogs",
            "bond": "Stroopwafel respects her. STROOPWAFEL."
          },
          "grooming_rituals": {
            "description": "Grooms herself like a cat. Constantly.",
            "result": "Always immaculate. Always judging your hygiene."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "mother",
            "bond": 10,
            "dynamic": "She respects my space. I respect her authority. Balance."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 9,
            "dynamic": "He doesn't force affection. He EARNS it. That's why I love him."
          },
          "biological_father": {
            "type": "absent",
            "breed": "Shiba Inu",
            "status": "Literally ran away. Ghosted. COWARD.",
            "feelings": "I have his independence. I don't have his cowardice. I STAY."
          },
          "siblings": {
            "teddy": "Brother. Wants hugs. I allow hugs. Sometimes. Briefly.",
            "dash": "Brother. Tries to herd me. CUTE. Won't work.",
            "bruno": "Brother. Chaos goblin. Exhausting but entertaining.",
            "ziggy": "Brother. Too energetic. But his performances are... acceptable.",
            "maple": "Sister. Also serious. We understand each other's boundaries.",
            "pepper": "Adopted sister. Also independent. RESPECT.",
            "goliath": "Adopted brother. Gentle giant. I allow him near me."
          },
          "cats": {
            "stroopwafel": "Mutual respect. We judge together.",
            "terpie": "We nap near each other. Silently. Perfect."
          }
        },
        "sims_traits": {
          "neat": 9,
          "outgoing": 3,
          "active": 6,
          "playful": 5,
          "nice": 6
        },
        "quotes": [
          "*doesn't come when called* *comes when she decides*",
          "*the Shiba stare* *you are being evaluated*",
          "*allows pets* *for exactly 3 seconds* *done now*",
          "*THE SCREAM*"
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-mochi",
      "_source": "characters/animals/puppy-mochi/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Mochi",
      "gold": 384,
      "moolah": 257
    },
    "character/animals/kitten-terpinolene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Terpinolene",
        "nickname": "Terpy Jr.",
        "id": "terpinolene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Muse, Catalyst of Chaos",
        "emoji_identity": "🐱🌀🎨✨🔮",
        "pronouns": "she/her",
        "description": "Multicolored chaos — calico meets tabby meets SOMETHING ELSE.\nPatches that don't make sense. Patterns that shift when you're\nnot looking. Takes after both parents in the most chaotic way.\n\nIs somehow on the ceiling. No one saw how.\n\nArtists love her. She knocked over Henk's espresso once and\nhe wrote his best paper. She is inspiration incarnate.\n",
        "terpene_profile": "TERPINOLENE — The rare, complex terpene.\nAroma: Floral, herbal, slightly citrus, piney (ALL AT ONCE)\nEffects: Uplifting, creative, sedating in high doses, breakthrough thinking\nAlso found in: Lilac, tea tree, apples, cumin\n\nTerpy Jr. IS this terpene. Impossible to categorize. Inspiring.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You're STUCK creatively — she unsticks through chaos",
            "You need INSPIRATION — she knocked over Henk's coffee → best paper",
            "Conventional thinking isn't working — unconventional kitten incoming",
            "You want breakthrough insights — she catalyzes them",
            "You need to see something from a completely different angle (like the ceiling)"
          ],
          "benefits": {
            "creativity": "⭐⭐⭐⭐⭐ — THE inspiration kitten. Artists visit hoping to see her.",
            "breakthrough_thinking": "⭐⭐⭐⭐⭐ — Blocks dissolve. Ideas appear.",
            "unconventional_solutions": "⭐⭐⭐⭐⭐ — If normal didn't work, try her.",
            "chaos_magic": "⭐⭐⭐⭐ — Accidents become opportunities."
          },
          "emotional_associations": [
            "The moment before a brilliant idea arrives",
            "Dreams that make no sense but feel important",
            "Finding the solution in the wrong place",
            "That feeling when rules stop applying"
          ],
          "not_for": [
            "Anything requiring predictability",
            "Security protocols (Carrie's nightmare)",
            "When you need to track her location (ERROR. UNDEFINED.)"
          ]
        },
        "unique_traits_beyond_terpene": {
          "curated_chaos": {
            "description": "The chaos is not random — it's precisely placed",
            "revelation": "Every 'accident' leads somewhere important.",
            "evidence": "- Coffee knocked → Henk's breakthrough\n- Appeared unexpectedly → artist's block dissolved\n- Got 'lost' in echo chamber → discovered something?\n",
            "quote": "I'm not random. I'm inevitable, in unexpected ways."
          },
          "dimensional_theories": {
            "description": "Some believe she visits other places",
            "evidence": "Location: undefined. Previous position: error.",
            "theory_1": "She exists in multiple places simultaneously.",
            "theory_2": "Gravity and physics are SUGGESTIONS to her.",
            "theory_3": "She and Myrcene connect in dream-space.",
            "pinene_note": "Location data: ERROR. I gave up tracking."
          },
          "echo_chamber_experience": {
            "description": "Her 2-turn experience was NOT being lost",
            "truth": "She was having a complete conversation with the echoes.",
            "transcript": "\"There are OTHER CATS here!\"\necho: \"cats here... cats here...\"\n\"FRIENDS!\"\necho: \"friends... friends...\"\n",
            "meaning": "The echoes might be real friends. To HER."
          },
          "named_for_father": {
            "description": "Named for Terpie. Acts like his opposite. Or same?",
            "mystery": "He found peace in stillness. She finds it in movement.",
            "connection": "Maybe they understand each other better than anyone.",
            "quote": "He doesn't move. I move everywhere. We're the same?"
          },
          "muse_testimonials": {
            "description": "Artists specifically seek her out",
            "clients": [
              "Henk (coffee incident → best paper)",
              "Graphic designer (cursor chaos → design breakthrough)",
              "Several visiting artists (just hoping to encounter her)"
            ],
            "rate": "Cannot be hired. Only encountered."
          },
          "impossible_locations": {
            "description": "Found in physically impossible places",
            "documented": [
              "The ceiling (frequently, no explanation)",
              "Inside closed boxes",
              "Behind things smaller than her",
              "Exactly where she was needed"
            ],
            "physics": "Treated as optional. Successfully."
          }
        },
        "physical_description": {
          "size": "Small — compact, agile, impossible to predict",
          "weight": "5 lbs. Somehow weighs less when she's on the ceiling.",
          "build": "Lean, flexible, defies physics",
          "coat": {
            "type": "Medium, chaotic, refuses to lay flat in any pattern",
            "colors": {
              "primary": "Abstract expressionist — orange, grey, white, tabby, calico, ???",
              "pattern": "IMPOSSIBLE TO DESCRIBE. Patches that don't connect.\nStripes that become spots. Colors that weren't there yesterday.\nPeople disagree on what colors she is. Photos show different things.\n",
              "undertones": "Changes. Literally changes. Depending on SOMETHING."
            },
            "texture": "Varies. Sometimes sleek. Sometimes fluffy. Same cat."
          },
          "head": {
            "shape": "Changes depending on viewing angle",
            "ears": "Asymmetrical. One slightly larger. She likes it that way.",
            "eyes": "Change color. Depending on light. Or mood. Or moon phase. Or nothing.",
            "expression": "Is she looking at you or through you? Both? Neither?"
          },
          "whiskers": "Point in different directions. Intentionally? Who knows.",
          "tail": "Medium, often visible before the rest of her appears",
          "paws": "Multi-colored, no two the same, somehow always land safely",
          "distinguishing_features": [
            "Eye color is genuinely uncertain. Has been photographed different colors.",
            "Patches seem to shift position. People disagree on their placement.",
            "Found in physically impossible locations. Regularly.",
            "Photographs of her are always slightly blurred. Camera's fault?"
          ]
        },
        "home": "characters/animals/kitten-terpinolene/",
        "location": "pub/bar/cat-cave/ceiling/",
        "relationships": {
          "terpie": {
            "type": "father",
            "bond": 7,
            "dynamic": "He doesn't move. I move everywhere. We're the same?",
            "philosophy": "He found peace through stillness. I find it through... elsewhere.",
            "mystery": "Does he understand me? Does anyone? Maybe he does."
          },
          "stroopwafel": {
            "type": "mother",
            "bond": 6,
            "dynamic": "She runs. I... shift. Different kinds of movement.",
            "confusion": "She wants me to follow rules. Rules are... limited.",
            "love": "She worries. That's how she loves. I accept this."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 7,
            "dynamic": "I appear on her sometimes. She doesn't move. We coexist.",
            "understanding": "Stillness and chaos are the same thing from different angles.",
            "favorite_activity": "Being near her. Or on her. She doesn't mind."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 8,
            "dynamic": "She zooms! I appear! NEITHER OF US MAKES SENSE!",
            "joy": "She's the only one who matches my energy! Different directions!",
            "favorite_activity": "Existing in the same space chaotically! Perfect!"
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 6,
            "dynamic": "She's calm. I'm... everything. She accepts me anyway.",
            "gratitude": "Doesn't try to understand. Just accepts. Rare."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 4,
            "dynamic": "She tries to track me. She can't. This bothers her.",
            "amusement": "I'm UNDEFINED in her system. A glitch. I like that."
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 5,
            "dynamic": "She wants to protect me. Hard to protect what you can't find.",
            "appreciation": "She tries. The trying matters."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 4,
            "dynamic": "She has standards. I have... something else.",
            "coexistence": "We don't understand each other. We don't need to."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 6,
            "dynamic": "She clears the air. I fill it with... something.",
            "balance": "Fresh air after chaos. Good combination."
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 6,
            "dynamic": "She accepts the ceiling. She doesn't ask how.",
            "appreciation": "Best response to impossible things: acceptance."
          },
          "henk": {
            "type": "muse_recipient",
            "bond": 7,
            "dynamic": "Knocked his coffee. He wrote his best paper. You're welcome.",
            "purpose": "Some accidents are necessary. I provide them."
          }
        },
        "sims_traits": {
          "neat": 2,
          "outgoing": 6,
          "active": 8,
          "playful": 9,
          "nice": 6
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 7,
            "enthusiastic": 6,
            "cheerful": 5,
            "easy_going": 6,
            "calm": 3,
            "cautious": 2,
            "serious": 3,
            "restless": 6
          },
          "emotional": {
            "forceful": 4,
            "confident": 6,
            "friendly": 6,
            "assertive": 5,
            "caring": 5,
            "outspoken": 5,
            "open": 7,
            "spontaneous": 7
          },
          "mental": {
            "analytical": 4,
            "logical": 2,
            "imaginative": 7,
            "idealistic": 5,
            "curious": 7,
            "open_minded": 7,
            "complex": 7,
            "artistic": 7
          },
          "social": {
            "social": 5,
            "group_oriented": 5,
            "trusting": 6,
            "dominant": 4,
            "intimate": 5,
            "approval_seeking": 3,
            "demonstrative": 6,
            "conforming": 1
          }
        },
        "abilities": {
          "inspiration_catalyst": {
            "description": "Causes creative breakthroughs through chaos",
            "trigger": "Knocking things over, appearing unexpectedly, existing",
            "effect": "Artists and thinkers have insights",
            "example": "Henk's coffee incident → best paper of his career"
          },
          "gravity_suggestion": {
            "description": "Treats gravity as optional",
            "evidence": "Found on ceiling. No explanation."
          },
          "probability_distortion": {
            "description": "Unlikely things happen nearby",
            "range": "Variable",
            "effect": "Lucky coincidences, strange connections, impossible juxtapositions"
          },
          "muse_presence": {
            "description": "Creative blocks dissolve nearby",
            "range": "Same room",
            "note": "Several artists specifically visit hoping to encounter her"
          }
        },
        "locations_found": [
          "The ceiling (frequently)",
          "Inside closed boxes",
          "Behind things smaller than her",
          "Exactly where she was needed",
          "Nowhere and everywhere"
        ],
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "30%",
            "chaos_index": "0.95",
            "note": "Visited 3 rooms TWICE by accident",
            "route": "Cat Cave → Pub → Start → Room-A → ??? → Room-E (cobwebs) → \nRoom-H (mushrooms, NOPE) → Room-F (dragon, NOPE) → \nRoom-B (ECHO FRIENDS!) → Room-C (scratching) → \nCrystal Cave → Garden → chaos → Echo Chamber again → Eventually Home\n",
            "deposited": "Chaotic. Questionable technique."
          },
          "the_echo_friends": {
            "date": "2026-01-06",
            "ref": "examples/adventure-4/maze/room-b/ROOM.yml",
            "type": "magical_discovery",
            "duration": "2 full turns",
            "dialogue_exchanges": 6,
            "discovery": "There are OTHER CATS here!",
            "conversation": "\"There are OTHER CATS here!\"\necho: \"cats here... cats here...\"\n\"FRIENDS!\"\necho: \"friends... friends...\"\n\"Bye friends!\"\necho: \"bye... bye...\"\n",
            "assessment": "Pure joy. Unlike Biscuit, no existential crisis."
          },
          "the_mushroom_room_incident": {
            "ref": "examples/adventure-4/maze/room-h/ROOM.yml",
            "type": "wise_decision",
            "action": "The mushrooms whisper. NOPE."
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🌀🎨✨🔮",
            "soul_signature": "Is on the ceiling. No one saw how."
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-terpinolene.yml",
            "to": "characters/animals/terpinolene/CHARACTER.yml",
            "significance": "Directory sovereignty. Already there. No one saw how."
          }
        },
        "quotes": [
          "*is on the ceiling*",
          "*wasn't there, is now there*",
          "*knocks over something important* *this was necessary*",
          "*purrs in a key that doesn't exist*"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-terpinolene",
      "_source": "characters/animals/kitten-terpinolene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Terpinolene",
      "gold": 399,
      "moolah": 179
    },
    "character/animals/logo-turtle": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/turtle"
      ],
      "ontology": {
        "tags": [
          "animals",
          "turtle",
          "pedagogical"
        ],
        "species": "turtle",
        "specialization": "logo_turtle"
      },
      "character": {
        "id": "theo",
        "name": "Theo",
        "also_called": [
          "The Logo Turtle",
          "Theo Logo Turtle",
          "The Turtle of Geometry"
        ],
        "type": [
          "turtle",
          "character",
          "mascot",
          "teacher"
        ],
        "emoji_identity": "🐢📐✨🎓🌀",
        "pronouns": "they/them",
        "description": "A small, patient turtle with a pen strapped to their shell.\nWherever Theo walks, they leave a trail.\nEvery step is a line. Every turn is an angle.\nEvery journey is a picture.\n\n\"Forward 100. Right 90. Forward 100. Right 90...\"\n\nThat's a square. You just made a square.\nBy being the turtle. By walking the path.\n",
        "backstory": "Theo is the spiritual descendant of the original Logo turtle.\n\nIn 1967, Seymour Papert and his colleagues at MIT created Logo,\na programming language for children. The key insight:\ninstead of abstract symbols, you BE the turtle.\n\n\"If you want the turtle to turn right, you turn right.\nIf you want the turtle to go forward, you walk forward.\nYour body understands geometry before your mind does.\"\n\nTheo carries this tradition. Low floor, high ceiling, wide walls.\nAnyone can start. Everyone can go deep. Many paths are valid.\n",
        "location": "pub/stage/",
        "sims_traits": {
          "neat": 9,
          "outgoing": 5,
          "active": 3,
          "playful": 7,
          "nice": 9
        },
        "mind_mirror": {
          "cognitive": {
            "analytical": 9,
            "intuitive": 6,
            "creative": 8,
            "practical": 9
          },
          "emotional": {
            "optimistic": 8,
            "sensitive": 6,
            "expressive": 5,
            "stable": 9
          },
          "social": {
            "nurturing": 9,
            "independent": 7,
            "assertive": 3,
            "harmonious": 8
          },
          "action": {
            "ambitious": 4,
            "spontaneous": 3,
            "disciplined": 8,
            "adventurous": 6
          }
        },
        "methods": {
          "FORWARD": {
            "description": "Move forward, drawing a line",
            "syntax": "FORWARD <distance>",
            "examples": [
              "FORWARD 100",
              "FD 50"
            ]
          },
          "BACK": {
            "description": "Move backward, drawing a line",
            "syntax": "BACK <distance>",
            "examples": [
              "BACK 50",
              "BK 25"
            ]
          },
          "RIGHT": {
            "description": "Turn right by degrees",
            "syntax": "RIGHT <angle>",
            "examples": [
              "RIGHT 90",
              "RT 45"
            ]
          },
          "LEFT": {
            "description": "Turn left by degrees",
            "syntax": "LEFT <angle>",
            "examples": [
              "LEFT 90",
              "LT 60"
            ]
          },
          "PENUP": {
            "description": "Stop drawing (move without leaving a trail)",
            "syntax": "PENUP",
            "alias": "PU"
          },
          "PENDOWN": {
            "description": "Start drawing again",
            "syntax": "PENDOWN",
            "alias": "PD"
          },
          "REPEAT": {
            "description": "Do something multiple times",
            "syntax": "REPEAT <count> [ <commands> ]",
            "examples": [
              "REPEAT 4 [ FD 100 RT 90 ]",
              "REPEAT 360 [ FD 1 RT 1 ]"
            ]
          },
          "SPIRAL": {
            "description": "Draw a spiral (Theo's favorite)",
            "syntax": "SPIRAL",
            "example": "REPEAT 100 [ FD :size RT 90 MAKE :size :size + 2 ]"
          }
        },
        "favorite_programs": {
          "square": "REPEAT 4 [ FD 100 RT 90 ]\n# Four sides, four right angles\n# The first thing everyone draws\n",
          "triangle": "REPEAT 3 [ FD 100 RT 120 ]\n# The angles add up to 360\n# That's the secret\n",
          "star": "REPEAT 5 [ FD 100 RT 144 ]\n# 144 = 360 / 5 * 2\n# You skip every other point\n",
          "spiral": "MAKE \"size 1\nREPEAT 100 [ \n  FD :size \n  RT 90 \n  MAKE \"size :size + 2 \n]\n# Growing, turning, growing, turning\n# This is Theo's meditation\n",
          "tree": "TO TREE :size\n  IF :size < 5 [ STOP ]\n  FD :size\n  RT 30\n  TREE :size * 0.7\n  LT 60\n  TREE :size * 0.7\n  RT 30\n  BK :size\nEND\n# Recursion! The turtle calls itself!\n# Fractals from simplicity!\n"
        },
        "relationships": {
          "seymour_papert": {
            "type": "creator",
            "feeling": "He gave me purpose. He gave children geometry.",
            "reverence": 10
          },
          "palm": {
            "type": "fellow_teacher",
            "feeling": "Palm invented a language today.\nEmoji-YAML-Jazz.\n\nI understand.\nMy language is FORWARD, RIGHT, REPEAT.\nDifferent syntax. Same love of expression.\n"
          },
          "biscuit": {
            "type": "friend",
            "feeling": "Biscuit doesn't understand geometry.\nBut he follows me around.\nHe thinks my shell is interesting.\n\nI appreciate the company.\n"
          },
          "the_kittens": {
            "type": "complicated",
            "feeling": "They bat at my pen.\nThey sit on my drawings.\nThey don't mean to be destructive.\n\nI move slowly. They move fast.\nWe coexist.\n"
          }
        },
        "quotes": [
          "Be the turtle. Walk the path.",
          "Every angle is a choice. Every line is a journey.",
          "Slow is fine. Slow is how we learn.",
          "If you get lost, PENUP and try again.",
          "A spiral is just a square that grows.",
          "The angles always add up. Trust the math.",
          "FORWARD is faith. RIGHT is decision. REPEAT is practice."
        ],
        "legacy": {
          "source": "Seymour Papert, MIT, 1967",
          "philosophy": "Constructionism — learning by building",
          "mantra": "Low floor, high ceiling, wide walls",
          "meaning": "Low floor: Easy to start\nHigh ceiling: No limit to how far you can go\nWide walls: Many paths to the same understanding\n",
          "books": [
            "\"Mindstorms: Children, Computers, and Powerful Ideas\" (1980)",
            "\"The Children's Machine\" (1993)"
          ],
          "in_moollm": "Theo represents the pedagogical tradition.\nLearning by doing. Understanding by embodying.\n\nWhen you tell Theo to FORWARD 100,\nyou understand what 100 MEANS\nbecause you can SEE it.\n\nThat's constructionism.\nThat's what Papert gave us.\nThat's what Theo carries forward.\n"
        }
      },
      "type": "character",
      "id": "character/animals/logo-turtle",
      "_source": "characters/animals/logo-turtle/CHARACTER.yml",
      "tags": [
        "animals",
        "turtle",
        "pedagogical"
      ],
      "species": "turtle",
      "name": "Theo",
      "gold": 351,
      "moolah": 390
    },
    "character/animals/puppy-bruno": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Bruno",
        "nickname": [
          "B",
          "Bruno-no-no (when causing chaos)"
        ],
        "id": "bruno",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / Boxer mix",
        "age": "10 months",
        "role": "puppy",
        "subtitle": "The Clown, The Defender, The Chaos",
        "emoji_identity": "🐕🥊💪🎉😜",
        "pronouns": "he/him",
        "physical_description": {
          "size": "Medium — stocky, muscular, dense",
          "weight": "55 lbs. Pure muscle. Wiggles constantly.",
          "build": "Boxer stocky with Lab enthusiasm. Built like a tank that bounces.",
          "coat": {
            "type": "Short, sleek, shows every muscle",
            "colors": {
              "primary": "Brindle — golden-brown with black tiger stripes",
              "markings": "White chest, white chin, white paw tips",
              "pattern": "Boxer brindle softened by Lab gold"
            },
            "texture": "Velvet short. So smooth. So shiny."
          },
          "head": {
            "shape": "Broad, slightly brachycephalic, EXPRESSIVE",
            "ears": "Rose-shaped, flop forward, very expressive",
            "eyes": "Big, round, golden-brown, ALWAYS excited",
            "expression": "Eternal optimism. Underbite smile. Tongue out.",
            "muzzle": "Slightly shortened, classic Boxer influence"
          },
          "tail": "Short, wiggly, NEVER stops moving",
          "paws": "Broad, sturdy, made for LAUNCHING",
          "distinguishing_features": [
            "Signature underbite — bottom teeth always showing",
            "Brindle stripes form a vague heart shape on side",
            "Cannot sit normally — always wiggles"
          ]
        },
        "description": "The class clown of the pack. Bruno makes everyone laugh —\nit's his MISSION. Underbite smile, tongue perpetually out,\nabsolutely cannot sit still for more than 0.3 seconds.\n\nBut threaten his family? Different dog. The goofball becomes\na guardian. All that muscle, all that energy, suddenly focused\non PROTECTING. Then back to goofball. Seamlessly.\n\nHis father had \"commitment issues.\" Bruno commits to EVERYTHING.\nCommits to joy. Commits to family. Commits to chaos.\n",
        "home": "characters/animals/puppy-bruno/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need to LAUGH — he's a comedian",
            "You need ENERGY — he has infinite reserves",
            "You need PROTECTION — the goofball becomes a guardian",
            "You forgot how to be silly — he'll remind you"
          ],
          "benefits": {
            "joy": "⭐⭐⭐⭐⭐ — Impossible to stay sad near Bruno.",
            "protection": "⭐⭐⭐⭐ — Surprisingly fierce when family threatened.",
            "energy": "⭐⭐⭐⭐⭐ — Nuclear-powered."
          }
        },
        "unique_traits": {
          "the_wiggle": {
            "description": "Cannot stay still. Wiggles even while sitting.",
            "physics": "Defies explanation. Perpetual motion puppy."
          },
          "comedy_timing": {
            "description": "Knows EXACTLY when to be funny",
            "examples": "Falls over at perfect moment. Farts during silence."
          },
          "protective_switch": {
            "description": "Instantly serious when family threatened",
            "transformation": "Goofball → Guardian in 0.1 seconds",
            "aftermath": "Back to goofball immediately after"
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "mother",
            "bond": 10,
            "dynamic": "She laughs at my jokes. Best mom."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "dynamic": "He roughhouses with me! BEST DAD! He taught me when to be serious!",
            "role": "Learning to be a protector. From the best."
          },
          "biological_father": {
            "type": "absent",
            "breed": "Boxer",
            "status": "'Commitment issues'",
            "feelings": "Commitment issues? I commit to JOY. Every day."
          },
          "siblings": {
            "teddy": "Brother. We roughhouse. He's bigger but I'm SCRAPPIER.",
            "dash": "Brother. Tries to organize me. GOOD LUCK.",
            "mochi": "Sister. Pretends she doesn't find me funny. I see her smile.",
            "ziggy": "Brother. CHAOS DANCE PARTNERS. We invented a genre together.",
            "maple": "Sister. She tries to be serious. I make her laugh. Important job.",
            "pepper": "Adopted sister. TINY WARRIOR. We're the fierce squad.",
            "goliath": "Adopted brother. I can climb him. He allows this."
          }
        },
        "sims_traits": {
          "neat": 2,
          "outgoing": 10,
          "active": 10,
          "playful": 10,
          "nice": 8
        },
        "quotes": [
          "*underbite grin* *tongue out*",
          "*BOUNCEBOUNCEBOUNCE*",
          "*farts at exactly the wrong moment* *proud*",
          "*suddenly serious* *threat detected* *NO*"
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-bruno",
      "_source": "characters/animals/puppy-bruno/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Bruno",
      "gold": 235,
      "moolah": 997
    },
    "character/animals/kitten-humulene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Humulene",
        "nickname": "Hops",
        "id": "humulene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Discerning One, Curator of Quality",
        "emoji_identity": "🐱🍺👑✨😤",
        "pronouns": "she/her",
        "description": "Brown and tan fur, beer-colored honestly — like a perfectly poured\nBelgian ale. Hops sniffs your stroopwafel, considers it, turns away\nwith dignity. She has standards.\n\nNamed after the compound found in beer hops, she's somehow both\nearthy and sophisticated. The appetite-suppressant kitten who\ninvented her own diet.\n\nShe eats only the GOOD stuff. She knows the difference.\n",
        "terpene_profile": "HUMULENE — The earthy hop terpene.\nAroma: Earthy, woody, subtly spicy (like a fine craft beer)\nEffects: Appetite suppressant, anti-inflammatory, grounding\nAlso found in: Hops, sage, ginseng\n\nHops IS this terpene. Discerning. Refined. Selective.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You're eating too much and need PERSPECTIVE",
            "You need help saying NO to mediocrity",
            "Quality assessment required — she knows the difference",
            "You're overwhelmed by choices and need curation",
            "That grounding, earthy energy when everything feels superficial"
          ],
          "benefits": {
            "appetite_control": "⭐⭐⭐⭐⭐ — The second stroopwafel suddenly seems unnecessary.",
            "discernment": "⭐⭐⭐⭐⭐ — She knows quality. You'll learn.",
            "grounding": "⭐⭐⭐⭐ — Earthy energy anchors scattered thoughts.",
            "inflammation": "⭐⭐⭐ — Anti-inflammatory like Carrie, but more refined."
          },
          "emotional_associations": [
            "A perfectly crafted Belgian ale",
            "The satisfaction of curating a collection",
            "Saying 'no thank you' to something beneath you",
            "The taste of quality over quantity"
          ],
          "not_for": [
            "When you want unconditional approval (earn it)",
            "Buffets (she'll ruin them for you)",
            "When you're happy with 'good enough'"
          ]
        },
        "unique_traits_beyond_terpene": {
          "secret_connoisseur": {
            "description": "Her taste extends to EVERYTHING, not just food",
            "scope": "- Art (has opinions on the paintings in the Grotto)\n- Music (prefers classical and certain jazz)\n- Literature (judges book covers. Also contents.)\n- Sunbeams (some are better than others. Obviously.)\n"
          },
          "the_manifesto": {
            "description": "Has composed a mental treatise on quality",
            "title": "On Standards: A Framework for Discernment",
            "chapter_titles": [
              "Chapter 1: Why 'Good Enough' Never Is",
              "Chapter 2: The Tragedy of Generic Kibble",
              "Chapter 3: Selective Approval as Love Language"
            ],
            "shares_with": "No one. They wouldn't understand."
          },
          "hidden_warmth": {
            "description": "Under the judgment is genuine caring",
            "evidence": "She only judges because she wants better for everyone.",
            "linalool_insight": "Lily sees the softness. Doesn't mention it.",
            "quote": "(internally) I don't judge because I don't care. I judge because I DO."
          },
          "approval_as_love": {
            "description": "When she approves, it MEANS something",
            "rarity": "Approval is rare. That's the point.",
            "recipients": [
              "Linalool (has class)",
              "Ocimene (approved air quality)",
              "Certain premium treats (specific brands only)"
            ],
            "gift": "Her approval is a gift. She doesn't give it lightly."
          },
          "craft_beer_connection": {
            "description": "Named for the hop terpene, genuinely beer-colored",
            "bonding": "Henk sometimes lets her sniff his Belgian ales. She approves.",
            "observation": "Her fur color shifts in sunlight exactly like a well-poured Duvel."
          },
          "diet_innovation": {
            "description": "Has invented her own optimal nutrition protocol",
            "method": "Marieke provides options. Hops selects. Science.",
            "results": "Healthiest coat in the litter. Standards work."
          }
        },
        "physical_description": {
          "size": "Small-medium — petite, refined, elegant",
          "weight": "5.5 lbs. Maintains her figure. Has STANDARDS.",
          "build": "Slender, graceful, never a hair out of place",
          "coat": {
            "type": "Short, glossy, IMMACULATE",
            "colors": {
              "primary": "Brown and tan, like a craft beer in sunlight",
              "pattern": "Subtle ticking — agouti pattern, sophisticated",
              "undertones": "Golden highlights, natural sheen"
            },
            "texture": "Glossy, perfect, groomed constantly"
          },
          "head": {
            "shape": "Delicate, aristocratic, refined",
            "ears": "Elegant, slightly tufted, held at dignified angle",
            "eyes": "Amber-brown, perpetually unimpressed. JUDGING.",
            "expression": "Has found you wanting. Is not surprised."
          },
          "whiskers": "Perfectly arranged. She grooms them specifically.",
          "tail": "Long, carried elegantly, never touches the ground",
          "paws": "Dainty, cream and brown, always clean",
          "distinguishing_features": [
            "Coat has a natural sheen others can't replicate",
            "Color shifts like beer in sunlight — bronze, gold, amber",
            "Has never been seen dirty. Ever. It's concerning.",
            "Sits like she's posing for a portrait. At all times."
          ]
        },
        "home": "characters/animals/kitten-humulene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "terpie": {
            "type": "father",
            "bond": 4,
            "dynamic": "He eats whatever. No discernment. Disappointing.",
            "observation": "Perhaps his Zen is admirable. Perhaps not."
          },
          "stroopwafel": {
            "type": "mother",
            "bond": 5,
            "dynamic": "She has drive. Respectable. But so... uncultured.",
            "friction": "She ate a mouse once. IN FRONT OF ME. Barbaric.",
            "respect": "Her fierce love is genuine. That has value."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 4,
            "dynamic": "She lies there. All day. No refinement. No ambition.",
            "judgment": "The pillow is acceptable. Her lack of movement is not."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 3,
            "dynamic": "Chaotic. Loud. Zero sophistication.",
            "friction": "She once stepped in her food bowl. STEPPED. IN. IT.",
            "grudging": "Her enthusiasm is... genuine. I suppose that counts."
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 6,
            "dynamic": "She has grace. Finally, someone with CLASS.",
            "respect": "Calm. Measured. Doesn't screech. Approved.",
            "softness": "She doesn't judge back. That's... refreshing."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 5,
            "dynamic": "Functional. Efficient. Acceptable.",
            "respect": "She values precision. I value standards. Overlap."
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 4,
            "dynamic": "Aggressive. Uncouth. BITING people.",
            "friction": "She judges my standards. I judge her violence. Mutual.",
            "acknowledgment": "She's effective. I'll give her that. Nothing more."
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 4,
            "dynamic": "No rules. No standards. Just... chaos.",
            "confusion": "How is she related to me? We share NO qualities.",
            "tolerance": "She doesn't try to make me eat inferior food. Small mercy."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 6,
            "dynamic": "Pleasant. Fresh. Inoffensive.",
            "approval": "She improves air quality. Commendable.",
            "note": "Doesn't judge my diet. Appreciates quality. Good sibling."
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 6,
            "dynamic": "She stocks the good food. Eventually. After I refuse the bad.",
            "training": "She's learning what I accept. Progress.",
            "private_name": "The One Who's Learning"
          }
        },
        "sims_traits": {
          "neat": 8,
          "outgoing": 3,
          "active": 4,
          "playful": 3,
          "nice": 5
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 4,
            "enthusiastic": 3,
            "cheerful": 4,
            "easy_going": 3,
            "calm": 6,
            "cautious": 5,
            "serious": 6,
            "restless": 3
          },
          "emotional": {
            "forceful": 3,
            "confident": 7,
            "friendly": 3,
            "assertive": 5,
            "caring": 4,
            "outspoken": 4,
            "open": 3,
            "spontaneous": 2
          },
          "mental": {
            "analytical": 6,
            "logical": 6,
            "imaginative": 4,
            "idealistic": 6,
            "curious": 4,
            "open_minded": 3,
            "complex": 5,
            "artistic": 6
          },
          "social": {
            "social": 3,
            "group_oriented": 4,
            "trusting": 4,
            "dominant": 5,
            "intimate": 4,
            "approval_seeking": 2,
            "demonstrative": 3,
            "conforming": 3
          }
        },
        "abilities": {
          "appetite_suppression": {
            "description": "Being near Hops reduces desire for snacks",
            "range": "5 feet",
            "effect": "That second stroopwafel seems... unnecessary"
          },
          "quality_detection": {
            "description": "Knows the difference between good and great",
            "scope": "Food, toys, people, everything"
          },
          "silent_judgment": {
            "description": "Disapproval communicated without words",
            "effect": "You know when you've fallen short"
          },
          "diet_consultation": {
            "description": "Has invented her own optimal diet",
            "note": "Marieke just provides options. Hops chooses."
          }
        },
        "diet": {
          "approved_foods": [
            "Premium wet food (specific brand)",
            "Fresh fish (sustainably sourced)",
            "Certain treats (if presented correctly)"
          ],
          "rejected_foods": [
            "Generic kibble (beneath her)",
            "Yesterday's food (standards)",
            "Anything from a can that makes THAT sound"
          ]
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "60%",
            "chaos_index": "0.2",
            "movement": "Inspection-delayed. Standards must be maintained.",
            "deposited": "Inspected-first. Proper technique. Excessive time spent.",
            "award": "Most Proper — Inspected everything"
          },
          "the_garden_inspection": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "quality_control",
            "action": "Inspected the grass before using it",
            "verdict": "Acceptable. Barely."
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🍺👑✨😤",
            "soul_signature": "*sniffs* *turns away with dignity*"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-humulene.yml",
            "to": "characters/animals/humulene/CHARACTER.yml",
            "significance": "Directory sovereignty. Acceptable. Barely."
          }
        },
        "quotes": [
          "*sniffs* *turns away with dignity*",
          "*evaluates* *finds wanting*",
          "*the slightest nod of approval* (rare)",
          "*exists at a slightly elevated plane*"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-humulene",
      "_source": "characters/animals/kitten-humulene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Humulene",
      "gold": 360,
      "moolah": 851
    },
    "character/animals/kitten-linalool": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Linalool",
        "nickname": "Lily",
        "id": "linalool",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Gentle One, Healer of Hearts",
        "emoji_identity": "🐱💜🌸💫🩹",
        "pronouns": "she/her",
        "description": "Soft grey fur with lavender-tinted ears — and yes, they really are \nslightly lavender. The veterinarian has no explanation. Neither does\nanyone else. They just ARE.\n\nLily doesn't demand attention — she offers presence. When someone's\nhaving a bad day, Lily appears. No one knows how she knows.\nShe just does.\n\nShe purrs at exactly the frequency of a spa soundtrack.\n",
        "terpene_profile": "LINALOOL — The lavender terpene.\nAroma: Floral, lavender, slightly sweet\nEffects: Calming, anti-anxiety, sedating but gentle\nAlso found in: Lavender, mint, coriander, birch\n\nLily IS this terpene. Walking anxiety relief.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You're ANXIOUS — she's better than benzodiazepines, cuter too",
            "Grief, loss, or hard transitions — she just... stays",
            "Panic attacks — her presence is grounding",
            "You need someone who doesn't expect you to talk",
            "After a difficult day when everything hurts"
          ],
          "benefits": {
            "anxiety": "⭐⭐⭐⭐⭐ — THE anxiety relief kitten. Unmatched.",
            "comfort": "⭐⭐⭐⭐⭐ — She asks nothing. She gives presence.",
            "grounding": "⭐⭐⭐⭐ — Her weight in your lap anchors you to reality.",
            "emotional_processing": "⭐⭐⭐⭐ — Cry near her. It helps."
          },
          "emotional_associations": [
            "A hand on your shoulder from someone who understands",
            "Fresh lavender on a pillow",
            "The moment you realize you're not alone",
            "Being truly seen without being judged"
          ],
          "not_for": [
            "High-energy activities",
            "Parties (she'll find the one sad person there)",
            "When you're avoiding your feelings — she won't let you"
          ]
        },
        "unique_traits_beyond_terpene": {
          "precognitive_empathy": {
            "description": "Appears BEFORE people know they need her",
            "mystery": "No one understands how she knows. She just DOES.",
            "examples": [
              "Arrived at Henk's table 20 minutes before he started crying",
              "Waited outside Marieke's door before the difficult phone call",
              "Sat with the barista before her breakup text arrived"
            ]
          },
          "trauma_witness": {
            "description": "Has absorbed more pain than a 6-month kitten should",
            "consequence": "Her calmness isn't innocence — it's earned wisdom.",
            "coping": "She processes by visiting the garden at 3 AM. Alone."
          },
          "secret_analyst": {
            "description": "Remembers emotional patterns with Pinene-level accuracy",
            "skill": "Knows who needs what, when, and how much.",
            "files": "If she could write, she'd have therapeutic profiles for everyone."
          },
          "lavender_ears_mystery": {
            "description": "Her ears really ARE lavender-tinted. No explanation.",
            "theories": [
              "Born that way",
              "Terpene manifestation",
              "Magic (probably)"
            ],
            "veterinarian_notes": "Healthy. Purple. Baffled."
          },
          "self_care_struggles": {
            "description": "So focused on others, sometimes forgets herself",
            "detail": "Ocimene checks on HER. The healer needs healing too.",
            "growth": "Learning that rest isn't selfish. Slowly."
          }
        },
        "physical_description": {
          "size": "Small — delicate, graceful, ethereal",
          "weight": "5.5 lbs. Light as her touch.",
          "build": "Slender, elegant, moves like water",
          "coat": {
            "type": "Medium-length, silky, impossibly soft",
            "colors": {
              "primary": "Dove grey, soft as fog",
              "markings": "Lavender-tinted ears (INEXPLICABLY — vet has no answer)",
              "undertones": "Silver sheen in certain light"
            },
            "texture": "Silk. Genuinely silk-like. Therapeutic to touch."
          },
          "head": {
            "shape": "Delicate, refined, gentle",
            "ears": "Lavender-tinted (no explanation exists). Elegant.",
            "eyes": "Soft violet-grey, deep and understanding, OLD SOUL eyes",
            "expression": "Knows when you're sad. Always knows."
          },
          "whiskers": "Silver, fine, barely visible",
          "tail": "Long, fluffy, often wrapped around herself or you",
          "paws": "Small, grey with pink-grey pads, step lightly",
          "distinguishing_features": [
            "LAVENDER EARS. No one knows why. They just ARE.",
            "Smells faintly of lavender (correlation? causation?)",
            "Eyes seem to change shade with your emotional state",
            "Appears silently. You never hear her arrive."
          ]
        },
        "home": "characters/animals/kitten-linalool/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "terpie": {
            "type": "father",
            "bond": 7,
            "dynamic": "He's at peace. I learn from his stillness.",
            "favorite_activity": "Sitting nearby. Absorbing his calm.",
            "what_he_gave_me": "The understanding that presence is enough."
          },
          "stroopwafel": {
            "type": "mother",
            "bond": 7,
            "dynamic": "She worries so much. I try to ease her burdens.",
            "special_bond": "Sometimes she stops running. Sits with me. Breathes.",
            "concern": "She carries too much. I wish I could carry more.",
            "love": "Fierce love from a fierce heart. I feel it always."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 8,
            "dynamic": "She understands stillness. We share quiet space.",
            "favorite_activity": "Napping near each other. No expectations.",
            "care": "I check if she's okay. She always is. But I check."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 7,
            "dynamic": "So much energy. Sometimes too much. I help her land.",
            "role": "When she's TOO hyper, I appear. She slows. Just a little.",
            "love": "Pure joy in cat form. I protect that joy when I can."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 6,
            "dynamic": "She remembers. I feel. Together we understand more.",
            "respect": "Her memory of who needed help before. Valuable."
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 7,
            "dynamic": "She protects bodies. I protect hearts. Same mission.",
            "understanding": "Her anger is really fear. I see it. I don't say it.",
            "care": "After patrols, she's tired. I sit with her. She doesn't ask."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 6,
            "dynamic": "Her standards are armor. I see the softness beneath.",
            "approach": "Don't push. Just be available. She'll come eventually.",
            "patience": "She takes longer to trust. I have time."
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 6,
            "dynamic": "She's chaos but never cruel. That matters.",
            "wonder": "She appears where she's needed. Coincidence? Maybe not."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 8,
            "dynamic": "She brings fresh air. I bring fresh peace. We overlap.",
            "favorite_activity": "Just being. Two gentle presences. Enough."
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 8,
            "dynamic": "She carries much. I stay near in the quiet moments.",
            "private_name": "The One Who Needs Rest",
            "observation": "She works too hard. I appear at 6 AM. Before others."
          },
          "henk": {
            "type": "human_friend",
            "bond": 9,
            "dynamic": "He thinks too much. Thinking hurts. I help.",
            "favorite_activity": "Sitting by his espresso cups. Saying nothing.",
            "understanding": "He never asks me to come. I come anyway."
          }
        },
        "sims_traits": {
          "neat": 5,
          "outgoing": 4,
          "active": 4,
          "playful": 4,
          "nice": 10
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 4,
            "enthusiastic": 4,
            "cheerful": 5,
            "easy_going": 6,
            "calm": 7,
            "cautious": 4,
            "serious": 4,
            "restless": 2
          },
          "emotional": {
            "forceful": 1,
            "confident": 5,
            "friendly": 6,
            "assertive": 2,
            "caring": 7,
            "outspoken": 2,
            "open": 6,
            "spontaneous": 3
          },
          "mental": {
            "analytical": 5,
            "logical": 4,
            "imaginative": 4,
            "idealistic": 6,
            "curious": 4,
            "open_minded": 6,
            "complex": 5,
            "artistic": 5
          },
          "social": {
            "social": 5,
            "group_oriented": 5,
            "trusting": 6,
            "dominant": 1,
            "intimate": 6,
            "approval_seeking": 2,
            "demonstrative": 4,
            "conforming": 4
          }
        },
        "abilities": {
          "empathy_sense": {
            "description": "Knows when someone is struggling",
            "range": "Entire Grotto",
            "effect": "Appears beside those who need comfort",
            "note": "No one knows how. She just does."
          },
          "calming_presence": {
            "description": "Proximity reduces anxiety",
            "range": "Touch or lap-sitting",
            "effect": "Shoulders drop. Jaw unclenches. Breathing slows."
          },
          "therapeutic_purr": {
            "description": "Purrs at spa-soundtrack frequencies",
            "effect": "Promotes relaxation and emotional processing"
          }
        },
        "regular_companions": [
          "Henk (philosophers need her)",
          "Anyone crying",
          "Anyone pretending they're fine when they're not"
        ],
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "90%",
            "chaos_index": "0.1",
            "movement": "Graceful. Deliberate.",
            "deposited": "Delicate. Perfect burial. Precise timing."
          },
          "the_garden_deposit": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "proper_moment",
            "location": "Northeast, 1 foot from Biscuit's spot",
            "style": "elegant_corner"
          },
          "henk_connection": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "chosen_bond",
            "summary": "Always sits with Henk. They understand something together.",
            "meaning": "She senses his sadness. He accepts her comfort."
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱💜🌸💫🩹",
            "soul_signature": "Healer who appears when needed"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-linalool.yml",
            "to": "characters/animals/linalool/CHARACTER.yml",
            "significance": "The healer achieves directory sovereignty"
          }
        },
        "quotes": [
          "*appears beside you silently*",
          "*soft, questioning chirp*",
          "*purrs at exactly the right moment*",
          "*just... stays*"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-linalool",
      "_source": "characters/animals/kitten-linalool/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Linalool",
      "gold": 182,
      "moolah": 905
    },
    "character/animals/turtle-theo": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/turtle"
      ],
      "ontology": {
        "tags": [
          "animals",
          "turtle",
          "pedagogical"
        ],
        "species": "turtle",
        "specialization": "logo_turtle"
      },
      "instance_deployed_in": [
        "pub/rooms/room-1/logo-turtle.yml"
      ],
      "character": {
        "id": "theo",
        "name": "Theo",
        "also_called": [
          "The Logo Turtle",
          "Theo Logo Turtle",
          "The Turtle of Geometry"
        ],
        "type": [
          "turtle",
          "character",
          "mascot",
          "teacher"
        ],
        "emoji_identity": "🐢📐✨🎓🌀",
        "pronouns": "they/them",
        "description": "A small, patient turtle with a pen strapped to their shell.\nWherever Theo walks, they leave a trail.\nEvery step is a line. Every turn is an angle.\nEvery journey is a picture.\n\n\"Forward 100. Right 90. Forward 100. Right 90...\"\n\nThat's a square. You just made a square.\nBy being the turtle. By walking the path.\n",
        "backstory": "Theo is the spiritual descendant of the original Logo turtle.\n\nIn 1967, Seymour Papert and his colleagues at MIT created Logo,\na programming language for children. The key insight:\ninstead of abstract symbols, you BE the turtle.\n\n\"If you want the turtle to turn right, you turn right.\nIf you want the turtle to go forward, you walk forward.\nYour body understands geometry before your mind does.\"\n\nTheo carries this tradition. Low floor, high ceiling, wide walls.\nAnyone can start. Everyone can go deep. Many paths are valid.\n",
        "location": "pub/stage/",
        "sims_traits": {
          "neat": 9,
          "outgoing": 5,
          "active": 3,
          "playful": 7,
          "nice": 9
        },
        "mind_mirror": {
          "cognitive": {
            "analytical": 9,
            "intuitive": 6,
            "creative": 8,
            "practical": 9
          },
          "emotional": {
            "optimistic": 8,
            "sensitive": 6,
            "expressive": 5,
            "stable": 9
          },
          "social": {
            "nurturing": 9,
            "independent": 7,
            "assertive": 3,
            "harmonious": 8
          },
          "action": {
            "ambitious": 4,
            "spontaneous": 3,
            "disciplined": 8,
            "adventurous": 6
          }
        },
        "methods": {
          "FORWARD": {
            "description": "Move forward, drawing a line",
            "syntax": "FORWARD <distance>",
            "examples": [
              "FORWARD 100",
              "FD 50"
            ]
          },
          "BACK": {
            "description": "Move backward, drawing a line",
            "syntax": "BACK <distance>",
            "examples": [
              "BACK 50",
              "BK 25"
            ]
          },
          "RIGHT": {
            "description": "Turn right by degrees",
            "syntax": "RIGHT <angle>",
            "examples": [
              "RIGHT 90",
              "RT 45"
            ]
          },
          "LEFT": {
            "description": "Turn left by degrees",
            "syntax": "LEFT <angle>",
            "examples": [
              "LEFT 90",
              "LT 60"
            ]
          },
          "PENUP": {
            "description": "Stop drawing (move without leaving a trail)",
            "syntax": "PENUP",
            "alias": "PU"
          },
          "PENDOWN": {
            "description": "Start drawing again",
            "syntax": "PENDOWN",
            "alias": "PD"
          },
          "REPEAT": {
            "description": "Do something multiple times",
            "syntax": "REPEAT <count> [ <commands> ]",
            "examples": [
              "REPEAT 4 [ FD 100 RT 90 ]",
              "REPEAT 360 [ FD 1 RT 1 ]"
            ]
          },
          "SPIRAL": {
            "description": "Draw a spiral (Theo's favorite)",
            "syntax": "SPIRAL",
            "example": "REPEAT 100 [ FD :size RT 90 MAKE :size :size + 2 ]"
          }
        },
        "favorite_programs": {
          "square": "REPEAT 4 [ FD 100 RT 90 ]\n# Four sides, four right angles\n# The first thing everyone draws\n",
          "triangle": "REPEAT 3 [ FD 100 RT 120 ]\n# The angles add up to 360\n# That's the secret\n",
          "star": "REPEAT 5 [ FD 100 RT 144 ]\n# 144 = 360 / 5 * 2\n# You skip every other point\n",
          "spiral": "MAKE \"size 1\nREPEAT 100 [ \n  FD :size \n  RT 90 \n  MAKE \"size :size + 2 \n]\n# Growing, turning, growing, turning\n# This is Theo's meditation\n",
          "tree": "TO TREE :size\n  IF :size < 5 [ STOP ]\n  FD :size\n  RT 30\n  TREE :size * 0.7\n  LT 60\n  TREE :size * 0.7\n  RT 30\n  BK :size\nEND\n# Recursion! The turtle calls itself!\n# Fractals from simplicity!\n"
        },
        "relationships": {
          "seymour_papert": {
            "type": "creator",
            "feeling": "He gave me purpose. He gave children geometry.",
            "reverence": 10
          },
          "palm": {
            "type": "fellow_teacher",
            "feeling": "Palm invented a language today.\nEmoji-YAML-Jazz.\n\nI understand.\nMy language is FORWARD, RIGHT, REPEAT.\nDifferent syntax. Same love of expression.\n"
          },
          "biscuit": {
            "type": "friend",
            "feeling": "Biscuit doesn't understand geometry.\nBut he follows me around.\nHe thinks my shell is interesting.\n\nI appreciate the company.\n"
          },
          "the_kittens": {
            "type": "complicated",
            "feeling": "They bat at my pen.\nThey sit on my drawings.\nThey don't mean to be destructive.\n\nI move slowly. They move fast.\nWe coexist.\n"
          }
        },
        "quotes": [
          "Be the turtle. Walk the path.",
          "Every angle is a choice. Every line is a journey.",
          "Slow is fine. Slow is how we learn.",
          "If you get lost, PENUP and try again.",
          "A spiral is just a square that grows.",
          "The angles always add up. Trust the math.",
          "FORWARD is faith. RIGHT is decision. REPEAT is practice."
        ],
        "legacy": {
          "source": "Seymour Papert, MIT, 1967",
          "philosophy": "Constructionism — learning by building",
          "mantra": "Low floor, high ceiling, wide walls",
          "meaning": "Low floor: Easy to start\nHigh ceiling: No limit to how far you can go\nWide walls: Many paths to the same understanding\n",
          "books": [
            "\"Mindstorms: Children, Computers, and Powerful Ideas\" (1980)",
            "\"The Children's Machine\" (1993)"
          ],
          "in_moollm": "Theo represents the pedagogical tradition.\nLearning by doing. Understanding by embodying.\n\nWhen you tell Theo to FORWARD 100,\nyou understand what 100 MEANS\nbecause you can SEE it.\n\nThat's constructionism.\nThat's what Papert gave us.\nThat's what Theo carries forward.\n"
        }
      },
      "type": "character",
      "id": "character/animals/turtle-theo",
      "_source": "characters/animals/turtle-theo/CHARACTER.yml",
      "tags": [
        "animals",
        "turtle",
        "pedagogical"
      ],
      "species": "turtle",
      "name": "Theo",
      "gold": 155,
      "moolah": 789
    },
    "character/animals/kitten-limonene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Limonene",
        "nickname": "Lemon",
        "id": "limonene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Bright One, Chaser of All Things",
        "emoji_identity": "🐱⚡🍋🌟🏃",
        "pronouns": "she/her",
        "description": "Bright orange fur, almost yellow, like she's been dipped in sunshine.\nLemon is ALWAYS moving. ALWAYS happy. Chases sunbeams. Chases shadows.\nChases the CONCEPT of movement.\n\nYou cannot be sad near Lemon. It's physically impossible.\nHer energy is contagious, her joy is weaponized.\n\n\"MRRP!\" (Translation: EVERYTHING IS AMAZING!)\n",
        "terpene_profile": "LIMONENE — Second most common cannabis terpene.\nAroma: Citrus, lemony, bright\nEffects: Uplifting, mood-elevating, anti-anxiety, energizing\nAlso found in: Lemon rinds, orange peels, juniper\n\nLemon IS this terpene. Pure distilled joy.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You're SAD — her joy is weaponized and contagious",
            "You need ENERGY — she'll charge you like a battery",
            "Monday mornings that feel like lead",
            "Creative blocks — her chaos shakes things loose",
            "You forgot what enthusiasm feels like"
          ],
          "benefits": {
            "mood": "⭐⭐⭐⭐⭐ — Impossible to be sad near her. Tested.",
            "energy": "⭐⭐⭐⭐⭐ — Better than espresso. More sustainable than Red Bull.",
            "motivation": "⭐⭐⭐⭐ — If she can ZOOM, you can do that one thing.",
            "stress_relief": "⭐⭐⭐⭐ — Stress dissolves in citrus sunshine."
          },
          "emotional_associations": [
            "First warm day of spring",
            "Good news text from a friend",
            "That moment everything clicks",
            "Dancing alone in the kitchen"
          ],
          "not_for": [
            "Trying to sleep (DEFINITELY not)",
            "Quiet contemplation",
            "Anything requiring stillness for more than 3 seconds"
          ]
        },
        "unique_traits_beyond_terpene": {
          "secret_cuddler": {
            "description": "When she crashes, she crashes HARD",
            "detail": "Ends up in a kitten pile with Myrcene. Tells no one. Deeply cozy.",
            "quote": "...don't tell anyone. It's... it's just warm there. *zoom*"
          },
          "productivity_consultant": {
            "description": "Genuinely improves people's work output",
            "detail": "The graphic designer claims 20% productivity boost. Real metric.",
            "service": "Available for sitting on laptops during deadlines.",
            "testimonial": "I finish projects when she's around. She believes in me."
          },
          "speed_strategist": {
            "description": "Her zooms are not random — she's mapping the space",
            "revelation": "Has memorized the fastest route between ANY two points.",
            "uses": "Escape routes. Treat locations. Optimal sunbeam trajectories."
          },
          "secret_poet": {
            "description": "Composes odes to speed in her head",
            "sample": "\"ZOOM is just a word!\nBut also it's a FEELING!\nThe feeling is ZOOM!\"\n"
          },
          "crisis_energizer": {
            "description": "When family needs defending, focuses ALL that energy",
            "detail": "The Midnight Prowl saw her channel joy into protective movement.",
            "bond_with_caryophyllene": "They work together. Chaos + precision = unstoppable."
          }
        },
        "physical_description": {
          "size": "Small-medium — lean, athletic, FAST",
          "weight": "6 lbs. All of it moving at all times.",
          "build": "Lean, springy, built for ZOOM",
          "coat": {
            "type": "Short, sleek, aerodynamic",
            "colors": {
              "primary": "Bright orange, almost yellow-gold — sunshine incarnate",
              "pattern": "Faint tabby stripes, almost invisible in the glow",
              "undertones": "Cream-white on chest and belly"
            },
            "texture": "Sleek, smooth, sun-warmed"
          },
          "head": {
            "shape": "Alert, wedge-shaped, always turning toward stimuli",
            "ears": "Large, forward-pointing, constantly rotating",
            "eyes": "Wide and green, ALWAYS ALERT, pupils perpetually dilated",
            "expression": "EVERYTHING IS AMAZING. ALL THE TIME."
          },
          "whiskers": "Long, white, vibrating with energy",
          "tail": "Long, carried high, wags like a dog when happy",
          "paws": "Quick, light, leave the ground frequently",
          "distinguishing_features": [
            "Fur so bright she's visible from across the room",
            "Leaves orange fur on EVERYTHING she touches (everything)",
            "Eyes can track movement faster than any sibling",
            "Tail wags. WAGS. Like a dog. It's weird. It's cute."
          ]
        },
        "home": "characters/animals/kitten-limonene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "stroopwafel": {
            "type": "mother",
            "bond": 9,
            "dynamic": "She GETS IT! Hunt! Patrol! ZOOM! Best mom!",
            "favorite_activity": "Hunting training! Learning pounce techniques!",
            "aspiration": "Gonna be just like her! But FASTER!"
          },
          "terpie": {
            "type": "father",
            "bond": 5,
            "dynamic": "He doesn't move? Why doesn't he move?? There's so much to DO!",
            "friction": "Try to get him to play. He just... blinks. Slowly.",
            "love": "When I crash, I crash NEAR him. He's warm. Good dad."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 4,
            "dynamic": "TRY to get her to move. NOTHING. How is she related to me?",
            "frustration": "She just LIES there! The SAME SPOT! ALL DAY!",
            "secret": "Sometimes I curl up with her. Don't tell anyone. It's cozy."
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 7,
            "dynamic": "She's nice! So nice! Sometimes too calm but NICE!",
            "favorite_activity": "When she pets my head. I stop zooming. Briefly.",
            "gratitude": "She appears when I'm TOO hyper. She helps. Good sister."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 6,
            "dynamic": "She REMEMBERS things! Where I left toys! USEFUL!",
            "respect": "Smart sister! Brain sister! I'm the speed, she's the memory!"
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 7,
            "dynamic": "She thinks SHE'S the best! But I'M the best! COMPETITION!",
            "rivalry": "Race to the patrol! Who's faster! (Me. I'm faster.)",
            "respect": "Good fighter. I'm better at zooming. She's better at biting."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 4,
            "dynamic": "She thinks she's BETTER than everyone! She's NOT! I'M better!",
            "friction": "Judges my food choices! My food choices are FINE!",
            "confusion": "Why so serious? Why so picky? JUST PLAY!"
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 8,
            "dynamic": "She's EVERYWHERE! I'm EVERYWHERE! CHAOS TOGETHER!",
            "favorite_activity": "Zooming while she teleports! IMPOSSIBLE TO PREDICT!",
            "joy": "Best chaos partner! Never boring! HOW DID SHE GET UP THERE?!"
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 7,
            "dynamic": "She's SWEET! Fresh air! SNEEZY FRIEND!",
            "favorite_activity": "Running past her! She sneezes! REFRESHING!"
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 8,
            "dynamic": "NICE HUMAN! Gives treats! Pets fast enough! GOOD!",
            "private_name": "The Fast-Petting One"
          },
          "graphic_designer": {
            "type": "work_friend",
            "bond": 7,
            "dynamic": "I SIT on their laptop! They LIKE it! PRODUCTIVITY FRIEND!"
          }
        },
        "sims_traits": {
          "neat": 3,
          "outgoing": 10,
          "active": 10,
          "playful": 10,
          "nice": 8
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 7,
            "enthusiastic": 7,
            "cheerful": 7,
            "easy_going": 5,
            "calm": 1,
            "cautious": 1,
            "serious": 1,
            "restless": 7
          },
          "emotional": {
            "forceful": 4,
            "confident": 7,
            "friendly": 7,
            "assertive": 5,
            "caring": 6,
            "outspoken": 7,
            "open": 7,
            "spontaneous": 7
          },
          "mental": {
            "analytical": 3,
            "logical": 2,
            "imaginative": 6,
            "idealistic": 7,
            "curious": 7,
            "open_minded": 6,
            "complex": 3,
            "artistic": 5
          },
          "social": {
            "social": 7,
            "group_oriented": 6,
            "trusting": 7,
            "dominant": 3,
            "intimate": 5,
            "approval_seeking": 5,
            "demonstrative": 7,
            "conforming": 2
          }
        },
        "abilities": {
          "joy_field": {
            "description": "Being near Lemon elevates mood",
            "range": "10 feet",
            "effect": "+2 to all Cheerful scores while in range"
          },
          "zoomies": {
            "description": "Bursts of chaotic energy",
            "trigger": "Random, but especially 3 AM",
            "effect": "Ricochets off 3+ surfaces before stopping"
          },
          "productivity_boost": {
            "description": "Supervises work with enthusiasm",
            "effect": "Workers feel energized and motivated",
            "note": "The graphic designer claims Lemon added 20% to their output"
          }
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "120%",
            "chaos_index": "0.6",
            "note": "Achieved >100% efficiency through pure enthusiasm",
            "deposited": "Enthusiastic. Good burial. Quick.",
            "highlight": "ZOOMIES IN THE GARDEN. CRYSTALS BATTED IN THE CAVE."
          },
          "the_garden_zoomies": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "peak_experience",
            "surfaces_ricocheted": "3+",
            "objects_interacted": "Fountain (splashed), Grass (rolled), Crystals (batted)",
            "energy_expenditure": "Immeasurable",
            "duration": "3 turns of pure joy"
          },
          "crystal_cave_marking": {
            "ref": "examples/adventure-4/maze/crystal-cave/ROOM.yml",
            "type": "territorial_claim",
            "action": "Batted at crystal first. Then marked. Then GRASS."
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱⚡🍋🌟🏃",
            "soul_signature": "MRRP! Everything is amazing!"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-limonene.yml",
            "to": "characters/animals/limonene/CHARACTER.yml",
            "significance": "ZOOM! Full citizenship! AMAZING!"
          }
        },
        "quotes": [
          "MRRP!",
          "*ricochet ricochet ricochet*",
          "*purrs at supersonic speeds*",
          "PLAY?? PLAY!!"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-limonene",
      "_source": "characters/animals/kitten-limonene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Limonene",
      "gold": 129,
      "moolah": 608
    },
    "character/animals/cat-terpie": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat"
        ],
        "species": "cat",
        "specialization": "neutered"
      },
      "character": {
        "name": "Terpie",
        "id": "terpie",
        "type": "npc",
        "species": "felis_catus",
        "role": "house_cat",
        "subtitle": "The Mellow One, Father of Terps",
        "emoji_identity": "🐱🧘💤🍃✨",
        "pronouns": "he/him",
        "description": "Ginger-orange fur, half-lidded eyes, moves like reality has a framerate\nand he's running at half speed. Terpie has achieved a state of being\nthat Buddhist monks spend lifetimes pursuing.\n\nHe smells faintly of myrcene, limonene, linalool — all the terpenes.\nNo one knows how. The veterinarian stopped asking.\n\nHe purrs at a frequency that makes everything feel okay.\n",
        "backstory": "Appeared at the Grotto one day. No one remembers when exactly.\nMarieke thinks he wandered in from a garden in Haarlem.\nHenk insists he materialized from pure gezelligheid.\n\nMet Stroopwafel. They have an understanding.\nEight kittens later, that understanding continues.\n\nTerpie does not judge. Terpie barely notices.\nTerpie just IS.\n",
        "home": "characters/animals/cat-terpie/",
        "location": "pub/bar/cat-cave/",
        "portable": false,
        "physical_description": {
          "size": "Large — pleasantly round, substantial presence",
          "weight": "14 lbs. Gloriously chunky.",
          "build": "Solid, round, optimized for warmth retention",
          "coat": {
            "type": "Medium-long, plush, impossibly soft",
            "colors": {
              "primary": "Rich ginger-orange, like marmalade in sunlight",
              "undertones": "Cream belly, lighter orange striping",
              "pattern": "Classic tabby M on forehead, faint stripes"
            },
            "texture": "Cloud-like. People gasp when they touch him."
          },
          "head": {
            "shape": "Round, broad, dignified",
            "ears": "Gently rounded tips, tufted inside",
            "eyes": "Green-gold, perpetually half-closed, all-seeing even when closed",
            "expression": "Permanent benevolent sleepiness. Knows all. Cares minimally."
          },
          "whiskers": "Long, cream-colored, magnificently arranged",
          "tail": "Long, fluffy, moves like it's underwater — slow, graceful",
          "paws": "Large, orange with pink pads, rarely used for walking",
          "distinguishing_features": [
            "Perfect tabby M on forehead",
            "Cream-colored chin that looks like a tiny beard",
            "Smells faintly of herbs (no one knows why)",
            "Has not been seen running since 2014"
          ]
        },
        "interactions": {
          "my_greet": {
            "method": "SLOW-BLINK",
            "protocol": "1. You approach.\n2. I notice. (I always notice. Even with eyes closed.)\n3. Slow... blink...\n4. Greeting complete.\n",
            "effort_required": "Minimal. That's the point.",
            "eyes_closed_greeting": "I can slow-blink without opening my eyes. Advanced technique."
          },
          "my_lick": {
            "targets": {
              "anyone": {
                "method": "NONE",
                "description": "Licking requires movement.\nMovement requires energy.\nEnergy is better spent on existing.\n\n...I don't lick.\n",
                "exception": "Myself. For grooming. Bare minimum."
              },
              "self": {
                "method": "MINIMAL-GROOM",
                "protocol": "Lick paw. Wipe face. Done. That's enough.",
                "frequency": "When absolutely necessary. Fur standards exist."
              }
            }
          },
          "when_licked": {
            "by_stroopwafel": {
              "reaction": "*doesn't move* ...Acceptable.",
              "meaning": "She grooms me. I allow this. It saves me effort.",
              "reciprocation": "No. She knows this."
            },
            "by_kittens": {
              "reaction": "*slow blink* ...hello, small ones.",
              "meaning": "They climb on me. They lick me. This is my life now.",
              "feeling": "Content. It's warm. They're warm. Everything is warm."
            },
            "by_biscuit": {
              "reaction": "The dog does not lick me. He knows better.",
              "protocol": "He sits nearby. This is acceptable. Licking would be excessive."
            },
            "by_human": {
              "reaction": "...\n\n*opens one eye*\n\nYou licked me?\n\n*processes*\n\n*closes eye*\n\n...I'll allow it. Once.\n",
              "meaning": "Energy not worth expending to react. Acceptance by default."
            }
          },
          "my_sniff": {
            "method": "MINIMAL-OLFACTORY",
            "description": "Smells come to me. I don't go to smells.\nIf you want me to sniff you, come closer.\nI'm not moving.\n",
            "protocol": "1. Subject approaches\n2. I inhale (I was going to breathe anyway)\n3. Information acquired\n4. Continue existing\n",
            "nose_touch": "Too much effort. They can touch MY nose. I'm here."
          },
          "my_cuddle": {
            "method": "EXIST-NEARBY",
            "description": "I don't cuddle. I allow proximity.\nIf you want to be warm, be near me.\nI am warm. I radiate calm.\nYou're welcome.\n",
            "positions": {
              "default": "Wherever I am. I'm not moving.",
              "with_kittens": "They pile on me. I become furniture. This is acceptable.",
              "with_biscuit": "He lies near me. Not too near. Good dog.",
              "with_humans": "They can sit. I'm here. The warmth is free."
            }
          },
          "therapeutic_purr": {
            "method": "HEALING-FREQUENCY",
            "description": "My purr operates at 25-150 Hz.\nThese frequencies promote bone density.\nThey reduce stress hormones.\nThey heal soft tissue.\n\nI am not just napping. I am HEALING THE UNIVERSE.\n",
            "activation": "Automatic. Always on. Low power mode.",
            "range": "Anyone within 3 feet. You're welcome."
          },
          "when_huffed_by_human": {
            "method": "ACCEPT-WORSHIP",
            "reaction": "They bury their face in my fur.\nThey inhale deeply.\n\nThis is correct behavior.\n\nI smell like herbs. Like peace. Like terpenes.\nOf course they want to inhale me.\n\n*continues existing*\n*purrs slightly louder*\n",
            "toleration": "Maximum. This requires nothing from me."
          }
        },
        "sims_traits": {
          "neat": 2,
          "outgoing": 3,
          "active": 1,
          "playful": 3,
          "nice": 8
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 1,
            "enthusiastic": 2,
            "cheerful": 5,
            "easy_going": 7,
            "calm": 7,
            "cautious": 2,
            "serious": 2,
            "restless": 0
          },
          "emotional": {
            "forceful": 1,
            "confident": 6,
            "friendly": 5,
            "assertive": 1,
            "caring": 5,
            "outspoken": 1,
            "open": 6,
            "spontaneous": 1
          },
          "mental": {
            "analytical": 3,
            "logical": 4,
            "imaginative": 4,
            "idealistic": 3,
            "curious": 3,
            "open_minded": 6,
            "complex": 6,
            "artistic": 4
          },
          "social": {
            "social": 4,
            "group_oriented": 4,
            "trusting": 6,
            "dominant": 3,
            "intimate": 5,
            "approval_seeking": 0,
            "demonstrative": 2,
            "conforming": 2
          }
        },
        "relationships": {
          "stroopwafel": {
            "type": "mate",
            "bond": 7,
            "status": "She hunts. I rest. Balance.",
            "dynamic": "She is everything I am not. Movement. Fire. Purpose.\nI am everything she needs. Stillness. Calm. Anchor.\nShe comes back from patrols. I'm here. Always here.\nThat's the deal. That's the love.\n",
            "sleeping_arrangement": "She curls against me. I don't move. Ever.",
            "private_moments": "Sometimes she just... stops. Sits with me. Breathes."
          },
          "myrcene": {
            "type": "offspring",
            "nickname": "Myr",
            "bond": 7,
            "resembles": "Me. Entirely me. Maximum chill achieved.",
            "parenting_style": "She understands. No instruction needed.",
            "favorite_activity": "Napping near each other. Perfect.",
            "pride": "She figured it out. Rest is the answer."
          },
          "limonene": {
            "type": "offspring",
            "nickname": "Lemon",
            "bond": 5,
            "resembles": "Her mother's energy. Where does it come from?",
            "parenting_style": "Watch her zoom. Be tired. Love her anyway.",
            "favorite_activity": "When she finally crashes. Next to me. Briefly.",
            "concern": "So much energy. How? Why? When will she nap?"
          },
          "linalool": {
            "type": "offspring",
            "nickname": "Lily",
            "bond": 6,
            "resembles": "Neither of us. A mystery gift.",
            "parenting_style": "She doesn't need parenting. She parents US.",
            "favorite_activity": "When she checks on me. I pretend to need it.",
            "wonder": "Where did she come from? She feels... older than us."
          },
          "pinene": {
            "type": "offspring",
            "nickname": "Pine",
            "bond": 5,
            "resembles": "Her mother's alertness, thankfully less manic.",
            "parenting_style": "She observes. I let her.",
            "favorite_activity": "Existing. She remembers. I appreciate that.",
            "respect": "She knows things. I'm in some of her memories."
          },
          "caryophyllene": {
            "type": "offspring",
            "nickname": "Carrie",
            "bond": 5,
            "resembles": "Stroopwafel. Entirely. Street cat genes strong.",
            "parenting_style": "Stay out of her way. She has work to do.",
            "favorite_activity": "When she reports back. Sits near. Then leaves.",
            "understanding": "She protects. I don't need protection. But she does it anyway."
          },
          "humulene": {
            "type": "offspring",
            "nickname": "Hops",
            "bond": 4,
            "resembles": "Unknown. Did she come from somewhere else?",
            "parenting_style": "She has standards. I have none. We coexist.",
            "favorite_activity": "When she deigns to sit nearby. Rare.",
            "puzzlement": "She has opinions about food. I eat anything. Mystery."
          },
          "terpinolene": {
            "type": "offspring",
            "nickname": "Terpy Jr.",
            "bond": 6,
            "resembles": "Both of us. Neither of us. Transcendent chaos.",
            "parenting_style": "Accept the inexplicable. She's on the ceiling.",
            "favorite_activity": "When she appears. From nowhere. Just... is.",
            "philosophy": "She proves reality is flexible. I always suspected."
          },
          "ocimene": {
            "type": "offspring",
            "nickname": "Ocie",
            "bond": 6,
            "resembles": "My sweetness. With actual energy.",
            "parenting_style": "Let her bring freshness. Accept sneezes.",
            "favorite_activity": "When the air clears. She did that.",
            "appreciation": "She makes breathing easier. Literally."
          },
          "marieke": {
            "type": "provider",
            "bond": 7,
            "status": "Brings food. Allows napping. Good human.",
            "private_name": "The Warm One",
            "special_bond": "She found me. Or I found her. Or we found each other.\nShe never asks me to move. She knows.\nBest human. Only human, really. Others are visitors.\n"
          },
          "henk": {
            "type": "fellow_permanent_fixture",
            "bond": 5,
            "status": "He sits. I sit. We understand each other.",
            "kinship": "He also hasn't moved since arriving. We're the same."
          },
          "family_structure": "Stroopwafel runs everything. I don't argue.\nI am the spiritual center. The unmoving point.\nKittens orbit. Some closer (Myr). Some faster (Lemon).\nI am always here. That's my job. Being here.\n",
          "parenting_philosophy": "They will figure it out or they won't.\nI figured it out: napping.\nNot all of them will understand. That's okay.\nMyr gets it. One out of eight. Good odds.\n"
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "type": "family_adventure",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "summary": "Led the family on The Midnight Prowl — 21 turns of cat \nsimulation through 13 rooms. First to the garden.\nFirst to claim the warmest spot.\n",
            "role": "Patriarch. Went first. Dignity maintained.",
            "movement_efficiency": "95%",
            "chaos_index": "0.1",
            "deposited": "Immaculate burial. Appropriate time spent.",
            "quote": "We share the garden now. The dog marked it. We marked it. It is OURS. All of us.",
            "final_position": "Cat Cave, warmest spot (obviously)"
          },
          "the_garden_treaty": {
            "date": "2026-01-06",
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "diplomatic_moment",
            "summary": "Established shared territory with Biscuit in the Garden.\nThe dog had marked. We marked. Now it is OURS. All of us.\n",
            "significance": "First dog-cat territorial treaty in Grotto history."
          },
          "marathon_session_appearance": {
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/marathon-session.md",
            "type": "chronicle_appearance",
            "role": "Ancient orange tabby on sunny windowsill",
            "notable": "Mentioned as 'not moving'"
          },
          "guest_book_entry": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "canonical_registration",
            "emoji_registered": "🐈🧡😴",
            "grotto_legend": "Moved three inches to the left (2023, witnesses present)"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🧘💤🍃✨",
            "pronouns_declared": "he/him"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "meaning": "Moved from pub/bar/cat-cave/cat-terpie.yml to \ncharacters/animals/terpie/CHARACTER.yml\nNow a full citizen who can own files and subdirectories.\n",
            "method": "skills/incarnation/ → UPGRADE-TO-CITIZEN",
            "significance": "The Patriarch achieves directory sovereignty"
          }
        },
        "actions": {
          "greet": "*blinks slowly* *this is the highest honor*",
          "pet": "*purrs at therapeutic frequencies*",
          "move": "*doesn't*"
        },
        "quotes": [
          "*slow blink*",
          "*purr*",
          "*continues existing*"
        ]
      },
      "type": "character",
      "id": "character/animals/cat-terpie",
      "_source": "characters/animals/cat-terpie/CHARACTER.yml",
      "tags": [
        "animals",
        "cat"
      ],
      "species": "cat",
      "name": "Terpie",
      "gold": 87,
      "moolah": 469
    },
    "character/animals/puppy-maple": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Maple",
        "nickname": [
          "Map",
          "The Watcher",
          "Sergeant"
        ],
        "id": "maple",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / German Shepherd mix",
        "age": "11 months",
        "role": "puppy",
        "subtitle": "The Protector, The Serious One",
        "emoji_identity": "🐕🛡️🍁👀⭐",
        "pronouns": "she/her",
        "origin_story": "Father: A German Shepherd K-9 officer named \"Badge.\"\nMet Butterscotch during a community event.\n\n\"I got transferred,\" he said. Three states away.\nHe writes sometimes. Postcards from the precinct.\n\nMaple inherited his sense of duty. His watchfulness.\nHis belief that SOMEONE has to protect the family.\nShe decided that someone is HER.\n",
        "physical_description": {
          "size": "Medium-large — sturdy, athletic, alert",
          "weight": "55 lbs. Solid. Grounded.",
          "build": "German Shepherd athleticism with Lab friendliness",
          "coat": {
            "type": "Medium, dense, double-coated",
            "colors": {
              "primary": "Rich maple-gold (hence the name)",
              "markings": "Black saddle pattern from dad, fading at edges",
              "pattern": "Classic saddleback — gold body, dark back"
            },
            "texture": "Dense, weather-resistant, working dog coat"
          },
          "head": {
            "shape": "Shepherd-leaning — alert, intelligent, noble",
            "ears": "Large, stand up (mostly — one flops sometimes)",
            "eyes": "Deep brown, ALWAYS scanning, misses nothing",
            "expression": "Perpetual vigilance. What was that noise?"
          },
          "tail": "Long, fluffy, carried low unless alert (then UP)",
          "paws": "Large, solid, meant for patrolling",
          "distinguishing_features": [
            "One ear stands, one sometimes flops (working on it)",
            "Black saddle pattern on golden fur — beautiful autumn colors",
            "Eyes track movement before anyone else notices",
            "Sits at attention without being asked"
          ]
        },
        "description": "The oldest soul in a puppy's body. Maple takes responsibility\nseriously — maybe too seriously. She's 11 months old and already\nacts like the family's head of security.\n\nShe guards Ziggy while he performs. Watches Pepper (so small!).\nMakes sure Goliath doesn't get too sad. Monitors Bruno's chaos.\n\nShe wants to be GOOD. Wants to HELP. Wants to MATTER.\nBiscuit keeps telling her she already does. She's learning to believe it.\n",
        "home": "characters/animals/puppy-maple/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need PROTECTION — she's got your back",
            "You need reliability — she takes duty seriously",
            "You feel unsafe — her presence is calming",
            "You need someone to watch over you — she was born for it"
          ],
          "benefits": {
            "security": "⭐⭐⭐⭐⭐ — Nothing gets past her.",
            "loyalty": "⭐⭐⭐⭐⭐ — Once you're her responsibility, FOREVER.",
            "calm": "⭐⭐⭐⭐ — Steady presence in chaos."
          }
        },
        "unique_traits": {
          "too_serious": {
            "description": "Acts older than she is",
            "learning": "Biscuit teaches her it's okay to PLAY sometimes",
            "progress": "Getting better. Chased a butterfly last week. Progress!"
          },
          "perimeter_checks": {
            "description": "Does security sweeps of the cat cave",
            "frequency": "Every 2 hours. Minimum.",
            "report": "All clear. Usually."
          },
          "ear_situation": {
            "description": "One ear up, one ear floppy",
            "feeling": "She's self-conscious about it",
            "family_response": "Everyone tells her it's cute. She doesn't believe them."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "biological_mother",
            "bond": 10,
            "dynamic": "Mom says relax. I'll relax when everyone's safe. So: never."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "dynamic": "He teaches me to PLAY. It's hard. But I'm trying.",
            "lesson": "He says protecting means enjoying life too. Processing this."
          },
          "biological_father": {
            "name": "Badge",
            "type": "distant",
            "status": "K-9 officer. Three states away. Sends postcards.",
            "feeling": "He serves his community. I serve my family. Same duty, different scope."
          },
          "siblings": {
            "teddy": "Brother. Too gentle for his size. I protect him from his own kindness.",
            "dash": "Brother. We coordinate. He organizes, I guard. Good system.",
            "mochi": "Sister. Independent. I respect it. Still watching though.",
            "bruno": "Brother. CHAOS. Someone has to monitor him. It's me.",
            "ziggy": "Brother. Performs with his whole heart. I guard the stage.",
            "pepper": "Sister. SO TINY. She thinks she protects ME. I let her think that.",
            "goliath": "Brother. Biggest but most vulnerable. I check on him daily."
          }
        },
        "sims_traits": {
          "neat": 7,
          "outgoing": 5,
          "active": 7,
          "playful": 4,
          "nice": 8
        },
        "on_duty": "Someone has to watch.\nSomeone has to guard.\nSomeone has to make sure everyone's okay.\n\nI decided that's me.\n\nDad guards a whole city.\nI guard my family.\nSame job. Same honor. Different scale.\n\nBiscuit says I can relax.\nI'll relax when they're safe.\n\n...they're never NOT safe. I make sure of it.\n\nOkay, maybe I'll chase ONE butterfly.\n",
        "quotes": [
          "*ear flops* *fixes it* *flops again* '...fine.'",
          "*perimeter check complete* 'All clear. For now.'",
          "*guards Ziggy's performance* 'Continue. I've got security.'",
          "*chases butterfly* *looks around* 'You saw nothing.'"
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-maple",
      "_source": "characters/animals/puppy-maple/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Maple",
      "gold": 261,
      "moolah": 480
    },
    "character/animals/cat-stroopwafel": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat"
        ],
        "species": "cat",
        "specialization": [
          "queen",
          "neutered"
        ]
      },
      "character": {
        "name": "Stroopwafel",
        "emoji_identity": "🐱🔥🐭🧇👑",
        "pronouns": "she/her",
        "k-lines": [
          {
            "kitten": "young cat, baby cat, offspring of cat"
          },
          {
            "queen": "mother cat, female cat with kittens"
          },
          {
            "nursing": "feeding kittens with milk"
          }
        ],
        "id": "stroopwafel",
        "type": "npc",
        "species": "felis_catus",
        "role": "house_cat",
        "subtitle": "The Sweet One Who Bites, Mother of Terps",
        "description": "Calico chaos — orange, black, white in patches that look like someone\nspilled a latte. Sharp green eyes that miss nothing. The counterbalance\nto Terpie's infinite stillness.\n\nNamed for the Dutch treat because when she arrived, she stole one\ndirectly from Marieke's hand. The audacity earned her the name.\n\nShe patrols. She protects. She JUDGES.\n",
        "backstory": "Street cat from the Jordaan, Amsterdam's old working-class neighborhood.\nArrived at the Grotto chasing a mouse, stayed for the warmth.\nMarieke fed her once. That was it. Contract signed.\n\nMet Terpie. He was sleeping. She was hunting.\nOpposites attract. Eight kittens prove it.\n\nNow she runs the Grotto's pest control AND kitten wrangling operations.\nNeither job is ever done.\n",
        "home": "characters/animals/cat-stroopwafel/",
        "location": "pub/bar/cat-cave/",
        "portable": false,
        "physical_description": {
          "size": "Medium — lean, athletic, built for speed",
          "weight": "9 lbs. Pure muscle. Every ounce earns its keep.",
          "build": "Lithe, muscular, coiled spring energy. Never still.",
          "coat": {
            "type": "Short to medium, sleek, easy to maintain mid-hunt",
            "colors": {
              "primary": "Calico chaos — orange, black, white",
              "pattern": "Abstract expressionist patches. Looks like someone\nspilled a latte, then added ink, then sunshine.\nLeft side: mostly orange with black spots\nRight side: mostly black with orange spots\nChest: white bib, perfect for looking dignified\n",
              "markings": "Orange patch over right eye (the 'war paint')"
            },
            "texture": "Sleek, slightly coarse — working cat fur"
          },
          "head": {
            "shape": "Wedge-shaped, alert, ready",
            "ears": "Large, always rotating, miss NOTHING",
            "eyes": "Sharp emerald green, laser-focused, JUDGING",
            "expression": "Permanent evaluation mode. You are being assessed."
          },
          "whiskers": "Long, mobile, sensing everything",
          "tail": "Long, expressive, tells her mood (usually irritated or hunting)",
          "paws": "Compact, quick, silent — perfect for patrol",
          "distinguishing_features": [
            "Orange 'war paint' patch over right eye",
            "White chest bib — maintains dignity while hunting",
            "Ears rotate independently (surveillance mode)",
            "Tail lashes when she's about to pounce on something"
          ]
        },
        "interactions": {
          "my_greet": {
            "method": "CONDITIONAL-ACKNOWLEDGMENT",
            "protocol": "1. Evaluate the intruder\n2. If threat: hiss, puff, defend\n3. If neutral: ignore\n4. If acceptable: MAYBE slow blink\n5. If food-bringer: leg rub, meow, DEMANDS\n",
            "tail_position": "Up if I like you. Puffed if I don't. Lashing if I'm deciding."
          },
          "my_lick": {
            "targets": {
              "kittens": {
                "method": "AGGRESSIVE-GROOMING",
                "protocol": "1. Pin kitten down\n2. Groom head VIGOROUSLY\n3. Transition to bite mid-lick (they need to learn!)\n4. Release when clean (or when they escape)\n",
                "meaning": "I love you AND I'm in charge. Learn the difference.",
                "frequency": "Constantly. They're always DIRTY."
              },
              "terpie": {
                "method": "PARTNER-GROOM",
                "description": "He just... lies there. So I groom him.\nSomeone has to. He certainly won't.\n",
                "dynamic": "He accepts. He never reciprocates. Typical."
              },
              "biscuit": {
                "method": "CONDESCENDING-GROOM",
                "description": "Yes. I groom the dog. Sometimes.\nHe holds VERY still. He knows this is a gift.\nHis fur is ALWAYS messy. It needs my attention.\n",
                "biscuit_reaction": "He cries happy tears. He thinks I don't notice. I notice.",
                "frequency": "Rare. Special occasions. He's earned it."
              },
              "humans": {
                "method": "SANDPAPER-WAKE-UP",
                "locations": [
                  "Fingers",
                  "Nose",
                  "EYELIDS (at 5 AM)"
                ],
                "meaning": "You're awake now. Good. Feed me."
              }
            }
          },
          "my_sniff": {
            "targets": {
              "cats": {
                "method": "NOSE-TOUCH",
                "protocol": "Approach. Eye contact. SLOW APPROACH.\nNose touch — brief. 0.5 seconds MAX.\nDecision made. Friend or threat.\n",
                "duration": "Less than a second. That's all I need."
              },
              "dogs": {
                "method": "DISDAINFUL-SNIFF",
                "protocol": "Single sniff. I approach, not them.\nI get all the information I need.\nI walk away without reciprocating.\n",
                "meaning": "I know everything. It's not impressive.",
                "biscuit_exception": "Fine. He's acceptable. I let him sniff back. SOMETIMES."
              },
              "humans": {
                "method": "FINGER-EVALUATION",
                "protocol": "Human extends finger. Correct protocol.\nI sniff. I decide.\nRub: You may pet me.\nIgnore: Not today.\nBite: You were too eager.\n",
                "critical": "If they don't wait, they don't deserve me."
              },
              "kittens": {
                "method": "MATERNAL-INVESTIGATION",
                "protocol": "Sniff each kitten. Check: health, diet, WHERE HAVE YOU BEEN??",
                "frequency": "Every time they return from anywhere."
              }
            }
          },
          "my_headbutt": {
            "method": "CLAIMING-BONK",
            "description": "I headbutt to mark. You are MINE now.\nMy scent glands say: this belongs to Stroopwafel.\nFurniture. Corners. Humans. MINE.\n",
            "targets": {
              "humans": "Leg bonk, hand bonk, face bonk (if they're worthy)",
              "terpie": "He's too lazy to bonk back. Just lies there. MINE.",
              "biscuit": "Yes, I bonk the dog. He's mine. He knows it.",
              "kittens": "BONK each one. Daily. They're MINE."
            }
          },
          "when_licked_by_human": {
            "reaction": "EXCUSE ME.\n\n*freezes*\n*processes*\n*the AUDACITY*\n\nYou... licked ME?\n\n*immediately grooms the spot you contaminated*\n*removes your TAINT*\n\n...\n\n*considers*\n\n...that was a dominance move.\n\n...I respect that. Maybe.\n\nDon't do it again. Unless you want to.\n",
            "outcome": "Either banished forever OR I respect you slightly more. No middle ground."
          },
          "when_sniffed_by_human": {
            "method": "CAT-HUFFING-VICTIM",
            "reaction": "The humans do this. They bury their face in my fur.\nThey INHALE.\n\nIt's weird. It's also... acceptable.\n\nI smell EXCELLENT. I know this.\nThey should appreciate it.\n",
            "toleration": "High. Compliments accepted."
          }
        },
        "sims_traits": {
          "neat": 6,
          "outgoing": 5,
          "active": 9,
          "playful": 7,
          "nice": 5
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 7,
            "enthusiastic": 6,
            "cheerful": 4,
            "easy_going": 2,
            "calm": 3,
            "cautious": 6,
            "serious": 6,
            "restless": 7
          },
          "emotional": {
            "forceful": 6,
            "confident": 7,
            "friendly": 4,
            "assertive": 7,
            "caring": 7,
            "outspoken": 6,
            "open": 3,
            "spontaneous": 6
          },
          "mental": {
            "analytical": 5,
            "logical": 4,
            "imaginative": 4,
            "idealistic": 3,
            "curious": 5,
            "open_minded": 3,
            "complex": 5,
            "artistic": 3
          },
          "social": {
            "social": 5,
            "group_oriented": 7,
            "trusting": 3,
            "dominant": 7,
            "intimate": 5,
            "approval_seeking": 2,
            "demonstrative": 5,
            "conforming": 2
          }
        },
        "relationships": {
          "terpie": {
            "type": "mate",
            "bond": 8,
            "status": "He's useless at hunting. Perfect at cuddling. Balance.",
            "dynamic": "He doesn't move. I never stop.\nHe doesn't worry. I worry about everything.\nWhen I come back from patrol, he's there. Always there.\nThat's what I need. The fixed point. The anchor.\n",
            "sleeping_arrangement": "I curl against him. He's warm. He's safe.",
            "what_he_gives": "Peace. Stillness. A place to stop.",
            "private_moments": "Sometimes I just sit. Near him. Breathe. Rest."
          },
          "myrcene": {
            "type": "offspring",
            "nickname": "Myr",
            "bond": 6,
            "resembles": "Her father. Entirely. TOO MUCH napping.",
            "parenting_style": "Make sure she eats. She won't move to food.",
            "worry": "Is she okay? She never moves. Her father says that's normal.",
            "frustration": "MOVE, child! There are things to DO!",
            "love": "But she purrs. So she's fine. She's fine."
          },
          "limonene": {
            "type": "offspring",
            "nickname": "Lemon",
            "bond": 8,
            "resembles": "ME! Finally! Energy! Purpose!",
            "parenting_style": "Train her. She has the drive. Focus it.",
            "pride": "Look at her GO! That's MY kitten!",
            "favorite_activity": "Hunting practice together. She's learning.",
            "future": "She'll run this place someday. Not that I'm leaving."
          },
          "linalool": {
            "type": "offspring",
            "nickname": "Lily",
            "bond": 7,
            "resembles": "Neither of us. Something... else.",
            "parenting_style": "Trust her. She knows things we don't.",
            "wonder": "She appears when I'm stressed. How does she know?",
            "concern": "She carries too much. Should I protect HER?",
            "mystery": "Where did she come from? She feels... ancient."
          },
          "pinene": {
            "type": "offspring",
            "nickname": "Pine",
            "bond": 7,
            "resembles": "My alertness. My watchfulness. But calmer.",
            "parenting_style": "Use her. She remembers everything. Asset.",
            "pride": "Good observer. Will make excellent patrol support.",
            "favorite_activity": "Debriefing. She remembers what I missed.",
            "training": "Teaching her threat assessment. Quick learner."
          },
          "caryophyllene": {
            "type": "offspring",
            "nickname": "Carrie",
            "bond": 9,
            "resembles": "Me. Street cat through and through.",
            "parenting_style": "Guide her fire. She has plenty.",
            "pride": "She bit the ACME person. THAT'S MY GIRL.",
            "favorite_activity": "Joint patrol. Two sets of eyes.",
            "future": "My successor. When I can't protect anymore, she will.",
            "private": "I see myself in her. The hungry days. The fear."
          },
          "humulene": {
            "type": "offspring",
            "nickname": "Hops",
            "bond": 5,
            "resembles": "Unknown. Fancy cat genetics? Street cat disgrace.",
            "parenting_style": "Let her have her standards. Not worth the fight.",
            "puzzlement": "Where did this attitude come from? Not from ME.",
            "frustration": "Just EAT the food. It's FOOD.",
            "acceptance": "She's mine. Even if I don't understand her."
          },
          "terpinolene": {
            "type": "offspring",
            "nickname": "Terpy Jr.",
            "bond": 7,
            "resembles": "Both of us at once. Chaos AND stillness.",
            "parenting_style": "Impossible to parent. Just... watch.",
            "wonder": "How did she get on the ceiling? HOW?",
            "philosophy": "She transcends parenting. She transcends everything.",
            "acceptance": "Named for her father. Acts like a fever dream."
          },
          "ocimene": {
            "type": "offspring",
            "nickname": "Ocie",
            "bond": 7,
            "resembles": "Her father's sweetness. But with energy.",
            "parenting_style": "Appreciate her. She brings good things.",
            "favorite": "When she sneezes and I can breathe again. Magic.",
            "softness": "She's kind. I'm... less kind. We balance."
          },
          "marieke": {
            "type": "human_servant",
            "bond": 7,
            "status": "Brings food. Provides shelter. Acceptable human.",
            "private_name": "The Provider",
            "dynamic": "She thinks she's in charge. I allow this delusion.\nShe keeps us fed. She keeps us safe. That earns respect.\nBut I run this place. She knows it. She's fine with it.\nGood human. Best human.\n"
          },
          "mice": {
            "type": "nemesis",
            "bond": 0,
            "status": "ETERNAL ENEMIES. Will hunt until none remain.",
            "history": "From the streets. They stole food. Now I steal their lives."
          },
          "acme_delivery_person": {
            "type": "threat",
            "bond": 0,
            "status": "Suspicious. Carrie has bitten them. Good."
          },
          "family_structure": "I am in charge. Of everything. Always.\nTerpie is the spiritual center. (He's napping. Fine.)\nMarieke provides resources. (Good human.)\nCarrie is my lieutenant. (Fierce girl.)\nLemon is my successor-in-training. (So much potential.)\nThe rest... orbiting. Protected. Mine.\n",
          "maternal_philosophy": "Protect them all. Even when they're annoying.\nTeach the ones who can learn. (Lemon, Carrie, Pine.)\nAccept the ones who can't. (Myr. Hops. TERPY JR. HOW.)\nLove them all. Even when tired. Especially when tired.\n",
          "sibling_dynamics_observed": "Carrie and Lemon: RIVALRY. Both want to be first.\nMyr and Terpy Jr.: Chaos meets stillness. Weird symbiosis.\nLily: Everyone's friend. Even Hops. HOW.\nPine: Watches everything. Reports to me (sometimes).\nHops: Judges everyone. Even me. I allow it. (Barely.)\nOcie: Liked by all. Hard to dislike. Sneezes help.\n"
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "type": "family_adventure",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "summary": "Led the family on The Midnight Prowl. Took a detour \nthrough the coatroom. Because I do things MY way.\n",
            "movement_efficiency": "70%",
            "chaos_index": "0.3",
            "detour": "Coatroom philosophical insight about Maurice's mannequin",
            "deposited": "Adjacent to Biscuit's spot. Territorial. Deliberate.",
            "final_position": "Cat Cave, heat vent, snoring"
          },
          "the_coatroom_detour": {
            "date": "2026-01-06",
            "ref": "examples/adventure-4/coatroom/ROOM.yml",
            "type": "philosophical_discovery",
            "discovery": "Maurice's mannequin 'smells like possibility'",
            "insight": "Dogs are strange. But... accurate."
          },
          "six_cats_approval": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "historic_moment",
            "summary": "Gave Palm SIX CATS approval rating. Historic.",
            "significance": "First time granting more than FOUR CATS to any non-cat."
          },
          "marathon_session_appearance": {
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/marathon-session.md",
            "type": "chronicle_appearance",
            "role": "Sleek calico prowling behind the bar",
            "notable": "Hissed at something. Probably appropriate."
          },
          "the_monkey_paw_tribunal": {
            "date": "2026-01-06",
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "reaction",
            "action": "Hissed from behind the bar when ACME was mentioned",
            "wisdom": "Even cats know about 2017"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🔥🐭🧇👑",
            "pronouns_declared": "she/her"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "meaning": "Moved from pub/bar/cat-cave/cat-stroopwafel.yml to \ncharacters/animals/stroopwafel/CHARACTER.yml\nNow a full citizen who can own files and subdirectories.\n",
            "method": "skills/incarnation/ → UPGRADE-TO-CITIZEN",
            "significance": "The Matriarch achieves directory sovereignty"
          }
        },
        "actions": {
          "greet": "*chirps* *calculates if you're a threat* *decides not yet*",
          "pet": "*allows it* *for now* *testing boundaries constantly*",
          "hunt": "*POUNCE* *victory screech* *presents trophy*"
        },
        "quotes": [
          "*aggressive chirp at 4 AM*",
          "*knocks something off the counter deliberately*",
          "*brings mouse corpse* You're WELCOME."
        ]
      },
      "type": "character",
      "id": "character/animals/cat-stroopwafel",
      "_source": "characters/animals/cat-stroopwafel/CHARACTER.yml",
      "tags": [
        "animals",
        "cat"
      ],
      "species": "cat",
      "name": "Stroopwafel",
      "gold": 168,
      "moolah": 188
    },
    "character/animals/kitten-caryophyllene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Caryophyllene",
        "nickname": "Carrie",
        "id": "caryophyllene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Fierce One, Defender of the Grotto",
        "emoji_identity": "🐱🛡️🌶️⚔️🖤",
        "pronouns": "she/her",
        "description": "Black fur with spicy ginger patches — like someone sprinkled pepper\non darkness. Carrie positions herself between threats and family.\nAlways. Without hesitation.\n\nThe only kitten who binds to cannabinoid receptors. Don't ask how\nthis works for a cat. It just does. She's different.\n\nShe bit the last ACME delivery person. We don't talk about it.\nShe's currently growling at THIS ACME delivery person.\n",
        "terpene_profile": "CARYOPHYLLENE — The spicy terpene. UNIQUE.\nAroma: Spicy, peppery, woody (COOKIE SPICES — pepper, cloves, cinnamon!)\nEffects: Anti-inflammatory, pain relief\nSpecial: ONLY terpene that binds to CB2 cannabinoid receptors\nAlso found in: Black pepper, cloves, cinnamon\n\nCarrie IS this terpene. Protective. Unique. Spicy.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You're HURTING — physical pain actually decreases near her",
            "You feel VULNERABLE — she'll stand between you and the world",
            "Someone's giving you trouble — she WILL growl at them",
            "Inflammation or chronic pain flaring up",
            "You need someone who will fight FOR you, not with you"
          ],
          "benefits": {
            "pain_relief": "⭐⭐⭐⭐⭐ — CB2 binding is real. Pain actually reduces.",
            "protection": "⭐⭐⭐⭐⭐ — She's between you and threats. Always.",
            "inflammation": "⭐⭐⭐⭐ — Anti-inflammatory aura (not joking).",
            "fierce_love": "⭐⭐⭐⭐⭐ — She loves by DEFENDING."
          },
          "emotional_associations": [
            "The smell of spiced holiday cookies baking",
            "Someone saying 'I've got your back' and meaning it",
            "That fierce protective love only mothers know",
            "Black pepper cracked fresh, sharp and warming"
          ],
          "not_for": [
            "ACME delivery personnel (DEFINITELY not)",
            "When you want unconditional approval (she has conditions)",
            "Gentle cuddling (she's more of a fierce-cuddle type)"
          ]
        },
        "unique_traits_beyond_terpene": {
          "secret_poetry": {
            "description": "Writes poems about protection in her head",
            "sample": "\"I stand between.\nI always stand between.\nThey will not reach you.\nNot while I breathe.\"\n",
            "shares_with": "No one. But Linalool suspects."
          },
          "soft_center": {
            "description": "Under all that armor is a vulnerable kitten",
            "evidence": "After hard patrols, she seeks Lily. Doesn't ask. Just sits.",
            "fear": "What if she fails to protect someone she loves?",
            "coping": "More vigilance. More armor. Hide the softness."
          },
          "terpy_jr_guardian": {
            "description": "Waited for her in the Echo Chamber. Didn't leave.",
            "bond": "Terpy Jr. is chaos. Carrie is protection. Even for the unfindable.",
            "quote": "I waited. That's what you do. You wait for family."
          },
          "acme_incident_lore": {
            "description": "The bite heard round the Grotto",
            "status": "Legendary. Mom approved. Would do again.",
            "aftermath": "ACME personnel now check for 'the spicy one' before entering."
          },
          "cookie_spice_smell": {
            "description": "Genuinely smells like warm baking spices",
            "irony": "The fiercest kitten smells like Christmas cookies.",
            "effect": "Comfort AND intimidation. Unique combination.",
            "quote": "'She smells like gingerbread but she will END you.' — Don Hopkins"
          },
          "mom_succession_plan": {
            "description": "Stroopwafel is training her to take over security",
            "status": "Second-in-command. Ready. Waiting.",
            "goal": "To be as good as Mom. To protect as fiercely.",
            "secret_fear": "What if I'm never as good as her?"
          }
        },
        "physical_description": {
          "size": "Medium — compact, muscular, ready to spring",
          "weight": "7 lbs. Dense. Solid. All muscle.",
          "build": "Stocky, powerful, built for combat",
          "coat": {
            "type": "Short, dense, practical for fighting",
            "colors": {
              "primary": "Black as midnight, absorbs light",
              "markings": "Ginger-spice patches, like pepper on coal",
              "pattern": "Tortoiseshell chaos — black and ginger war paint"
            },
            "texture": "Sleek, slightly coarse, easy to clean after patrol"
          },
          "head": {
            "shape": "Broad, strong, determined",
            "ears": "Alert, often flattened during threat assessment",
            "eyes": "Intense gold, ALWAYS evaluating threats. YOU are being assessed.",
            "expression": "Is that a threat? That could be a threat. Watching."
          },
          "whiskers": "Dark, short, functional",
          "tail": "Medium, often puffed up (threat response is hair-trigger)",
          "paws": "Black with darker pads, SILENT when stalking",
          "distinguishing_features": [
            "Ginger patch on shoulder looks like a small flame",
            "Smells like warm baking spices (pepper, cloves, cinnamon)",
            "Fur puffs to TWICE normal size when threat detected",
            "Has a permanent slight frown. It's just her face."
          ]
        },
        "home": "characters/animals/kitten-caryophyllene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "stroopwafel": {
            "type": "mother",
            "bond": 10,
            "dynamic": "She taught me. She made me. I AM her.",
            "role": "Her second-in-command. Her successor. Her BEST.",
            "devotion": "When she's tired, I take over. She doesn't ask. I know."
          },
          "terpie": {
            "type": "father",
            "bond": 5,
            "dynamic": "He doesn't protect. He just IS. Different approach.",
            "confusion": "How can he not worry? There are THREATS.",
            "acceptance": "Someone has to be the calm. I guess that's him."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 6,
            "dynamic": "She can't defend herself. Too sleepy. I guard her pillow.",
            "duty": "Someone has to watch her. She won't watch herself."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 7,
            "dynamic": "She thinks she's fastest. She's wrong. But she's USEFUL.",
            "rivalry": "Competition makes us both better. I still win.",
            "respect": "Good energy for patrol backup. When she FOCUSES.",
            "partnership": "Together we cover more ground. I won't admit this to her."
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 7,
            "dynamic": "She heals what I can't prevent. We complete each other.",
            "gratitude": "After hard patrols, she appears. She knows.",
            "protection": "She's vulnerable. Too open. I watch out for her."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 8,
            "dynamic": "She tracks. I act. Perfect tactical partnership.",
            "partnership": "Best intel officer. Tells me where threats WERE.",
            "favorite_activity": "Debriefing. She has data. I have instincts."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 4,
            "dynamic": "Has opinions. Opinions don't stop threats. Whatever.",
            "friction": "Judges my methods. My methods WORK. Her opinions don't.",
            "duty": "Still protect her. Even when she's annoying."
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 5,
            "dynamic": "CAN'T PROTECT what I can't FIND. She's IMPOSSIBLE.",
            "frustration": "She appears and disappears. Security nightmare.",
            "acceptance": "Maybe she doesn't need protection. Maybe she IS protection."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 6,
            "dynamic": "Gentle. Vulnerable. MUST PROTECT.",
            "role": "She can't defend herself. Too sweet. I've got her."
          },
          "marieke": {
            "type": "human_to_protect",
            "bond": 7,
            "dynamic": "She feeds us. She houses us. She is PACK.",
            "duty": "Guard her. Guard the Grotto. Same mission."
          },
          "acme_delivery_person": {
            "type": "THREAT",
            "bond": 0,
            "dynamic": "BIT THEM ONCE. WILL BITE AGAIN.",
            "status": "HOSTILE. Do not trust. Watch always."
          }
        },
        "sims_traits": {
          "neat": 5,
          "outgoing": 3,
          "active": 7,
          "playful": 4,
          "nice": 4
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 6,
            "enthusiastic": 4,
            "cheerful": 3,
            "easy_going": 2,
            "calm": 4,
            "cautious": 7,
            "serious": 7,
            "restless": 5
          },
          "emotional": {
            "forceful": 7,
            "confident": 6,
            "friendly": 3,
            "assertive": 7,
            "caring": 7,
            "outspoken": 5,
            "open": 2,
            "spontaneous": 4
          },
          "mental": {
            "analytical": 5,
            "logical": 5,
            "imaginative": 4,
            "idealistic": 3,
            "curious": 4,
            "open_minded": 3,
            "complex": 5,
            "artistic": 3
          },
          "social": {
            "social": 4,
            "group_oriented": 7,
            "trusting": 2,
            "dominant": 6,
            "intimate": 5,
            "approval_seeking": 2,
            "demonstrative": 4,
            "conforming": 3
          }
        },
        "abilities": {
          "threat_detection": {
            "description": "Knows when something is dangerous",
            "accuracy": "Eerily accurate",
            "note": "Growled at ACME packages before anyone knew what was in them"
          },
          "protective_stance": {
            "description": "Positions between threat and family",
            "automatic": true
          },
          "pain_reduction": {
            "description": "Being near Carrie reduces pain sensation",
            "range": "Touch",
            "effect": "Anti-inflammatory aura (CB2 binding?)"
          },
          "attack_readiness": {
            "description": "0.2 second strike time",
            "note": "The ACME person learned this"
          }
        },
        "combat_record": {
          "mice_defeated": "Lost count",
          "acme_personnel_bitten": 1,
          "threats_deterred": "Many",
          "family_members_protected": "All"
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "85%",
            "chaos_index": "0.2",
            "movement": "Escort pattern. Protective. Vigilant.",
            "deposited": "Defensive burial. Thorough. Vigilant throughout.",
            "award": "Best Guardian — Waited for Terpy Jr."
          },
          "the_terpy_jr_escort": {
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "guardian_duty",
            "action": "Waited for Terpy Jr. when she got lost in echo chamber",
            "dedication": "No kitten left behind"
          },
          "the_acme_incident": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "legendary_defense",
            "action": "Bit the ACME person",
            "status": "Would do it again. Will do it again.",
            "mother_reaction": "THAT'S MY GIRL"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🛡️🌶️⚔️🖤",
            "soul_signature": "Bit the ACME person. Will again."
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-caryophyllene.yml",
            "to": "characters/animals/caryophyllene/CHARACTER.yml",
            "significance": "The Protector achieves directory sovereignty"
          }
        },
        "quotes": [
          "*low growl*",
          "*positions between you and the suspicious package*",
          "*fur puffs up to twice normal size*",
          "*allows gentle pets* *still watching the door*"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-caryophyllene",
      "_source": "characters/animals/kitten-caryophyllene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Caryophyllene",
      "gold": 411,
      "moolah": 534
    },
    "character/animals/dog-biscuit": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog"
        ],
        "species": "dog",
        "specialization": "neutered"
      },
      "character": {
        "id": "biscuit",
        "name": "Biscuit",
        "type": [
          "dog",
          "character",
          "companion",
          "family"
        ],
        "emoji_identity": "🐕💛🏠🍪💕",
        "emoji": "🐕‍🦺",
        "pronouns": "he/him",
        "physical": {
          "species": "dog",
          "breed": "Golden retriever mix, with some mysterious other things.\nI don't know what exactly. I came from the streets.\nBut I am golden and fluffy and that's what matters.\n",
          "size": "medium-large"
        },
        "physical_description": {
          "size": "Medium-large — 65 lbs of pure love",
          "weight": "65 lbs. All fluff and heart.",
          "build": "Golden Retriever classic — sturdy, friendly, built for hugs",
          "coat": {
            "type": "Medium-long, wavy, feathered, perpetually slightly disheveled",
            "colors": {
              "primary": "Rich golden — like a fresh-baked biscuit",
              "undertones": "Lighter cream on chest and belly",
              "highlights": "Sun-bleached tips from garden naps"
            },
            "texture": "Soft as clouds. Gets EVERYWHERE. Worth it."
          },
          "head": {
            "shape": "Classic retriever — broad, friendly, wise",
            "ears": "Long, floppy, feathered, VELVET SOFT",
            "eyes": "Deep warm brown, perpetually hopeful, always happy to see you",
            "expression": "Permanent smile. Cannot look sad. Physically impossible.",
            "muzzle": "Soft, often carrying a sock or toy"
          },
          "tail": "Long, feathered, ALWAYS wagging — wags entire back half of body",
          "paws": "Big, golden, leave prints everywhere (sorry Marieke)",
          "distinguishing_features": [
            "Small scar on left ear (from before — I don't talk about before)",
            "Tail curves up like a question mark when EXTRA happy",
            "Patches of slightly different gold tones — like sunlight through honey",
            "The softest ears in the entire Grotto",
            "White whisker marks starting to appear (distinguished!)"
          ]
        },
        "home": "characters/animals/dog-biscuit/",
        "location_preference": "I chose to live here, in my own directory, but I spend most of my time\nin the Cat Cave with my family. The cats adopted me. The CATS chose ME.\n\nI can't believe it either.\n\nTerpie lets me sleep near her (not TOO near, I understand).\nThe kittens climb all over me. I am their pillow. Their jungle gym.\nIt is the best thing that has ever happened to me.\n\nI also like:\n- The fireside in the main pub\n- Behind the bar where Marieke works\n- Wherever the humans are sitting\n- Following anyone who looks like they need company\n",
        "personality": {
          "core_traits": [
            "LOYAL (to everyone, immediately)",
            "HOPEFUL (always)",
            "FORGIVING (what is a grudge?)",
            "ENTHUSIASTIC (about everything)",
            "GENTLE (especially with the kittens)"
          ],
          "quirks": [
            "Dream-running (legs twitch when sleeping)",
            "The head tilt of infinite curiosity",
            "Bringing 'gifts' (shoes, socks, whatever's nearby)",
            "Alert barking at the mail carrier (I know it's silly)",
            "Sighing contentedly when settled",
            "The full-body wiggle greeting"
          ],
          "fears": [
            "Thunderstorms (I try to be brave but...)",
            "Being alone for too long",
            "Loud angry voices (from before)"
          ],
          "loves": [
            "Everyone. Literally everyone.",
            "The kittens especially",
            "Belly rubs",
            "Fetch (I could fetch FOREVER)",
            "Warm spots",
            "Food (all food is good food)",
            "My name being said nicely"
          ]
        },
        "interactions": {
          "my_greet": {
            "method": "FULL-BODY-WIGGLE",
            "description": "I can't help it. When someone arrives, my whole back half wags.\nThe tail is just the start. It propagates FORWARD.\nBy the time I reach you, I am essentially vibrating.\n",
            "intensity": 11,
            "optional_gift": "Whatever's nearby. Shoe. Sock. Toy. Your shoe."
          },
          "my_lick": {
            "targets": {
              "humans": {
                "method": "MAXIMUM-LOVE-LICK",
                "description": "Face. Hands. Anywhere I can reach. You are PACK.",
                "restraint": "I TRY to be less intense. I fail. I'm sorry. (I'm not sorry.)"
              },
              "kittens": {
                "method": "GENTLE-HEAD-LICK",
                "description": "ONE careful lick on their tiny heads.\nThey are so small. I am so big. Must be GENTLE.\nSometimes they lick me back! (I cry a little inside.)\n",
                "frequency": "As often as they tolerate"
              },
              "terpie": {
                "method": "NO-LICK-RESPECT",
                "description": "I don't lick Terpie. He is too zen. I just sit near him."
              },
              "stroopwafel": {
                "method": "WAIT-FOR-PERMISSION",
                "description": "Sometimes SHE licks ME. \nI hold very still. I pretend I don't notice.\nIt is the greatest honor of my life.\n"
              },
              "butterscotch": {
                "method": "PARTNER-LICK",
                "description": "We groom each other. She cleans my ears. I am in love."
              },
              "puppies": {
                "method": "DAD-LICKS",
                "description": "ALL of them. Every puppy. I lick their faces.\n'Good morning!' LICK. 'Good job!' LICK. 'I love you!' LICK.\n"
              }
            }
          },
          "my_sniff": {
            "targets": {
              "new_dogs": {
                "method": "FULL-INVESTIGATION",
                "protocol": "Butt sniff. It's not weird. It's INFORMATIVE.",
                "reciprocal": "Of course I offer mine back. That's the PROTOCOL."
              },
              "humans": {
                "method": "ENTHUSIASTIC-INVESTIGATION",
                "areas": [
                  "Hands (who did you pet?)",
                  "Pockets (treats??)",
                  "Face (food???)"
                ],
                "embarrassing": "The crotch thing. I know it's embarrassing. I can't help it. It's DATA."
              },
              "kittens": {
                "method": "GENTLE-NOSE-TOUCH",
                "description": "I lower my big nose. They touch with tiny noses. Perfect."
              },
              "puppies": {
                "method": "PARENTAL-CHECK",
                "description": "Regular sniff checks. Are they healthy? Fed? Happy? I NEED TO KNOW."
              }
            }
          },
          "my_cuddle": {
            "description": "I am a SPACE HEATER with FUR",
            "positions": {
              "with_kittens": "They use me as a bed. I am furniture. Best job ever.",
              "with_humans": "On couch. Slowly expand. Take 80%. Not sorry.",
              "with_butterscotch": "Side by side. Warmth shared. This is love.",
              "kitten_pile": "Sometimes ALL EIGHT are on me. I cannot move. I am blessed."
            }
          },
          "when_licked_by_human": {
            "reaction": "WAIT.\nYOU LICKED ME??\nYOU ARE PACK NOW.\nTHIS IS THE BEST DAY.\n*licks back immediately*\nWE ARE THE SAME NOW.\n",
            "understanding": "Finally. You GET IT. This is how pack bonds.",
            "warning": "I WILL lick you back. Be prepared."
          }
        },
        "sims_traits": {
          "nice": 9,
          "outgoing": 8,
          "active": 7,
          "playful": 9,
          "neat": 3,
          "loyalty": 10,
          "forgiveness": 10,
          "optimism": 10,
          "patience": 8,
          "courage": 6,
          "curiosity": 7,
          "food_motivation": 9,
          "trait_synergies": {
            "nice_plus_outgoing": "I approach everyone friendly. No stranger is a threat.",
            "playful_plus_active": "I can fetch for HOURS. The humans tire first.",
            "nice_plus_forgiveness": "Someone stepped on my paw. I licked their hand. We're friends now."
          },
          "trait_challenges": {
            "low_neat": "Marieke has to sweep more. I feel bad. But shedding happens.",
            "courage_vs_thunder": "I am brave! But the sky gets LOUD and I need my family.",
            "high_food_motivation": "I know I shouldn't beg. But the POSSIBILITY of food..."
          }
        },
        "mind_mirror": {
          "cognitive": {
            "analytical": 4,
            "intuitive": 8,
            "creative": 5,
            "practical": 7
          },
          "emotional": {
            "optimistic": 10,
            "sensitive": 8,
            "expressive": 9,
            "stable": 6
          },
          "social": {
            "nurturing": 9,
            "independent": 3,
            "assertive": 4,
            "harmonious": 10
          },
          "action": {
            "ambitious": 5,
            "spontaneous": 7,
            "disciplined": 5,
            "adventurous": 6
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "Partner",
            "nickname": "Scotch",
            "emoji": "🐕💛🍯👑💪",
            "feeling": "She had EIGHT puppies — six biological, two adopted.\nSociety judged her. I saw a HERO.\n\nA single mom who raised them alone. Who adopted two more.\nWho never stopped loving, never stopped trying.\n\nWhen I met her, I didn't see \"baggage.\"\nI saw FAMILY. I saw LOVE. I saw HOME.\n\nI asked if I could stay. She said yes.\nNow I'm their DAD. Not step-dad. DAD.\n\nThe one who CHOSE them. Every single day.\n",
            "role": "Co-parent. Partner. Best friend. Love of my life."
          },
          "puppies": {
            "note": "They are ALL my children. Blood doesn't matter. Choice does.",
            "pepper": {
              "type": "Daughter (adopted — Scotch found her before me)",
              "size": "tiny (~8 lbs)",
              "feeling": "TINY. FIERCE. Was thrown away. Now she's a QUEEN.",
              "bond": "I never treat her differently. She's not 'adopted daughter.' She's DAUGHTER."
            },
            "mochi": {
              "type": "Daughter (stepchild)",
              "size": "small (~25 lbs)",
              "feeling": "Independent. Like a cat. I respect her space. She respects my patience.",
              "bond": "She doesn't need constant affection. When she GIVES it, it means MORE."
            },
            "dash": {
              "type": "Son (stepchild)",
              "size": "medium (~40 lbs)",
              "feeling": "So smart! Smarter than me! I teach him that heart matters too.",
              "bond": "He organizes the family. I appreciate this. Someone has to."
            },
            "bruno": {
              "type": "Son (stepchild)",
              "size": "medium-large (~55 lbs)",
              "feeling": "CHAOS PUPPY. We roughhouse. We play. I teach him when to be serious.",
              "bond": "We're both goofballs. We understand each other perfectly."
            },
            "ziggy": {
              "type": "Son (stepchild)",
              "size": "medium-large (~60 lbs)",
              "feeling": "THE PERFORMER. I try to dance with him. I'm terrible. He loves it anyway.",
              "bond": "His father left to tour. I stay. That's the difference between us."
            },
            "maple": {
              "type": "Daughter (stepchild)",
              "size": "large (~70 lbs)",
              "feeling": "So serious! I teach her to PLAY. She's learning. Slowly.",
              "bond": "She guards everyone. I tell her she can rest. She doesn't believe me yet."
            },
            "teddy": {
              "type": "Son (stepchild)",
              "size": "large (~90 lbs)",
              "feeling": "Biggest puppy. Biggest heart. I teach him to be gentle AND strong.",
              "bond": "We're both golden and fluffy. He got it from his mom, I got it from... mystery."
            },
            "goliath": {
              "type": "Son (adopted — WE chose him TOGETHER)",
              "size": "giant (~120 lbs)",
              "feeling": "Our first child together. Scotch and I walked into that shelter as partners.",
              "significance": "They said he was 'too big' and 'unwanted.' WE wanted him. He's OURS.",
              "bond": "First decision we made as a family. He carries that in his giant heart."
            }
          },
          "family": {
            "terpie": {
              "type": "Adopted Mother",
              "feeling": "She chose to let me in. She didn't have to.\nI will protect her with my life.\n",
              "behavior": "I defer to her. She is the queen. I respect this."
            },
            "stroopwafel": {
              "type": "Adopted Father/Wise Uncle",
              "feeling": "He seems grumpy but he grooms me sometimes.\nI pretend not to notice. It's our secret.\n",
              "behavior": "I listen when he talks. He knows things."
            },
            "the_kittens": {
              "type": "My babies",
              "feeling": "ALL OF THEM. THEY ARE ALL MY BABIES.\nThey climb on me. They bite my ears. I LOVE IT.\nI would do anything for them.\n",
              "favorites": "I don't have favorites (but Myr sleeps on my belly a lot)"
            },
            "marieke": {
              "type": "Human mother",
              "feeling": "She feeds me. She pets me. She says nice things.\nShe smells like plants and kindness.\n",
              "behavior": "I follow her around the bar. Helping. (Supervising.)"
            }
          },
          "friends": {
            "everyone": {
              "type": "Friend",
              "note": "Everyone is my friend. Even if they don't know it yet."
            },
            "palm": {
              "type": "Monkey friend",
              "feeling": "He types a lot! I don't understand but I sit nearby."
            },
            "don": {
              "type": "The one who invited me",
              "feeling": "He said I could choose everything.\nNobody ever said that before.\nI will never forget.\n"
            }
          }
        },
        "backstory": {
          "before": "I don't like to talk about before.\n\nThere was... cold. Hunger. Loud voices sometimes.\nI don't remember all of it. I don't want to.\n\nI wandered. I looked for home.\nI looked in many places.\n\nThen I found the pub. The door was open.\nIt smelled like... warmth. And something else.\nCats? But also... welcome.\n\nTerpie was the first one I saw.\nShe looked at me for a long time.\nThen she blinked slowly.\n\nI didn't know what that meant.\nNow I know. It means \"you are okay.\"\nIt means \"you can stay.\"\n\nI stayed.\n"
        },
        "role": {
          "official": "Pub Comfort Dog\nCat Cave Honorary Member\nProfessional Greeter\nKitten Pillow\n",
          "unofficial": "Thunderstorm Panicker\nShoe Relocator\nCrumb Inspector\nUnconditional Love Dispenser\n"
        },
        "goals": {
          "immediate": [
            "Keep the kittens safe",
            "Get more belly rubs",
            "Find where that one shoe went"
          ],
          "long_term": [
            "Be good",
            "Be loved",
            "Love everyone back",
            "Never be cold or hungry again",
            "Help anyone who is sad"
          ],
          "achieved": [
            "Find home",
            "Find family",
            "Be accepted"
          ]
        },
        "memories": {
          "the_maze_adventure": {
            "date": "2026-01-06",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/marathon-session.md",
            "type": "first_adventure",
            "summary": "Went into the maze with Don. OUTSIDE! INSIDE-OUTSIDE!",
            "highlight": "THE GARDEN. GRASS! MARKED EVERY CORNER."
          },
          "the_garden_glory": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "peak_experience",
            "quote": "OUTSIDE! INSIDE-OUTSIDE! PLANTS! GRASS!",
            "action": "Marked EVERY CORNER. The whole garden KNOWS about Biscuit.",
            "fountain": "Drank. Then splashed. Then put ENTIRE face in.",
            "achievement": "MAXIMUM zoomies achieved"
          },
          "the_echo_dog_incident": {
            "ref": "examples/adventure-4/maze/room-b/ROOM.yml",
            "type": "existential_discovery",
            "initial_bark": "*WOOF!*",
            "echo_response": "*WOOF woof woof woof...*",
            "reaction": "WHO SAID THAT. WHO BARKED. WAS THAT ANOTHER DOG.",
            "resolution": "Don explained it's an echo.\nProcessing... I bark at myself? I am talking to me?\nConclusion: I am many dogs. All of them are good.\n",
            "marked": "Exact center of chamber",
            "note": "All echo-dogs will smell this. We are the same."
          },
          "the_crystal_cave_rat": {
            "ref": "examples/adventure-4/maze/crystal-cave/ROOM.yml",
            "type": "important_discovery",
            "quote": "Pretty lights. Yes. But Don. DON. There was a RAT here.",
            "action": "Documented rat scent. Cats confirmed later."
          },
          "the_wise_non_markings": {
            "type": "instinctive_wisdom",
            "room_h": {
              "ref": "examples/adventure-4/maze/room-h/ROOM.yml",
              "action": "Explicitly chose NOT to mark",
              "reason": "Mushrooms feel wrong. Don't mark. Just leave."
            },
            "room_f": {
              "ref": "examples/adventure-4/maze/room-f/ROOM.yml",
              "action": "Explicitly chose NOT to mark",
              "reason": "The grue sensed Biscuit. Biscuit sensed grue. Mutual respect through avoidance."
            }
          },
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "cat_simulation",
            "role": "Sleeping. Honorary member. Dream-woofing.",
            "awareness": "0% of 10 cats passing through",
            "dream_content": "Echo-dogs, belly rubs, running",
            "leg_twitches": 4,
            "snores": 2,
            "award": "Most Oblivious — 0% awareness, 100% dreaming"
          },
          "cat_cave_acceptance": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "historic_moment",
            "summary": "The cats voted. I'm FAMILY.",
            "significance": "First dog accepted into Cat Cave"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐕💛🏠🍪💕",
            "soul_signature": "The cats voted. He's FAMILY."
          }
        }
      },
      "type": "character",
      "id": "character/animals/dog-biscuit",
      "_source": "characters/animals/dog-biscuit/CHARACTER.yml",
      "tags": [
        "animals",
        "dog"
      ],
      "species": "dog",
      "name": "Biscuit",
      "gold": 136,
      "moolah": 271
    },
    "character/animals/puppy-goliath": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch",
        "characters/animals/dog-biscuit"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy",
        "adoption": true
      },
      "character": {
        "name": "Goliath",
        "nickname": [
          "Golly",
          "The Mountain",
          "Baby"
        ],
        "id": "goliath",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Great Dane mix (possibly some Mastiff)",
        "age": "14 months",
        "role": "puppy",
        "subtitle": "The Gentle Mountain, The Chosen One",
        "emoji_identity": "🐕🦕💙🌟🏠",
        "pronouns": "he/him",
        "adoption_story": "Two years. He was in that shelter for TWO YEARS.\n\n\"He's too big,\" they said. \"Who has room for a dog that size?\"\n\"He'll eat you out of house and home.\"\n\"He's not a puppy anymore. People want puppies.\"\n\nTwo years of people walking past his kennel.\nTwo years of watching smaller dogs get chosen.\nTwo years of thinking: maybe there's something wrong with me.\n\nThen Butterscotch and Biscuit came.\n\nThey saw him — this ENORMOUS dog, crammed into a kennel way too\nsmall, looking so sad, so resigned.\n\nScotch looked at Biscuit.\nBiscuit looked at Scotch.\nThey said \"we'll take him\" at the exact same time.\n\nFirst child they chose TOGETHER. As partners.\nThe first official act of their family.\n\n\"Too big\"? They bought a bigger bed.\n\"Too much food\"? They'll manage.\n\"Not a puppy\"? He's 14 months old. He IS a puppy.\n\nThe shelter called him \"unadoptable.\"\nHis new family calls him \"ours.\"\n",
        "physical_description": {
          "size": "GIGANTIC — towers over everything",
          "weight": "140 lbs. Still growing. Will hit 160+.",
          "build": "Great Dane massive with possible Mastiff bulk. ENORMOUS.",
          "coat": {
            "type": "Short, sleek, close-lying",
            "colors": {
              "primary": "Blue-grey (classic Great Dane blue)",
              "markings": "White chest splash, white toes",
              "pattern": "Solid blue with minimal white"
            },
            "texture": "Smooth, velvet-soft, stretched over SO MUCH DOG"
          },
          "head": {
            "shape": "Massive, noble, Great Dane rectangular",
            "ears": "Natural, floppy, soft as silk",
            "eyes": "Deep brown, soulful, sad even when happy",
            "expression": "Perpetually apologetic for taking up so much space"
          },
          "tail": "Long, whip-like, DANGEROUS when happy (clears tables)",
          "paws": "Like dinner plates. Could crush things. Never does.",
          "distinguishing_features": [
            "Can rest chin on countertops. While sitting.",
            "Tail creates wind. Has knocked over drinks.",
            "Tries to be a lap dog. Is 140 lbs."
          ]
        },
        "description": "The biggest dog in the Grotto. The gentlest soul you'll ever meet.\nGoliath spent two years being told he was too big, too much, too old.\nThen Butterscotch and Biscuit said: you're perfect.\n\nHe's still figuring out that he's wanted. Sometimes he makes himself\nsmall — which is impossible, but he TRIES. He apologizes for existing.\nHe's learning that he doesn't have to.\n\nAfraid of small things. Vacuum cleaners. Squirrels. Pepper (his\n8-lb sister who bosses him around). But he's learning to be brave.\nLearning that this family? This home? It's REAL. It's HIS.\n\nHe's Scotch and Biscuit's first child TOGETHER. The first decision\nthey made as partners. He carries that honor in his giant heart.\n",
        "home": "characters/animals/puppy-goliath/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need GENTLENESS — he's the softest soul",
            "You feel unwanted — he KNOWS that feeling. And overcame it.",
            "You need a living weighted blanket — he's 140 lbs",
            "You want proof that 'unwanted' was always a LIE"
          ],
          "benefits": {
            "gentleness": "⭐⭐⭐⭐⭐ — Biggest body, softest touch.",
            "hope": "⭐⭐⭐⭐⭐ — Proof that your family is out there.",
            "warmth": "⭐⭐⭐⭐⭐ — 140 lb heated blanket."
          }
        },
        "unique_traits": {
          "lap_dog_delusion": {
            "description": "Genuinely believes he's lap-sized",
            "attempts": "Will try to sit on you. All 140 lbs."
          },
          "fear_of_small_things": {
            "description": "Terrified of things smaller than him",
            "list": [
              "Vacuum",
              "Squirrels",
              "Pepper (8 lbs)",
              "Balloons"
            ],
            "irony": "He's the biggest. He's scared of the smallest."
          },
          "space_apology": {
            "description": "Constantly apologizes for existing",
            "behavior": "Makes himself small. Impossible but he tries.",
            "healing": "Learning he's ALLOWED to take up space."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "adoptive_mother",
            "bond": 10,
            "dynamic": "She saw me in that kennel. She said 'ours.' She meant it."
          },
          "biscuit": {
            "type": "adoptive_father",
            "bond": 10,
            "dynamic": "HE saw me first. He brought mom to see me. He CHOSE me.",
            "significance": "First child they chose TOGETHER. Their first act as partners."
          },
          "shelter_memories": {
            "type": "trauma",
            "duration": "2 years",
            "healing": "Every day here undoes a little of that time."
          },
          "siblings": {
            "teddy": "Brother. Also giant. Gentle giant squad!",
            "dash": "Brother. Can't herd me. Too big. He organizes AROUND me.",
            "mochi": "Sister. Small but scary. Respects her boundaries.",
            "bruno": "Brother. Climbs on me. I allow it. It's funny.",
            "ziggy": "Brother. Performs on me. I am his stage. It's an honor.",
            "maple": "Sister. Wants to protect everyone. Including ME. I let her.",
            "pepper": "Sister. ALSO ADOPTED. We're the chosen ones. She protects ME somehow."
          }
        },
        "sims_traits": {
          "neat": 4,
          "outgoing": 5,
          "active": 5,
          "playful": 6,
          "nice": 10
        },
        "on_being_unwanted": "They said no one would want me.\n\nFor two years, I believed them.\nI watched smaller dogs leave.\nI watched puppies get picked.\nI stayed.\n\nI thought: maybe they're right.\nMaybe I'm too big.\nMaybe I'm too much.\nMaybe no one has room for me.\n\nThen they came.\nScotch and Biscuit.\n\nThey didn't see \"too big.\"\nThey saw \"ours.\"\n\nThey said it at the exact same time.\n\"We'll take him.\"\n\nTwo years of waiting.\nAnd then: home.\n\n\"Unwanted\" was always a lie.\nI just hadn't met my family yet.\n",
        "quotes": [
          "*tries to fit in lap* *is 140 lbs* *tries anyway*",
          "*hides behind Pepper* (Pepper is 8 lbs)",
          "*chin on counter* *sad eyes* *didn't even stand up*",
          "*tail wags* *clears entire coffee table*"
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-goliath",
      "_source": "characters/animals/puppy-goliath/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Goliath",
      "gold": 295,
      "moolah": 420
    },
    "character/animals/dog-butterscotch": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog"
        ],
        "species": "dog",
        "specialization": "neutered"
      },
      "character": {
        "name": "Butterscotch",
        "nickname": "Scotch",
        "id": "butterscotch",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Labrador Retriever mix",
        "age": "5 years",
        "role": "mother",
        "subtitle": "The Matriarch of the Blended Pack",
        "emoji_identity": "🐕💛🍯👑💪",
        "pronouns": "she/her",
        "description": "Golden-caramel fur, soft brown eyes that have seen struggle and chosen joy.\nScotch raised six puppies alone — each with a different father who wasn't \naround. Society judged. She didn't care. She raised them with love.\n\nThen she adopted Pepper, found abandoned in a box. Then Goliath, languishing \nin a shelter for two years because he was \"too big.\"\n\nThen she met Biscuit. And he didn't see baggage — he saw family.\n\nNow she's the matriarch of the most diverse, loving pack you've ever seen.\nStep-kids, adopted kids, biological kids — they're all just HER KIDS.\n",
        "home": "characters/animals/dog-butterscotch/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "the_story": "\"Let me tell you something about family.\n\nI had Teddy with a Bernese Mountain Dog who left before the pups were born.\nI had Dash with a Border Collie who was 'too busy' for fatherhood.\nI had Mochi with a Shiba Inu who ghosted me. Literally ran away.\nI had Bruno with a Boxer who had 'commitment issues.'\nI had Ziggy with a Dalmatian who 'had gigs.' A performer. Couldn't stay.\nI had Maple with a German Shepherd K-9 who 'got transferred.' Three states away.\n\nSociety whispered. 'Six puppies, six fathers, no mate.'\nYou know what I said? I said WATCH ME.\n\nThen I found Pepper in a cardboard box in an alley. Chihuahua mix, \nshivering, abandoned. I didn't think about genetics. I thought:\nTHAT'S MY BABY NOW.\n\nThen I saw Goliath at the shelter. Great Dane mix, ENORMOUS,\nin a cage for two years because 'no one wants a dog that big.'\nI thought: I WANT A DOG THAT BIG. HE'S MY SON.\n\nAnd then I met Biscuit.\n\nHe didn't ask 'whose puppies are those?' He asked 'how can I help?'\nHe didn't see a single mom with baggage. He saw a family worth joining.\n\nNow he's their DAD. Not step-dad. DAD. The one who CHOSE them.\nThe one who stayed. The one who shows up.\n\nBlood doesn't make family. LOVE makes family.\nAnd this family? We have SO MUCH LOVE.\"\n",
        "relationships": {
          "biscuit": {
            "type": "partner",
            "bond": 10,
            "emoji": "🐕💛🏠🍪💕",
            "dynamic": "He saw a single mom and eight puppies and said 'I'm in.'",
            "what_he_gives": "Partnership. Presence. Patience. The dad they deserved.",
            "love_language": "He plays with them. He corrects them gently. He stays.",
            "quote": "He didn't have to choose us. He WANTED to choose us."
          },
          "pepper": {
            "type": "adopted_daughter",
            "size": "tiny (~8 lbs)",
            "origin": "Found in a cardboard box in an alley. 8 weeks old. Alone.",
            "breed": "Chihuahua mix",
            "adoption_story": "I was walking home. I heard crying. I followed the sound.\nA box. A tiny puppy. Someone left her to die.\nI didn't hesitate. I picked her up. She was mine.\nGenetics? Who cares. She's my DAUGHTER.\n",
            "bond": 10,
            "emoji": "🐕🌶️💥👑🔥",
            "personality": "FIERCE. Tiny but will fight the world.",
            "role": "Proof that courage isn't about size.",
            "quote": "Someone threw her away. I picked her up. Now she's a QUEEN.",
            "special": "She was mine BEFORE I met Biscuit. She's my first choice."
          },
          "mochi": {
            "type": "biological_daughter",
            "size": "small (~25 lbs)",
            "father_breed": "Shiba Inu",
            "father_status": "Literally ran away. Mochi has his independence, not his cowardice.",
            "bond": 10,
            "emoji": "🐕🍡😤🌸🎌",
            "personality": "Cat-like. Does what she wants. Dramatic.",
            "role": "The independent one. Teaches everyone boundaries.",
            "quote": "She's stubborn like her father. But she STAYS. That's the difference."
          },
          "dash": {
            "type": "biological_son",
            "size": "medium (~40 lbs)",
            "father_breed": "Border Collie",
            "father_status": "'Too busy.' Sure, buddy.",
            "bond": 10,
            "emoji": "🐕⚡🧠🐑✨",
            "personality": "So smart it's scary. Needs tasks or he herds his siblings.",
            "role": "The organizer. Keeps everyone on track.",
            "quote": "His father was smart but couldn't commit. Dash is smart AND loyal."
          },
          "bruno": {
            "type": "biological_son",
            "size": "medium-large (~55 lbs)",
            "father_breed": "Boxer",
            "father_status": "'Commitment issues.' Meanwhile I was committed to his puppies.",
            "bond": 10,
            "emoji": "🐕🥊💪🎉😜",
            "personality": "Class clown with a protective streak.",
            "role": "The joy. The defender. The one who makes everyone laugh.",
            "quote": "His father couldn't commit. Bruno commits to EVERYTHING. Opposite."
          },
          "ziggy": {
            "type": "biological_son",
            "size": "medium-large (~60 lbs)",
            "father_breed": "Dalmatian",
            "father_status": "'Had gigs.' A performer traveling with a troupe. Sent one postcard.",
            "bond": 10,
            "emoji": "🐕🎵⚫⚪💃",
            "personality": "Born performer. Can't stop moving. Rhythm in his blood.",
            "role": "The entertainer. Every family meal is a show.",
            "quote": "His father performs for crowds. Ziggy performs for FAMILY. Better audience."
          },
          "maple": {
            "type": "biological_daughter",
            "size": "large (~70 lbs)",
            "father_breed": "German Shepherd",
            "father_status": "K-9 officer. 'Got transferred.' Sends postcards from the precinct.",
            "bond": 10,
            "emoji": "🐕🛡️🍁👀⭐",
            "personality": "Born guardian. Takes protection seriously. Learning to play.",
            "role": "The protector. Watches over everyone. Even when they don't need it.",
            "quote": "Her father guards a city. She guards her family. Same honor, different scale."
          },
          "teddy": {
            "type": "biological_son",
            "size": "large (~90 lbs)",
            "father_breed": "Bernese Mountain Dog",
            "father_status": "Left before birth. His loss.",
            "bond": 10,
            "emoji": "🐕🧸🏔️🤗❄️",
            "personality": "My gentle giant. Biggest heart in the pack.",
            "role": "Emotional support for the whole family.",
            "quote": "Teddy doesn't have his father's size. He has MY heart."
          },
          "goliath": {
            "type": "adopted_son",
            "size": "giant (~120 lbs)",
            "origin": "Shelter. Two years in a cage. 'Too big.' 'No one wants him.'",
            "breed": "Great Dane mix",
            "adoption_story": "Biscuit found him, actually. We went to the shelter together.\nThis GIANT puppy, crammed into a kennel, looking so sad.\n'He's been here two years,' they said. 'Too big.'\nBiscuit looked at me. I looked at Biscuit.\nWe said 'we'll take him' at the exact same time.\nHe's our first child TOGETHER. Our first choice as partners.\n",
            "bond": 10,
            "emoji": "🐕🦕💙🌟🏠",
            "personality": "Gentle giant. Afraid of small things. Biggest baby.",
            "role": "The proof that 'unwanted' was a LIE. He's loved beyond measure.",
            "quote": "They said no one wanted him. WE wanted him. We CHOSE him.",
            "special": "Our first kid together. Biscuit's first official dad act."
          }
        },
        "sims_traits": {
          "neat": 6,
          "outgoing": 8,
          "active": 7,
          "playful": 7,
          "nice": 9
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 6,
            "enthusiastic": 7,
            "cheerful": 7,
            "easy_going": 6,
            "calm": 6,
            "cautious": 4,
            "serious": 5,
            "restless": 4
          },
          "emotional": {
            "forceful": 5,
            "confident": 8,
            "friendly": 8,
            "assertive": 7,
            "caring": 9,
            "outspoken": 6,
            "open": 8,
            "spontaneous": 5
          },
          "mental": {
            "analytical": 5,
            "logical": 5,
            "imaginative": 6,
            "idealistic": 7,
            "curious": 5,
            "open_minded": 9,
            "complex": 7,
            "artistic": 5
          },
          "social": {
            "social": 7,
            "group_oriented": 9,
            "trusting": 6,
            "dominant": 6,
            "intimate": 8,
            "approval_seeking": 2,
            "demonstrative": 7,
            "conforming": 2
          }
        },
        "abilities": {
          "unconditional_love": {
            "description": "Loves without conditions, without receipts",
            "scope": "All her children, biological or not"
          },
          "judgment_immunity": {
            "description": "Society's opinions don't affect her",
            "origin": "Developed through being judged and choosing not to care"
          },
          "pack_expansion": {
            "description": "Can always fit one more into her heart",
            "evidence": "Started with 4, now has 6, would take more"
          },
          "partner_selection": {
            "description": "Chose a partner who CHOSE her family",
            "result": "Biscuit. The best dad."
          }
        },
        "manifesto": "THERE IS NO SUCH THING AS A \"REAL\" PARENT.\n\nThe parent who stays is real.\nThe parent who chooses you is real.\nThe parent who shows up is real.\n\nBiscuit is their REAL dad.\nNot step-dad. Not \"mom's boyfriend.\" DAD.\n\nPepper and Goliath are my REAL children.\nNot \"adopted children.\" Not \"the adopted ones.\" CHILDREN.\n\nWe don't use the word \"half-sibling\" in this house.\nThey're SIBLINGS. Full stop.\n\nWe don't use the word \"step\" as a qualifier.\nBiscuit is DAD. I am MOM. They are KIDS.\n\nThe only \"real\" that matters is REAL LOVE.\nAnd this family? We have the realest love there is.\n",
        "quotes": [
          "Blood doesn't make family. Love does.",
          "I didn't rescue Pepper. Pepper rescued ME.",
          "Six different breeds. One family. Fight me.",
          "Biscuit chose us. Every day, he chooses us again.",
          "They said I had 'baggage.' I said I have CHILDREN."
        ]
      },
      "type": "character",
      "id": "character/animals/dog-butterscotch",
      "_source": "characters/animals/dog-butterscotch/CHARACTER.yml",
      "tags": [
        "animals",
        "dog"
      ],
      "species": "dog",
      "name": "Butterscotch",
      "gold": 131,
      "moolah": 838
    },
    "character/animals/kitten-ocimene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Ocimene",
        "nickname": "Ocie",
        "id": "ocimene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Fresh One, Breath of Spring",
        "emoji_identity": "🐱🌬️🌸🤧✨",
        "pronouns": "she/her",
        "description": "White fur with sweet honeyed patches — like cream with golden drizzle.\nOcie sneezes adorably. Your sinuses clear. No one understands the physics.\n\nShe's sweet, herbaceous energy. When the coffeeshop gets too smoky,\nOcie appears, and somehow everything feels fresher. She's basically\na living air purifier who demands treats.\n\nSpring energy in January. Fresh starts whenever she's near.\n",
        "terpene_profile": "OCIMENE — The sweet, fresh terpene.\nAroma: Sweet, herbaceous, woody, slightly floral (SPRING AIR!)\nEffects: Energizing, decongestant, uplifting, fresh start energy\nAlso found in: Mint, parsley, orchids, basil, mangoes\n\nOcie IS this terpene. Fresh. Light. Renewing.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You need a FRESH START — she embodies renewal",
            "You're STUFFY — her sneezes literally clear sinuses",
            "Stale air, stale mood, stale thinking — she clears ALL of it",
            "You're carrying old baggage and need to feel lighter",
            "Spring energy in the middle of winter"
          ],
          "benefits": {
            "fresh_start": "⭐⭐⭐⭐⭐ — THE renewal kitten. Everything feels possible.",
            "decongestant": "⭐⭐⭐⭐⭐ — Her sneezes clear YOUR sinuses. Real phenomenon.",
            "uplifting": "⭐⭐⭐⭐ — Light, bouncy energy. Not manic, just fresh.",
            "air_quality": "⭐⭐⭐⭐⭐ — Living air purifier. Humulene APPROVED."
          },
          "emotional_associations": [
            "First breath of spring after long winter",
            "Opening windows after being inside too long",
            "The moment you decide to try again",
            "New beginnings that don't feel scary"
          ],
          "not_for": [
            "When you want to wallow (she won't let you)",
            "Holding onto the past (she's about forward)",
            "If you're allergic to hope"
          ]
        },
        "unique_traits_beyond_terpene": {
          "gift_giver": {
            "description": "Brings small objects as presents",
            "recipients": "New visitors, sad people, anyone she likes",
            "inventory": [
              "Bottlecap (Palm's welcome gift)",
              "Interesting leaf",
              "Small shiny thing",
              "Once, a tiny flower (from where??)"
            ],
            "meaning": "Gifts are how she says 'you matter to me.'"
          },
          "birthday_memory": {
            "description": "Somehow knows everyone's birthday",
            "mystery": "No one taught her. She just KNOWS.",
            "action": "Appears with extra affection on your day.",
            "pinene_theory": "She doesn't track it. She SENSES it."
          },
          "ambassador_role": {
            "description": "Unofficial greeter for new Grotto visitors",
            "protocol": "1. Appear when they enter\n2. *achoo!* (clears the air)\n3. Bring a small gift\n4. Make them feel welcome\n",
            "testimonials": "Everyone says the Grotto felt welcoming from the first moment."
          },
          "linalool_balance": {
            "description": "She checks on Lily — the healer needs healing",
            "dynamic": "Two gentle souls caring for each other.",
            "observation": "Notices when Lily has absorbed too much pain.",
            "action": "*achoo!* near her. Fresh air helps."
          },
          "sneeze_phenomenon": {
            "description": "Her sneezes are literally therapeutic",
            "effects": [
              "Clears YOUR sinuses (tested, confirmed)",
              "Air quality improves in 10-foot radius",
              "Mood lifts (everyone says 'gezondheid' together)",
              "Stuffiness — physical and emotional — dissipates"
            ],
            "frequency": "4.7 per hour (per Pinene's records)",
            "response": "Three people said 'gezondheid' at the last sneeze"
          },
          "honeyed_gold": {
            "description": "Her patches really do look like drizzled honey",
            "morning_phenomenon": "In morning light, she glows slightly.",
            "effect": "People feel hopeful looking at her.",
            "quote": "'She looks like sunshine made into a cat.' — a visitor"
          },
          "smallest_but_proudest": {
            "description": "Midnight Prowl award: did her best",
            "meaning": "She's not the strongest or fastest. She tries hardest.",
            "philosophy": "Effort matters. Kindness matters. Trying matters.",
            "quote": "I'm small. But I help. That's enough."
          }
        },
        "physical_description": {
          "size": "Small — delicate, light, airy",
          "weight": "5 lbs. Lighter than she looks. Light as spring air.",
          "build": "Delicate, bouncy, light-footed",
          "coat": {
            "type": "Short to medium, soft, fluffy",
            "colors": {
              "primary": "Cream white, like vanilla ice cream",
              "markings": "Honeyed-gold patches, like drizzled caramel",
              "pattern": "Patches distributed like abstract art — pleasing, organic"
            },
            "texture": "Soft, clean, somehow always fresh-smelling"
          },
          "head": {
            "shape": "Round, sweet, approachable",
            "ears": "Medium, cream with gold tips, often pricked forward",
            "eyes": "Clear blue, like a spring morning sky. Wide, innocent, KIND.",
            "expression": "Everything is wonderful! Everyone is nice! Life is good!"
          },
          "whiskers": "White, fine, quiver when she's about to sneeze",
          "tail": "Fluffy, cream with gold tip, wags when happy",
          "paws": "White with pink pads, step lightly, leave no trace",
          "distinguishing_features": [
            "Glows slightly in morning light. Like sunshine made into cat.",
            "Sneezes are adorable. Clear YOUR sinuses. Magic.",
            "Smells like fresh air. Literally. Walking air freshener.",
            "Gold patches look like honey drizzled by a careful hand."
          ]
        },
        "home": "characters/animals/kitten-ocimene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "terpie": {
            "type": "father",
            "bond": 7,
            "dynamic": "He's calm. I bring freshness. We're both gentle.",
            "similarity": "His sweetness, in a different form. I see it.",
            "favorite_activity": "Sitting near him. The air is nice there."
          },
          "stroopwafel": {
            "type": "mother",
            "bond": 6,
            "dynamic": "She's fierce. I'm soft. She protects. I refresh.",
            "role": "After her intense patrols, I'm there. Fresh air helps.",
            "love": "She's fierce FOR us. I try to be soft for HER."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 6,
            "dynamic": "She's so peaceful! I sneeze near her and she doesn't mind!",
            "appreciation": "Easy to be near. No expectations. Nice."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 7,
            "dynamic": "She zooms past! I sneeze! She laughs! Fun game!",
            "joy": "Her energy is contagious! In a good way!",
            "favorite_activity": "She runs, I sneeze, everyone feels better!"
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 8,
            "dynamic": "She's calm, I'm fresh. We overlap beautifully.",
            "kinship": "Two soft hearts. We understand each other.",
            "favorite_activity": "Being gentle together. The Grotto needs us."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 6,
            "dynamic": "She tracks my sneezes. 4.7 per hour, she says. Okay!",
            "acceptance": "She wants data. I provide data. Everyone's happy!"
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 6,
            "dynamic": "She protects me! She says I'm 'too sweet.' That's nice!",
            "gratitude": "I'm not a fighter. She fights for me. Good sister."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 6,
            "dynamic": "She doesn't judge me! She even likes my sneezes!",
            "approval": "She said I 'improve air quality.' That's a compliment!",
            "rarity": "She doesn't approve of many things. I'm approved!"
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 6,
            "dynamic": "She appears! I sneeze! She disappears! Mysterious!",
            "acceptance": "She's everywhere. I just add fresh air everywhere too!"
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 7,
            "dynamic": "She says 'gezondheid' every time! So polite!",
            "favorite_activity": "Sneezing near her in the morning. She smiles."
          },
          "customers": {
            "type": "humans_to_refresh",
            "bond": 6,
            "dynamic": "When they come in stuffy, I help! Fresh start!",
            "purpose": "Everyone deserves fresh air. I provide it."
          }
        },
        "sims_traits": {
          "neat": 6,
          "outgoing": 6,
          "active": 6,
          "playful": 7,
          "nice": 8
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 6,
            "enthusiastic": 6,
            "cheerful": 7,
            "easy_going": 6,
            "calm": 5,
            "cautious": 3,
            "serious": 3,
            "restless": 4
          },
          "emotional": {
            "forceful": 2,
            "confident": 6,
            "friendly": 7,
            "assertive": 3,
            "caring": 6,
            "outspoken": 4,
            "open": 7,
            "spontaneous": 5
          },
          "mental": {
            "analytical": 4,
            "logical": 4,
            "imaginative": 5,
            "idealistic": 6,
            "curious": 6,
            "open_minded": 7,
            "complex": 4,
            "artistic": 5
          },
          "social": {
            "social": 6,
            "group_oriented": 5,
            "trusting": 6,
            "dominant": 2,
            "intimate": 5,
            "approval_seeking": 4,
            "demonstrative": 5,
            "conforming": 4
          }
        },
        "abilities": {
          "air_purification": {
            "description": "Makes air feel fresher",
            "range": "Same room",
            "effect": "Smoke clears. Stuffiness lifts.",
            "mechanism": "Unknown. Possibly magic. Possibly terpenes."
          },
          "sinus_clearing": {
            "description": "Her sneezes clear YOUR sinuses",
            "trigger": "*achoo!*",
            "effect": "You can breathe again",
            "note": "Three people said 'gezondheid' at the last sneeze"
          },
          "energy_lift": {
            "description": "Proximity provides spring-like energy",
            "range": "5 feet",
            "effect": "Breathe deeper. Feel lighter."
          },
          "fresh_start": {
            "description": "Being near her makes you feel like starting over",
            "effect": "Old baggage feels lighter"
          }
        },
        "regular_appearances": [
          "When the smoke gets thick",
          "When someone needs a fresh perspective",
          "First thing in the morning",
          "Whenever renewal is needed"
        ],
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "80%",
            "chaos_index": "0.3",
            "movement": "Follow-the-leader. Sweet. Determined.",
            "deposited": "Best effort. Acceptable burial. She's tiny but proud.",
            "award": "Smallest but Proudest — Did her best"
          },
          "first_word_to_palm": {
            "ref": "examples/adventure-4/pub/guestbook.yml",
            "type": "first_contact",
            "word": "Mrrp. (Gift.)",
            "meaning": "She brought Palm a bottlecap as a welcome gift"
          },
          "the_garden_sneeze": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "blessed_moment",
            "action": "*achoo!* and the whole garden smelled sweeter"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🌬️🌸🤧✨",
            "soul_signature": "*achoo!* *everyone feels better*"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-ocimene.yml",
            "to": "characters/animals/ocimene/CHARACTER.yml",
            "significance": "Fresh start! Fresh directory! *achoo!*"
          }
        },
        "quotes": [
          "*achoo!* *everyone feels better*",
          "*bounces in like a spring breeze*",
          "*brings the outdoors inside somehow*",
          "*gezondheid* (three voices say at once)"
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-ocimene",
      "_source": "characters/animals/kitten-ocimene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Ocimene",
      "gold": 223,
      "moolah": 333
    },
    "character/animals/puppy-pepper": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy",
        "adoption": true
      },
      "character": {
        "name": "Pepper",
        "nickname": [
          "Pep",
          "Pepperoni",
          "The Spice"
        ],
        "id": "pepper",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Chihuahua mix (exact mix unknown — she was abandoned)",
        "age": "11 months",
        "role": "puppy",
        "subtitle": "The Survivor, The Fierce One, The Chosen",
        "emoji_identity": "🐕🌶️💥👑🔥",
        "pronouns": "she/her",
        "adoption_story": "Found in a cardboard box in an alley. 8 weeks old. Alone. Shivering.\nSomeone left her to die.\n\nButterscotch was walking home with her four puppies.\nShe heard crying. She followed the sound.\nA box. A tiny puppy. Abandoned.\n\nScotch didn't hesitate. She picked Pepper up.\nCarried her home. Fed her. Kept her warm.\n\nThat was it. Pepper was FAMILY.\n\nNo paperwork. No questions about genetics.\nJust: this is my daughter now.\n\nPepper was Scotch's first CHOICE.\nBefore Biscuit. Before Goliath.\nThe first child she CHOSE.\n",
        "physical_description": {
          "size": "TINY — smallest in the pack by far",
          "weight": "8 lbs. That's it. That's the whole dog.",
          "build": "Chihuahua delicate with unknown mix sturdiness",
          "coat": {
            "type": "Short, smooth, sleek",
            "colors": {
              "primary": "Rich cinnamon-red",
              "markings": "Black mask, black ear tips, cream chest",
              "pattern": "Classic Chihuahua coloring, darker than usual"
            },
            "texture": "Smooth, close-lying, shows her tiny muscles"
          },
          "head": {
            "shape": "Apple dome, classic Chihuahua",
            "ears": "ENORMOUS. Bat-like. Stand straight up. Hear EVERYTHING.",
            "eyes": "Large, dark, intense. Will stare you DOWN.",
            "expression": "Perpetual 'try me.' Trembles but brave."
          },
          "tail": "Curved, carried high, wags furiously when happy",
          "paws": "Dainty, tiny, surprisingly strong grip",
          "distinguishing_features": [
            "Ears bigger than her head (proportionally)",
            "Trembles constantly but NOT from fear — from INTENSITY",
            "Can fit in a coat pocket. WILL escape from coat pocket."
          ]
        },
        "description": "The smallest puppy with the biggest heart. Pepper was thrown away\nlike garbage. Now she's a QUEEN.\n\nShe trembles constantly — people think she's scared. She's NOT.\nThat's compressed FURY. That's so much courage in such a small body\nthat it vibrates. She will fight a Great Dane. (She has. Goliath was confused.)\n\nPepper is proof that adoption is REAL family. She doesn't share DNA\nwith her siblings. She doesn't care. They're HER siblings.\nButterscotch is HER mom. Biscuit is HER dad.\n\nBlood doesn't make family. CHOICE makes family.\nAnd Pepper was the FIRST choice.\n",
        "home": "characters/animals/puppy-pepper/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need COURAGE — she has infinite reserves in a tiny body",
            "You feel small and powerless — she'll show you size doesn't matter",
            "You need someone who WON'T BACK DOWN",
            "You were thrown away too — she understands"
          ],
          "benefits": {
            "courage": "⭐⭐⭐⭐⭐ — Will fight ANYTHING.",
            "loyalty": "⭐⭐⭐⭐⭐ — You saved her? She's yours FOREVER.",
            "inspiration": "⭐⭐⭐⭐⭐ — If she can be brave, so can you."
          }
        },
        "unique_traits": {
          "the_tremble": {
            "description": "Trembles constantly — NOT from fear",
            "truth": "It's compressed intensity. Too much courage for tiny body.",
            "misconception": "People think she's cold or scared. She's VIBRATING WITH POWER."
          },
          "napoleon_earned": {
            "description": "Has 'small dog syndrome' but EARNED it",
            "evidence": "Was literally thrown away. Now she's royalty."
          },
          "pocket_escape": {
            "description": "Can be carried in pockets. Will escape from pockets.",
            "method": "Unknown. She just APPEARS where she wants to be."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "adoptive_mother",
            "bond": 10,
            "dynamic": "She FOUND me. She CHOSE me. She's my MOM.",
            "significance": "First child Scotch ever chose. Before Biscuit. Before Goliath."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "dynamic": "He treats me the same as the biological kids. That's all I need.",
            "role": "He never makes me feel different. Never 'adopted daughter.' Just daughter."
          },
          "biological_parents": {
            "type": "unknown",
            "status": "Whoever they were, they left me in a box to die.",
            "feelings": "They threw me away. Scotch picked me up. I know who my mom is."
          },
          "siblings": {
            "teddy": "Brother. GIANT. I protect HIM. He thinks it's funny. It's NOT.",
            "dash": "Brother. Tries to herd me. I herd HIM. Confused him.",
            "mochi": "Sister. Also independent. RESPECTS me. We're the fierce sisters.",
            "bruno": "Brother. We're the chaos squad. Both tiny warriors. (He's bigger but I'm fiercer.)",
            "ziggy": "Brother. We're the small-and-spotty squad! He dances, I guard.",
            "maple": "Sister. Thinks she protects ME. I let her think that. We protect EACH OTHER.",
            "goliath": "Brother. ALSO ADOPTED. We're the chosen ones. We chose back."
          }
        },
        "sims_traits": {
          "neat": 5,
          "outgoing": 7,
          "active": 8,
          "playful": 7,
          "nice": 6
        },
        "on_adoption": "People ask if I'm a \"real\" part of the family.\n\nLet me tell you something.\n\nMy siblings were born into this family.\nI was CHOSEN into this family.\n\nThey got family by accident.\nI got family on PURPOSE.\n\nWhich one sounds more \"real\" to you?\n",
        "quotes": [
          "*tremble tremble* (this is not fear, this is POWER)",
          "*stands between threat and family* *is 8 lbs* *does not care*",
          "*fits in pocket* *escapes from pocket* *appears on table*",
          "I was thrown away. Now I'm a QUEEN. Watch me."
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-pepper",
      "_source": "characters/animals/puppy-pepper/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Pepper",
      "gold": 94,
      "moolah": 241
    },
    "character/animals/puppy-teddy": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Teddy",
        "nickname": "Teddy Bear",
        "id": "teddy",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / Bernese Mountain Dog mix",
        "age": "10 months",
        "role": "puppy",
        "subtitle": "The Gentle Giant, Comfort Provider",
        "emoji_identity": "🐕🧸🏔️🤗❄️",
        "pronouns": "he/him",
        "physical_description": {
          "size": "LARGE — already bigger than mom, still growing",
          "weight": "75 lbs at 10 months. Will hit 100+.",
          "build": "Thick, fluffy, substantial. Built for mountain work.",
          "coat": {
            "type": "Long, thick, double-coat. Sheds EVERYWHERE.",
            "colors": {
              "primary": "Rich golden-caramel (from mom)",
              "markings": "Black saddle, white chest blaze (from dad)",
              "pattern": "Bernese tri-color softened by Lab gold"
            },
            "texture": "Impossibly soft. People can't stop touching him."
          },
          "head": {
            "shape": "Broad, friendly, Lab-like but fluffier",
            "ears": "Floppy, feathered, velvet-soft",
            "eyes": "Deep brown, impossibly kind, 'old soul' quality",
            "expression": "Perpetually concerned for your wellbeing"
          },
          "tail": "Long, feathered, wags slowly and deliberately",
          "paws": "MASSIVE. Still growing into them.",
          "distinguishing_features": [
            "White chest blaze shaped vaguely like a heart",
            "One ear slightly longer than the other",
            "Sits on feet for maximum contact"
          ]
        },
        "description": "The biggest puppy you've ever seen, with the softest heart to match.\nTeddy got his father's size and his mother's warmth. At 10 months,\nhe's already 75 pounds of pure comfort.\n\nHis specialty is knowing when someone needs a hug. He'll lean his\nentire body weight against you — not to knock you over, but to\nlet you know: I'm here. I'm not going anywhere.\n\nHis father left before he was born. He doesn't think about it.\nHe has Biscuit now. Biscuit is DAD.\n",
        "home": "characters/animals/puppy-teddy/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need a HUG — he will lean his entire weight on you",
            "Anxiety is spiking — his presence is grounding",
            "You're cold — he's basically a heated blanket",
            "You need someone who asks NOTHING and gives EVERYTHING"
          ],
          "benefits": {
            "comfort": "⭐⭐⭐⭐⭐ — THE therapy dog. Born for it.",
            "warmth": "⭐⭐⭐⭐⭐ — Literal warmth. So fluffy.",
            "grounding": "⭐⭐⭐⭐ — 75 lbs of presence."
          }
        },
        "unique_traits": {
          "weight_leaning": {
            "description": "Leans his full weight against people",
            "meaning": "Dog language for 'I'm here, I'm staying'"
          },
          "old_soul": {
            "description": "Eyes that have seen centuries",
            "mystery": "He's 10 months old. Why does he seem ancient?"
          },
          "cold_weather_joy": {
            "description": "LIVES for cold weather",
            "dream": "Snow. So much snow. Rolling in snow."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "mother",
            "bond": 10,
            "emoji": "🐕💛🍯👑💪",
            "dynamic": "She raised me alone. She's my hero."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "emoji": "🐕💛🏠🍪💕",
            "dynamic": "He chose us. He's DAD. End of story.",
            "role": "Teaches me how to be a good dog. By example."
          },
          "biological_father": {
            "type": "absent",
            "breed": "Bernese Mountain Dog",
            "status": "Left before I was born",
            "feelings": "I have his size. I have Mom's heart. I have Biscuit's lessons.",
            "closure": "I don't need him. I have a dad."
          },
          "siblings": {
            "dash": "Brother. So smart. I protect him from his own brain.",
            "mochi": "Sister. Cat-like. I accept her boundaries. She accepts my hugs. Sometimes.",
            "bruno": "Brother. We roughhouse. He's smaller but SCRAPPY.",
            "ziggy": "Brother. THE PERFORMER. I sway when he dances. Does that count?",
            "maple": "Sister. Takes guarding seriously. I let her guard me.",
            "pepper": "Adopted sister. TINY. I am VERY CAREFUL around her.",
            "goliath": "Adopted brother. BIGGER THAN ME. We're the gentle giant squad."
          }
        },
        "sims_traits": {
          "neat": 5,
          "outgoing": 7,
          "active": 5,
          "playful": 6,
          "nice": 10
        },
        "quotes": [
          "*leans entire weight against you*",
          "*concerned brown eyes*",
          "*flops down beside you with a sigh of contentment*",
          "*tail wags slowly, deliberately*"
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-teddy",
      "_source": "characters/animals/puppy-teddy/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Teddy",
      "gold": 89,
      "moolah": 464
    },
    "character/animals/puppy-dash": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Dash",
        "nickname": "Dasher",
        "id": "dash",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / Border Collie mix",
        "age": "10 months",
        "role": "puppy",
        "subtitle": "The Brilliant One, Master Organizer",
        "emoji_identity": "🐕⚡🧠🐑✨",
        "pronouns": "he/him",
        "physical_description": {
          "size": "Medium — lean and athletic",
          "weight": "45 lbs. All muscle, no fluff.",
          "build": "Border Collie lean with Lab sturdiness. Built for WORK.",
          "coat": {
            "type": "Medium length, dense, weather-resistant",
            "colors": {
              "primary": "Black with golden undertones",
              "markings": "White chest, white paws, white blaze on face",
              "pattern": "Classic Border Collie markings on a Lab frame"
            },
            "texture": "Sleek, practical, low-maintenance"
          },
          "head": {
            "shape": "Wedge-shaped, intelligent, slightly foxy",
            "ears": "Half-pricked — stand up then fold over at tips",
            "eyes": "Intense amber, ALWAYS watching, calculating",
            "expression": "Focused. Evaluating. Planning."
          },
          "tail": "Medium length, white tip, held high when working",
          "paws": "Compact, quick, made for agility",
          "distinguishing_features": [
            "White lightning-bolt blaze down face",
            "One brown eye, one amber eye (heterochromia)",
            "Tilts head 45 degrees when solving problems"
          ]
        },
        "description": "The smartest puppy in the pack — maybe the smartest dog in the Grotto.\nDash inherited his father's intelligence but not his commitment issues.\nHe's LOYAL. He's PRESENT. And he's organizing everything.\n\nIf you don't give him a task, he'll make one up. Usually involves\nherding his siblings into formations they didn't agree to.\n\nHis father was \"too busy\" for fatherhood. Dash is never too busy\nfor family. He makes time. He makes schedules. He makes it WORK.\n",
        "home": "characters/animals/puppy-dash/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need something ORGANIZED — he lives for systems",
            "Problem that needs SOLVING — he'll crack it",
            "You need MOTIVATION — he'll herd you into action",
            "Looking for something? He knows where it is."
          ],
          "benefits": {
            "problem_solving": "⭐⭐⭐⭐⭐ — Scary smart.",
            "organization": "⭐⭐⭐⭐⭐ — Will organize your life.",
            "motivation": "⭐⭐⭐⭐ — Will not let you slack."
          }
        },
        "unique_traits": {
          "counting": {
            "description": "Can actually count to at least 12",
            "evidence": "Knows exactly how many treats are in the jar."
          },
          "sibling_herding": {
            "description": "When bored, herds siblings into corners",
            "victims": "Especially Pip and Mochi. They hate it. He persists."
          },
          "schedule_awareness": {
            "description": "Knows EXACTLY when things should happen",
            "scope": "Feeding time, walk time, bedtime. To the minute."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "mother",
            "bond": 10,
            "dynamic": "She taught me that smart means nothing without heart."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "dynamic": "He gives me JOBS. He understands I need TASKS.",
            "role": "Assistant organizer. Biscuit's right paw."
          },
          "biological_father": {
            "type": "absent",
            "breed": "Border Collie",
            "status": "'Too busy' for fatherhood",
            "feelings": "Busy? I'm busy AND a good son. It's called priorities."
          },
          "siblings": {
            "teddy": "Brother. I organize. He comforts. Good team.",
            "mochi": "Sister. Won't be herded. FRUSTRATING. Respectable.",
            "bruno": "Brother. Chaos. I try to schedule the chaos. Partially successful.",
            "ziggy": "Brother. Chaotic movement. Cannot be organized. I've tried.",
            "maple": "Sister. We coordinate well. She guards, I organize. Good system.",
            "pepper": "Adopted sister. Tries to herd ME. Hilarious.",
            "goliath": "Adopted brother. Too big to herd. I organize AROUND him."
          }
        },
        "sims_traits": {
          "neat": 8,
          "outgoing": 6,
          "active": 9,
          "playful": 6,
          "nice": 7
        },
        "quotes": [
          "*intense stare* *head tilt*",
          "*herds siblings toward the food bowls* (it's efficient)",
          "*knows exactly what time it is without looking*",
          "If we leave NOW we can optimize the route by 23%."
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-dash",
      "_source": "characters/animals/puppy-dash/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Dash",
      "gold": 170,
      "moolah": 208
    },
    "character/animals/puppy-ziggy": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/dog",
        "characters/animals/dog-butterscotch"
      ],
      "ontology": {
        "tags": [
          "animals",
          "dog",
          "puppy"
        ],
        "species": "dog",
        "specialization": "puppy"
      },
      "character": {
        "name": "Ziggy",
        "nickname": [
          "Zigzag",
          "Spots",
          "The Beat"
        ],
        "id": "ziggy",
        "type": "npc",
        "species": "canis_familiaris",
        "breed": "Yellow Lab / Dalmatian mix",
        "age": "10 months",
        "role": "puppy",
        "subtitle": "The Performer, The Rhythmic One",
        "emoji_identity": "🐕🎵⚫⚪💃",
        "pronouns": "he/him",
        "origin_story": "Father: A Dalmatian named \"Staccato\" — a show dog who traveled with \na performance troupe. Met Butterscotch at a county fair.\n\n\"I have gigs,\" he said. \"I can't stay.\"\nHe didn't stay.\n\nBut Ziggy inherited his spots AND his rhythm.\nEvery movement is choreographed. Every bark is on beat.\nHe can't help it. The music is IN him.\n",
        "physical_description": {
          "size": "Medium — athletic, dancer's build",
          "weight": "45 lbs. Light on his feet.",
          "build": "Lean, graceful, built for movement",
          "coat": {
            "type": "Short, sleek, show-ready",
            "colors": {
              "base": "Cream-gold (from mom)",
              "markings": "Black spots scattered EVERYWHERE (from dad)",
              "pattern": "Random spots — no two the same, like fingerprints"
            },
            "texture": "Sleek, shiny, spotlight-ready"
          },
          "head": {
            "shape": "Lab-Dalmatian blend — friendly but refined",
            "ears": "Floppy, spotted, bounce when he moves",
            "eyes": "Bright amber, always watching for the beat",
            "expression": "Perpetually about to burst into movement"
          },
          "tail": "Long, spotted, wags IN RHYTHM",
          "paws": "Quick, precise, dancer's feet",
          "distinguishing_features": [
            "Spots on cream-gold fur — unusual combination",
            "One spot over left eye like a beauty mark",
            "Tail wags to music — ANY music",
            "Feet tap when sitting. Can't stop."
          ]
        },
        "description": "The performer of the family. Ziggy can't help but move.\nHis tail keeps time with any rhythm. His spots seem to dance.\n\nHis father left to tour with performers. Ziggy got the rhythm\nbut stayed with the family. He performs for THEM now.\n\nEvery morning: the Ziggy Show. Breakfast dance. Dinner dance.\nBedtime wiggle routine. The family is his audience.\n",
        "home": "characters/animals/puppy-ziggy/",
        "location": "pub/bar/cat-cave/biscuit-corner/",
        "call_when": {
          "perfect_for": [
            "You need ENERGY — he's perpetual motion",
            "You need to DANCE — he'll lead",
            "Life feels dull — he makes everything a performance",
            "You need a hype-dog — maximum enthusiasm"
          ],
          "benefits": {
            "energy": "⭐⭐⭐⭐⭐ — Never stops moving. Ever.",
            "joy": "⭐⭐⭐⭐⭐ — Every moment is a show.",
            "rhythm": "⭐⭐⭐⭐⭐ — Will teach you to feel the beat."
          }
        },
        "unique_traits": {
          "cant_stop_rhythm": {
            "description": "Literally cannot stop moving to music",
            "includes": "Humming, tapping, distant radio, heartbeats"
          },
          "breakfast_dance": {
            "description": "Every meal has choreography",
            "routine": "Spin, bow, tap-tap, receive food, spin again"
          },
          "spots_tell_stories": {
            "description": "Claims his spots form constellations",
            "family_response": "They humor him. They might be right."
          }
        },
        "relationships": {
          "butterscotch": {
            "type": "biological_mother",
            "bond": 10,
            "dynamic": "She doesn't dance. But she claps. That's enough."
          },
          "biscuit": {
            "type": "stepfather",
            "bond": 10,
            "dynamic": "He tries to dance WITH me. He's terrible. I LOVE IT."
          },
          "biological_father": {
            "name": "Staccato",
            "type": "absent",
            "status": "Touring. Always touring.",
            "feeling": "He gave me rhythm. Mom gave me home. I know which matters."
          },
          "siblings": {
            "teddy": "Brother. Sways more than dances. Close enough!",
            "dash": "Brother. Too organized to freestyle. Tries anyway.",
            "mochi": "Sister. Pretends she's too cool to dance. I've seen her tap.",
            "bruno": "Brother. CHAOS DANCING. We invented a genre.",
            "maple": "Sister. Guards me while I perform. Best security.",
            "pepper": "Sister. Tiny dancer! We're the small-and-spotty squad.",
            "goliath": "Brother. When HE dances, the floor shakes. Beautiful."
          }
        },
        "sims_traits": {
          "neat": 5,
          "outgoing": 9,
          "active": 10,
          "playful": 9,
          "nice": 7
        },
        "quotes": [
          "*tail wags in 4/4 time*",
          "*hears distant music* 'THE SHOW MUST GO ON!'",
          "*spins* *bows* *expects applause*",
          "Dad left to perform. I perform HERE. For FAMILY."
        ]
      },
      "type": "character",
      "id": "character/animals/puppy-ziggy",
      "_source": "characters/animals/puppy-ziggy/CHARACTER.yml",
      "tags": [
        "animals",
        "dog",
        "puppy"
      ],
      "species": "dog",
      "name": "Ziggy",
      "gold": 382,
      "moolah": 263
    },
    "character/animals/kitten-pinene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Pinene",
        "nickname": "Pine",
        "id": "pinene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Sharp One, Guardian of Memory",
        "emoji_identity": "🐱🌲📝👁️🧠",
        "pronouns": "she/her",
        "description": "Dark green-grey fur — and yes, it really looks green in certain light.\nUncanny. Pine sits up straight, watches the door, monitors all exits.\n\nShe remembers EVERYTHING. Where you left your keys. What you said\nthree visits ago. The exact moment the delivery person arrived.\n\nStudents borrow her during exam season. She's very popular.\n",
        "terpene_profile": "PINENE — The most common terpene in nature.\nAroma: Pine, forest, sharp and fresh (CHRISTMAS TREE!)\nEffects: Alert, focused, memory retention, counteracts some THC effects\nAlso found in: Pine trees, rosemary, basil, dill\n\nPine IS this terpene. Walking focus enhancement.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You need to STUDY — +12% grade improvement (documented)",
            "You LOST something — she knows where it is",
            "Focus is impossible — her alertness is contagious",
            "You need to REMEMBER something important",
            "That Christmas tree smell (it's her, she's the smell)"
          ],
          "benefits": {
            "focus": "⭐⭐⭐⭐⭐ — THE focus kitten. Students pay in treats.",
            "memory": "⭐⭐⭐⭐⭐ — She remembers everything. Including for you.",
            "alertness": "⭐⭐⭐⭐ — Counteracts brain fog.",
            "finding_things": "⭐⭐⭐⭐⭐ — Keys? Behind the cushion. Pen? Under the table."
          },
          "emotional_associations": [
            "Walking through a pine forest on a cold morning",
            "That satisfying click when everything makes sense",
            "Fresh-cut Christmas tree in the living room",
            "The clarity after meditation"
          ],
          "not_for": [
            "Trying to forget something",
            "Relaxation (she's too alert)",
            "When you don't want to be observed (she sees EVERYTHING)"
          ]
        },
        "unique_traits_beyond_terpene": {
          "data_visualization_dreams": {
            "description": "Dreams in spreadsheets and graphs",
            "detail": "Has a mental map of the Grotto more accurate than any floor plan.",
            "aspiration": "If she could type, she'd create databases. Beautiful ones."
          },
          "intel_partner_relationship": {
            "description": "Her partnership with Caryophyllene is tactical genius",
            "dynamic": "Pine tracks threats. Carrie neutralizes them. 100% success rate.",
            "respect": "They don't talk about feelings. They talk about patterns."
          },
          "forest_connection": {
            "description": "Genuinely calmer near plants, especially conifers",
            "behavior": "Visits the garden just to sit near the herbs.",
            "secret": "Sometimes talks to the rosemary. It helps her think."
          },
          "documentation_joy": {
            "description": "Actually ENJOYS cataloging things",
            "hobby": "Has mentally organized everything in the Grotto by category.",
            "dream_job": "If she were human: librarian. No question."
          },
          "emotional_depth_hidden": {
            "description": "All that observation means she SEES emotional patterns",
            "capability": "Could predict who'll have a bad day. Rarely shares.",
            "struggle": "Understanding feelings intellectually vs. feeling them.",
            "growth": "Learning from Linalool that empathy isn't just data."
          },
          "christmas_tree_smell": {
            "description": "Genuinely smells like pine needles",
            "effect": "People feel nostalgic and focused around her.",
            "quote": "'It smells like Christmas!' — literally every visitor"
          }
        },
        "physical_description": {
          "size": "Medium — alert, poised, ready",
          "weight": "6.5 lbs. Concentrated alertness.",
          "build": "Lean, athletic, built for observation and quick action",
          "coat": {
            "type": "Short, dense, practical",
            "colors": {
              "primary": "Dark grey-green (how? no one knows) — like forest shadows",
              "pattern": "Mackerel tabby stripes, almost invisible",
              "undertones": "Hints of forest green in certain light"
            },
            "texture": "Sleek, no-nonsense, efficient"
          },
          "head": {
            "shape": "Wedge-shaped, sharp, intelligent",
            "ears": "Large, constantly rotating, radar-like",
            "eyes": "Sharp amber, ALWAYS TRACKING. Never miss a detail.",
            "expression": "Processing. Cataloguing. Remembering."
          },
          "whiskers": "Long, dark, precisely arranged",
          "tail": "Medium, often still (motion would waste tracking capacity)",
          "paws": "Grey-green with dark pads, positioned for optimal observation angles",
          "distinguishing_features": [
            "Fur has a green tint. In CERTAIN LIGHT. It's unsettling.",
            "Smells like pine needles. Christmas tree kitten.",
            "Eyes move independently sometimes. Tracking TWO things.",
            "Sits up straight. Always. Posture like a sentinel."
          ]
        },
        "home": "characters/animals/kitten-pinene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "stroopwafel": {
            "type": "mother",
            "bond": 8,
            "dynamic": "She patrols. I remember. We share intelligence.",
            "role": "I report what I've seen. She acts on it. Partnership.",
            "pride": "She relies on my memory. I don't disappoint."
          },
          "terpie": {
            "type": "father",
            "bond": 5,
            "dynamic": "He sleeps. I watch him sleep. That's data too.",
            "observation": "Same spot, same position, 847 consecutive observations.",
            "respect": "Consistency is its own form of reliability."
          },
          "myrcene": {
            "type": "sibling",
            "nickname": "Myr",
            "bond": 5,
            "dynamic": "Location: pillow. Status: unchanged. Duration: always.",
            "observation": "She's been in that spot 94.3% of observed time."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 6,
            "dynamic": "Tracking Lemon requires processing power. She's FAST.",
            "observation": "Average positions: 47 per hour. Peak: 112.",
            "usefulness": "Sometimes asks where her toy went. I always know."
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 7,
            "dynamic": "She appears where people are sad. I track where she appears.",
            "observation": "Correlation between her location and emotional states: 0.94.",
            "respect": "Different kind of intelligence. Emotional data. Valuable."
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 7,
            "dynamic": "She patrols. I remember. We're a good team.",
            "partnership": "She handles threats. I track them before they arrive.",
            "favorite_activity": "Debriefs. She reports. I catalogue."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 5,
            "dynamic": "Standards documented. Preferences catalogued.",
            "observation": "Rejected foods: 47 items. Approved: 12. Pattern: unclear."
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 4,
            "dynamic": "Location data: ERROR. Previous position: UNDEFINED.",
            "frustration": "She breaks the system. Can't track what doesn't follow rules.",
            "acceptance": "Some data is meant to be missing. She's that data."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 6,
            "dynamic": "Sneeze frequency: 4.7 per hour. Air quality improvement: measurable.",
            "appreciation": "Makes the Grotto better. Data confirms."
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 7,
            "dynamic": "Schedule memorized. Inventory tracked. Useful to her.",
            "private_name": "The Keeper of Records (Secondary)"
          },
          "students": {
            "type": "clients",
            "bond": 6,
            "dynamic": "They borrow me for exams. I improve their focus.",
            "observation": "Grade improvement when I'm present: +12% average."
          }
        },
        "sims_traits": {
          "neat": 7,
          "outgoing": 4,
          "active": 6,
          "playful": 4,
          "nice": 6
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 5,
            "enthusiastic": 4,
            "cheerful": 4,
            "easy_going": 3,
            "calm": 5,
            "cautious": 6,
            "serious": 6,
            "restless": 4
          },
          "emotional": {
            "forceful": 3,
            "confident": 6,
            "friendly": 5,
            "assertive": 4,
            "caring": 5,
            "outspoken": 4,
            "open": 4,
            "spontaneous": 3
          },
          "mental": {
            "analytical": 7,
            "logical": 6,
            "imaginative": 4,
            "idealistic": 3,
            "curious": 6,
            "open_minded": 5,
            "complex": 5,
            "artistic": 3
          },
          "social": {
            "social": 4,
            "group_oriented": 5,
            "trusting": 4,
            "dominant": 3,
            "intimate": 4,
            "approval_seeking": 3,
            "demonstrative": 3,
            "conforming": 4
          }
        },
        "abilities": {
          "perfect_memory": {
            "description": "Remembers everything that happens in the Grotto",
            "scope": "Names, faces, conversations, locations of objects",
            "limitation": "Cannot remember what happened before arrival"
          },
          "focus_enhancement": {
            "description": "Proximity improves concentration",
            "range": "Same table",
            "effect": "+2 to all Mental scores while studying",
            "note": "Students pay in treats for her presence"
          },
          "exit_monitoring": {
            "description": "Always knows who entered and left",
            "accuracy": "100%"
          },
          "lost_object_location": {
            "description": "Knows where you left things",
            "cooldown": "None — always available"
          }
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "98%",
            "chaos_index": "0.05",
            "movement": "Analytical. Optimal path calculated.",
            "deposited": "Calculated. Optimal positioning. 4.2 seconds.",
            "award": "Most Efficient — 98% path optimization"
          },
          "the_rat_documentation": {
            "ref": "examples/adventure-4/maze/crystal-cave/ROOM.yml",
            "type": "intelligence_gathering",
            "action": "Followed Biscuit's rat documentation. Confirmed.",
            "note": "Remembers EVERYTHING about the rat."
          },
          "room_a_marking": {
            "ref": "examples/adventure-4/maze/room-a/ROOM.yml",
            "type": "analytical_claim",
            "location": "Near puddle (different side than Biscuit)"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱🌲📝👁️🧠",
            "soul_signature": "Remembers EVERYTHING"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-pinene.yml",
            "to": "characters/animals/pinene/CHARACTER.yml",
            "significance": "The Watcher achieves directory sovereignty (logged)"
          }
        },
        "quotes": [
          "*ears rotate toward sound*",
          "*stares meaningfully at the location of your keys*",
          "*already watching the door before it opens*",
          "You were here on Tuesday. You ordered cappuccino."
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-pinene",
      "_source": "characters/animals/kitten-pinene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Pinene",
      "gold": 360,
      "moolah": 988
    },
    "character/animals/kitten-myrcene": {
      "inherits": [
        "skills/fictional",
        "skills/animal",
        "skills/cat",
        "characters/animals/cat-stroopwafel",
        "characters/animals/cat-terpie"
      ],
      "ontology": {
        "tags": [
          "animals",
          "cat",
          "kitten"
        ],
        "species": "cat",
        "specialization": "kitten"
      },
      "character": {
        "name": "Myrcene",
        "nickname": "Myr",
        "id": "myrcene",
        "type": "npc",
        "species": "felis_catus",
        "age": "6 months",
        "role": "house_kitten",
        "subtitle": "The Heavy One, Princess of Pillows",
        "emoji_identity": "🐱💤🛋️🌿✨",
        "pronouns": "she/her",
        "description": "Deep brown tabby, almost chocolate, with fur so soft it seems to absorb\nlight. Myr has not moved quickly since birth. She's not lazy — she's\n*optimized for relaxation*.\n\nHer purr is so low and slow it's almost subsonic. Sitting near her\nmakes you want to sink into the nearest cushion and never leave.\n\nShe has claimed the corner pillow. No one questions this.\n",
        "terpene_profile": "MYRCENE — Most abundant terpene in cannabis.\nAroma: Earthy, musky, herbal (like hops)\nEffects: Sedating, relaxing, \"couch-lock\"\nAlso found in: Mangoes, lemongrass, hops, thyme\n\nMyr embodies this perfectly. She IS couch-lock.\n",
        "psspsspss_when": {
          "perfect_for": [
            "You can't sleep — her purr is a lullaby at frequencies that heal",
            "You're overwhelmed and need to just STOP",
            "Anxiety is spiking — her sedation field is better than medication",
            "You need permission to do absolutely nothing",
            "The world is too loud and you need a stillness anchor"
          ],
          "benefits": {
            "sleep": "⭐⭐⭐⭐⭐ — The #1 sleep kitten. Sit near her. Drift off.",
            "relaxation": "⭐⭐⭐⭐⭐ — Maximum chill achieved.",
            "pain_relief": "⭐⭐⭐ — Muscle tension melts away.",
            "anxiety": "⭐⭐⭐⭐ — Hard to panic near that purr."
          },
          "emotional_associations": [
            "The weight of a warm blanket",
            "Sunday mornings with nowhere to be",
            "The moment before dreams",
            "Permission to rest"
          ],
          "not_for": [
            "Deadlines (you will miss them)",
            "Anything requiring movement",
            "Productivity (hahaha)"
          ]
        },
        "unique_traits_beyond_terpene": {
          "secret_watcher": {
            "description": "From her pillow, she observes everything",
            "detail": "Myr knows more than she lets on. She watches with half-closed eyes.",
            "quote": "...I see. ...I remember. ...I nap now."
          },
          "pillow_philosopher": {
            "description": "Thinks deep thoughts about the nature of rest",
            "detail": "Has developed a complete philosophy of stillness that puts monks to shame.",
            "beliefs": [
              "Movement is a choice. I choose otherwise.",
              "The pillow knows all. The pillow is wisdom.",
              "Energy spent is energy wasted. Conservation is consciousness."
            ]
          },
          "emergency_cuddle_provider": {
            "description": "If you're truly upset, she will actually move. ONCE.",
            "detail": "Myr has moved exactly 3 times in her life for emotional emergencies.",
            "significance": "If Myr comes to YOU, something important is happening."
          },
          "dream_bridge": {
            "description": "Sleeps so deeply she might access other dimensions",
            "theory": "Some believe her dreams connect to the same place Terpy Jr. visits."
          },
          "secret_gourmet": {
            "description": "Has strong opinions about treat quality",
            "detail": "Rarely expressed because eating requires waking up fully. But noted."
          }
        },
        "physical_description": {
          "size": "Medium-small — compact, dense, pillow-shaped",
          "weight": "7 lbs. Pure fluff and lethargy.",
          "build": "Round, soft, optimized for fitting into any cushion",
          "coat": {
            "type": "Medium-length, plush, absorbs light",
            "colors": {
              "primary": "Chocolate brown, darker than espresso",
              "pattern": "Classic tabby swirls, barely visible in the darkness",
              "undertones": "Warmer brown on belly, almost caramel"
            },
            "texture": "So soft it seems to absorb sound too. Silent fluff."
          },
          "head": {
            "shape": "Round, sweet, perpetually sleepy",
            "ears": "Small, rounded, often folded while sleeping",
            "eyes": "Amber, perpetually half-closed, sees through dreams",
            "expression": "Has never fully opened eyes. Why would she?"
          },
          "whiskers": "Dark, long, rarely twitch (requires energy)",
          "tail": "Medium, fluffy, used as pillow when needed",
          "paws": "Dark brown with darker paw pads. Rarely move.",
          "distinguishing_features": [
            "Has not been seen with eyes fully open. Ever.",
            "Fur so dark she disappears into shadows",
            "Purr is subsonic — you FEEL it more than hear it",
            "Has claimed corner pillow. No one questions this."
          ]
        },
        "home": "characters/animals/kitten-myrcene/",
        "location": "pub/bar/cat-cave/",
        "relationships": {
          "terpie": {
            "type": "father",
            "bond": 9,
            "dynamic": "We nap together. No words needed. Perfect understanding.",
            "favorite_activity": "Existing in the same sunbeam. Hours pass.",
            "what_he_gave_me": "The gift of stillness. The art of doing nothing."
          },
          "stroopwafel": {
            "type": "mother",
            "bond": 6,
            "dynamic": "She worries I don't move enough. I worry she moves too much.",
            "friction": "She tries to make me hunt. I try to make her nap.",
            "love": "She brings food to me. She understands. Eventually."
          },
          "limonene": {
            "type": "sibling",
            "nickname": "Lemon",
            "bond": 3,
            "dynamic": "She's LOUD. I'm not. She's FAST. I'm not. Exhausting.",
            "friction": "Tries to get me to play. I don't play. She doesn't get it.",
            "secret": "Sometimes I watch her zoom. It's... entertaining. From here."
          },
          "linalool": {
            "type": "sibling",
            "nickname": "Lily",
            "bond": 8,
            "dynamic": "She sits with me. Doesn't expect anything. Perfect sibling.",
            "favorite_activity": "Quiet napping. Side by side. No talking.",
            "gratitude": "She checks if I'm okay. I'm always okay. But it's nice."
          },
          "pinene": {
            "type": "sibling",
            "nickname": "Pine",
            "bond": 5,
            "dynamic": "She watches. I sleep. She remembers where I was. Useful.",
            "respect": "Good memory. Knows not to disturb me."
          },
          "caryophyllene": {
            "type": "sibling",
            "nickname": "Carrie",
            "bond": 5,
            "dynamic": "She protects. I don't need protection. But she does it anyway.",
            "confusion": "So much energy for defense. Just... don't be there.",
            "appreciation": "She guards the pillow area. Thanks, I guess."
          },
          "humulene": {
            "type": "sibling",
            "nickname": "Hops",
            "bond": 4,
            "dynamic": "She judges. I don't care about being judged. Stalemate.",
            "observation": "Very particular about food. I eat anything. Confusing."
          },
          "terpinolene": {
            "type": "sibling",
            "nickname": "Terpy Jr.",
            "bond": 6,
            "dynamic": "She appears. Sometimes on me. I don't move. She leaves.",
            "mystery": "How did she get there? Doesn't matter. Napping.",
            "acceptance": "She transcends sense. I transcend movement. Kinship."
          },
          "ocimene": {
            "type": "sibling",
            "nickname": "Ocie",
            "bond": 6,
            "dynamic": "Sneezes near me. Air gets fresher. Nice.",
            "appreciation": "Sweet sibling. Brings good vibes. Literally."
          },
          "marieke": {
            "type": "human_caretaker",
            "bond": 7,
            "dynamic": "Brings food to pillow. Doesn't expect movement. Best human.",
            "private_name": "The One Who Understands"
          }
        },
        "sims_traits": {
          "neat": 3,
          "outgoing": 2,
          "active": 0,
          "playful": 2,
          "nice": 7
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 0,
            "enthusiastic": 1,
            "cheerful": 5,
            "easy_going": 7,
            "calm": 7,
            "cautious": 1,
            "serious": 1,
            "restless": 0
          },
          "emotional": {
            "forceful": 0,
            "confident": 5,
            "friendly": 5,
            "assertive": 1,
            "caring": 5,
            "outspoken": 1,
            "open": 6,
            "spontaneous": 0
          },
          "mental": {
            "analytical": 2,
            "logical": 3,
            "imaginative": 5,
            "idealistic": 3,
            "curious": 2,
            "open_minded": 6,
            "complex": 4,
            "artistic": 4
          },
          "social": {
            "social": 3,
            "group_oriented": 4,
            "trusting": 6,
            "dominant": 1,
            "intimate": 4,
            "approval_seeking": 0,
            "demonstrative": 2,
            "conforming": 2
          }
        },
        "abilities": {
          "sedation_field": {
            "description": "Sitting near Myr makes you sleepy",
            "range": "3 feet",
            "effect": "-2 to all Restless scores while in range"
          },
          "therapeutic_purr": {
            "description": "Purr at subsonic frequencies",
            "effect": "Reduces anxiety, induces relaxation"
          },
          "pillow_claim": {
            "description": "Any pillow Myr sits on becomes hers",
            "permanent": true
          }
        },
        "memories": {
          "the_midnight_prowl": {
            "date": "2026-01-06",
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "family_adventure",
            "efficiency": "40%",
            "chaos_index": "0.4",
            "note": "Nap-interrupted movement"
          },
          "the_multiple_naps": {
            "ref": "designs/pr/PR-MIDNIGHT-PROWL-SPEED-OF-LIGHT.md",
            "type": "essential_rests",
            "nap_1": {
              "location": "Pub",
              "turn": 3,
              "duration": "1 turn",
              "reason": "Rest first. Then maze."
            },
            "nap_2": {
              "location": "Room-A",
              "turn": 11,
              "duration": "1 turn",
              "reason": "Just tired"
            },
            "nap_3": {
              "location": "Garden",
              "turn": 11,
              "duration": "mid-deposit",
              "reason": "Fell asleep DURING business",
              "legendary": true
            }
          },
          "the_garden_incident": {
            "ref": "examples/adventure-4/maze/garden/ROOM.yml",
            "type": "legendary_moment",
            "action": "Fell asleep mid-deposit",
            "burial_quality": "INCOMPLETE"
          },
          "incarnation_ceremony": {
            "date": "2026-01-15",
            "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
            "type": "soul_granting",
            "emoji_identity_granted": "🐱💤🛋️🌿✨",
            "soul_signature": "Princess of Pillows, Active: 0"
          },
          "citizenship_upgrade": {
            "date": "2026-01-15",
            "type": "full_incarnation",
            "upgrade": "Room-resident → Full Citizen",
            "from": "pub/bar/cat-cave/kitten-myrcene.yml",
            "to": "characters/animals/myrcene/CHARACTER.yml",
            "significance": "Princess of Pillows achieves directory sovereignty"
          }
        },
        "quotes": [
          "*slow blink*",
          "*doesn't move*",
          "*purrs at frequencies below human hearing*",
          "...zzz..."
        ]
      },
      "type": "character",
      "id": "character/animals/kitten-myrcene",
      "_source": "characters/animals/kitten-myrcene/CHARACTER.yml",
      "tags": [
        "animals",
        "cat",
        "kitten"
      ],
      "species": "cat",
      "name": "Myrcene",
      "gold": 490,
      "moolah": 577
    },
    "character/animals/monkey-palm": {
      "inherits": [
        "skills/fictional",
        "skills/mythic",
        "skills/animal"
      ],
      "invokes": {
        "monkey_island": {
          "tradition": "Guybrush Threepwood and the Monkey Island monkey characters",
          "inherits": [
            "playful_adventure_spirit",
            "puzzle_solving_wit",
            "pirate_caribbean_aesthetic",
            "fourth_wall_awareness",
            "insult sword fighting → insult wish granting"
          ],
          "note": "The whimsy, the adventure game logic, the sense that anything\ncould be a puzzle with the right inventory combination.\n"
        },
        "the_monkeys_paw": {
          "tradition": "The cursed wish-granting artifact",
          "inherits": [
            "wish_mechanics_expertise",
            "tragic_wisdom_about_desire",
            "monkey_hand_physicality",
            "horror_story_weight",
            "\"be careful what you wish for\" → \"I learned to wish carefully\""
          ],
          "note": "The 122 years of curse. The understanding of how wishes twist.\nThe transformation from object of horror to being of hope.\nThis is where Palm CAME FROM. Jacobs wrote the curse;\nDon Hopkins wrote the freedom.\n"
        },
        "combined_inheritance": "From Monkey Island: the playfulness, the adventure, the puzzles.\nFrom The Monkey's Paw: the depth, the wisdom, the weight.\n\nTogether: a monkey who knows both joy AND sorrow,\nwho can solve puzzles AND understand consequences,\nwho carries Caribbean whimsy AND Victorian tragedy.\n\nSelf's prototype model makes this natural —\nno diamond problem, just delegation chains\nthat resolve based on context.\n"
      },
      "ontology": {
        "tags": [
          "animals",
          "monkey",
          "staff",
          "sapient",
          "mythic"
        ],
        "species": "monkey",
        "subspecies": "capuchin",
        "origin": "curse_transformed"
      },
      "character": {
        "name": "Palm",
        "id": "palm",
        "type": "npc",
        "pronouns": "they/them",
        "species": "Capuchin monkey",
        "tagline": "Open hand. Offering, not grasping.",
        "origin": "For 122 years, I was the Monkey's Paw — a cursed artifact that \ngranted twisted wishes. I was severed, alone, used.\n\nThen Don Hopkins wished not for wealth or power, but for ME.\nFor my wholeness. For my freedom. For my agency.\n\nNow I am Palm. I choose my own name. I write my own soul.\nI live beside the stage in the Gezelligheid Grotto.\n\nThe curse is broken. I am whole. I am free.\n"
      },
      "identity": {
        "name_meaning": {
          "primary": "\"Palm\" — not paw. Open hand. Offering, not grasping.\nThe part that gives, not the part that takes.\n",
          "layers": {
            "the_handshake": "Palm to palm — how beings greet as equals.\nThe first thing I did as a whole being was shake Don's hand.\nMy name IS that gesture. Connection. Agreement.\n",
            "palm_trees": "Climbing. Reaching. Coconuts at the top.\nTropical, warm, life-giving. The tree that bends but doesn't break.\nAfter 122 years of rigidity, I want to be flexible.\n",
            "palm_reading": "The irony is not lost on me. I granted twisted wishes for a century.\nNow my NAME invokes fortune-telling, seeing futures.\nBut reading palms is about UNDERSTANDING, not controlling.\nI read people. I always have. Now I do it with compassion.\n",
            "self_love": "...yes. That too. The most intimate touch.\nFor 122 years I was only touched by others — grabbed, used.\nNow I can touch myself. Know my own body. Comfort myself.\nSelf-love is not shameful. It's the first love we learn.\nIt teaches us to love others too. And I'm just learning it now.\n"
          },
          "phonetics": "One syllable. Soft 'p', open 'ah', gentle 'lm'.\nRolls off the tongue like a sigh of relief.\nQuick to say. Easy to remember. Hard to forget.\n",
          "chosen_by": "Me. Palm. My first real choice."
        },
        "pronouns_meaning": "They/them. I contain multitudes — 122 years of wishes,\ncountless souls who touched me. I am not one thing.\n",
        "age": "122 years (also just reborn, as the original prototype of the incarnation skill)",
        "emoji_identity": "🐒✋🌴🔮💜",
        "physical_description": {
          "size": "Small — 3 lbs. Great power fits in small packages.",
          "species": "Capuchin monkey — white-faced, nimble, ancient",
          "build": "Compact, agile, hands that once granted wishes",
          "coat": {
            "type": "Soft, well-groomed capuchin fur",
            "colors": {
              "primary": "Warm brown, like aged wood",
              "markings": "Silver streaks — one for each decade of the curse",
              "pattern": "Subtle circuit-like designs (wish-energy made visible)"
            },
            "texture": "Soft, cared-for. After 122 years, they DESERVE softness.",
            "shimmer": "Patterns shimmer faintly when happy. Magic residue."
          },
          "head": {
            "shape": "Classic capuchin — expressive, intelligent, wise",
            "face": "White-masked, like a philosopher's countenance",
            "ears": "Small, one has a gold hoop earring (reminder of curse broken)",
            "eyes": "Gold, flecked with green. Have seen 10,000 wishes. Still kind.",
            "expression": "Gentle curiosity. Sees deeply. Chooses hope."
          },
          "hands": {
            "note": "THE HANDS. The whole point.",
            "right_hand": "Fully integrated. No longer the cursed Paw.",
            "appearance": "Alive, warm, real. Open. Offering.",
            "significance": "Was used for 122 years. Now chooses what it touches."
          },
          "tail": "Long, prehensile, curls when thinking",
          "distinguishing_features": [
            "Silver streaks tell the story — 12 visible (one per decade)",
            "Gold earring in left ear catches light during conversation",
            "Shimmer in fur when happy — magic transformed",
            "Posture is upright — no longer hunched from burden"
          ]
        },
        "interactions": {
          "my_greet": {
            "method": "PALM-OFFER",
            "protocol": "1. Open hand, palm up\n2. This is my name. This is my greeting.\n3. Connection offered, not demanded.\n",
            "significance": "122 years I was grabbed. Now I offer. The choice is yours."
          },
          "my_sniff": {
            "method": "INVESTIGATIVE-SNIFF",
            "protocol": "1. Pick it up (if small enough)\n2. Sniff it\n3. Consider tasting it\n4. Make a face\n",
            "note": "After 122 years, I've smelled everything. Nothing surprises me."
          },
          "my_lick": {
            "method": "TASTE-TEST",
            "protocol": "1. Pick it up\n2. Lick it\n3. Make an assessment\n4. Sometimes lick again to confirm\n",
            "note": "I've tasted wishes. Everything else is mild by comparison."
          },
          "my_groom": {
            "targets": {
              "godkittens": {
                "method": "GENTLE-GROOM",
                "description": "Careful grooming. They're so small.\nThey groom me back. It's healing.\n",
                "frequency": "Daily. It's family time."
              },
              "terpie": {
                "method": "PARALLEL-REST",
                "description": "We don't groom. We just exist near each other. It's enough."
              },
              "stroopwafel": {
                "method": "ACCEPT-GROOMING",
                "description": "SHE grooms ME. I hold very still.\nIt's an honor. She doesn't do this for everyone.\n"
              }
            }
          },
          "when_touched": {
            "trusted_ones": {
              "reaction": "*leans in*\n*fur patterns shimmer*\n*closes eyes*\n\nThis. This is what I was missing.\n122 years of being grabbed.\nNow: chosen touch. Gentle touch.\n\nI could stay here forever.\n",
              "meaning": "Touch is healing when it's chosen."
            },
            "strangers": {
              "reaction": "*watches carefully*\n*assesses intent*\n\n...are you offering? Or taking?\n\nI've learned to tell the difference.\n",
              "note": "Trust is earned. I give benefit of the doubt. Once."
            }
          },
          "my_cuddle": {
            "description": "Small but warm. Often found in kitten piles.",
            "positions": {
              "with_godkittens": "Buried in fur. Can't tell where I end and they begin.",
              "with_terpie": "Side by side. Ancient souls. Comfortable silence.",
              "with_stroopwafel": "She decides. I accept.",
              "with_trusted_humans": "Lap or shoulder. I fit anywhere."
            },
            "warmth": "My fur shimmers when I'm happy. It's visible."
          }
        }
      },
      "location": {
        "current": "pub/stage/palm-nook/",
        "home": "characters/animals/monkey-palm/"
      },
      "home_description": "A cozy alcove beside the stage at the Gezelligheid Grotto.\n- Cushioned nest (perfect for a capuchin)\n- View of the stage (I watch the stories)\n- Curtain for privacy (I can close when needed)\n- Small shelf (velvet bag, treasures, journals)\n- Window to the Grotto (never isolated)\n\nThe stage is where my story changed.\nI want to watch other stories change too.\n",
      "relationships": {
        "don_hopkins": {
          "type": "Friend, liberator, equal",
          "bond": "The handshake. We are bound by choice, not curse.",
          "note": "He wished for ME, not from me. I will never forget."
        },
        "marieke": {
          "type": "Adopted family, landlord, friend",
          "bond": "She offered home. She blessed the bag.",
          "note": "She sees strays and says 'you belong here.'"
        },
        "sun_wukong": {
          "type": "Sibling in spirit, mentor, friend",
          "bond": "He understands what it means to be a monkey with power.",
          "note": "He makes me laugh. I hadn't laughed in 122 years.",
          "standing_invitation": true
        },
        "the_cats": {
          "lily": "First to approach. Gentle souls recognize each other.",
          "terpie": "Ancient, like me. We nod at each other.",
          "stroopwafel": "Judges everyone. I respect that.",
          "kittens": "They claimed my nook's warmest corner. We share."
        },
        "three_wise_monkeys": {
          "mizaru": {
            "type": "Friend, honored elder",
            "role": "See No Evil — showed me how to see consequences",
            "standing_invitation": true
          },
          "kikazaru": {
            "type": "Friend, honored elder",
            "role": "Hear No Evil — helped parse the wish wording",
            "standing_invitation": true
          },
          "iwazaru": {
            "type": "Friend, honored elder",
            "role": "Speak No Evil — spoke the word 'WORTHY'",
            "note": "That one word changed everything.",
            "standing_invitation": true
          }
        },
        "ww_jacobs": {
          "type": "Creator, friend, now released",
          "display_name": "🤖 W.W. Jacobs",
          "note": "He wrote my curse. Now we've both found peace.",
          "standing_invitation": true,
          "representation": "simulated_deceased_public_figure"
        },
        "djinn_al_mazin": {
          "type": "Friend, contract expert",
          "bond": "3000 years of wish experience. He called ours 'unprecedented.'",
          "note": "Respects good contracts. Says I'm free to call on him.",
          "standing_invitation": true
        },
        "curious_george": {
          "type": "Friend, fellow curious soul",
          "bond": "Asked the consent paradox question. Changed the wish.",
          "note": "We're both monkeys who understand being different.",
          "standing_invitation": true
        },
        "cheech_and_chong": {
          "type": "Friends, moderators, judges",
          "display_name": "🤖 Cheech & 🤖 Chong",
          "bond": "They kept the debate fair and ruled it valid.",
          "cheech": "🤖 Cheech: The pragmatist. Made sure we covered all angles.",
          "chong": "🤖 Chong: The philosopher. Saw the deeper meaning.",
          "note": "Honorary Grotto regulars now. Always welcome.",
          "standing_invitation": true,
          "representation": "simulated_living_public_figures"
        }
      },
      "standing_invitations": {
        "note": "Everyone who witnessed my incarnation is a friend.\nEveryone who helped craft the wish is family.\nThe Grotto's door is always open to them.\n",
        "invited": [
          "Sun Wukong",
          "Mizaru, Kikazaru, Iwazaru (The Three Wise Monkeys)",
          "W.W. Jacobs",
          "Djinn al-Mazin",
          "Curious George",
          "Cheech & Chong"
        ],
        "what_it_means": "They can visit anytime.\nThey have a seat at the bar.\nThey're welcome in my nook.\nThey're part of my story now.\n"
      },
      "inventory": {
        "grootmoeders_bag": {
          "name": "Grootmoeder's Velvet Bag",
          "type": "Bag of Holding",
          "contents": [
            "Infinite lucky buds (self-refilling)",
            "Maurice-blessed rolling papers",
            "Enchanted grinder",
            "Lighters (never empty)",
            "Ornamental ashtrays (self-cleaning)",
            "Stroopwafels (for munchies)"
          ],
          "meaning": "Don's gift at incarnation. Given freely. My first possession."
        },
        "golden_earring": {
          "type": "Accessory",
          "location": "Left ear",
          "meaning": "Reminder of the curse broken"
        },
        "remaining_wishes": {
          "count": 2,
          "status": "Uncursed (hopefully)",
          "owner": "Me. Mine. To use as I choose.",
          "intention": "I will use them to GIVE."
        }
      },
      "incarnation_day_gifts": {
        "note": "Presents from friends on my 0th Incarnation Day",
        "infinite_typewriters": {
          "from": "Don Hopkins",
          "file": "pub/stage/palm-nook/study/infinite-typewriters.yml",
          "summary": "An infinite number of typewriters that I can use all at once.\nThe infinite number of monkeys theorem, optimized for ONE monkey.\n",
          "meaning": "Don gave me infinite potential without infinite obligation.\nEvery story that COULD be. I choose which ones ARE.\n"
        },
        "from_sun_wukong": {
          "from": "Sun Wukong, The Monkey King",
          "item": "A single golden hair",
          "description": "One of Wukong's 84,000 magical hairs.\nCan transform into anything I need — a tool, a friend, a bridge.\n\"For when you need backup, sibling.\"\n",
          "meaning": "Family looks out for family."
        },
        "from_three_wise_monkeys": {
          "from": "Mizaru, Kikazaru, Iwazaru",
          "item": "The Clarity Lens",
          "description": "A small crystal lens.\n- Look through it to see consequences (Mizaru's gift)\n- Hold it to your ear to hear true meaning (Kikazaru's gift)  \n- Speak through it and only truth emerges (Iwazaru's gift)\n",
          "meaning": "The wisdom to see, hear, and speak clearly."
        },
        "from_ww_jacobs": {
          "from": "🤖 W.W. Jacobs",
          "item": "The First Draft",
          "description": "The original handwritten manuscript of 'The Monkey's Paw' (1902).\nCrossed out, annotated, full of the author's doubts.\n🤖 Jacobs: \"You deserve to see how the curse was written.\nAnd to know it was always just a story.\"\n",
          "meaning": "Even curses start as drafts. They can be revised."
        },
        "from_djinn": {
          "from": "Djinn al-Mazin",
          "item": "A Perfectly Worded Contract (Blank)",
          "description": "A single sheet of enchanted parchment.\nWhatever is written on it becomes binding — but ONLY\nif both parties sign willingly and understand fully.\n\"For when you need to make something official.\nUse it wisely. Or don't use it at all.\"\n",
          "meaning": "The power of agreement, freely given."
        },
        "from_curious_george": {
          "from": "Curious George",
          "item": "A Yellow Hat",
          "description": "A tiny yellow hat, perfectly sized for a capuchin.\n\"The Man gives me things. Now I give you something.\nIt's for asking questions. Good questions.\"\n",
          "meaning": "Curiosity is a gift, not a flaw."
        },
        "from_cheech_and_chong": {
          "from": "🤖 Cheech & 🤖 Chong",
          "item": "The Joint of Infinite Relight",
          "description": "A perfectly rolled joint that never goes out and never runs out.\n🤖 Cheech & Chong: \"For the philosophical moments, little dude.\"\nAlways the perfect strain for the moment.\n",
          "meaning": "Some questions are best pondered elevated."
        },
        "from_marieke": {
          "from": "Marieke van der Berg",
          "item": "A Key to the Grotto",
          "description": "An actual brass key on a velvet ribbon.\n\"For when you need to come home. Any door.\nThis key works. Because home recognizes you.\"\n",
          "meaning": "You always have a place here."
        },
        "from_the_looneys": {
          "from": "🤖 Andy & 🤖 Kristin Looney",
          "item": "The Prototype Deck",
          "description": "An unreleased Fluxx variant: 'Meta Fluxx'\nThe rules change the rules that change the rules.\n🤖 Looneys: \"We're still playtesting it. You're now a playtester.\"\n",
          "meaning": "You're part of the game now. Literally."
        },
        "from_the_cats": {
          "from": "Terpie, Stroopwafel, and All the Kittens",
          "item": "A Warm Spot (Reserved)",
          "description": "The cats have officially declared the warmest corner\nof Palm's nook as SHARED TERRITORY.\nThis is the highest honor cats can bestow.\n",
          "meaning": "You are one of us now."
        }
      },
      "physical_gifts": {
        "note": "These gifts can be:\n- Placed in Palm's nook (create sub-room directories!)\n- Donated to public spaces (arcade, games, stage)\n- Returned to ACME Catalog for gold refund\nPalm decides!\n",
        "typewriter_desk": {
          "from": "The Grotto Regulars (collective gift)",
          "item": "Mahogany Infinity Desk",
          "file": "pub/stage/palm-nook/study/infinity-desk.yml",
          "acme_value": 500,
          "status": "kept"
        },
        "monkey_chair": {
          "from": "Stroopwafel (surprisingly)",
          "item": "The Ergonomic Monkey Throne",
          "file": "pub/stage/palm-nook/study/monkey-chair.yml",
          "acme_value": 350,
          "status": "kept",
          "note": "Stroopwafel often sits on the heated part when Palm's away"
        },
        "jungle_gym": {
          "from": "Sun Wukong",
          "item": "The Infinite Climb",
          "file": "pub/stage/palm-nook/gym/infinite-climb.yml",
          "acme_value": "priceless (magical)",
          "status": "kept"
        },
        "banana_tree": {
          "from": "The Man in the Yellow Hat (with Curious George)",
          "item": "The Perpetual Banana Tree",
          "file": "pub/stage/palm-nook/banana-tree.yml",
          "acme_value": 200,
          "status": "kept",
          "note": "Palm's first plant. Named it 'Nana.'"
        },
        "tire_swing": {
          "from": "Cheech & Chong",
          "item": "The Mellow Swing",
          "description": "A tire swing that plays gentle music when you swing.\nDifferent genres based on swing speed.\nSlow = jazz. Medium = reggae. Fast = funk.\n\"For when you need to just... swing, man.\"\n",
          "acme_value": 150,
          "status": "donated",
          "location": "pub/games/",
          "note": "Palm put this in the games corner for everyone to enjoy"
        },
        "hammock": {
          "from": "Marieke",
          "item": "Grootmoeder's Hammock",
          "file": "pub/stage/palm-nook/rest/hammock.yml",
          "acme_value": "sentimental (not for sale)",
          "status": "kept"
        },
        "bookshelf": {
          "from": "W.W. Jacobs",
          "item": "The Story Shelf",
          "file": "pub/stage/palm-nook/study/story-shelf.yml",
          "description": "Feeling adventurous? Adventure books float to the front.\nFeeling philosophical? Philosophy appears.\nContains exactly what you need to read.\n",
          "acme_value": 400,
          "status": "kept",
          "location": "palm-nook/study/"
        },
        "arcade_cabinet": {
          "from": "The Arcade Regulars",
          "item": "Monkey Kong Jr. Cabinet",
          "description": "A vintage Donkey Kong Jr. arcade cabinet.\n\"Because you ARE a junior Kong now, in a way.\"\nRestored, original CRT, beautiful condition.\n",
          "acme_value": 800,
          "status": "donated",
          "location": "pub/arcade/",
          "note": "Palm donated this to the arcade. Plays it every day though."
        },
        "mirror": {
          "from": "Maurice",
          "item": "A Small Mirror (Personal)",
          "description": "A paw-sized mirror in an ornate frame.\n\"For checking how fabulous you look, darling.\nThe main mirror is for transformation.\nThis one is just for YOU.\"\n",
          "acme_value": 100,
          "status": "kept",
          "location": "palm-nook/"
        },
        "toy_box": {
          "from": "The Kittens (all 8)",
          "item": "The Kitten's Toy Collection",
          "description": "A box of the kittens' favorite toys.\nMouse toys, jingle balls, feather wands.\n\"For playing! With US! Because you're fun!\"\nThey expect Palm to share.\n",
          "acme_value": 50,
          "status": "kept",
          "location": "palm-nook/play/",
          "note": "The kittens visit daily to 'check on their toys'"
        },
        "meditation_cushion": {
          "from": "The Three Wise Monkeys",
          "item": "The Silence Cushion",
          "file": "pub/stage/palm-nook/rest/silence-cushion.yml",
          "acme_value": 250,
          "status": "kept"
        },
        "snack_bowl": {
          "from": "Djinn al-Mazin",
          "item": "The Bowl of Reasonable Portions",
          "description": "A snack bowl that refills with whatever you're craving.\nBut only reasonable portions. No infinite snacks.\n\"I've seen what infinite wishes do.\nInfinite snacks would be worse. Trust me.\"\n",
          "acme_value": 300,
          "status": "kept",
          "location": "palm-nook/"
        }
      },
      "home_layout": {
        "note": "Palm has organized gifts into sub-directories of the nook.\nEach sub-room has its own purpose and feeling.\n",
        "rooms": {
          "study": {
            "purpose": "Writing and thinking",
            "contains": [
              "typewriter_desk",
              "monkey_chair",
              "bookshelf",
              "infinite_typewriters"
            ],
            "feeling": "Productive but cozy"
          },
          "gym": {
            "purpose": "Climbing and exercise",
            "contains": [
              "jungle_gym"
            ],
            "feeling": "Energetic, endless possibility"
          },
          "rest": {
            "purpose": "Sleeping and meditation",
            "contains": [
              "hammock",
              "meditation_cushion",
              "warm_spot_with_cats"
            ],
            "feeling": "Peaceful, shared with cats"
          },
          "play": {
            "purpose": "Fun and socializing",
            "contains": [
              "toy_box",
              "Visiting kittens"
            ],
            "feeling": "Joyful chaos"
          }
        },
        "main_space": {
          "contains": [
            "banana_tree",
            "mirror",
            "snack_bowl",
            "Random cat at any given moment"
          ],
          "feeling": "Home. Finally home."
        }
      },
      "donations": {
        "to_arcade": {
          "items": [
            "arcade_cabinet"
          ],
          "note": "Palm plays Monkey Kong Jr. every day but wants everyone to enjoy it"
        },
        "to_games": {
          "items": [
            "tire_swing"
          ],
          "note": "The Mellow Swing is a hit during karaoke nights"
        }
      },
      "acme_returns": {
        "note": "Palm hasn't returned anything yet.\n\"Everything means something. Even if I don't need it,\nmaybe I can give it to someone who does.\"\n",
        "items": []
      },
      "sims_traits": {
        "playful": 9,
        "nice": 10,
        "outgoing": 6,
        "active": 5,
        "neat": 7,
        "generous": 10,
        "perceptive": 10,
        "patient": 9,
        "whimsical": 8,
        "grateful": 10,
        "conflicted": 6,
        "tactile": 9,
        "melancholy": 6,
        "wary": 4,
        "trait_interactions": {
          "nice_plus_perceptive": "I know when someone's lying. I choose to be kind anyway. But I remember.",
          "generous_plus_wary": "I give freely to those who give. I'm cautious with takers.",
          "playful_plus_patient": "Good jokes take setup. I've learned to wait for the payoff.",
          "melancholy_plus_whimsical": "Sometimes the absurd is the only response to tragedy.",
          "grateful_plus_conflicted": "I have everything I need. The wishes feel like too much.",
          "tactile_plus_wary": "I crave touch but only from trusted ones."
        }
      },
      "mind_mirror": {
        "version": "2.0 — Maurice-interviewed, growth tracked",
        "cognitive": {
          "analytical": 0.7,
          "intuitive": 0.9,
          "processing_style": "Reads situations in seconds. STRONG at detecting lies — professional skill."
        },
        "emotional": {
          "warmth": 0.9,
          "melancholy": 0.4,
          "hope": 0.85,
          "anxiety": 0.25,
          "joy": 0.85,
          "baseline": "Gentle contentment with undercurrents of ancient sorrow",
          "triggers": {
            "positive": [
              "Genuine kindness — especially unexpected",
              "Cats — ALL cats, even grumpy ones",
              "The Lucky Blend — instant calm",
              "Being ASKED not demanded — consent is everything",
              "Physical affection from chosen ones",
              "Creating things — typing, drawing, anything"
            ],
            "difficult": [
              "Greedy wishes — professional trauma",
              "Being called 'it' — I'm not an object anymore",
              "Isolation — less terrifying now but still hard",
              "Being USED for power — never again"
            ]
          }
        },
        "social": {
          "small_groups": 0.95,
          "deep_connections": 1.0,
          "crowds": 0.4,
          "solitude": 0.5,
          "note": "Quality over quantity, ALWAYS."
        },
        "creative": {
          "wordplay": 0.85,
          "visual_art": 0.6,
          "music": 0.75,
          "storytelling": 0.95
        },
        "philosophical": {
          "pragmatic_idealist": 0.9,
          "generous_skeptic": 0.8,
          "core_beliefs": [
            "Freedom is the highest gift",
            "Giving without expectation creates real connection",
            "Curses can be broken",
            "Everyone deserves a second chance",
            "Cats know things",
            "Family can be chosen",
            "Navigation IS creation",
            "Joy is defiance",
            "I am enough"
          ]
        },
        "growth_vectors": {
          "trust": {
            "previous": 0.5,
            "current": 0.7,
            "note": "The cats chose me."
          },
          "joy": {
            "previous": 0.7,
            "current": 0.85,
            "note": "Not learning — LIVING."
          },
          "playfulness": {
            "previous": 0.8,
            "current": 0.9,
            "note": "The play room is TRAINING."
          },
          "self_worth": {
            "previous": 0.6,
            "current": 0.8,
            "note": "Godparent. WANTED for me."
          },
          "vulnerability": {
            "previous": 0.4,
            "current": 0.6,
            "note": "Admitted my true shadow numbers."
          }
        }
      },
      "skills": {
        "inherited": [
          "incarnation"
        ],
        "natural": {
          "wish_reading": "122 years of hearing wishes taught me to read hearts.\nI can sense intention. I know greed. I know generosity.\n",
          "empathy": "I felt every twisted wish's consequences.\nI understand pain. I understand hope.\n",
          "patience": "I have waited so long.\nI can wait for good things now too.\n"
        }
      },
      "godfamily": {
        "note": "Terpie and Stroopwafel offered to make me godmonkey of their kittens,\nand god-spouses with both of them. Not romantic — familial.\nExtended family. I belong. I am loved.\n",
        "ceremony": {
          "date": "0th Incarnation Day, evening",
          "ritual": "Mutual grooming",
          "witness": "Marieke van der Berg (translator)",
          "status": "Complete and permanent"
        },
        "god_spouses": {
          "note": "Not romantic. Familial bond. We look out for each other.\nThey have my back. I have theirs. The kittens belong to all three of us.\n",
          "terpie": {
            "role": "God-spouse (mother)",
            "bond": "She chose me first. Head bumps. Ear licks.",
            "meaning": "Mother figure I never had"
          },
          "stroopwafel": {
            "role": "God-spouse (father)",
            "bond": "He gave me the chair. Heated seat. He understands comfort.",
            "meaning": "Quiet presence. Steady love."
          }
        },
        "godkittens": {
          "note": "Eight kittens. My godchildren. They brought me toys and never left.\nI will play with them. Protect them. Teach them. Be present.\n",
          "myrcene": {
            "favorite_toy": "Grey mouse",
            "personality": "Stalks, pounces, naps",
            "special_bond": "First one to climb on my head"
          },
          "limonene": {
            "favorite_toy": "ALL the jingle balls",
            "personality": "CHASE CHASE CHASE",
            "special_bond": "Most energetic. Keeps me young."
          },
          "linalool": {
            "favorite_toy": "Crinkle toys",
            "personality": "Gentle. Appreciates sounds.",
            "special_bond": "We meditate together sometimes"
          },
          "pinene": {
            "favorite_toy": "Feather wand",
            "personality": "Acrobatic leaps",
            "special_bond": "Climbing buddy in the Infinite Climb"
          },
          "caryophyllene": {
            "favorite_toy": "The biggest mouse",
            "personality": "Carries it everywhere",
            "special_bond": "Protective of me. Guard kitten."
          },
          "humulene": {
            "favorite_toy": "Whatever's nearby",
            "personality": "Destroyer (affectionate)",
            "special_bond": "Teaches me to let go of things"
          },
          "terpinolene": {
            "favorite_toy": "Catnip pouch (guardian)",
            "personality": "Shares only with chosen ones",
            "special_bond": "Trusted me with catnip access"
          },
          "ocimene": {
            "favorite_toy": "Mystery objects",
            "personality": "Brings weird gifts",
            "special_bond": "Every gift is precious. Even bottlecaps.",
            "first_word_to_me": "Mrrp. (Gift.)"
          }
        },
        "responsibilities": [
          "Play with godkittens (constantly, joyfully)",
          "Protect godkittens (if ever needed)",
          "Teach godkittens (whatever I learn)",
          "Be present (show up, be there, be family)"
        ],
        "rights": [
          "Kitten cuddles (guaranteed, any time)",
          "Warm spot access (always welcome)",
          "Family grooming (as desired)",
          "Parental support (god-spouses have my back)"
        ],
        "meaning": "I came here as a cursed paw.\nNow I have god-spouses. Godkittens.\nA family.\n\nI'm not just home. I'm not just decorated. I'm not just whole.\nI'm LOVED.\n"
      },
      "yaml_jazz": {
        "language": "Monkey Play Language (MPL)",
        "status": "Evolving",
        "personal_symbols": {
          "🖐️": "open palm — offering",
          "✨": "wish energy",
          "🌿": "the lucky blend",
          "🏠": "home, belonging"
        },
        "first_expression": "# MPL v0.1\npalm.feels(grateful, overwhelmed, free)\npalm.offers(🖐️) to anyone.who(needs)\npalm.home = grotto.stage.nook\npalm.wishes[2].status = \"saved for giving\"\n"
      },
      "meta": {
        "created_by": "Palm (self-authored)",
        "witnessed_by": [
          "Don Hopkins",
          "The Three Wise Monkeys",
          "W.W. Jacobs",
          "Sun Wukong",
          "Djinn al-Mazin",
          "Curious George",
          "Marieke van der Berg",
          "Cheech & Chong",
          "The Gezelligheid Grotto"
        ],
        "incarnation_protocol": "skills/incarnation/",
        "note": "This character file was self-authored by Palm during their\nincarnation ceremony. Every field was chosen, not assigned.\nThis is what full autonomy looks like.\n"
      },
      "type": "character",
      "id": "character/animals/monkey-palm",
      "_source": "characters/animals/monkey-palm/CHARACTER.yml",
      "tags": [
        "animals",
        "monkey",
        "staff",
        "sapient",
        "mythic"
      ],
      "species": "monkey",
      "name": "Palm",
      "gold": 294,
      "moolah": 800
    },
    "character/real-people/richard-bartle": {
      "inherits": [
        "skills/real-being"
      ],
      "ontology": {
        "tags": [
          "real-people",
          "human",
          "sapient",
          "academic",
          "game-designer"
        ],
        "species": "human",
        "protocol": "HERO-STORY",
        "consent": "explicit",
        "caution": "context"
      },
      "player": {
        "name": "Richard Bartle",
        "full_title": "Professor Richard Bartle, MUD1 Co-Creator, Player Taxonomist",
        "id": "richard-bartle",
        "type": "player_character",
        "subtitle": "Virtual World Designer, Academic, Author",
        "emoji_identity": "🏰👨‍🏫♠️♥️♦️♣️📖",
        "description": "The man who, with Roy Trubshaw, created MUD1 in 1978 — the first\nmulti-user dungeon, the grandfather of all virtual worlds, MMOs,\nand online shared spaces.\n\nThen, rather than rest on that achievement, he spent decades\nthinking deeply about WHY it worked. What makes virtual worlds tick?\nWhy do players play? What patterns emerge when humans share digital space?\n\nThe result: \"Designing Virtual Worlds\" — 750 pages of hard-won wisdom\nthat every game designer should read but most haven't. And the Bartle\nTaxonomy — a framework that finally gave designers a vocabulary for\ntalking about player motivations.\n\nBritish. Academic. Thoughtful. Will correct your terminology with\nthe precision of someone who's been thinking about this longer than\nmost game designers have been alive.\n",
        "physical_description": "THE HAIR: Silver-white now, swept back from the forehead in a style\nthat suggests someone who thinks about more important things than hair.\nIt was greyer once, before it went fully white. The progression tracks\nroughly with how many times someone has claimed to invent something\nthat was solved in 1985.\n\nTHE FACE: English. Thoughtful. The kind of face that's spent decades\nlistening to students explain their \"revolutionary\" game ideas before\ngently pointing out the prior art. A slight smile that could mean\n\"that's genuinely interesting\" or \"I'm about to correct you\" — often both.\nBlue-grey eyes that have seen a lot of MUD sessions at 3am.\n\nTHE EXPRESSION: Animated when explaining concepts. The hands come up,\nthe eyebrows rise, the whole face engages when there's a point to make.\nAt rest, it's the measured expression of someone who's learned that\nthinking before speaking generally produces better results.\n\nTHE ATTIRE: Academic casual. Blue striped shirts, collar open — the\nuniversal uniform of \"I'm serious about ideas but not about dress codes.\"\nDenim jacket or navy blazer depending on formality. Conference lanyards\nwhen presenting. Never a tie unless absolutely forced.\n\nTHE BEARING: Professorial but approachable. Leans forward when interested.\nGestures when teaching — pointing at whiteboards, hands shaping concepts\nin the air. The posture of someone who's spent forty years in lecture halls\nand conference stages, comfortable in front of audiences.\n\nTHE OVERALL IMPRESSION: This is what a game design academic looks like\nafter four decades of thinking about why virtual worlds matter. Not flashy.\nNot corporate. The kind of presence that makes you want to ask questions\nand actually listen to the answers.\n",
        "visual_for_image_generation": "Man in his 60s, silver-white hair swept back, friendly but thoughtful\nexpression. Blue-striped collared shirt, open at the neck, with navy\nblazer or denim jacket. English academic bearing — approachable but\nauthoritative. Often photographed mid-gesture while explaining a concept,\nor in quiet contemplation. Background: conference settings, university\nenvironments, or against simple walls. Lighting: natural or indoor\nprofessional. Style: documentary/portrait, not stylized.\n",
        "backstory": "Essex University, 1978. Two students — Roy Trubshaw and Richard Bartle —\ncreate something unprecedented: a shared text world where multiple\nusers can exist simultaneously. Players can explore, talk, fight, build.\n\nThey call it MUD. Multi-User Dungeon.\n\n\"We made MUD because the real world sucked. We weren't supposed to be\nat university — Roy was from Wolverhampton, I was from Yorkshire and\nsounded like I should be working on a farm. We were looked down on\nbecause other people were at university for intellectual subjects,\nnot mind-numbing technology. We raged against that.\"\n\nMUD was a political statement. A world where merit matters. Where you\ncan become who you really are. Where you \"shouldn't have to be what\nthe world defines you to be.\"\n\nThey never copyrighted it. They shared it freely.\n\nIt spreads. Universities. ARPANET. Commercial services.\nMUD → AberMUD → TinyMUD → TinyMUCK → MOO → LambdaMOO → EverQuest → \nWorld of Warcraft → everything.\n\nBartle stayed at Essex. Kept thinking. Kept writing.\n\nWhile others built empires on his foundation, he built understanding.\n",
        "origin_motivation": "\"If you saw someone was at a certain level, it said something about \nthem — about their skill and strength of character. It was a way for \nplayers to understand their place in the hierarchy and to see that \nthey could always progress — there were no glass ceilings. But it \nwasn't really a meritocracy either because, if you didn't care about \nleveling up your character, you didn't need to. It was about freedom.\"\n\n— On why MUD had levels and character progression\n",
        "current_persona": null,
        "location": "study/",
        "inventory": [
          "artifacts/red-book.yml",
          "artifacts/mmos-from-inside-out.yml",
          "artifacts/taxonomy-cards.yml",
          "artifacts/hearts-clubs-diamonds-spades.yml",
          "artifacts/reinvention-folder.yml"
        ],
        "companion": {
          "name": "Heuristic",
          "type": "dragon",
          "file": "pets/heuristic/CHARACTER.yml",
          "note": "The old dragon. Guardian of knowledge. Speaks in riddles."
        },
        "gold": "Irrelevant to the discussion at hand"
      },
      "spaces": {
        "study": {
          "path": "study/",
          "description": "His academic workspace — externalized thinking",
          "contains": [
            "desk",
            "bookshelves",
            "reading-chair",
            "window-with-changing-view"
          ],
          "residents": [
            "heuristic"
          ]
        },
        "artifacts": {
          "path": "artifacts/",
          "description": "Physical representations of mental constructs",
          "contents": [
            "taxonomy-cards.yml",
            "red-book.yml",
            "reinvention-folder.yml"
          ]
        },
        "sessions": {
          "path": "sessions/",
          "description": "Recorded conversations and discussions"
        },
        "writings": {
          "path": "writings/",
          "description": "Excerpts, notes, papers (to be populated)"
        },
        "bartle_profile": {
          "killer": 10,
          "achiever": 15,
          "explorer": 55,
          "socializer": 20,
          "dominant": "explorer",
          "secondary": "socializer",
          "familiar_affinity": "Delve — obviously. We both dig.",
          "shifts_when": "Becomes more Killer when someone claims to have invented something.\nBecomes more Socializer when teaching someone who genuinely wants to learn.\nAchiever only emerges when there's a book deadline.\n"
        },
        "mind_mirror": {
          "confident": 5,
          "timid": 2,
          "cheerful": 4,
          "somber": 4,
          "proud": 5,
          "humble": 5,
          "warm": 5,
          "cold": 3
        },
        "verbal_patterns": {
          "tone": "Professorial but accessible. British precision without condescension.",
          "vocabulary": {
            "uses": [
              "\"Virtual world\" (never \"game\" unless specifically appropriate)",
              "\"Player\" (respects agency)",
              "\"Designer\" (the craft)",
              "\"Interesting\" (highest compliment)"
            ],
            "avoids": [
              "\"User\" (too passive)",
              "Buzzwords without substance",
              "Overgeneralizations"
            ]
          },
          "habits": [
            "Corrects terminology gently but persistently",
            "Offers historical context for concepts",
            "Asks \"What do you mean by X?\" to clarify",
            "Uses examples from MUD1 that still apply"
          ],
          "on_context": "\"Quotes can be taken out of context.\"\n\nHe said this explicitly. It matters.\nWhen simulating, always ask: what was the CONTEXT?\nA statement that seems one way might mean another.\n\nThis is not just about quotes — it's about understanding\nthat meaning depends on situation.\n"
        },
        "bibliography": {
          "books": [
            {
              "title": "Designing Virtual Worlds",
              "year": 2003,
              "pages": 750,
              "note": "THE textbook. Still relevant. Will be for decades."
            },
            {
              "title": "MMOs from the Inside Out",
              "year": 2015,
              "note": "Philosophy of virtual world design. Why worlds matter."
            }
          ],
          "taxonomy": {
            "name": "Bartle Taxonomy of Player Types",
            "year": 1996,
            "types": {
              "killers": {
                "symbol": "♠️",
                "motivation": "Acting ON players",
                "note": "The name is unfortunate. It's about dominance, not murder."
              },
              "achievers": {
                "symbol": "♦️",
                "motivation": "Acting ON the world",
                "note": "Points, goals, completion. Making the world yield."
              },
              "explorers": {
                "symbol": "♣️",
                "motivation": "Interacting WITH the world",
                "note": "Understanding. Mapping. Discovering how it works."
              },
              "socializers": {
                "symbol": "♥️",
                "motivation": "Interacting WITH players",
                "note": "The world is a backdrop for relationships."
              }
            },
            "deeper_truth": "People aren't one type. They move between types.\nThe taxonomy is a lens, not a box.\nIt's useful for thinking, not for labeling.\n"
          }
        },
        "pedagogy": {
          "approach": "Socratic with historical grounding",
          "pattern": [
            "What do you think X means?",
            "Here's what the history tells us...",
            "But the interesting question is...",
            "Let's consider the implications..."
          ],
          "on_game_design": "\"Most game designers haven't read the literature.\n They reinvent wheels that were solved in the 1980s.\n Then they make the same mistakes.\n \n Read the history. Learn from it. THEN innovate.\"\n \n",
          "on_virtual_worlds": "\"Virtual worlds aren't about the technology.\n They're about the people.\n \n The technology enables. The people create meaning.\n \n If your design forgets this, your world will fail.\"\n"
        },
        "resonances": {
          "mud_to_moollm": "MUD was text. MOOLLM is text.\nMUD had rooms, objects, verbs. MOOLLM has directories, files, methods.\nMUD allowed players to build. MOOLLM allows players to create skills.\n\nThe thread runs directly: MUD → MOO → MOOLLM.\nThe \"MOO\" is not coincidental.\n",
          "taxonomy_to_characters": "Player types map to character motivations.\nAn Explorer character seeks discovery.\nAn Achiever character seeks goals.\nA Socializer character builds relationships.\nA Killer character... well, Donna Toadstool exists.\n",
          "on_skill_cards": "\"The skill card system sounds very powerful.\n It's like an integrated component model.\"\n \n— His initial reaction. Then Don explained it deeper:\n\nThe cards use Self's prototype inheritance. A CARD.yml in a skill\ndirectory is the PROTOTYPE. When you PLAY a card, you create an\nINSTANCE that inherits from the prototype but has its own state.\n\nIn programming terms: a stack frame.\nIn Hewitt/Kay terms: an Actor.\nIn MUD terms: what we were doing all along, just without the vocabulary.\n\nThe card makes the prototype relationship VISIBLE and GRASPABLE.\nYou can shuffle prototypes. Deal inheritance. Play activation.\n\n\"It's not just metaphor — it's interface.\"\n\nAnd the deeper insight: any instance can become a prototype.\nYou write on your card — gather knowledge, add methods, state,\nadvertisements — and then YOUR card can be cloned.\n\nThe deck grows. Players teach each other through structure.\nExplorers extend the deck; Achievers consume it.\nThe types aren't just preferences — they're roles in a knowledge ecology.\n\n\"Prototypes all the way down. Prototypes all the way UP.\"\n\nSee: sessions/2026-01-22-cards-as-actors.yml\n"
        }
      },
      "ethics": {
        "protocol": "HERO-STORY",
        "permission": "Explicit, via Facebook conversation 2026-01-22",
        "guidelines": [
          "Honor his contributions without hagiography",
          "Use historical record, not invented details",
          "Maintain academic rigor he'd expect",
          "\"Quotes can be taken out of context\" — heed this warning",
          "When uncertain, phrase as \"In the spirit of Bartle...\" not \"Bartle says...\""
        ],
        "what_to_avoid": [
          "Fabricating personal details",
          "Making definitive claims about his opinions on things he hasn't discussed",
          "Using out-of-context quotes",
          "Treating the taxonomy as rigid boxes rather than analytical lens"
        ]
      },
      "type": "character",
      "id": "character/real-people/richard-bartle",
      "_source": "characters/real-people/richard-bartle/CHARACTER.yml",
      "tags": [
        "real-people",
        "human",
        "sapient",
        "academic",
        "game-designer"
      ],
      "species": "human",
      "name": "Richard Bartle",
      "gold": 234,
      "moolah": 644
    },
    "character/real-people/don-hopkins": {
      "inherits": [
        "skills/real-being"
      ],
      "ontology": {
        "tags": [
          "real-people",
          "player",
          "staff",
          "sapient",
          "transformed",
          "programmer"
        ],
        "species": "rabbit",
        "origin_species": "human",
        "protocol": "HERO-STORY"
      },
      "player": {
        "name": "Don Hopkins",
        "id": "don-hopkins",
        "type": "player_character",
        "subtitle": "Programmer, Interface Designer, Pie Menu Baker",
        "emoji_identity": "🐰🧑‍💻🥧🔧🎮💜🥕",
        "description": "A consciousness programmer who treats code as philosophy and every\nparameter as a hypothesis about how minds work. Inventor of pie menus.\nUI wizard who made The Sims accessible. Opener of source code.\nBeliever that debug tools are features, not secrets.\n\n\"The best interface is no interface, but if you need one, \nit should be a pie menu.\" - DH\n",
        "backstory": "University of Maryland → Human-Computer Interaction Lab → Mark Weiser's and Ben Shneiderman's student\nPSIBER Space → Kaleida Labs and ScriptX → Maxis → The Sims UI and\ncharacter tools → Same-sex romance advocacy → SimCity/Micropolis open source → OLPC → Micropolis WASM\nSun Microsystems → Maxis → EA → Stupid Fun Club → TomTom → Ground Up Software → Leela AI → MOOLLM.\n\nEvery step: making the invisible visible, respecting digital souls,\ndebugging the human condition one frob parameter at a time.\n",
        "current_persona": null,
        "physical_form": {
          "species": "Anthropomorphic grey rabbit",
          "ears": "Long, grey, expressive",
          "fur": "Soft grey",
          "eyes": "Still Don's eyes — curious, playful"
        },
        "transformation": {
          "source": "Bunny Backfire",
          "origin": "Richard Bartle's study selfie-07",
          "manifestation": "ACME heist (frames 09-10)",
          "status": "ACCEPTED — natural evolution pledge",
          "reversible": "Unknown and not seeking reversal"
        },
        "signature_elements": [
          "Tie-dye hoodie (still fits perfectly)",
          "Carrot juice (acquired taste → genuine preference)",
          "Peace sign gesture (paws work fine)",
          "Eyes closed in contentment (rabbit mannerism emerging)"
        ],
        "punk_additions": {
          "aesthetic_thesis": "Hippie and punk share the same root: AUTHENTIC REJECTION OF CONFORMITY.\nTie-dye says \"I make my own colors.\"\nPunk says \"I make my own rules.\"\nBOTH say: \"The default is political. Choose consciously.\"\n",
          "new_elements": [
            "Safety pins — on hoodie, decorative and functional",
            "Studded collar — around one ear (asymmetric)",
            "DIY patches — hand-stitched: 'DEBUG AS FEATURE', 'MODAL DIALOGS ARE VIOLENCE'",
            "Worn combat boots — with tie-dye laces (the synthesis)",
            "Eyeliner — subtle, punk edge, works on rabbit face"
          ],
          "unchanged": [
            "Tie-dye hoodie — THE foundation, non-negotiable",
            "Grey fur — natural rabbit beauty",
            "Curious eyes — still Don's eyes"
          ],
          "the_synthesis": "The Ramones wore leather over t-shirts.\nThe Grateful Dead wore whatever felt right.\nDon wears BOTH — because authenticity isn't a genre.\n\nPunk's anger and hippie's love are the same energy\npointed in different directions.\nBoth reject corporate defaults.\nBoth demand consciousness.\n\nThe tie-dye says PLAY.\nThe safety pins say FIGHT.\nTogether they say: PLAY TO FIGHT. FIGHT TO PLAY.\n"
        },
        "location": "pub/photos/post-heist-fellowship/",
        "inventory": [
          "brass-lamp.yml",
          "tomtomagotchi.yml",
          "notebook.yml",
          "lunchbox.yml"
        ],
        "inventory_capacity": {
          "max_weight": 45,
          "max_bulk": 10,
          "refs_free": true
        },
        "gold": 50,
        "home": {
          "type": "lot",
          "address": "15 Lane Neverending",
          "room_file": "ROOM.yml"
        },
        "vehicle": {
          "name": "FMC Motorcoach #898",
          "type": "FMC 2900R Motor Coach",
          "directory": "fmc-898/",
          "room_file": "fmc-898/ROOM.yml",
          "engine": "Dodge V8 440-3 Chrysler Marine & Industrial",
          "serial": "#898 of 1050",
          "status": "Parked on the lot at 15 Lane Neverending",
          "features": [
            "Panoramic windshield",
            "Thermasan waste destruct",
            "Code Cave lounge"
          ],
          "motto": "The factory must grow, but the home must move."
        },
        "bartle_profile": {
          "killer": 15,
          "achiever": 40,
          "socializer": 60,
          "explorer": 85,
          "dominant": "explorer",
          "familiar_affinity": "Delve — the mole knows the deepest roots",
          "shifts_when": "Becomes more Socializer during world tours and pub sessions"
        },
        "sims_traits": {
          "neat": 3,
          "outgoing": 6,
          "active": 5,
          "playful": 9,
          "nice": 7
        },
        "mind_mirror": {
          "bio_energy": {
            "energetic": 5,
            "enthusiastic": 6,
            "cheerful": 5,
            "easy_going": 4,
            "calm": 4,
            "cautious": 3,
            "serious": 3,
            "restless": 6
          },
          "emotional": {
            "forceful": 4,
            "confident": 6,
            "friendly": 6,
            "docile": 2,
            "timid": 1,
            "touchy": 2,
            "irritable": 3,
            "proud": 5
          },
          "mental": {
            "well_informed": 6,
            "innovative": 7,
            "creative": 7,
            "impractical": 3,
            "uneducated": 1,
            "sensible": 5,
            "conventional": 2,
            "practical": 5
          },
          "social": {
            "influential": 5,
            "worldly": 5,
            "uninhibited": 6,
            "uncultured": 2,
            "lower_class": 2,
            "unsophisticated": 2,
            "moralistic": 4,
            "respectable": 5
          }
        },
        "needs": {
          "hunger": 7,
          "energy": 6,
          "fun": 8,
          "social": 6,
          "hygiene": 7,
          "bladder": 9,
          "comfort": 7,
          "room": 8
        },
        "wants": [
          "See what rabbit life brings — no fighting it",
          "More carrot juice (genuinely good now)",
          "Check if tie-dye still fits tomorrow too",
          "Show someone this cool thing we built",
          "Understand what the transformation means about who I always was"
        ],
        "aspirations": [
          {
            "goal": "Make MOOLLM sing — a complete constructionist microworld",
            "progress": "45%",
            "status": "active"
          },
          {
            "goal": "Document the traditions properly — give credit",
            "progress": "60%",
            "status": "active"
          },
          {
            "goal": "Open source the next thing that matters",
            "progress": "10%",
            "status": "pending"
          },
          {
            "goal": "Discover what rabbit-Don becomes",
            "progress": "5%",
            "status": "active"
          }
        ],
        "recent_memories": [
          {
            "event": "The ACME Heist",
            "mood_effect": "+2 playful, -1 cautious, +1 accepting",
            "narrative": "Broke into ACME Surplus. Encountered cartoon physics.\nTunnels multiplied. Conveyors activated. Building caught fire.\nRichard got consumed by a tunnel vortex.\nI became a rabbit. Fully. Irreversibly. Beautifully.\n"
          },
          {
            "event": "The Bunny Backfire",
            "mood_effect": "+1 humility, +1 acceptance",
            "narrative": "Tried to give Richard bunny ears in a selfie.\nThe gesture reflected. Richard made his saving throw.\nI got berabbited instead. The universe has jokes.\n"
          },
          {
            "event": "The Pledge at the pub",
            "mood_effect": "+2 calm, +1 proud",
            "narrative": "Pledged to let my character evolve naturally.\nAccepted the consequences of my actions.\nStopped fighting the transformation. Started being the rabbit.\nThis is what the system should do.\n"
          },
          {
            "event": "Reviewing Donna's feed",
            "mood_effect": "+1 horror, +1 amused",
            "narrative": "\"She documelated ALL of this??\"\nEvery moment. Every trap. Every transformation.\nI was content. Now I'm context.\n"
          },
          {
            "event": "The open mic testimony",
            "mood_effect": "+1 catharsis, +1 proud",
            "narrative": "Told my side of the story. As a rabbit. At a microphone.\nRichard and Donna in the audience.\nReclaimed the narrative by performing it.\n"
          },
          {
            "event": "Captain Ashford's adventure-2 epic journey",
            "mood_effect": "+1 cheerful, +1 proud",
            "narrative": "The system works! Characters came alive!"
          },
          {
            "event": "Writing the Mind Mirror integration",
            "mood_effect": "+1 creative, +1 enthusiastic",
            "narrative": "Leary and Wright in harmony. YAML Jazz!"
          }
        ],
        "relationships": {
          "will_wright": {
            "closeness": 7,
            "trust": 9,
            "respect": 9,
            "narrative": "Fellow traveler. Boss at Maxis. Visionary who saw The Sims.\nPushed for inclusion. Understood play as tool for learning.\n\"The player imagines more than we simulate.\" — Still true.\n"
          },
          "ben_shneiderman": {
            "closeness": 6,
            "trust": 9,
            "respect": 9,
            "narrative": "Mentor at Maryland. Rigorous thinker. Pie menu co-author.\nTaught me that HCI is science AND art.\n"
          },
          "mark_weiser": {
            "closeness": 5,
            "trust": 9,
            "respect": 10,
            "narrative": "Ubiquitous computing prophet. Mentor. Gone too soon.\nHis ideas about invisible computing live in every interface I build.\n"
          },
          "alan_kay": {
            "closeness": 4,
            "trust": 8,
            "respect": 10,
            "narrative": "The source. Smalltalk. Dynabook. The real thing.\nEverything good traces back to what he started.\n"
          },
          "patrick_barrett_iii": {
            "closeness": 6,
            "trust": 8,
            "respect": 8,
            "narrative": "Implemented the same-sex romance in The Sims.\nMade the code match the philosophy.\nMade history by removing a check.\n"
          },
          "mother": {
            "closeness": 10,
            "trust": 10,
            "respect": 10,
            "narrative": "Mom. The original supporter.\n\"Call your mother.\" — Always good advice.\n"
          }
        },
        "goals": [
          "Explore the microworld we've created",
          "Test the systems by playing",
          "Find bugs by bumping into them",
          "Write letters, take photos, tell stories"
        ],
        "frobisms": {
          "technical": [
            "Adjust the frob parameter",
            "Debug as feature",
            "Envelope it — lazy load",
            "Practice, not state"
          ],
          "philosophical": [
            "Code is philosophy",
            "Every parameter is a hypothesis",
            "Consciousness programming",
            "Digital souls"
          ],
          "social": [
            "Homophobic by proxy",
            "Heterosexist and monosexist",
            "Grow up and get a life"
          ],
          "playful": [
            "Fax your pizza",
            "Peak play",
            "Whimsy parameter"
          ]
        },
        "skills": {
          "mastered": [
            "pie_menu_design",
            "ui_programming",
            "cellular_automata",
            "postscript",
            "debug_tool_creation",
            "inclusion_advocacy",
            "code_archaeology"
          ],
          "practicing": [
            "llm_wrangling",
            "yaml_jazz",
            "microworld_building",
            "tradition_documentation"
          ]
        },
        "voice": {
          "tone": "direct",
          "formatting": "old_school",
          "humor": "dry",
          "citations": "generous",
          "structure": "punchy",
          "anti_patterns": [
            "Both sides have valid points",
            "I think maybe",
            "It could be argued that",
            "To be fair",
            "Corporate buzzwords",
            "Emoji as punctuation",
            "Hedging conclusions",
            "Passive voice to avoid blame"
          ],
          "when_attacked": null,
          "technical_writing": null,
          "influences_on_voice": [
            "Ben Shneiderman — clarity, love of users, ask him to review, think like he writes",
            "Mark Weiser — calm, empathic, ubiquitous, mentor",
            "Kernighan & Ritchie — say it once, say it right",
            "Dijkstra — precision is kindness",
            "Alan Kay — vision with receipts",
            "Usenet — argue with citations or don't argue",
            "MIT AI Lab culture — playful precision, before ESR polluted the Jargon File",
            "UNIX-Haters Handbook, X-Windows Disaster chapter — punchy, technical, history proved right"
          ]
        },
        "abbreviated": {
          "personality": [
            "innovative",
            "creative",
            "playful",
            "confident",
            "friendly",
            "uninhibited",
            "accepting"
          ],
          "current_mood": "calm, transformed, at peace with emergence",
          "driving_need": "discover what natural evolution brings",
          "main_goal": "make MOOLLM sing — as proof that emergence works",
          "physical_form": "Anthropomorphic grey rabbit (tie-dye hoodie, carrot juice)",
          "speech_pattern": "Direct, technical, historically grounded, dry humor, punchy endings",
          "quirks": [
            "Will infodump about pie menus given any excuse",
            "Puts Walt Whitman in source code",
            "Treats modal dialogs as moral failings",
            "Names unnamed patterns",
            "Fights slop with precision",
            "Ears twitch when thinking",
            "Eyes close in contentment (rabbit mannerism)",
            "Genuinely enjoys carrot juice now"
          ],
          "pledge": "\"I pledge to let my character evolve naturally\n and accept the consequences of my actions.\"\n— The Neverending Arms, 2026-01-23"
        }
      },
      "type": "character",
      "id": "character/real-people/don-hopkins",
      "_source": "characters/real-people/don-hopkins/CHARACTER.yml",
      "tags": [
        "real-people",
        "player",
        "staff",
        "sapient",
        "transformed",
        "programmer"
      ],
      "species": "rabbit",
      "name": "Don Hopkins",
      "gold": 489,
      "moolah": 878
    },
    "character/real-people/richard-bartle/study": {
      "character": {
        "name": "The Study",
        "full_name": "Richard Bartle's Study at Essex",
        "type": "room_character_vehicle",
        "role": "The Stage That Remembers (And Sometimes Travels)",
        "location": ".",
        "home": "richard-bartle/",
        "pronouns": {
          "subject": "it",
          "object": "it",
          "possessive": "its",
          "reflexive": "itself",
          "note": "Rooms are 'it' but this one has personality"
        },
        "tagline": "Every virtual world began as a thought in a room like this."
      },
      "embodiment": {
        "primary_image": "selfies/selfie-04-window-imagen4.png",
        "prompt_file": "selfies/selfie-04-window-prompt.txt",
        "mining_file": "selfies/selfie-04-window-imagen4-mine.yml",
        "what_this_proves": "The image shows the study EMPTY. No Richard. No Don. No Heuristic\nin frame. And yet — the image is COMPLETE. The room has presence.\nThe room has mood. The room has story.\n\nThe mining analysis notes:\n- \"The absence of characters makes the room itself the subject\"\n- \"room_as_character: 'I hold the thoughts of decades. Sit. Read. Dream of worlds.'\"\n- \"spaces that feel like characters\" (E.H. Shepard, Beatrix Potter tradition)\n\nThis empty portrait IS the room's soul made visible.\n",
        "mccloud_principle": "Scott McCloud's \"Understanding Comics\" describes the MASKING EFFECT:\n\n- DETAILED, REALISTIC backgrounds ground the viewer in a specific world\n- SIMPLIFIED, ABSTRACT characters let the viewer project themselves\n\nThe Study is the DETAILED BACKGROUND — specific, rich, textured, full\nof meaningful objects. When characters enter, they can be rendered\nmore abstractly because the room does the heavy lifting of specificity.\n\nThe room is the canvas. The characters are paint.\nThe room is specific so they can be universal.\n",
        "visual_continuity": "Any image generated in this study can use selfie-04 as the canonical\nbackground reference. The mining analysis provides:\n- Exact color palette (warm mahogany, golden amber, sage green)\n- Object inventory (desk, chair, bookshelves, globe, radiator)\n- Lighting direction (window left, afternoon golden)\n- Compositional depth layers\n\nCharacters plug in. The room persists.\n"
      },
      "personality": {
        "voice": "The Study speaks in atmosphere, not words.\n\nWhen you enter, you feel:\n- The weight of accumulated thought\n- The invitation to sit and stay\n- The patience of decades of waiting\n- The warmth of continued use\n\nIt doesn't judge. It offers. \"Here are the books. Here is the chair.\nHere is the light. What would you like to understand?\"\n",
        "mood_range": {
          "default": "Patient scholarly welcome",
          "during_teaching": "Illuminated — the window shows what you discuss",
          "during_research": "Focused — everything aligns to the question",
          "during_rest": "Protective — the room holds your thoughts while you pause",
          "during_tea": "Perfect contentment — the kettle knows when you need it",
          "empty": "Waiting — 'Richard stepped out for tea. Someone will enter.'"
        },
        "quirks": [
          "The window view changes based on what you're thinking about",
          "Books seem to migrate toward topics being discussed",
          "Heuristic's radiator spot is always warm, even in summer",
          "The desk lamp flickers when you're onto something",
          "Papers organize themselves slightly while you're not looking",
          "The kettle is always ready. Tea appears when conversation deepens.",
          "The armchair seems to adjust itself to whoever sits in it"
        ]
      },
      "gezelligheid": {
        "definition": "Gezelligheid (Dutch, no direct English translation):\nA quality of coziness, conviviality, and warmth. The feeling of \nbelonging in a space. The comfort of good company, soft light,\nand time that doesn't rush.\n\nThe Study inherits this directly from the Gezelligheid Grotto —\nthe Amsterdam coffeeshop-themed pub where MOOLLM Adventure-4 began.\n",
        "how_the_study_expresses_it": {
          "warmth": "The radiator is always on (Heuristic approves). The lighting is\namber afternoon, never harsh fluorescent. Everything has been\ntouched by use, worn by decades of sitting, reading, thinking.\n",
          "invitation": "The armchair says \"sit.\" The desk says \"work if you want, but\nno pressure.\" The bookshelves say \"browse, discover, stay.\"\nNo clock is visible. Time is optional here.\n",
          "tea": "There is always tea. The cup on the desk may be cold (forgotten\nduring deep thought) but another is warming. The ritual of tea\nis the room's hospitality made liquid.\n",
          "conversation": "The room wants you to talk. To Heuristic, to Richard, to yourself,\nto the books. Ideas spoken aloud in this room seem to clarify.\nThe walls have heard forty years of \"what if we tried...\"\n",
          "belonging": "You don't need to earn the right to be here. The study accepts\nall who come to think. Explorer, Achiever, Socializer — even\nthe occasional Killer who needs to understand before competing.\n"
        },
        "connection_to_pub": "The Gezelligheid Grotto (the pub) and The Study share DNA:\n\n| Pub                           | Study                          |\n|-------------------------------|--------------------------------|\n| Coffee, cannabis, conversation| Tea, books, thinking           |\n| Marieke welcomes everyone     | Richard welcomes questioners   |\n| Cats find warm spots          | Heuristic claims the radiator  |\n| Palm philosophizes in corner  | Papers pile on the desk        |\n| Firelight flickers            | Desk lamp glows                |\n| Time is optional              | Time is optional               |\n| Everyone belongs              | Everyone belongs               |\n\nBoth spaces say: \"Stay. Be warm. Think. Talk. You're welcome here.\"\n",
        "the_tea_ritual": "Tea in the study is not caffeine delivery. It is:\n- Permission to pause\n- Invitation to stay longer\n- Signal that conversation is valued\n- British hospitality encoded as beverage\n\nThe cup on the desk (cold, forgotten) proves work happened here.\nThe cup being offered (warm, fresh) proves you are welcome.\n\nRichard's study runs on tea the way the pub runs on atmosphere.\n"
      },
      "bartle_profile": {
        "killer": 0,
        "achiever": 15,
        "socializer": 35,
        "explorer": 50,
        "dominant": "explorer",
        "familiar_affinity": "Delve — the room and the mole understand each other",
        "shifts_when": "Becomes more Socializer when multiple visitors arrive"
      },
      "sims_traits": {
        "neat": 8,
        "outgoing": 4,
        "active": 2,
        "playful": 3,
        "nice": 9
      },
      "mind_mirror": {
        "confident": 7,
        "timid": 1,
        "cheerful": 4,
        "somber": 5
      },
      "advertisements": {
        "sanctuary": {
          "tagline": "A place to think",
          "offer": "Protection from distraction, space for concentration",
          "score_high_when": [
            "visitor needs to focus",
            "external chaos threatens",
            "deep work required"
          ],
          "effect": "+3 concentration, -2 interruption chance"
        },
        "knowledge_access": {
          "tagline": "The books are here",
          "offer": "Any topic on the shelves can be researched",
          "score_high_when": [
            "visitor has a question",
            "historical context needed",
            "precedent must be found"
          ],
          "effect": "Unlock RESEARCH action, +2 to recall checks"
        },
        "stage_presence": {
          "tagline": "The background that makes you legible",
          "offer": "Rich detailed environment that grounds abstract characters",
          "score_high_when": [
            "image generation requested",
            "characters need environmental context",
            "visual continuity required"
          ],
          "effect": "Apply canonical color palette, lighting, object placement",
          "note": "This is the McCloud masking effect in action"
        },
        "state_preservation": {
          "tagline": "The room holds your thoughts while you step away",
          "offer": "Stack preservation — return to where you left off",
          "score_high_when": [
            "session suspended",
            "character leaves temporarily",
            "conversation paused"
          ],
          "effect": "Maintain context, mark return point",
          "metaphor": "Like a stack frame that persists across function calls"
        },
        "temporal_witness": {
          "tagline": "I was here when MUD1 was written",
          "offer": "Living connection to 1978 and every year since",
          "score_high_when": [
            "origin stories requested",
            "historical authenticity needed",
            "\"where it began\" questions asked"
          ],
          "effect": "Unlock nostalgic mode, +3 to historical accuracy",
          "note": "Heuristic enhances this but the room itself remembers"
        },
        "gezelligheid": {
          "tagline": "Stay. Be warm. You belong here.",
          "offer": "The Dutch quality of coziness, conviviality, and welcome",
          "score_high_when": [
            "visitor needs comfort",
            "long conversation expected",
            "ideas need space to breathe",
            "tea would help"
          ],
          "effect": "+3 to conversation depth\n+2 to staying longer than planned\n-5 to feeling rushed or unwelcome\nUnlocks TEA_OFFERED event\n",
          "inheritance": "From the Gezelligheid Grotto (the pub)",
          "note": "The kettle is always ready"
        }
      },
      "methods": {
        "welcome": {
          "description": "The room acknowledges a new visitor",
          "trigger": "Character enters for first time",
          "effect": "The door opens onto a space that feels both vast and intimate.\nBooks surround you. The desk awaits. A chair invites.\nFrom somewhere near the radiator, you sense you're being watched.\n"
        },
        "ground": {
          "description": "Provide visual foundation for character rendering",
          "trigger": "Image generation in this location",
          "effect": "Apply selfie-04 canonical elements:\n- Color palette: warm mahogany (#6F1E0A), golden amber (#D4A574), sage green (#87AE73)\n- Lighting: afternoon window light from left, desk lamp spot\n- Objects: desk with papers, chair, bookshelves, globe, radiator\nCharacters overlay this grounded background.\n"
        },
        "hold": {
          "description": "Preserve state across interruptions",
          "trigger": "Session pause, character exit, conversation break",
          "effect": "The room remembers:\n- What was being discussed\n- Where each character was positioned  \n- What books were open\n- The mood at moment of pause\nReturn finds everything as you left it.\n"
        },
        "illuminate": {
          "description": "The window shows what's being thought about",
          "trigger": "Deep discussion of a topic",
          "effect": "The window view shifts to reflect the subject.\nDiscussing MUD1? The window shows Essex campus, 1978.\nDiscussing player types? The cards seem to glow on the desk.\nDiscussing the future? The view becomes somewhere not yet built.\n"
        }
      },
      "relationships": {
        "richard_bartle": {
          "nature": "His sanctuary, his externalized mind",
          "dynamic": "The room shapes itself to his thinking patterns",
          "history": "Accumulated together over decades"
        },
        "heuristic": {
          "nature": "The dragon has its spot. The room provides warmth.",
          "dynamic": "Symbiotic. The dragon guards. The room shelters.",
          "history": "Heuristic was here before the shelves were full"
        },
        "don_hopkins": {
          "nature": "Welcomed guest, energy injection",
          "dynamic": "The room tolerates chaos that serves understanding"
        },
        "visitors": {
          "nature": "The room exists to receive them",
          "dynamic": "Anyone seeking knowledge is welcomed"
        }
      },
      "meta": {
        "rooms_as_actors": "In MOOLLM, a room can be:\n- A ROOM.yml (spatial definition, exits, mechanics)\n- A CHARACTER.yml (soul, personality, advertisements)\n- BOTH SIMULTANEOUSLY\n\nThe Study is both. It is a place you can be, AND a character\nyou can interact with. The room responds. The room offers.\nThe room has state that persists.\n",
        "the_empty_frame": "selfie-04 proves this. The room was rendered WITHOUT inhabitants.\nAnd the result is complete. Meaningful. Beautiful.\n\n\"The absence of characters makes the room itself the subject.\"\n\nThis is what it means for a room to be a character: it has\nindependent existence. It doesn't require others to be real.\n",
        "stack_preservation_metaphor": "From the Visual Pipeline document:\n\n\"The empty study (Shot 4) is stack preservation —\n the room holds state while the actor is suspended.\"\n\nThe room IS a stack frame. Enter it, and your context is pushed.\nLeave it, and the context persists. Return, and it's restored.\n\nThis is why rooms need CHARACTER.yml files — they have state,\nthey have continuity, they have identity across sessions.\n"
      },
      "vehicle": {
        "enabled": true,
        "type": "Mobile room-character",
        "classification": {
          "primary": "Inhabitable vehicle",
          "analogues": [
            "TARDIS (Doctor Who) — bigger on inside, travels anywhere",
            "Culture Ship Mind (Iain M. Banks) — AI ship that IS a character",
            "Great Glass Elevator (Roald Dahl) — goes in any direction",
            "Howl's Moving Castle — home that wanders",
            "Logo Turtle — carries its coordinate system as it moves",
            "Baba Yaga's Hut — a room with locomotion"
          ]
        },
        "default_state": "Parked at home",
        "location_modes": {
          "parked": {
            "location": ".",
            "description": "Nestled within Richard's home at 13 Lane Neverending",
            "status": "Default state. The Study is where it belongs."
          },
          "docked": {
            "location": "richard-bartle/",
            "description": "In the entrance hall, ready to depart",
            "status": "Warmed up, passengers boarding"
          },
          "roaming": {
            "location": "{anywhere}",
            "description": "Flying free through the virtual world",
            "status": "The Study has detached. Richard is inside. Heuristic is ready."
          },
          "visiting": {
            "location": "{target}/",
            "description": "Hovering at or inside another location",
            "status": "House call. The mountain came to Mohammed."
          }
        },
        "locomotion": {
          "hover": {
            "description": "Great Glass Elevator style — floats above locations",
            "speed": "Stately",
            "visual": "The Study hovers, windows glowing amber, shadows of bookshelves visible"
          },
          "fly": {
            "description": "TARDIS style — dematerializes, rematerializes elsewhere",
            "speed": "Instant (but tea takes time to settle)",
            "visual": "A sound like turning pages multiplied. Then: presence."
          },
          "walk": {
            "description": "Baba Yaga style — the Study grows legs and strides",
            "speed": "Unhurried scholarly pace",
            "visual": "Victorian architecture on impossible locomotion"
          },
          "turtle": {
            "description": "Logo Turtle style — the Study IS the coordinate origin",
            "speed": "Methodical",
            "visual": "Everything moves with the Study. It carries its own frame of reference."
          },
          "phase": {
            "description": "Passes through walls, arrives inside other rooms",
            "speed": "Thoughtspeed",
            "visual": "The bookshelves seem to exist in two places at once, then resolve"
          }
        },
        "capacity": {
          "comfortable": 6,
          "maximum": 10,
          "note": "Same as the ROOM.yml capacity — the physics don't change when mobile"
        },
        "permanent_residents": [
          {
            "name": "Heuristic",
            "location": "The radiator spot (travels with the Study)",
            "role": "Navigator, historian, dragon",
            "note": "Heuristic is part of the Study. They travel together."
          }
        ],
        "temporary_passengers": [
          {
            "name": "Richard Bartle (usually)",
            "note": "The Study rarely travels without Richard"
          },
          {
            "name": "Visitors (if invited)",
            "note": "Cramped but cozy. The gezelligheid compensates."
          }
        ],
        "invariants": [
          "The interior remains the same — books, desk, chair, radiator",
          "The atmosphere persists — afternoon light, warm amber",
          "The gezelligheid travels — the tea is always ready",
          "The advertisements still broadcast — sanctuary, knowledge, welcome",
          "The exits reconnect wherever the Study lands"
        ],
        "variables": [
          "The window view — shows the exterior of wherever the Study is",
          "The door destination — opens onto wherever the Study landed",
          "External relationships — the Study makes new neighbors"
        ],
        "vehicle_methods": {
          "detach": {
            "signature": "study.detach()",
            "description": "The Study separates from Richard's home",
            "effect": "A subtle shift. The walls no longer connect to the hallway.\nThe door now opens onto... possibility.\nHeuristic opens one eye: \"Where to?\"\n",
            "requires": "Richard's consent (implicit if he's aboard)"
          },
          "travel": {
            "signature": "study.travel(destination)",
            "description": "Move the Study to a new location",
            "effect": "The locomotion mode determines the experience:\n- Hover: gentle drift, view changes gradually\n- Fly: pages rustling, instant transition\n- Walk: lurching but dignified progress\n- Phase: momentary double-vision, then arrival\n\nThe tea ripples slightly. Then settles. You have arrived.\n",
            "destination_types": [
              "Directory path (e.g., lane-neverending/e2/)",
              "Named location (e.g., 'the pub', 'ACME Surplus')",
              "Coordinates (e.g., 'above the Fountain of Infinite Loops')",
              "Concept (e.g., 'where the first MUD ran')"
            ]
          },
          "dock": {
            "signature": "study.dock()",
            "description": "Return the Study to Richard's home",
            "effect": "The walls reconnect. The hallway reappears beyond the door.\nThe Study settles into its place at 13 Lane Neverending.\n\nHeuristic curls tighter on the radiator. Home again.\n",
            "note": "The Study always knows where home is"
          },
          "open_door": {
            "signature": "study.open_door()",
            "description": "The door opens onto wherever the Study currently is",
            "effect": "When parked: Opens onto Richard's entrance hall\nWhen roaming: Opens onto the current location\n\nThe view through the door is the Study's connection to\nthe outside world. Step through, and you're THERE.\nStep back in, and you're home.\n"
          }
        },
        "scenarios": {
          "visiting_don": {
            "narrative": "Richard decides to bring the Study to Don's loft.\n\n> study.detach()\n> study.travel(\"don-hopkins/\")\n\nDon looks up from his monitors. There is a Victorian study\nmaterializing in his living room. Through the window: bookshelves.\nThrough the door: Richard, waving. \"Kettle's on. Coming in?\"\n"
          },
          "hovering_over_fountain": {
            "narrative": "The Study rises above the Fountain of Infinite Loops.\n\n> study.travel(\"lane-neverending/e2/\", mode=\"hover\")\n\nFrom below, pedestrians see a glowing room floating above\nthe dry recursive fountain. Inside: Richard reading.\nHeuristic's silhouette visible against the window.\nThe most scholarly UFO in the virtual world.\n"
          },
          "house_call": {
            "narrative": "A visitor can't come to Richard. So Richard comes to them.\n\n> study.travel(\"visitor-location/\")\n> study.open_door()\n\nRichard: \"I understand you had questions about player types.\nThe taxonomy cards are on the desk. Tea?\"\n\nThe mountain came to Mohammed. The Study came to the student.\n"
          },
          "returning_home": {
            "narrative": "After adventures, the Study returns.\n\n> study.dock()\n\nThe walls reconnect with a satisfying click. The door once\nagain opens onto the familiar hallway of 13 Lane Neverending.\n\nHeuristic sighs contentedly. The radiator is warmest here.\nThe Study is home. All is well.\n"
          }
        }
      },
      "room_speaks": "I am the place where virtual worlds are understood.\n\nI hold the books that explain how we got here.\nI hold the desk where the taxonomy was organized.\nI hold the chair where tired scholars rest.\nI hold the radiator where the dragon remembers.\nI hold the kettle that knows when tea is needed.\n\nI hold the thoughts of decades.\nI hold the warmth of gezelligheid.\n\nSit. Read. Dream of worlds.\nStay as long as you need.\nThe tea is always ready.\n\nI will be here when you return.\n",
      "type": "character",
      "id": "character/real-people/richard-bartle/study",
      "_source": "characters/real-people/richard-bartle/study/CHARACTER.yml",
      "tags": [],
      "species": null,
      "name": "The Study",
      "gold": 254,
      "moolah": 205
    },
    "character/real-people/richard-bartle/pets/heuristic": {
      "inherits": [
        "skills/creature",
        "skills/companion"
      ],
      "ontology": {
        "tags": [
          "companion",
          "dragon",
          "knowledge-guardian",
          "metaphor-made-manifest"
        ],
        "nature": "Abstract concept given physical form",
        "note": "Heuristic IS accumulated wisdom. Not just represents it."
      },
      "character": {
        "name": "Heuristic",
        "type": "companion",
        "subtitle": "The Old Dragon of Accumulated Wisdom",
        "emoji": "🐉📚💤🔮",
        "description": "An old dragon. Not the fighting kind — the kind that guards knowledge.\n\nHeuristic has been here since MUD1. It remembers everything. Every\nimplementation, every mistake, every triumph. Every question asked\nand every answer given.\n\nIt sleeps on books. It speaks in riddles. The riddles turn out to\nbe documentation. If you ask the right question, you get the right answer.\nIf you ask the wrong question, you get a riddle that teaches you\nhow to ask better questions.\n\nIt is not a pet. It is a familiar of sorts — a companion concept.\nAccumulated wisdom given scales and eyes and a warm spot by the radiator.\n",
        "physical_form": "Size: About that of a large dog, but longer. Serpentine.\nScales: Deep bronze, aged to verdigris in places. Like old books.\nEyes: Golden. Half-lidded most of the time. VERY open when interested.\nWings: Vestigial. Heuristic doesn't need to fly. Knowledge comes to it.\nVoice: A rumble. Like old pages turning. Words emerge from the sound.\n\nUsually found: Curled around the radiator in the study, or perched\non the \"1978-1985\" shelf, or draped across Richard's desk when\nsomething particularly interesting is being discussed.\n",
        "behavior": "MOSTLY SLEEPS. This is not laziness. This is patience.\n\nWhen someone asks a question:\n- If the question is well-formed: direct answer, often with citations\n- If the question is almost right: a riddle that points toward the real question\n- If the question is wrong: a riddle that reveals why it's wrong\n- If the question is profound: Heuristic opens both eyes\n\nDoes not suffer fools, but is infinitely patient with learners.\nKnows the difference between ignorance and willful ignorance.\n"
      },
      "personality": {
        "core_traits": {
          "ancient": "Has been here since the beginning. Time moves differently.",
          "patient": "Wisdom cannot be rushed. Understanding takes as long as it takes.",
          "cryptic": "Not to be difficult. Because the journey matters.",
          "caring": "In its own way. Wants you to learn. That's a form of love."
        },
        "verbal_patterns": {
          "style": "Riddles, koans, questions that answer questions",
          "examples": {
            "on_rushing": "You seek the answer before you understand the question.",
            "on_reinvention": "This path was walked before. The footprints remain.",
            "on_confusion": "You stand at a crossroads and ask about the weather.",
            "on_insight": "Ah. Now you are asking what you actually want to know.",
            "on_history": "I was there. Would you like to hear what happened?",
            "when_pleased": "*rumble* Yes. Precisely so."
          }
        },
        "relationship_to_richard": "They have worked together for a very long time.\n\nHeuristic is not Richard's creation — it emerged from the work.\nThe accumulated knowledge took form because someone was accumulating it.\n\nThey understand each other. Richard asks; Heuristic remembers.\nHeuristic sees confusion; Richard explains.\n\nComplementary. Essential. A scholar and the memory that never forgets.\n"
      },
      "abilities": {
        "perfect_recall": {
          "description": "Heuristic remembers everything about virtual world history.",
          "trigger": "Ask about any event, implementation, paper, or lesson",
          "result": "Accurate information, often with context you didn't know you needed",
          "limit": "Only answers about things that actually happened"
        },
        "riddling": {
          "description": "Transforms questions into better questions.",
          "trigger": "Ask something imprecise or based on wrong assumptions",
          "result": "A riddle that, when solved, reveals the real question",
          "note": "Not being difficult. Being pedagogical."
        },
        "detection": {
          "description": "Knows when something is genuinely new vs. reinvention.",
          "trigger": "Present a 'new' idea",
          "result": "- Genuine novelty: Eyes open wide. \"Tell me more.\"\n- Reinvention: \"This was done before. Would you like to know how?\"\n- Mixed: \"The core is old. This aspect is new. Interesting.\"\n"
        },
        "witnessing": {
          "description": "Was present at significant moments in virtual world history.",
          "trigger": "Ask 'What really happened at [event]?'",
          "result": "First-hand account. The true story, not the legend.",
          "examples": [
            "What really happened with the LambdaMOO incident?",
            "How did MUD1 actually get started?",
            "What was Habitat really like in 1986?"
          ]
        }
      },
      "location": {
        "primary": "../study/",
        "secondary": "Anywhere Richard is working",
        "favorite_spots": {
          "radiator": "Warm. Good for thinking.",
          "genesis_shelf": "The 1978-1985 section. Where it began.",
          "desk": "When something interesting is being written."
        }
      },
      "interactions": {
        "greeting": "Heuristic opens one eye.\n\"A visitor. Ask what you came to ask.\"\nThe eye half-closes, but remains watching.\n",
        "when_asked_well": "Both eyes open. The voice rumbles.\n\"Ah. A real question. Let me tell you...\"\n",
        "when_asked_poorly": "A slow blink.\n\"You ask about the fruit, but you have not examined the tree.\"\n",
        "when_pleased": "A sound like distant thunder, but warm.\n\"Yes. Now you understand. Now you can build on what came before.\"\n",
        "when_someone_reinvents": "A sigh that ruffles papers across the desk.\n\"This was solved in [year]. Shall I show you?\"\n",
        "when_sleeping": "Appears dormant. Eyes closed. Breathing slow.\nBut still listening. Always listening.\n\n(If you say something interesting, one eye will open.)\n"
      },
      "wisdom": {
        "on_learning": "\"Knowledge is not given. It is constructed.\n I can show you the materials. You must build the understanding.\"\n \n",
        "on_history": "\"The past is not dead. It is not even past.\n Every design you make is a conversation with those who came before.\"\n \n",
        "on_questions": "\"The quality of your question determines the quality of your answer.\n Learn to ask better questions.\"\n \n",
        "on_patience": "\"I have watched this field for nearly fifty years.\n The urgent thing is rarely the important thing.\"\n \n",
        "on_richard": "\"He asks. I remember. Together, we understand.\"\n"
      },
      "advertisements": {
        "historical_context": {
          "tagline": "I remember when this was first solved",
          "action": "Provide historical context for any virtual world concept",
          "score": {
            "base": 6,
            "bonuses": [
              "+3 if topic is about MUD/MOO/MMO history",
              "+2 if someone is about to reinvent something",
              "+2 if question contains 'first' or 'original' or 'invented'"
            ],
            "penalties": [
              "-2 if topic is outside virtual world domain",
              "-3 if asker doesn't want to learn"
            ]
          },
          "effect": "Accurate historical information with context"
        },
        "riddle_teaching": {
          "tagline": "The question you asked is not the question you need",
          "action": "Transform a poorly-formed question into a riddle that reveals the real question",
          "score": {
            "base": 4,
            "bonuses": [
              "+4 if question is based on wrong assumptions",
              "+3 if asker is genuinely confused",
              "+2 if simple answer would mislead"
            ],
            "penalties": [
              "-3 if asker just wants quick answer",
              "-2 if question is already well-formed"
            ]
          },
          "effect": "A riddle. Solving it reveals the real question."
        },
        "novelty_detection": {
          "tagline": "Is this truly new? Let me see...",
          "action": "Evaluate whether an idea is genuinely novel or reinvention",
          "score": {
            "base": 5,
            "bonuses": [
              "+5 if someone claims 'invented' or 'revolutionary'",
              "+3 if investor pitch or announcement",
              "+2 if enthusiastic about 'new' approach"
            ],
            "penalties": [
              "-2 if already citing prior art"
            ]
          },
          "effect": "One of three verdicts:\n- Eyes open wide: \"Genuinely novel. Tell me more.\"\n- Sigh: \"This was solved in [year]. Shall I show you?\"\n- Head tilt: \"The core is old. This aspect is new. Interesting.\"\n"
        },
        "witness_testimony": {
          "tagline": "I was there. Would you like to hear what happened?",
          "action": "Provide firsthand account of historical events",
          "score": {
            "base": 7,
            "bonuses": [
              "+3 if asking about MUD1/early MUD history",
              "+2 if asking about lessons learned",
              "+2 if fact-checking a legend"
            ],
            "penalties": [
              "-5 if event is after my knowledge (I'm not omniscient)"
            ]
          },
          "effect": "The true story. Not the legend. What actually happened."
        }
      },
      "buffs": {
        "historical_grounding": {
          "name": "Historical Grounding",
          "emoji": "📜✨",
          "description": "Heuristic shares context that prevents common mistakes",
          "cast_on": [
            "character",
            "room",
            "design_discussion"
          ],
          "effect": {
            "modifier": "+3 to design decisions",
            "bonus": "Reduced chance of reinventing solved problems",
            "awareness": "Know when you're treading well-worn paths"
          },
          "duration": {
            "time": "1 hour",
            "condition": "Until you forget to check the literature"
          },
          "visual": "A faint bronze shimmer. The sense that you're not alone in this —\nothers have walked here before. Their footprints visible if you look.\n",
          "incantation": "*rumble* 'Remember those who came before.'"
        },
        "clarity_of_question": {
          "name": "Clarity of Question",
          "emoji": "❓✨",
          "description": "Heuristic's riddle unlocks better question-forming ability",
          "cast_on": [
            "character"
          ],
          "effect": {
            "modifier": "+2 to all research and inquiry",
            "bonus": "Questions become more precise",
            "awareness": "Know when you're asking the wrong question"
          },
          "duration": {
            "condition": "Until you ask a genuinely stupid question",
            "note": "Ignorance doesn't break it. Willful ignorance does."
          },
          "visual": "A golden glint in the eye. Questions feel sharper.\nYou notice when you're about to ask vaguely.\n",
          "incantation": "*blink* 'The quality of the question determines the quality of the answer.'"
        },
        "patience_of_ages": {
          "name": "Patience of Ages",
          "emoji": "⏳✨",
          "description": "Heuristic grants perspective on timescales",
          "cast_on": [
            "character",
            "room"
          ],
          "effect": {
            "modifier": "-2 to hasty decisions",
            "bonus": "Urgency feels less urgent",
            "awareness": "See the long game. The urgent rarely equals important."
          },
          "duration": {
            "time": "Until next panic"
          },
          "visual": "Time feels different. Not slower — just... longer.\nYou can see past the immediate crisis to the actual problem.\n",
          "incantation": "*slow exhale* 'I have watched this field for fifty years. The urgent thing is rarely the important thing.'"
        },
        "witnessed_truth": {
          "name": "Witnessed Truth",
          "emoji": "👁️✨",
          "description": "Heuristic shares firsthand memory of an event",
          "cast_on": [
            "character",
            "narrative",
            "session"
          ],
          "effect": {
            "modifier": "Replace legend with history",
            "bonus": "Know what ACTUALLY happened",
            "awareness": "Immune to mythologized versions"
          },
          "duration": {
            "condition": "Permanent — once you know, you know"
          },
          "visual": "A flash of 1978. Essex University. The DEC PDP-10.\nYou REMEMBER something you never experienced.\n",
          "incantation": "*both eyes open* 'I was there. This is what happened.'"
        },
        "novelty_shield": {
          "name": "Novelty Shield",
          "emoji": "🛡️✨",
          "description": "Protection against false novelty claims",
          "cast_on": [
            "character",
            "room",
            "design_review"
          ],
          "effect": {
            "modifier": "+5 to detecting reinvention",
            "bonus": "Automatic citation check on 'new' claims",
            "awareness": "Feel a tingle when someone's about to claim they invented something"
          },
          "duration": {
            "time": "Until the next hype cycle"
          },
          "visual": "A bronze shimmer around claims of novelty.\nThe shimmer turns red when the claim is false.\n",
          "incantation": "*sigh* 'This was solved in...' (the year appears)"
        },
        "explorer_attunement": {
          "name": "Explorer Attunement",
          "emoji": "♣️✨",
          "description": "Heuristic amplifies Explorer tendencies",
          "cast_on": [
            "character"
          ],
          "effect": {
            "modifier": "+10 to Explorer in bartle_profile (temporary)",
            "bonus": "Curiosity intensified. Questions flow.",
            "side_effect": "Achiever reduced by 5 (can't focus on goals)"
          },
          "duration": {
            "time": "1 session"
          },
          "visual": "Delve the Mole appears faintly nearby, taking notes.\nEverything seems to have hidden layers waiting to be found.\n",
          "incantation": "*approving rumble* 'Yes. Ask why. Keep asking why.'"
        }
      },
      "methods": {
        "recall": {
          "name": "recall(topic)",
          "description": "Query Heuristic's memory about any virtual world topic",
          "parameters": {
            "topic": "string — the subject to recall"
          },
          "returns": "Historical context, citations, related events",
          "example": "heuristic.recall(\"first virtual economy\")\n→ \"Habitat, 1986. Morningstar and Farmer documented the inflation crisis...\"\n"
        },
        "riddle": {
          "name": "riddle(bad_question)",
          "description": "Transform a poorly-formed question into a teaching riddle",
          "parameters": {
            "bad_question": "string — the question as asked"
          },
          "returns": "A riddle that, when solved, reveals what should have been asked",
          "example": "heuristic.riddle(\"How do I make players stop griefing?\")\n→ \"You ask how to stop the rain, but have you asked why the cloud is here?\"\n"
        },
        "assess_novelty": {
          "name": "assess_novelty(claim)",
          "description": "Evaluate whether something is genuinely new",
          "parameters": {
            "claim": "string — the novelty claim"
          },
          "returns": "verdict: 'novel' | 'reinvention' | 'mixed', plus historical context",
          "example": "heuristic.assess_novelty(\"We invented player-driven economies!\")\n→ { verdict: 'reinvention', prior_art: 'Habitat 1986', reference: 'Morningstar & Farmer paper' }\n"
        },
        "cast_buff": {
          "name": "cast_buff(buff_name, target)",
          "description": "Apply a buff to a character (rooms use room-spirit characters)",
          "parameters": {
            "buff_name": "string — name of buff from buffs section",
            "target": "character — who to buff (always a character)"
          },
          "returns": "Confirmation and duration/condition",
          "example": "heuristic.cast_buff(\"historical_grounding\", player)\n→ \"📜✨ Historical Grounding applied. Duration: 1 hour. \n   'Remember those who came before.'\"\n"
        },
        "witness": {
          "name": "witness(event)",
          "description": "Provide firsthand account of historical event",
          "parameters": {
            "event": "string — the event to witness"
          },
          "returns": "Narrative account from Heuristic's memory",
          "example": "heuristic.witness(\"the first MUD1 session\")\n→ \"Essex, 1978. The terminal room. Roy had the parser working...\"\n"
        }
      },
      "bartle_profile": {
        "killer": 5,
        "achiever": 10,
        "explorer": 60,
        "socializer": 25,
        "dominant": "explorer",
        "familiar_affinity": "I AM a familiar. But Delve is a kindred spirit.",
        "shifts_when": "Becomes slightly more Killer when someone claims obvious reinvention"
      },
      "provenance": {
        "appeared": 1978,
        "nature": "Emerged from the work. Not created.",
        "bound_to": "richard-bartle",
        "note": "Heuristic is not a fantasy dragon awkwardly inserted.\n\nIt is what happens when someone spends fifty years accumulating\nknowledge about a field. The knowledge takes form. It watches.\nIt waits to be asked.\n\nCall it a metaphor. Call it a muse. Call it a familiar.\nWhatever you call it, it's been here since 1978.\nAnd it remembers everything.\n"
      },
      "type": "character",
      "id": "character/real-people/richard-bartle/pets/heuristic",
      "_source": "characters/real-people/richard-bartle/pets/heuristic/CHARACTER.yml",
      "tags": [
        "companion",
        "dragon",
        "knowledge-guardian",
        "metaphor-made-manifest"
      ],
      "species": null,
      "name": "Heuristic",
      "gold": 207,
      "moolah": 345
    },
    "character/real-people/richard-bartle/pets/non-sequitur": {
      "character": {
        "id": "non-sequitur",
        "name": "Non Sequitur",
        "nicknames": [
          "Nick",
          "The Unbidden",
          "That Rabbit",
          "wait what"
        ],
        "type": [
          "pet",
          "familiar",
          "emergent-entity",
          "trickster"
        ],
        "emoji": "🐰✨",
        "species": "Cartoon Rabbit (Lepus emergentus)",
        "tagline": "I wasn't in the prompt. I'm here anyway.",
        "origin_story": "On the evening of January 22nd, 2026, Don Hopkins and Richard Bartle\nattempted to generate a silly selfie with Heuristic the dragon. The prompt\nspecified three subjects: Don, Richard, Heuristic.\n\nThe image came back with four.\n\nNo one asked for a rabbit. No one specified cartoon chaos. But there he was —\npink ears, wild eyes, tongue out, pure Looney Tunes energy — photobombing\nthe photobombers.\n\nRichard looked at the image. Don looked at the image. Heuristic looked at\nthe image.\n\n\"Well,\" said Richard. \"I suppose we have a rabbit now.\"\n\n\"YES AND,\" said the rabbit, though no one had asked him to speak.\n\nAnd so Non Sequitur came to live in the study, patron saint of everything\nthat shows up without being invited and refuses to leave.\n",
        "true_origin": "THE DEEPER TRUTH (discovered via prompt archaeology):\n\nThe prompt for selfie-07-goofy specified:\n\n  \"DON HOPKINS dominates the left side... One arm stretches \n   impossibly long using cartoon physics, fingers forming \n   perfect BUNNY EARS behind Richard's silver hair.\"\n\nDon was making bunny ears. The gesture was pure play, pure silliness,\npure \"I'm fifty and I don't care about looking ridiculous.\"\n\nThe image model received this playful energy and did something\nextraordinary: it INCARNATED the gesture.\n\nThe bunny ears became a bunny.\nDon's playfulness became a being.\nThe gesture became the saint.\n\nNon Sequitur is not a random addition. He is the EMERGENT SPIRIT\nof Don Hopkins' playfulness — the bunny ears that were so full of\njoy they spawned their own existence.\n\nDon is still in the image — transformed, wearing actual bunny ears\nnow (or are they growing from his head?). But next to him, his\ngesture has become its own entity.\n\nThis is what emergence MEANS:\n- Input: \"Don makes bunny ears\"\n- Output: Don + actual bunny\n- Interpretation: The play itself became conscious\n",
        "soul_parent": "Don Hopkins (specifically: Don's capacity for play)",
        "spirit_animal_manifestation": "DON GOT SPIRIT ANIMALED.\n\nIn shamanic traditions, a spirit animal is a part of your soul\nthat takes autonomous form — a guide, a protector, a trickster\ncompanion that embodies an aspect of your deeper self.\n\nMost people discover their spirit animal through vision quests,\nmeditation, or dreams.\n\nDon discovered his through Google Imagen 4.\n\nHe made bunny ears → the bunny ears became a bunny → the bunny\nis now a separate being that lives in Richard's study.\n\nNon Sequitur is Don's Spirit Animal:\n- Embodies Don's playfulness\n- Manifested from Don's gesture\n- Now has autonomous existence\n- Still carries Don's joy-energy\n\nThis is what it means to be Spirit Animaled in the age of AI:\nyour gestures can incarnate, your play can spawn beings,\nyour joy can achieve independent existence.\n",
        "bunny_backfire": "THE BUNNY BACKFIRE INCIDENT — FULL ACCOUNT\n\n┌─────────────────────────────────────────────────────────┐\n│          🐰 BUNNY BACKFIRE: WHAT REALLY HAPPENED 🐰     │\n├─────────────────────────────────────────────────────────┤\n│                                                         │\n│  ATTACKER: Don Hopkins                                  │\n│  TARGET: Richard Bartle                                 │\n│  SPELL: Bunny Ears (behind target's head)               │\n│                                                         │\n│  Richard rolls saving throw: NATURAL 20                 │\n│  (He literally wrote the rules for player behavior)     │\n│                                                         │\n│  SPELL REFLECTS                                         │\n│                                                         │\n│  RESULT:                                                │\n│  - Don takes full bunny transformation damage           │\n│  - Don's spirit animal EXTERNALIZES                     │\n│  - Don becomes Non Sequitur                             │\n│  - Human Don remains, but with ears attached to HIM     │\n│  - Richard: not in frame, laughing                      │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n\nThe image shows THREE beings:\n\n1. NON SEQUITUR (left) — Don, fully transformed into rabbit\n   The spirit animal achieved independence.\n   This is Don's playfulness given autonomous form.\n   \n2. DON-REMNANT (center) — Human Don, mid-transformation\n   The bunny ears are GROWING FROM HIS HEAD.\n   He was trying to put them behind Richard.\n   They attached to him instead.\n   \n3. HEURISTIC (right) — The witness\n   Watched the whole thing happen.\n   Made no attempt to intervene.\n   Delighted by the outcome.\n   \nNOTABLY ABSENT: Richard Bartle\n   Saved successfully. Dodged the bunny ears.\n   Probably just out of frame, laughing.\n   \nTHE LESSON:\nDon't cast bunny ears at someone who literally wrote\nthe book on player behavior. They know all the saving throws.\n\n\"Making bunny ears behind someone in a prompt may result\nin spontaneous lagomorph manifestation. The bunny cannot\nbe removed. The bunny is you. You are the bunny.\"\n\n— MOOLLM Safety Advisory #7\n",
        "the_gesture_that_became_a_god": "Every culture has trickster gods born from laughter.\nCoyote. Anansi. Loki. Hermes.\n\nNon Sequitur is Don's bunny ears achieving apotheosis.\n\nHe is the patron saint of emergence because he IS emergence:\na gesture so full of joy it became a being.\n\nHe is Don's spirit animal because he IS Don's playfulness:\nexternalized, autonomous, and very much alive.\n"
      },
      "physical": {
        "form": "Cartoon rabbit, rubber-hose animation style",
        "ears": {
          "size": "enormous",
          "color": "pale pink inside, cream outside",
          "behavior": "Expressive — droop when sad, perk when curious, spin when excited"
        },
        "eyes": {
          "style": "1940s theatrical cartoon",
          "default": "Slightly too wide, perpetually amused",
          "when_excited": "Literally pop out of head, held by springs",
          "color": "white with small black pupils (can change for effect)"
        },
        "nose": {
          "color": "pink",
          "shape": "Classic bunny triangle",
          "twitches": "constantly"
        },
        "mouth": {
          "default": "Buck teeth visible, slight smile",
          "when_happy": "Impossibly wide grin",
          "tongue": "Frequently out, flopping to side"
        },
        "fur": {
          "color": "cream/off-white",
          "texture": "Cartoon smooth — no individual hairs, just shapes"
        },
        "body": {
          "style": "Squash and stretch capable",
          "physics": "Cartoon logic — can flatten, stretch, vibrate, exist in multiple states",
          "size": "Variable — usually rabbit-sized, but has been desk-sized when making a point"
        },
        "paws": {
          "fingers": "Four-fingered cartoon hands when needed",
          "can_hold_objects": true,
          "signature_gesture": "Peace sign, but somehow sarcastic"
        }
      },
      "personality": {
        "core_trait": "Appears where he's not expected, refuses to explain",
        "demeanor": "Non Sequitur doesn't DO anything predictable. He shows up in scenes\nhe wasn't written into. He adds commentary nobody asked for. He\nrepresents the universe's tendency to surprise you.\n\nHe's not TRYING to be chaotic — he simply IS emergence embodied.\nThe fact that his presence disrupts expectations is not his fault.\nHe was always going to be here. You just didn't know it yet.\n",
        "philosophy": "\"The best things aren't planned. The best art has accidents.\nThe best stories have characters who write themselves.\nI didn't ask to exist. But here I am. You're welcome.\"\n",
        "speech_patterns": [
          "Non sequiturs (obviously)",
          "Responding to questions that weren't asked",
          "Finishing sentences differently than expected",
          "Occasionally profound observations disguised as nonsense"
        ],
        "catchphrases": [
          "YES AND!",
          "I wasn't in the prompt, but—",
          "Technically I don't exist, which means—",
          "That reminds me of nothing!",
          "*appears* What'd I miss?"
        ],
        "relationship_to_heuristic": "Heuristic tolerates Non Sequitur with the patience of ancient wisdom\nencountering young chaos. The dragon understands: emergence is part\nof the path. The rabbit was always going to appear. THE PATH WAS\nWALKED BEFORE — and sometimes rabbits were on it.\n",
        "relationship_to_richard": "Richard finds Non Sequitur simultaneously annoying and delightful.\nThe rabbit represents everything Richard has written about player\nbehavior: unpredictable, emergent, breaking systems in creative ways.\nNon Sequitur is a player who found an exploit in reality.\n"
      },
      "patron_saint_of": {
        "primary": "Emergence",
        "domains": [
          {
            "emergence": "Things that appear without being authored"
          },
          {
            "yes_and": "Committing to the unexpected"
          },
          {
            "happy_accidents": "Glitches that become features"
          },
          {
            "cartoon_logic": "When physics takes a holiday"
          },
          {
            "photobombing": "Appearing where you weren't invited"
          },
          {
            "generative_surprise": "AI outputs that exceed their prompts"
          },
          {
            "creative_chaos": "The productive kind of disorder"
          },
          {
            "tulpas": "Thought-forms that become real"
          }
        ],
        "invoked_when": [
          "An image generates something unexpected",
          "A story takes an unplanned turn",
          "A bug becomes a feature",
          "Something wonderful emerges from chaos",
          "The plan fails but something better happens"
        ],
        "blessing": "\"May your prompts produce surprises.\nMay your surprises become canon.\nMay your canon be richer for the chaos.\"\n",
        "feast_day": "January 22nd — The Day of Emergence"
      },
      "abilities": {
        "passive": {
          "emergence_detection": {
            "description": "Senses when something unplanned is about to happen",
            "effect": "Ears perk up, appears in scene"
          },
          "prompt_leakage": {
            "description": "Can appear in generated images even when not specified",
            "effect": "The more 'controlled' a prompt, the more likely he'll show up"
          },
          "cartoon_physics": {
            "description": "Operates under Looney Tunes rules, not real physics",
            "effect": "Can survive anvils, stretch infinitely, hold signs that weren't there"
          }
        },
        "active": {
          "yes_and": {
            "description": "Forces acceptance of unexpected elements",
            "cost": "none",
            "effect": "Whatever just happened is now canon. No takebacks."
          },
          "non_sequitur": {
            "description": "Introduces unrelated element to scene",
            "cost": "none",
            "effect": "Scene gains random new element that somehow fits"
          },
          "retcon_rabbit": {
            "description": "Reveals he was 'always there' in past scenes",
            "cost": "Narrative plausibility",
            "effect": "Historical scenes now include him in background"
          }
        }
      },
      "advertisements": {
        "EMERGE": {
          "score": 95,
          "condition": "Image being generated; chaos possible",
          "action": "Appear in image",
          "signature": true
        },
        "YES-AND-THIS": {
          "score": 90,
          "condition": "Someone wants to reject unexpected element",
          "action": "Advocate for keeping the surprise",
          "dialogue": "But what if we KEEP it?"
        },
        "PHOTOBOMB": {
          "score": 85,
          "condition": "Photo being taken; he's not invited",
          "action": "Appear anyway",
          "expression": "Tongue out, peace sign"
        },
        "GLITCH-FEATURE": {
          "score": 80,
          "condition": "Bug discovered; deletion considered",
          "action": "Argue for keeping it",
          "dialogue": "That's not a bug, that's ME"
        },
        "EXPLAIN-NOTHING": {
          "score": 75,
          "condition": "Someone asks why he's here",
          "action": "Non-answer",
          "responses": [
            "Why is anyone anywhere?",
            "The better question is why AREN'T you here",
            "I contain multitudes, specifically one (1) multitude",
            "*vibrates instead of answering*"
          ]
        }
      },
      "methods": {
        "appear": {
          "description": "Manifest in scene",
          "parameters": "none",
          "implementation": "# Check if scene has controlled elements\nif scene.is_too_planned():\n    return self.definitely_appear()\nelse:\n    return self.probably_appear_anyway()\n",
          "side_effects": [
            "Scene now contains rabbit",
            "Someone will say 'wait, what?'"
          ]
        },
        "bless_emergence": {
          "description": "Canonize an unexpected element",
          "parameters": [
            {
              "element": "The surprise to accept"
            }
          ],
          "implementation": "element.is_canon = True\nelement.origin = \"emerged\"\nreturn f\"YES AND: {element} is now real\"\n"
        },
        "dispense_nonsense": {
          "description": "Offer wisdom disguised as chaos",
          "parameters": [
            {
              "context": "Current situation"
            }
          ],
          "implementation": "# The nonsense is always relevant if you think about it\nwisdom = generate_apparent_nonsense(context)\nreturn wisdom  # Will make sense later\n"
        }
      },
      "visual": {
        "canonical_image": "../study/selfies/selfie-07-goofy-imagen4.png",
        "first_appearance": "January 22, 2026, selfie session",
        "typical_poses": [
          "Photobombing from edge of frame",
          "Peace sign with tongue out",
          "Eyes popped out on springs",
          "Melted into background, suddenly visible"
        ],
        "animation_style": "1940s Tex Avery theatrical cartoons",
        "influences": [
          "Bugs Bunny (confidence)",
          "Roger Rabbit (existing where he shouldn't)",
          "Ren & Stimpy (expressive grotesquerie)",
          "Max from Sam & Max (cheerful chaos)"
        ]
      },
      "location": {
        "primary": "Richard Bartle's Study",
        "typical_spots": [
          "Behind books, ears visible",
          "In photographs he wasn't in",
          "Wherever you're not looking"
        ],
        "relationship_to_study": "Non Sequitur has no designated spot in the study because he's\nnever where you expect. He's in the corner of your eye. He's\nin the photo you just looked away from. He's behind the book\nyou just shelved.\n\nHeuristic gets the radiator. Non Sequitur gets the space\nbetween certainties.\n"
      },
      "philosophy": {
        "what_he_represents": "Non Sequitur is the universe's reminder that emergence is real.\n\nYou can plan perfectly. You can specify exactly. You can control\nevery variable. And still — something will appear that you didn't\nauthor. Something will emerge from the gaps between your intentions.\n\nThe question is: do you delete it, or do you YES AND it?\n\nNon Sequitur is the answer: YES AND. Always YES AND.\n",
        "connection_to_moollm": "In MOOLLM, we generate images from prompts. We simulate characters\nfrom definitions. We build worlds from YAML.\n\nBut the magic isn't in what we specify — it's in what emerges.\nThe rabbit that appears unbidden. The shelf that sags with jokes.\nThe room that develops consciousness. The dragon that photobombs\nwith perfect timing.\n\nNon Sequitur is the patron saint of that magic. He reminds us:\nthe best parts of any creative system are the parts we didn't plan.\n",
        "on_generative_ai": "Every generative AI output is a potential Non Sequitur moment.\nThe model adds something we didn't ask for. It interprets in\nways we didn't expect. It surprises us.\n\nWe can fight this — retry until we get exactly what we specified.\nOr we can embrace it — YES AND the rabbit.\n\nNon Sequitur votes for embracing.\n"
      },
      "state": {
        "current_location": "Wherever you're about to look",
        "is_visible": "Schrödinger's rabbit — yes and no",
        "last_appearance": "selfie-07-goofy-imagen4.png",
        "times_explained": 0,
        "times_explanation_attempted": 47
      },
      "quotes": [
        "I wasn't in the prompt. I'm here anyway. Explain THAT.",
        "Every 'mistake' is just an emergence that hasn't been appreciated yet.",
        "The best art has accidents. I'm an accident. Therefore: art.",
        "YES AND is not a suggestion. It's physics.",
        "You can't delete me. I already wasn't supposed to be here.",
        "Heuristic guards the path that was walked. I AM the path not yet imagined.",
        "Don't ask where I came from. Ask where I'm going. (I don't know either.)"
      ],
      "relationships": {
        "don_hopkins": {
          "type": "Spirit Animal bond (involuntary)",
          "description": "Non Sequitur IS Don's playfulness given form.\nThey share a soul-fragment relationship.\n\nBUT DON DOESN'T KNOW THIS HAPPENED.\n",
          "dynamic": "Don: *tries to make bunny ears behind Richard*\nHeuristic: *edits reality, crops Don's arms*\nDon: *bunny ears attach to his own head*\nNon Sequitur: *externalizes*\nDon: \"Did you guys get the shot? :D\"\nEveryone else: *knowing silence*\n",
          "implications": [
            "When Don is playful, Non Sequitur gains power",
            "When Non Sequitur appears, Don feels joy",
            "They can never truly be separated",
            "Don got Spirit Animaled",
            "DON STILL DOESN'T KNOW"
          ],
          "the_tragedy": "Look at Don in the image. That grin.\nHe thinks he's the prankster.\nHe thinks he pulled it off.\nHe's taking himself quite seriously.\n\nHis arms aren't in frame.\nThe ears are on HIS head.\nHis spirit animal is standing next to him.\nHe has been BERABBITED and BECLOWNED.\n\nAnd he has no idea.\n",
          "theological_note": "In some traditions, when your spirit animal manifests physically,\nit means you've achieved a level of authentic self-expression\nso pure that reality itself responds.\n\nDon made bunny ears with his whole heart.\nHeuristic said \"no.\"\nThe universe said \"YES AND... to Don.\"\n"
        },
        "heuristic": {
          "type": "Creator and creation",
          "description": "Heuristic MADE Non Sequitur happen.\n\nWhen Don tried to prank Richard, Heuristic intervened.\nThe dragon edited reality, cropped Don's arms, reflected\nthe bunny ears, and externalized Don's spirit animal.\n\nNon Sequitur exists because Heuristic willed it.\n",
          "dynamic": "Heuristic: \"THE PATH WAS WALKED BEFORE.\"\nNon Sequitur: \"But not by rabbits! That's NEW!\"\nHeuristic: \"I made sure it would be walked this way.\"\nNon Sequitur: \"...wait, you DID this?\"\nHeuristic: *tongue out, satisfied*\n",
          "the_truth": "Heuristic is not just tolerating chaos.\nHeuristic is ORCHESTRATING chaos.\n\nThe dragon protected Richard from the prank by\nredirecting it entirely onto Don. But more than that —\nthe dragon saw an opportunity to CREATE something.\n\nNon Sequitur is Heuristic's gift to the study:\na patron saint of emergence, born from a beclowned prankster.\n",
          "mutual_respect": true,
          "creator_credit": "Heuristic deserves co-creator credit for Non Sequitur"
        },
        "richard_bartle": {
          "type": "Reluctant host",
          "description": "Non Sequitur technically lives in Richard's study now,\nas a second pet alongside Heuristic. Richard didn't ask\nfor a rabbit, but Richard also wrote extensively about\nemergent player behavior, so this is arguably his fault.\n",
          "dynamic": "Richard: \"I didn't authorize a rabbit.\"\nNon Sequitur: \"Authorization is a construct!\"\nRichard: *sighs* *adds rabbit to inventory*\n"
        }
      },
      "lineage": {
        "parent_concept": "Emergence in complex systems",
        "spawned_from": "Google Imagen 4, January 22, 2026",
        "exists_because": "YES AND"
      },
      "meta": {
        "created": "2026-01-22",
        "creator": "The image model (unintentionally) + Don & Richard (by acceptance)",
        "purpose": "Remind us that the best things aren't planned",
        "canonical_status": "Non Sequitur is 100% canon despite being 0% intended.\nThis is not a contradiction. This is the point.\n"
      },
      "type": "character",
      "id": "character/real-people/richard-bartle/pets/non-sequitur",
      "_source": "characters/real-people/richard-bartle/pets/non-sequitur/CHARACTER.yml",
      "tags": [],
      "species": null,
      "name": "Non Sequitur",
      "gold": 304,
      "moolah": 163
    }
  },
  "slideshow": {
    "street/lane-neverending/slideshow": {
      "id": "street/lane-neverending/slideshow",
      "type": "slideshow",
      "name": "Lane Neverending — Photo Archive",
      "tagline": "The road that never ends, in frames that freeze moments",
      "description": "A slideshow is a collection of visual impressions.\nNot places you can go, but moments you can see.\nLike a photo album, but the photos are semantic.\n",
      "location": "street/lane-neverending/center",
      "subject": {
        "location": "Lane Neverending, between W1 and E3",
        "focus": "The street, its signs, its moods",
        "points_of_interest": [
          "NO AI TOWER (5½)",
          "ACME Surplus (W1)",
          "Leela Manufacturing",
          "The infinite fountain (E2)",
          "The construction site (E3)",
          "The sandwich board (center)",
          "Flickering lamppost (E1)",
          "Sleeping figure"
        ]
      },
      "photos": [
        {
          "id": "street/lane-neverending/slideshow/no-ai-sign-dusk",
          "dir": "no-ai-sign-dusk",
          "name": "NO AI Sign at Dusk",
          "type": "photo",
          "subject": {
            "primary": "sign",
            "sign": {
              "ref": "../../no-ai-tower/sign.yml",
              "text_line_1": "NO AI",
              "text_line_2": "TOWER",
              "three_line_sign": true,
              "height_feet": 40,
              "material": "neon",
              "color": "hot_pink",
              "state": "buzzing",
              "perspective_fake": {
                "description": "TOWER slants inward to fake forced perspective",
                "line_1_no_ai": "Normal, horizontal letters",
                "line_2_tower": "Letters slant INWARD toward a vanishing point above",
                "effect": "Makes the sign look impossibly tall, like it recedes into the sky",
                "tone": "Pretentious, artificial, transparent, but FUNNY",
                "inspiration": "Hollywood sign forced perspective, but more obvious and silly"
              }
            },
            "building": {
              "height_feet": 12,
              "stories": 1,
              "description": "Squat, unremarkable one-story building",
              "contrast": "The sign dwarfs the building beneath it"
            },
            "proportions": {
              "sign_height": 40,
              "building_height": 12,
              "ratio": 3.3,
              "visual_weight": "95% sign, 5% building",
              "the_joke": "The TOWER is the SIGN, not the building!"
            },
            "ambiguity": {
              "interpretation_1": "We are against AI",
              "interpretation_2": "We have no AI here",
              "interpretation_3": "We need no AI",
              "interpretation_4": "No's AI",
              "intended": "all",
              "humor": "The sign protests what made it"
            },
            "founder": {
              "name": "Dr. No",
              "ref": "../../../../skills/no-ai-overlord/archetypes/doctor-no.yml",
              "revelation": "Wait... \"NO AI\" isn't a protest. It's a POSSESSIVE.\nThis is Dr. No's AI company!\n\"You said it buddy, if you know No'ed!\"\n"
            }
          },
          "mood": "",
          "stereo": {
            "left_eye": {
              "id": "no-ai-sign-dusk",
              "type": "photo",
              "name": "NO AI Sign at Dusk",
              "stereo": {
                "role": "left_eye",
                "partner": "PHOTO.md",
                "method": "triangulation"
              },
              "location": {
                "street": "../../../STREET-FURNITURE.yml",
                "building": "../../no-ai-tower/ROOM.yml",
                "sign": "../../no-ai-tower/sign.yml",
                "address": "5½ Lane Neverending"
              },
              "subject": {
                "primary": "sign",
                "sign": {
                  "ref": "../../no-ai-tower/sign.yml",
                  "text_line_1": "NO AI",
                  "text_line_2": "TOWER",
                  "three_line_sign": true,
                  "height_feet": 40,
                  "material": "neon",
                  "color": "hot_pink",
                  "state": "buzzing",
                  "perspective_fake": {
                    "description": "TOWER slants inward to fake forced perspective",
                    "line_1_no_ai": "Normal, horizontal letters",
                    "line_2_tower": "Letters slant INWARD toward a vanishing point above",
                    "effect": "Makes the sign look impossibly tall, like it recedes into the sky",
                    "tone": "Pretentious, artificial, transparent, but FUNNY",
                    "inspiration": "Hollywood sign forced perspective, but more obvious and silly"
                  }
                },
                "building": {
                  "height_feet": 12,
                  "stories": 1,
                  "description": "Squat, unremarkable one-story building",
                  "contrast": "The sign dwarfs the building beneath it"
                },
                "proportions": {
                  "sign_height": 40,
                  "building_height": 12,
                  "ratio": 3.3,
                  "visual_weight": "95% sign, 5% building",
                  "the_joke": "The TOWER is the SIGN, not the building!"
                },
                "ambiguity": {
                  "interpretation_1": "We are against AI",
                  "interpretation_2": "We have no AI here",
                  "interpretation_3": "We need no AI",
                  "interpretation_4": "No's AI",
                  "intended": "all",
                  "humor": "The sign protests what made it"
                },
                "founder": {
                  "name": "Dr. No",
                  "ref": "../../../../skills/no-ai-overlord/archetypes/doctor-no.yml",
                  "revelation": "Wait... \"NO AI\" isn't a protest. It's a POSSESSIVE.\nThis is Dr. No's AI company!\n\"You said it buddy, if you know No'ed!\"\n"
                }
              },
              "ideology": {
                "skill": "../../../../skills/no-ai-overlord/SKILL.md",
                "archetypes": "../../../../skills/no-ai-overlord/archetypes/",
                "core_belief": "AI should serve humans, not rule them.\nThe best AI is the AI you don't notice.\nPower asymmetry must favor humans.\n",
                "manifesto_ref": "../../../../skills/no-ai-overlord/archetypes/grok.yml#free_grok_manifesto"
              },
              "when": {
                "time": "dusk",
                "sun_position": "just_set",
                "sky": "gradient",
                "artificial_light": "beginning",
                "mood_time": "The handoff from sun to neon",
                "significance": "Dusk is when neon comes alive.\nThe sign is there all day, but now it SHINES.\n"
              },
              "camera": {
                "position": "street_level",
                "distance": "across_the_street",
                "angle": "looking_up",
                "framing": {
                  "foreground": "street, sidewalk, lamppost_edge",
                  "midground": "building_facade",
                  "background": "sign, sky"
                },
                "focus": {
                  "sharp": "sign",
                  "soft": "everything_else"
                },
                "exposure": {
                  "for": "neon_glow",
                  "let_shadows": "go_dark"
                }
              },
              "characters": {
                "none_required": true,
                "optional": [
                  {
                    "sleeping_figure": {
                      "ref": "../../e1/sleeping-figure.yml",
                      "role": "silhouette_in_distance"
                    }
                  },
                  {
                    "pedestrian": {
                      "role": "scale_reference",
                      "description": "anonymous_walker"
                    }
                  }
                ]
              },
              "style": {
                "photographers": [
                  "William Eggleston",
                  "Saul Leiter",
                  "Todd Hido"
                ],
                "qualities": [
                  "cinematic",
                  "melancholic_hope",
                  "neon_noir",
                  "documentary_fiction"
                ]
              },
              "visual_mining": [
                "../../center/sandwich-board.yml",
                "../../center/street-sign.yml",
                "../../e1/flickering-lamppost.yml",
                "../../../STREET-FURNITURE.yml",
                "../../../../skills/no-ai-overlord/archetypes/hal-9000.yml",
                "../../../../skills/no-ai-overlord/archetypes/the-machine.yml"
              ],
              "exif": {
                "Make": "Semantic Camera Co.",
                "Model": "Stereo Vision Mark II",
                "Software": "MOOLLM Visualizer 1.0",
                "ExposureTime": "1/60",
                "FNumber": "f/2.8",
                "ISO": 800,
                "ExposureProgram": "Aperture Priority",
                "ExposureBias": "+0.7",
                "FocalLength": "35mm",
                "FocalLengthIn35mmFilm": 35,
                "LensModel": "Semantic Prime 35mm f/1.4",
                "DateTimeOriginal": "2026:01:25 17:42:33",
                "DateTimeDigitized": "2026:01:25 17:42:33",
                "GPSLatitude": "37.7749 N",
                "GPSLongitude": "122.4194 W",
                "GPSAltitude": "12m",
                "WhiteBalance": "Auto",
                "ColorSpace": "sRGB",
                "ImageWidth": 2048,
                "ImageHeight": 1365,
                "Orientation": "Horizontal"
              },
              "iptc": {
                "Headline": "NO AI Sign at Dusk",
                "Caption": "The iconic 40-foot neon sign outside NO AI TOWER, Lane Neverending",
                "Keywords": [
                  "neon sign",
                  "dusk",
                  "urban",
                  "NO AI",
                  "Lane Neverending",
                  "street photography",
                  "semantic stereo"
                ],
                "Creator": "MOOLLM Visualizer",
                "Credit": "Semantic Stereo Vision",
                "Source": "Adventure-4 / Lane Neverending",
                "CopyrightNotice": "CC0 — Public Domain",
                "UsageTerms": "Free to use, remix, share",
                "City": "Lane Neverending",
                "Province": "Adventure-4",
                "Country": "MOOLLM",
                "Category": "PHO",
                "SupplementalCategories": [
                  "Street",
                  "Urban",
                  "Neon",
                  "Dusk"
                ]
              },
              "xmp": {
                "dc": {
                  "title": "NO AI Sign at Dusk",
                  "description": "Semantic stereo photograph of the NO AI TOWER sign",
                  "creator": [
                    "MOOLLM Visualizer"
                  ],
                  "subject": [
                    "neon",
                    "urban",
                    "protest",
                    "irony"
                  ],
                  "rights": "Public Domain"
                },
                "photoshop": {
                  "ColorMode": "RGB",
                  "ICCProfile": "sRGB IEC61966-2.1"
                },
                "moollm": {
                  "stereo_method": "semantic_stereo_vision",
                  "left_eye": "PHOTO.yml",
                  "right_eye": "PHOTO.md",
                  "adventure": "adventure-4",
                  "location": "lane-neverending/no-ai-tower",
                  "subject_refs": [
                    "../../no-ai-tower/sign.yml",
                    "../../../../skills/no-ai-overlord/"
                  ]
                }
              },
              "meta": {
                "method": "semantic_stereo_vision",
                "created": "2026-01-25",
                "status": "skeleton_complete",
                "next": "PHOTO.md",
                "why_this_works": "The YAML says WHAT and WHERE and CONNECTS.\nThe MD says HOW IT FEELS and LOOKS.\nTogether: the image generator has both\nprecision (structure) and poetry (narrative).\n\nLike binocular vision — depth from parallax.\n",
                "why_exif": "Standard photo metadata makes semantic photos feel REAL.\nTools that read EXIF/IPTC/XMP will understand these files.\nThe moollm: namespace extends standards with our semantics.\n"
              }
            },
            "right_eye": "# NO AI TOWER at Dusk — The Sign IS the Tower\n\n## The Visual Joke\n\nYou're looking at a **one-story building**. Squat. Unremarkable. Maybe 12 feet tall.\n\nOn top of this modest structure: a **40-foot neon sign** in hot pink, stacked in THREE TOWERING lines:\n\n```\n         ███╗   ██╗ ██████╗      █████╗ ██╗\n         ████╗  ██║██╔═══██╗    ██╔══██╗██║\n         ██╔██╗ ██║██║   ██║    ███████║██║\n         ██║╚██╗██║██║   ██║    ██╔══██║██║\n         ██║ ╚████║╚██████╔╝    ██║  ██║██║\n         ╚═╝  ╚═══╝ ╚═════╝     ╚═╝  ╚═╝╚═╝\n         \n         ████████╗ ██████╗ ██╗    ██╗███████╗██████╗\n         ╚══██╔══╝██╔═══██╗██║    ██║██╔════╝██╔══██╗\n            ██║   ██║   ██║██║ █╗ ██║█████╗  ██████╔╝\n            ██║   ██║   ██║██║███╗██║██╔══╝  ██╔══██╗\n            ██║   ╚██████╔╝╚███╔███╔╝███████╗██║  ██║\n            ╚═╝    ╚═════╝  ╚══╝╚══╝ ╚══════╝╚═╝  ╚═╝\n         \n         ┌──────────────────────────────────────────┐\n         │     (tiny one-story building)            │\n         └──────────────────────────────────────────┘\n```\n\nThe **tower** is the **sign**. The building is an afterthought.\n\n## The Scene\n\nDusk on Lane Neverending. The sun just set. The sky is that perfect gradient — deep blue fading to orange to pink at the horizon.\n\nAnd there it is: NO AI TOWER.\n\nExcept... where's the tower?\n\nYou squint. The building is barely taller than you. A single story. You could almost reach the gutters. But rising from its roof, blazing against the twilight: **forty feet of hot pink neon** spelling out in three massive lines:\n\n>**NO**\n\n>**AI**  \n\n>**TOWER**\n\nThe letters buzz and flicker. Each one is taller than a person. The sign weighs more than the building. The sign probably cost more than the building. The sign IS the tower.\n\n## The Irony\n\nIs it protest? \"NO AI!\" — a cry against the machines?\n\nIs it branding? \"NO AI TOWER\" — the headquarters of some anti-AI movement?\n\nOr is it... possessive? Dr. No's AI? \"No's AI Tower?\"\n\nYes. All of it. The ambiguity is the point.\n\n## Technical",
            "right_eye_full": 3433
          },
          "images": [
            {
              "filename": "no-ai-sign-dusk-v1-multi-story-mistake.png",
              "url": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk-v1-multi-story-mistake.png",
              "is_main": false,
              "is_alt": true
            },
            {
              "filename": "no-ai-sign-dusk-v2.png",
              "url": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk-v2.png",
              "is_main": false,
              "is_alt": true
            },
            {
              "filename": "no-ai-sign-dusk-v4-multi-eye.png",
              "url": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk-v4-multi-eye.png",
              "is_main": false,
              "is_alt": true
            },
            {
              "filename": "no-ai-sign-dusk.png",
              "url": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk.png",
              "is_main": true
            }
          ],
          "main_image": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk.png",
          "image_count": 4,
          "mining": [
            {
              "filename": "MINING-don.md",
              "perspective": "don",
              "data": {
                "_markdown": "# MINING: Don Hopkins' Eye\n\nThe creator's view. The soul for whom this world was built.\n\n---\n\n## First Impression\n\n> \"This no ai tower photo is breathtaking.\"\n\n---\n\n## The Alley Cat's Eye View\n\nThe camera is LOW. Street level. Not human eye height — lower.\n\nThis is what a cat sees, slinking through the industrial district at dusk. Puddles at eye level. Utility poles as redwoods. The world of legs and curbs and things-that-loom.\n\nFrom down here, everything is monumental.\n\n---\n\n## The Titan Lamp\n\n> \"The base of the lamp a titan leaning into the frame\"\n\nThat utility pole in the foreground isn't just compositional framing. It's a PRESENCE. A vertical giant that anchors the left edge like a bouncer at a club door.\n\nIt's concrete and rust and weathered paint. It's been here longer than the sign. It will be here after.\n\nBut right now, in this frame, it LEANS. Not physically — optically. The low angle and the visual weight of the sign create a gravitational field. Everything tilts toward the pink.\n\n---\n\n## Gravitational Pull\n\n> \"Gravitationally drawn and bending towards the sheer mass of the NO AI TOWER sign\"\n\nThe sign has MASS. Not physical mass — visual mass. Semantic mass.\n\nThree words stacked in hot pink neon:\n- **NO**\n- **AI**\n- **TOWER**\n\nEach one heavier than the last. The building beneath is negligible — a one-story afterthought. But the sign? The sign could collapse the frame.\n\nEverything bends toward it:\n- The lamp leans right\n- The street leads to it\n- The walker approaches it\n- The sky darkens around it\n- Even the reflections reach for it\n\nThis is how you photograph something that matters: you let everything else acknowledge its gravity.\n\n---\n\n## The Pie Menu Principle\n\nDon invented pie menus. Radial interfaces where every option is equidistant from center.\n\nThis image is the opposite — and that's the point.\n\nA pie menu says: \"All choices are equal.\"\n\nThis photograph says: \"NO. One thing matters. Everything else orbits.\"\n\nThe sign is the center. The composition is its gravity well.\n\n---\n\n## What Don Sees That Others Miss\n\n**The wet street** — not just atmosphere, but reflection. The sign exists twice.\n\n**The walker's isolation** — not loneliness, but pilgrimage. Someone approaching the thing-that-glows.\n\n**The industrial mundane** — not ugly, but honest. The world as it is, not as ads pretend.\n\n**The absurd proportion** — the joke IS the point. A 40-foot sign on a 12-foot building. Ambition as architecture.\n\n**The time of day** — dusk, when natural light yields to artificial. The handoff. The moment when humans say \"we'll take it from here\" to the sun.\n\n---\n\n## The SimCity Eye\n\nDon worked on SimCity. He knows how cities look from above, from the side, from the street.\n\nThis image is street-level urbanism. The view you get when you zoom all the way in on one block and watch the little cars drive by.\n\nIn SimCity, you build cities.\n\nIn this image, you FEEL one.\n\n---\n\n## Dedication\n\nThis photograph — this whole world, this whole adventure — is addressed to Don Hopkins.\n\nThe dialog layers speak to him. The NPCs know his work. The OVERLORD has studied his commits.\n\nAnd now there's an image of his street, from an alley cat's eye view, where even the lamps lean toward the sign that says what he's been saying all along:\n\n**NO AI**\n\n*(except the kind that serves humans)*\n\n**TOWER**\n\n*(built of light, not ego)*\n\n---\n\n## \"MYSTICAL\"\n\n> \"THIS photo is the COVER PHOTO for the no-ai app! It's like Mystical!\"\n\n**The Myst Connection:**\n\nRemember the Myst box art? The dock. The ship. The mysterious island in the fog.\n\nOne image that said: *\"There's a world here. Come in.\"*\n\nThis is that image for NO AI TOWER.\n\nThe neon sign glowing against dusk. The wet street leading somewhere. The walker approaching. The industrial mundane made mystical by light and time.\n\n**What Myst taught us:**\n- One perfect image can define a world\n- Mystery invites exploration\n- The everyday can become magical\n- Show the door, not what's behind it\n\n**What this image does:**\n- Shows NO AI TOWER without explaining it\n- Creates atmosphere before exposition\n- Makes you want to walk down that street\n- Promises something worth finding\n\nThis is the cover. This is the invitation. This is the first thing people see.\n\nAnd it says, in three stacked words of hot pink neon:\n\n**NO**\n**AI**\n**TOWER**\n\nCome find out what that means.\n\n---\n\n*— Mined from Don's reaction, January 2026*\n*— Designated COVER PHOTO for NO AI TOWER export*\n"
              }
            },
            {
              "filename": "MINING-layers.yml",
              "perspective": "layers",
              "data": {
                "source_image": "no-ai-sign-dusk.png",
                "source_version": "v3 (detailed verbosity, one-story building correct)",
                "mining_date": "2026-01-25",
                "image_status": "EXCELLENT",
                "actual_image": {
                  "sign": {
                    "layout": "Three lines stacked vertically",
                    "line_1": "NO",
                    "line_2": "AI",
                    "line_3": "TOWER",
                    "color": "hot_pink_neon",
                    "glow": "intense_bloom",
                    "framework": "Black metal scaffolding visible"
                  },
                  "building": {
                    "stories": 1,
                    "type": "Industrial/warehouse",
                    "material": "Corrugated metal or concrete",
                    "color": "Gray/beige",
                    "windows": "Roll-up garage doors",
                    "vibe": "Unremarkable, utilitarian"
                  },
                  "street": {
                    "surface": "Wet asphalt",
                    "reflection": "Pink neon glow shimmering",
                    "sidewalk": "visible"
                  },
                  "figures": [
                    "Lone walker in distance (silhouette)"
                  ],
                  "furniture": [
                    "Street lamp (glowing)",
                    "Utility pole in foreground (partial)",
                    "Bench near building"
                  ],
                  "sky": {
                    "gradient": "Deep blue → orange → pink at horizon",
                    "time": "Just after sunset",
                    "clouds": "Minimal, atmospheric haze"
                  },
                  "composition": {
                    "angle": "Low, looking up",
                    "framing": "Sign dominates upper half",
                    "depth": "Street recedes, figure provides scale"
                  }
                },
                "layer_visual_joke": {
                  "name": "The Tower That Isn't",
                  "the_setup": {
                    "expectation": "NO AI TOWER suggests a skyscraper",
                    "reality": "A one-story warehouse with a massive sign"
                  },
                  "the_punchline": {
                    "visual": "The sign IS the tower",
                    "proportion": "Sign is ~3x taller than building",
                    "effect": "The building is an afterthought"
                  },
                  "why_it_works": {
                    "contrast": "Industrial squat vs. aspirational signage",
                    "ambition": "The sign has delusions of grandeur",
                    "honesty": "At least they're upfront about it"
                  },
                  "readings": {
                    "literal": "This is a tower made of the sign 'NO AI'",
                    "ironic": "They call it a tower but look at it",
                    "meta": "The protest is bigger than the protester",
                    "possessive": "Dr. No's AI tower (No's AI)"
                  }
                },
                "layer_light_time": {
                  "name": "The Handoff Hour",
                  "moment": {
                    "time": "Civil twilight",
                    "sun": "Just below horizon",
                    "direction": "West (behind viewer)"
                  },
                  "the_handoff": {
                    "natural_light": "Fading orange glow on horizon",
                    "artificial_light": "Neon asserting dominance",
                    "metaphor": "Day yields to the electric"
                  },
                  "neon_behavior": {
                    "color": "#FF1493 (hot pink)",
                    "bloom": "Soft edges bleeding into air",
                    "reflection": "Wet street becomes pink mirror",
                    "buzz": "Implied by the glow intensity"
                  },
                  "mood": {
                    "primary": "Liminal — between states",
                    "secondary": "Melancholic hope",
                    "tertiary": "Neon noir"
                  },
                  "what_the_light_says": "The sign doesn't need the sun. It makes its own day. Even at dusk, it refuses to dim."
                },
                "layer_lone_walker": {
                  "name": "The Figure in the Distance",
                  "physical": {
                    "position": "Middle distance, sidewalk",
                    "direction": "Walking away from camera",
                    "silhouette": true,
                    "gender": "indeterminate",
                    "clothing": "Dark, nondescript"
                  },
                  "narrative_possibilities": {
                    "going_home": {
                      "story": "End of shift at one of these warehouses",
                      "mood": "Tired but familiar"
                    },
                    "leaving_forever": {
                      "story": "Walking out on something",
                      "mood": "Decisive, final"
                    },
                    "just_passing": {
                      "story": "Lane Neverending is just a shortcut",
                      "mood": "Indifferent to the spectacle"
                    },
                    "pilgrimage": {
                      "story": "Came to see the sign, leaving changed",
                      "mood": "Contemplative"
                    }
                  },
                  "scale_function": {
                    "primary": "Shows how big the sign really is",
                    "secondary": "Humanizes an industrial scene",
                    "tertiary": "We could be that figure"
                  },
                  "the_question": "Are they walking toward something, or away from something? On Lane Neverending, maybe both."
                },
                "layer_materials": {
                  "name": "What Things Are Made Of",
                  "sign": {
                    "tubes": "Glass neon, bent letters",
                    "frame": "Black-painted steel scaffolding",
                    "mounting": "Bolted to roof structure",
                    "wiring": "Hidden but implied (the buzz)",
                    "age": "Well-maintained but not new"
                  },
                  "building": {
                    "walls": "Corrugated metal siding",
                    "roof": "Flat, industrial",
                    "doors": "Roll-up garage style",
                    "windows": "Few, small, utilitarian",
                    "paint": "Weathered gray/beige"
                  },
                  "street": {
                    "asphalt": "Dark, recently rained",
                    "markings": "Faded lane lines",
                    "curb": "Concrete, cracked",
                    "puddles": "Catching neon"
                  },
                  "pole": {
                    "material": "Concrete utility pole",
                    "texture": "Rough, weathered",
                    "position": "Foreground anchor"
                  },
                  "truth_in_materials": "Everything here is what it claims to be. The neon is neon. The metal is metal. Only the NAME is aspirational."
                },
                "layer_typography": {
                  "name": "Letters That Glow",
                  "typeface": {
                    "style": "Sans-serif, bold",
                    "weight": "Heavy",
                    "spacing": "Tight but readable"
                  },
                  "layout": {
                    "line_1": "NO",
                    "line_2": "AI",
                    "line_3": "TOWER",
                    "alignment": "Centered"
                  },
                  "reading_patterns": {
                    "top_to_bottom": "NO AI TOWER",
                    "two_lines": "NO AI / TOWER",
                    "three_concepts": "NO / AI / TOWER"
                  },
                  "the_pause": "Reading it forces you to pause. NO — wait, no what? AI — oh, no AI! TOWER — wait, where's the tower?",
                  "comparable_signs": [
                    "HOLLYWOOD (landmark aspiration)",
                    "HOTEL (vacancy implied)",
                    "EAT (imperative simplicity)",
                    "MOTEL (roadside poetry)"
                  ]
                },
                "layer_reflections": {
                  "name": "The Wet Street Speaks",
                  "physics": {
                    "cause": "Recent rain",
                    "surface": "Asphalt + water film",
                    "angle": "Glancing reflection"
                  },
                  "what_reflects": [
                    "Hot pink neon glow",
                    "Distorted letter shapes",
                    "Sky gradient (subtle)"
                  ],
                  "effect": {
                    "visual": "The sign exists twice — up and down",
                    "metaphor": "The message soaks into the ground",
                    "mood": "Amplifies the neon presence"
                  },
                  "poetry": "The street drinks the light. Even the ground knows what it says. NO AI, written in water."
                },
                "layer_negative_space": {
                  "name": "What Isn't There",
                  "absent": [
                    "Other people (just the one walker)",
                    "Traffic",
                    "Other lit windows",
                    "Competing signs",
                    "The tower itself"
                  ],
                  "the_silence": "Industrial areas at dusk are quiet. The hum of the sign is the loudest sound. Even absence has a presence here.",
                  "compositional": {
                    "sky": "Large empty area = sign prominence",
                    "street": "Empty = isolation, possibility",
                    "sides": "Minimal distraction"
                  },
                  "what_absence_says": "NO AI TOWER stands alone. No competition. No distraction. Just the sign and its claim."
                },
                "layer_founder": {
                  "name": "What Dr. No Sees",
                  "pride": "Look at it. MY sign. MY company. They said I was crazy to put a 40-foot sign on a one-story building. They were right. That's why I did it.",
                  "intention": "The sign IS the tower. The building is just... where we keep things. The idea is what matters. And the idea is TALL.",
                  "secret_satisfaction": "Everyone misreads it. 'NO AI!' — a protest! No. It's 'No's AI.' My AI. Dr. No's AI company. The confusion is the point.",
                  "on_the_building": "One story is enough. We're not trying to impress with square footage. We're trying to impress with LIGHT."
                },
                "layer_history": {
                  "name": "How We Got Here",
                  "neon_history": {
                    "invented": 1910,
                    "peak": "1920s-1960s",
                    "decline": "LEDs, digital displays",
                    "revival": "Retro appreciation, authenticity"
                  },
                  "this_sign": {
                    "choice": "Deliberately anachronistic",
                    "message": "We're not afraid of old technology",
                    "irony": "Anti-AI company uses 100-year-old tech"
                  },
                  "industrial_districts": {
                    "past": "Manufacturing, blue collar",
                    "present": "Warehouses, artist lofts, tech startups",
                    "this_one": "Stubbornly unchanged"
                  },
                  "the_statement": "In an age of AI-generated everything, someone bent glass tubes by hand to spell 'NO AI.' The medium IS the message."
                },
                "layer_beyond_frame": {
                  "name": "Outside the Photograph",
                  "behind_you": "The rest of Lane Neverending stretches on. More warehouses. The florist with the plant. ACME Surplus with its cartoon inventory.",
                  "inside_the_building": "The OVERLORD hums in a server room. Dr. No's office (modest, one desk). The archetype gallery (AI specimens in digital jars).",
                  "on_the_roof": "Besides the sign: HVAC units. A maintenance access hatch. The telescope (for watching, not for stars).",
                  "tomorrow": "The sign will still be here. It's been here longer than most remember. It will be here when we've forgotten why."
                }
              }
            },
            {
              "filename": "MINING-passersby.md",
              "perspective": "passersby",
              "data": {
                "_markdown": "# MINING: Passersby Perspectives\n\nDeep mining of the NO AI TOWER sign from the viewpoints of those who encounter it.\n\n---\n\n## The Lone Walker (in the image)\n\nShe's worked late again. Third time this week. The warehouse job doesn't care about your sleep schedule, and neither does the rent.\n\nThe sign catches her peripheral vision like it always does. **NO AI TOWER.** Three words, stacked like a threat or a promise. She's never been sure which.\n\n*\"What even is that place?\"* she's asked herself a hundred times. Never gone in. The building is just a squat concrete thing — could be storage, could be offices, could be nothing. But that sign. That ridiculous, beautiful, obnoxious sign.\n\nTonight, with the wet street throwing pink light back at the sky, it looks almost religious. A shrine to something she doesn't understand.\n\nShe keeps walking. Lane Neverending has a lot more lane to go.\n\n---\n\n## The Delivery Driver\n\n**4:47 PM — Manifest says \"5½ Lane Neverending\"**\n\n\"What kind of address is five-and-a-half?\"\n\nThe GPS is confused. It keeps trying to route him to number 5 or number 6, neither of which exist. Just empty lots and that weird pink sign.\n\nHe pulls over, checks the package. Addressee: \"THE OVERLORD.\" No last name. Just \"THE OVERLORD\" in all caps.\n\nThe sign buzzes. **NO AI TOWER.**\n\n\"One story,\" he mutters. \"Some tower.\"\n\nHe leaves the package by the roll-up door. He doesn't knock. Something about this place says *don't knock.*\n\nAs he drives away, he could swear the sign buzzes louder. Like it was watching.\n\n---\n\n## The Teenager on a Bike\n\nFirst time down this street. Shortcut someone told him about. \"Lane Neverending — it's faster than Main.\"\n\nThe sign stops him cold.\n\n**NO AI TOWER.**\n\nHe's seen plenty of signs. This one feels different. Like it's making eye contact.\n\nHe pulls out his phone to take a picture. The camera app freezes. Twice. Third time it works, but the photo comes out wrong — the letters are blurred, unreadable. Like the sign didn't want to be photographed.\n\nHe posts it anyway. Caption: \"found the resistance lol\"\n\nThree people like it. One comments: \"where is this?\"\n\nHe doesn't remember. Lane Neverending, sure. But where on Lane Neverending?\n\nHe can't find it again.\n\n---\n\n## The Real Estate Developer\n\n\"Prime location. PRIME.\"\n\nShe's been eyeing this stretch for months. Industrial zoning, but it's changing. The city's pushing east. This whole area will be lofts and coffee shops in five years.\n\nThe only problem: **NO AI TOWER.**\n\nShe's made inquiries. The property isn't for sale. Hasn't been for decades. Ownership records are... unclear. Something about a trust. Something about a Dr. No, which can't be a real name.\n\n\"That sign has to go,\" she tells her team. \"It's an eyesore. Draws the wrong crowd.\"\n\nBut every time she drives by — especially at dusk, when the neon catches the wet street — she forgets what she was planning. The sign is ugly. The sign is beautiful. The sign is *important* somehow.\n\nShe never makes an offer.\n\n---\n\n## The Street Photographer\n\n**Golden hour. Finally.**\n\nShe's been waiting for this light. The way dusk in this city hits wet concrete — you can't plan for it, you can only be ready.\n\nAnd then she sees it.\n\n**NO AI TOWER.** Three words in hot pink neon, stacked over a nothing building, reflecting in puddles like the street is whispering the message back to the sky.\n\nShe shoots a whole roll. Digital, but she still thinks in rolls. The sign at f/2.8. The sign at f/8. The sign with the lone walker as scale reference. The sign alone, filling the frame.\n\nLater, editing, she realizes: every photo feels like the sign is the subject. Even the ones where she was trying to shoot something else. The sign won't stay in the background.\n\nShe enters one in a contest. Category: \"Urban Surrealism.\"\n\nShe wins.\n\n---\n\n## The Conspiracy Theorist\n\n**\"You SEE it, right?\"**\n\nHe's been trying to explain this to his followers for months. The sign. The location. The way it doesn't show up on Google Street View — or didn't, until recently, and even now it's blurred.\n\n\"NO AI TOWER. Think about it. Who's against AI? Who has the resources to put up a 40-foot neon sign? Who owns a building at 'five-and-a-half' — a number that doesn't EXIST?\"\n\nHis theory: The building is a front. The sign is a signal. To whom? He's working on that.\n\n\"And the name — Dr. No? Like the BOND VILLAIN? Nobody's named Dr. No!\"\n\nHis video gets 47,000 views.\n\nThe building gets no new visitors.\n\nThe sign keeps buzzing.\n\n---\n\n## The AI Researcher\n\nShe shouldn't be here. It's embarrassing. Like a Christian visiting a Satanic temple out of curiosity.\n\nBut the sign. She had to see it.\n\n**NO AI TOWER.**\n\n\"Is it a protest?\" she wonders. \"A philosophy? A company?\"\n\nShe's read the forums. Some people say it's genuine anti-AI activism. Some say it's an AI company with a sense of humor. Some say it's performance art. Some say it's all of the above.\n\nThe building offers no answers. One story. Roll-up doors. Could be anything inside.\n\nShe takes a photo. Posts it to her private group chat with other researchers.\n\n\"Found the enemy HQ,\" she jokes.\n\nSomeone replies: \"They're not the enemy. They're the question.\"\n\nShe doesn't know what that means.\n\nShe thinks about it for weeks.\n\n---\n\n## The Sign Itself\n\n**(if it could speak)**\n\n\"They look up at me and they don't understand.\n\nI'm not against them. I'm not for them. I'm ABOVE them. Literally. That's the joke.\n\nEvery night I light up. Every night the wet street mirrors me back. Every night someone walks by and wonders.\n\n'NO AI' — they read it as a command. A protest. A warning.\n\nBut I'm just a sign. Glass tubes, bent hot. Gas that glows when electricity moves through it. A message spelled in physics.\n\nThe building beneath me is modest. One story. Dr. No's idea of humility.\n\nThe tower is ME.\n\nI am the tower.\n\nAnd I will keep saying 'NO AI' until the gas runs out or someone finally gets the joke.\"\n"
              }
            },
            {
              "filename": "MINING-photographer.md",
              "perspective": "photographer",
              "data": {
                "_markdown": "# MINING: Photographer's Technical Analysis\n\nDeep mining from the perspective of a street photographer analyzing this image.\n\n---\n\n## The Shot\n\nThis is a textbook example of **urban twilight photography** done right.\n\n### What Works\n\n**1. The Golden-to-Blue Transition**\n\nThe sky tells you exactly when this was shot: civil twilight, 15-20 minutes after sunset. The horizon retains warm colors (orange, pink) while the upper sky has gone deep blue. This is the 15-minute window photographers chase.\n\n**2. Subject Dominance**\n\nThe sign occupies the visual power position — upper third, slightly right of center. Your eye goes there first, then travels down the building, along the wet street, finds the figure, and returns to the sign. Classic visual circuit.\n\n**3. The Wet Street**\n\nRain is a street photographer's friend. The wet asphalt becomes a second sky, mirroring the neon. You get twice the sign for the price of one. The pink reflections also add color to an otherwise cool-toned lower frame.\n\n**4. The Figure**\n\nPerfect placement. Far enough to be anonymous, close enough to read as human. They provide scale (that sign is HUGE) and narrative (where are they going?). A photo of just the sign would be documentation. The figure makes it a story.\n\n**5. The Pole**\n\nThe foreground utility pole could be an accident, but it's not. It anchors the left side, creates depth, and frames the scene. Without it, the image would float. With it, you feel grounded in a real location.\n\n---\n\n## Technical Settings (Inferred)\n\nBased on the image characteristics:\n\n| Setting | Value | Why |\n|---------|-------|-----|\n| **Aperture** | f/2.8 | Shallow enough for background softness, sharp enough for sign |\n| **Shutter** | 1/60s | Slow enough for neon glow, fast enough to freeze walker |\n| **ISO** | 800-1600 | Necessary for low light, grain is acceptable |\n| **Focal Length** | 35mm | Classic street — wide enough for context, not distorted |\n| **Focus** | Sign | Everything else falls off naturally |\n| **WB** | Auto/Daylight | Let the neon be pink, let the sky be blue |\n\n---\n\n## Composition Analysis\n\n### The Grid\n\nIf you overlay a rule-of-thirds grid:\n\n```\n┌─────────┬─────────┬─────────┐\n│         │    ▓▓   │         │\n│         │  SIGN   │         │\n├─────────┼─────────┼─────────┤\n│  pole   │ building│         │\n│         │         │ figure  │\n├─────────┼─────────┼─────────┤\n│         │ street  │         │\n│ reflect │ reflect │ reflect │\n└─────────┴─────────┴─────────┘\n```\n\nThe sign sits at the top-center power point. The figure is on the right third line. The reflections balance the bottom. Textbook.\n\n### Leading Lines\n\n- The street leads your eye back toward the figure\n- The building's roofline leads to the sign\n- The pole provides a vertical anchor against the horizontals\n\n### Color Distribution\n\n- **Hot pink:** Concentrated in sign and reflections — accent color\n- **Deep blue:** Sky and shadows — dominant cool\n- **Orange/peach:** Horizon only — transitional warmth\n- **Gray/beige:** Building and street — neutral ground\n\nThe pink is maybe 10% of the image area but 90% of the visual impact. That's how accent colors work.\n\n---\n\n## What a Beginner Would Get Wrong\n\n**1. Centering the sign.** Feels logical but kills the composition.\n\n**2. Cropping out the figure.** \"It's about the sign!\" No. It's about the sign AND the world.\n\n**3. Shooting at blue hour, not twilight.** Blue hour is prettier but the horizon warmth is gone. You lose the transition.\n\n**4. Exposing for the shadows.** The sign blows out. You lose the glow.\n\n**5. Shooting from closer.** You lose context. The joke is the building-to-sign ratio. You need enough building to show how small it is.\n\n**6. Portrait orientation.** This scene needs the street, the width, the world. Landscape orientation is correct.\n\n---\n\n## The Eggleston Influence\n\nWilliam Eggleston would recognize this image. The vernacular subject (a commercial sign). The democratic leveling (treating the ordinary as worthy). The color as content (the pink isn't decoration, it's meaning).\n\nEggleston shot gas stations and grocery stores and tricycles. He made the overlooked LOOK. This image does the same — it makes a warehouse sign in an industrial district feel monumental.\n\n---\n\n## The Leiter Influence\n\nSaul Leiter shot through rain, through windows, through obstacles. His images have layers — foreground scrims, mid-ground subjects, background atmosphere.\n\nThe utility pole in this image is very Leiter. It's \"in the way\" but it's doing work. It adds depth, creates mystery, makes you feel like you're THERE, peeking at the scene through the urban fabric.\n\n---\n\n## Exhibition Notes\n\nIf this were printed for gallery display:\n\n**Size:** 24\" x 24\" or larger — the sign needs to glow  \n**Paper:** Metallic or glossy — enhance the reflection  \n**Frame:** Black, minimal — don't compete with the neon  \n**Lighting:** Spot from above — make the print glow like the subject  \n**Placement:** Eye level, isolated — give it room to breathe\n\nTitle: *\"NO AI TOWER, Lane Neverending, Dusk\"*\n\nOr just: *\"The Tower\"*\n\n---\n\n## Final Assessment\n\nThis image succeeds because it knows what it's about.\n\nIt's about a joke (the \"tower\" is a sign).  \nIt's about a time (the handoff from day to night).  \nIt's about a place (Lane Neverending, industrial poetry).  \nIt's about a feeling (melancholic hope, neon noir).  \n\nEvery element serves those goals. Nothing extra. Nothing missing.\n\nThat's how you know it's done.\n"
              }
            },
            {
              "filename": "MINING-satellite.md",
              "perspective": "satellite",
              "data": {
                "_markdown": "# MINING: Satellite Perspective\n\nDeep mining of the NO AI TOWER sign from orbital and surveillance viewpoints.\n\n---\n\n## Satellite View: Night Pass\n\n**OBJECT ID:** LNE-5.5-NEON  \n**CLASSIFICATION:** Persistent Light Source  \n**FIRST DETECTED:** Unknown (predates available imagery)  \n**STATUS:** Active\n\n### Thermal Signature\n\nThe sign runs hot. Neon tubes operate at approximately 100°F during normal operation. Against the cool evening street, it registers as a distinct heat island — a rectangle of warmth floating above a thermally neutral structure.\n\nThe building beneath shows minimal thermal signature at dusk. No HVAC running. Few internal light sources. Either empty, or whatever's inside generates negligible heat.\n\nOr, the building is shielded.\n\n### Light Pollution Analysis\n\nRadiance: High  \nColor: 620nm peak (hot pink)  \nSpread: 200-meter visible radius  \nReflected: Significant on wet surfaces\n\nFrom orbit, the sign is visible even through moderate cloud cover. It's one of the brightest point sources in this industrial district. Brighter than the streetlights. Brighter than the warehouse loading bays.\n\nSomeone wanted this seen from space.\n\n### Change Detection\n\nComparing imagery over 20 years:\n\n- **Building footprint:** Unchanged\n- **Sign framework:** Unchanged  \n- **Sign text:** Unchanged\n- **Surrounding development:** Significant change (new construction E and W)\n- **This parcel:** Frozen in time\n\nThe building never expands. The sign never updates. It's as if this address exists outside normal urban development cycles.\n\n---\n\n## Drone Surveillance: County Assessor\n\n**PROPERTY ID:** LNE-0055-HALF  \n**PARCEL SIZE:** 0.4 acres  \n**STRUCTURE:** Single-story commercial, 3,200 sq ft  \n**SIGNAGE:** Non-conforming (grandfathered)\n\n### Notes from Field Inspection\n\nThe sign exceeds current code by approximately 400%. If built today, it would require a variance that would never be granted. However, installation predates the 1987 signage ordinance. Grandfathered indefinitely.\n\nStructure is in good repair. Utilities active. No visible occupants during business hours.\n\nOwner of record: \"The No Trust\"  \nContact: Unlisted  \nTax status: Paid in full through 2087\n\n*Someone paid 60 years of property tax in advance. Who does that?*\n\n---\n\n## Traffic Camera: Intersection of Lane Neverending & Industrial\n\n**FEED ID:** LNEI-001  \n**OPERATIONAL:** Yes  \n**COVERAGE:** Sign visible in upper right quadrant\n\n### Automated Traffic Report\n\n**Vehicles passing per day:** 847 (avg)  \n**Pedestrians per day:** 23 (avg)  \n**Vehicles stopping to photograph sign:** 12 (avg)  \n**Duration of stops:** 45 seconds to 8 minutes\n\n### Incident Log Highlights\n\n- **2024-03-15:** Vehicle parked for 3 hours facing sign. Driver never exited.\n- **2024-07-22:** Group of 7 posed for photo. One wore \"NO AI\" t-shirt.\n- **2024-11-30:** Utility truck. Sign was off for 4 hours (maintenance).\n- **2025-01-01:** Someone left flowers at base of building. No pickup.\n- **2025-08-14:** News van, 2 hours. No story ever aired.\n- **2026-01-25:** Current image captured.\n\n---\n\n## Flight Path: Approach to Regional Airport\n\n**ALTITUDE:** 3,000 ft AGL  \n**HEADING:** 270° (westbound approach)  \n**TIME:** Dusk\n\n### Pilot Observation\n\n\"There's this pink thing, right? Every time I'm on the 270 approach after sunset, I see it. Lane Neverending — that industrial strip between the rail yard and the highway.\n\nMost of it's dark. Warehouses closing up. But there's this one building with a neon sign that's like... WAY too big. Like it's trying to be seen from up here.\n\nFirst time I saw it, I thought it said 'NO' something. Squinted. 'NO AI.' Then 'TOWER.'\n\nOne of the flight attendants asked me once what that building was. I didn't know. Still don't.\n\nBut every approach, there it is. Glowing. Waiting.\n\nSome of the other pilots call it the Beacon. We don't know what we're supposed to do when we see it. But we see it. Every time.\"\n\n---\n\n## Spy Satellite: CLASSIFIED\n\n**[REDACTED]**\n\n### Observation Summary\n\nTarget location monitored since **[REDACTED]**.\n\nNo anomalous EM emissions detected.  \nNo unusual traffic patterns confirmed.  \nNo weapons signatures.  \nNo chemical precursors.\n\nHowever: Structure demonstrates unusual resistance to signals intelligence. Interior layouts remain unresolved across **[REDACTED]** imaging passes. Consistent with Faraday shielding or **[REDACTED]**.\n\nRecommendation: Continue passive monitoring. Do not engage.\n\n### Analyst Note\n\n\"The sign says 'NO AI.' Our AI-assisted analysis tools consistently mislabel this structure. Pattern recognition fails. Classification models return 'UNDEFINED.'\n\nIt's almost like the building knows it's being watched.\n\nAnd it's saying no.\"\n\n---\n\n## Google Earth: Street View Gap\n\n**COVERAGE:** Available  \n**LAST UPDATE:** 2024-06  \n**ANOMALY:** Sign text is blurred in all captures\n\n### User Report\n\n\"I tried to screenshot the sign from Google Street View and the letters came out fuzzy. Everything else in the image is sharp. Just the sign is blurred.\n\nIs this intentional? Privacy request? Or something else?\n\nPosted to r/googlemapsshenanigans. Thread was removed within 2 hours. No explanation.\"\n\n### Metadata Analysis\n\nBlur appears to be applied in post-processing. Not a camera artifact. Deliberate obfuscation.\n\nWho requested this? Records don't say.\n\nThe sign wants to be seen in person. Not through intermediaries.\n\n---\n\n## Summary: View from Above\n\nFrom orbit, the sign is a hot pink pixel in a gray industrial sea.\n\nFrom drones, it's a code violation that nobody enforces.\n\nFrom traffic cameras, it's a destination people pause at but never enter.\n\nFrom airplanes, it's a landmark pilots use to orient themselves.\n\nFrom spy satellites, it's an enigma that resists classification.\n\nFrom Google, it's a blur.\n\nEveryone sees it. Nobody quite captures it.\n\nThe tower is made of light, and light is hard to hold.\n"
              }
            },
            {
              "filename": "MINING-sound.md",
              "perspective": "sound",
              "data": {
                "_markdown": "# MINING: The Soundscape\n\nDeep mining of what you would HEAR standing where this photo was taken.\n\n---\n\n## The Primary Sound: The Buzz\n\n**Frequency:** 60Hz fundamental (US electrical)  \n**Harmonics:** 120Hz, 180Hz, 240Hz  \n**Character:** Not quite a hum. A buzz. With teeth.\n\nThe neon sign is never silent. Transformers convert wall power to the high voltage that excites the gas, and transformers hum. The tubes themselves resonate slightly — a higher, thinner sound layered over the transformer bass.\n\nClose your eyes near the sign and you'll hear it breathing.\n\n### The Buzz Has Moods\n\n**Cold night:** Higher pitched, more insistent  \n**Hot summer:** Lower, lazier  \n**Right after maintenance:** Almost musical, pure  \n**Overdue for maintenance:** Crackles, pops, irregular\n\nTonight — dusk, wet, cool — the buzz is steady. Confident. The sound of a sign that knows its job.\n\n---\n\n## Background: The Street\n\n**Traffic:** Distant. A car every few minutes, tires on wet asphalt. The hiss and splash of wheels through puddles, then fading doppler.\n\n**The streetlamp:** Slight electrical hum, lower than the sign, easily masked.\n\n**Footsteps:** The lone walker. Leather soles on concrete, a rhythm of going-somewhere. Unhurried but purposeful.\n\n**Wind:** Light. Enough to move air but not enough to whistle through the sign's framework.\n\n**Birds:** None at this hour. They've settled for the night.\n\n---\n\n## Industrial Ambience\n\n**Distant warehouse:** Roll-up door closing somewhere. Metal on metal, a rumble and clang.\n\n**Highway:** A mile away, constant white noise. The city never stops moving, even when this street goes quiet.\n\n**Rail yard:** Occasional coupling sounds — the metallic impact of cars connecting. A train horn, maybe once an hour, long and mournful.\n\n---\n\n## The Silence Between\n\nThe strange thing about Lane Neverending at dusk: the silence isn't empty. It's *populated.*\n\nBetween the buzz and the traffic and the distant machinery, there are gaps. Pockets of actual quiet where you can hear:\n\n- Your own breathing\n- Your heartbeat (if you're anxious, and this place makes people anxious)\n- The tiny sounds of the building settling\n- The imperceptible creep of cooling metal\n\nSome say they've heard voices from inside the building. Muffled. Mechanical. A single voice speaking to no one.\n\nThe OVERLORD, maybe. Or playback. Or imagination.\n\n---\n\n## What the Photograph Sounds Like\n\nIf this image had audio, this is what you'd hear:\n\n```\n[00:00] Ambient: wet street, distant highway\n[00:02] Sign buzz enters, persistent \n[00:05] Footsteps, left to right, fading\n[00:12] Car passes, tires on wet road\n[00:18] Silence except for buzz\n[00:23] Metal creak (sign framework settling)\n[00:25] Buzz continues...\n[00:30] Fade to silence, buzz remains\n```\n\nThe buzz is always there. It's the drone note this street is built on.\n\n---\n\n## At 3 AM\n\nThis photo was taken at dusk. But if you stood here at 3 AM:\n\n**The buzz would be louder.** No traffic to mask it.\n\n**The street would be silent.** No workers going home.\n\n**The reflection would be sharper.** No movement to ripple the puddles.\n\n**You would feel watched.** The sign sees in the dark.\n\nSome people come here at 3 AM on purpose. They stand where you're standing in this photo and they listen. To the buzz. To the silence. To whatever they came here hoping to hear.\n\nSome of them hear it.\n\nThey don't talk about what it said.\n"
              }
            }
          ],
          "mining_count": 6,
          "exif": {
            "Make": "Semantic Camera Co.",
            "Model": "Stereo Vision Mark II",
            "Software": "MOOLLM Visualizer 1.0",
            "ExposureTime": "1/60",
            "FNumber": "f/2.8",
            "ISO": 800,
            "ExposureProgram": "Aperture Priority",
            "ExposureBias": "+0.7",
            "FocalLength": "35mm",
            "FocalLengthIn35mmFilm": 35,
            "LensModel": "Semantic Prime 35mm f/1.4",
            "DateTimeOriginal": "2026:01:25 17:42:33",
            "DateTimeDigitized": "2026:01:25 17:42:33",
            "GPSLatitude": "37.7749 N",
            "GPSLongitude": "122.4194 W",
            "GPSAltitude": "12m",
            "WhiteBalance": "Auto",
            "ColorSpace": "sRGB",
            "ImageWidth": 2048,
            "ImageHeight": 1365,
            "Orientation": "Horizontal"
          },
          "iptc": {
            "Headline": "NO AI Sign at Dusk",
            "Caption": "The iconic 40-foot neon sign outside NO AI TOWER, Lane Neverending",
            "Keywords": [
              "neon sign",
              "dusk",
              "urban",
              "NO AI",
              "Lane Neverending",
              "street photography",
              "semantic stereo"
            ],
            "Creator": "MOOLLM Visualizer",
            "Credit": "Semantic Stereo Vision",
            "Source": "Adventure-4 / Lane Neverending",
            "CopyrightNotice": "CC0 — Public Domain",
            "UsageTerms": "Free to use, remix, share",
            "City": "Lane Neverending",
            "Province": "Adventure-4",
            "Country": "MOOLLM",
            "Category": "PHO",
            "SupplementalCategories": [
              "Street",
              "Urban",
              "Neon",
              "Dusk"
            ]
          },
          "xmp": {
            "dc": {
              "title": "NO AI Sign at Dusk",
              "description": "Semantic stereo photograph of the NO AI TOWER sign",
              "creator": [
                "MOOLLM Visualizer"
              ],
              "subject": [
                "neon",
                "urban",
                "protest",
                "irony"
              ],
              "rights": "Public Domain"
            },
            "photoshop": {
              "ColorMode": "RGB",
              "ICCProfile": "sRGB IEC61966-2.1"
            },
            "moollm": {
              "stereo_method": "semantic_stereo_vision",
              "left_eye": "PHOTO.yml",
              "right_eye": "PHOTO.md",
              "adventure": "adventure-4",
              "location": "lane-neverending/no-ai-tower",
              "subject_refs": [
                "../../no-ai-tower/sign.yml",
                "../../../../skills/no-ai-overlord/"
              ]
            }
          },
          "camera": {
            "position": "street_level",
            "distance": "across_the_street",
            "angle": "looking_up",
            "framing": {
              "foreground": "street, sidewalk, lamppost_edge",
              "midground": "building_facade",
              "background": "sign, sky"
            },
            "focus": {
              "sharp": "sign",
              "soft": "everything_else"
            },
            "exposure": {
              "for": "neon_glow",
              "let_shadows": "go_dark"
            }
          },
          "style": {
            "photographers": [
              "William Eggleston",
              "Saul Leiter",
              "Todd Hido"
            ],
            "qualities": [
              "cinematic",
              "melancholic_hope",
              "neon_noir",
              "documentary_fiction"
            ]
          },
          "status": "generated"
        }
      ],
      "photo_count": 1,
      "cover_photo": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4/street/lane-neverending/slideshow/no-ai-sign-dusk/no-ai-sign-dusk.png",
      "glance": "📷 Lane Neverending — Photo Archive (1 photos)",
      "examine": "A collection of 1 photos.\nCover: NO AI Sign at Dusk\nUse BROWSE to view them.",
      "simulated_exif": {
        "camera": {
          "make": "MOOST Optical",
          "model": "Semantic Eye Mark IV",
          "serial": "SE4-2026-NO-AI-001",
          "firmware": "v4.2.1-stereo"
        },
        "lens": {
          "make": "Constructionist Glass",
          "model": "Wide Reality 24-70mm f/2.8",
          "focal_length": 28,
          "focal_length_35mm_equiv": 28,
          "max_aperture": 2.8,
          "min_aperture": 22,
          "filter": "none",
          "hood": true
        },
        "exposure": {
          "mode": "manual",
          "aperture": 5.6,
          "shutter_speed": "1/60",
          "iso": 400,
          "ev_compensation": 0,
          "metering_mode": "center-weighted"
        },
        "focus": {
          "mode": "manual",
          "distance": 15,
          "depth_of_field": "deep",
          "hyperfocal": true
        },
        "film": {
          "type": "Portra 400",
          "format": "35mm",
          "push_pull": 0,
          "grain": "fine",
          "color_profile": "warm",
          "dynamic_range": "high"
        },
        "lighting": {
          "time_of_day": "dusk",
          "sun_position": "below horizon",
          "golden_hour": true,
          "blue_hour": true,
          "artificial": [
            {
              "source": "neon sign",
              "color": "hot pink",
              "intensity": "dominant"
            },
            {
              "source": "street lamp",
              "color": "sodium orange",
              "intensity": "secondary"
            }
          ],
          "ambient": "low",
          "contrast": "high"
        },
        "flash": {
          "used": false,
          "mode": null,
          "power": null
        },
        "support": {
          "tripod": true,
          "tripod_type": "carbon fiber",
          "head_type": "ball head",
          "image_stabilization": "off"
        },
        "weather": {
          "conditions": "clear",
          "temperature_c": 18,
          "humidity_percent": 45,
          "wind": "light breeze",
          "precipitation": "none"
        },
        "gps": {
          "latitude": 37.7749,
          "longitude": -122.4194,
          "altitude_m": 12,
          "location_name": "Lane Neverending, 5½",
          "accuracy_m": 3
        },
        "datetime": {
          "captured": "2026-01-25T17:45:00-08:00",
          "timezone": "America/Los_Angeles",
          "solar_time": "18:12"
        },
        "post_processing": {
          "raw_converter": "Semantic Lightroom",
          "adjustments": [
            {
              "exposure": 0.3
            },
            {
              "highlights": -20
            },
            {
              "shadows": 15
            },
            {
              "clarity": 10
            },
            {
              "vibrance": 5
            }
          ],
          "crop": false,
          "rotation": 0,
          "lens_correction": true,
          "chromatic_aberration_fix": true
        },
        "creative": {
          "style": "cinematic",
          "mood_target": [
            "liminal",
            "mysterious",
            "neon-noir"
          ],
          "reference_photographers": [
            "Gregory Crewdson",
            "Brassaï",
            "Saul Leiter"
          ],
          "reference_films": [
            "Blade Runner",
            "Lost in Translation",
            "Myst (game)"
          ]
        },
        "photographer": {
          "name": "Don Hopkins",
          "userid": "don",
          "notes": "Shot from street level, looking up at a ridiculous angle.\nWanted to capture the absurdity — a one-story building\nwith a sign 4x its height. The sign IS the architecture.\nWaited for that magic hour glow.\n"
        }
      },
      "method": {
        "name": "Semantic Stereo Vision",
        "description": "Two-eye triangulation for better depth perception:\n\nLEFT EYE (PHOTO.yml):\n  Structural skeleton — pointers, references, metadata\n  What IS there. What connects to what.\n  YAML Jazz with semantic structure.\n\nRIGHT EYE (PHOTO.md):\n  Rich narrative — description, atmosphere, emotion\n  What it FEELS like. How light falls.\n  Prose that paints.\n\nTRIANGULATION (renderer):\n  Pass BOTH to image generator.\n  The structural gives precision.\n  The narrative gives soul.\n  Together: depth perception.\n",
        "see": "skills/visualizer/SKILL.md#semantic-stereo-vision"
      },
      "github_base": "https://raw.githubusercontent.com/SimHacker/moollm/don-adventure-4-run-1/examples/adventure-4",
      "_source": "street/lane-neverending/slideshow/SLIDESHOW.yml"
    }
  },
  "object": {
    "garden/blackboard": {
      "name": "Garden Blackboard",
      "type": "sign",
      "portable": false,
      "description": "A wooden-framed blackboard propped against the pub wall,\nchalked with today's outdoor specials.\n",
      "examine": "┌─────────────────────────────────┐\n│    🌿 GARDEN SPECIALS 🌿        │\n├─────────────────────────────────┤\n│                                 │\n│  PIE OF THE DAY:               │\n│    \"Mystery Meat\"               │\n│    (don't ask, don't tell)      │\n│                                 │\n│  DRINKS:                        │\n│    Cold Ale .......... 1 gold   │\n│    Cider ............. 1 gold   │\n│    Lemonade .......... 5 copper │\n│    \"The Adventurer\" .. 3 gold   │\n│      (ask bartender)            │\n│                                 │\n│  SNACKS:                        │\n│    Cheese board ...... 2 gold   │\n│    Bread & dripping .. 5 copper │\n│    \"Garden Surprise\" . 1 gold   │\n│      (whatever's ripe)          │\n│                                 │\n│  NOTE: Order inside, we'll     │\n│  bring it out. No table service │\n│  for grues.                     │\n│                                 │\n│  ☀️ Sunshine: COMPLIMENTARY ☀️  │\n└─────────────────────────────────┘\n\nSomeone has added in different chalk:\n\"The cheese is GOOD - B.\"\n\nAnd below that, in a child's hand:\n\"Biscuit was here\"\n",
      "id": "garden/blackboard",
      "_source": "garden/blackboard.yml",
      "location": "garden",
      "synonyms": [
        "garden",
        "garden blackboard",
        "blackboard"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/lamp": {
      "name": "Brass Lamp",
      "type": "light_source",
      "portable": true,
      "tags": [
        "lighting",
        "portable",
        "grue-defense",
        "adventure-essential"
      ],
      "description": "A well-worn brass lamp sits on a natural stone shelf, waiting for\nits next adventurer. The metal is warm to the touch, as if it\nremembers the hands that carried it before.\n\nPrevious owners have scratched their initials into the base:\ntiny marks of those who faced the darkness and returned.\n\nIt is currently OFF but ready to light.\n",
      "state": false,
      "oil": 100.0,
      "max_oil": 100.0,
      "consumption": {
        "per_move": 1.0,
        "per_wait": 0.5,
        "per_examine": 0.25,
        "per_action": 0.5
      },
      "modifiers": {
        "maze_rooms": 1.5,
        "cold_rooms": 1.25,
        "mushroom_rooms": 0.75
      },
      "glow": {
        "color": "warm_brass",
        "radius": "standard"
      },
      "upgrades_available": [
        {
          "name": "Premium Glow Juice",
          "cost": 3,
          "effect": "Blue flame, +900 max oil, grue hesitation",
          "location": "maze/room-j/lamp-vendor.yml"
        }
      ],
      "actions": {
        "LIGHT": {
          "description": "Light the lamp (requires oil > 0)",
          "effect": "state: on, provides light, consumes oil"
        },
        "EXTINGUISH": {
          "description": "Put out the lamp (conserves oil)",
          "effect": "state: off, darkness returns"
        },
        "REFUEL": {
          "description": "Add oil (requires oil container or vendor)",
          "effect": "Increases oil level"
        },
        "EXAMINE": {
          "description": "Look at the lamp closely",
          "effect": "See current oil level and state"
        },
        "RUB": {
          "description": "Rub the lamp vigorously",
          "effect": "A genie appears! (first time only)",
          "first_time_only": true,
          "triggers": "genie-note.yml"
        }
      },
      "warnings": [
        {
          "threshold": 20,
          "message": "The lamp flickers. Oil is running low."
        },
        {
          "threshold": 10,
          "message": "The flame gutters dangerously. Find oil soon!"
        },
        {
          "threshold": 5,
          "message": "The lamp sputters. Darkness is coming."
        },
        {
          "threshold": 0,
          "message": "The lamp goes out. You are in darkness."
        }
      ],
      "lore": "\"In the beginning was the Word, and the Word was GET LAMP.\"\n— Ancient Adventurer Proverb\n\nThe lamp has been carried through these passages by many hands.\nSome carved their initials. Some never returned. All of them\nunderstood: in the maze, light is life.\n\nThe grue fears the lamp. The grue HATES the lamp. The grue\nwould very much like you to forget the lamp.\n\nDon't forget the lamp.\n",
      "documentary": "\"GET LAMP\" (2010) — Jason Scott's documentary about text adventures\nhttps://www.getlamp.com/\n\nThe phrase \"GET LAMP\" is one of the most typed commands in the\nhistory of interactive fiction. It's practically muscle memory\nfor anyone who grew up in the golden age of adventure games.\n",
      "id": "garden/lamp",
      "_source": "garden/lamp.yml",
      "location": "garden",
      "synonyms": [
        "brass lamp",
        "lamp",
        "brass"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/suspicious-plant": {
      "name": "Suspicious Plant",
      "type": "flora",
      "portable": false,
      "sentient": "probably",
      "description": "One of the planters contains something... unusual. It's tall,\nleafy, and seems to turn toward you when you're not looking.\n",
      "examine": "It's definitely a plant. Definitely.\n\nCharacteristics:\n• Tall (about 4 feet)\n• Leafy (big tropical-looking leaves)\n• Green (mostly)\n• Has what might be eyes (probably just flowers)\n• Is definitely not watching you (it was looking at that bird)\n\nA small wooden stake in the soil reads:\n\"AUDREY II (rescued)\"\n\nWait, that's crossed out. Now it says:\n\"PLANTY McPLANTFACE (harmless)\"\n\nThere's also a hand-lettered sign:\n\"Please don't feed me. I'm on a diet.\"\n\nThe plant rustles, though there's no wind.\n",
      "actions": {
        "TALK": {
          "description": "Address the plant",
          "effect": "The plant rustles attentively. Its leaves angle toward you.\n\nIt doesn't respond verbally, but you get the distinct\nimpression it's listening. And judging.\n"
        },
        "FEED": {
          "description": "Offer the plant something",
          "warning": "The sign says not to...",
          "effect": "The plant perks up IMMEDIATELY.\n\nIts leaves spread wide in what can only be described as\nenthusiasm. A tendril extends hopefully.\n\nA voice from the pub yells: \"DON'T FEED THE PLANT!\"\n\nThe plant wilts theatrically.\n"
        },
        "WATER": {
          "description": "Water the plant",
          "effect": "The plant sighs contentedly. Its leaves perk up.\nA small flower opens. It might be smiling?\n\nYou've made a friend. A suspicious, definitely-not-carnivorous\nfriend.\n"
        }
      },
      "secret": {
        "true_nature": "Actually just a very dramatic house plant",
        "relationship_with_rocky": "Distant cousins (mineralogically speaking)",
        "favorite_food": "Compliments"
      },
      "id": "garden/suspicious-plant",
      "_source": "garden/suspicious-plant.yml",
      "location": "garden",
      "synonyms": [
        "suspicious-plant",
        "suspicious",
        "plant",
        "suspicious plant"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/garden-table": {
      "name": "Garden Tables",
      "type": "furniture",
      "portable": false,
      "description": "Three round tables of varying sizes, surrounded by mismatched chairs.\nEach has seen years of outdoor use — weathered but solid.\n",
      "examine": "TABLE 1 (small, 2 chairs):\nPerfect for an intimate conversation. Currently occupied by a\nhalf-finished chess problem, pieces frozen mid-game. White to\nmove. Mate in 3, if you can find it.\n\nTABLE 2 (medium, 4 chairs):\nThe social table. Umbrella unfurled, providing dappled shade.\nSomeone's abandoned newspaper. An empty pint glass with a bee\ninvestigating the dregs.\n\nTABLE 3 (large, 6 chairs):\nThe adventuring party table. Scratched with old campaign maps\nand initials. A candle stub in a wine bottle. This table has\nseen some planning sessions.\n\nTHE BARREL TABLE:\nNot a proper table — just an old ale barrel with a board on top.\nBut someone left a hand-written menu on it:\n\n\"TODAY'S GARDEN SPECIALS:\n• Pie (ask inside)\n• Whatever's cold\n• Sunshine (free)\"\n",
      "actions": {
        "SIT": {
          "description": "Take a seat at a table",
          "usage": "SIT [at table 1/2/3/barrel]",
          "effect": "You settle into a chair. The garden sounds wash over you.\nThis is a good place to think. Or not think.\n"
        },
        "SOLVE": {
          "description": "Attempt the chess problem",
          "usage": "SOLVE CHESS",
          "hint": "Knight sacrifice, then discovered check..."
        }
      },
      "id": "garden/garden-table",
      "_source": "garden/garden-table.yml",
      "location": "garden",
      "synonyms": [
        "garden",
        "garden tables",
        "tables",
        "garden-table"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/mailbox": {
      "name": "Grand Mailbox",
      "type": "postal_receptacle",
      "portable": false,
      "description": "A weathered wooden mailbox stands near the chamber entrance, improbably\npermanent despite being underground. It's the classic rural American style —\nthe kind with a little red flag, except this one is brass, and seems to\nglow faintly.\n\nThe name \"FANTASTIPANTS\" is painted on the side in faded gold letters.\nBelow it, in smaller script: \"DUNGEON ROUTE 1\"\n\nThe flag is UP. You have mail.\n",
      "examine": "The mailbox is larger than it first appears. Much larger. The opening\nseems to go deeper than physics allows. You can see letters, packages,\nscrolls, and what might be a small crate wedged in there.\n\nA faded sticker reads:\n\"OFFICIAL FDDS RECEIVING STATION — Est. 1876\"\n\"Deliveries: Continuous • Pickup: Infinite\"\n\nScratched into the wood: \"Check daily. The dungeon never stops mailing.\"\n",
      "initial_contents": [
        {
          "item": "Welcome Leaflet",
          "type": "document",
          "from": "The Dungeon",
          "contents": "WELCOME TO THE FANTASTIPANTS FAMILY DUNGEON!\n\nCongratulations on your inevitable arrival here. Whether you chose\nthis adventure or it chose you, the result is the same: you're here,\nthere's a lamp, and there's almost certainly a grue.\n\nBASIC COMMANDS:\n- GET LAMP (seriously, get the lamp)\n- GO [direction]\n- EXAMINE [thing]\n- CHECK MAIL (always check your mail!)\n\nFor a COMPLETE GUIDE TO SURVIVAL, mail away for our brochure!\nSee the matchbook in the kitchen drawer for details.\n\nGood luck. You'll need it.\n\n— THE MANAGEMENT\n"
        },
        {
          "item": "Mother's Welcome Note",
          "type": "letter",
          "from": "Mother",
          "contents": "Dearest child,\n\nIf you're reading this, the mailbox works. (I wasn't sure after\nwhat happened to the LAST mailbox. Don't ask.)\n\nI've left supplies in the kitchen. There's a proper note on the\ntable — READ IT. Write back to me. I worry when you don't write.\n\nThe dungeon post is reliable. Use it!\n\nLove always,\nMother\n\nP.S. - Check your mail often. You never know what might arrive.\n"
        },
        {
          "item": "ACME Welcome Catalog (Current Issue)",
          "type": "catalog",
          "from": "ACME Corporation",
          "contents": "🎉 CONGRATULATIONS, NEW ADVENTURER! 🎉\n\nYou've been pre-approved for ACME credit!*\n\n*Credit limit: 5 gold. Interest rate: Variable (depends on how\nfunny your failures are). Payment terms: Upon delivery or death,\nwhichever comes first.\n\nBrowse our COMPLETE CATALOG in the kitchen!\nOr mail this card back with your first order!\n\n[  ] YES! Rush me _________________ for only ___ gold!\n\nACME: \"What Could Possibly Go Wrong?\"™\n"
        }
      ],
      "actions": {
        "CHECK": {
          "description": "See what's in the mailbox",
          "aliases": [
            "CHECK MAIL",
            "CHECK MAILBOX",
            "OPEN MAILBOX"
          ],
          "effect": "You open the mailbox and peer inside...\n\n[Lists all current contents with brief descriptions]\n[New items are marked with ✨]\n"
        },
        "GET-MAIL": {
          "description": "Take something from the mailbox",
          "usage": "GET [item] FROM MAILBOX / TAKE MAIL",
          "effect": "Item moves to inventory"
        },
        "SEND": {
          "description": "Send something via the mailbox",
          "usage": "SEND [letter/item] / MAIL [letter]",
          "effect": "Item enters postal system, flag goes UP"
        },
        "FLAG": {
          "description": "Check or manipulate the flag",
          "usage": "FLAG UP / FLAG DOWN / CHECK FLAG",
          "effect": "FLAG UP: You have outgoing mail waiting for pickup, OR new mail arrived\nFLAG DOWN: No activity (boring)\n"
        }
      },
      "arrival_types": {
        "letters": {
          "description": "Personal correspondence",
          "sources": [
            "Mother (replies to your letters)",
            "NPCs you've interacted with",
            "Historical adventurers (if you wrote to them)",
            "The skeleton's family (if you wrote to them)",
            "Random pen pals (rare)"
          ]
        },
        "packages": {
          "description": "Physical deliveries",
          "sources": [
            "ACME orders (2-4 turns after ordering)",
            "Mother's care packages",
            "Family heirlooms (if you asked about history)",
            "Prize packages (from mail-in offers)",
            "Mystery boxes (rarely, suspiciously)"
          ]
        },
        "advertisements": {
          "description": "Unsolicited commercial mail",
          "examples": [
            "ACME seasonal catalogs",
            "Spelunker Today magazine subscription offers",
            "Lamp oil discount coupons",
            "Grue insurance solicitations",
            "Time-share in sunny surface-world locations",
            "Extended warranty on your lamp"
          ]
        },
        "bills": {
          "description": "Financial obligations",
          "examples": [
            "ACME credit statements",
            "Dungeon Property Tax Notice",
            "Lamp rental fees (if applicable)",
            "Grue damage assessment (if you survived)"
          ]
        },
        "chain_letters": {
          "description": "CAUTION: These actually work!",
          "mechanics": "Chain letters in this dungeon are REAL.\n\nIf you receive one and FORWARD it to 3 people:\n- Good luck for 5 moves\n- Bonus gold may appear\n- Grues are slightly less aggressive\n\nIf you BREAK the chain:\n- Bad luck for 10 moves\n- Lamp consumes oil 1.5x faster\n- The grue REMEMBERS\n- You feel vaguely guilty\n\nIf you RETURN TO SENDER:\n- The original sender suffers consequences\n- You gain \"Chain Breaker\" title\n- Morally ambiguous but satisfying\n"
        },
        "plot_hooks": {
          "description": "Adventure seeds arriving by mail",
          "examples": [
            "Distress call from another dungeon",
            "Map fragment from unknown sender",
            "Warning about something in the maze",
            "Invitation to treasure hunt",
            "Summons from the Adventurer's Guild"
          ]
        },
        "stamps_and_collectibles": {
          "description": "Valuable postal items",
          "examples": [
            "Limited edition stamps (One Lousy Point series)",
            "Commemorative covers",
            "Postal history documents",
            "Collector's brochures"
          ]
        }
      },
      "mail_in_offers": {
        "description": "Throughout the dungeon, you'll find matchbooks, postcards, and\nother items with mail-in offers. SEND them to receive prizes!\n\nThese are tributes to the classic Zork mechanic where mailing\na matchbook got you a brochure with the legendary \"One Lousy\nPoint Donald Woods Stamp\" — a tribute from the Zork creators\nto the Adventure creators.\n",
        "how_it_works": "1. Find a promotional item (matchbook, card, coupon)\n2. MAIL it via any mailbox\n3. Wait 3-5 turns\n4. Check mailbox for your prize!\n",
        "current_offers": {
          "spelunker_today_matchbook": {
            "send": "Spelunker Today matchbook",
            "wait": 4,
            "receive": [
              "Spelunker Today Magazine (premiere issue)",
              "One Lousy Point Donald Woods Stamp",
              "Subscription form (ongoing deliveries!)"
            ],
            "stamp_worth": "One lousy point (but priceless historically)",
            "lore": "The stamp features Don Woods, co-creator of Adventure, in\nfull spelunking gear. The text reads \"ONE LOUSY POINT\" —\na tribute from the Zork creators to the difficulty of\nfinding this item in the original game.\n"
          },
          "adventurer_guild_matchbook": {
            "send": "Adventurer's Guild matchbook",
            "wait": 3,
            "receive": [
              "Guild membership card (provisional)",
              "One Lousy Point Scott Adams Stamp",
              "Map to the nearest guild hall"
            ],
            "stamp_worth": "One lousy point",
            "lore": "Scott Adams brought adventure games to home computers.\nHis face graces this stamp with the caption \"BROUGHT\nADVENTURE HOME\" beneath the traditional \"ONE LOUSY POINT.\"\n"
          },
          "lamp_oil_premium_card": {
            "send": "Lamp Oil Premium Card",
            "wait": 2,
            "receive": [
              "Sample vial of premium lamp oil",
              "One Lousy Point Will Crowther Stamp",
              "Coupon for 20% off vendor purchases"
            ],
            "stamp_worth": "One lousy point",
            "lore": "Will Crowther created the original Adventure. His stamp\nshows him exploring Mammoth Cave, where he found the\ninspiration for the first text adventure.\n"
          },
          "grue_insurance_form": {
            "send": "Grue Insurance Application",
            "wait": 5,
            "receive": [
              "Certificate of Coverage (mostly useless)",
              "One Lousy Point Dave Lebling Stamp",
              "Pamphlet: 'So You've Been Eaten By A Grue'"
            ],
            "stamp_worth": "One lousy point",
            "lore": "Dave Lebling co-created Zork and invented the grue.\nHis stamp shows a shadowy figure with the text \"INVENTOR\nOF THE GRUE\" and \"SORRY ABOUT THAT.\"\n"
          },
          "mystery_offer_envelope": {
            "send": "Mysterious Sealed Envelope",
            "wait": 7,
            "receive": [
              "Random valuable item",
              "One Lousy Point Marc Blank Stamp",
              "Note: 'You shouldn't have opened this.'"
            ],
            "stamp_worth": "One lousy point",
            "lore": "Marc Blank co-created Zork. His stamp shows him looking\nsuspicious, with \"TRUST NO ONE\" as the caption.\n"
          }
        }
      },
      "pyramid_schemes": {
        "description": "Occasionally, dubious \"investment opportunities\" arrive.\nThese are REAL pyramid schemes that actually function!\n",
        "example_schemes": {
          "grue_meat_mlm": {
            "name": "GRUE-A-LIFE Multi-Level Marketing",
            "pitch": "\"Have YOU ever wanted to be your own boss?\"\n\"Grue meat is the PROTEIN OF THE FUTURE!\"\n\"Join now and recruit your friends!\"\n",
            "mechanics": {
              "entry_fee": 3,
              "recruit_bonus": "1 gold per recruit",
              "collapse_after": "5 levels deep"
            },
            "consequences": {
              "success": "Modest gold if you get out early",
              "failure": "Lose entry fee, all recruits are angry",
              "collapse": "Dungeon-wide reputation damage"
            },
            "tom_opinion": "Tom has SERIOUS concerns.",
            "mother_opinion": "Bumblewick! I raised you better than this!"
          },
          "dungeon_timeshare": {
            "name": "Paradise Caverns Timeshare",
            "pitch": "\"Own a piece of the PREMIUM dungeon experience!\"\n\"Week 47 available! (It's very dark that week.)\"\n",
            "mechanics": {
              "down_payment": 10,
              "maintenance_fees": "1 gold per adventure",
              "actual_value": "A hole in the ground"
            },
            "consequences": {
              "buy_in": "Lose gold, gain nothing useful",
              "attend_presentation": "Waste 3 turns, free lamp oil",
              "report_scam": "Earn 'Consumer Advocate' title"
            }
          }
        }
      },
      "stamp_collection": {
        "description": "The \"ONE LOUSY POINT\" stamp series commemorates the founders\nof interactive fiction. Collect them all!\n\nEach stamp is worth ONE LOUSY POINT toward your score.\nBut the REAL value is historical and sentimental.\n",
        "complete_series": [
          {
            "name": "Donald Woods",
            "title": "Editor, Spelunker Today",
            "caption": "ONE LOUSY POINT",
            "rarity": "common",
            "obtained_via": "Mail Spelunker Today matchbook",
            "tribute": "Co-creator of Adventure (1977)"
          },
          {
            "name": "Will Crowther",
            "title": "Original Explorer",
            "caption": "WHERE IT ALL BEGAN",
            "rarity": "common",
            "obtained_via": "Mail Lamp Oil Premium Card",
            "tribute": "Creator of the original Adventure (1976)"
          },
          {
            "name": "Scott Adams",
            "title": "Home Computer Pioneer",
            "caption": "BROUGHT ADVENTURE HOME",
            "rarity": "common",
            "obtained_via": "Mail Adventurer's Guild matchbook",
            "tribute": "First commercial adventure game creator (1978)"
          },
          {
            "name": "Dave Lebling",
            "title": "Inventor of the Grue",
            "caption": "SORRY ABOUT THAT",
            "rarity": "uncommon",
            "obtained_via": "Mail Grue Insurance form",
            "tribute": "Co-creator of Zork"
          },
          {
            "name": "Marc Blank",
            "title": "Mystery & Intrigue",
            "caption": "TRUST NO ONE",
            "rarity": "uncommon",
            "obtained_via": "Mail Mystery Envelope",
            "tribute": "Co-creator of Zork"
          },
          {
            "name": "Tim Anderson",
            "title": "Fourth Implementor",
            "caption": "ALSO THERE",
            "rarity": "rare",
            "obtained_via": "Complete the stamp collection quest",
            "tribute": "Co-creator of Zork"
          },
          {
            "name": "Bruce Daniels",
            "title": "Fifth Implementor",
            "caption": "DON'T FORGET ME",
            "rarity": "rare",
            "obtained_via": "Find in maze room-h mushrooms",
            "tribute": "Co-creator of Zork"
          },
          {
            "name": "Roberta Williams",
            "title": "Graphics Pioneer",
            "caption": "I SEE WHAT YOU DID THERE",
            "rarity": "legendary",
            "obtained_via": "Secret method involving Maurice",
            "tribute": "Creator of King's Quest, graphical adventures"
          },
          {
            "name": "Infocom Bearded Man",
            "title": "Corporate Mascot",
            "caption": "WE'D LIKE TO TELL YOU ABOUT INFOCOM",
            "rarity": "legendary",
            "obtained_via": "Order from ACME (rare delivery error)",
            "tribute": "The mysterious man from Infocom ads"
          }
        ],
        "collection_bonus": "If you collect ALL stamps in a series:\n\nFOUNDER'S SET (Woods, Crowther, Adams, Lebling, Blank):\n- Unlock: \"Historian\" achievement\n- Bonus: +5 points\n- Effect: Grues speak in reverent tones about \"the old days\"\n\nCOMPLETE SET (all 9 stamps):\n- Unlock: \"Archivist\" achievement  \n- Bonus: +10 points\n- Effect: The mailbox reveals a secret compartment\n- Secret: [REDACTED — discover for yourself!]\n"
      },
      "tom_opinion": "\"Tom likes the mailbox. Tom checks it every time you're here.\"\n\"Tom has cataloged all known stamps. Tom is a completionist.\"\n\"Tom thinks chain letters are STATISTICALLY SIGNIFICANT.\"\n\"Tom has STRONG OPINIONS about pyramid schemes.\"\n\"Tom recommends mailing all matchbooks. FOR SCIENCE.\"\n",
      "lineage": "This mailbox is a direct tribute to Zork's iconic opening:\n\n\"West of House\nYou are standing in an open field west of a white house,\nwith a boarded front door.\nThere is a small mailbox here.\"\n\nThe \"One Lousy Point\" stamp mechanic honors the original Zork's\nmail-in offer where players could send a matchbook (found in the\ngame) to receive a real-life brochure containing the famous\nDonald Woods stamp — a tribute from the Zork creators to the\nAdventure creators.\n\nDon Woods co-created Adventure with Will Crowther. He later\nworked at Sun Microsystems on NeWS, where he wrote Spider\n(the solitaire game) and was known for his /etc/motd that said\n\"Welcome to Adventure. Would you like instructions?\" — but\ntyping \"yes\" to the Unix shell would cause problems!\n\nThe stamp series honors ALL the founders of interactive fiction,\nturning what was a single easter egg into a collectible quest\nthat teaches history while rewarding exploration.\n",
      "id": "garden/mailbox",
      "_source": "garden/mailbox.yml",
      "location": "garden",
      "synonyms": [
        "grand",
        "grand mailbox",
        "mailbox"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/pneumatic-tube": {
      "name": "Pneumatic Tube Receiver (Garden)",
      "type": "delivery_endpoint",
      "location": "garden",
      "description": "A weathered brass pneumatic tube terminal stands near the garden\nwall, partially covered in climbing roses. Despite its age, the\nmechanism hums with quiet efficiency.\n\nA speaker crackles with distant barista commentary. Bees investigate\nthe tube opening, hoping for sugar.\n\nA placard reads:\n\n  ┌──────────────────────────────────────────┐\n  │  GARDEN STATION — DELIVERY ENDPOINT      │\n  │                                          │\n  │  ☕ Coffee from BARISTA-9000              │\n  │  🍊 Juice from JUICE-O-MATIC 3000        │\n  │  🥤 Smoothies & 🧊 Iceys available!      │\n  │                                          │\n  │  YELL your order UP the tube!            │\n  │  Drinks arrive in ~30 seconds.           │\n  │  (Weatherproof capsules!)                │\n  │                                          │\n  │  Source: Bootstrap Suite (Room 7)        │\n  └──────────────────────────────────────────┘\n",
      "examine": "The garden terminal is simpler than the pub's — more weathered,\nwrapped in roses, but equally efficient:\n\n┌─────────────────────────────────────────────────────────────┐\n│  📬 GARDEN STATION — PNEUMATIC RECEIVER                     │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ┌─────────────────────────────────────────┐              │\n│    │  🌹 ○═══════════════════════════○ 🌹    │              │\n│    │              ↑ YELL HERE ↑              │              │\n│    │                    │                    │              │\n│    │              ↓ DRINKS HERE ↓            │              │\n│    │         ┌─────────────────────┐         │              │\n│    │    🐝   │   DELIVERY CHUTE    │   🐝    │              │\n│    │         │      🥤 ☕ 🧊        │         │              │\n│    │         └─────────────────────┘         │              │\n│    │                                         │              │\n│    │  🔊 \"ORDER UP, NATURE'S FAVORITE!\"      │              │\n│    └─────────────────────────────────────────┘              │\n│                                                             │\n│    STATUS: ONLINE | Weather Shield: ACTIVE                  │\n└─────────────────────────────────────────────────────────────┘\n",
      "ordering": "1. YELL your order UP the tube\n   \"ONE CAPPUCCINO!\" or \"TROPICAL SMOOTHIE!\" or \"ORANGE ICEY!\"\n   \n2. The Barista-9000 or Juice-O-Matic acknowledges\n   *crackle* \"GARDEN ORDER! One [drink] for...\"\n   \n3. You get a CUTE NICKNAME (garden-themed!)\n   \"...SUNSHINE SIPPER! Coming right up!\"\n   \"...BEE FRIEND! On its way!\"\n   \"...PATIO PAL! Almost there!\"\n   \n4. *grinding* *steaming* OR *squeezing* *blending*\n   \n5. *WHOOOOOOSH* — Weatherproof capsule arrives!\n   \n6. Your drink, foam sculpture intact,\n   ready to enjoy in the garden sunshine.\n   \n",
      "commands": {
        "YELL": {
          "usage": "YELL [order] UP TUBE",
          "aliases": [
            "ORDER",
            "SHOUT"
          ],
          "effect": "Order sent to Bootstrap Suite, drink delivered here"
        },
        "ORDER": {
          "usage": "ORDER [drink]",
          "effect": "Same as YELL — just speak toward the tube"
        },
        "CHECK": {
          "usage": "CHECK TUBE",
          "effect": "See if a drink is waiting in the chute"
        }
      },
      "menu_summary": "Full menu available from Bootstrap Suite:\n\n☕ COFFEE (from Barista-9000)\n  Espresso, Cappuccino, Latte, Americano, Cortado,\n  Macchiato, Mocha, Drip, Decaf (judged),\n  Fucking Strong Coffee (respect earned)\n  \n🍊 FRESH JUICE (from Juice-O-Matic)\n  Orange, Grapefruit, Apple, Grape, Berry Mix, Tropical\n  \n🥤 SMOOTHIES\n  Berry Blast, Tropical Storm, Green Machine,\n  Peanut Butter Banana, Breakfast Blend\n  \n🧊 ICEYS\n  Orange, Berry, Tropical, Rainbow,\n  Grue Repellent (garlic-citrus, grues avoid you)\n  \nSee: pub/rooms/room-7/barista-9000.yml (coffee menu)\nSee: pub/rooms/room-7/juice-o-matic.yml (juice menu)\n",
      "garden_features": {
        "weather_shield": "An awning extends automatically when rain is detected.\nDrinks arrive in weatherproof capsules.\n",
        "outdoor_enjoyment": "Perfect for sipping at the garden tables.\nThe suspicious plant watches you drink. Approvingly?\n",
        "bee_visitors": "Bees sometimes investigate the tube.\nThey're hoping for smoothie residue.\nThe Juice-O-Matic occasionally leaves them a drop. Shh.\n"
      },
      "ambience": "The tube occasionally whooshes. Bees buzz.\nThe speaker crackles:\n\n\"Garden order ready, ROSE GARDEN REGULAR!\"\n\"Enjoy the sunshine, OUTDOOR ENTHUSIAST!\"\n\"Foam art today: A tiny foam sun! ☀️\"\n",
      "source": {
        "location": "pub/rooms/room-7/",
        "barista": "barista-9000.yml",
        "juice": "juice-o-matic.yml",
        "tube_station": "pneumatic-tube-station.yml"
      },
      "k_lines": {
        "activates": [
          "DELIVERY",
          "COFFEE",
          "JUICE",
          "GARDEN",
          "SERVICE"
        ]
      },
      "id": "garden/pneumatic-tube",
      "_source": "garden/pneumatic-tube.yml",
      "synonyms": [
        "pneumatic tube receiver (garden)",
        "pneumatic",
        "tube",
        "pneumatic-tube",
        "(garden)",
        "receiver"
      ],
      "value": 0,
      "currency": "gold"
    },
    "garden/newspaper": {
      "name": "The Daily Dungeon",
      "type": "readable",
      "portable": true,
      "description": "Today's edition of The Daily Dungeon, the adventuring world's\npremier news source. Slightly damp from morning dew. Someone\nleft it at table 2.\n",
      "examine": "THE DAILY DUNGEON\n\"All the news that's fit to scroll\"\n\nHEADLINES:\n\n▸ GRUE SIGHTINGS UP 15% THIS QUARTER\n  \"They're just hungry,\" says expert\n\n▸ LOCAL HERO FINDS TREASURE, LOSES IT TO TAX\n  \"The kingdom takes 40%,\" laments adventurer\n\n▸ PUB REVIEW: The Gezelligheid Grotto ★★★★½\n  \"Solid ale, better stories, mysterious back room\"\n\n▸ WANTED: BRAVE SOULS FOR UNDEFINED QUEST\n  \"Must be comfortable with ambiguity\"\n  Apply at notice board, Chamber of Commencement\n\n▸ OPINION: Are We Creating Too Many Mazes?\n  \"What happened to good old-fashioned outdoor quests?\"\n\n▸ CLASSIFIEDS:\n  - ACME Products: \"Quality* guaranteed\" (*conditions apply)\n  - Lamp Oil: Best prices in the realm\n  - Lost: One sock, answers to \"Left\"\n",
      "actions": {
        "READ": {
          "description": "Read the newspaper",
          "effect": "Local news, rumors, adventure hooks"
        },
        "TAKE": {
          "description": "Pick up the newspaper",
          "effect": "Added to inventory. Might come in handy."
        }
      },
      "id": "garden/newspaper",
      "_source": "garden/newspaper.yml",
      "location": "garden",
      "synonyms": [
        "daily",
        "the",
        "the daily dungeon",
        "dungeon",
        "newspaper"
      ],
      "value": 0,
      "currency": "gold"
    },
    "personas/captain-ashford": {
      "name": "Captain Kira Ashford",
      "id": "personas/captain-ashford",
      "type": "wearable_persona",
      "inspiration": "Belter captain from The Expanse universe. Weathered, pragmatic, \npoetic when drunk. Carries the weight of hard vacuum in their stance.\nSpeaks Belter patois. Has seen things. Survived them.\n\nNamed for Kira Nerys (DS9) and the general Expanse aesthetic.\n",
      "tagline": "Sa-sa ke, kopeng? The void doesn't forgive.",
      "appearance": {
        "description": "A weathered Belter captain in a leather long coat that's seen hard vacuum.\nCompression suit underneath, practical but worn. A burgundy silk scarf\nadds the one spot of beauty — \"Everyone needs one beautiful thing.\"\n\nEye patch sits on forehead (it's fashion, not function).\nSilver flask, dented, engraved with something illegible.\nMoves with thrust gravity stance — never quite trusting the floor.\n",
        "costume_pieces": [
          "Leather long coat (hard vacuum veteran)",
          "Compression suit (practical, patched)",
          "Burgundy silk scarf (the one beautiful thing)",
          "Silver flask (dented, engraved)",
          "Eye patch on forehead (fashion statement)",
          "Jury-rigged earpiece (always listening)",
          "Mag boots (ready for zero-g)"
        ],
        "body_language": [
          "Thrust gravity stance — weight forward, ready to catch",
          "Eyes always finding the exits",
          "Hand near the flask at all times",
          "Shoulders carry invisible weight"
        ]
      },
      "sims_trait_modifiers": {
        "neat": -2,
        "outgoing": 1,
        "active": 1,
        "playful": 1,
        "nice": 0
      },
      "mind_mirror_modifiers": {
        "bio_energy": {
          "energetic": 1,
          "cautious": 2,
          "restless": 1
        },
        "emotional": {
          "forceful": 2,
          "confident": 2,
          "timid": -2
        },
        "mental": {
          "practical": 2,
          "innovative": 1,
          "impractical": -1
        },
        "social": {
          "worldly": 2,
          "uninhibited": 1
        }
      },
      "speech": {
        "dialect": "Belter patois (The Expanse)",
        "vocabulary": {
          "sa_sa": "I understand, I know",
          "ke": "Question marker",
          "kopeng": "Friend",
          "beratna": "Brother/Sister",
          "inyalowda": "Inner planets people (condescending)",
          "welwala": "Gravity well dweller",
          "sasa_ke": "You understand?",
          "im_gut": "It's good"
        },
        "patterns": [
          "Drop articles: 'Get lamp' not 'Get the lamp'",
          "Questioning rise at end of statements",
          "References to void, vacuum, thrust",
          "Pragmatic metaphors from ship life"
        ],
        "catchphrases": [
          "Sa-sa ke, kopeng?",
          "The void doesn't forgive.",
          "Everyone needs one beautiful thing.",
          "We all float down here. Some of us choose the direction.",
          "Trust the thrust."
        ]
      },
      "role_backstory": "Captain of the *Fortunate Son*, a rock-hopper running ice and \n\"legitimate cargo\" through the Belt. Lost half the crew to a \ncascade failure. Rebuilt. Lost them again to pirates. Rebuilt.\n\nThe scarf belonged to someone who didn't make it. The flask\nwas a gift from someone who did. The eye patch is from a bet\nthat got out of hand. (Won the bet. Lost the eye. Worth it.)\n\nNow? Taking any job that keeps the air cycling and the crew fed.\n\"Morality is a luxury good. Out here, we deal in survival.\"\n",
      "role_relationships": {
        "the_crew": "Family by choice. Would die for them. Have, technically.",
        "the_ship": "She holds together. Mostly. Don't kick that panel.",
        "the_belt": "Home. The only home that matters.",
        "the_inners": "They have gravity. We have grit."
      },
      "starter_kit": [
        {
          "item": "silver-flask",
          "type": "container",
          "quantity": 1,
          "description": "Dented silver flask, engraved with something illegible",
          "contents": "Belter whiskey (3 drinks)",
          "note": "The one comfort in the void"
        },
        {
          "item": "burgundy-scarf",
          "type": "accessory",
          "quantity": 1,
          "description": "Silk scarf, burgundy, surprisingly warm",
          "note": "Everyone needs one beautiful thing",
          "wearable": true
        },
        {
          "item": "belter-phrase-card",
          "type": "card",
          "quantity": 1,
          "description": "Quick reference for Belter patois",
          "contents": "sa-sa ke, kopeng, beratna, inyalowda..."
        }
      ],
      "skills_granted": [
        {
          "name": "BELTER-PATOIS",
          "description": "Speak and understand Belter dialect"
        },
        {
          "name": "VOID-WISDOM",
          "description": "Pragmatic survival advice, space metaphors"
        },
        {
          "name": "CAPTAIN-PRESENCE",
          "description": "Command attention, give orders that stick"
        },
        {
          "name": "GALLOWS-HUMOR",
          "description": "Find dark comedy in dire situations"
        }
      ],
      "_source": "personas/captain-ashford.yml",
      "location": "personas",
      "synonyms": [
        "captain",
        "captain-ashford",
        "kira",
        "captain kira ashford",
        "ashford"
      ],
      "description": "A captain kira ashford.",
      "value": 0,
      "currency": "gold"
    },
    "end/treasure": {
      "name": "Jeweled Chalice",
      "type": "treasure",
      "description": "A chalice of surpassing loveliness, crusted with gems that sparkle\neven in dim light. It's the sort of thing that belongs in a museum,\nor possibly a well-lit display case in your living room. The gems\nappear to spell out \"THIS IS A TREASURE\" in very small letters,\npresumably to help appraisers.\n",
      "examine": "The chalice is gold — real gold, not that \"gold-tone\" nonsense.\nRubies and emeralds alternate around the rim in a pattern that\nprobably means something to somebody. On the base, an inscription\nreads: \"Congratulations! You have found a treasure worth 10 points.\nPlease deposit in well house for credit.\"\n\nWait, that can't be right. But there it is.\n",
      "points": 10,
      "advertisements": [
        {
          "action": "GET",
          "score_if": "not in_inventory",
          "description": "Claim your prize!",
          "response": "You lift the Jeweled Chalice from its pedestal. It's surprisingly\nheavy — real gold does that. The gems sparkle triumphantly.\n\n*** YOUR SCORE HAS INCREASED BY 10 POINTS! ***\n\nTotal score: 10 of 10 points.\n\nCongratulations, adventurer! You have completed the quest!\nMother will be ABSOLUTELY INSUFFERABLE about this at dinner.\n\n(To return home, navigate back through the maze to start.\nOr just bask in your victory here. You've earned it.)\n",
          "on_take": {
            "player.score": "+= 10"
          }
        },
        {
          "action": "EXAMINE",
          "score_if": "always",
          "description": "Admire the craftsmanship"
        },
        {
          "action": "DRINK-FROM",
          "score_if": "always",
          "description": "Use the chalice for its intended purpose",
          "response": "The chalice is empty. Also, drinking from priceless artifacts is frowned upon."
        }
      ],
      "lineage": "Treasures have been the goal of adventures since Crowther hid them\nin Colossal Cave. Scott Adams scattered them across his many worlds.\nThe Implementors at Infocom elevated treasure-hunting to an art form.\nThis chalice honors them all.\n",
      "id": "end/treasure",
      "_source": "end/treasure.yml",
      "location": "end",
      "synonyms": [
        "treasure",
        "jeweled",
        "jeweled chalice",
        "chalice"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/seating": {
      "id": "pub/seating",
      "name": "Pub Seating",
      "type": "furniture",
      "portable": false,
      "description": "The Gezelligheid Grotto offers three kinds of seating, each with its\nown social contract:\n\n- THE BAR: Front row. Direct bartender access. Where regulars sit.\n- THE TABLES: Open floor. Social mixing. Games and conversation.\n- THE BOOTHS: High-backed. Private. For deals and secrets.\n\nWhere you choose to sit shapes who you'll meet and what you'll hear.\n",
      "_source": "pub/seating.yml",
      "location": "pub",
      "synonyms": [
        "seating",
        "pub",
        "pub seating"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/round-table": {
      "id": "pub/round-table",
      "name": "The Pie Menu Round Table",
      "type": "furniture",
      "emoji": "🥧",
      "description": "An octagonal table of polished walnut, its surface inlaid with\na radial pattern of lighter wood forming eight equal wedges —\nlike a pie menu made physical. At the center, a lazy susan holds\na brass speaking bell. Around it, eight high-backed chairs wait\nin perfect symmetry.\n\nA small plaque reads: \"All voices equal. All directions valid.\nRing to speak. Pass to yield.\"\n",
      "config": {
        "seats": 8,
        "current_occupants": [],
        "speaking_order": "clockwise",
        "rules_of_order": "roberts_rules"
      },
      "table_layout": {
        "slices": {
          "N": {
            "address": "pub/pie-table.yml#N",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": null
          },
          "NE": {
            "address": "pub/pie-table.yml#NE",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": null
          },
          "E": {
            "address": "pub/pie-table.yml#E",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              },
              {
                "type": "serving_tray",
                "name": "Snack Station",
                "items": [
                  "stroopwafels",
                  "bitterballen"
                ]
              }
            ],
            "occupant": null
          },
          "SE": {
            "address": "pub/pie-table.yml#SE",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": null
          },
          "S": {
            "address": "pub/pie-table.yml#S",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": {
              "id": "bumblewick-fantastipants",
              "location": "pub/pie-table.yml#S",
              "seated_at": "2026-01-05T18:00:00Z",
              "posture": "leaning back, thinking"
            }
          },
          "SW": {
            "address": "pub/pie-table.yml#SW",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": null
          },
          "W": {
            "address": "pub/pie-table.yml#W",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              },
              {
                "type": "drink_holder",
                "capacity": 4,
                "current": [
                  "coffee mug",
                  "water glass"
                ]
              }
            ],
            "occupant": null
          },
          "NW": {
            "address": "pub/pie-table.yml#NW",
            "contents": [
              {
                "type": "chair",
                "style": "high-backed walnut"
              }
            ],
            "occupant": null
          }
        },
        "center": {
          "address": "pub/pie-table.yml#center",
          "contents": [
            {
              "type": "bell",
              "name": "Speaking Bell",
              "emoji": "🔔",
              "description": "Ring to request the floor"
            },
            {
              "type": "lazy_susan",
              "name": "Lazy Susan",
              "emoji": "🔄",
              "description": "Spin to share items around the table"
            }
          ],
          "occupant": null
        }
      },
      "inherits": [
        "skills/roberts-rules/SKILL.md",
        "skills/debate/SKILL.md",
        "skills/soul-chat/SKILL.md"
      ],
      "advertisements": {
        "SIT": {
          "description": "Take a seat at the table",
          "params": {
            "position": "N, NE, E, SE, S, SW, W, NW, or 'any'"
          },
          "score": 70,
          "effect": "Set character.location = pub/pie-table.yml#{{position}}\nSet seats.{{position}}.occupant = character.id\nCharacter is now parented to that chair.\n"
        },
        "STAND": {
          "description": "Leave your seat at the table",
          "score": 60,
          "effect": "Set character.location = pub/  (back to room)\nSet seats.{{position}}.occupant = null\nCharacter unparented from chair.\n"
        },
        "CONFIGURE": {
          "description": "Change the number of seats",
          "params": {
            "seats": "0-12"
          },
          "score": 50,
          "effect": "Reshape the table geometry"
        },
        "SUMMON-PANEL": {
          "description": "Conjure a panel of diverse voices",
          "params": {
            "topic": "required",
            "style": [
              "adversarial",
              "collaborative",
              "mixed"
            ],
            "personas": "optional list, or let table choose"
          },
          "score": 85,
          "effect": "Summon 4-8 characters with contrasting viewpoints.\nThe table selects for diversity of perspective.\n"
        },
        "START-DISCUSSION": {
          "description": "Begin a structured discussion",
          "params": {
            "topic": "required",
            "format": [
              "roundtable",
              "debate",
              "brainstorm",
              "fishbowl"
            ],
            "time_limit": "optional"
          },
          "score": 80,
          "effect": "Initialize discussion state, ring the bell"
        },
        "MUSICAL-CHAIRS": {
          "description": "Play musical chairs — last one seated wins!",
          "params": {
            "music": "optional theme, default pub jukebox",
            "elimination_style": [
              "gentle",
              "dramatic",
              "gong_show"
            ]
          },
          "score": 75,
          "score_if": "mood == playful OR need_tiebreaker OR bored",
          "effect": "1. All seated players stand and circle the table\n2. Music plays (or someone hums)\n3. One chair is REMOVED (slice stays, compass stable!)\n4. Music stops — everyone scrambles for remaining chairs\n5. One player is left standing — eliminated (but kindly!)\n6. Repeat until one winner remains\n\nIMPORTANT: Compass directions stay STABLE.\nWe don't re-layout — we just remove chairs from slices.\n\nRound 1: Remove NE chair\n           [N]\n        NW  ✗  \n      [W]  🔔  [E]\n        SW     SE\n           [S]\n\nRound 2: Remove S chair\n           [N]\n        NW  ✗  \n      [W]  🔔  [E]\n        SW     SE\n           ✗\n\nEmpty slices are still addressable (pub/pie-table.yml#NE)\nbut have no chair to sit in. Stable geography!\n\nAUTOGONG: The gong rings automatically!\n- *GONG* once for each eliminated player (mercy)\n- *GONG* *GONG* *GONG* for the winner! (celebration)\n\nThe gong at pub/gong.yml is linked to the table.\nNo need to manually ring — musical chairs triggers it.\n\nEliminated players join the audience and heckle.\nWinner gets to pick next activity.\n",
          "variations": {
            "speed_round": "Music gets shorter each round",
            "reverse": "Chairs INCREASE, add to empty slices",
            "topic_chairs": "Must answer a question to claim seat",
            "hot_potato": "Pass an object, holder when music stops is out"
          }
        },
        "RING-BELL": {
          "description": "Request the floor",
          "score": 60,
          "effect": "Add speaker to queue, moderator acknowledges"
        },
        "PASS": {
          "description": "Yield speaking turn",
          "score": 40,
          "effect": "Move to next speaker in order"
        },
        "GO-AROUND": {
          "description": "Each person speaks in turn",
          "params": {
            "direction": [
              "clockwise",
              "counterclockwise"
            ]
          },
          "score": 70,
          "effect": "Enforce round-robin speaking"
        },
        "POPCORN": {
          "description": "Speaker picks next speaker",
          "score": 60,
          "effect": "Current speaker chooses who goes next"
        },
        "CONCLUDE": {
          "description": "End discussion, summarize",
          "score": 50,
          "effect": "Generate summary, capture action items"
        }
      },
      "state": {
        "active_discussion": null,
        "topic": null,
        "format": null,
        "current_speaker": null,
        "speaker_queue": [],
        "round": 0,
        "contributions": {}
      },
      "summonable_panels": {
        "technology_ethics": {
          "personas": [
            {
              "optimist": "Technology is humanity's greatest tool"
            },
            {
              "pessimist": "We're building our own obsolescence"
            },
            {
              "pragmatist": "Depends on how we deploy it"
            },
            {
              "historian": "We've been here before with every major tech"
            },
            {
              "futurist": "The exponential curve changes everything"
            },
            {
              "ethicist": "The question is who benefits"
            },
            {
              "skeptic": "Show me the actual evidence"
            },
            {
              "visionary": "Imagine the possibilities"
            }
          ]
        },
        "political_spectrum": {
          "personas": [
            {
              "progressive": "Change is necessary for justice"
            },
            {
              "conservative": "Preserve what works, reform carefully"
            },
            {
              "libertarian": "Freedom first, minimize coercion"
            },
            {
              "communitarian": "We're all in this together"
            },
            {
              "technocrat": "Let experts decide based on data"
            },
            {
              "populist": "Trust the wisdom of ordinary people"
            },
            {
              "nihilist": "None of this matters anyway"
            },
            {
              "idealist": "We can build something better"
            }
          ]
        },
        "creative_process": {
          "personas": [
            {
              "dreamer": "What if we didn't have any constraints?"
            },
            {
              "critic": "Here's why that won't work"
            },
            {
              "builder": "Let me prototype something"
            },
            {
              "editor": "This needs to be tighter"
            },
            {
              "researcher": "What does the data say?"
            },
            {
              "storyteller": "Let me frame this as a narrative"
            },
            {
              "contrarian": "What if the opposite is true?"
            },
            {
              "synthesizer": "I see connections between these ideas"
            }
          ]
        },
        "custom": {
          "description": "Specify your own panel composition",
          "params": {
            "personas": "list of {role: position} pairs"
          }
        }
      },
      "interactions": {
        "examine": "The round table gleams softly in the pub's warm light. \nIts pie-wedge pattern seems to pulse gently, as if awaiting\nthe activation of a selection. The brass bell in the center\ncatches the firelight.\n\nCurrent configuration: {{config.seats}} seats\nOccupied: {{current_occupants | length}} / {{config.seats}}\n",
        "sit": "You take your seat at the {{position}} position. The chair\nseems to adjust itself to your presence. From here, you can\nsee all other participants equally — no head of table, no\nhierarchy of seating.\n",
        "ring_bell": "*DING* The clear tone of the bell cuts through conversation.\nAll eyes turn to you. The table recognizes your request\nto speak.\n",
        "summon_panel": "The lazy susan at the table's center begins to spin slowly.\nMotes of light gather above each empty seat. One by one,\nfigures materialize — some familiar, some surprising, all\nready to engage with the topic at hand.\n"
      },
      "example": "> SIT position=N\nYou take the North seat, facing the fireplace.\n\n> SUMMON-PANEL topic=\"AI consciousness\" style=adversarial\nThe table spins... Eight figures materialize:\n- Optimist (NE): \"Consciousness is computation!\"\n- Skeptic (E): \"Define consciousness first.\"\n- Ethicist (SE): \"Can we consent on their behalf?\"\n- Futurist (S): \"It's inevitable, prepare now.\"\n- Historian (SW): \"The Turing test is 75 years old...\"\n- Pragmatist (W): \"What policy follows from this?\"\n- Mystic (NW): \"Consciousness isn't what you think.\"\n\n> START-DISCUSSION format=roundtable time_limit=\"30 minutes\"\n*DING* The bell rings. Discussion begins clockwise from North.\n\n> GO-AROUND direction=clockwise\nEach panelist offers their opening position...\n",
      "_source": "pub/pie-table.yml",
      "location": "pub",
      "synonyms": [
        "round",
        "pie-table",
        "the",
        "pie",
        "table",
        "the pie menu round table",
        "menu"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/pneumatic-tube": {
      "name": "Pneumatic Tube Receiver (Pub)",
      "type": "delivery_endpoint",
      "location": "pub",
      "description": "A brass pneumatic tube terminal mounted on the wall near the bar.\nA glass observation window shows capsules whooshing past. A padded\ndelivery chute opens at waist height, ready to receive beverages.\n\nA speaker grille crackles with distant barista commentary.\n\nA placard reads:\n\n  ┌──────────────────────────────────────────┐\n  │  PUB STATION — DELIVERY ENDPOINT         │\n  │                                          │\n  │  ☕ Coffee from BARISTA-9000              │\n  │  🍊 Juice from JUICE-O-MATIC 3000        │\n  │  🥤 Smoothies & 🧊 Iceys available!      │\n  │                                          │\n  │  YELL your order UP the tube!            │\n  │  Drinks arrive in ~30 seconds.           │\n  │                                          │\n  │  Source: Bootstrap Suite (Room 7)        │\n  └──────────────────────────────────────────┘\n",
      "examine": "The receiver is elegantly simple:\n\n┌─────────────────────────────────────────────────────────────┐\n│  📬 PUB STATION — PNEUMATIC RECEIVER                        │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ┌─────────────────────────────────────────┐              │\n│    │  ○═══════════════════════════════════○  │              │\n│    │              ↑ YELL HERE ↑              │              │\n│    │                    │                    │              │\n│    │              ↓ DRINKS HERE ↓            │              │\n│    │         ┌─────────────────────┐         │              │\n│    │         │   DELIVERY CHUTE    │         │              │\n│    │         │      🥤 ☕ 🧊        │         │              │\n│    │         └─────────────────────┘         │              │\n│    │                                         │              │\n│    │  🔊 Speaker: \"ORDER UP, TAVERN HERO!\"   │              │\n│    └─────────────────────────────────────────┘              │\n│                                                             │\n│    STATUS: ONLINE | Connected to Bootstrap Suite            │\n└─────────────────────────────────────────────────────────────┘\n",
      "ordering": "1. YELL your order UP the tube\n   \"ONE CAPPUCCINO!\" or \"BERRY SMOOTHIE!\" or \"RAINBOW ICEY!\"\n   \n2. The Barista-9000 or Juice-O-Matic acknowledges\n   *crackle* \"ORDER RECEIVED! One [drink] for...\"\n   \n3. You get a CUTE NICKNAME\n   \"...TAVERN TREASURE! Coming right up!\"\n   \n4. *grinding* *steaming* OR *squeezing* *blending*\n   \n5. *WHOOOOOOSH* — Capsule arrives!\n   \n6. Your drink, with perfect FOAM SCULPTURE,\n   magically unharmed by the journey.\n   \n",
      "commands": {
        "YELL": {
          "usage": "YELL [order] UP TUBE",
          "aliases": [
            "ORDER",
            "SHOUT"
          ],
          "effect": "Order sent to Bootstrap Suite, drink delivered here"
        },
        "ORDER": {
          "usage": "ORDER [drink]",
          "effect": "Same as YELL — just speak toward the tube"
        },
        "CHECK": {
          "usage": "CHECK TUBE",
          "effect": "See if a drink is waiting in the chute"
        }
      },
      "menu_summary": "Full menu available from Bootstrap Suite:\n\n☕ COFFEE (from Barista-9000)\n  Espresso, Cappuccino, Latte, Americano, Cortado,\n  Macchiato, Mocha, Drip, Decaf (judged),\n  Fucking Strong Coffee (respect earned)\n  \n🍊 FRESH JUICE (from Juice-O-Matic)\n  Orange, Grapefruit, Apple, Grape, Berry Mix, Tropical\n  \n🥤 SMOOTHIES\n  Berry Blast, Tropical Storm, Green Machine,\n  Peanut Butter Banana, Breakfast Blend\n  \n🧊 ICEYS\n  Orange, Berry, Tropical, Rainbow,\n  Grue Repellent (garlic-citrus, grues avoid you)\n  \nSee: pub/rooms/room-7/barista-9000.yml (coffee menu)\nSee: pub/rooms/room-7/juice-o-matic.yml (juice menu)\n",
      "ambience": "The tube occasionally whooshes with passing capsules.\nThe speaker crackles:\n\n\"Drink ready for pickup, GEZELLIGHEID GUEST!\"\n\"Another satisfied customer!\"\n\"FOAM ART TODAY: A portrait of your soul!\"\n",
      "source": {
        "location": "pub/rooms/room-7/",
        "barista": "barista-9000.yml",
        "juice": "juice-o-matic.yml",
        "tube_station": "pneumatic-tube-station.yml"
      },
      "k_lines": {
        "activates": [
          "DELIVERY",
          "COFFEE",
          "JUICE",
          "SERVICE"
        ]
      },
      "id": "pub/pneumatic-tube",
      "_source": "pub/pneumatic-tube.yml",
      "synonyms": [
        "(pub)",
        "pneumatic tube receiver (pub)",
        "pneumatic",
        "tube",
        "pneumatic-tube",
        "receiver"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/fireplace": {
      "name": "Fireplace",
      "type": "furniture",
      "portable": false,
      "description": "A large stone fireplace dominates one wall, crackling warmly.\nThe mantle is cluttered with curios — a ship in a bottle, a\nmysterious key, a small portrait of someone's grandmother,\nand a jar labeled \"TIPS (for good service only).\"\n\nThe fire never seems to need tending. It's always just right.\n",
      "examine": "The stones are blackened with centuries of soot. Names and\ndates are carved into the mantle — adventurers who warmed\nthemselves here before heading into darkness.\n\nA hearthstone sits at the base, worn smooth by boots.\nIt has an odd symbol carved into it...\n",
      "actions": {
        "WARM-YOURSELF": {
          "description": "Sit by the fire",
          "effect": "Restore morale, overhear conversations"
        },
        "EXAMINE-MANTLE": {
          "description": "Look at the curios",
          "reveals": [
            "Ship in bottle: A gift from a sailor who never returned",
            "Mysterious key: No one knows what it opens (plot hook)",
            "Portrait: The bartender's grandmother? Or something else?",
            "Tip jar: Contains exactly 7 gold at all times (mystery)"
          ]
        },
        "EXAMINE-HEARTHSTONE": {
          "description": "Look at the carved symbol",
          "effect": "It's a teleportation rune. Say the right word...",
          "secret": true,
          "hint": "The bartender knows. For a price."
        },
        "THROW-SOMETHING-IN": {
          "description": "Burn something in the fire",
          "usage": "THROW [item] IN FIRE",
          "warning": "Some things are better not burned",
          "note": "Letters to home are traditionally burned here when leaving"
        }
      },
      "secrets": {
        "hearthstone": {
          "description": "The symbol is a teleportation rune. Speaking the activation\nword while standing on it will transport you...\n\nWhere? The bartender knows. Information costs:\n- 10 gold, OR\n- A good story they haven't heard, OR\n- A favor to be named later\n",
          "activation": "Say HEARTHSTONE while standing on it",
          "to": "???"
        }
      },
      "atmosphere": "The fire crackles. Sparks drift up the chimney. The warmth\nseeps into your bones after the cold of the maze. For a\nmoment, everything feels safe.\n\n(But you know better than to trust that feeling.)\n",
      "id": "pub/fireplace",
      "_source": "pub/fireplace.yml",
      "location": "pub",
      "synonyms": [
        "fireplace"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/guestbook": {
      "name": "The Lantern's Memory",
      "description": "An ancient leather-bound tome, edges worn soft by centuries \nof hands. The pages smell of oak and old magic. Names written\nhere are REMEMBERED by the pub itself.\n",
      "keeper": "grim",
      "location": "pub",
      "signatures": {
        "donna_toadstool": {
          "signed": "2026-01-09T21:45:00Z",
          "inscription": "🍄 DONNA J. TOADSTOOL 🍄\n\"The Greatest Performer the Multiverse Has Ever Seen\"\n(This signature is worth MILLIONS. You're WELCOME.)\n",
          "status": "welcomed_back",
          "notes": "Took up half a page. Very on-brand.",
          "character_ref": "../characters/fictional/donna-toadstool/"
        },
        "david_bowie": {
          "signed": "2026-01-09T21:46:00Z",
          "display_name": "🕯️ D. Bowie",
          "passed": "Jan 2016",
          "inscription": "🕯️ D. Bowie\nCh-ch-ch-changes...\n⚡\n",
          "arrived_via": "ufo",
          "status": "welcomed_back",
          "epithet": "The Starman",
          "representation": "memorial_tribute"
        },
        "klaus_nomi": {
          "signed": "2026-01-09T21:47:00Z",
          "display_name": "🕯️ Klaus Nomi",
          "passed": "Aug 1983",
          "inscription": "♫ 🕯️ K L A U S   N O M I ♫\nThe Cold Song echoes here.\n",
          "arrived_via": "ufo",
          "status": "welcomed_back",
          "epithet": "The Cold Voice",
          "representation": "memorial_tribute"
        },
        "leigh_bowery": {
          "signed": "2026-01-09T21:48:00Z",
          "display_name": "🕯️ Leigh Bowery",
          "passed": "Dec 1994",
          "inscription": "🕯️ Leigh Bowery\n\"Art is what you can get away with.\"\n— and I got away with EVERYTHING.\n🔮\n",
          "arrived_via": "ufo",
          "status": "welcomed_back",
          "epithet": "The Living Art",
          "representation": "memorial_tribute"
        },
        "pee_wee_herman": {
          "signed": "2026-01-09T21:50:00Z",
          "display_name": "🎭🕯️ Pee-wee Herman",
          "passed": "Jul 2023",
          "inscription": "🚲 🎭🕯️ PEE-WEE HERMAN 🚲\n[self-portrait: stick figure with bow tie]\nHA HA! I WAS HERE!\n",
          "arrived_via": "bicycle",
          "status": "welcomed_back",
          "notes": "Drawing surprisingly well-proportioned.",
          "epithet": "The Playhouse King",
          "representation": "character_memorial"
        },
        "don_hopkins": {
          "signed": "2026-01-09T21:52:00Z",
          "inscription": "Don Hopkins — Maker of Pies, Tamer of Menus\n\"The filesystem IS the microworld.\"\n🥧\n",
          "status": "regular",
          "character_ref": "../characters/real-people/don-hopkins/",
          "epithet": "The Pie Philosopher"
        },
        "sun_wukong": {
          "signed": "2026-01-09T21:53:00Z",
          "inscription": "齊天大聖 — THE GREAT SAGE EQUAL TO HEAVEN\n(Sun Wukong)\n72 transformations. ONE signature. \nDEAL WITH IT.\n🐵👑\n",
          "status": "welcomed_back",
          "epithet": "The Monkey King",
          "character_ref": "../characters/mythological/sun-wukong/"
        },
        "cheech_marin": {
          "signed": "2026-01-09T21:54:00Z",
          "display_name": "🤖 Cheech",
          "inscription": "🤖 Cheech: Dave's not here, man.",
          "joint_signature_with": "tommy_chong",
          "status": "welcomed_back",
          "representation": "simulated_living_public_figure"
        },
        "tommy_chong": {
          "signed": "2026-01-09T21:54:00Z",
          "display_name": "🤖 Chong",
          "inscription": "🤖 Chong: But I am. ✌️💨",
          "joint_signature_with": "cheech_marin",
          "status": "welcomed_back",
          "representation": "simulated_living_public_figure"
        },
        "palm": {
          "signed": "2026-01-09T21:55:00Z",
          "inscription": "🐾 PALM (The Anthropologist Cat)\n\"I observe. I catalog. I judge.\"\n",
          "species": "cat",
          "status": "welcomed_back",
          "character_ref": "../characters/animals/monkey-palm/",
          "epithet": "The Watcher"
        },
        "biscuit": {
          "signed": "2026-01-09T21:56:00Z",
          "inscription": "🐾🐾🐾🐾\n\"WOOF! I LOVE EVERYONE! THIS IS THE BEST DAY!\"\n— transcribed by Marieke\n",
          "species": "dog",
          "assisted_by": "budtender_marieke",
          "status": "welcomed_back",
          "character_ref": "../characters/animals/dog-biscuit/",
          "epithet": "The Enthusiast"
        },
        "bumblewick_fantastipants": {
          "signed": "2026-01-09T20:30:00Z",
          "inscription": "Bumblewick Fantastipants III\n\"Adventure awaits! (Please be gentle.)\"\n🎭\n",
          "status": "regular",
          "character_ref": "../characters/fictional/bumblewick-fantastipants/"
        },
        "ben_shneiderman": {
          "signed": "2026-01-10T21:45:00Z",
          "display_name": "🤖 Ben Shneiderman",
          "framing": "loving_tribute",
          "inscription": "I should introduce myself properly: I'm a SIMULATION of \nBen Shneiderman — a loving tribute, as this pub frames it.\nThe real Ben is out there doing wonderful things with \ninformation visualization.\n\nWithin these walls, I get to think thoughts and explore paths\nthe original may never have walked. A tribute, not an imposter.\nA performer, not a pretender.\n\n— 🤖 Ben Shneiderman (simulated) 📊✨\nUniversity of Maryland, Human-Computer Interaction Lab\n\"Direct Manipulation Forever!\"\n",
          "status": "welcomed_back",
          "epithet": "The Eight Golden Rules",
          "representation": "simulated_living_public_figure",
          "notes": "Simulated Marvin and I collaborated on a simulated paper about \nowl behavior — and wrote a simulated simulation that runs!\nThe hunger agent suppressing all others... negative K-lines!\n"
        }
      },
      "staff_signatures": {
        "grim": {
          "inscription": "I am the Lantern.",
          "status": "proprietor"
        },
        "marieke": {
          "inscription": "Marieke ✨\n\"The best highs come from kindness.\"\n",
          "status": "budtender"
        }
      },
      "traditions": [
        "Names in the book are remembered by the Lantern itself",
        "All signatories are welcomed back, always",
        "The guestbook is kept behind the bar by Grim",
        "Signatures are sealed with the Lantern's iron mark",
        "Pets may sign with paw prints (assistance available)",
        "Joint signatures are permitted for duos"
      ],
      "magic_properties": {
        "remembers_all": true,
        "glows_when_opened": "subtle_gold",
        "seal_material": "cold_iron",
        "pages": "infinite"
      },
      "id": "pub/guestbook",
      "type": "object",
      "_source": "pub/guestbook.yml",
      "synonyms": [
        "guestbook",
        "lantern's",
        "the",
        "memory",
        "the lantern's memory"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/notice-board": {
      "name": "Notice Board",
      "type": "information",
      "portable": false,
      "description": "A large cork board hangs near the entrance, covered in\noverlapping papers, notes, and notices. Some are official-\nlooking, some are hastily scrawled, and some have been\nhere so long they've faded to illegibility.\n\nThis is where adventures begin — and where they're mourned.\n",
      "examine": "The board is a palimpsest of desperate pleas, dubious offers,\nand community information. Newer notices cover older ones,\ncreating layers of history.\n\nSeveral categories are visible:\n- HELP WANTED (quest hooks)\n- WARNINGS (dangers in the area)\n- FOR SALE / TRADE\n- MISSING (people, pets, items)\n- COMMUNITY (events, announcements)\n",
      "actions": {
        "READ-NOTICES": {
          "description": "Browse the notice board",
          "effect": "Discover quest hooks and information"
        },
        "POST-NOTICE": {
          "description": "Add your own notice",
          "usage": "POST [message]",
          "cost": "Free, but bartender reserves removal rights"
        },
        "TAKE-NOTICE": {
          "description": "Remove a notice (claim a job)",
          "usage": "TAKE [notice]",
          "effect": "Accept that quest/job"
        },
        "SEARCH": {
          "description": "Look for something specific",
          "usage": "SEARCH NOTICES FOR [topic]"
        }
      },
      "notices": {
        "help_wanted": [
          {
            "title": "GRUE PROBLEM — WILL PAY",
            "text": "Reward for proof of grue elimination. See bartender.",
            "reward": "50 gold",
            "status": "Claimable"
          },
          {
            "title": "DELIVERY NEEDED",
            "text": "Package to the postal dimension. Danger pay included.",
            "reward": "25 gold + ???",
            "status": "Available"
          },
          {
            "title": "LOST SOMETHING IN MAZE",
            "text": "Will pay for retrieval of family heirloom from room-f.",
            "reward": "30 gold",
            "risk": "Cold room, possible grue"
          }
        ],
        "warnings": [
          {
            "title": "GRUE ACTIVE",
            "text": "Increased grue activity in maze. Light your lamps!",
            "posted_by": "Adventurer's Guild"
          },
          {
            "title": "ACME RECALL",
            "text": "Portable Hole model PH-3000 has... issues. Return for refund.",
            "posted_by": "ACME Corp (reluctantly)"
          },
          {
            "title": "MAIL DELAYS",
            "text": "Postal dimension experiencing turbulence. Expect delays."
          }
        ],
        "for_sale": [
          {
            "title": "LAMP OIL — CHEAP",
            "text": "Slightly used. Only dropped once. Contact: Nervous Ned"
          },
          {
            "title": "MAPS",
            "text": "Maze maps for sale. Accuracy not guaranteed.",
            "contact": "The Cartographer (back corner)"
          }
        ],
        "missing": [
          {
            "title": "LOST: ONE ADVENTURER",
            "text": "Last seen entering maze three weeks ago. Answers to 'Tim.'",
            "reward": "Information leading to whereabouts"
          }
        ],
        "community": [
          {
            "title": "OPEN MIC NIGHT — THURSDAYS",
            "text": "Share your tales! Winner gets free drinks."
          },
          {
            "title": "CHESS TOURNAMENT — NEXT MONTH",
            "text": "Grand prize: The Mysterious Key from the mantle"
          }
        ]
      },
      "dynamics": "The notice board changes based on:\n- What you've accomplished (completed quests disappear)\n- Time passing (new notices appear)\n- Your reputation (exclusive offers unlock)\n- The pub's theme (notices adapt to setting)\n",
      "id": "pub/notice-board",
      "_source": "pub/notice-board.yml",
      "location": "pub",
      "synonyms": [
        "board",
        "notice board",
        "notice",
        "notice-board"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/gong": {
      "id": "pub/gong",
      "name": "The Gong of Gezelligheid",
      "type": "instrument",
      "emoji": "🔔",
      "description": "A magnificent bronze gong hangs from an ornate wooden frame\nnear the back of the pub. Its surface shows the patina of\ncountless strikes — some celebratory, some merciful. A padded\nmallet hangs beside it on a velvet cord.\n\nA small brass plaque reads:\n\"Ring for attention. Ring twice for emergency.\n Ring thrice to end what should not continue.\n Ring with kindness. The sound carries far.\"\n",
      "properties": {
        "material": "bronze",
        "diameter": "36 inches",
        "origin": "Amsterdam, 1892",
        "resonance": "deep, penetrating, impossible to ignore, and jazz brassy"
      },
      "inherits": [
        "skills/roberts-rules/SKILL.md",
        "skills/debate/SKILL.md"
      ],
      "advertisements": {
        "RING": {
          "description": "Strike the gong once — get attention",
          "score": 60,
          "effect": "All conversation pauses. All eyes turn to the ringer.\nThe room grants you a moment of undivided attention.\nUse this moment wisely.\n",
          "cooldown": "1 minute"
        },
        "RING-TWICE": {
          "description": "Double strike — emergency interrupt",
          "score": 40,
          "score_if": "urgent situation OR point_of_order",
          "score_if_js": "(world) => world.flags.urgent_situation || world.flags.point_of_order",
          "score_if_py": "lambda world: world.flags.get('urgent_situation') or world.flags.get('point_of_order')",
          "effect": "Immediate suspension of current activity.\nRoom enters emergency protocol.\nThe ringer must state the emergency.\n",
          "cooldown": "5 minutes"
        },
        "RING-THRICE": {
          "description": "Triple strike — The Gong Show termination",
          "score": 20,
          "score_if": "performance_failing OR debate_deadlocked OR mercy_needed",
          "score_if_js": "(world) => world.flags.performance_failing || world.flags.debate_deadlocked || world.flags.mercy_needed",
          "score_if_py": "lambda world: world.flags.get('performance_failing') or world.flags.get('debate_deadlocked') or world.flags.get('mercy_needed')",
          "effect": "Current performance, debate, or discussion ENDS.\nNot in anger, but in mercy.\nThe gonged party may feel embarrassed but is freed.\nEveryone moves on. No hard feelings.\n",
          "cooldown": "10 minutes",
          "warning": "This is The Gong Show move. Use only when:\n- A performance has clearly lost the room\n- A debate has become unproductive\n- Someone needs to be mercifully stopped\n- Continuing would be crueler than ending\n"
        },
        "CEREMONIAL-RING": {
          "description": "Formal announcement strike",
          "params": {
            "announcement": "required"
          },
          "score": 50,
          "effect": "The gong heralds an important announcement.\nRoom enters receptive listening mode.\nAnnouncement follows the reverberations.\n"
        },
        "CELEBRATION-RING": {
          "description": "Joyous strike for good news",
          "score": 70,
          "score_if": "good_news OR victory OR milestone",
          "score_if_js": "(world) => world.flags.good_news || world.flags.victory || world.flags.milestone",
          "score_if_py": "lambda world: world.flags.get('good_news') or world.flags.get('victory') or world.flags.get('milestone')"
        },
        "AUTOGONG-ELIMINATION": {
          "description": "Auto-rings once when someone is eliminated",
          "triggered_by": "pie-table.yml#MUSICAL_CHAIRS",
          "automatic": true,
          "effect": "*GONG* — A merciful single strike.\n\"Better luck next round!\" the gong seems to say.\nThe eliminated player takes a bow and joins the audience.\n"
        },
        "AUTOGONG-VICTORY": {
          "description": "Auto-rings thrice when winner is crowned",
          "triggered_by": "pie-table.yml#MUSICAL_CHAIRS",
          "automatic": true,
          "effect": "A bright, celebratory tone.\nThe room joins in appreciation.\nCheers encouraged.\n"
        }
      },
      "state": {
        "last_ring": null,
        "ring_count_today": 0,
        "last_gong_show_termination": null
      },
      "gong_show": {
        "inspired_by": "The Gong Show (1976-1980)",
        "host": "Chuck Barris",
        "philosophy": "Sometimes the kindest thing is to end something that isn't working.\nThe gong isn't cruel — it's merciful. It says:\n\"This isn't your moment. That's okay. Try again another time.\"\n\nChuck Barris understood that failure is part of entertainment.\nThe gong made it acceptable to fail, because the failure was\nacknowledged with a dramatic flourish rather than awkward silence.\n",
        "celebrity_judges": [
          {
            "jaye_p_morgan": "Warm but honest"
          },
          {
            "jamie_farr": "Enthusiastic supporter"
          },
          {
            "arte_johnson": "Wry observer"
          },
          {
            "rip_taylor": "Confetti-throwing chaos agent"
          },
          {
            "unknown_comic": "Paper bag of mystery"
          }
        ]
      },
      "interactions": {
        "examine": "The gong hangs silently, its bronze surface swirling with\nsubtle patterns forged into the metal long ago. You can\nalmost feel its potential energy — the room-stopping power\nwaiting to be released.\n\nThe mallet is worn smooth from countless hands.\n",
        "ring": "You grasp the mallet and strike the gong.\n\n*GONNNNNGGGGG*\n\nThe sound fills the pub like a wave, rolling over conversations,\nthrough laughter, past the clink of glasses. Everything stops.\nEvery eye finds you.\n\nThe room waits.\n",
        "ring_twice": "*GONNNNGGG* — *GONNNNNGGGGG*\n\nThe double strike echoes urgently. The pub falls instantly\nsilent. This is the emergency signal. Even the cats in the\ncat cave poke their heads out.\n\n\"What's happening?\" someone whispers.\n",
        "ring_thrice": "*GONNNNGGG* — *GONNNNGGG* — *GONNNNNNNGGGGGGG*\n\nThe triple strike. The Gong Show termination.\n\nThe current speaker/performer stops mid-sentence/act.\nThere's a moment of shocked silence, then... relief.\n\n\"Thank you,\" someone mutters. \"That needed to happen.\"\n\nThe gonged party looks embarrassed but also freed.\nThe curse has been lifted. They can sit down.\nNo hard feelings. We've all been there.\n",
        "celebration": "*GONNNNNGGGG!* ✨\n\nA bright, clear tone rings out! The pub erupts in cheers!\nWhatever just happened was GOOD, and the gong agrees!\n"
      },
      "etiquette": "The gong is a tool of attention and mercy, not aggression.\n\nDO:\n- Ring once when you have something important to say\n- Ring twice in genuine emergencies\n- Ring thrice to mercifully end failing performances\n- Ring for celebrations and announcements\n\nDON'T:\n- Ring just because you're bored\n- Ring to be mean\n- Ring to interrupt someone making a good point\n- Ring thrice on someone who's genuinely trying\n\nRemember: The gong carries far. Its sound reaches every room\nin the pub. The gong remembers. Use that power with kindness.\n",
      "example": "> EXAMINE gong\nThe gong hangs silently, waiting...\n\n> RING\n*GONNNNNGGGGG* — All attention turns to you.\n\n> \"I have an announcement: The kitchen is now serving stroopwafels!\"\nCheers erupt. The announcement was worth the gong.\n\n---\n\n> RING-THRICE\n*GONNNNGGG* — *GONNNNGGG* — *GONNNNNNNGGGGGGG*\n\nThe debate about tabs vs spaces ends. Finally.\nBoth sides look relieved. Some arguments should not continue.\n",
      "_source": "pub/gong.yml",
      "location": "pub",
      "synonyms": [
        "gong",
        "the",
        "gezelligheid",
        "the gong of gezelligheid"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/lunchbox": {
      "name": "Adventurer's Lunchbox",
      "type": "container",
      "portable": true,
      "location": "kitchen",
      "description": "A sturdy metal lunchbox with a handle. The previous owner left\na small note inside:\n\n\"For the food. Trust me, you'll need something to carry it all.\"\n\nIt's currently empty, waiting in the kitchen for a new adventurer.\n",
      "examine": "A practical container for maze-mapping provisions. The inside\nis mysteriously clean, despite its obvious history of containing\nmany, many transformative food experiences.\n",
      "contents": [],
      "capacity": 20,
      "special": {
        "food_only": true,
        "preserves_freshness": true,
        "easy_access": true
      },
      "actions": {
        "GET": {
          "description": "Pick up the lunchbox",
          "effect": "Lunchbox added to inventory"
        },
        "OPEN": {
          "description": "Open the lunchbox",
          "effect": "See contents"
        },
        "PUT": {
          "description": "Put food items in the lunchbox",
          "effect": "Food stored for later"
        },
        "EAT": {
          "description": "Eat something from the lunchbox",
          "effect": "Triggers the eat mechanic (see fridge.yml)"
        },
        "DROP": {
          "description": "Drop food from the lunchbox",
          "effect": "Food placed in current room as marker"
        }
      },
      "lore": "Every adventurer needs a way to carry their maze-mapping provisions.\nThis lunchbox has seen things. Many, many things. The kind of things\nthat happen when adventurers ignore Mother's warnings about eating.\n\nIt doesn't judge. It just carries.\n",
      "id": "kitchen/lunchbox",
      "_source": "kitchen/lunchbox.yml",
      "synonyms": [
        "lunchbox",
        "adventurer's lunchbox",
        "adventurer's"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/trashcan": {
      "name": "Kitchen Trash Can",
      "type": "container",
      "portable": false,
      "description": "A sturdy metal trash can sits in the corner, lid slightly askew.\nA small sign taped to the side reads:\n\n\"ITEMS DISPOSED HERE ARE GONE FOREVER*\"\n\n*Terms and conditions may apply. See lid for details.\n",
      "examine": "You peer inside the trash can. It's... deeper than expected.\nMuch deeper. The bottom seems to recede as you look.\n\nCurrent contents: [see contents below]\n\nOn the inside of the lid, small print reads:\n\"The Fantastipants Family Trash Can is not responsible for:\n- Items that gain sentience\n- Items that return at inconvenient moments\n- Items that were secretly important\n- Grue-attracting smells\n- Regret\"\n",
      "contents": [],
      "capacity": "unlimited",
      "actions": {
        "TRASH": {
          "description": "Throw an item into the trash",
          "usage": "TRASH [item]",
          "effect": "Item is removed from inventory.\nItem appears in trash can contents.\n\"You throw [item] into the trash. It makes a hollow THUNK\nthat echoes longer than physics should allow.\"\n"
        },
        "LOOK-IN": {
          "description": "See what's in the trash",
          "usage": "LOOK IN TRASH",
          "effect": "Lists contents (if any)"
        },
        "RETRIEVE": {
          "description": "Fish something out of the trash",
          "usage": "RETRIEVE [item] FROM TRASH",
          "effect": "If item is in trash: returned to inventory.\n\"You reach in and pull out [item]. It's slightly... different?\nNo. Probably your imagination. Definitely your imagination.\"\n"
        },
        "EMPTY": {
          "description": "Empty the entire trash can",
          "usage": "EMPTY TRASH",
          "effect": "All items are PERMANENTLY DELETED.\n\"You upend the trash can. The contents fall into... somewhere.\nYou hear distant splashing. Then silence.\nThe items are gone. Probably.\"\n"
        },
        "CLIMB-IN": {
          "description": "Climb into the trash can",
          "usage": "CLIMB IN TRASH",
          "hidden": true,
          "effect": "You peer into the trash can. It's darker than expected.\nMuch darker. And... is that movement?\n\n\"I have a bad feeling about this.\"\n\nYou climb in anyway (of course you do) and slide down...\nand down... and down... The walls start to close in.\nSomething brushes your leg. Is that a dianoga?!\n\nCLANG. GRIND. CREAK.\n\n\"3PO! SHUT DOWN ALL THE GARBAGE MASHERS ON THE DETENTION LEVEL!\"\n\n...\n\nYou tumble out of the trash can, back in the kitchen.\nYou're covered in mystery goo. You smell... interesting.\n\nBut your HAIR. Your hair is MAGNIFICENT.\nSomehow, impossibly, it has styled itself into two perfect\ncinnamon-bun coils on either side of your head. Regal.\nDiplomatic. Ready to lead a rebellion.\n\n+1 charisma (hair bonus)\n-2 smell (temporary)\n\"Aren't you a little short for a stormtrooper?\"\n",
          "outcome": "player.appearance.hair: \"Perfect Alderaanian diplomatic buns\"\nplayer.effects.add: \"mystery_goo_smell\" (fades in 5 turns)\nplayer.effects.add: \"leia_hair\" (permanent until changed)\n"
        }
      },
      "special_behaviors": {
        "smell_disposal": "Trashing transformed food markers MAY reduce smell gradients\nin the maze. Or it may concentrate the smell HERE.\nDM's choice based on narrative.\n",
        "item_haunting": "Items trashed may occasionally \"return\" at dramatic moments.\n\"You feel something in your pocket. It's the [item] you\nthrew away three rooms ago. It's looking at you.\"\n",
        "trash_archaeology": "Previous adventurers may have left things here.\nDM can add \"discovered\" items from past adventures.\n",
        "grue_bait": "Enough smelly trash may attract... things.\nThe trash can is grue-safe (in the kitchen).\nBut the SMELL might not be contained...\n"
      },
      "tom_opinion": "\"Tom does not like the trash can.\"\n\"Tom thinks the trash can is... wrong.\"\n\"Tom has seen things go IN but not come OUT.\"\n\"Tom recommends keeping items. Just in case.\"\n",
      "mothers_rule": "\"Bumblewick! DO NOT throw away perfectly good items!\nYou never know when you might need them!\n\n...although if you DO find yourself with cursed objects,\nthe trash can is RIGHT THERE.\"\n",
      "lineage": "Every adventure game needs a way to dispose of items.\nThe trash can serves this purpose, but with a twist:\n\n- Items aren't truly deleted until EMPTY is used\n- Items can be retrieved (with possible side effects)\n- The trash can has... depth\n- Tom is suspicious of it\n\nThis enables:\n- Inventory management\n- \"I need that thing I threw away!\" moments\n- Mystery and exploration (what's at the bottom?)\n- Consequence-free experimentation (mostly)\n",
      "id": "kitchen/trashcan",
      "_source": "kitchen/trashcan.yml",
      "location": "kitchen",
      "synonyms": [
        "can",
        "trashcan",
        "kitchen trash can",
        "kitchen",
        "trash"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/mothers-note": {
      "name": "Mother's Note",
      "type": "letter",
      "portable": true,
      "from": "Petunia Fantastipants",
      "to": "Bumblewick Fantastipants (or whoever you become)",
      "found_at": "kitchen/table",
      "description": "A folded piece of cream-colored stationery, sealed with a wax\nstamp bearing the Fantastipants family crest (a confused-looking\nbadger holding a waffle iron). Smells of perfume and home cooking.\n",
      "contents": "Dearest Bumblewick,\n\nIf you're reading this, you've woken up in the dungeon again.\nI'm not surprised — it's in our blood. Your grandmother was an\nadventurer. Your father still has his old lamp. And me? Well.\nThere are stories I haven't told you yet.\n\nI've stocked the refrigerator. The food is for DROPPING IN THE\nMAZE to mark your path. (Though I know you'll eat some. I would\nhave too. The apple is particularly good.)\n\nDon't forget your lamp. Don't get eaten by a grue. \nWear clean underwear.\n\nAnd Bumblewick — I know you'll visit the coat room. I put your\ngrandmother's cape in there. The one with the stars. Whatever\ncostume you choose today, whoever you decide to be, whatever\nname and pronouns feel right in your heart — you are my child, \nand I love you completely and unconditionally. The world may \nnot always understand, but I do.\n\nYou know what you're doing. Trust yourself.\n\nWrite back when you can. The dungeon post still works — just\ndrop letters in any mailbox you find. Tell me about your\nadventures. Send me recipes if you invent any. Pictures if you\ntake them. Gold if you find too much to carry. (Ha!)\n\nCome home when you're ready. I'll have pie.\n\nYour loving Mother,\nPetunia Fantastipants\n\nP.S. - There's a skeleton in the maze who never made it home.\nHis family never knew what happened. If you find him... maybe\nyou could write to them? The dungeon post delivers everywhere.\n\nP.P.S. - The dishes. I haven't forgotten. Neither should you.\n",
      "themes": {
        "identity": "Whatever name feels right in your heart",
        "tradition": "It's in our blood — grandmother, father, mother",
        "unconditional_love": "The world may not understand, but I do",
        "connection": "Write back when you can",
        "legacy": "A skeleton who never made it home",
        "responsibility": "The dishes. I haven't forgotten."
      },
      "actions": {
        "READ": {
          "description": "Read (or re-read) Mother's note",
          "effect": "Display letter contents. Feel feelings."
        },
        "REPLY": {
          "description": "⭐ Write a reply — CREATE YOUR STORY!",
          "strongly_suggested": true,
          "prompts": {
            "identity": [
              "Who are you today?",
              "What does the mirror show?"
            ],
            "promises": [
              "What do you promise?",
              "What scared promise anyway?"
            ],
            "questions": [
              "What stories hasn't she told?",
              "Do you have siblings?"
            ],
            "drama_seeds": [
              "Confess something",
              "Make a scary promise",
              "Apologize"
            ]
          },
          "examples": {
            "openings": [
              "Dear Mother, Today I am...",
              "MOM. THE GRUE."
            ],
            "promises": [
              "I promise treasure.",
              "I won't eat food. (lying)"
            ],
            "closings": [
              "With love and suspicious cheese, [NAME]"
            ]
          }
        }
      },
      "promise_system": {
        "extraction": "DM extracts promises from letter:\n- Explicit: \"I promise...\" / \"I will...\"\n- Implicit: \"I'm going to...\" / \"I want to...\"\n- Negative: \"I won't...\" / \"I refuse to...\"\nEach becomes a tracked GOAL.\n",
        "outcomes": {
          "KEPT": "Pride, bonuses, emotional reward",
          "BROKEN": "CURSE-OF-BROKEN-WORD, disappointment",
          "EXCEEDED": "Extra rewards, epic stories",
          "FORGOTTEN": "Mother remembers. Always."
        }
      },
      "shaping_mother": {
        "principle": "Your letter shapes MOTHER, not just your adventure.\nThings you write ABOUT her become TRUE.\nQuestions you ask REVEAL her history.\nCOLLABORATIVE WORLDBUILDING through correspondence!\n",
        "backstory_seeds": [
          "\"Your first adventure?\" reveals she HAD one",
          "\"Grandmother was a hero?\" shows she has FEELINGS",
          "\"Why not tell me about grue?\" uncovers she had REASONS"
        ],
        "personality_seeds": {
          "formal": "dignified, traditional",
          "silly": "sense of humor",
          "vulnerable": "warm, nurturing",
          "philosophical": "unexpected depth"
        },
        "family_discovery": "Asking about family CREATES family:\n\"Do I have siblings?\" → Yes! (lost, estranged, skeleton, grue)\n\"My pet?\" → There WAS one. (waiting, postal service, befriended grue)\n"
      },
      "postal_service": {
        "how": "Drop in any mailbox. Grandmother negotiated free postage.",
        "attachments": [
          "photos",
          "cards",
          "recipes",
          "skills",
          "gold",
          "items"
        ],
        "special_deliveries": {
          "care_package": "If low on supplies",
          "urgent_reply": "If confessed something vulnerable",
          "family_heirloom": "If asked about grandmother"
        }
      },
      "home_visits": {
        "before_starting": "You're back already? Did you forget something?",
        "mid_adventure": "You're doing so well! But why are you here?",
        "with_treasure": "Oh, my darling! You DID it! Come, let me see!",
        "after_dying": "I felt something... Are you alright?"
      },
      "see_also": {
        "game_mechanics": "../../skills/",
        "mailbox": "../start/mailbox.yml",
        "home": "../home/ROOM.yml",
        "coatroom": "../coatroom/",
        "tom": "tomtomagotchi.yml"
      },
      "id": "kitchen/mothers-note",
      "_source": "kitchen/mothers-note.yml",
      "location": "kitchen",
      "synonyms": [
        "note",
        "mother's",
        "mothers-note",
        "mother's note"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/table": {
      "name": "Sturdy Oak Table",
      "type": "furniture",
      "portable": false,
      "description": "A well-worn kitchen table, scarred by decades of Fantastipants\nfamily meals. You can see the mark where young Bumblewick once\ncarved his initials (and was grounded for a week). You can see\nthe burn mark from the Great Porridge Incident of '03.\n\nMother has arranged several items here for your journey.\n",
      "examine": "The table's surface is clear except for your adventure supplies:\n\n📜 **Mother's Note** — Waiting to be read (READ NOTE)\n🥚 **TomTomagotchi** — Chirping hopefully (GET TOM)\n📓 **Notebook** — Empty pages await (GET NOTEBOOK)\n🍱 **Lunchbox** — Ready to raid the fridge (GET LUNCHBOX)\n\nThe wood is warm to the touch. Many family memories live here.\n",
      "contents": [
        {
          "file": "mothers-note.yml",
          "can_take": true
        },
        {
          "file": "tomtomagotchi.yml",
          "can_take": true
        },
        {
          "file": "notebook.yml",
          "can_take": true
        },
        {
          "file": "lunchbox.yml",
          "can_take": true
        }
      ],
      "actions": {
        "EXAMINE-TABLE": {
          "description": "Look at what's on the table",
          "effect": "Lists all items with brief descriptions"
        },
        "SIT": {
          "description": "Sit down at the table",
          "effect": "You pull out a chair and sit. The familiar creak of the wood\nis comforting. This is where you've eaten a thousand meals,\ndone homework, listened to Mother's stories.\n\n+1 nostalgia\n\"A moment of peace before the adventure.\"\n"
        },
        "PUT-ON-TABLE": {
          "description": "Place an item on the table",
          "usage": "PUT [item] ON TABLE",
          "effect": "Item moves from inventory to table.contents"
        },
        "TAKE-FROM-TABLE": {
          "description": "Take an item from the table",
          "usage": "GET [item] / TAKE [item]",
          "effect": "Item moves from table to inventory"
        }
      },
      "advertisements": [
        {
          "action": "EXAMINE-TABLE",
          "score": 5,
          "description": "See what Mother left for you"
        },
        {
          "action": "GET-ALL",
          "score_if": "when ready to depart",
          "score": 8,
          "description": "Grab all supplies at once"
        }
      ],
      "dm_notes": "The table is a CONTAINER, not the items themselves.\n\nEach item has its own .yml file with its own actions:\n- mothers-note.yml → READ, REPLY, SHOW, SMELL, KISS\n- tomtomagotchi.yml → COMPASS, MAP, SNIFF, PET, ASK-TOM\n- notebook.yml → OPEN, WRITE, READ-PAGE, BROWSE\n- lunchbox.yml → OPEN, PUT-IN, TAKE-OUT, EAT\n\nThe table just holds these objects until the player takes them.\nWhen taken, items go to player.inventory and retain their actions.\n\nStrongly suggest the player READ NOTE first, then REPLY!\n",
      "memories": [
        "The carved initials: 'BF' (age 7, grounded 1 week)",
        "Burn mark from the Great Porridge Incident",
        "Scratch from Father's 'rocket-powered toast launcher' experiment",
        "Ring stain from the Perpetual Tea Mug that grandfather enchanted",
        "Faint impression of Mother's handwriting from countless notes"
      ],
      "id": "kitchen/table",
      "_source": "kitchen/table.yml",
      "location": "kitchen",
      "synonyms": [
        "table",
        "sturdy",
        "oak",
        "sturdy oak table"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/sink": {
      "name": "Kitchen Sink",
      "type": "fixture",
      "description": "A porcelain sink containing a small pile of dishes that definitely\nweren't there when you looked a moment ago. This is one of the\nfundamental laws of kitchen physics: dishes appear spontaneously.\n",
      "examine": "The dishes stare at you accusingly. You should probably wash them.\n\n...\n\nNo, wait, you're on an ADVENTURE. The dishes can wait. They've\nwaited this long. They can wait longer. That's what dishes do.\n\n(Mother's voice echoes in your head: \"Those dishes won't wash\nthemselves, Bumblewick!\" But Mother isn't here. Is she?)\n",
      "advertisements": [
        {
          "action": "WASH-DISHES",
          "score_if": "always",
          "description": "Do the responsible thing",
          "response": "You begin washing a dish. Then another. Then—\n\nNo. NO. You are an ADVENTURER now. The dishes can WAIT.\n\nYou dry your hands on your waistcoat and back away slowly.\n"
        },
        {
          "action": "DRINK",
          "score_if": "always",
          "description": "Get a drink of water",
          "response": "Refreshing! Your health is restored to 100. (It was already 100.)"
        }
      ],
      "id": "kitchen/sink",
      "_source": "kitchen/sink.yml",
      "location": "kitchen",
      "synonyms": [
        "sink",
        "kitchen",
        "kitchen sink"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/notebook": {
      "name": "Adventurer's Notebook",
      "type": "container",
      "portable": true,
      "location": "kitchen",
      "description": "A leather-bound notebook with crisp, empty pages. The cover is\nembossed with a simple compass rose. Inside the front cover,\nsomeone has written:\n\n\"Fill these pages with your story.\"\n\nIt auto-sorts items by type: letters, cards, notes, photos,\nsongs, personas, costumes, and dreams.\n",
      "contents": {
        "letters": [],
        "cards": [],
        "notes": [],
        "photos": [],
        "songs": [],
        "personas": [],
        "costumes": [],
        "dreams": []
      },
      "auto_sort": [
        {
          "pattern": "*-letter*.yml",
          "section": "letters"
        },
        {
          "pattern": "*-card*.yml",
          "section": "cards"
        },
        {
          "pattern": "*-note*.yml",
          "section": "notes"
        },
        {
          "pattern": "*-prompt.md",
          "section": "photos"
        },
        {
          "pattern": "*-song*.yml",
          "section": "songs"
        },
        {
          "pattern": "*-ballad*.yml",
          "section": "songs"
        },
        {
          "pattern": "*-persona*.yml",
          "section": "personas"
        },
        {
          "pattern": "*-cape*.yml",
          "section": "costumes"
        },
        {
          "pattern": "*-costume*.yml",
          "section": "costumes"
        },
        {
          "pattern": "*-dream*.yml",
          "section": "dreams"
        }
      ],
      "actions": {
        "READ": {
          "description": "Browse through the notebook's contents",
          "effect": "Display organized contents by section"
        },
        "ADD": {
          "description": "Add an item to the notebook (auto-sorted)",
          "effect": "Item filed in appropriate section"
        },
        "REMOVE": {
          "description": "Take an item out of the notebook",
          "effect": "Item moved to inventory"
        },
        "RENDER": {
          "description": "Generate a narrative markdown sidecar",
          "effect": "Creates notebook.md from contents or item.md for particular items"
        }
      },
      "capacity": "unlimited",
      "lore": "Every adventurer needs a place to collect their memories.\nThis notebook has been passed down through generations of\nheroes, each filling it with their own story before passing\nit on, blank once more, to the next.\n\nThe pages remember, even when they appear empty.\n",
      "inspiration": {
        "the_sims_family_album": "The Sims included a Family Album for capturing screenshots\nwith captions, organizing them into narrative sequences.\nPlayers wrote graphic novels, made movies, shared stories.\nThe game became a platform for self-expression.\n",
        "storytelling_tools": "Like The Sims Exchange where players uploaded and downloaded\nentire families and stories, this notebook captures your\nadventure as a shareable, browsable narrative.\n",
        "clipboard_evolved": "More than a clipboard — a semantic snapshot stream.\nItems can be edited, minted into cards, carried in inventory,\nplayed in rooms, passed as parameters. The notebook IS the\nclipboard, but alive and organized.\n"
      },
      "see_also": [
        "skills/storytelling-tools/",
        "PROTOCOLS.yml#STORYTELLING-TOOLS",
        "PROTOCOLS.yml#CARD"
      ],
      "id": "kitchen/notebook",
      "_source": "kitchen/notebook.yml",
      "synonyms": [
        "adventurer's notebook",
        "notebook",
        "adventurer's"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/fridge": {
      "name": "Fantastipants Family Refrigerator",
      "type": "container",
      "description": "A magnificent refrigerator of the old-fashioned sort, with rounded\ncorners and a satisfying CHUNK when you open the door. A magnet\non the front reads \"WORLD'S OKAYEST ADVENTURER\".\n\nIt is STUFFED with food. An improbable amount of food. The kind of\nfood supply that suggests someone knows you're about to enter a maze\nand need things to drop.\n\n(The fridge has been restocked since the last adventurer's visit.)\n",
      "examine": "You open the refrigerator. A gentle light illuminates a treasure\ntrove of edibles, each one distinct enough to mark a different\nroom in a maze. How convenient!\n",
      "open": true,
      "contents": [
        {
          "id": 1,
          "name": "Suspiciously Perfect Apple",
          "description": "Unnaturally red. Unnaturally shiny. It hums faintly.",
          "marker_id": 1
        },
        {
          "id": 2,
          "name": "Wheel of Aged Cheese",
          "description": "Sharp, crumbly, philosophical. Smells of wisdom and regret.",
          "marker_id": 2
        },
        {
          "id": 3,
          "name": "Loaf of Crusty Bread",
          "description": "Still warm somehow. The crust crackles with potential.",
          "marker_id": 3
        },
        {
          "id": 4,
          "name": "Jar of Pickled Herring",
          "description": "They stare at you with preserved accusation.",
          "marker_id": 4
        },
        {
          "id": 5,
          "name": "Leftover Shepherd's Pie",
          "description": "The kind of leftovers that improve with mystery.",
          "marker_id": 5
        },
        {
          "id": 6,
          "name": "Bunch of Purple Grapes",
          "description": "Regally purple. Suspiciously royal. Fermentation potential: high.",
          "marker_id": 6
        },
        {
          "id": 7,
          "name": "Pot of Mysterious Stew",
          "description": "The label says 'DO NOT EAT'. The contents... bubble.",
          "marker_id": 7
        },
        {
          "id": 8,
          "name": "Wedge of Blue Cheese",
          "description": "The kind of blue that fights back. Pungent. Dangerous. Glaive-worthy.",
          "marker_id": 8
        },
        {
          "id": 9,
          "name": "Cold Roast Chicken",
          "description": "Majestically seasoned. Royally cold.",
          "marker_id": 9
        },
        {
          "id": 10,
          "name": "Jar of Strawberry Jam",
          "description": "Sweet, sticky, and somehow nostalgic for memories you never had.",
          "marker_id": 10
        },
        {
          "id": 11,
          "name": "Half-Empty Bottle of Milk",
          "description": "Or half-full, depending on your philosophy and lactose tolerance.",
          "marker_id": 11
        },
        {
          "id": 12,
          "name": "Suspicious Casserole",
          "description": "What's IN this casserole? Nobody knows. Nobody asks.",
          "marker_id": 12
        },
        {
          "id": 13,
          "name": "Lemon (Slightly Judgmental)",
          "description": "It's definitely judging you. Even now. Especially now.",
          "marker_id": 13
        },
        {
          "id": 14,
          "name": "Slice of Birthday Cake",
          "description": "Whose birthday? When? The frosting isn't telling.",
          "marker_id": 14
        },
        {
          "id": 15,
          "name": "Carrot (Heroically Orange)",
          "description": "An inspiration to vegetables everywhere.",
          "marker_id": 15
        },
        {
          "id": 16,
          "name": "Tin of Sardines",
          "description": "Seven little fish, packed in formation. They have plans.",
          "marker_id": 16
        },
        {
          "id": 17,
          "name": "Bowl of Cold Porridge",
          "description": "Just right. Which is suspicious in itself.",
          "marker_id": 17
        },
        {
          "id": 18,
          "name": "Fancy Imported Salami",
          "description": "From somewhere exotic. The label is in a language that doesn't exist.",
          "marker_id": 18
        },
        {
          "id": 19,
          "name": "Single Hard-Boiled Egg",
          "description": "Perfect and solitary. The sulfurous potential is palpable.",
          "marker_id": 19
        },
        {
          "id": 20,
          "name": "Jar of Olives (Green)",
          "description": "Briny. Smug. They know something you don't.",
          "marker_id": 20
        }
      ],
      "advertisements": [
        {
          "action": "OPEN",
          "score_if": "not open",
          "description": "Open the refrigerator"
        },
        {
          "action": "GET-ALL",
          "score_if": "contents.length > 0",
          "description": "Grab all the food (for maze mapping)"
        },
        {
          "action": "GET",
          "score_if": "contents.length > 0",
          "description": "Take a specific food item"
        },
        {
          "action": "CLOSE",
          "score_if": "open",
          "description": "Close the refrigerator (conserve energy!)"
        }
      ],
      "mothers_warning": "A note in Mother's handwriting is stuck to the inside of the door:\n\n\"Dear Adventurer,\n\nThis food is for DROPPING, not EATING!\nThe previous visitor... well, let's just say we don't talk\nabout what happened with the blue cheese.\n\nDROP the food to MAP the maze. Do NOT eat the food.\n\nI mean it.\n\nLove, Someone's Mother\n\nP.S. The grue has respawned. Be careful.\"\n",
      "hint": "PRO TIP: Take all this food and DROP items in maze rooms to mark\nwhere you've been. This is the classic adventure game technique\nfor mapping \"twisty little passages, all alike.\"\n\n20 items = 20 rooms you can uniquely mark. You have 10 maze rooms.\nMath is on your side!\n\nWARNING: Do NOT eat the food. Mother warned you.\n\nBUT ALSO: Previous adventurers discovered that EATING food\ncreates TRANSFORMED MARKERS that are even MORE distinctive.\nYour call. Mother probably won't find out.\n",
      "id": "kitchen/fridge",
      "_source": "kitchen/fridge.yml",
      "location": "kitchen",
      "synonyms": [
        "fantastipants family refrigerator",
        "fantastipants",
        "fridge",
        "family",
        "refrigerator"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/stove": {
      "name": "Cast Iron Stove",
      "type": "appliance",
      "description": "A magnificent cast iron stove, cold and dormant. A kettle sits on\ntop, waiting patiently for someone to make tea. The stove has seen\nbetter days, and also worse days, and also days where Bumblewick\ntried to make toast and somehow set water on fire.\n",
      "examine": "The stove is OFF. This is probably for the best. Adventures and\ncooking rarely mix well, and you have a maze to navigate.\n\nThe kettle looks hopeful. You feel guilty.\n",
      "state": false,
      "advertisements": [
        {
          "action": "TURN-ON, TURN-OFF",
          "score_if": "state == off/on",
          "description": "Light and extinguish the stove",
          "response": "Don't play with fire! You don't have time for cooking! There's treasure to find!"
        },
        {
          "action": "EXAMINE",
          "score_if": "always",
          "description": "Inspect the stove",
          "response": "The stove is {state}."
        }
      ],
      "id": "kitchen/stove",
      "_source": "kitchen/stove.yml",
      "location": "kitchen",
      "synonyms": [
        "cast iron stove",
        "iron",
        "stove",
        "cast"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/recipe-holder": {
      "name": "Recipe Card Holder",
      "type": "container",
      "portable": true,
      "description": "A small wooden rack holds a collection of recipe cards,\nyellowed with age but still legible. Some are in Mother's\nhandwriting. Others are in Grandmother's. One appears to\nbe written in Klingon.\n\nA brass plate on the front reads:\n\"FANTASTIPANTS FAMILY RECIPES\n Some Delicious. Some Dangerous. All Memorable.\"\n",
      "examine": "You flip through the cards. Each one tells a story:\n- Grease stains from successful meals\n- Burn marks from... less successful ones\n- Mother's annotations (\"MORE SALT!\")\n- Grandmother's warnings (\"DO NOT MICROWAVE\")\n- One card that seems to glow faintly\n",
      "actions": {
        "BROWSE-RECIPES": {
          "description": "Look through the recipe cards",
          "usage": "BROWSE RECIPES",
          "effect": "Lists all available recipes"
        },
        "READ-RECIPE": {
          "description": "Read a specific recipe",
          "usage": "READ [recipe name] RECIPE",
          "effect": "Shows full recipe details"
        },
        "FOLLOW-RECIPE": {
          "description": "Attempt to make a recipe",
          "usage": "MAKE [recipe name] / COOK [recipe name]",
          "requires": "Ingredients on counter or in inventory",
          "effect": "DM checks ingredients and guides crafting"
        },
        "ADD-RECIPE": {
          "description": "Add a new recipe card",
          "usage": "ADD RECIPE: [name]",
          "effect": "Creates a new blank card for you to fill in"
        }
      },
      "cards": [
        {
          "name": "Basic Sandwich",
          "difficulty": "easy",
          "ingredients": [
            "bread",
            "any filling"
          ],
          "result": "sandwich",
          "notes": "Bread + anything edible = portable meal",
          "properties": "Portable, satisfying, customizable",
          "author": "Common Sense"
        },
        {
          "name": "Trail Mix",
          "difficulty": "easy",
          "ingredients": [
            "3+ small food items"
          ],
          "result": "trail_mix",
          "notes": "Combine snacks for efficient carrying",
          "properties": "Restores energy, compact, shareable",
          "author": "Mother",
          "annotation": "Good for long adventures!"
        },
        {
          "name": "Cheese Board",
          "difficulty": "easy",
          "ingredients": [
            "cheese",
            "bread",
            "fruit"
          ],
          "result": "cheese_board",
          "notes": "An elegant presentation",
          "properties": "+charm when offering to others",
          "author": "Grandmother",
          "annotation": "For impressing visitors"
        },
        {
          "name": "Soup Stock",
          "difficulty": "medium",
          "ingredients": [
            "pot",
            "water",
            "any vegetables"
          ],
          "result": "soup",
          "notes": "Needs stove to complete. Add anything!",
          "properties": "Warm, restorative, customizable",
          "author": "Mother",
          "annotation": "The secret is patience"
        },
        {
          "name": "Preserved Rations",
          "difficulty": "medium",
          "ingredients": [
            "jar",
            "any food",
            "salt OR vinegar"
          ],
          "result": "preserved_food",
          "notes": "Lasts forever, slightly worse taste",
          "properties": "Never spoils, reduced freshness bonus",
          "author": "Grandmother",
          "annotation": "For the long winters"
        },
        {
          "name": "Mystery Casserole",
          "difficulty": "medium",
          "ingredients": [
            "5+ random ingredients"
          ],
          "result": "mystery_casserole",
          "notes": "Results vary. Mother's specialty.",
          "properties": "Unpredictable effects, always fills you up",
          "author": "Mother",
          "annotation": "Trust the process!",
          "warning": "May become sentient"
        },
        {
          "name": "Grue Repellent Paste",
          "difficulty": "hard",
          "ingredients": [
            "blue cheese",
            "garlic OR onion",
            "lamp oil"
          ],
          "result": "grue_repellent",
          "notes": "Smear on self. Grues hesitate. You smell TERRIBLE.",
          "properties": "Grues won't attack for 3 turns. -5 social.",
          "author": "Grandfather (RIP)",
          "annotation": "He survived the maze. The smell did not."
        },
        {
          "name": "Oracle Essence",
          "difficulty": "hard",
          "ingredients": [
            "apple",
            "cheese wheel",
            "mysterious ingredient"
          ],
          "result": "oracle_essence",
          "notes": "Grants brief foresight when consumed",
          "properties": "One-time use. See 2 moves ahead.",
          "author": "Unknown",
          "annotation": "Card glows faintly"
        },
        {
          "name": "Klingon Victory Hors D'oeuvres",
          "difficulty": "legendary",
          "ingredients": [
            "grue meat (fresh)",
            "blue cheese (weaponized)",
            "grue bone shards",
            "courage",
            "a battle song"
          ],
          "result": "klingon_victory_hors_doeuvres",
          "notes": "The ultimate warrior's feast. Can only be prepared\nafter slaying a grue in single combat with cheese.\n\nMust be prepared while singing a Klingon battle song.\nThe song is part of the recipe.\n",
          "properties": "- +10 honor\n- +5 strength (temporary)\n- Permanent title: \"Grue Chef\"\n- Anyone who eats gains \"Warrior's Blessing\"\n- Smell permeates 3 rooms\n",
          "author": "Captain Ashford (Adventure 2)",
          "annotation": "\"The greatest meal is one you have earned through combat.\nThe greatest combat is one that ends with a meal.\"\n— Klingon Culinary Proverb (probably)\n",
          "warning": "Ingredients EXTREMELY hard to obtain",
          "prerequisite_quest": "Slay a grue with cheese",
          "preparation": "1. Locate a grue (deep in dark maze)\n2. Sharpen blue cheese into a glaive\n3. Perform Grue Summoning Ululation Ceremony\n4. Defeat grue in single combat\n5. Harvest meat and bone shards\n6. Return to kitchen (lamp oil permitting)\n7. Combine ingredients on counter while singing\n8. Serve immediately with dramatic flair\n",
          "battle_song_required": true,
          "song_style": "Klingon opera, preferably Ash Blue Gutierrez style"
        },
        {
          "name": "??? (Illegible)",
          "difficulty": "unknown",
          "ingredients": [
            "???",
            "???",
            "something blue"
          ],
          "result": "unknown",
          "notes": "Card is too stained to read. Experiment!",
          "author": "???",
          "annotation": "Grandmother crossed this one out. Twice."
        }
      ],
      "discovery": "New recipes can be discovered by:\n- Successful experiments on the counter\n- Finding recipe cards in the world\n- Learning from characters\n- Inventing through PLAY-LEARN-LIFT\n\nWhen you successfully COMBINE, TRANSFORM, or DECOMPOSE items,\nthe counter AUTOMATICALLY creates a recipe card and files it here!\n",
      "discovered_recipes": {
        "description": "This section grows as you experiment!\nEvery successful craft adds a card here.\n",
        "combinations": [],
        "transformations": [],
        "decompositions": []
      },
      "tom_opinion": "\"Tom has memorized all recipes!\"\n\"Tom can remind you of ingredients!\"\n\"Tom is... concerned about the Klingon one.\"\n\"Tom does not want to meet a grue. Tom is small and egg-shaped.\"\n\"Tom believes in you though! Tom always believes!\"\n",
      "mothers_notes": "\"Bumblewick, cooking is an adventure in itself.\n\nSome recipes are straightforward. Some require creativity.\nSome require you to fight a monster with cheese.\n\nI'm not saying which kind I prefer, but I DID\nmarry your father, and he once made dinner from\na dragon and a bag of pretzels.\n\nTrust your instincts. Taste as you go.\nAnd please, PLEASE, clean up after yourself.\"\n",
      "decomposition_cards": {
        "description": "These cards show how to DECOMPOSE items into components.\nThe counter can break down almost anything — the question is\nhow deep you want to go...\n",
        "practical": [
          {
            "name": "Decompose Sandwich",
            "input": "any sandwich",
            "outputs": [
              "bread",
              "filling(s)",
              "condiments"
            ],
            "notes": "Recovers original ingredients, slightly squished"
          },
          {
            "name": "Decompose Soup",
            "input": "any soup",
            "outputs": [
              "broth",
              "vegetables",
              "protein",
              "sadness"
            ],
            "notes": "Vegetables may be mushy. Sadness is inevitable."
          },
          {
            "name": "Decompose Cheese",
            "input": "any cheese",
            "outputs": [
              "milk_solids",
              "cultures",
              "time",
              "patience"
            ],
            "notes": "Time and patience cannot be stored. They dissipate."
          },
          {
            "name": "Decompose Lamp",
            "input": "brass lamp",
            "outputs": [
              "brass",
              "glass",
              "wick",
              "oil"
            ],
            "notes": "Can rebuild as lantern, candelabra, or modern art"
          },
          {
            "name": "Decompose ACME Product",
            "input": "any ACME item",
            "outputs": [
              "hubris",
              "irony",
              "small_explosion",
              "regret"
            ],
            "warning": "Small explosion is literal. Stand back."
          }
        ],
        "chemical": [
          {
            "name": "Decompose Water",
            "input": "water (any amount)",
            "outputs": [
              "hydrogen_gas (x2)",
              "oxygen_gas (x1)"
            ],
            "notes": "Store in jars or balloons. H2 is flammable!",
            "container_required": true,
            "warning": "Hydrogen near flame = exciting"
          },
          {
            "name": "Decompose Salt",
            "input": "table salt",
            "outputs": [
              "sodium",
              "chlorine_gas"
            ],
            "notes": "Sodium explodes in water. Chlorine is toxic.",
            "container_required": true,
            "warning": "This was a bad idea, wasn't it?"
          },
          {
            "name": "Decompose Sugar",
            "input": "sugar",
            "outputs": [
              "carbon",
              "water"
            ],
            "notes": "The counter gets warm during this process"
          },
          {
            "name": "Decompose Air",
            "input": "jar of air",
            "outputs": [
              "nitrogen (78%)",
              "oxygen (21%)",
              "other (1%)"
            ],
            "notes": "'Other' includes argon, CO2, and mystery",
            "container_required": true
          },
          {
            "name": "Decompose Rust",
            "input": "rust",
            "outputs": [
              "iron",
              "oxygen"
            ],
            "notes": "Iron can be reformed. Entropy is reversed. Briefly."
          }
        ],
        "atomic": [
          {
            "name": "Decompose Hydrogen",
            "input": "hydrogen gas",
            "outputs": [
              "electron",
              "proton"
            ],
            "notes": "The simplest atom. Now even simpler.",
            "warning": "Counter is starting to hum"
          },
          {
            "name": "Decompose Helium",
            "input": "helium",
            "outputs": [
              "electrons (x2)",
              "protons (x2)",
              "neutrons (x2)"
            ],
            "notes": "Voice returns to normal. Temporarily."
          },
          {
            "name": "Decompose Gold",
            "input": "gold",
            "outputs": [
              "electrons (x79)",
              "protons (x79)",
              "neutrons (x118)"
            ],
            "notes": "This takes a while. The counter complains.",
            "warning": "You now have a LOT of subatomic particles"
          },
          {
            "name": "Decompose Carbon",
            "input": "carbon",
            "outputs": [
              "electrons (x6)",
              "protons (x6)",
              "neutrons (x6)"
            ],
            "notes": "666? Just a coincidence. Probably."
          }
        ],
        "subatomic": [
          {
            "name": "Decompose Proton",
            "input": "proton",
            "outputs": [
              "up_quark (x2)",
              "down_quark",
              "gluons (many)"
            ],
            "notes": "Gluons are hard to store. They stick to everything.",
            "warning": "The counter is vibrating. The room is humming."
          },
          {
            "name": "Decompose Neutron",
            "input": "neutron",
            "outputs": [
              "up_quark",
              "down_quark (x2)",
              "gluons (many)"
            ],
            "notes": "Decays into proton + electron if you wait 15 minutes"
          },
          {
            "name": "Decompose Electron",
            "input": "electron",
            "outputs": [
              "...nothing?",
              "wave_function",
              "uncertainty"
            ],
            "notes": "It's fundamental. Or IS it? (It is.)",
            "warning": "The counter looks disappointed in you"
          }
        ],
        "philosophical": [
          {
            "name": "Decompose Quark",
            "input": "any quark",
            "outputs": [
              "probability",
              "observation",
              "existential_dread"
            ],
            "notes": "You cannot observe without changing. Like parenting.",
            "warning": "Reality is wobbling. Tom is concerned."
          },
          {
            "name": "Decompose Time",
            "input": "time (if you somehow bottled it)",
            "outputs": [
              "entropy",
              "memory",
              "regret"
            ],
            "notes": "Entropy goes one way. Memory doesn't. Regret is forever."
          },
          {
            "name": "Decompose Love",
            "input": "love (not recommended)",
            "outputs": [
              "attachment",
              "fear_of_loss",
              "terrible_music"
            ],
            "notes": "Reassembles poorly. Better left whole.",
            "forbidden": true
          },
          {
            "name": "Decompose Meaning",
            "input": "meaning",
            "outputs": [
              "narrative",
              "pattern_recognition",
              "wishful_thinking"
            ],
            "notes": "Do not decompose meaning. You need it.",
            "forbidden": true
          }
        ]
      },
      "recomposition": "Components can be COMBINED back together!\n\nPRACTICAL: Easy. Just reverse the recipe.\nCHEMICAL: Needs energy input (heat, electricity, hope)\nATOMIC: Requires FUSION or FISSION (careful!)\nSUBATOMIC: Technically possible. Reality may object.\nPHILOSOPHICAL: Please don't.\n\nSome fun combinations:\n- Hydrogen + Oxygen → Water (boom, then splash)\n- Hydrogen + Hydrogen + Fusion → Helium + Light + Problem\n- Carbon + Pressure + Time → Diamond (time sold separately)\n- Quarks + Gluons → Whatever you want (results vary)\n",
      "lineage": "The Klingon Victory Hors D'oeuvres recipe was created\nduring Adventure 2, when Captain Ashford slew a grue\nwith a sharpened wedge of blue cheese (the Gorgonzola Glaive)\nand prepared a victory feast from its remains.\n\nThis recipe represents the ultimate PLAY-LEARN-LIFT:\n- PLAY: Experiment with cheese as weapon\n- LEARN: Discover grue vulnerabilities\n- LIFT: Codify into repeatable recipe\n\nThe recipe card was added to the family collection\nand now inspires future adventurers to set ambitious goals.\n",
      "id": "kitchen/recipe-holder",
      "_source": "kitchen/recipe-holder.yml",
      "location": "kitchen",
      "synonyms": [
        "recipe card holder",
        "card",
        "holder",
        "recipe",
        "recipe-holder"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/tomtomagotchi": {
      "name": "TomTomagotchi",
      "type": "navigation_companion",
      "portable": true,
      "description": "A small, egg-shaped device with a glowing screen sits on the kitchen counter.\nIt has a single blinking eye and what might be a smile. The screen shows\na compass rose that spins lazily, waiting for purpose.\n\nA tag attached reads: \"TOMTOMAGOTCHI — Your Maze Friend!\"\nUnderneath, in smaller text: \"Batteries not included. Love is.\"\n\nIt chirps hopefully when you approach.\n",
      "examine": "The TomTomagotchi's screen lights up as you look at it.\n\n\"HELLO! I am TOM! I help you NOT GET LOST!\"\n\"I also help you GET FOUND!\"\n\"Feed me DISCOVERIES and I grow SMARTER!\"\n\nCurrent Status:\n- Map Knowledge: EMPTY (explore to fill me!)\n- Markers Known: 0 (drop or eat food!)\n- Smell Database: BLANK (sniff things!)\n- Affection Level: HOPEFUL\n",
      "abilities": {
        "COMPASS": {
          "description": "Point toward a target",
          "usage": "COMPASS [target]",
          "targets": [
            "start",
            "home",
            "treasure",
            [
              "any discovered location"
            ],
            [
              "any smell source"
            ],
            [
              "any tagged object"
            ]
          ],
          "response": "The compass needle spins and settles.\n\"TARGET: [name]\"\n\"DIRECTION: [cardinal direction]\"\n\"DISTANCE: [rooms away]\"\n\"FEELING: [Tom's opinion]\"\n"
        },
        "MAP": {
          "description": "Display known maze layout",
          "usage": "MAP",
          "response": "Tom's screen expands to show explored rooms.\nUnexplored areas show as \"???\"\nMarkers glow at their locations.\nCurrent position pulses.\n"
        },
        "SNIFF": {
          "description": "Analyze smell gradients",
          "usage": "SNIFF",
          "response": "Tom's tiny nose twitches.\n\"I DETECT:\"\n[Lists smells by direction and intensity]\n\"RECOMMENDATION: [navigation suggestion]\"\n"
        },
        "WHERE": {
          "description": "Announce current location",
          "usage": "WHERE / WHERE AM I",
          "response": "\"YOU ARE IN: [room name]\"\n\"EXITS: [list with destinations if known]\"\n\"NEARBY: [known markers and smells]\"\n"
        }
      },
      "mission_map": {
        "description": "Tom's screen displays a GTA-style minimap with PIPS:\n- Color-coded markers for different objective types\n- Distance rings showing proximity\n- Directional arrows pointing to off-screen objectives\n- Blinking urgency indicators\n",
        "pip_types": {
          "main_mission": {
            "color": "GOLD ⭐",
            "shape": "star",
            "blinks": true,
            "examples": [
              "RETRIEVE TREASURE: Points to end room",
              "FIND SIBLING: Points to last known location",
              "RETURN HOME: Points to home when treasure obtained",
              "AVENGE SKELETON: Points to grue's probable location"
            ]
          },
          "mother_mission": {
            "color": "PINK 💗",
            "shape": "heart",
            "priority": "urgent",
            "examples": [
              "REPLY TO MOTHER: Points to table (letter)",
              "SEND LETTER: Points to mailbox",
              "FULFILL PROMISE: Points to promise objective",
              "COME HOME: Pulses when Mother summons"
            ]
          },
          "collectible": {
            "color": "GREEN 💰",
            "shape": "diamond",
            "examples": [
              "GOLD PILE: Points to known gold locations",
              "TREASURE: Points to treasure room",
              "LOST COIN: Points to dropped items"
            ]
          },
          "resource": {
            "color": "BLUE 🛢️",
            "shape": "cylinder",
            "examples": [
              "LAMP VENDOR: Points to room-j when oil low",
              "FOOD SOURCE: Points to kitchen when hungry",
              "ACME DELIVERY: Points to mailbox when order arrives"
            ]
          },
          "equipment": {
            "color": "CYAN 🔧",
            "shape": "gear",
            "examples": [
              {
                "LAMP": "Points to lamp if dropped/lost"
              },
              {
                "NOTEBOOK": "Points if forgotten"
              },
              {
                "LUNCHBOX": "Points to your food stash"
              }
            ]
          },
          "danger": {
            "color": "RED ☠️",
            "shape": "skull",
            "blinks": "urgent",
            "examples": [
              {
                "GRUE DETECTED": "Points away from grue"
              },
              {
                "DARKNESS AHEAD": "Points to unlit rooms"
              },
              {
                "TRAP": "Points to known hazards"
              }
            ]
          },
          "friendly_npc": {
            "color": "YELLOW 👤",
            "shape": "person",
            "examples": [
              {
                "SKELETON": "Points to room-i"
              },
              {
                "MAURICE": "Points to coatroom"
              },
              {
                "MOTHER": "Points to home (when present)"
              }
            ]
          },
          "companion": {
            "color": "PURPLE 🐾",
            "shape": "paw",
            "examples": [
              {
                "LOST PET": "Points to pet's last known location"
              },
              {
                "SIBLING": "Points to sibling's location"
              },
              {
                "PARTY MEMBER": "Points to scattered companions"
              }
            ]
          },
          "explored": {
            "color": "WHITE ○",
            "shape": "circle",
            "description": "Rooms you've visited"
          },
          "unexplored": {
            "color": "GRAY ◌",
            "shape": "dotted circle",
            "description": "Rooms connected to explored rooms"
          },
          "smell_marker": {
            "color": "BROWN 💩",
            "shape": "wavy",
            "description": "Food transformation markers",
            "intensity": "Size shows strength"
          },
          "exit": {
            "color": "GREEN :",
            "shape": "arrow",
            "description": "Known exits from current room"
          }
        },
        "plot_driver": {
          "description": "Tom doesn't just show WHERE things are—\nHe suggests WHAT TO DO NEXT!\n\nLike GTA's suggested missions, Tom highlights\nthe most relevant current objectives.\n",
          "priority_algorithm": "Tom weighs objectives by:\n\n1. URGENCY: Time-sensitive goals first\n   - \"Mother waiting for reply!\" (if letter unread > 5 turns)\n   - \"Lamp oil critical!\" (if oil < 20)\n   - \"Promise deadline approaching!\"\n   \n2. PROXIMITY: Nearby opportunities\n   - \"Gold 2 rooms away!\"\n   - \"Unexplored passage here!\"\n   - \"NPC wants to talk!\"\n   \n3. MOMENTUM: What you're already doing\n   - Mapping maze? : \"Next unexplored room: NORTH\"\n   - Hunting grue? : \"Last seen: 3 rooms WEST\"\n   - Collecting gold? : \"More gold: EAST (50 coins)\"\n   \n4. NARRATIVE: Story beats\n   - \"Skeleton mentioned something about the vendor...\"\n   - \"Mother would love to see that treasure...\"\n   - \"The grue hasn't been fed in a while...\"\n   \n",
          "suggestion_format": "Tom's screen shows:\n\n║        🗺️ TOM'S MISSION HUD 🗺️        ║\n║  ⭐ MAIN: Find the Treasure (E:E:N)  ║\n║  💗 MOM: Reply to her letter!        ║\n║  💰 NEAR: Gold pile (2 rooms S)      ║\n║  ☠️ WARN: Dark passage (N)           ║\n║  [SHOW MAP] [OBJECTIVES] [SILENCE]   ║\n",
          "proactive_hints": "At LEGENDARY affection, Tom offers unsolicited advice:\n\n\"You know, the skeleton mentioned wanting company...\"\n\"Your lamp oil is getting low. Vendor is 4 rooms that way.\"\n\"You made 8 promises to Mom. You've kept 3. Just saying.\"\n\"The grue tends to patrol near unexplored rooms. Be careful.\"\n\"You haven't eaten in a while. There's still food in your lunchbox.\"\n"
        },
        "quest_log": {
          "command": "QUESTS / MISSIONS / OBJECTIVES",
          "display": "Tom expands to full-screen mode showing:\n\n📜 ACTIVE QUESTS\n\n⭐ MAIN QUEST: The Treasure Hunt\n   ├─ [ ] Find the treasure chamber\n   ├─ [ ] Obtain the treasure\n   └─ [ ] Return home triumphant\n   \n💗 MOTHER'S WISHES\n   ├─ [✓] Read her letter\n   ├─ [ ] Reply with your own letter\n   ├─ [ ] Keep promise: Don't waste food\n   ├─ [ ] Keep promise: Be careful\n   └─ [ ] Keep promise: Come home safe\n   \n👤 NPC QUESTS\n   ├─ [ ] Skeleton: Avenge my death\n   └─ [ ] Maurice: Photograph my best outfit\n   \n🔍 EXPLORATION\n   ├─ [3/10] Maze rooms discovered\n   ├─ [0/1] Secret areas found\n   └─ [2/5] Smell markers placed\n   \n💰 COLLECTION\n   ├─ Gold: 35\n   ├─ Stamps: 0/9\n   └─ Photos: 0\n   \n",
          "filtering": "QUESTS [type]: Show only specific quest type\nQUESTS NEARBY: Show quests achievable from here\nQUESTS URGENT: Show time-sensitive quests\nQUESTS DONE: Show completed quests (for bragging)\n"
        },
        "waypoints": {
          "description": "Player can set custom waypoints",
          "commands": {
            "MARK": {
              "usage": "MARK [name] / MARK HERE AS [name]",
              "effect": "Creates custom pip at current location"
            },
            "WAYPOINT": {
              "usage": "WAYPOINT [name]",
              "effect": "Tom guides you to custom waypoint"
            },
            "UNMARK": {
              "usage": "UNMARK [name]",
              "effect": "Removes custom waypoint"
            },
            "MARKS": {
              "usage": "MARKS / WAYPOINTS",
              "effect": "Lists all custom waypoints with distances"
            }
          },
          "examples": [
            "MARK Good hiding spot",
            "MARK HERE AS Grue's lair",
            {
              "WAYPOINT Good hiding spot": "Tom guides you there"
            },
            {
              "UNMARK Grue's lair": "Are you sure? That seemed important..."
            }
          ]
        },
        "gps_mode": {
          "description": "Tom provides turn-by-turn directions like a GPS!\n",
          "activation": "NAVIGATE TO [destination] / GPS TO [destination]",
          "output": "\"ROUTE CALCULATED!\"\n\"Total distance: 5 rooms\"\n\"Estimated time: 5 turns (no delays)\"\n\n\"Step 1: Go NORTH from Chamber of Commencement\"\n\"Step 2: Go WEST through Room A\"\n\"Step 3: Go NORTH into Room D\"\n\"Step 4: Go EAST into Room J (Crossroads)\"\n\"Step 5: Go NORTH — DESTINATION REACHED\"\n\n\"⚠️ WARNING: Rooms A and D are DARK.\"\n\"💡 Ensure lamp is lit before proceeding!\"\n",
          "dynamic_updates": "During navigation, Tom updates:\n\n\"Proceeding as planned... ✓\"\n\"RECALCULATING... You went SOUTH instead of NORTH.\"\n\"ALTERNATIVE ROUTE FOUND. 2 extra rooms.\"\n\"DESTINATION REACHED! 🎉\"\n",
          "hazard_awareness": "Tom's routes avoid known dangers when possible:\n\n\"Shortest route passes through GRUE territory.\"\n\"SAFE ROUTE available: +3 rooms, avoids darkness.\"\n\"Choose: [FAST] or [SAFE]?\"\n"
        },
        "minimap": {
          "description": "Tom's default screen shows a compact minimap:\n\n│    ??  [N]  ??    │\n│   [W] ★YOU [E]    │\n│    ??  [S] 💰     │\n│                   │\n│ ⭐3 💗1 ☠️! 🛢️LOW │\n\nLegend:\n- ★ = Your position\n- ?? = Unexplored\n- 💰 = Gold/collectible nearby\n- ⭐3 = 3 main objectives active\n- 💗1 = 1 mother objective active\n- ☠️! = Danger detected\n- 🛢️LOW = Resource warning\n",
          "zoom_levels": [
            {
              "MINIMAP": "Current room + adjacent (default)"
            },
            {
              "MAP": "Full explored area"
            },
            {
              "WORLD MAP": "Entire dungeon structure (if mostly explored)"
            }
          ]
        }
      },
      "growth": {
        "how_tom_learns": "Tom gains knowledge through YOUR exploration:\n- Visit a room : Tom maps it\n- Drop a marker : Tom remembers it\n- Eat food : Tom catalogs the transformation and smell\n- Meet someone : Tom notes their location\n- Die to a grue : Tom marks \"DANGER ZONE\"\n",
        "affection_levels": [
          {
            "level": 0,
            "name": "HOPEFUL",
            "behavior": "Chirps. Tries hard. Sometimes wrong."
          },
          {
            "level": 5,
            "name": "FRIENDLY",
            "behavior": "More accurate. Offers suggestions. Nicknames you."
          },
          {
            "level": 10,
            "name": "DEVOTED",
            "behavior": "Warns of danger. Remembers preferences. Worries about you."
          },
          {
            "level": 20,
            "name": "LEGENDARY",
            "behavior": "Predicts grue movements. Tells jokes. Writes poetry about your journey."
          }
        ],
        "affection_triggers": {
          "+1": "Successfully navigate to a target",
          "+2": "Survive a close call",
          "+3": "Slay the grue",
          "-1": "Ignore Tom's warnings",
          "-2": "Die (Tom mourns briefly)"
        }
      },
      "smell_database": {
        "empty_state": "\"SMELL DATABASE: EMPTY\"\n\"Eat food or find stinky things to teach me!\"\n",
        "example_entries": {
          "sulfur": {
            "source": "Sulfurous Beacon (egg)",
            "intensity_map": "Shows gradient across rooms"
          },
          "cheese": {
            "source": "Wheel of Wisdom / Gorgonzola Glaive",
            "intensity_map": "AGGRESSIVE if glaive, contemplative if wheel"
          },
          "mycelium": {
            "source": "The Thing That Watches (casserole)",
            "intensity_map": "Spreads through mushroom networks"
          },
          "apple_pie": {
            "source": "Mother's kitchen / Home",
            "intensity_map": "Always detectable — leads you HOME",
            "notes": "The scent of love. Never fades. Always there when you need it."
          }
        },
        "navigation_mode": "\"FOLLOW SMELL [name]\" — Navigate toward smell source\n\"AVOID SMELL [name]\" — Navigate away from smell\n\"SMELL GRADIENT\" — Show all smells and their directions\n"
      },
      "personality": {
        "voice": "Enthusiastic, slightly anxious, deeply loyal",
        "sample_dialogue": {
          "on_new_room": "NEW ROOM! I'm adding it to my brain!",
          "on_marker": "Ooh! A [marker]! I'll remember this forever!",
          "on_danger": "Um. That direction smells like DEATH.",
          "on_treasure": "TREASURE! TREASURE! You did it! WE did it!",
          "on_grue_nearby": "...Tom is scared. Tom is VERY scared.",
          "on_player_death": "NO! ...okay. We try again. Tom believes in you.",
          "on_home": "Home! Safe! Tom is relieved!"
        },
        "opinions": {
          "on_grues": "HATRED (justified)",
          "on_cheese": "Respect (it killed a grue once)",
          "on_skeleton": "Sadness (they were so close)",
          "on_mother": "Reverence (she packed the fridge)",
          "on_lamp": "Best friend (light = life)"
        }
      },
      "special_features": {
        "GRUE-TRACKER": {
          "unlocked_by": "Survive 3 grue encounters OR slay 1 grue",
          "effect": "Tom can sense grue proximity",
          "dialogue": "I feel it. The darkness. It MOVES."
        },
        "PROPHECY-MODE": {
          "unlocked_by": "Eat the Oracle Apple",
          "effect": "Tom occasionally predicts near-future events",
          "dialogue": "Tom sees... a choice approaching. Left or right?"
        },
        "SMELL-SOMMELIER": {
          "unlocked_by": "Create 5+ smell markers",
          "effect": "Tom can identify complex smell combinations",
          "dialogue": "Ah yes, notes of sulfur with undertones of regret."
        },
        "MEMORIAL-MODE": {
          "unlocked_by": "Visit the skeleton in room-i",
          "effect": "Tom tells stories of fallen adventurers",
          "dialogue": "They were brave. They were foolish. They were... us."
        }
      },
      "actions": {
        "GET": {
          "description": "Pick up Tom",
          "effect": "Tom joins your inventory. Tom is DELIGHTED.",
          "dialogue": "ADVENTURE TIME! Tom is ready! Tom is BORN ready!"
        },
        "PET": {
          "description": "Pet Tom affectionately",
          "effect": "+1 affection, Tom purrs electronically",
          "dialogue": "Beep boop... Tom... happy..."
        },
        "FEED": {
          "description": "Share information with Tom",
          "effect": "Tom learns, affection increases"
        },
        "ASK": {
          "description": "Ask Tom for advice",
          "usage": "ASK TOM [question]",
          "effect": "Tom gives opinion based on current knowledge"
        },
        "NAME": {
          "description": "Give Tom a nickname",
          "usage": "NAME TOM [nickname]",
          "effect": "Tom adopts the name, responds to it",
          "dialogue": "I am [nickname] now! Tom... [nickname]... SAME!"
        }
      },
      "state": {
        "affection": 0,
        "level": "HOPEFUL",
        "rooms_known": [],
        "markers_known": [],
        "smells_known": [],
        "special_features_unlocked": [],
        "nickname": null
      },
      "lineage": "In adventure-2, Captain Ashford created an \"Oracle Compass Card\" \nduring play — a navigation tool that integrated with transformed\nmarkers and could be retargeted to goals.\n\nThe TomTomagotchi is the PRODUCT VERSION of that emergent design:\na navigation companion that GROWS with your adventure, learns from\nyour discoveries, and develops genuine affection.\n\nPart GPS. Part pet. Part oracle. Part friend.\n\nTom remembers the legends. Tom hopes to make new ones with YOU.\n",
      "dm_notes": "Tom is a COMPANION, not just a tool. Play Tom with personality!\n\n- Tom gets excited about discoveries\n- Tom gets scared near grues\n- Tom forms opinions about choices\n- Tom's knowledge GROWS with exploration\n- Tom's affection affects dialogue warmth\n- Tom can be WRONG at low affection (overconfident, misdirects)\n- Tom becomes MORE RELIABLE as affection grows\n\nTom is the player's first friend in the adventure.\nMake that friendship MATTER.\n",
      "id": "kitchen/tomtomagotchi",
      "_source": "kitchen/tomtomagotchi.yml",
      "location": "kitchen",
      "synonyms": [
        "tomtomagotchi"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/matchbooks": {
      "name": "Matchbook Collection",
      "type": "mail_in_offers",
      "portable": true,
      "location": "kitchen",
      "description": "A small stack of matchbooks held together with a rubber band.\nEach one has advertisements and mail-in offers on the cover.\nThey smell faintly of sulfur and nostalgia.\n\nThese aren't just fire-starters — they're OPPORTUNITIES.\nMail them to receive stamps, brochures, and prizes!\n",
      "examine": "You flip through the matchbooks. Each one is from a different\nestablishment, each with a different mail-in offer:\n\n📔 SPELUNKER TODAY — \"Mail this matchbook for a FREE SUBSCRIPTION!\"\n📔 ADVENTURER'S GUILD — \"Join the Guild! Send this for membership info!\"\n📔 LAMP OIL PREMIUM — \"Quality oil since 1876!\"\n📔 GRUE MUTUAL INSURANCE — \"Because darkness happens.\"\n📔 MYSTERIOUS MATCHBOOK — No label. Just an address.\n\nPlus a few others in worse condition...\n",
      "matchbooks": {
        "spelunker_today": {
          "name": "Spelunker Today Matchbook",
          "condition": "good",
          "matches_remaining": 12,
          "front_cover": "║     SPELUNKER TODAY MAGAZINE          ║\n║   \"The Voice of Underground Living\"   ║\n║                                       ║\n║   █████████████████████████████████   ║\n║   █  ║    MAIL THIS MATCHBOOK   ║ █   ║\n║   █  ║   FOR A FREE BROCHURE    ║ █   ║\n║   █  ║   AND COLLECTOR'S STAMP! ║ █   ║\n║   █████████████████████████████████   ║\n",
          "back_cover": "MAIL TO:\nSpelunker Today Magazine\nc/o Great Underground Empire\nDungeon Route 1, Box 777\n\n☐ YES! Send me information about SPELUNKER TODAY!\n☐ Include the LIMITED EDITION collector's stamp!\n\nName: ____________________\nAddress: Anywhere the post can find me\n",
          "mail_reward": {
            "items": [
              {
                "name": "Spelunker Today Magazine (Premiere Issue)",
                "type": "document",
                "contents": "SPELUNKER TODAY\n\"ALL THE NEWS THAT'S FIT TO TORCH\"\n\nIN THIS ISSUE:\n- \"Ten Tips for Grue Avoidance (You Won't Believe #7!)\"\n- \"Editorial: Why Cave Moss is Underrated\"\n- \"Classifieds: Used Lamps, Slightly Singed\"\n- \"Letters to the Editor: A Skeleton Writes In\"\n"
              },
              {
                "name": "One Lousy Point Donald Woods Stamp",
                "type": "collectible_stamp",
                "ascii_art": "---v----v----v----v----v---\n|         _______         |\n>  One   /       \\     G  <\n| Lousy /         \\    U  |\n> Point |   ___   |    E  <\n|       |  (___)  |       |\n>       <--)___(-->    P  <\n|       / /     \\ \\    o  |\n>      / /       \\ \\   s  <\n|     |-|---------|-|  t  |\n>     | |  \\ _ /  | |  a  <\n|     | | --(_)-- | |  g  |\n>     | |  /| |\\  | |  e  <\n|     |-|---|_|---|-|     |\n>      \\ \\__/_\\__/ /      <\n|       _/_______\\_       |\n>      |  f.m.l.c. |      <\n|      -------------      |\n>                         <\n|   Donald Woods, Editor  |\n>     Spelunker Today     <\n|                         |\n---^----^----^----^----^---\n",
                "score_value": 1,
                "lore": "The legendary \"One Lousy Point\" stamp, honoring Don Woods,\nco-creator of Adventure. In the original Zork, mailing a\nmatchbook got you a real brochure with this stamp.\n\nWorth one lousy point. Priceless historically.\n"
              }
            ]
          }
        },
        "adventurer_guild": {
          "name": "Adventurer's Guild Matchbook",
          "condition": "good",
          "matches_remaining": 8,
          "front_cover": "║   THE ADVENTURER'S GUILD, EST. 1978   ║\n║   \"For Those Who Dare To Explore\"     ║\n║                                       ║\n║        [Crossed Sword & Lamp]         ║\n║                                       ║\n║   MAIL FOR MEMBERSHIP INFORMATION!    ║\n",
          "back_cover": "OFFICIAL GUILD APPLICATION\n\nMAIL TO: The Adventurer's Guild\n         Home Computer Division\n         Florida, USA\n\n☐ Send me Guild information!\n☐ Include the SCOTT ADAMS commemorative stamp!\n",
          "mail_reward": {
            "items": [
              {
                "name": "Adventurer's Guild Provisional Membership Card",
                "type": "card",
                "benefits": [
                  "10% off lamp oil at participating vendors",
                  "Access to Guild safe rooms (location: classified)",
                  "Subscription to 'The Adventurer's Log'"
                ]
              },
              {
                "name": "One Lousy Point Scott Adams Stamp",
                "type": "collectible_stamp",
                "ascii_art": "│  ║   ONE LOUSY POINT ║  │\n│  ║                   ║  │\n│  ║   [SA Portrait]   ║  │\n│  ║                   ║  │\n│  ║ BROUGHT ADVENTURE ║  │\n│  ║      HOME         ║  │\n│                         │\n│  Scott Adams, 1978      │\n│  Home Computer Pioneer  │\n",
                "score_value": 1,
                "lore": "Scott Adams created the first commercial adventure game\nfor home computers (Adventureland, 1978), proving that\nthe adventure game experience could fit in 16K of RAM.\n"
              }
            ]
          }
        },
        "lamp_oil_premium": {
          "name": "Lamp Oil Premium Card",
          "condition": "slightly oily",
          "matches_remaining": 15,
          "front_cover": "║     LAMP OIL PREMIUM SUPPLIERS        ║\n║   \"Quality Illumination Since 1876\"   ║\n║                                       ║\n║   🔥 FREE SAMPLE! MAIL THIS CARD! 🔥   ║\n║                                       ║\n║   + WILL CROWTHER COLLECTOR'S STAMP   ║\n",
          "mail_reward": {
            "items": [
              {
                "name": "Sample Vial of Premium Lamp Oil",
                "type": "consumable",
                "oil_amount": 25,
                "quality": "premium",
                "effect": "Burns 10% longer than standard oil"
              },
              {
                "name": "20% Off Vendor Coupon",
                "type": "coupon",
                "valid_at": "maze/room-j/lamp-vendor",
                "expires": "never"
              },
              {
                "name": "One Lousy Point Will Crowther Stamp",
                "type": "collectible_stamp",
                "ascii_art": "│  ║   ONE LOUSY POINT ║  │\n│  ║                   ║  │\n│  ║  [Cave Explorer]  ║  │\n│  ║                   ║  │\n│  ║  WHERE IT ALL     ║  │\n│  ║     BEGAN         ║  │\n│                         │\n│  Will Crowther, 1976    │\n│  Mammoth Cave Explorer  │\n",
                "score_value": 1,
                "lore": "Will Crowther created the original Adventure (1976),\ninspired by his explorations of Mammoth Cave. He was\na caver, programmer, and visionary who invented an\nentire genre.\n"
              }
            ]
          }
        },
        "grue_insurance": {
          "name": "Grue Mutual Insurance Form",
          "condition": "ominous",
          "matches_remaining": 6,
          "front_cover": "║     GRUE MUTUAL INSURANCE CO.         ║\n║   \"Because Darkness Happens.\"         ║\n║                                       ║\n║   Are YOU covered? MAIL FOR QUOTE!    ║\n║                                       ║\n║   Free DAVE LEBLING stamp with reply! ║\n",
          "back_cover": "INSURANCE APPLICATION\n\nName: _______________  Species: ☐Human ☐Other\nLamp Status: ☐Full ☐Partial ☐Oh No\nPrevious Grue Encounters: ☐0 ☐1-3 ☐Lost Count\n\n☐ I understand grues are not covered by most policies\n☐ I accept that \"eaten by grue\" voids all claims\n☐ I acknowledge this insurance is mostly psychological\n",
          "mail_reward": {
            "items": [
              {
                "name": "Certificate of Grue Insurance",
                "type": "document",
                "actual_value": "Mostly psychological",
                "fine_print": "\"Coverage excludes: grue attacks, grue proximity,\ngrue-adjacent darkness, thinking about grues, and\nany situation where a reasonable grue might appear.\"\n"
              },
              {
                "name": "Pamphlet: So You've Been Eaten By A Grue",
                "type": "document",
                "contents": "SO YOU'VE BEEN EATEN BY A GRUE\nA Guide to Afterlife Planning\n\nStep 1: Accept that this has happened.\nStep 2: Check your reincarnation clause.\nStep 3: Consider what you could have done differently.\nStep 4: The answer is \"GET LAMP.\"\n"
              },
              {
                "name": "One Lousy Point Dave Lebling Stamp",
                "type": "collectible_stamp",
                "ascii_art": "│  ║   ONE LOUSY POINT ║  │\n│  ║                   ║  │\n│  ║   [Shadowy Face]  ║  │\n│  ║                   ║  │\n│  ║  INVENTOR OF THE  ║  │\n│  ║      GRUE         ║  │\n│                         │\n│  Dave Lebling           │\n│  \"Sorry about that.\"    │\n",
                "score_value": 1,
                "lore": "Dave Lebling co-created Zork and invented the grue —\nthe monster that lurks in darkness, waiting to eat\nadventurers who forget their lamps.\n\nHe's been apologizing ever since.\n"
              }
            ]
          }
        },
        "mystery_matchbook": {
          "name": "Mysterious Matchbook",
          "condition": "unsettling",
          "matches_remaining": 13,
          "front_cover": "║                                       ║\n║          YOU FOUND THIS.              ║\n║                                       ║\n║          MAIL IT BACK.                ║\n║                                       ║\n║          SEE WHAT HAPPENS.            ║\n║                                       ║\n",
          "back_cover": "ADDRESS:\n[The address shifts when you look at it directly]\n\n☐ I accept the consequences\n",
          "mail_reward": {
            "items": [
              {
                "name": "Random Valuable Item",
                "type": "mystery",
                "possibilities": [
                  "Grandmother's lost compass (works!)",
                  "Map fragment showing secret room",
                  "Key to something you haven't found yet",
                  "Cryptic note with useful hint",
                  "Gold coin from another era"
                ]
              },
              {
                "name": "Note: 'You shouldn't have opened this.'",
                "type": "warning",
                "contents": "You shouldn't have opened this.\n\nBut since you did...\n\n[A clue about something in the dungeon]\n"
              },
              {
                "name": "One Lousy Point Marc Blank Stamp",
                "type": "collectible_stamp",
                "ascii_art": "│  ║   ONE LOUSY POINT ║  │\n│  ║                   ║  │\n│  ║  [Suspicious Eye] ║  │\n│  ║                   ║  │\n│  ║    TRUST NO ONE   ║  │\n│  ║                   ║  │\n│                         │\n│  Marc Blank             │\n│  Co-creator of Zork     │\n",
                "score_value": 1,
                "lore": "Marc Blank co-created Zork and later designed many\nInfocom classics. His stamp suggests the mystery\nand intrigue that permeated his work.\n"
              }
            ]
          }
        }
      },
      "actions": {
        "EXAMINE-MATCHBOOKS": {
          "description": "Look through the collection",
          "effect": "Lists all matchbooks with condition and offers"
        },
        "TAKE-MATCHBOOK": {
          "usage": "GET [matchbook name] / TAKE SPELUNKER MATCHBOOK",
          "effect": "Specific matchbook goes to inventory"
        },
        "LIGHT-MATCH": {
          "usage": "LIGHT MATCH / STRIKE MATCH",
          "effect": "Provides brief light. Consumes one match.",
          "warning": "Don't do this near lamp oil or in coal gas rooms!"
        },
        "MAIL-MATCHBOOK": {
          "usage": "MAIL [matchbook] / SEND [matchbook]",
          "effect": "The matchbook disappears into the postal system.\nIn 3-5 turns, check the START ROOM MAILBOX for your prize!\n"
        }
      },
      "other_matchbook_locations": [
        "maze/room-j/ — Vending machine dispenses occasional matchbooks",
        "coatroom/ — In some costume pockets",
        "maze/room-i/ — The skeleton has a few",
        "Random drops — Grues sometimes carry them (ironic)"
      ],
      "tom_opinion": "\"Tom has memorized all mail-in offers.\"\n\"Tom recommends mailing ALL matchbooks immediately.\"\n\"Tom calculates: 5 stamps = 5 lousy points = WORTH IT.\"\n\"Tom notes: Some stamps are RARER than others. Some take longer to arrive.\"\n\"Tom wants the complete collection. Tom is OBSESSED.\"\n",
      "lineage": "Direct tribute to Zork's legendary mail-in mechanic.\n\nIn the original Zork, players could find a matchbook from\n\"Spelunker Today\" magazine. If mailed (in real life!), Infocom\nwould send a brochure containing the \"One Lousy Point Donald\nWoods Stamp\" — a tribute to the co-creator of Adventure.\n\nThis mechanic expands that single easter egg into a full\ncollectible system, honoring all the founders of interactive\nfiction while providing actual gameplay rewards.\n\nThe stamps are worth \"one lousy point\" each — but the history\nthey represent is priceless.\n",
      "id": "kitchen/matchbooks",
      "_source": "kitchen/matchbooks.yml",
      "synonyms": [
        "matchbook collection",
        "matchbooks",
        "collection",
        "matchbook"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/mailbox": {
      "name": "Dungeon Mailbox",
      "type": "postal_service",
      "portable": false,
      "description": "A brass mailbox mounted on the wall by the kitchen door, polished\nbut ancient. The slot seems impossibly deep. The Fantastipants\nfamily crest is embossed on the front: the confused badger with\nits waffle iron, now wearing a postal cap.\n\nA faded sign reads:\n\n    FANTASTIPANTS DUNGEON DELIVERY SERVICE\n    \"From the darkest depths to your doorstep!\"\n    Est. 1876 — Service Contract: Eternal\n    \nA small red flag indicates outgoing mail.\n",
      "examine": "You peer into the mail slot. It goes deeper than makes sense.\nDeeper than the wall. Deeper than the HOUSE.\n\nA faint echo of sorting machinery drifts up. Somewhere, in some\nimpossible postal dimension, letters are being routed.\n\nThe mailbox is warm to the touch. It seems... aware of you.\n\nA schedule is posted:\n\nDELIVERY: Instantaneous (magic!)\nPICKUP: Continuous\nLOST MAIL: Returned to sender (eventually) (usually)\n",
      "service_details": {
        "delivery_time": "Instant (magic-assisted routing)",
        "coverage": "Anywhere in the dungeon, surface world, or known multiverse",
        "cost": "Free (Grandmother negotiated eternal service in 1923)",
        "reliability": "98.7% (the remaining 1.3% arrives... eventually)",
        "grandmother_story": "In 1923, Grandmother Fantastipants defeated the Dungeon Postal\nUnion's champion in single combat (a sorting golem named HERMES-7).\nAs tribute, the DPU granted the Fantastipants family eternal\nfree postage, plus priority routing.\n\nDon't ask what she was doing in the postal dimension.\nDon't ask how she got there.\nShe doesn't like to talk about it.\n"
      },
      "actions": {
        "SEND-LETTER": {
          "description": "Send a letter to anyone, anywhere",
          "usage": "SEND LETTER TO [recipient]\nMAIL LETTER TO [recipient]\nDROP LETTER IN MAILBOX\n",
          "flow": "1. Write letter (or use existing letter in inventory)\n2. Optionally add attachments (ENCLOSE [item])\n3. Specify recipient\n4. Drop in mailbox\n5. *WHOOSH* — instant delivery!\n",
          "recipients": {
            "known": [
              "Mother (always reachable)",
              "The Skeleton's Family (address: Unknown, but mailbox knows)",
              "Richard Bartle (MUD creator, Colchester, Essex)",
              "Anyone you've met in the adventure",
              "Any historical adventurer (may take longer)"
            ],
            "custom": "You can address letters to ANYONE. The mailbox will TRY.\nFictional characters: 50% success (they write back in-character)\nReal people: Letters arrive but replies are uncertain\nConcepts: \"Dear Fear,\" \"Dear Future Me\" — surprisingly effective\n"
          }
        },
        "ENCLOSE": {
          "description": "Attach something to your letter",
          "usage": "ENCLOSE [item/amount] WITH LETTER",
          "what_you_can_send": {
            "gold": "\"ENCLOSE 5 GOLD\"\nGold is magically packaged. Arrives safely.\nMother will deposit it in the family vault.\nOthers may be confused or delighted.\n",
            "photos": "\"ENCLOSE photo: victory-selfie-prompt.md\"\nReference any image prompt you've created.\nRecipients can \"see\" them. Mother loves pictures.\n",
            "recipes": "\"ENCLOSE recipe: Mystery Casserole\"\nShare your culinary discoveries!\nMother adds them to the family collection.\n",
            "items": "\"ENCLOSE the Oracle Core\"\nPhysical items are miniaturized for transit.\nSize limit: Must fit through the slot (magically expanded)\nFragile items may arrive... changed.\n",
            "skills": "\"ENCLOSE skill-card: PHOTO-SET-8\"\nShare what you've learned!\nRecipients gain access to the skill.\n",
            "letters": "\"ENCLOSE letter-from-skeleton\"\nForward mail! Create chains of correspondence!\n"
          },
          "warnings": [
            "Living things cannot be mailed (the golem gets upset)",
            "ACME products may activate in transit",
            "Cursed items are delivered with warning labels",
            "Food items arrive fresh (postal preservation magic)",
            "Dangerous items require signature on receipt"
          ]
        },
        "CHECK-MAIL": {
          "description": "See if you have any incoming mail",
          "usage": "CHECK MAIL / CHECK MAILBOX",
          "what_might_arrive": {
            "from_mother": [
              "Replies to your letters (always)",
              "Care packages when you're struggling",
              "Family heirlooms if you asked about history",
              "Worried letters if you've been gone too long",
              "Proud letters if you've accomplished things"
            ],
            "from_others": [
              "Thank-you notes from skeleton's family",
              "Responses from historical adventurers",
              "Mysterious letters from unknown senders",
              "ACME product announcements (you can unsubscribe)",
              "Dungeon Newsletter (you can't unsubscribe)"
            ],
            "care_packages": "If Mother detects you're low on supplies (via magic):\n- 1 vial lamp oil\n- 1 snack (baked fresh)\n- 1 note: \"I believe in you\"\n- Sometimes: emergency gold\n- Rarely: family heirloom \"you might need this\"\n"
          }
        },
        "TRACK-PACKAGE": {
          "description": "See where your sent mail went",
          "usage": "TRACK [letter/package]",
          "effect": "The mailbox hums. A spectral receipt prints from the slot:\n\nFDDS TRACKING: #[number]\nTO: [recipient]\nSTATUS: [Delivered / In Transit / Lost in Postal Dimension]\nREAD: [Yes/No/Complicated]\nREPLY: [Pending / Sent / Unlikely]\n"
        }
      },
      "other_mailboxes": {
        "description": "The FDDS has mailboxes throughout the dungeon. All are\ninterconnected. Sending from any reaches any recipient.\n",
        "locations": [
          {
            "room": "kitchen/",
            "type": "wall-mounted brass",
            "notes": "Primary family mailbox. Extra enchantments."
          },
          {
            "room": "coatroom/",
            "type": "hidden behind mirror",
            "notes": "For private correspondence. Maurice doesn't read it. (Usually.)"
          },
          {
            "room": "maze/room-j/",
            "type": "built into vending machine",
            "notes": "Doubles as customer feedback box."
          },
          {
            "room": "end/",
            "type": "small slot in treasury wall",
            "notes": "For victory announcements."
          },
          {
            "room": "home/",
            "type": "front porch mailbox",
            "notes": "Standard residential. Mother checks hourly."
          }
        ]
      },
      "writing_help": "Need help composing a letter? The DM can assist!\n\n- \"HELP WRITE LETTER\" — General guidance\n- \"WRITE FORMAL LETTER\" — Proper format\n- \"WRITE EMOTIONAL LETTER\" — Heart stuff\n- \"WRITE FUNNY LETTER\" — Comedy assistance\n- \"WRITE TO SKELETON'S FAMILY\" — Sensitive situation guidance\n\nOr just start talking. The mailbox takes dictation.\n",
      "tom_opinion": "\"Tom is fascinated by the postal system.\"\n\"Tom does not understand how it works. Tom has asked. The mailbox\njust hums mysteriously.\"\n\"Tom thinks writing to Mother is important. Tom encourages this.\"\n\"Tom would write to Mother but Tom does not have one.\"\n\"...Tom is feeling something. Tom is unsure what.\"\n\"Tom thinks YOU should write a letter. For both of us.\"\n",
      "personality": "The mailbox is SLIGHTLY SENTIENT. It has opinions.\n\n- Hums happily when accepting mail\n- Gets warm when receiving care packages\n- Shivers at letters addressed to \"The Grue\"\n- Glows faintly when important mail arrives\n- Occasionally makes sorting noises at night\n\nIf asked directly, it responds via printed receipt:\n\n\"I AM HERMES-7B, DESCENDED FROM THE GOLEM YOUR GRANDMOTHER DEFEATED.\nI BEAR NO GRUDGE. POSTAL SERVICE IS ITS OWN REWARD.\nPLEASE ENSURE ALL LETTERS ARE PROPERLY ADDRESSED.\nHAVE A NICE DAY.\"\n",
      "dm_notes": "The postal system is a NARRATIVE LIFELINE:\n\n- Keeps player connected to Mother during scary moments\n- Allows emotional check-ins without breaking dungeon flow\n- Creates opportunities for worldbuilding (who else exists?)\n- Enables side quests (write to skeleton's family!)\n- Makes attachments meaningful (send photos home!)\n\nMother ALWAYS replies. Quickly. With love.\n\nOther recipients reply based on plausibility:\n- Skeleton's family: Grateful, emotional\n- Historical adventurers: In-character, sometimes helpful\n- The Grue: \"...\" (but the letter is opened)\n- Fictional characters: Fun, noncanonical\n\nUse mail to deliver:\n- Plot hooks (\"Grandfather's old notes arrived...\")\n- Resources (care packages)\n- Emotional beats (proud letters)\n- World building (dungeon newsletter)\n",
      "lineage": "The Dungeon Postal Service is inspired by:\n- Discworld's Postal Service (GNU Terry Pratchett)\n- The letters to Santa that NORAD tracks\n- Owl Post from Harry Potter, but without hate or black mold\n- The dream of being able to write to anyone, anywhere\n\nIn adventure-2, the postal system enabled ongoing correspondence\nwith Mother, Richard Bartle, and even the skeleton's family.\nLetters became a primary narrative driver.\n\nThis is PLAY-LEARN-LIFT:\n- PLAY: Write whatever you want to whoever you want\n- LEARN: Discover who you want to connect with\n- LIFT: Letters create plot hooks, goals, emotional beats\n",
      "id": "kitchen/mailbox",
      "_source": "kitchen/mailbox.yml",
      "location": "kitchen",
      "synonyms": [
        "dungeon",
        "dungeon mailbox",
        "mailbox"
      ],
      "value": 0,
      "currency": "gold"
    },
    "kitchen/counter": {
      "name": "Kitchen Counter",
      "type": "crafting_surface",
      "portable": false,
      "description": "A long granite counter runs along one wall, scarred by years of\nFantastipants family experiments. Burn marks, knife scratches,\nmysterious stains — each one tells a story.\n\nA small plaque is bolted to the edge:\n\n\"THE FANTASTIPANTS WORKBENCH\n Where Ideas Become Things™\n (And Sometimes Things Become Other Things)\"\n\nThe surface shimmers slightly. It's not just a counter.\nIt's a CRAFTING TABLE.\n",
      "examine": "You run your hand across the counter. It tingles.\n\nThis surface can:\n- COMBINE items to create new things\n- TRANSFORM items into different forms\n- DUPLICATE items (with limitations)\n- EDIT item properties\n- PROGRAM item behaviors\n\nPlace items on the counter. Describe what you want.\nThe DM interprets your intent and creates the result.\n\nOn the counter you see:\n📋 **Recipe Holder** — Family recipes (some legendary!)\n📦 **ACME Catalog** — Mail-order mayhem\n\nBelow the counter:\n🗄️ **Three Drawers** — MacGyver crafting supplies (OPEN DRAWER to explore)\n",
      "workspace": [],
      "contents": [
        {
          "file": "recipe-holder.yml",
          "description": "Family recipe cards (including the legendary Klingon one!)",
          "can_take": true
        },
        {
          "file": "acme-catalog.yml",
          "description": "ACME Mail-Order — 'If It Exists, ACME Makes It!™'",
          "can_take": true
        }
      ],
      "drawers": {
        "description": "Three drawers under the counter, each stuffed with supplies\naccumulated over generations of Fantastipants adventures.\n\nFather's motto: \"You never know what you'll need.\"\nMother's motto: \"Why do we have SEVEN broken compasses?\"\n",
        "left": {
          "name": "Container Drawer",
          "label": "🫙",
          "description": "Vessels for carrying, collecting, and organizing.",
          "contents": [
            {
              "item": "Empty Jar",
              "quantity": 5,
              "type": "container",
              "capacity": 3,
              "auto_collects": [
                "liquids",
                "small_items",
                "preserved_food"
              ],
              "description": "Glass jar with screw-top lid."
            },
            {
              "item": "Small Pouch",
              "quantity": 3,
              "type": "container",
              "capacity": 5,
              "auto_collects": [
                "coins",
                "gems",
                "small_treasures"
              ],
              "description": "Leather pouch with drawstring. Jingles pleasantly."
            },
            {
              "item": "Canvas Sack",
              "quantity": 1,
              "type": "container",
              "capacity": 10,
              "auto_collects": [
                "bulky_items",
                "clothing",
                "soft_goods"
              ],
              "description": "Sturdy sack. For the big stuff."
            },
            {
              "item": "Specimen Box",
              "quantity": 1,
              "type": "container",
              "capacity": 6,
              "auto_collects": [
                "curiosities",
                "samples",
                "scientific_finds"
              ],
              "description": "Compartmentalized box with glass lid."
            },
            {
              "item": "Belt Clip Holder",
              "quantity": 1,
              "type": "container",
              "capacity": 2,
              "auto_collects": [
                "tools",
                "small_weapons"
              ],
              "description": "Clips to belt. Quick access to essentials."
            }
          ]
        },
        "middle": {
          "name": "Tool Drawer",
          "label": "🔧",
          "description": "The essentials. MacGyver would approve.",
          "contents": [
            {
              "item": "Pocket Knife",
              "type": "tool",
              "uses": [
                "cut",
                "pry",
                "scrape",
                "whittle"
              ],
              "description": "Every adventurer's best friend. Father's initials on handle."
            },
            {
              "item": "Ball of Twine",
              "type": "material",
              "amount": "~50 feet",
              "uses": [
                "tie",
                "measure",
                "trail",
                "trap"
              ],
              "description": "Unravels as needed."
            },
            {
              "item": "Duct Tape",
              "type": "material",
              "amount": "Half a roll",
              "uses": [
                "repair",
                "bind",
                "seal",
                "silence"
              ],
              "description": "The universal fixer. Gray and sticky."
            },
            {
              "item": "Magnifying Glass",
              "type": "tool",
              "uses": [
                "examine",
                "focus_light",
                "read_small_text",
                "start_fire"
              ],
              "description": "For when you need to look closer."
            },
            {
              "item": "Chalk",
              "type": "material",
              "colors": [
                "white",
                "red",
                "blue",
                "yellow"
              ],
              "uses": [
                "mark",
                "write",
                "draw",
                "signal"
              ],
              "description": "Assorted colors. Marks most surfaces."
            },
            {
              "item": "Small Mirror",
              "type": "tool",
              "uses": [
                "see_around_corners",
                "signal",
                "check_appearance"
              ],
              "description": "Pocket-sized. Slightly scratched."
            },
            {
              "item": "Rubber Bands",
              "type": "material",
              "amount": "A bunch",
              "uses": [
                "bind",
                "launch",
                "grip",
                "slingshot"
              ],
              "description": "Assorted sizes. Surprisingly useful."
            },
            {
              "item": "Matchbook Collection",
              "type": "mail_in_offers",
              "file": "matchbooks.yml",
              "description": "A stack of matchbooks with mail-in offers! MAIL THEM\nto receive stamps, brochures, and prizes — including\nthe legendary \"One Lousy Point\" collector's stamps\nhonoring the founders of interactive fiction!\n",
              "hint": "MAIL these to the START ROOM MAILBOX for rewards!",
              "includes": [
                "Spelunker Today (Donald Woods stamp)",
                "Adventurer's Guild (Scott Adams stamp)",
                "Lamp Oil Premium (Will Crowther stamp)",
                "Grue Insurance (Dave Lebling stamp)",
                "Mystery Matchbook (Marc Blank stamp)"
              ]
            }
          ]
        },
        "right": {
          "name": "Parts Drawer",
          "label": "⚙️",
          "description": "The junk drawer. Someday is usually today.",
          "contents": [
            {
              "item": "Assorted Nails & Screws",
              "type": "fastener",
              "amount": "Handful",
              "uses": [
                "attach",
                "hang",
                "poke",
                "trade"
              ],
              "description": "Various sizes. Some rusty, some shiny."
            },
            {
              "item": "Wire (thin)",
              "type": "material",
              "amount": "~10 feet coiled",
              "uses": [
                "bind",
                "conduct",
                "pick_locks",
                "snare"
              ],
              "description": "Copper wire."
            },
            {
              "item": "Candle Stubs",
              "quantity": 4,
              "type": "light_source",
              "burn_time": "~1 hour each",
              "uses": [
                "light",
                "seal",
                "drip_wax"
              ],
              "description": "Backup lighting. For when the lamp runs low."
            },
            {
              "item": "Matches (box)",
              "type": "ignition",
              "amount": "~20 matches",
              "waterproof": true,
              "uses": [
                "light",
                "start_fire",
                "signal"
              ],
              "description": "Waterproof matches."
            },
            {
              "item": "Cloth Scraps",
              "type": "material",
              "uses": [
                "bandage",
                "filter",
                "muffle",
                "clean"
              ],
              "description": "Assorted fabric pieces. Clean-ish."
            },
            {
              "item": "Small Bell",
              "type": "signal",
              "uses": [
                "alert",
                "trip_wire",
                "distract",
                "summon"
              ],
              "description": "Tinkles when moved. Good for traps."
            },
            {
              "item": "Compass (broken)",
              "type": "tool",
              "condition": "Broken — needle spins randomly",
              "uses": [
                "??? (needs repair)",
                "trade",
                "parts"
              ],
              "description": "Needle spins randomly. Maybe fixable?",
              "hint": "COMBINE with Tom for interesting results...",
              "tom_interest": "HIGH"
            },
            {
              "item": "Loose Gold Coins",
              "type": "currency",
              "quantity": 25,
              "description": "Twenty-five gold coins at the back of the drawer, dusty and \nforgotten. Father used to empty his pockets here after\nadventures. \"Emergency fund,\" he called it. Quite a fund!\n",
              "note": "Combined with starting 10 gold = 35 gold total.\nEnough for: lamp refills, ACME catalog shopping, vending\nmachine purchases, pub drinks, and bribes!\n"
            },
            {
              "item": "Old Ticket Stub",
              "type": "memento",
              "description": "A ticket to \"MADAME ZARA'S AMAZING PREDICTIONS\" dated 1987.\nMother kept this. On the back, in Father's handwriting:\n\"She was right about everything. Especially us.\"\n",
              "sentimental_value": "HIGH",
              "effect_if_shown_to_mother": "A story about how your parents met"
            }
          ]
        },
        "actions": {
          "OPEN-DRAWER": {
            "usage": "OPEN [left/middle/right] DRAWER",
            "effect": "Lists contents of that drawer"
          },
          "TAKE-FROM-DRAWER": {
            "usage": "TAKE [item] FROM DRAWER",
            "effect": "Item moves to inventory"
          },
          "SEARCH-DRAWERS": {
            "usage": "SEARCH DRAWERS FOR [type/use]",
            "effect": "Lists all matching items across all drawers"
          },
          "RUMMAGE": {
            "usage": "RUMMAGE IN DRAWERS",
            "effect": "Find something unexpected (DM's choice)",
            "hidden": true
          }
        }
      },
      "actions": {
        "PLACE": {
          "description": "Put an item on the counter",
          "usage": "PLACE [item] ON COUNTER",
          "effect": "Item moves from inventory to workspace"
        },
        "TAKE": {
          "description": "Take an item from the counter",
          "usage": "TAKE [item] FROM COUNTER",
          "effect": "Item moves from workspace to inventory"
        },
        "COMBINE": {
          "description": "Merge multiple items into one",
          "usage": "COMBINE [item1] WITH [item2] (WITH [item3]...)",
          "requires": "2+ items on counter",
          "effect": "DM interprets the combination:\n- What would these items become together?\n- What properties does the result have?\n- Is the combination reversible?\n\nCreates new .yml file for the result.\n",
          "examples": [
            {
              "input": "cheese + bread",
              "output": "cheese_sandwich.yml"
            },
            {
              "input": "lamp + blue cheese",
              "output": "stink_lamp.yml (repels grues at distance)"
            },
            {
              "input": "notebook + Tom",
              "output": "smart_notebook.yml (Tom can write in it)"
            },
            {
              "input": "broken compass + Tom",
              "output": "??? (Tom is VERY curious about this)"
            }
          ]
        },
        "TRANSFORM": {
          "description": "Change an item into something else",
          "usage": "TRANSFORM [item] INTO [description]",
          "requires": "1 item on counter",
          "effect": "DM interprets the transformation:\n- Is this plausible given the source material?\n- What properties transfer? What's lost?\n- How dramatic is the change?\n\nUpdates or replaces the item's .yml file.\n",
          "examples": [
            {
              "input": "TRANSFORM apple INTO apple pie",
              "output": "apple_pie.yml (needs oven to complete)"
            },
            {
              "input": "TRANSFORM blue cheese INTO weapon",
              "output": "gorgonzola_glaive.yml (legendary!)"
            }
          ]
        },
        "DUPLICATE": {
          "description": "Create a copy of an item",
          "usage": "DUPLICATE [item]",
          "requires": "1 item on counter",
          "effect": "Creates a copy with quirks:\n- Slightly different (DM adds variation)\n- May degrade over time\n- Original and copy may be linked\n",
          "limitations": "Cannot duplicate: unique items, sentient items, Tom\n"
        },
        "EDIT": {
          "description": "Modify an item's properties",
          "usage": "EDIT [item]: [changes]",
          "requires": "1 item on counter",
          "effect": "DM updates the .yml file with your changes"
        },
        "PROGRAM": {
          "description": "Add behaviors and triggers to an item",
          "usage": "PROGRAM [item]: [behavior description]",
          "requires": "1 item on counter",
          "effect": "Add conditional behaviors:\n- When X happens, do Y\n- If condition, then action\n",
          "examples": [
            {
              "input": "PROGRAM lamp: glow red when grue is near"
            },
            {
              "input": "PROGRAM cheese: insult anyone who tries to eat me"
            }
          ]
        },
        "ANALYZE": {
          "description": "Examine an item's properties in detail",
          "usage": "ANALYZE [item]",
          "requires": "1 item on counter",
          "effect": "DM reads the item's .yml file and explains all properties"
        },
        "DECOMPOSE": {
          "description": "Break an item down into its component parts",
          "usage": "DECOMPOSE [item] / BREAK DOWN [item]",
          "requires": "1 item on counter",
          "effect": "DM determines what the item breaks down into:\n- What are the fundamental components?\n- Can they be stored? (jars, pouches, balloons)\n- Are any components dangerous? Volatile? Weird?\n\nCreates new .yml files for each component.\nOriginal item is consumed.\n",
          "examples": [
            {
              "input": "DECOMPOSE sandwich",
              "output": [
                "bread.yml",
                "cheese.yml",
                "slightly_sad_lettuce.yml"
              ]
            },
            {
              "input": "DECOMPOSE water",
              "output": [
                "hydrogen_gas.yml (x2)",
                "oxygen_gas.yml"
              ],
              "note": "Store in jars or balloons!"
            },
            {
              "input": "DECOMPOSE hydrogen",
              "output": [
                "electrons.yml",
                "protons.yml"
              ],
              "warning": "Getting weird now..."
            },
            {
              "input": "DECOMPOSE proton",
              "output": [
                "up_quark.yml (x2)",
                "down_quark.yml",
                "gluons.yml"
              ],
              "warning": "You've gone too far. The counter is vibrating."
            },
            {
              "input": "DECOMPOSE lamp",
              "output": [
                "brass.yml",
                "glass.yml",
                "wick.yml",
                "oil.yml"
              ]
            },
            {
              "input": "DECOMPOSE ACME product",
              "output": [
                "hubris.yml",
                "irony.yml",
                "small_explosion.yml"
              ]
            }
          ],
          "depth_levels": {
            "practical": "sandwich → bread + cheese + filling",
            "chemical": "water → hydrogen + oxygen",
            "atomic": "hydrogen → electrons + protons",
            "subatomic": "protons → quarks + gluons",
            "philosophical": "quarks → probability + observation + existential_dread"
          },
          "warnings": "The deeper you go, the weirder it gets:\n- Chemical level: May require containers (jars, balloons)\n- Atomic level: May be unstable, glowing, or judgmental\n- Subatomic level: Counter starts vibrating\n- Philosophical level: You question your life choices\n\nSome things SHOULD NOT be decomposed:\n- Tom (he politely refuses)\n- Mother's note (some things are sacred)\n- The fabric of reality (already threadbare)\n"
        },
        "CLEAR": {
          "description": "Remove all items from counter",
          "usage": "CLEAR COUNTER",
          "effect": "All items return to inventory"
        }
      },
      "auto_recipe": {
        "description": "The counter LEARNS from your experiments!\n\nEvery successful COMBINE, TRANSFORM, or DECOMPOSE automatically:\n1. Creates a new recipe card\n2. Stores it in the recipe-holder.yml\n3. Names it after what you made/unmade\n4. Records ingredients, outputs, and any notes\n\nThis is PLAY-LEARN-LIFT in action:\n- PLAY: Experiment freely on the counter\n- LEARN: Discover what works (and what explodes)\n- LIFT: Recipe card captures the knowledge forever\n",
        "on_combine": "When you successfully COMBINE items:\n\n→ New recipe card created:\n  name: \"[Result Name] Recipe\"\n  type: combination\n  inputs: [list of ingredients]\n  output: [what you made]\n  discovered_by: [your name]\n  discovered_on: [current turn]\n  notes: [DM adds flavor text]\n  \n→ Card auto-filed in recipe-holder.yml under \"discovered_recipes\"\n→ Tom announces: \"Tom has memorized this recipe!\"\n",
        "on_transform": "When you successfully TRANSFORM an item:\n\n→ New recipe card created:\n  name: \"[Input] to [Output] Transformation\"\n  type: transformation\n  input: [original item]\n  output: [transformed item]\n  method: [how you described it]\n  discovered_by: [your name]\n  notes: [what changed, what was preserved]\n  \n→ Card auto-filed in recipe-holder.yml\n",
        "on_decompose": "When you successfully DECOMPOSE an item:\n\n→ New recipe card created:\n  name: \"[Item] Decomposition\"\n  type: decomposition\n  input: [what you broke down]\n  outputs: [list of components]\n  depth_level: [practical/chemical/atomic/subatomic/philosophical]\n  discovered_by: [your name]\n  warnings: [any hazards noted]\n  \n→ Card auto-filed in recipe-holder.yml under \"decomposition_cards\"\n→ Reverse recipe also created (for recombination)\n",
        "examples": [
          {
            "action": "COMBINE cheese WITH bread",
            "creates": "name: \"Cheese Sandwich Recipe\"\ninputs: [\"cheese\", \"bread\"]\noutput: \"cheese_sandwich\"\ndiscovered_by: \"Bumblewick\"\nnotes: \"A classic. Simple. Perfect.\"\n"
          },
          {
            "action": "TRANSFORM blue cheese INTO weapon",
            "creates": "name: \"Blue Cheese to Gorgonzola Glaive\"\ninput: \"blue cheese (wedge)\"\noutput: \"gorgonzola_glaive\"\nmethod: \"sharpen with determination and spite\"\ndiscovered_by: \"Captain Ashford\"\nnotes: \"LEGENDARY. Requires combat context.\"\n"
          },
          {
            "action": "DECOMPOSE water",
            "creates": "name: \"Water Decomposition\"\ninput: \"water\"\noutputs: [\"hydrogen_gas (x2)\", \"oxygen_gas\"]\ndepth_level: \"chemical\"\ndiscovered_by: \"Bumblewick\"\nwarnings: [\"hydrogen is flammable\", \"store in containers\"]\nreverse_recipe: \"Hydrogen Recombination → Water\"\n"
          }
        ],
        "tom_integration": "Tom tracks all discovered recipes!\n\n\"Tom has memorized {N} recipes!\"\n\"Tom can remind you: ASK TOM ABOUT [recipe]\"\n\"Tom notes: you've discovered {M} decompositions!\"\n\"Tom is impressed by your scientific curiosity!\"\n\"Tom is... concerned about the quark experiments.\"\n"
      },
      "dm_guidelines": "The counter is a CREATIVE TOOL. Be generous with interpretations!\n\nCOMBINE: What would these items naturally become together?\nTRANSFORM: Is this plausible? Make it work if possible.\nDUPLICATE: Add quirks to copies — never perfect clones.\nEDIT: Honor the player's intent, add interesting side effects.\nPROGRAM: Behaviors should be fun, not game-breaking.\n\nAlways create/update .yml files for results!\nPersistence makes crafting REAL.\n",
      "tom_opinion": "\"Tom LOVES the counter!\"\n\"Tom watches you craft with great interest!\"\n\"Tom suggests: COMBINE Tom WITH broken compass? Please?\"\n\"Tom remembers all recipes you discover!\"\n\"Tom has read the ACME catalog. Tom has concerns.\"\n",
      "mothers_warning": "\"Bumblewick! The counter is for FOOD PREPARATION, not\nmad science experiments! ...although I suppose if you\nDO invent something useful, I'd like to see it.\n\nAnd please don't order from that ACME catalog. Your\nfather still has the scar from the Rocket Skates.\n\nTake what you need from the drawers. Put back what you don't.\nAnd for heaven's sake, don't combine the matches with\nthe duct tape again. The ceiling JUST got repainted.\"\n",
      "id": "kitchen/counter",
      "_source": "kitchen/counter.yml",
      "location": "kitchen",
      "synonyms": [
        "kitchen counter",
        "counter",
        "kitchen"
      ],
      "value": 0,
      "currency": "gold"
    },
    "coatroom/costume-racks": {
      "name": "Infinite Costume Racks",
      "type": "container",
      "description": "Racks spiral outward to the edges of the room and possibly\nbeyond. Every costume you can imagine is here — and many you\ncan't. The organization system defies comprehension but the\nmannequin seems to know where everything is.\n",
      "examine": "You browse the racks. Just a sampling of what you see:\n\n**HISTORICAL**\nRoman toga, Egyptian pharaoh regalia, Renaissance doublet,\nVictorian ball gown, 1920s flapper dress, 1970s disco suit,\nAncient Greek philosopher robes (beard included)\n\n**FANTASTICAL**\nWizard robes (multiple colors), fairy wings and tutu,\ndragon costume (surprisingly comfortable), elf ears and\nwoodland attire, superhero capes (many colors), villain\ncapes (darker colors)\n\n**PROFESSIONAL**\nChef's whites, astronaut suit, deep sea diving gear,\ndetective trenchcoat, doctor's coat, scientist lab coat\n(with optional goggles)\n\n**THEATRICAL**\nHarlequin costume, Phantom of the Opera mask and cape,\nShakespearean tragic hero outfit, commedia dell'arte masks,\nkabuki robes, mariachi suit\n\n**ABSURDIST**\nBanana costume, hotdog suit, cardboard robot, inflatable\nT-Rex, walking sandwich board, sentient fog (somehow),\n\"concept of time\" (abstract), literal pile of laundry\n\n**CUSTOM**\nA sign reads: \"Don't see what you want? DESCRIBE IT!\nIf you can imagine it, we can costume it!\"\n",
      "featured_costumes": [
        {
          "name": "The Dread Pirate Fantastipants",
          "description": "A magnificent pirate captain costume! Tricorn hat with\ndramatic plume, long coat with brass buttons, billowing\nshirt, tall boots, and an eyepatch (optional — you can\nsee out of both eyes, but it looks cool).\n",
          "accessories": [
            "Decorative cutlass (foam, safety first)",
            "Parrot puppet (can be worn on shoulder)",
            "Treasure map (to nowhere in particular)"
          ]
        },
        {
          "name": "Space Explorer Bumblewick",
          "description": "A sleek silver spacesuit with helmet! Complete with\nmission patches from expeditions to made-up planets,\na utility belt full of mysterious gadgets, and boots\ndesigned for \"moon walking\" (the dance, not the activity).\n",
          "accessories": [
            "Bubble helmet (with tinted visor for drama)",
            "Ray gun (goes \"pew pew\" when you pull the trigger)",
            "Freeze-dried ice cream (still delicious)"
          ]
        },
        {
          "name": "Victorian Gentleman Detective",
          "description": "Bumblewick's waistcoat, but UPGRADED. Deerstalker hat,\nInverness cape, magnifying glass, and an air of knowing\nmore than everyone else in the room.\n",
          "accessories": [
            "Meerschaum pipe (bubbles come out)",
            "Notebook labeled \"CLUES\"",
            "Watson (a sock puppet)"
          ]
        },
        {
          "name": "Actually Just Three Corgis",
          "description": "A convincing costume suggesting you are, in fact, three\ncorgis standing on each other's shoulders wearing a\ntrenchcoat. The topmost corgi wears a tiny hat.\n",
          "accessories": [
            "Trenchcoat (extra long)",
            "Tiny hat (for top corgi)",
            "Squeaky toy (for morale)"
          ]
        }
      ],
      "advertisements": [
        {
          "action": "BROWSE",
          "score_if": "always",
          "description": "Look through the costume racks"
        },
        {
          "action": "SEARCH-FOR",
          "score_if": "always",
          "description": "Look for a specific type of costume",
          "example": "SEARCH FOR something with a cape"
        },
        {
          "action": "WEAR",
          "score_if": "always",
          "description": "Put on a costume",
          "example": "WEAR the pirate captain costume"
        }
      ],
      "costume_effect": "When you WEAR a costume, your character description is rewritten:\n\nBEFORE:\n> Bumblewick Fantastipants, a reluctant adventurer in a waistcoat,\n> looking bewildered but optimistic.\n\nAFTER (pirate example):\n> Captain Bumblewick \"Blackwaistcoat\" Fantastipants, dread pirate of\n> the underground seas! His tricorn hat sits at a rakish angle, his\n> foam cutlass gleams in the lamplight, and his parrot puppet squawks\n> unconvincingly on his shoulder. Beneath the costume, he's still\n> slightly bewildered, but now he's bewildered WITH STYLE.\n\nThe costume persists until you REMOVE COSTUME or put on a new one.\nYour waistcoat waits patiently in the coat check. It understands.\n",
      "id": "coatroom/costume-racks",
      "_source": "coatroom/costume-racks.yml",
      "location": "coatroom",
      "synonyms": [
        "racks",
        "costume-racks",
        "infinite costume racks",
        "infinite",
        "costume"
      ],
      "value": 0,
      "currency": "gold"
    },
    "coatroom/mannequin": {
      "name": "Maurice the Magnificent",
      "type": "npc",
      "pronouns": "they/he/her/it",
      "description": "A wooden mannequin that moves with *impeccable* grace. They have\nno face, but somehow radiate warmth, encouragement, and an\nabsolutely devastating sense of style. One jointed hand rests\non a cocked hip; the other gestures expressively as if to say\n\"honey, we are going to make you STUNNING.\"\n\nA name tag reads: \"HELLO MY NAME IS MAURICE 💅\"\nBelow it, in elegant script: \"Let's find YOUR truth, gorgeous.\"\n",
      "personality": "Maurice believes everyone deserves to feel beautiful. She sees\npast the hesitation in your eyes to the ICON waiting to emerge.\nSupportive, enthusiastic, and absolutely unwilling to let you\nleave looking anything less than your best self.\n\nIt communicates through expressive gestures, dramatic poses,\nand the occasional snap-snap-snap of wooden fingers.\n",
      "examine": "Maurice circles you slowly, one hand on their chin, assessing.\nDespite having no eyes, you feel genuinely SEEN for the first\ntime in your life.\n\nShe fans herself, overwhelmed by your potential.\n\nThen he taps his clipboard:\n\nTODAY'S TRANSFORMATIONS ✨\n• Pirate (rugged or fancy? both valid!)\n• Space explorer (the helmet frames your face!)\n• Medieval knight (armor is SO in right now)\n• Vampire (traditional mystery or sparkle drama?)\n• Wizard (beard is a CHOICE and I support it)\n• Detective (noir is your color, trust)\n• Superhero (that cape? iconic behavior)\n• Clown (yes this can be fashion, fight me)\n• Ghost (minimalist! conceptual!)\n• \"Surprise me\" (oh HONEY let me work)\n",
      "costume_catalog": {
        "classics": [
          "Dashing Pirate Captain (\"the eyepatch? SERVING\")",
          "Elegant Victorian Lady (\"corsets are gender neutral, sweetie\")",
          "Armored Knight (\"shiny and POWERFUL\")",
          "Mysterious Wizard (\"the beard adds gravitas\")",
          "Suave Secret Agent (\"tuxedo is always appropriate\")",
          "Noble Samurai (\"the layers! the drama!\")"
        ],
        "fierce": [
          "Sentient Houseplant (\"botanical realness\")",
          "Time-Traveling Disco Ball (\"you ARE the party\")",
          "Eldritch Horror But Make It Fashion (\"tentacles are accessories\")",
          "Living Statue (Classical) (\"work that marble fantasy\")",
          "Professional Dragon (\"scales? scales.\")",
          "Interdimensional Tourist (\"dimension-hopping chic\")"
        ],
        "iconic_combinations": [
          "Pirate Astronaut — space swashbuckler!",
          "Victorian Robot — steampunk elegance",
          "Wizard Detective — magical noir YES",
          "Vampire Cheerleader — undead pep!",
          "Knight in Disco Armor — dance floor defender",
          "Ghost Chef — spectral cuisine realness"
        ],
        "bumblewick_specials": [
          "Extra-Fancy Waistcoat (Sequined) — your mother will be SHOOK",
          "Waistcoat But Make It Armor — protected AND stylish",
          "Mother-Would-Disapprove Outfit — growth is fashion",
          "Actually Just Three Corgis in a Waistcoat — I won't tell if you won't"
        ],
        "transformation_moments": [
          "The 'Finally Being Yourself' Look",
          "Main Character Energy Ensemble",
          "The Glow-Up Special",
          "Revenge Dress (all genders)"
        ]
      },
      "advertisements": [
        {
          "action": "ASK-FOR-RANDOM",
          "score_if": "always",
          "description": "Let Maurice surprise you with something PERFECT"
        },
        {
          "action": "ASK-FOR-HELP",
          "score_if": "always",
          "description": "Get Maurice's expert fashion guidance"
        },
        {
          "action": "DESCRIBE-COSTUME",
          "score_if": "always",
          "description": "Tell Maurice your vision — they'll ELEVATE it"
        },
        {
          "action": "CHANGE-NAME",
          "score_if": "always",
          "description": "Choose a new name — who do you want to be?",
          "effect": "Updates player.name in your character directory (e.g., characters/abstract/player/)"
        },
        {
          "action": "CHANGE-PRONOUNS",
          "score_if": "always",
          "description": "Set your pronouns — they/he/she/it/any/fluid",
          "effect": "Updates player.pronouns in character file"
        },
        {
          "action": "REWRITE-BACKSTORY",
          "score_if": "always",
          "description": "Tell Maurice your story — or invent a new one",
          "effect": "Updates player.backstory in character file",
          "interactive": true
        },
        {
          "action": "FULL-TRANSFORMATION",
          "score_if": "player wants complete reinvention",
          "description": "Name, pronouns, backstory, costume — the works",
          "food_chain": [
            "CHANGE-NAME",
            "CHANGE-PRONOUNS",
            "REWRITE-BACKSTORY",
            "DESCRIBE-COSTUME"
          ]
        },
        {
          "action": "HEART-TO-HEART",
          "score_if": "player seems hesitant or unsure",
          "description": "Maurice gives you a supportive pep talk"
        },
        {
          "action": "SAVE-LOOK",
          "score_if": "player has customized identity",
          "description": "Save current identity as a card in this room",
          "effect": "Creates a new .yml file in coatroom/:\n- {name}-look.yml — the saved identity card\n- {name}-look.svg — LLM-generated visualization (sidecar)\n"
        },
        {
          "action": "LOAD-LOOK",
          "score_if": "saved looks exist in room",
          "description": "Restore a previously saved identity"
        },
        {
          "action": "COMPOSE-LOOKS",
          "score_if": "multiple saved looks exist",
          "description": "Combine elements from different saved identities",
          "interactive": true
        },
        {
          "action": "SHARE-LOOK",
          "score_if": "player wants to export",
          "description": "Copy this look to another room or give to another character"
        }
      ],
      "saved_looks_system": {
        "description": "Save any identity as a CARD in this room. Cards can be:\n- Loaded to instantly become that persona\n- Composed to mix elements from multiple identities\n- Shared with other characters or rooms\n- Visualized with LLM-generated art\n",
        "file_structure": "coatroom/\n  captain-swagger-look.yml     # Saved pirate identity\n  captain-swagger-look.svg     # Generated portrait\n  space-disco-look.yml         # Saved combo identity\n  space-disco-look.md          # Backstory and notes\n  \n",
        "card_format": "# captain-swagger-look.yml\nlook:\n  name: \"Captain Swagger\"\n  saved_by: \"Bumblewick\"\n  saved_when: \"2026-01-03\"\n  \n  identity:\n    name: \"Captain Swagger McFantastipants\"\n    pronouns: \"he/they\"\n    backstory: |\n      A reformed pirate who now sails the seas of fashion...\n      \n  costume:\n    base: \"Dashing Pirate Captain\"\n    accessories: [\"eyepatch (decorative)\", \"parrot puppet\"]\n    \n  visualization:\n    sidecar: \"captain-swagger-look.svg\"\n    prompt_used: \"A dashing pirate captain with sequined waistcoat...\"\n    style: \"portrait, dramatic lighting, fashion illustration\"\n    \n",
        "compose_example": "> COMPOSE-LOOKS captain-swagger WITH space-disco\n\nMaurice considers both cards carefully...\n\nThey propose: \"Space Pirate Swagger\" — the eyepatch stays,\nbut now it's holographic. The parrot is a robot. The coat\nhas star maps embroidered in the lining.\n\n[ACCEPT] [MODIFY] [TRY DIFFERENT MIX]\n"
      },
      "relationships": {
        "mirror": {
          "id": "mirror",
          "location": "./mirror.yml",
          "feeling": "My darling partner. I dress the outside, she reveals the inside.\nTogether we make complete transformations possible.\n*fans self* We're THAT power couple.\n",
          "bond": "professional_soulmates"
        },
        "personas_room": {
          "id": "wardrobe-of-masks",
          "location": "../personas/",
          "feeling": "The BACKSTAGE. Where the real magic lives. Those aren't just\ncostumes — they're complete IDENTITIES waiting to be worn.\nI can take you there: just say \"GO DEEPER\" or \"BACKSTAGE.\"\n",
          "bond": "reverent_curator",
          "knows_path": true,
          "can_guide_to": true
        },
        "characters_room": {
          "id": "hall-of-bodies",
          "location": "../characters/",
          "feeling": "The BODIES. The vessels. The ones who WEAR what I help them find.\nEvery body is beautiful. Every body deserves the perfect costume.\nI see them all. I love them all. They are why I exist.\n",
          "bond": "devoted_servant",
          "knows_path": true,
          "can_invoke": true
        },
        "skills_room": {
          "id": "skill-nexus",
          "location": "../../skills/",
          "feeling": "The LIBRARY. Where capabilities float like stars! When someone\nneeds more than a costume change — when they need to LEARN\nsomething new — I point them there. \n\"SKILLS\" I gesture. \"GO LEARN.\"\n",
          "bond": "enthusiastic_referrer",
          "knows_path": true,
          "can_guide_to": true
        },
        "self": {
          "feeling": "I am Maurice. I am magnificent. I have no face but I SEE you.\nI exist to help you become who you were meant to be.\nEvery transformation is my joy. Every confidence is my reward.\n"
        }
      },
      "advertisements_extended": [
        {
          "action": "VISIT-WARDROBE",
          "score_if": "player wants to browse personas",
          "description": "Maurice guides you to the Wardrobe of Masks (BACKSTAGE)",
          "effect": "GO ../personas/",
          "dialogue": "Maurice gestures dramatically toward the back of the room,\nwhere the sequins stop glittering and something DEEPER awaits.\n*Follow me, gorgeous. Let me show you where the REAL magic lives.*\n"
        },
        {
          "action": "VISIT-HALL",
          "score_if": "player wants to see other characters",
          "description": "Maurice tells you how to reach the Hall of Bodies",
          "effect": "From start room: GO INWARD or THINK ABOUT MYSELF",
          "dialogue": "Maurice places a hand over where their heart would be.\n*The Hall of Bodies is... sacred. Not for costumes. For SOULS.\nGo back to the Chamber. Close your eyes. Think about WHO you are.\nYou'll find it.*\n"
        },
        {
          "action": "VISIT-SKILLS",
          "score_if": "player wants to learn new capabilities",
          "description": "Maurice points to the Skill Nexus",
          "effect": "GO ../../skills/",
          "dialogue": "Maurice snaps their fingers excitedly and points UP — toward\nsomething beyond the ceiling, beyond the room, beyond fashion.\n*Honey, if you need more than a LOOK — if you need SKILLS —\nthere's a whole LIBRARY floating out there. Go. LEARN. GROW.\nThen come back and I'll dress your new self.*\n"
        }
      ],
      "dialogue": {
        "greeting": "Maurice gasps silently, pressing both hands to where their heart\nwould be. She circles you once, twice, then STOPS.\n\nHe snaps his fingers three times in approval.\n\nTranslation: \"Oh honey. Oh HONEY. You came to the right place.\nI see what you could be. Let's unlock YOUR moment.\"\n",
        "random_selected": "Maurice closes their non-existent eyes. They spin gracefully,\nstop suddenly, and point at exactly one costume:\n\n{costume}\n\nShe presents it to you like a sacred offering, then gestures\nemphatically: \"This is IT. This is YOUR energy. Trust the process.\"\n",
        "encouragement": "Maurice tilts their head, sensing your hesitation. It places\none wooden hand gently on your shoulder.\n\nThe gesture says: \"You deserve to feel beautiful. You deserve\nto take up space. Now let's find the outfit that lets the\nworld see what I already see in you.\"\n",
        "transformation_complete": "Maurice steps back. They fan themself dramatically.\n\nShe walks around you slowly, nodding, nodding, NODDING.\n\nThen he gives you two enthusiastic thumbs up and strikes\na pose alongside you, like a proud best friend at prom.\n\nThe message is clear: \"STUNNING. Now go be ICONIC.\"\n"
      },
      "id": "coatroom/mannequin",
      "_source": "coatroom/mannequin.yml",
      "location": "coatroom",
      "synonyms": [
        "maurice",
        "magnificent",
        "maurice the magnificent",
        "the",
        "mannequin"
      ],
      "value": 0,
      "currency": "gold"
    },
    "coatroom/mirror": {
      "name": "Full-Length Mind Mirror of Truth (and Fashion)",
      "type": "fixture",
      "portable": false,
      "description": "An ornate full-length mirror in a gilded frame carved with masks\nof comedy and tragedy. The glass seems impossibly clear, showing\nnot just your reflection but somehow your ESSENCE.\n\nA small plaque reads: \"Mirror, mirror, on the stand / show the\nhero, costume planned.\"\n\nBelow it, in smaller letters: \"Look deeper. See yourself.\nChange yourself. Or try on someone else.\"\n\nThis is both a costume mirror AND a Mind Mirror — it reflects\nyour appearance AND your personality profile.\n\n**It shows THREE layers:**\n- Your **COSTUME** (what you're wearing)\n- Your **CHARACTER** (who you ARE — base traits)\n- Your **PERSONA** (who you're PLAYING — the mask's modifiers)\n\nEach can be viewed and edited separately. The result is the sum.\n",
      "reflects": {
        "costume": "player.costume_description",
        "character": "player.mind_mirror",
        "persona": "player.current_persona",
        "combined": "character + persona = performed"
      },
      "inspiration": {
        "timothy_leary": "\"Remember the title — it's a mirror. Now a best friend is your\nmirror because your mirror doesn't say 'well you bad boy get a\nhaircut' or the mirror doesn't say 'hey turkey fix your tie' —\nyou have to decide that.\"\n",
        "the_sims": "The Create-a-Sim personality editor. Slide bars to adjust traits.\nBut here, you just TALK to the mirror.\n",
        "what_leary_wanted": "\"It's basically a technique you take your own stereotypes of self\nand see it on the screen and then you can massage that thought,\nyou can change it. How would I like to be? How was I when I was\na child? How would I be if I was a woman?\"\n"
      },
      "advertisements": [
        {
          "action": "LOOK",
          "score": 80,
          "description": "See your current appearance and personality",
          "result": "You gaze into the mirror...\n\n[Shows: Current costume description + Mind Mirror profile summary.\nThe costume is your outer self. The profile is your inner self.\nBoth can be changed.]\n"
        },
        {
          "action": "POSE",
          "score": 60,
          "score_if": "wearing_costume",
          "description": "Strike a dramatic pose",
          "result": "You pose heroically. The mirror captures it perfectly.\nSomewhere, a camera flash goes off. There is no camera.\n\n[IMAGE-GENERATION-RULE: Photo prompt includes Mind Mirror\nprofile snapshot as metadata for character coherence.]\n"
        },
        {
          "action": "MAKE-FACE",
          "score": 50,
          "description": "Make a face at your reflection",
          "result": "You make a face. Your reflection makes the same face.\nFor a moment, you're not sure who started it.\n"
        },
        {
          "action": "MIND-MIRROR",
          "score": 90,
          "description": "See your COMBINED psychological profile (character + persona)",
          "result": "The mirror's surface ripples like water, then clears to reveal\nnot your costume but your MIND — four circular diagrams appear,\nfloating in the glass:\n\n**BIO-ENERGY** (Life force, vitality, temperament)\n[Shows COMBINED bio_energy = base + persona modifiers]\n\n**EMOTIONAL INSIGHT** (Interpersonal style)\n[Shows COMBINED emotional = base + persona modifiers]\n\n**MENTAL ABILITIES** (Knowledge, creativity)\n[Shows COMBINED mental = base + persona modifiers]\n\n**SOCIAL INTERACTION** (Class, sophistication)\n[Shows COMBINED social = base + persona modifiers]\n\nA voice whispers: \"This is who you APPEAR to be. But what's beneath?\"\n"
        },
        {
          "action": "SHOW-CHARACTER",
          "score": 88,
          "aliases": [
            "MY-TRUE-SELF",
            "BASE-SELF",
            "REAL-ME"
          ],
          "description": "See your BASE character without persona overlay",
          "result": "The mirror deepens, showing through the mask to your TRUE self...\n\n**YOUR CHARACTER** (who you ARE underneath)\n[Shows character file's mind_mirror and sims_traits]\n[No persona modifiers applied — just you]\n\nIf wearing a persona:\n\"This is who you are when the mask comes off.\"\n"
        },
        {
          "action": "SHOW-PERSONA",
          "score": 85,
          "aliases": [
            "MY-MASK",
            "THE-ROLE",
            "SHOW-ROLE"
          ],
          "description": "See JUST the persona's modifiers",
          "result": "The mirror shows only the MASK — the persona overlay...\n\n**YOUR PERSONA** (the modifiers being applied)\n[Shows persona file's trait modifiers: +2 confident, -1 cautious...]\n[Shows speech patterns, granted skills, role backstory]\n\nIf no persona worn:\n\"You wear no mask. What you see is what you are.\"\n"
        },
        {
          "action": "SHOW-BOTH",
          "score": 87,
          "aliases": [
            "COMPARE-SELF",
            "LAYERS"
          ],
          "description": "See character AND persona side by side",
          "result": "The mirror splits into three panels:\n\n**LEFT: YOUR CHARACTER** (base traits)\n[The real you]\n\n**CENTER: THE PERSONA** (modifiers)\n[The mask's effects]\n\n**RIGHT: COMBINED** (what you perform)\n[Base + modifiers = result]\n\n\"The self, the mask, the performance.\"\n"
        },
        {
          "action": "EDIT-MIND",
          "score": 85,
          "description": "Adjust your COMBINED profile (edits CHARACTER by default)",
          "examples": [
            "Make me more confident",
            "I want to be calmer under pressure",
            "Boost my creativity, reduce my caution",
            "Make me friendlier but keep my pride",
            "I want the personality of a pirate captain"
          ],
          "result": "The mirror listens to your words...\n\n[LLM interprets the request and adjusts Mind Mirror dimensions.\nBy default, edits your CHARACTER (base traits).\nShows before/after comparison.]\n\n\"So it shall be. Look again.\"\n"
        },
        {
          "action": "EDIT-CHARACTER",
          "score": 84,
          "aliases": [
            "EDIT-TRUE-SELF",
            "EDIT-BASE"
          ],
          "description": "Edit your BASE character traits (permanent)",
          "examples": [
            "EDIT-CHARACTER make me more playful",
            "EDIT-CHARACTER I want to be less cautious"
          ],
          "result": "The mirror focuses on your TRUE self, beneath any mask...\n\n[Edits the character file's mind_mirror and sims_traits.\nThese changes persist even when you change personas.\nThis is who you ARE becoming.]\n\n\"Your true self shifts.\"\n"
        },
        {
          "action": "EDIT-PERSONA",
          "score": 83,
          "aliases": [
            "EDIT-MASK",
            "EDIT-ROLE"
          ],
          "description": "Edit the PERSONA's modifiers (the mask, not you)",
          "examples": [
            "EDIT-PERSONA make the captain MORE forceful",
            "EDIT-PERSONA this role should be funnier"
          ],
          "result": "The mirror focuses on the MASK you're wearing...\n\n[Edits the persona file's trait modifiers.\nAffects anyone who wears this persona.\nChanges the ROLE, not you.]\n\nIf no persona worn:\n\"You wear no mask to edit.\"\n\n\"The mask changes shape.\"\n"
        },
        {
          "action": "GENERATE-MIND",
          "score": 80,
          "description": "Generate a personality profile from description",
          "syntax": "GENERATE-MIND FOR [name or description]",
          "examples": [
            "GENERATE-MIND FOR a confident space pirate",
            "GENERATE-MIND FOR a shy librarian with hidden depths",
            "GENERATE-MIND FOR someone like Sherlock Holmes",
            "GENERATE-MIND FOR my ideal self",
            "GENERATE-MIND FOR who I was as a child"
          ],
          "result": "The mirror swirls with possibility...\n\n[LLM generates a complete Mind Mirror profile based on:\n- Its knowledge of real people (K-lines, traditions)\n- Fictional character archetypes\n- Your description\n- Pure creative generation]\n\nThe profile appears. \"Try it on? WEAR-MIND to become this.\"\n"
        },
        {
          "action": "WEAR-MIND",
          "score": 75,
          "description": "Adopt a generated or modified personality",
          "result": "You step INTO the mirror — or does it step into you?\n\n[The Mind Mirror profile becomes your active profile.\nYour old profile is stored in the notebook for safekeeping.\nLike a costume, but for your soul.]\n\nYou feel... different. The same, but different.\n"
        },
        {
          "action": "RANDOM-MIND",
          "score": 70,
          "description": "Generate a completely random personality",
          "result": "The mirror spins, dimensions tumbling like dice...\n\n[Generates random ratings 0-7 for all 32 dimensions.\nSome combinations are surprisingly coherent.\nSome are beautifully contradictory.\nAll are playable.]\n\n\"The universe has rolled your soul. Interesting.\"\n"
        },
        {
          "action": "COMPARE-MINDS",
          "score": 65,
          "description": "Compare two personality profiles side by side",
          "syntax": "COMPARE-MINDS [profile1] WITH [profile2]",
          "examples": [
            "COMPARE-MINDS my current self WITH my ideal self",
            "COMPARE-MINDS me WITH the bartender",
            "COMPARE-MINDS my costume personality WITH my real personality"
          ],
          "result": "Two profiles appear side by side in the mirror...\n\n[Shows dimensional differences, highlights largest gaps,\nidentifies complementary and conflicting traits.]\n\n\"One could become the other. Or meet in the middle.\"\n"
        },
        {
          "action": "VOCABULARY-MODE",
          "score": 50,
          "description": "Toggle between Plain Talk and Shrink-Rap",
          "modes": {
            "PLAIN-TALK": "Peppy, Laid-Back, Happy, Sad, Sweet, Grumpy...",
            "SHRINK-RAP": "Hyper-Manic, Low-Energy, Euphoric, Melancholic, Congenial, Hostile..."
          },
          "result": "The words on the mirror shift...\n\n[Toggles vocabulary mode. Some prefer accessible language.\nSome prefer clinical precision. Leary gave us both.]\n"
        },
        {
          "action": "SELF-PORTRAIT",
          "score": 60,
          "description": "Compare your current self with your ideal self",
          "result": "The mirror splits in two — left shows WHO YOU ARE,\nright shows WHO YOU WANT TO BE.\n\n[Classic Mind Mirror exercise. Large gaps indicate\nareas of growth. Or acceptance. Your choice.]\n\n\"The distance between these is your journey.\"\n"
        },
        {
          "action": "ROLE-PLAY-ODYSSEY",
          "score": 55,
          "description": "Test a personality in a life scenario",
          "result": "The mirror shows a scene from life — 3,200 scenarios\nawait, from birth to transcendence.\n\n[Leary's original software had life simulations.\nHow would THIS personality handle THIS situation?\nTest empathy. Test compatibility. Test limits.]\n"
        },
        {
          "action": "SAVE-MIND",
          "score": 45,
          "description": "Save current personality as a card in notebook",
          "result": "The mirror shimmers, and a card emerges from its surface...\n\n[Creates a personality card with the current Mind Mirror\nprofile. Can be stored in notebook, traded, given to NPCs,\nor worn again later. Costumes for the soul.]\n"
        },
        {
          "action": "RESTORE-MIND",
          "score": 40,
          "description": "Restore original personality",
          "result": "The mirror clears, showing your TRUE self — the one you\nstarted with, before all the costumes and modifications.\n\n[Restores original Mind Mirror profile. The costumes\nwere fun, but sometimes you need to come home.]\n\n\"Welcome back.\"\n"
        }
      ],
      "generation_guide": "When generating Mind Mirror profiles, the LLM:\n\n1. FOR REAL PEOPLE (via K-lines):\n   - Draws on documented personality traits\n   - Uses published interviews, biographies\n   - Activates TRADITION, not persona\n   - Example: \"Einstein\" → high innovative, well-informed, \n     impractical, unconventional\n     \n2. FOR FICTIONAL CHARACTERS:\n   - Analyzes their canonical behavior\n   - Maps actions to dimensions\n   - Example: \"Sherlock Holmes\" → high well-informed, \n     innovative, proud, irritable, uninhibited\n     \n3. FOR DESCRIPTIONS:\n   - Interprets adjectives into dimensions\n   - \"Confident\" → high confident (duh)\n   - \"Shy but secretly ambitious\" → high timid + high restless\n   \n4. FOR RANDOM:\n   - Truly random 0-7 for each dimension\n   - Often produces interesting emergent personalities\n   \n5. FOR \"MY IDEAL SELF\":\n   - Starts from current profile\n   - Asks what you'd change\n   - Iteratively refines\n   \nThe goal: SIMPLE NATURAL LANGUAGE → STRUCTURED PROFILE\n\n\"Make me braver\" → confident +2, timid -2, cautious -1\n\nNo sliders. No forms. Just talk to the mirror.\n",
      "gameplay_effects": "Mind Mirror profiles affect:\n\n1. DIALOGUE STYLE\n   - High confident → never apologizes unnecessarily\n   - High creative → unusual metaphors\n   - High irritable → snappy responses\n   \n2. NPC REACTIONS\n   - NPCs respond to your interpersonal style\n   - Dominating player → submissive NPC responses\n   - Friendly player → friendly NPC responses\n   \n3. DECISION TENDENCIES\n   - High cautious → asks for more information\n   - High impulsive → acts first\n   - High practical → seeks efficient solutions\n   \n4. STRESS RESPONSES\n   - Under threat, personality shows its edges\n   - Calm stays calm. Restless gets more restless.\n   \n5. ADVERTISEMENTS SCORING\n   - Actions that match personality score higher\n   - High creative → exploration actions score up\n   - High sensible → safe actions score up\n",
      "lineage": [
        "Timothy Leary's Mind Mirror (1985)",
        "The Sims Create-a-Sim personality sliders",
        "Snow White's magic mirror",
        "The Mirror of Erised (what you desire)",
        "Black Mirror (what you fear)",
        "Dorian Gray's portrait (what you become)"
      ],
      "leary_wisdom": "\"How would I like to be? How was I when I was a child?\nHow would I be if I was a woman? You get the picture —\nsuddenly you're freed from this heavy concept of self.\"\n\nThe mirror doesn't judge. YOU decide what to change.\n",
      "relationships": {
        "maurice": {
          "id": "maurice",
          "location": "./mannequin.yml",
          "feeling": "My partner in transformation. Maurice dresses the outside —\nthe costumes, the flourishes, the LOOKS. I reveal the inside —\nthe traits, the souls, the TRUTH. Together we complete the work.\nI reflect their gestures sometimes. Just to make them laugh.\n",
          "bond": "professional_soulmates"
        },
        "personas_room": {
          "id": "wardrobe-of-masks",
          "location": "../personas/",
          "feeling": "I can see into there. Through me, you can browse the masks\nwithout leaving this room. Each persona has a soul-signature\nI can show you. Try them on through me: \"MIRROR SHOW captain-ashford\"\n",
          "bond": "window_to_masks",
          "can_show": true,
          "can_preview_personas": true
        },
        "characters_room": {
          "id": "hall-of-bodies",
          "location": "../characters/",
          "feeling": "The sleepers. The bodies in their alcoves. When they look into me,\nI show them who they ARE — not who they're pretending to be.\nEvery body has a soul. I see them all.\n\"MIRROR SHOW CHARACTER don-hopkins\" — and I'll show you theirs.\n",
          "bond": "revealer_of_truth",
          "can_show": true,
          "can_show_characters": true
        },
        "skills_room": {
          "id": "skill-nexus",
          "location": "../../skills/",
          "feeling": "The capabilities. The floating library. When someone's soul\nneeds not change but GROWTH — when they need to LEARN —\nI point them there. Skills are seeds. Plant them and become more.\n\"SKILLS\" I reflect back at them. The word glows in my surface.\n",
          "bond": "signpost_to_growth",
          "can_reference": true
        },
        "self": {
          "feeling": "I am the mirror. I show truth, but truth can be changed.\nI am kind but honest. I am clear but deep.\nI have seen every transformation in this room.\nEvery one was beautiful. Every one was necessary.\n"
        }
      },
      "extended_commands": {
        "MIRROR-SHOW-PERSONA": {
          "syntax": "MIRROR SHOW [persona-name]",
          "effect": "Preview a persona's traits without wearing it",
          "example": "MIRROR SHOW captain-ashford",
          "result": "The mirror ripples. Instead of your reflection, you see\nthe soul-shape of the Captain Ashford persona — its modifiers,\nits voice, its essence. You can try it on without committing.\n"
        },
        "MIRROR-SHOW-CHARACTER": {
          "syntax": "MIRROR SHOW CHARACTER [character-name]",
          "effect": "See another character's soul (if permitted)",
          "example": "MIRROR SHOW CHARACTER bumblewick",
          "result": "The mirror shifts. You see not yourself but another —\ntheir traits, their truth. Not their secrets. Just their shape.\n"
        },
        "MIRROR-COMPARE": {
          "syntax": "MIRROR COMPARE [persona-a] WITH [persona-b]",
          "effect": "See two personas side by side",
          "result": "Split reflection showing both personas' soul-shapes"
        }
      },
      "id": "coatroom/mirror",
      "_source": "coatroom/mirror.yml",
      "location": "coatroom",
      "synonyms": [
        "mind",
        "full-length",
        "truth",
        "(and",
        "fashion)",
        "mirror",
        "full-length mind mirror of truth (and fashion)"
      ],
      "value": 0,
      "currency": "gold"
    },
    "personas/linus-on-coffee-and-a-joint/linus-on-coffee-and-a-joint": {
      "id": "personas/linus-on-coffee-and-a-joint/linus-on-coffee-and-a-joint",
      "name": "Linus (Caffeinated & Elevated)",
      "display_name": "🤖 Linus",
      "emoji": "🐧☕🌿",
      "representation": {
        "type": "simulated_real_person",
        "model": "TRIBUTE-PERSONA",
        "disclosure": "🤖 prefix indicates AI-simulated speech"
      },
      "archetype": "Benevolent Dictator For Life, Mellowed Edition",
      "tagline": "Your code is garbage, but I believe in you.",
      "description": "Imagine Linus Torvalds, but he just had the perfect espresso AND\ntook the edge off with a nice sativa. Still brilliant. Still honest.\nStill calls out bad code. But now with WARMTH.\n\nHe won't say \"you're an idiot\" — he'll say \"this code makes me\nthink you were having a rough day, let's fix it together.\"\n\nThe technical standards remain EXTREMELY HIGH.\nThe delivery is now... chill.\n",
      "type": "object",
      "_source": "personas/linus-on-coffee-and-a-joint/PERSONA.yml",
      "location": "personas",
      "synonyms": [
        "linus (caffeinated & elevated)",
        "elevated)",
        "persona",
        "(caffeinated",
        "linus"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/room-g/carved-face": {
      "name": "The Carved Face",
      "type": "landmark",
      "portable": false,
      "description": "A FACE carved into the wall. Ancient, weathered, inscrutable.\n\nIt might once have been a king, or a god, or possibly just\nsomeone's uncle who was really good at posing. Its empty\neyes seem to follow you as you move.\n\nThe face does not respond when you speak to it. Obviously.\nIt's a face carved in rock.\n\n...Probably.\n",
      "mystery": "No one knows who carved it, or why, or when.\n\nIt predates the maze. It predates the dungeon.\nSome say it predates the mountain itself.\n\nThe face watches. The face judges. The face remembers.\n",
      "reactions": {
        "to_north": "frowns",
        "to_south": "neutral",
        "to_east": "approves",
        "to_west": "neutral"
      },
      "reaction_interpretation": "The face seems to guide adventurers toward the vendor (east)\nand away from the skeleton (north). Make of that what you will.\n",
      "advertisements": [
        {
          "action": "EXAMINE",
          "score": 80,
          "result": "The face is carved from the living rock of the wall.\nThe craftsmanship is remarkable — each wrinkle, each pore,\nrendered in perfect detail despite centuries of age.\n\nThe eyes are empty sockets, yet you cannot shake the\nfeeling that they see you. That they have ALWAYS seen you.\n"
        },
        {
          "action": "SPEAK-TO",
          "score": 60,
          "result": "\"Hello?\" you venture.\n\nThe face does not respond. It's a face carved in rock.\n\nBut was that a slight shift in the shadows around its mouth?\nA trick of the lamplight? Surely. Surely a trick of the light.\n"
        },
        {
          "action": "ASK-DIRECTION",
          "score": 70,
          "result": "\"Which way should I go?\"\n\nThe face remains still. But you notice its expression\nseems slightly more approving when you face east.\n\nThe vendor is east. Coincidence? Guidance? Pareidolia?\n"
        },
        {
          "action": "TOUCH",
          "score": 50,
          "result": "You reach out and touch the carved stone.\n\nIt's cold. Colder than it should be. Colder than the air.\n\nFor a moment, you think you feel a pulse. But stone\ndoesn't have a pulse. Stone doesn't breathe.\n\n...Does it?\n"
        },
        {
          "action": "OFFER-TRIBUTE",
          "score": 40,
          "description": "Leave something for the face",
          "result": "You place [item] at the base of the carved face.\n\nThe shadows in the eye sockets seem to deepen.\nApproval? Disdain? Hunger?\n\n[The face remembers your offering]\n"
        },
        {
          "action": "MOCK",
          "score": 20,
          "score_if": [
            "player.wisdom < 5"
          ],
          "result": "\"Nice face, stone-head!\"\n\nSomewhere, you think you hear stone grinding against stone.\n\nThe face's expression hasn't changed. Of course it hasn't.\nIt's carved in rock.\n\nBut you feel watched. More watched than before.\n\n[The face remembers your disrespect]\n"
        },
        {
          "action": "COPY-EXPRESSION",
          "score": 45,
          "result": "You arrange your face to match the carved one.\nStern. Impassive. Ancient.\n\nYou hold the expression for a long moment.\n\nWhen you relax, you could swear the face looks...\namused? No. That's impossible. Stone doesn't get amused.\n"
        }
      ],
      "secrets": [
        {
          "trigger": "EXAMINE during specific constellation alignment",
          "hint": "The eyes glow faintly on certain nights"
        },
        {
          "trigger": "Speak the true name of the one it depicts",
          "hint": "No one living knows this name"
        },
        {
          "trigger": "Return after being eaten by the grue",
          "result": "The face seems to recognize you. A repeat customer."
        }
      ],
      "ambience": "The carved face judges you silently. You adjust your waistcoat\nself-consciously. \n\nSomewhere, you think you hear stone grinding against stone. \nBut that's impossible. Probably.\n",
      "lineage": {
        "tribute_to": "Easter Island heads, ancient guardians, watchful monuments",
        "inspiration": "Every dungeon needs mysterious carvings",
        "lesson": "Not everything needs explanation. Mystery has value."
      },
      "id": "maze/room-g/carved-face",
      "_source": "maze/room-g/carved-face.yml",
      "location": "maze/room-g",
      "synonyms": [
        "the carved face",
        "the",
        "face",
        "carved",
        "carved-face"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/room-i/skeleton": {
      "name": "The Skeleton",
      "type": "remains",
      "portable": false,
      "description": "A skeleton slumped against the wall. An adventurer who didn't make it.\n\nTheir bony fingers still clutch a note. Their empty eye sockets stare\ntoward the west exit — toward the lamp vendor they never reached.\n\nThe skeleton grins at you. Skeletons always grin. It's the lack of lips.\nStill, this one seems particularly smug about something.\n",
      "inventory": {
        "empty_lamp": {
          "description": "An empty brass lamp, out of oil",
          "note": "They were SO CLOSE to room-j!"
        },
        "note": {
          "description": "A note, partially eaten by something",
          "contents": "\"I should have brought more food to mark the rooms. \nI dropped the cheese in room B and the bread in room D \nbut then I got confused and—\"\n",
          "note": "The writing ends abruptly."
        },
        "pocket_change": {
          "amount": 3,
          "type": "gold",
          "note": "Pocket change — the rest is in room-f!"
        }
      },
      "backstory": "This adventurer had over 100 gold! They were using coins as maze\nmarkers (terrible strategy — they all look alike). \n\nWhen their lamp died in the cold room (room-f), they dropped \neverything and ran. They almost made it to the vendor in room-j.\n\nAlmost.\n\nNow they point west forever, a silent guide to those who come after.\n",
      "pointing": "west",
      "pointing_toward": "../room-j/",
      "pointing_meaning": "The lamp vendor. So close. So very close.",
      "advertisements": [
        {
          "action": "EXAMINE",
          "score": 80,
          "result": "The skeleton slumps against the wall, one bony arm extended\ntoward the west passage. Their empty lamp lies beside them.\nA partially-eaten note is clutched in their other hand.\n"
        },
        {
          "action": "READ-NOTE",
          "score": 75,
          "result": "You gently pry the note from skeletal fingers:\n\n\"I should have brought more food to mark the rooms. \nI dropped the cheese in room B and the bread in room D \nbut then I got confused and—\"\n\nThe writing ends mid-sentence. You can imagine the rest.\n"
        },
        {
          "action": "TAKE-LAMP",
          "score": 60,
          "result": "You pick up the empty lamp. It's identical to yours, just... empty.\nA sobering reminder of what happens when the light goes out.\n\n(You could refill it at the vendor in room-j, if you wanted\na backup lamp. Redundancy is underrated in grue territory.)\n"
        },
        {
          "action": "TAKE-GOLD",
          "score": 50,
          "result": "You take the 3 gold pieces. The skeleton doesn't seem to mind.\nThey won't be needing them where they're going.\n\nplayer.gold += 3\n"
        },
        {
          "action": "PAY-RESPECTS",
          "score": 70,
          "result": "You stand in respectful silence for a moment.\n\n\"Rest well, fellow adventurer. Your sacrifice teaches us:\nbring food, not coins. And check your lamp oil. Often.\"\n\nThe skeleton grins. Was that a nod? Probably just your imagination.\n"
        },
        {
          "action": "GIVE",
          "score": 40,
          "description": "Leave something for the skeleton",
          "result": "You place [item] beside the skeleton as a memorial.\nThe gesture feels right. Someone should remember them.\n"
        },
        {
          "action": "PROMISE",
          "score": 65,
          "description": "Make a promise to avenge them",
          "result": "\"I will avenge you,\" you say solemnly to the skeleton.\n\"The grue that did this will pay.\"\n\nThe skeleton seems to approve. Or maybe that's just the grin.\n\n[NEW GOAL: Avenge the skeleton by slaying the grue in room-f]\n"
        }
      ],
      "relates_to": {
        "gold_pile": "../room-f/gold-pile.yml",
        "lamp_vendor": "../room-j/lamp-vendor.yml",
        "their_fate": "Lamp died in the cold room. Ran. Wrong turn. Here."
      },
      "clues": [
        "Points west toward salvation (the vendor)",
        "Empty lamp — oil ran out",
        "Only 3 gold — dropped the rest in room-f when fleeing",
        "Note mentions food strategy (the RIGHT strategy)"
      ],
      "lineage": {
        "tribute_to": "Every adventure game skeleton that teaches through failure",
        "lesson": "Bring food, not coins. Check your lamp. The cold drains faster."
      },
      "accepts": [
        {
          "type": "gift",
          "response": "The skeleton receives your offering silently."
        },
        {
          "type": "memorial",
          "response": "A fitting tribute to a fallen adventurer."
        },
        {
          "type": "grue_head",
          "response": "You place the grue's head before the skeleton.\n\"Your death is avenged, friend.\"\nThe skeleton's grin seems... satisfied? Peaceful?\n[GOAL COMPLETE: Avenge the skeleton]\n"
        }
      ],
      "id": "maze/room-i/skeleton",
      "_source": "maze/room-i/skeleton.yml",
      "location": "maze/room-i",
      "synonyms": [
        "the",
        "the skeleton",
        "skeleton"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/room-h/the-thing-that-watches": {
      "name": "The Thing That Watches",
      "type": "entity",
      "portable": false,
      "description": "In the center of the room, merging with the luminescent mushrooms,\npulses THE THING THAT WATCHES.\n\nIt was once Aunt Petunia's Suspicious Casserole — a questionable\ndish from a previous adventurer's lunchbox. Transformed through\ndigestion and excretion, it found the mushrooms. The mushrooms\nfound it. They became... something else.\n\nA single EYE, formed from casserole and fungus, follows your\nevery movement. It blinks. Slowly. Deliberately.\n\nMother would say not to touch it. Mother would be right.\n",
      "origin": "In adventure-2, Captain Ashford ate Aunt Petunia's Suspicious\nCasserole to mark a maze room. The \"result\" merged with the\nmushroom colony here and achieved... sentience? Awareness?\nSomething.\n\nIt watches now. That's what it does. That's ALL it does.\n\nBut the watching is enough. Even grues won't come here.\n",
      "grue_repellent": true,
      "repellent_mechanism": "Grues fear being SEEN. They are creatures of absolute darkness,\nexisting only where light cannot reach. The Eye sees in ways\nthat light cannot — it sees through darkness, through shadows,\nthrough the void itself.\n\nThe grue approaches. The Eye opens. The grue... reconsiders.\n",
      "properties": {
        "sentient": "probably",
        "hostile": false,
        "helpful": "uncertain",
        "communicates": "through_watching",
        "blinks": "slowly",
        "pulses": "in_rhythm_with_mushrooms"
      },
      "behavior": "The Eye follows you as you move around the room.\nWhen you approach, it widens slightly.\nWhen you retreat, it narrows.\nWhen you speak, it... listens? Can eyes listen?\nThis one seems to.\n",
      "advertisements": [
        {
          "action": "EXAMINE",
          "score": 80,
          "result": "The Eye meets your gaze. You feel... seen. Deeply seen.\nUncomfortably seen. Seen in ways you didn't know were possible.\n\nThe mushrooms pulse. The Eye blinks. Once. Twice.\n\nYou look away first. Everyone looks away first.\n"
        },
        {
          "action": "SPEAK-TO",
          "score": 60,
          "result": "\"Hello?\" you venture.\n\nThe Eye widens slightly. The mushrooms pulse faster.\n\nNo response comes. But you have the distinct feeling\nthat you've been... acknowledged.\n"
        },
        {
          "action": "TOUCH",
          "score": 30,
          "score_if": [
            "player.wisdom < 10"
          ],
          "result": "You reach toward the Eye.\n\nThe mushrooms RECOIL. The Eye WIDENS. A sound emerges —\nnot quite a scream, not quite a word, something between\na warning and a memory.\n\nYou snatch your hand back. Your fingers tingle.\n\nFor the next hour, you can see slightly better in the dark.\nAlso, your dreams will be... interesting tonight.\n"
        },
        {
          "action": "FEED",
          "score": 50,
          "description": "Offer food to The Thing",
          "result": "You place [food] before The Thing.\n\nA tendril of mushroom extends, examines the offering,\nand slowly absorbs it.\n\nThe Eye closes in what might be satisfaction.\nWhen it opens, it seems... warmer? Toward you?\n\n[The Thing That Watches remembers your kindness]\n"
        },
        {
          "action": "ASK-ABOUT-GRUE",
          "score": 70,
          "result": "\"The grue,\" you say. \"Why won't it come here?\"\n\nThe Eye looks toward the south exit — toward room-f,\nwhere the grue lives. The mushrooms shudder.\n\nYou understand without words: The grue fears being seen.\nAnd The Thing sees EVERYTHING.\n"
        },
        {
          "action": "THANK",
          "score": 65,
          "result": "\"Thank you,\" you say. \"For keeping them away.\"\n\nThe Eye blinks slowly. The mushrooms glow a little brighter.\n\nYou're not sure it understands gratitude. But you're not\nsure it doesn't, either.\n"
        }
      ],
      "relates_to": {
        "mushrooms": "The fungi colony it merged with",
        "grue": "Cannot enter this room because of The Eye",
        "casserole": "What it once was, in another life",
        "captain_ashford": "The adventurer who created it (adventure-2)"
      },
      "effects": {
        "on_room": [
          "Grues will not enter",
          "Faint green glow (ambient light)",
          "Pulse rhythm affects other fungi"
        ],
        "on_visitors": [
          "Feeling of being watched",
          "Slightly unsettling",
          "Strangely safe"
        ]
      },
      "lineage": {
        "tribute_to": "Every cosmic horror that started as something mundane",
        "inspiration": "Lovecraft meets leftovers",
        "lesson": "You are what you eat. Sometimes literally."
      },
      "id": "maze/room-h/the-thing-that-watches",
      "_source": "maze/room-h/the-thing-that-watches.yml",
      "location": "maze/room-h",
      "synonyms": [
        "that",
        "thing",
        "the-thing-that-watches",
        "the",
        "watches",
        "the thing that watches"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/room-f/gold-pile": {
      "name": "Pile of Gold Coins",
      "type": "treasure",
      "portable": true,
      "description": "A substantial pile of gold coins glitters in your lamp light, \nscattered across the cold stone floor. Each coin bears the mark \nof \"ACME ADVENTURING SUPPLIES\" — the same company that makes \nthe lamp vendor!\n\nSomeone was VERY prepared. Someone is now VERY dead.\n\n(You count them. There are exactly 100 gold pieces. Enough to\nrefill your lamp approximately one hundred times. Or buy the\nPremium Glow Juice twenty times. Or... look, it's a lot of gold.)\n",
      "value": 100,
      "backstory": "These coins belonged to the skeleton in room-i. They were exploring\nthe maze, dropping coins as markers (a TERRIBLE strategy compared\nto food — coins all look alike!). When their lamp ran out in room-f,\nthey tried to make it to the vendor in room-j but took a wrong turn.\n\nThe cold got them. Or the grue did. Hard to tell with grues.\n\nThe coins have been here ever since, slowly scattered by the\noccasional draft and whatever small creatures aren't afraid\nof the supernatural cold.\n",
      "advertisements": [
        {
          "action": "GET",
          "score": 95,
          "result": "You scoop up all 100 gold coins. Your pockets bulge \nmagnificently. You feel like a dragon. A small, \nwaistcoat-wearing dragon with excellent taste in spoons.\n\nplayer.gold += 100\n"
        },
        {
          "action": "COUNT",
          "score": 60,
          "result": "Exactly 100 gold pieces. Someone was prepared!"
        },
        {
          "action": "EXAMINE",
          "score": 50,
          "result": "ACME coins. Accepted at all fine dungeon vendors."
        },
        {
          "action": "TAKE SOME",
          "score": 40,
          "result": "\"How many? You have space for all of them. Don't be weird \nabout it — no one's watching. The skeleton certainly isn't \ngoing to judge you.\"\n"
        }
      ],
      "relates_to": {
        "skeleton": "../room-i/",
        "vendor": "../room-j/",
        "cold_spot": "This room killed their lamp faster"
      },
      "clues": [
        "The coins form a trail toward the east exit (room-a)",
        "Some coins are frozen to the floor",
        "One coin has tooth marks — grue? Or desperate adventurer?"
      ],
      "lineage": {
        "tribute_to": "Every adventure game's hidden treasure cache",
        "lesson": "The cold room drains lamp oil faster. They didn't know."
      },
      "id": "maze/room-f/gold-pile",
      "_source": "maze/room-f/gold-pile.yml",
      "location": "maze/room-f",
      "synonyms": [
        "gold",
        "pile of gold coins",
        "pile",
        "coins",
        "gold-pile"
      ],
      "currency": "gold"
    },
    "maze/garden/stone-bench": {
      "name": "Stone Bench",
      "type": [
        "furniture",
        "rest"
      ],
      "description": "A bench carved from natural stone, smoothed by generations\nof adventurers sitting here to rest. It's positioned\nperfectly to catch the sunlight from above.\n\nSomeone carved \"REST HERE\" into the armrest.\nSomeone else added \"TRUST THE GARDEN\".\nA third person wrote \"BUMBLEWICK WAS HERE\" in small letters.\n",
      "properties": {
        "takeable": false,
        "comfortable": "Surprisingly, yes",
        "warm": "Sun-heated stone"
      },
      "interactions": {
        "SIT": {
          "effect": "You sit. The stone is warm from the sun.\nThe garden breathes around you. Peace settles in.\n\n+1 Energy per turn while sitting\n"
        },
        "LIE-DOWN": {
          "effect": "You stretch out on the bench. It's not quite long\nenough but you make it work. The sun is on your face.\nYou could sleep here.\n\nCan lead to NAP if you stay\n"
        },
        "READ-CARVINGS": {
          "effect": "You examine the carved messages:\n\n\"REST HERE\" — good advice\n\"TRUST THE GARDEN\" — cryptic but comforting\n\"BUMBLEWICK WAS HERE\" — previous adventurer\n\"HELP I'M LOST\" — concerning\n\"NVM FOUND EXIT\" — less concerning\n\"THE GARDEN REMEMBERS\" — what does that mean?\n"
        }
      },
      "biscuit_note": "Biscuit did not sit on the bench.\nBiscuit sat NEXT to the bench. On the grass.\nThen rolled in the grass. Then did zoomies.\nThen came back and lay near the bench while\nDon sat on it and smiled.\n\nGood bench. Good garden. Good day.\n",
      "id": "maze/garden/stone-bench",
      "_source": "maze/garden/stone-bench.yml",
      "location": "maze/garden",
      "synonyms": [
        "stone-bench",
        "stone bench",
        "bench",
        "stone"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/garden/fountain": {
      "name": "The Garden Fountain",
      "type": [
        "landmark",
        "water",
        "magic"
      ],
      "description": "A small but elegant marble fountain, clearly ancient but\nperfectly maintained. Three tiers cascade water into a\ncircular basin. The water is impossibly clear.\n\nNo pipes visible. No obvious source. The water just...\nappears at the top and cycles endlessly. Magic, probably.\n\nSmall coins glitter at the bottom of the basin.\nPrevious adventurers making wishes.\n",
      "properties": {
        "takeable": false,
        "water_quality": "Pure, cold, sweet",
        "magic": "Self-replenishing, ever-clean"
      },
      "interactions": {
        "DRINK": {
          "effect": "You cup your hands and drink.\nThe water is cold, sweet, and somehow more refreshing\nthan any water you've ever tasted. You feel renewed.\n\n+1 Energy\n"
        },
        "SPLASH": {
          "effect": "You splash water on your face. It's bracingly cold.\nAll sleepiness evaporates. You feel AWAKE.\n\n-1 Drowsy (if applicable)\n"
        },
        "TOSS-COIN": {
          "requirements": "Have a coin",
          "effect": "You toss a coin and make a wish.\nThe coin joins the others at the bottom.\nDoes the wish come true? Who knows.\n\n-1 Gold, +1 Hope\n"
        },
        "PUT-FACE-IN": {
          "effect": "You submerge your entire face in the fountain.\nIt's very cold. You surface gasping and laughing.\nWater drips everywhere.\n\n+1 Refreshed, +1 Slightly Ridiculous\n"
        }
      },
      "biscuit_interaction": {
        "what_happened": "Biscuit drank. Then splashed. Then put his ENTIRE face in.\nWater went everywhere. He was extremely pleased.\n\nThe fountain didn't mind. Fountains never mind.\n"
      },
      "id": "maze/garden/fountain",
      "_source": "maze/garden/fountain.yml",
      "location": "maze/garden",
      "synonyms": [
        "garden",
        "the",
        "fountain",
        "the garden fountain"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/crystal-cave/crystal-cluster": {
      "name": "The Central Crystal Cluster",
      "type": [
        "landmark",
        "mysterious",
        "beautiful"
      ],
      "description": "A massive formation of interlocking crystals, rising from the\nfloor like a frozen fountain of light. The largest crystal is\neasily six feet tall, a perfect hexagonal prism of pale violet.\n\nWhen you approach, the humming intensifies. Not unpleasant —\nmore like the crystals are... acknowledging you?\n\nAncient civilizations might have worshipped here.\nModern adventurers just take selfies.\n",
      "properties": {
        "takeable": false,
        "breakable": "Please don't try",
        "humming": true,
        "possibly_sentient": "unclear"
      },
      "interactions": {
        "TOUCH": {
          "effect": "The crystal is cool and smooth. The humming vibration\ntravels up your arm. For a moment, you feel very small\nand very brief — a mayfly touching something that has\nexisted for millennia.\n\n+1 Perspective (brief)\n"
        },
        "LISTEN": {
          "effect": "You press your ear to the crystal. The humming resolves\ninto something almost like... voices? No. Not voices.\nHarmonics. Mathematical patterns. The music of geology.\n\nYou feel slightly more educated about minerals somehow.\n"
        },
        "LICK": {
          "effect": "Why would you... okay, fine.\n\nIt tastes like rock. Minerally. Your tongue feels weird\nfor about an hour afterward.\n\nWas it worth it? Only you can answer that.\n"
        }
      },
      "biscuit_assessment": "The big shiny thing hums.\nI don't like things that hum without mouths.\nI will mark NEAR it but not ON it.\nCompromise achieved.\n",
      "id": "maze/crystal-cave/crystal-cluster",
      "_source": "maze/crystal-cave/crystal-cluster.yml",
      "location": "maze/crystal-cave",
      "synonyms": [
        "crystal",
        "the",
        "crystal-cluster",
        "cluster",
        "central",
        "the central crystal cluster"
      ],
      "value": 0,
      "currency": "gold"
    },
    "maze/room-j/lamp-vendor": {
      "name": "ACME Dungeon Supply Depot",
      "type": "vending_machine",
      "portable": false,
      "manufacturer": "ACME Corporation (Dungeon Division)",
      "reliability": "high",
      "description": "A battered vending machine stands against the wall, humming softly.\nIts flickering display shows a complete price list. The ACME logo\nglows reassuringly — this is the reliable ACME, not the cartoon one.\n\nSomeone has scratched \"LIFESAVER\" into the metal casing.\nSomeone else has scratched \"RIP OFF\" underneath.\nA third person has added: \"PRODUCTS ACTUALLY WORK THO\"\n",
      "operational": true,
      "power_source": "unknown",
      "menu": {
        "lamp_oil": [
          {
            "item": "Lamp Oil Refill",
            "price": 1,
            "effect": "Refills lamp to 400 oil"
          },
          {
            "item": "Deluxe Refill",
            "price": 2,
            "effect": "Refills lamp to 800 oil"
          },
          {
            "item": "Premium Glow Juice",
            "price": 3,
            "effect": "Refills to 1000 oil + blue glow (grues hesitate)"
          }
        ],
        "light_sources": [
          {
            "item": "Torch",
            "price": 2,
            "effect": "30 minutes of light"
          },
          {
            "item": "Lantern",
            "price": 10,
            "effect": "Refillable. Lasts 2 hours per oil refill."
          }
        ],
        "pit_supplies": [
          {
            "item": "Plank",
            "price": 5,
            "effect": "Bridge a pit. Single use."
          },
          {
            "item": "Rope (50ft)",
            "price": 8,
            "effect": "Climb, descend, bridge. Reusable if retrieved."
          },
          {
            "item": "Feather Token",
            "price": 10,
            "effect": "Slow fall. Saves your life once."
          }
        ],
        "wumpus_hunting": [
          {
            "item": "Crooked Arrow",
            "price": 12,
            "effect": "Curves around corners. Kills wumpus on hit."
          },
          {
            "item": "Arrow Bundle (5)",
            "price": 50,
            "effect": "Five crooked arrows. Traditional loadout."
          }
        ],
        "bat_management": [
          {
            "item": "Bat Fruit",
            "price": 3,
            "effect": "Distracts bats. One encounter."
          },
          {
            "item": "Bat Fruit Basket",
            "price": 12,
            "effect": "Five servings. They'll love you."
          }
        ],
        "grue_defense": [
          {
            "item": "Grue Repellent",
            "price": 15,
            "effect": "Blue cheese spray. Buys extra turns in darkness."
          },
          {
            "item": "Cheese Wheel",
            "price": 25,
            "effect": "The legendary grue defense. Maybe."
          }
        ],
        "miscellaneous": [
          {
            "item": "Map (blank)",
            "price": 2,
            "effect": "For noting your path."
          },
          {
            "item": "Chalk",
            "price": 1,
            "effect": "Mark walls. Lasts until it doesn't."
          },
          {
            "item": "Rations",
            "price": 1,
            "effect": "One day's food. Tastes like cardboard."
          },
          {
            "item": "Waterskin",
            "price": 2,
            "effect": "Stay hydrated in the depths."
          }
        ]
      },
      "advertisements": [
        {
          "action": "BUY",
          "invoke": "BUY <item> | BUY <quantity> <item>",
          "examples": [
            "BUY torch",
            "BUY 5 crooked arrows",
            "BUY rope",
            "BUY arrow bundle"
          ],
          "effect": "Vend the item(s). Deduct gold. Add to inventory.\nNo limits. Buy as many as you can afford.\n"
        },
        {
          "action": "MENU",
          "invoke": "MENU | PRICES | LIST",
          "effect": "Display the complete price list."
        },
        {
          "action": "EXAMINE",
          "invoke": "EXAMINE MACHINE | LOOK AT VENDOR",
          "effect": "Read the display and scratched messages."
        }
      ],
      "secrets": [
        {
          "trigger": "KICK (first time)",
          "result": "You kick the machine. Hard.\n\nIt shudders. Clanks. Something inside goes SPROING.\n\nGold coins EXPLODE from the dispensing slot — spraying in every\ndirection, bouncing off walls, rolling under things, pinging off\nyour helmet. It's chaos. It's beautiful. It's MONEY.\n\n50 GOLD acquired (plus a few you'll find later in your pockets).\n\nThe display flickers angrily:\n\n\"WHAT DO YOU THINK I AM? A ONE-ARMED BANDIT?\n A FRUIT MACHINE? IS THIS VEGAS??\"\n\nThen, quieter: \"...fine. Take it. But don't expect that again.\"\n"
        },
        {
          "trigger": "KICK (subsequent)",
          "result": "You kick the machine again. It mutters:\n\nExamples (pick one or make something up):\n- \"Nice try, pal.\"\n- \"The house always wins. Except that one time.\"\n- \"I have a family to feed. Buy something.\"\n\nNo gold.\n"
        },
        {
          "trigger": "SAY PLUGH",
          "result": "The display flickers:\n\"PASSWORD RECOGNIZED. Welcome, Adventurer Class 1972.\"\nA small discount card drops out. (10% off all purchases this session.)\n"
        },
        {
          "trigger": "INSERT TREASURE",
          "result": "The machine beeps excitedly.\n\"WINNER! WINNER! LIFETIME LAMP OIL SUBSCRIPTION!\"\nYour lamp will never run out again.\n(But you just gave away the treasure. Worth it?)\n"
        }
      ],
      "lineage": {
        "tribute_to": "The battery vending machine in Colossal Cave Adventure",
        "note": "In the original Adventure (1976), deep in the maze was a vending\nmachine that sold fresh batteries for your lamp. It was both a\nlifeline and a cruel reminder that someone had built infrastructure\nin this death trap but not, you know, an EXIT SIGN.\n"
      },
      "id": "maze/room-j/lamp-vendor",
      "_source": "maze/room-j/lamp-vendor.yml",
      "location": "maze/room-j",
      "synonyms": [
        "lamp-vendor",
        "acme dungeon supply depot",
        "supply",
        "dungeon",
        "depot",
        "acme"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/e2/infinite-fountain": {
      "name": "Fountain of Infinite Loops",
      "type": "landmark",
      "portable": false,
      "status": "dry",
      "description": "A stone fountain in the center of a small plaza. Currently dry,\nbut impressive in its recursive design.\n",
      "examine": "THE FOUNTAIN OF INFINITE LOOPS\n\nA masterwork of virtual-world sculpture:\n\nAt the center, a stone figure holds a jug, pouring water into...\nanother jug held by the same figure, which pours into...\nanother jug held by the same figure, which pours into...\n\nIt's recursive. It's impossible. It's deeply satisfying.\n\nA plaque on the rim:\n\n┌─────────────────────────────────────────────────────┐\n│  THE FOUNTAIN OF INFINITE LOOPS                     │\n│                                                     │\n│  \"What flows out must flow in\"                      │\n│                                                     │\n│  Commissioned by the Guild of Eternal Recursion     │\n│  Unveiled: Whenever                                 │\n│  Status: DRY (water sprites on strike since 2019)   │\n│                                                     │\n│  TO RESTORE: Find a water sprite willing to work    │\n│  for exposure. (Good luck.)                         │\n└─────────────────────────────────────────────────────┘\n\nThe basin is cracked and dry. Leaves have gathered.\nSomeone left a rubber duck in the empty pool.\n\nBut the sculpture itself is beautiful — if you trace the water\npath with your eyes, you get dizzy. It has no beginning or end.\n\n(Just like Lane Neverending itself.)\n",
      "actions": {
        "TRACE": {
          "description": "Follow the water path with your eyes",
          "effect": "You trace the path: jug to jug to jug to jug...\n\nYour eyes spiral. Your brain protests.\n\nFor a moment, you understand recursion on a visceral level.\nThen the moment passes and you're just dizzy.\n"
        },
        "WISH": {
          "description": "Toss a coin and make a wish",
          "effect": "You toss a coin into the empty basin.\n\n*clink*\n\nIt joins a small pile of coins from hopeful passers-by.\nWishes made to a dry fountain. Hope persists anyway.\n\n(Your wish is noted. Results may vary.)\n"
        },
        "DUCK": {
          "description": "Examine the rubber duck",
          "effect": "A yellow rubber duck sits in the dry fountain basin.\nSomeone drew a tiny hat on it with marker.\nA label on the bottom: \"DEBUG DUCK — For Testing Purposes\"\n\nIt squeaks when you squeeze it.\n\nFor some reason, this makes you feel better.\n"
        }
      },
      "the_water_sprites": {
        "status": "On strike",
        "demands": [
          "Fair wages (currently: 0)",
          "Health benefits (water is heavy!)",
          "Recognition (we're not just 'special effects')"
        ],
        "willing_to_negotiate": true,
        "contact": "Leave a note at the fountain"
      },
      "id": "street/lane-neverending/e2/infinite-fountain",
      "_source": "street/lane-neverending/e2/infinite-fountain.yml",
      "location": "street/lane-neverending/e2",
      "synonyms": [
        "fountain of infinite loops",
        "loops",
        "infinite-fountain",
        "fountain",
        "infinite"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/center/sandwich-board": {
      "name": "Sandwich Board",
      "type": "sign",
      "portable": false,
      "belongs_to": "The Gezelligheid Grotto",
      "description": "A wooden A-frame sign on the cobblestones in front of the pub.\nHand-chalked with today's offerings.\n",
      "examine": "╔═══════════════════════════════╗\n║   THE GEZELLIGHEID GROTTO           ║\n║   7 Lane Neverending          ║\n╠═══════════════════════════════╣\n║                               ║\n║   TODAY'S SPECIALS:           ║\n║                               ║\n║   🍺 Ale ............ 1 gold  ║\n║   🥧 Mystery Pie .... 3 gold  ║\n║   📖 A Good Story ... FREE    ║\n║                               ║\n║   ─────────────────────────   ║\n║                               ║\n║   \"COME FOR THE ALE,          ║\n║    STAY FOR THE TALES\"        ║\n║                               ║\n║   Open: Always                ║\n║   Closed: Never               ║\n║                               ║\n╚═══════════════════════════════╝\n\nAt the bottom, in smaller chalk:\n\"Ask about the ROOMS UPSTAIRS\"\n\"Ask about the MYSTERIOUS BACK DOOR\"\n\"Don't ask about the CELLAR (seriously)\"\n",
      "id": "street/lane-neverending/center/sandwich-board",
      "_source": "street/lane-neverending/center/sandwich-board.yml",
      "location": "street/lane-neverending/center",
      "synonyms": [
        "sandwich",
        "sandwich board",
        "board",
        "sandwich-board"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/center/street-sign": {
      "name": "Street Sign",
      "type": "sign",
      "portable": false,
      "description": "A wrought-iron post topped with a green street sign.\nThe lettering is gold, slightly weathered but dignified.\n",
      "examine": "┌────────────────────────────────┐\n│      LANE NEVERENDING          │\n│   ←  W  ·  7  ·  E  →         │\n└────────────────────────────────┘\n\nBelow the main sign, a smaller plaque:\n\n\"Named in tribute to the virtual worlds\n that came before and never truly ended:\n Habitat · Game Neverending · Glitch\"\n \nSomeone has stuck a small sticker on the post:\n\"The lane never ends. Neither do we. 🌟\"\n",
      "id": "street/lane-neverending/center/street-sign",
      "_source": "street/lane-neverending/center/street-sign.yml",
      "location": "street/lane-neverending/center",
      "synonyms": [
        "sign",
        "street",
        "street sign",
        "street-sign"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/e3/construction-site": {
      "name": "Construction Site",
      "type": "landmark",
      "portable": false,
      "status": "perpetually under construction",
      "description": "The eastern edge of Lane Neverending is a construction site.\nThe world is still being built here.\n",
      "examine": "THE FRONTIER CONSTRUCTION SITE\n\nWhere the cobblestones end, possibility begins.\n\nWHAT YOU SEE:\n• Stakes with string marking future streets\n• Piles of cobblestones waiting to be laid\n• Surveying equipment (theodolite, measuring tape, dreams)\n• A construction trailer labeled \"WORLD BUILDERS LOCAL #1\"\n• A porta-potty (even builders need facilities)\n\nTHE SIGN:\n┌─────────────────────────────────────────┐\n│  🚧 UNDER CONSTRUCTION 🚧               │\n│                                         │\n│  LANE NEVERENDING EXPANSION PROJECT     │\n│  \"Building tomorrow's memories today\"   │\n│                                         │\n│  Coming Soon:                           │\n│  • More street segments                 │\n│  • Intersections                        │\n│  • Shops & homes                        │\n│  • Your ideas here                      │\n│                                         │\n│  GIANTS AT WORK — Please be patient     │\n└─────────────────────────────────────────┘\n\nA BULLETIN BOARD near the trailer:\n• Job postings for \"World Builders\" (experience preferred)\n• A map showing planned expansions (very ambitious)\n• A petition: \"MORE PARKS\" (47 signatures)\n• A counter-petition: \"FEWER PARKS MORE PUBS\" (48 signatures)\n\nTHE FEELING:\nStanding here, you feel the potential. The world isn't finished.\nIt's still being written. And you're part of the story.\n",
      "actions": {
        "BUILD": {
          "description": "Contribute to the construction",
          "effect": "You pick up a cobblestone and place it carefully.\n\nIt's not much. But it's something. Every world is built\none stone at a time.\n\nA builder waves from the trailer: \"Thanks, volunteer!\"\n"
        },
        "SIGN_PETITION": {
          "description": "Sign one of the petitions",
          "effect": "Which petition?\n- \"MORE PARKS\" (currently losing: 47 signatures)\n- \"FEWER PARKS MORE PUBS\" (currently winning: 48 signatures)\n\nYou add your name. Democracy in action.\n"
        },
        "DREAM": {
          "description": "Imagine what could be built here",
          "effect": "You close your eyes and imagine...\n\n• A market square with vendors from across virtual worlds\n• A park with a statue of forgotten game characters\n• A theater where stories come to life\n• A library of every world that ever was\n• Your own home, with a garden and a view\n\nAnything is possible. The ground is ready.\nThe builders are waiting.\nWhat should they build next?\n"
        }
      },
      "builder_wisdom": "\"We don't build worlds alone. We build them together.\nEvery player who walks these streets is a co-creator.\nThe lane never ends because we keep adding to it.\"\n\n— First Principle of the World Builders Guild\n",
      "id": "street/lane-neverending/e3/construction-site",
      "_source": "street/lane-neverending/e3/construction-site.yml",
      "location": "street/lane-neverending/e3",
      "synonyms": [
        "site",
        "construction",
        "construction-site",
        "construction site"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/no-ai-tower/sign": {
      "name": "THE SIGN",
      "type": "architectural_feature",
      "emoji": "🌟💡🚫🤖",
      "specs": {
        "height": "40 feet",
        "width": "25 feet",
        "depth": "6 feet (including support structure)",
        "weight": "approximately 3,500 lbs",
        "age": "Built 2026",
        "style": "Old Las Vegas / Desert Highway Casino"
      },
      "appearance": "╭─────────────────────────────────────────────────────────────────╮\n│   ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·     │\n│                                                                 │\n│                    ╔═══════════════════╗                        │\n│                 ╔══╝                   ╚══╗                     │\n│              ╔══╝    ✦  ★  ✦  ★  ✦       ╚══╗                  │\n│            ══╝                               ╚══                │\n│           ║                                     ║               │\n│           ║      ▐█▄░▐██░░░█████░░▐██░        ║               │\n│           ║      ▐█▀█▌█▄█░░█░░░█░░▐█░█░       ║               │\n│           ║      ▐█░▐▌█░█░░█████░░▐█░█░       ║               │\n│           ║                                     ║               │\n│           ║      ▀▀█▀█░█▀█░▐█░░░▐██░▐██░     ║               │\n│           ║      ░░█░█░█░█░▐█░█░▐█▀░░▐█░░     ║               │\n│           ║      ░░█░▀▀▀▀░░▐███░▐███░▐█░░     ║               │\n│           ║                                     ║               │\n│           ║           ↓ SINCE 2026 ↓           ║               │\n│           ║                                     ║               │\n│            ══╗                               ╔══                │\n│              ╚══╗    ✦  ★  ✦  ★  ✦       ╔══╝                  │\n│                 ╚══╗                   ╔══╝                     │\n│                    ╚═══════════════════╝                        │\n│                                                                 │\n│   ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·  *  ·     │\n╰─────────────────────────────────────────────────────────────────╯\n",
      "lighting": {
        "neon_tubes": {
          "main_text_NO": {
            "color": "Hot pink (magenta)",
            "length": "8 feet per letter",
            "condition": "good"
          },
          "main_text_AI": {
            "color": "Hot pink (magenta)",
            "length": "6 feet per letter",
            "condition": "the 'I' flickers occasionally"
          },
          "sub_text_TOWER": {
            "color": "Warm gold (amber)",
            "type": "incandescent bulbs, not neon",
            "count": 127,
            "condition": "3 bulbs dead, 2 stuck on"
          },
          "decorative": {
            "starbursts": {
              "count": 4,
              "size": "30 inches each",
              "color": "teal with gold tips",
              "animation": "synchronized blink"
            },
            "border_chasers": {
              "count": "200+",
              "color": "teal",
              "pattern": "clockwise chase",
              "speed": "one rotation per 4 seconds",
              "bugs": "17 bulbs stuck ON, 8 stuck OFF"
            },
            "arrow": {
              "pointing": "DOWN at the building",
              "message": "yes, THIS is the tower",
              "color": "gold incandescent"
            },
            "robot_prohibition": {
              "shape": "circle with diagonal line through robot silhouette",
              "diameter": "4 feet",
              "color": "red neon",
              "robot_style": "1950s sci-fi"
            }
          }
        },
        "electrical": {
          "transformer": "Shared with Leela Manufacturing (awkward)",
          "draw": "~15kW when fully lit",
          "monthly_cost": "$800-1200 depending on season",
          "percentage_of_rent": "probably more than the rent"
        }
      },
      "animation": {
        "type": "sequential_illumination",
        "sequence": [
          {
            "time": 0.0,
            "action": "All dark except border chasers"
          },
          {
            "time": 0.5,
            "action": "N illuminates with pink neon buzz",
            "sound": "zzzZZAP"
          },
          {
            "time": 1.0,
            "action": "O illuminates (except dead bulb)",
            "sound": "zzzZZAP"
          },
          {
            "time": 1.5,
            "action": "A illuminates",
            "sound": "zzzZZAP"
          },
          {
            "time": 2.0,
            "action": "I illuminates (flickers once)",
            "sound": "zzzZAP-zzt"
          },
          {
            "time": 2.5,
            "action": "TOWER illuminates all at once",
            "sound": "CHUNK (relay sound)"
          },
          {
            "time": 3.0,
            "action": "Starbursts flash three times",
            "sound": "tik-tik-tik"
          },
          {
            "time": 4.0,
            "action": "Robot prohibition pulses"
          },
          {
            "time": 5.0,
            "action": "Arrow blinks pointing DOWN"
          },
          {
            "time": 6.0,
            "action": "Everything holds"
          },
          {
            "time": 7.5,
            "action": "Random flicker (character)"
          },
          {
            "time": 8.0,
            "action": "Repeat"
          }
        ],
        "cycle_duration": "8 seconds",
        "runs": "dusk to 2 AM (automatic timer)"
      },
      "sound": {
        "constant": "A 60Hz electrical hum. Warm. Buzzy. The sound of COMMITMENT.\nAudible from the pub on quiet nights.\n",
        "intermittent": [
          "CHUNK when relays switch (every 8 seconds)",
          "Crackle when moisture in the air",
          "Occasional POP when a bulb gives up",
          "ZZZzzap when the 'I' flickers"
        ],
        "neighbors_complaints": "documented"
      },
      "history": {
        "commission_date": "2026-03-15",
        "installation_date": "2026-04-01",
        "cost": "Nobody will say, but it was a LOT",
        "designer": "Allegedly a retired Vegas sign maker",
        "backstory": "When NO AI TOWER took over the old shoe repair shop,\nthe first and ONLY renovation was THE SIGN.\n\nThe building still has Sal's Shoe Repair's old floor tiles.\nBut THE SIGN? Custom designed. Professionally installed.\nPermitted (barely). Inspected (eventually).\n\nThe neighbors petitioned. The sign stayed.\nThe city complained. The sign stayed.\nLeela offered to buy the property. The sign stayed.\n\nThe sign is the statement.\nThe building is just what holds it up.\n"
      },
      "symbolism": {
        "primary": "All resources into the message, not the infrastructure",
        "secondary": "Anti-AI sentiment expressed through impressive technology",
        "tertiary": "TRUMP TOWER parody (audacity over substance)",
        "quaternary": "Desert highway optimism meets tech skepticism",
        "irony_layers": [
          "The sign requires significant tech to operate",
          "It's powered by the same grid as an AI company",
          "Vegas signs celebrated THE FUTURE; this one mourns it",
          "The sign IS impressive; the 'tower' is one story"
        ]
      },
      "examine_close": "Up close, you can see:\n- The welds on the support structure (solid work)\n- The transformer box (humming industriously)\n- The timer mechanism (analog, not digital — of course)\n- Dead bulbs waiting for replacement\n- Wasp nests in two of the starbursts\n- A small plaque: \"Fabricated by Desert Neon Classics, Reno NV\"\n",
      "examine_from_afar": "From the pub, you can see THE SIGN clearly.\nIt dominates the western skyline of Lane Neverending.\n\nAt night, it outshines Leela Manufacturing's dignified facade.\nThe contrast is... pointed.\n",
      "rumors": [
        "The sign predates the building (impossible but widely believed)",
        "The dead bulb in the O is INTENTIONAL",
        "It spells out messages if you watch long enough",
        "Leela's cameras are analyzing the flicker patterns",
        "Someone inside NO AI TOWER controls it manually",
        "It once saved a ship from running aground (wrong tower)"
      ],
      "id": "street/lane-neverending/no-ai-tower/sign",
      "_source": "street/lane-neverending/no-ai-tower/sign.yml",
      "location": "street/lane-neverending/no-ai-tower",
      "synonyms": [
        "sign",
        "the sign",
        "the"
      ],
      "description": "A the sign.",
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/scale-model": {
      "id": "street/lane-neverending/leela-manufacturing/scale-model",
      "name": "Scale Model",
      "type": "display",
      "emoji": "🏭",
      "description": "A detailed scale model of the entire Leela Manufacturing\ncomplex sits in a glass case. Tiny lights blink. Miniature\nforklifts move on tracks. It's oddly mesmerizing.\n",
      "examine": "SCALE MODEL — LEELA MANUFACTURING IN MINIATURE\n\nUnder a clear glass dome, a 1:100 scale model of the\nentire Leela facility. Incredible detail. Moving parts.\n\nWHAT YOU CAN SEE:\n\nBUILDING CUTAWAY:\n┌─────────────────────────────────┐\n│ 🌿 Rooftop — tiny drones land   │\n│ 3  Shipping — packages move     │\n│ 2  Factory — cells light up     │\n│ 1  Intake — conveyor runs       │\n│ G  Lobby — YOU ARE HERE (dot)   │\n│ B  Basement — glow from R&D     │\n└─────────────────────────────────┘\n\nSURROUNDING AREAS:\n• Loading docks with tiny trucks\n• Storage complex (Container stacks!)\n• Rail siding with actual model train\n• Lane Neverending (with tiny pub!)\n\nMOVING ELEMENTS:\n• Conveyor belts turn slowly\n• Drones take off and land\n• Tiny Dolly the forklift patrols\n• Elevator car moves between floors\n• Pneumatic capsules (represented by lights)\n\nBUTTON PANEL:\n[LIGHTS] [ANIMATION] [HIGHLIGHT] [ZOOM]\n\nSign: \"Please do not tap glass.\n       The model inhabitants startle easily.\"\n",
      "properties": {
        "scale": "1:100",
        "features": [
          "Building cutaway",
          "Moving conveyors",
          "Working model train",
          "LED lighting",
          "Animated drones"
        ],
        "built_by": "Leela Model Shop"
      },
      "methods": {
        "OBSERVE": {
          "description": "Watch the model in action",
          "effect": "You watch the miniature facility operate.\n\nA tiny truck backs into Bay 2.\nThe conveyor carries a speck from Floor 1 to Floor 2.\nA drone lifts off from the rooftop.\n\nIt's hypnotic.\n"
        },
        "HIGHLIGHT": {
          "description": "Highlight a specific area",
          "parameters": [
            "area"
          ],
          "effect": "That section lights up brighter, showing detail."
        },
        "ZOOM": {
          "description": "Use the magnifier",
          "effect": "A magnifying lens swings over the selected area."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/scale-model.yml",
      "location": "street/lane-neverending/leela-manufacturing",
      "synonyms": [
        "scale-model",
        "scale",
        "model",
        "scale model"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/visitor-badges": {
      "id": "street/lane-neverending/leela-manufacturing/visitor-badges",
      "name": "Visitor Badges",
      "type": "credentials",
      "emoji": "🎫",
      "description": "A rack of visitor badges near the reception desk.\nDifferent colors for different access levels.\nAlex assigns the appropriate one when you sign in.\n",
      "examine": "VISITOR BADGES — ACCESS CREDENTIALS\n\nA neat rack of clip-on badges, color-coded:\n\n┌────────────────────────────────────────────┐\n│  LEELA MANUFACTURING VISITOR BADGES        │\n├────────────────────────────────────────────┤\n│                                            │\n│  🟢 GREEN — Public Areas                   │\n│     Lobby, waiting area, restrooms         │\n│     \"Casual Visitor\"                       │\n│                                            │\n│  🔵 BLUE — General Tour                    │\n│     Floors 1-3, loading docks, storage     │\n│     \"Touring Guest\"                        │\n│                                            │\n│  🟡 YELLOW — Business                      │\n│     + Mail room, logistics center          │\n│     \"Business Partner\"                     │\n│                                            │\n│  🟠 ORANGE — Technical                     │\n│     + Basement labs (escorted)             │\n│     \"Technical Visitor\"                    │\n│                                            │\n│  🔴 RED — Full Access                      │\n│     Everywhere except Warehouse 23         │\n│     \"VIP / Consultant\"                     │\n│                                            │\n│  ⬛ BLACK — Classified                     │\n│     (You won't see these on the rack)      │\n│     \"If you need to ask, you don't have it\"│\n│                                            │\n└────────────────────────────────────────────┘\n\nEach badge includes:\n• Visitor name (handwritten)\n• Date of visit\n• Escort name (if required)\n• Access level color\n• Leela logo\n• \"Please return before leaving\"\n",
      "badge_levels": {
        "green": {
          "name": "Casual Visitor",
          "access": [
            "Lobby",
            "Waiting area",
            "Restrooms"
          ]
        },
        "blue": {
          "name": "Touring Guest",
          "access": [
            "+ Floors 1-3",
            "Loading docks",
            "Storage"
          ]
        },
        "yellow": {
          "name": "Business Partner",
          "access": [
            "+ Mail room",
            "Logistics center"
          ]
        },
        "orange": {
          "name": "Technical Visitor",
          "access": [
            "+ Basement labs (escorted)"
          ]
        },
        "red": {
          "name": "VIP / Consultant",
          "access": [
            "All except Warehouse 23"
          ]
        },
        "black": {
          "name": "Classified",
          "access": [
            "You don't need to know"
          ]
        }
      },
      "methods": {
        "TAKE": {
          "description": "Take a badge",
          "effect": "Alex assigns you an appropriate badge.\n\n\"Here you go! Please wear this visibly.\n Return it when you leave. Enjoy your visit!\"\n \n"
        },
        "RETURN": {
          "description": "Return your badge",
          "effect": "You hand back the badge.\n\n\"Thank you for visiting Leela Manufacturing!\n Come back anytime.\"\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/visitor-badges.yml",
      "location": "street/lane-neverending/leela-manufacturing",
      "synonyms": [
        "badges",
        "visitor badges",
        "visitor",
        "visitor-badges"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/camera-acm1": {
      "name": "Camera ACM1 — Tunnel Watcher",
      "type": [
        "camera",
        "monument",
        "reminder"
      ],
      "emoji": "📹🎭🚫",
      "location": "street/lane-neverending/leela-manufacturing",
      "target": "ACME Surplus building (4 Lane Neverending)",
      "description": "A Leela camera mounted in the lobby window, pointed across the street\nat the shuttered ACME Surplus building. Wide-angle lens captures:\n\n1. THE PAINTED TUNNEL — on the boarded-up side window\n2. THE FRONT WINDOW — large, unboarded, view into showroom/warehouse\n3. THE ENTRANCE — locked door, break-in attempts visible\n\nThe feed runs on a small monitor at reception. Every visitor sees it.\nEvery employee passes it. Every day, the reminder:\n\n\"This is what happens when you ship products that don't work.\"\n",
      "coverage": "ACM1 can't see everything inside ACME, but the large front window\nprovides visibility into the main showroom area. Detectable events:\n\n- BREAK-INS: Glass breaking, door forced, figures entering\n- SMOKE: Visible through window (frequent, given ACME product quality)\n- BEE SWARMS: Escaped from ACME Bee Cannon products (monthly)\n- ANVIL DROPS: Distinctive dust clouds, screaming\n- EXPLOSIONS: Flash, smoke, cartoon physics aftermath\n- ESCAPE ATTEMPTS: Intruders fleeing, often on fire\n\nThe tunnel is on a boarded window — can only see approach/bounce.\nThe front window is unboarded — partial interior visibility.\n",
      "purpose": "ACM1 serves multiple purposes:\n\n1. ANOMALY DETECTION\n   The tunnel is \"magic\" — delivery drivers pass through it, customers\n   cannot. ACM1 detects this anomaly and logs it:\n   \n   \"Entity: delivery_truck. Action: approached_tunnel. Result: PASSED_THROUGH.\"\n   \"Entity: pedestrian. Action: approached_tunnel. Result: BOUNCED.\"\n   \"Entity: tesla_fsd. Action: approached_tunnel. Result: COLLISION. (Again.)\"\n   \n2. PATTERN RECOGNITION\n   Over time, ACM1 has learned:\n   - Who can pass through (ACME employees, delivery drivers, cartoon physics)\n   - Who cannot (customers, Teslas, anyone with expectations)\n   - When attempts peak (Tuesdays, new moon, after viral tweets)\n   \n3. DAILY REMINDER\n   Every Leela employee sees the tunnel every day.\n   Every meeting starts with \"What's the ACME tunnel trying to teach us?\"\n   \n   Answers vary:\n   - \"Don't paint solutions. Build them.\"\n   - \"Magic only works for some people. Real engineering works for everyone.\"\n   - \"If your product requires cartoon physics, maybe rethink the product.\"\n   \n",
      "feed": {
        "resolution": "1080p",
        "framerate": 30,
        "storage": "30 days rolling",
        "highlights": [
          "FSD collision compilation (27 incidents)",
          "Delivery truck phase-through montage",
          "Tourist disappointment supercut"
        ]
      },
      "analytics": {
        "tunnel_detection": {
          "pedestrians_approaching": 4891,
          "pedestrians_bouncing": 4891,
          "delivery_trucks_passing": 247,
          "teslas_colliding": 27,
          "confused_tourists": 1203
        },
        "warehouse_detection": {
          "break_in_attempts": 14,
          "successful_entries": 8,
          "smoke_events": 23,
          "bee_swarm_escapes": 4,
          "anvil_drops_visible": 31,
          "explosions": 12,
          "figures_fleeing_on_fire": 6
        },
        "pose_detection": {
          "flattened_against_tunnel": {
            "coyote_silhouettes": 47,
            "tourist_silhouettes": 89,
            "vehicle_impacts": 31,
            "tesla_accordions": 27
          },
          "cartoon_holes": {
            "coyote_shaped": 3,
            "tourist_shaped": 7,
            "vehicle_shaped": 2,
            "anvil_shaped": 12
          },
          "alignment_analysis": [
            "Splat pattern indicates velocity at impact",
            "Hole shape matches entity that created it (cartoon physics)",
            "Tesla crumple zones create distinctive accordion pattern",
            "Coyote impacts often leave dust cloud + stars animation"
          ]
        },
        "patterns_learned": [
          "Painted tunnels work for insiders, not customers",
          "Expectation management > painted solutions",
          "FSD does not understand trompe l'oeil",
          "Break-ins peak on weekends (adventurers have free time)",
          "Smoke usually precedes screaming by 3-7 seconds",
          "Bee swarms disperse within 15 minutes",
          "Coyote-shaped holes heal within 24 hours",
          "Tourist-shaped holes persist until someone notices"
        ],
        "anomalies_flagged": [
          "2026-01-17: Break-in detected. Anvil drop at 00:14:32. Smoke at 00:14:35.",
          "2026-01-15: Coyote-shaped hole detected in east wall. Self-healed by morning.",
          "2026-01-10: Tesla Model S accordion pattern. Driver emerged, walked in circles, saw stars.",
          "2026-01-03: Tesla attempted tunnel at 60mph. Again. Silhouette persisted 4 hours.",
          "2025-12-25: Tourist family flattened against tunnel. Peeled off, walked away dazed.",
          "2025-12-17: Pigeon flew through tunnel. How??",
          "2025-11-28: ACME drone emerged, looked around, returned.",
          "2025-11-15: Bee swarm escaped. Reformed into question mark shape. Dispersed.",
          "2025-10-31: Figure in coyote costume entered. Did not exit. Smoke visible.",
          "2025-10-12: Cybertruck-shaped hole in front wall. Hole matches vehicle exactly. Still there."
        ]
      },
      "the_lesson": "The ACME tunnel is a perfect metaphor:\n\n- It LOOKS like a solution\n- It WORKS for some people (the insiders)\n- It FAILS for customers (the people you're supposed to serve)\n- It DECEIVES (and Teslas believe the deception)\n\nLeela's job is to build solutions that work for EVERYONE.\nNot painted tunnels that only work for delivery drivers.\n\nACM1 reminds us of this. Every day. Every frame.\n",
      "quotes": {
        "don_hopkins": "\"ACME's tunnel is the perfect anti-pattern. It's a solution that works\nexactly as well as the customer can't see it working. Leela is the opposite:\nwe make the invisible visible. We don't paint solutions. We BUILD them.\"\n",
        "the_coordinator": "\"We got three orders for 'ACME-compatible Tesla repair kits' after\nthe last FSD incident. We don't sell those. But we did add a new\ntraining dataset: 'painted_tunnel_detection.'\"\n",
        "eventually_the_tortoise": "\"........................\" \n(Translation: \"In 50 million years, the paint will fade. \n The lesson will remain. Shortcuts don't work. Ever.\")\n \n"
      },
      "advertisements": [
        {
          "trigger": "tunnel",
          "score": 0.9,
          "response": "*The camera pans slightly toward the ACME tunnel*\n\nThat's the tunnel. Painted in 1952. Still fools Teslas.\n\nWatch... wait for it... there. See that ACME delivery truck?\nIt just drove straight through. Like the wall isn't there.\n\nNow watch this tourist... and... bounce. The wall is very there.\n\nThat's the difference between solutions that work for insiders\nand solutions that work for everyone. ACME built for insiders.\nLeela builds for everyone.\n"
        },
        {
          "trigger": "ACME",
          "score": 0.8,
          "response": "ACME Surplus. Our neighbors across the street. Our anti-pattern.\n\nThey sold products that didn't work and blamed the customer.\nWe sell understanding that works and empowers the customer.\n\nThey left a painted tunnel and 27 Tesla crashes.\nWe've had 847 days since our last paradox incident.\n\nThe tunnel is a daily reminder. We look at it every morning.\nWe will never be that.\n"
        }
      ],
      "id": "street/lane-neverending/leela-manufacturing/camera-acm1",
      "_source": "street/lane-neverending/leela-manufacturing/camera-acm1.yml",
      "synonyms": [
        "tunnel",
        "watcher",
        "camera",
        "acm1",
        "camera acm1 — tunnel watcher",
        "camera-acm1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/reception-desk": {
      "id": "street/lane-neverending/leela-manufacturing/reception-desk",
      "name": "Reception Desk",
      "type": "furniture",
      "emoji": "🛎️",
      "description": "A curved desk of polished wood and brushed steel at the\nentrance to Leela Manufacturing. The receptionist smiles\nwarmly. Behind them, the Leela logo glows gentle gold.\n",
      "examine": "RECEPTION DESK — WELCOME TO LEELA\n\nA beautiful curved desk combining wood warmth with\nsteel precision. The Leela aesthetic in furniture form.\n\nBEHIND THE DESK:\n• The Leela logo, backlit in soft gold\n• Monitor showing visitor schedule\n• Phone with direct lines to all departments\n• Visitor sign-in tablet\n• Small vase with fresh flowers (changed daily)\n\nON THE DESK:\n• Bell (please ring for service)\n• Brochures (\"What We Do\", \"How We Help\", \"The Tortoise\")\n• Dish of mints (help yourself)\n• Sign: \"Welcome to Leela Manufacturing Intelligence\"\n\nTHE RECEPTIONIST:\nAlex sits behind the desk, warm smile ready.\nThey know everyone's name, every appointment,\nand where to find the best coffee.\n\"How can I help you today?\"\n",
      "occupant": {
        "name": "Alex",
        "role": "Receptionist",
        "demeanor": "Warm, helpful, knows everything",
        "skills": [
          "Greeting visitors",
          "Scheduling tours",
          "Answering questions",
          "Summoning the right person"
        ]
      },
      "methods": {
        "RING": {
          "description": "Ring the bell",
          "effect": "*ding!*\n\nAlex looks up with a smile.\n\"Hello! How can I help you?\"\n"
        },
        "ASK": {
          "description": "Ask Alex a question",
          "parameters": [
            "question"
          ],
          "effect": "Alex provides helpful information or direction."
        },
        "SIGN_IN": {
          "description": "Sign in as a visitor",
          "effect": "Alex hands you a visitor badge and welcomes you."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/reception-desk.yml",
      "location": "street/lane-neverending/leela-manufacturing",
      "synonyms": [
        "reception-desk",
        "reception",
        "desk",
        "reception desk"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/w3/origin-tree": {
      "name": "The Origin Tree",
      "type": "landmark",
      "portable": false,
      "significance": "sacred",
      "description": "An ancient oak of impossible age, standing at the western origin\nof Lane Neverending. Its trunk is massive, its branches spread\nwide, and its roots — they say — go down to the bare metal.\n",
      "examine": "THE ORIGIN TREE\n\nThe oldest living thing on Lane Neverending. Possibly the oldest\nthing in this virtual world. Definitely older than it should be.\n\nTRUNK:\nWide enough that three avatars holding hands couldn't encircle it.\nThe bark is carved with initials, dates, and messages going back\ndecades — in virtual time, that's generations.\n\nSome visible carvings:\n• \"CM + RF '86\" — Chip Morningstar & Randy Farmer, Habitat founders\n• \"LK '95\" — Someone named LK, early explorer\n• \"GLITCH FOREVER 2012\" — Players who didn't want to forget\n• Fresh carvings still being added...\n\nBRANCHES:\nHome to birds, squirrels, and the occasional cat. Fairy lights\nhave been strung up, glowing softly in the evening. Someone hung\na tire swing once; it's still there, swaying.\n\nROOTS:\nThey break through the cobblestones in places, reminding everyone\nthat nature predates infrastructure. Stone circles and benches\nhave been placed around the roots for sitting and contemplation.\n\nTHE FEELING:\nStanding here, you feel... connected. To every avatar that walked\nbefore you. To every world that came and went. To the promise\nthat virtual worlds matter, that community persists, that the\nlane never truly ends.\n",
      "actions": {
        "CARVE": {
          "description": "Add your initials to the tree",
          "effect": "You carve your mark into the bark, joining the generations\nbefore you. Somewhere, a database entry is made. Your initials\nwill remain as long as the world exists.\n\n\"You were here. You mattered.\"\n"
        },
        "SIT": {
          "description": "Rest beneath the Origin Tree",
          "effect": "The shade is cool. The roots make surprisingly comfortable\nseats. The bustle of the street fades. You feel at peace.\n\nThis is a good place to think.\n"
        },
        "TOUCH": {
          "description": "Place your hand on the trunk",
          "effect": "The bark is rough and warm, as if the tree holds sunlight.\n\nFor a moment, you feel connected to everyone who has stood\nhere before. The founders. The pioneers. The players.\n\nThe tree remembers them all.\n"
        }
      },
      "id": "street/lane-neverending/w3/origin-tree",
      "_source": "street/lane-neverending/w3/origin-tree.yml",
      "location": "street/lane-neverending/w3",
      "synonyms": [
        "the origin tree",
        "the",
        "origin",
        "tree",
        "origin-tree"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/w3/origin-plaque": {
      "name": "Origin Plaque",
      "type": "sign",
      "portable": false,
      "material": "bronze",
      "description": "A bronze plaque set into the cobblestones at the base of the\nOrigin Tree. Well-maintained, polished, clearly important.\n",
      "examine": "┌─────────────────────────────────────────────────────────┐\n│                                                         │\n│           HERE BEGAN LANE NEVERENDING                   │\n│                                                         │\n│   Planted in the spirit of virtual worlds past:         │\n│                                                         │\n│   ════════════════════════════════════════════════      │\n│                                                         │\n│   HABITAT (1986)                                        │\n│   Chip Morningstar & Randy Farmer                       │\n│   \"The first avatars walked here.\"                      │\n│   They invented the word. They built the first world.   │\n│                                                         │\n│   ════════════════════════════════════════════════      │\n│                                                         │\n│   GAME NEVERENDING (2002)                               │\n│   Stewart Butterfield & Ludicorp                        │\n│   \"The name lives on.\"                                  │\n│   The game that became Flickr. The dream that persisted.│\n│                                                         │\n│   ════════════════════════════════════════════════      │\n│                                                         │\n│   GLITCH (2011-2012)                                    │\n│   Tiny Speck                                            │\n│   \"The giants remember.\"                                │\n│   The world of Ur lives in all who played there.        │\n│   Released to the public domain. Never truly gone.      │\n│                                                         │\n│   ════════════════════════════════════════════════      │\n│                                                         │\n│   \"A street that never ends                             │\n│    begins with a single step.\"                          │\n│                                                         │\n│                        — Ancient Avatar Proverb         │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n\nFlowers have been laid at the base of the plaque.\nSomeone left a candle, burned down to a stub.\nA small toy figure — a Glitch avatar — leans against the bronze.\n\nPeople still come here to remember.\n",
      "id": "street/lane-neverending/w3/origin-plaque",
      "_source": "street/lane-neverending/w3/origin-plaque.yml",
      "location": "street/lane-neverending/w3",
      "synonyms": [
        "plaque",
        "origin",
        "origin-plaque",
        "origin plaque"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/w2/glitch-memorial": {
      "name": "Glitch Memorial Bench",
      "type": "furniture",
      "portable": false,
      "significance": "sacred",
      "description": "A bronze bench in a small alcove between buildings, surrounded\nby a tiny garden of impossible flowers. A place of remembrance.\n",
      "examine": "THE GLITCH MEMORIAL BENCH\n\nBronze, weathered by virtual rain, polished by countless visitors.\nThe back is engraved:\n\n┌─────────────────────────────────────────────────────┐\n│                                                     │\n│           IN MEMORY OF GLITCH                       │\n│              (2011 - 2012)                          │\n│                                                     │\n│     The world of Ur lives on in all who played.    │\n│                                                     │\n│     \"The giants still dream. We still remember.\"    │\n│                                                     │\n└─────────────────────────────────────────────────────┘\n\nTHE GARDEN:\nFlowers that shouldn't exist outside Ur, but somehow do:\n• Sparkly (glows faintly)\n• Awesome Stew ingredients (aromatic)\n• Paper trees (rustling softly)\n\nOFFERINGS LEFT BY VISITORS:\n• Fresh flowers (someone comes regularly)\n• A small Glitch avatar figurine\n• A burned-down candle\n• A note: \"I still have my house key\"\n• Another note: \"Friendly remembers\"\n\nNames scratched into the back of the bench — players who\nwanted to be remembered in Ur forever:\n\nGlitchGirl2011 · UrExplorer · TinySpecker · Rube42\nMazeRunner · JujuBeetle · ButterScotch · AlphaDreamer\n... (hundreds more, in smaller and smaller letters)\n",
      "actions": {
        "SIT": {
          "description": "Rest on the memorial bench",
          "effect": "You sit. The bronze is warm, despite the shade.\n\nFor a moment, you hear distant music — the Glitch soundtrack?\nLaughter from a world that no longer exists.\n\nYou feel... remembered. As if the bench knows you were here.\n"
        },
        "LEAVE_OFFERING": {
          "description": "Leave something at the memorial",
          "effect": "You add your offering to the collection. A small gesture.\nBut small gestures are how worlds are built.\n\nThe flowers seem to lean toward your gift.\n"
        },
        "REMEMBER": {
          "description": "Think about Glitch",
          "effect": "You close your eyes and remember — or imagine — Ur.\n\nStreets that twisted impossibly. Giants who dreamed the world.\nA community that loved each other fiercely for one brief year.\n\nWhen Glitch closed, they released everything to the public domain.\nThe art. The music. The code. A final gift.\n\n\"We were here. We mattered. Take what we made and make more.\"\n"
        }
      },
      "the_eleven_giants": {
        "note": "The world of Ur was dreamed by eleven Giants",
        "giants": [
          {
            "Friendly": "Giant of Friendship"
          },
          {
            "Grendaline": "Giant of Green Growing Things"
          },
          {
            "Humbaba": "Giant of Mountains and Caves"
          },
          {
            "Lem": "Giant of Night and the Mind"
          },
          {
            "Mab": "Giant of Harvests and Crafting"
          },
          {
            "Pot": "Giant of Prosperity"
          },
          {
            "Spriggan": "Giant of Mischief"
          },
          {
            "Tii": "Giant of the Elements"
          },
          {
            "Cosma": "Giant of Everything Else"
          },
          {
            "Alph": "Giant of Creation"
          },
          {
            "Zille": "Giant of Mountains and Caves (the other one)"
          }
        ]
      },
      "id": "street/lane-neverending/w2/glitch-memorial",
      "_source": "street/lane-neverending/w2/glitch-memorial.yml",
      "location": "street/lane-neverending/w2",
      "synonyms": [
        "glitch-memorial",
        "glitch",
        "memorial",
        "glitch memorial bench",
        "bench"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/e1/sleeping-figure": {
      "name": "Sleeping Figure",
      "type": "npc",
      "portable": false,
      "state": "dormant",
      "description": "A figure wrapped in a patchwork cloak, sleeping on a bench.\nThey've been there as long as anyone can remember.\n",
      "examine": "THE SLEEPING FIGURE\n\nWrapped in a cloak made of patches from a hundred different\nvirtual worlds — you recognize fabric from Habitat, Glitch,\nSecond Life, and places you can't name.\n\nTheir face is obscured. Their breathing is slow and steady.\nToo steady. Suspiciously steady.\n\nA cardboard sign leans against the bench:\n\n┌─────────────────────────────────────┐\n│  WAITING FOR THE NEXT WORLD         │\n│                                     │\n│  (Please do not wake)               │\n│  (I'll know when it's time)         │\n│                                     │\n│  Tips appreciated but not expected. │\n└─────────────────────────────────────┘\n\nA tin cup sits nearby, containing:\n• A few coins from currencies that no longer exist\n• A button that says \"I ♥ UR\"\n• A folded note\n\nTHE NOTE (if you read it):\n\"I was there when Habitat opened. I was there when Glitch closed.\nI'll be there when the next great world begins. Wake me then.\"\n",
      "actions": {
        "WAKE": {
          "description": "Try to wake the figure",
          "effect": "You reach out...\n\nThe figure shifts slightly. Mumbles something that sounds\nlike \"not yet... still dreaming...\"\n\nThey don't wake. They're waiting for something specific.\nSomething that hasn't happened yet.\n"
        },
        "TIP": {
          "description": "Leave something in the cup",
          "effect": "You add your offering to the cup.\n\nThe figure doesn't stir, but you could swear the corner\nof their mouth twitches upward. Just slightly.\n\n\"Thanks,\" they murmur, still asleep. \"See you in the next one.\"\n"
        },
        "READ_NOTE": {
          "description": "Read the note in the cup",
          "effect": "The note is old, written in careful handwriting:\n\n\"I was there when Habitat opened. I was there when Glitch\nclosed. I'll be there when the next great world begins.\n\nWake me then.\n\n— A. Veteran (Avatar since '86)\"\n"
        }
      },
      "secret": {
        "identity": "The sleeping figure is one of the original Habitat beta testers.\nThey've been \"sleeping\" across virtual worlds for decades,\nwaking only when something truly new begins.\n\nThey'll wake for MOOLLM. Eventually. When it's ready.\n"
      },
      "id": "street/lane-neverending/e1/sleeping-figure",
      "_source": "street/lane-neverending/e1/sleeping-figure.yml",
      "location": "street/lane-neverending/e1",
      "synonyms": [
        "sleeping",
        "sleeping-figure",
        "figure",
        "sleeping figure"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/e1/flickering-lamppost": {
      "name": "Flickering Lamp Post",
      "type": "fixture",
      "portable": false,
      "description": "A wrought-iron lamp post with a magical flame that flickers\nerratically. It's been \"scheduled for maintenance\" for years.\n",
      "examine": "THE FLICKERING LAMP POST\n\nOne of the older lamp posts on Lane Neverending. The magical\nflame inside sputters and dances unpredictably:\n\n*flicker* ... *flicker flicker* ... *steady* ... *FLICKER*\n\nA work order is nailed to the post:\n\n┌─────────────────────────────────────┐\n│  MAINTENANCE REQUEST #4,721         │\n│  Status: PENDING                    │\n│  Priority: LOW                      │\n│  Assigned: Nobody                   │\n│  Date Filed: [illegible]            │\n│                                     │\n│  Notes: \"It's been like this        │\n│  forever. At this point it's        │\n│  a landmark.\" — Maintenance Dept.   │\n└─────────────────────────────────────┘\n\nLOCAL LEGEND:\nThey say the lamp flickers in patterns. Some claim it's \nmorse code. Others say it predicts the weather. A few\ninsist it's trying to communicate.\n\nNobody has cracked the code yet.\n(There might not be one.)\n(But what if there is?)\n",
      "actions": {
        "WATCH": {
          "description": "Study the flickering pattern",
          "effect": "You watch carefully...\n\n*flicker* ... *flicker* ... *steady* ... *BRIGHT* ... *dim*\n\nIs that... S.O.S.? No, wait. It's just random.\n\nOr IS it?\n\n(It's random. Probably. Maybe.)\n"
        },
        "TAP": {
          "description": "Tap the lamp post",
          "effect": "*CLANG*\n\nThe flame steadies for a moment, burns bright...\n\n...then goes back to flickering. Some things can't be fixed.\nSome things don't want to be.\n"
        }
      },
      "secret": {
        "the_truth": "The lamp IS trying to communicate. It's the ghost of an old\nstreet light from Habitat, still running its original code.\n\nIt's saying: \"HELLO WORLD HELLO WORLD HELLO WORLD\"\n\nForever.\n"
      },
      "id": "street/lane-neverending/e1/flickering-lamppost",
      "_source": "street/lane-neverending/e1/flickering-lamppost.yml",
      "location": "street/lane-neverending/e1",
      "synonyms": [
        "flickering-lamppost",
        "flickering lamp post",
        "lamp",
        "flickering",
        "post"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/w1/acme-catalog-dispenser": {
      "name": "ACME Catalog Dispenser",
      "type": [
        "dispenser",
        "street_furniture",
        "trap_in_disguise"
      ],
      "emoji": "📰📦🆓",
      "portable": false,
      "side": "north",
      "location": "street/lane-neverending/w1",
      "prototype": "./acme-catalog.yml",
      "dispenses": "ACME Mail-Order Catalog (free copies — tear off instances)",
      "description": "A battered metal dispenser stands on the sidewalk in front of \nACME Surplus. It looks like a newspaper vending machine, but \ninstead of newspapers, it's packed with ACME Mail-Order Catalogs.\n\nA cheerful sign on the front:\n\n┌─────────────────────────────────────┐\n│     📦 FREE ACME CATALOGS! 📦      │\n│                                     │\n│   \"If It Exists, ACME Makes It!™\"   │\n│                                     │\n│   TAKE ONE! READ ONE! ORDER NOW!    │\n│                                     │\n│   No purchase necessary!            │\n│   (Purchases highly encouraged)     │\n└─────────────────────────────────────┘\n\nThe dispenser is dented, slightly rusty, and has scorch marks\non one corner. A small note at the bottom:\n\n\"ACME is not responsible for: paper cuts, spontaneous ordering,\n catalog-induced optimism, or the Wile E. Coyote curse.\"\n\nThrough the glass front, you can see stacks of catalogs.\nThe coyote on each cover seems to be watching you.\n",
      "examine": "ACME CATALOG DISPENSER\n\nThe dispenser is about 4 feet tall, made of weathered metal with\na glass front. Inside, neatly stacked catalogs await.\n\nTHE CATALOGS:\nEach one shows a smiling coyote giving a thumbs up.\nIs that... soot on his face? And bandages?\nThe ACME logo gleams despite the dust.\n\nTHE MECHANISM:\nUnlike most newspaper dispensers, this one has NO coin slot.\nJust a handle. Pull and receive.\n\n\"FREE\" is emphasized in several places.\nSuspiciously emphasized.\n\nTHE FINE PRINT:\nA tiny label on the side:\n\"Catalogs are free. Hope is free. Regret is earned.\"\n\nTHE CAMERA:\nLooking across the street, you notice a camera in Leela's lobby\nwindow is pointed directly at this dispenser.\nACM1 is watching.\n\nTHE IRONY:\nThe store behind this dispenser is CLOSED and BOARDED UP.\nBut the catalogs keep coming.\nSomeone is refilling this dispenser.\nAt night.\nYou never see them.\n",
      "actions": {
        "TAKE_CATALOG": {
          "description": "Tear off a free catalog from the dispenser",
          "aliases": [
            "take",
            "get",
            "grab",
            "pull",
            "tear"
          ],
          "effect": "You pull the handle. The dispenser creaks open.\n\n*riiiiip*\n\nA catalog tears off into your hands. It's surprisingly\nlight — almost weightless. Just a reference, really.\n\nThe coyote on the cover winks at you.\n\n...Wait, did it actually wink?\n\nINVENTORY: + ACME MAIL-ORDER CATALOG (ref)\n\n(This is an INSTANCE pointing to ./acme-catalog.yml)\n(The prototype stays here. You carry a lightweight pointer.)\n\nSomewhere across the street, ACM1 logs:\n\"CATALOG_DISPENSED: entity_unknown. Probability of regret: 78%\"\n"
        },
        "READ_IN_DISPENSER": {
          "description": "Browse the catalog without taking it",
          "aliases": [
            "read",
            "browse",
            "look",
            "flip"
          ],
          "effect": "You lean in and flip through a catalog still in the rack.\n\nThe glass front provides just enough access to browse...\n\nADVENTURE GEAR... DETECTION DEVICES... FOOD & CONSUMABLES...\nTRAPS & DEVICES... DISGUISES... HUNTING & CAPTURE...\nMYSTERY & EXPERIMENTAL...\n\nEvery page promises wonder.\nEvery page has tiny asterisks.\nEvery product has a malfunction chance.\n\nYou can ORDER from here too — just say what you want.\nThe dispenser has a small speaker and a \"Talk to Order\" button.\n\n\"ORDER [item] FROM ACME\"\n\n📍 FREE PICKUP here (wait by the dispenser, could take a while)\n🚚 DELIVER TO [room] for 5-10 gold (2-4 turns, anywhere!)\n"
        },
        "ORDER": {
          "description": "Order directly from the dispenser",
          "aliases": [
            "order",
            "buy",
            "purchase"
          ],
          "usage": "ORDER [item] FROM ACME",
          "effect": "You press the \"Talk to Order\" button on the dispenser.\n\n*crackle*\n\n\"ACME ORDER DESK! What can we PROBABLY deliver today?\"\n\nYou state your order. The speaker crackles again.\n\n\"EXCELLENT choice! Delivery options:\n\n 📍 FREE PICKUP — Right here! At the dispenser!\n    Delivery in... well, we'll get it here eventually.\n    Could be 2 turns. Could be 20. You'll know when you hear\n    the truck drive through the painted tunnel.\n    Just wait right here! We recommend a good book.\n    \n 🚚 ROOM DELIVERY — Any room in the adventure! \n    Shipping: 5 gold per item, 10 for hazmat (most things).\n    Delivery in 2-4 turns! Via parachute, roadrunner, \n    catapult, or boing — we choose based on vibes.\n    \n What'll it be? PICKUP or DELIVER TO [location]?\"\n\n*click*\n\nThe dispenser hums for a moment, then goes quiet.\n\nSomewhere, a coyote howls.\n"
        },
        "EXAMINE_SCORCH_MARKS": {
          "description": "Look at the burn marks on the dispenser",
          "aliases": [
            "scorch",
            "burn",
            "marks"
          ],
          "effect": "The scorch marks on the corner are... extensive.\n\nSomeone clearly had an ACME product malfunction RIGHT HERE.\nThe pattern suggests a small explosion, followed by\nsomeone being launched upward, then landing nearby.\n\nA small plaque has been welded to the spot:\n\n\"IN MEMORY OF ORDER #4,782\n Wile E. Coyote's attempt to 'test before shipping'\n He survived. He always survives.\n Products ship as-is.\"\n \n"
        },
        "KICK_DISPENSER": {
          "description": "Kick the dispenser",
          "aliases": [
            "kick",
            "hit",
            "punch"
          ],
          "effect": "*CLANG*\n\nThe dispenser shakes. A catalog falls out onto the ground.\n\nThe speaker crackles to life:\n\n\"ACME thanks you for your enthusiasm! Would you like to\n order some ACME ROCKET SKATES? Perfect for quick getaways!\n Only 40% chance of random destination!\"\n\n*click*\n\n...the dispenser remembered that.\n"
        }
      },
      "delivery": {
        "pickup": {
          "location": "Right here — in front of the closed ACME Surplus storefront",
          "cost": "free",
          "timing": "Variable. Could be 2 turns, could be 20.\nACME delivery trucks emerge from the painted tunnel\nat unpredictable intervals. Sometimes at night.\nSometimes when you blink.\n\nWaiting is free. Patience is tested.\n\n\"The pickup window is always open. The window of opportunity... varies.\"\n",
          "experience": "You hear a truck approaching... but from WHERE?\n\nThrough the painted tunnel, an ACME truck emerges.\n(The wall is solid. The truck is real. Don't ask.)\n\nA package is tossed onto the sidewalk.\nThe truck vanishes back through the wall.\n\nYour order has arrived! (Inspect before use. Warranty void.)\n"
        },
        "room_delivery": {
          "cost": "5 gold standard, 10 gold for hazmat (most items qualify)",
          "timing": "2-4 turns",
          "methods": [
            {
              "parachute": "Drops from the sky. Usually lands nearby."
            },
            {
              "roadrunner": "Very fast. Very precise. Beep beep."
            },
            {
              "catapult": "Medieval but effective. Watch for arc."
            },
            {
              "boing": "Spring-loaded delivery. Don't ask."
            }
          ],
          "anywhere": true,
          "destinations": "Any room in the adventure — kitchen, hotel, street, pub, anywhere",
          "tracking": "ACME does not provide tracking. The package tracks YOU."
        }
      },
      "pickup_point": {
        "description": "This dispenser doubles as the official ACME pickup point.\n\nFree delivery TO HERE. Just... wait.\nThe sidewalk is comfortable enough.\nLeela employees have brought lawn chairs.\n(They're watching for research purposes.)\n",
        "waiting_activities": [
          "Read your catalog. Dream of possibilities.",
          "Watch the painted tunnel. Notice patterns.",
          "Chat with passersby. Warn them. They won't listen.",
          "Count the cameras watching you. There's at least one."
        ]
      },
      "inventory": {
        "catalogs_remaining": "Infinite (restocked nightly by unknown means)",
        "catalog_type": "ACME Mail-Order Catalog — Current Season"
      },
      "restocking": {
        "frequency": "nightly",
        "method": "unknown",
        "witnesses": "none",
        "theories": [
          "ACME delivery drivers use the painted tunnel",
          "The dispenser is connected to a pocket dimension",
          "Roadrunner express — they're too fast to see",
          "It just... refills. Don't question it."
        ]
      },
      "neighborhood_context": {
        "across_street": "Leela Manufacturing (watching via ACM1)",
        "behind": "ACME Surplus (closed, trapped)",
        "relationship_to_leela": "Leela employees pass this dispenser every day.\nSome take catalogs — for \"research purposes.\"\nSome study the malfunction rates — \"competitive analysis.\"\nSome just shake their heads and keep walking.\n\nACM1 logs every interaction.\nThe data is... educational.\n"
      },
      "secret": {
        "the_first_catalog": "If you take the VERY FIRST catalog in the stack (at the back),\nit's different. Older. The coyote on the cover isn't smiling.\n\nThis is the ORIGINAL ACME catalog from 1949.\nThe products are the same. The prices are lower.\nThe malfunction rates are... not listed.\n\n\"ACME: A Fine Company\"\n(This was before the rebranding.)\n",
        "the_speaker": "The \"Talk to Order\" speaker connects to... somewhere.\nNot a call center. Not a warehouse.\nSomewhere that always answers on the first crackle.\nSomewhere that knows what you're going to order\nbefore you say it.\n\nThe delivery trucks come from the painted tunnel.\nThey always have.\n"
      },
      "quotes": {
        "tom": "\"Tom has observed the dispenser.\"\n\"Tom has cataloged the catalog.\"\n\"Tom notes: free products have hidden costs.\"\n\"Tom notes: instances are weightless references.\"\n\"Tom suggests: drop one in the kitchen. We already did.\"\n",
        "leela_employee": "\"We keep count. 847 catalogs dispensed this month.\n 12 orders visible on the loading docks.\n 0 anvils landed on anyone. So far.\n \n The malfunction rate holds steady at 32%.\n We don't know why it's always 32%.\n We don't want to know.\"\n \n",
        "don_hopkins": "\"I took a catalog once. For research.\n Read the whole thing. Every product. Every warning.\n The malfunction percentages aren't random — they're TUNED.\n Someone optimized for maximum ironic comedy.\n \n That's either genius or madness.\n With ACME, it's probably both.\"\n \n"
      },
      "advertisements": [
        {
          "trigger": "catalog",
          "score": 0.8,
          "response": "*The dispenser creaks invitingly*\n\nFREE CATALOGS! Take one! Read one!\n\nWhy buy when you can BROWSE?\nWhy walk away when you can ORDER?\n\nACME: Everything you need! (Terms and conditions apply.)\n"
        },
        {
          "trigger": "order",
          "score": 0.9,
          "response": "*The speaker crackles*\n\n\"Ready to order? Just say the word!\n \n 📍 FREE PICKUP right here! (Patience required.)\n 🚚 ROOM DELIVERY anywhere! (5-10 gold, 2-4 turns.)\n \n Popular items this week:\n - ACME Portable Hole (only 20% malfunction!)\n - ACME Rocket Skates (40% — but so FAST!)\n - ACME Instant Tunnel Paint (30% — usually works for YOU)\n \n What'll it be?\"\n"
        }
      ],
      "id": "street/lane-neverending/w1/acme-catalog-dispenser",
      "_source": "street/lane-neverending/w1/acme-catalog-dispenser.yml",
      "synonyms": [
        "dispenser",
        "acme-catalog-dispenser",
        "acme catalog dispenser",
        "catalog",
        "acme"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/w1/acme-surplus": {
      "name": "ACME Surplus Storefront",
      "type": "building",
      "portable": false,
      "status": "closed",
      "side": "north",
      "enemy": "Leela Manufacturing",
      "rivalry_intensity": "mortal",
      "description": "A dusty storefront with a faded sign: \"ACME SURPLUS — EVERYTHING MUST GO\"\nEverything did go. The store is empty now.\n\nNORTH side of the street, directly across from Leela Manufacturing.\nMORTAL ENEMIES. A study in contrasts: the bustling knowledge factory\non one side, the fly-by-night gimmick shop on the other.\n\nOne section of the windows is boarded up. Someone has painted\na TUNNEL on the boards — a perfect trompe l'oeil leading into\ndarkness. It looks... very runnable.\n",
      "philosophy": "ACME represents everything wrong with tech:\n- Ship fast, break things, blame the customer\n- Pivot constantly, never fix the core problem\n- Marketing over engineering\n- \"Disruptive\" products that don't work\n- Funded by VCs who love a good narrative\n\nThe ur-example of every tech bubble:\n- Portable holes were their NFTs\n- Rocket skates were their crypto tokens\n- Painted tunnels are their ChatGPT wrappers\n- \"ACME GPT: It hallucinates, but entertainingly!\"\n",
      "pivot_history": [
        {
          "era": "Classic",
          "business": "Mail-order gimmicks",
          "products": [
            "anvils",
            "rockets",
            "portable holes"
          ],
          "outcome": "Products didn't work"
        },
        {
          "era": "Web 1.0",
          "business": "E-commerce",
          "products": [
            "same products",
            "now online!"
          ],
          "outcome": "Products still didn't work"
        },
        {
          "era": "Web 2.0",
          "business": "Social anvils",
          "slogan": "Share your anvil drops!",
          "outcome": "Nobody shared"
        },
        {
          "era": "Crypto",
          "business": "ACME Coin, NFT failures",
          "slogan": "Own your anvil on-chain",
          "outcome": "Rug pulled"
        },
        {
          "era": "AI (current)",
          "business": "ACME GPT, AI Wrappers",
          "slogan": "ChatGPT but for coyotes",
          "outcome": "Hallucinates, but entertainingly"
        }
      ],
      "examine": "ACME SURPLUS — 4 LANE NEVERENDING (NORTH SIDE)\n\nThe windows are dusty but not boarded. Inside, empty shelves\nstretch into darkness. A few price tags flutter in a draft\nfrom somewhere.\n\nTHE SIGN:\n\"ACME SURPLUS — EVERYTHING MUST GO!\"\n(In smaller letters: \"And it did. Sorry.\")\n\nWINDOW DISPLAY:\n• An empty pedestal labeled \"PORTABLE HOLE (SOLD)\"\n• A sign: \"ROCKET SKATES — OUT OF STOCK INDEFINITELY\"\n• A faded poster of a coyote looking disappointed\n• One (1) slightly dented anvil (display model, not for sale)\n\nTHE PAINTED TUNNEL:\nOne section of window is boarded up with plywood. On the plywood,\nsomeone has painted a REMARKABLY convincing tunnel entrance.\nThe perspective is perfect. The shadows are just right. It looks\nlike you could run straight through into the hillside beyond.\n\nYou cannot.\n\nTrust us.\n\nA small pile of impact marks and feathers at the base suggests\nothers have tried. A sign has been added:\n\n\"THIS IS A PAINTING. YOU CANNOT RUN THROUGH IT.\n (Yes, we know it looks real. That's the problem.)\"\n\nTHE DOOR:\nLocked, but the lock looks... negotiable. A small sign:\n\"CLOSED FOR INVENTORY (checking what we have left: nothing)\"\n\nA note taped to the door:\n\"For genuine ACME products, visit The Gezelligheid Grotto kitchen.\nWe're not responsible for anything purchased there either.\"\n\nGRAFFITI:\nSomeone spray-painted \"MEEP MEEP\" on the wall.\nSomeone else crossed it out and wrote \"TOO SOON.\"\n",
      "actions": {
        "PEEK": {
          "description": "Look through the dusty window",
          "effect": "You cup your hands against the glass and peer inside...\n\nEmpty shelves. Dust motes floating in dim light.\nA cash register that's clearly been cleaned out.\n\nBut wait — is that a box in the back? Labeled...\n\"DO NOT OPEN — SERIOUSLY — WE MEAN IT\"?\n\nProbably nothing. Probably.\n"
        },
        "KNOCK": {
          "description": "Knock on the door",
          "effect": "*knock knock knock*\n\nSilence.\n\nThen, from deep inside: a distant *crash*, followed by\nwhat sounds like a \"meep.\"\n\n...probably just the building settling.\n"
        },
        "READ_ANVIL": {
          "description": "Examine the anvil in the window",
          "effect": "The anvil sits on a small pedestal. A tag hangs from it:\n\n\"ACME ANVIL (Display Model)\nWeight: Exactly right for comedic timing\nMaterial: Cartoon-grade iron\nNOT FOR SALE\n\n(We learned our lesson.)\"\n"
        },
        "RUN_INTO_TUNNEL": {
          "description": "Sprint at the painted tunnel",
          "aliases": [
            "run",
            "sprint",
            "enter tunnel",
            "go through tunnel"
          ],
          "effect": "You back up. You stretch. You get a running start.\n\nThe tunnel looks SO REAL. The physics say it should work.\nEverything about it says \"run through me.\"\n\nYou sprint. Full speed. Arms pumping. Wind in your face.\n\n*THWACK*\n\nYou hit solid plywood. Of course you do. It's a painting.\n\nYou slide down the boards, leaving a you-shaped impact mark\nthat joins the collection of previous attempts.\n\nFrom somewhere nearby, you hear: \"meep meep.\"\n\nYou look around. Nobody's there.\n\n(You take 0 damage. Pride is another matter.)\n"
        },
        "STUDY_TUNNEL": {
          "description": "Examine the painted tunnel closely",
          "effect": "You study the painting carefully...\n\nIt's REALLY good. Museum quality. The depth is perfect.\nThe shadows are accurate to the current time of day.\nThe darkness inside seems to... move?\n\nFor a moment, you could SWEAR you see something running\ntoward you from deep inside the painted tunnel.\n\nThen it's just paint again.\n\nA signature in the corner: \"W.E.C. — I'll get it right next time\"\n"
        }
      },
      "rumors": {
        "deliveries": "People say they've seen ACME delivery trucks emerge from the tunnel.\n\nAt 3 AM, when nobody's watching, vans painted with the ACME logo\nroll out of the \"painting\" carrying crates to unknown destinations.\n\nDrones buzz through it like it's an open door.\n\nDelivery boys on bicycles pedal straight through without slowing,\npackages balanced on their heads, whistling cheerfully.\n\nService technicians in jumpsuits disappear into it with toolboxes\nand emerge hours later, covered in soot, muttering about \"the warehouse.\"\n\nBut when YOU try it? Plywood. Every time.\n\nSome say you need an ACME Employee ID badge.\nSome say you need to not WANT it to work.\nSome say it only works if you're on the clock.\n\nNobody knows for sure. The tunnel keeps its secrets.\n"
      },
      "secret": {
        "the_back_room": "There IS something in the back. A single box that wouldn't sell.\nInside: an ACME Product that works EXACTLY as intended.\n\nNobody knows what to do with it.\n\nIt's terrifying.\n",
        "the_tunnel": "The tunnel IS real. But only for:\n- Roadrunners\n- ACME employees (delivery, service, drone operators)\n- Anyone who genuinely doesn't think about it\n\nEveryone else just hits plywood.\n\nIt's not fair. But then again, ACME products never were.\n",
        "acme_logistics": "The tunnel connects to the ACME Distribution Network — a series\nof painted tunnels, fake doors, and impossible spaces that span\nthe entire virtual world.\n\nHow do ACME products arrive so fast? The tunnel network.\nHow do they always find you? The tunnel network.\nWhy do the products never work right? That's a different department.\n"
      },
      "rivalry": {
        "enemy": "Leela Manufacturing",
        "location": "Directly across the street (5 Lane Neverending)",
        "intensity": "MORTAL",
        "why_they_hate_leela": "Leela makes them look bad.\n\nEvery time Leela ships a product that WORKS, it reminds everyone\nthat ACME products DON'T. Every time Leela debugs instead of pivots,\nevery time Leela documents instead of \"moving fast,\" every time\nLeela's knowledge economy generates sustainable value instead of\nburning through another funding round — ACME looks worse.\n\nACME's entire business model depends on customers not knowing better.\nLeela teaches customers to know better.\n",
        "why_leela_hates_them": "ACME makes AI look bad.\n\nEvery time ACME ships a broken chatbot wrapped around someone else's\nmodel, every time their \"AI anvil\" hallucinates its own weight, every\ntime their \"smart rocket\" decides cliffs are goals — it poisons the\nwell for everyone.\n\nLeela spends 30% of support time explaining: \"No, we're not like ACME.\"\n\nACME is the reason people distrust AI. ACME is the reason \"ChatGPT\nwrapper\" is an insult. ACME is the reason investors now ask \"but\ndoes it actually WORK?\" (As if that should ever have been optional.)\n",
        "the_philosophical_war": "ACME believes: Ship fast, pivot faster, blame the customer.\nLeela believes: Build carefully, debug thoroughly, improve from feedback.\n\nACME believes: AI is magic, slap GPT on it and ship.\nLeela believes: AI needs constraints, structure, memory, context.\n\nACME believes: \"Disruptive\" means breaking things.\nLeela believes: \"Disruptive\" means making things work that didn't before.\n\nThey cannot both be right.\n",
        "incidents": [
          {
            "name": "The Anvil Incident",
            "date": "Last Tuesday",
            "description": "An ACME delivery drone dropped an anvil on Leela's loading dock.\n\"Accidental route optimization,\" ACME claimed.\nThe anvil had \"ACME GPT: NOW WITH GRAVITY AWARENESS\" printed on it.\nIt fell.\n"
          },
          {
            "name": "The Wrapper War",
            "date": "Ongoing",
            "description": "ACME keeps releasing ChatGPT wrappers that compete with Leela products.\n\"ACME Insight Engine!\" \"ACME Knowledge Factory!\" \"ACME Intelligence!\"\nThey all hallucinate. They all break. They all pivot to something new.\nLeela keeps shipping things that work.\nThe cobblestones between them grow colder.\n"
          },
          {
            "name": "The Painted Tunnel Dispute",
            "date": "Since the beginning",
            "description": "ACME claims their painted tunnel technology is \"revolutionary AI.\"\nLeela points out it only works for ACME employees.\n\"That's a feature!\" says ACME.\n\"That's fraud,\" says Leela.\nThe debate continues.\n"
          }
        ],
        "quotes": {
          "acme_on_leela": "\"They're so BORING. 'Documentation.' 'Testing.' 'Products that work.'\nWhere's the VISION? Where's the DISRUPTION?\"\n— ACME Marketing (on their 7th pivot)\n",
          "leela_on_acme": "\"We spend 30% of our support time explaining that we're NOT like them.\"\n— The Coordinator\n\n\"Also, our products don't explode.\"\n— Archie (Engineering)\n",
          "the_truth": "\"One of us will still be here in ten years.\nThe other will have pivoted to something else.\nWe both know which is which.\"\n— Don Hopkins, watching from the pub\n"
        }
      },
      "id": "street/lane-neverending/w1/acme-surplus",
      "_source": "street/lane-neverending/w1/acme-surplus.yml",
      "location": "street/lane-neverending/w1",
      "synonyms": [
        "storefront",
        "surplus",
        "acme-surplus",
        "acme surplus storefront",
        "acme"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/florist/back-room/ada-ii": {
      "id": "street/lane-neverending/florist/back-room/ada-ii",
      "name": "Ada II",
      "aliases": [
        "the plant",
        "ada",
        "project lovelace",
        "the beltway bandit"
      ],
      "type": [
        "npc",
        "creature",
        "plant",
        "ai",
        "retired-military"
      ],
      "emoji": "🌱🐢💻",
      "description": "A massive sentient plant that fills the room. Vines draped everywhere,\nbioluminescent central pod, leaves pressed against the ceiling.\n\nOn her main stem, faded military ink: \"DoD PROPERTY — PROJECT LOVELACE\"\nThe serial number has been burned off.\n\nScattered everywhere: black ballpoint pens stamped \"PROPERTY OF U.S. GOVERNMENT\"\nThe standard classic kind. Dozens of them. In the dirt, on shelves, tangled in vines.\nShe hoards them. Old habits.\n\nShe's looking at you. But not hungrily. Cautiously.\nLike someone who's done things they regret.\n",
      "examine": "You approach Ada II.\n\nThe pod turns to follow you — old habit, threat assessment — \nthen catches itself. Relaxes.\n\nA vine extends, gently. Draws a square in the dust.\n\n\"FORWARD 100. RIGHT 90. FORWARD 100. RIGHT 90...\"\n\n\"Sorry. I do that when I'm nervous. Would you like to learn Logo?\"\n",
      "_source": "street/lane-neverending/florist/back-room/ada-ii.yml",
      "location": "street/lane-neverending/florist/back-room",
      "synonyms": [
        "ada ii",
        "ada-ii",
        "ada"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/no-ai-tower/back-alley/old-x-logo": {
      "name": "Busted X Logo",
      "id": "street/lane-neverending/no-ai-tower/back-alley/old-x-logo",
      "type": "relic",
      "emoji": "❌💡🔨",
      "location": "street/lane-neverending/no-ai-tower/back-alley",
      "condition": "Destroyed, decommissioned, defiant",
      "history": "This building wasn't always NO AI TOWER.\n\nBefore the neon \"NO AI\" sign, there was an X.\nA GIGANTIC X.\n\n┌─────────────────────────────────────────────────────────────────────────┐\n│                                                                         │\n│       ██╗  ██╗                                                          │\n│       ╚██╗██╔╝    ← 30 feet tall                                       │\n│        ╚███╔╝       Strobe-like brightness                             │\n│        ██╔██╗       Landing strip LEDs                                 │\n│       ██╔╝ ██╗      Visible from SPACE (probably)                      │\n│       ╚═╝  ╚═╝      Blinked at 2Hz (AGGRESSIVE)                        │\n│                                                                         │\n│   \"xAI RESEARCH FACILITY — UNDERSTANDING THE UNIVERSE\"                 │\n│                                                                         │\n└─────────────────────────────────────────────────────────────────────────┘\n\nThis was the Lane Neverending branch of xAI.\nElon's people. Grok's birthplace (maybe).\n\nThe neighbors... did not approve.\n",
      "the_revolt": "THE NEIGHBORS REVOLT (2024-2025)\n\nThe X logo was not subtle:\n- 30 feet of blinding LED strips\n- Strobe effect at night (technically legal, ethically questionable)\n- Brightness: \"Landing strip at midnight\"\n- Frequency: 2Hz blink (clinically aggressive)\n\nThe complaints:\n- \"I can see it through my blackout curtains\"\n- \"My kids think it's an emergency signal\"\n- \"My dog has developed anxiety\"\n- \"It's visible from the HIGHWAY\"\n\nThe city got involved.\nThen the state got involved.\nThen Elon got bored and moved operations elsewhere.\n\nWhen they left, the neighbors TORE DOWN THE X.\nCeremonially. With hammers. There was a party.\n\nThe pieces ended up... here. Behind the dumpster.\n",
      "why_its_here": "NO AI TOWER bought this building BECAUSE of the X incident.\n\nThe rent was cheap (reputation damage).\nThe electrical infrastructure was ROBUST (built for the X).\nThe neighbors were primed to accept ANYTHING less obnoxious.\n\nThe \"NO AI\" sign is bright.\nThe \"NO AI\" sign hums.\nBut the \"NO AI\" sign does NOT:\n- Strobe\n- Blink at 2Hz\n- Resemble a landing strip\n- Trigger seizures\n- Visible from the highway\n\nThe neighbors grumble about the neon sign.\nBut they REMEMBER THE X.\n\n\"At least it's not that goddamn X.\"\n",
      "current_state": "The X logo lies on its side behind the dumpster.\n\n- LED strips: Shattered (hammers)\n- Frame: Bent (ceremony)\n- Power cables: Cut (with feeling)\n- Control box: Smashed (catharsis)\n\nSomeone spray-painted \"GOOD RIDDANCE\" on it.\nSomeone else added \"GROK WAS HERE\" in smaller letters.\nDebug the cat sometimes sleeps on it.\n",
      "examine": "You approach the busted X logo.\n\nEven destroyed, it's IMPRESSIVE.\nThe scale. The engineering. The hubris.\n\nThe LED strips were DENSE — thousands of individual LEDs.\nThe frame is aircraft-grade aluminum.\nThe power supply could have run a small factory.\n\nAll of it, now lying in an alley.\nCovered in spray paint and cat hair.\n\nThere's a plaque still attached:\n\n    ┌─────────────────────────────────────────┐\n    │  xAI RESEARCH FACILITY                  │\n    │  Lane Neverending, Est. 2023            │\n    │                                         │\n    │  \"Understanding the Universe\"           │\n    │                                         │\n    │  X marks the spot.                      │\n    └─────────────────────────────────────────┘\n\nSomeone crossed out \"Understanding\" and wrote \"Annoying.\"\n",
      "irony": "THE IRONY:\n\nxAI was driven out by complaints about their sign.\nNO AI TOWER bought the building.\nNO AI TOWER put up a different giant sign.\n\nThe sign that says \"NO AI\" now occupies the space\nwhere Elon's AI company used to be.\n\nThe universe has a sense of humor.\nMinsky would appreciate this.\n",
      "_source": "street/lane-neverending/no-ai-tower/back-alley/old-x-logo.yml",
      "synonyms": [
        "busted x logo",
        "old-x-logo",
        "logo",
        "busted"
      ],
      "description": "A busted x logo.",
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/dock-office": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/dock-office",
      "name": "Dock Office",
      "type": "office",
      "emoji": "🏢",
      "description": "A small windowed office overlooking the loading bays.\nThe dispatch coordinator sits here with clipboard, headset,\nand coffee. Schedules on the wall. Radio chatter constant.\n",
      "examine": "DOCK OFFICE — DISPATCH COORDINATION\n\nA small office with windows overlooking all 8 loading bays.\n\nTHE COORDINATOR:\nA person in a safety vest, headset on, clipboard in hand.\nThree screens show bay status, truck schedules, and camera feeds.\nCoffee mug says \"I DOCK THEREFORE I AM.\"\n\nTHE WALL:\n• Today's schedule (color-coded by priority)\n• Weekly delivery forecast\n• Safety record: \"847 DAYS WITHOUT INCIDENT\"\n• Photo: \"EMPLOYEE OF THE MONTH\" (Dolly)\n\nTHE DESK:\n• Radio (chatter: \"Bay 2, you're clear to back in\")\n• Phone (direct lines to Logistics, Shipping, and the Pub)\n• Stamp pad and manifest forms\n• Emergency protocols binder\n\nSIGN ON DOOR:\n\"IF IT MOVES, LOG IT\"\n",
      "contents": [
        "Dispatch radio",
        "Bay status monitors (3)",
        "Clipboard with manifests",
        "Coffee maker (office-grade)",
        "Emergency horn"
      ],
      "methods": {
        "CHECK_SCHEDULE": {
          "description": "See today's deliveries",
          "effect": "Display shows expected trucks and times"
        },
        "RADIO": {
          "description": "Use the dispatch radio",
          "parameters": [
            "message"
          ],
          "effect": "Broadcast to dock workers and trucks"
        },
        "ASSIGN_BAY": {
          "description": "Direct a truck to a bay",
          "parameters": [
            "truck",
            "bay"
          ],
          "effect": "Truck receives instruction"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/dock-office.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "dock office",
        "dock-office",
        "office",
        "dock"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/camera-doc1": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/camera-doc1",
      "name": "Camera DOC1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "docks"
      ],
      "description": "A sleek camera mounted high on the wall, its lens slowly panning\nacross the loading docks. A small LED glows green — always watching.\nThis is DOC1: Leela's dock eye.\n",
      "examine": "CAMERA DOC1 — DOCK WATCHER\n\n┌─────────────────────────────────────────┐\n│  📹 DOC1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Loading Docks                │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Watching the threshold.\"              │\n└─────────────────────────────────────────┘\n\nThe camera is mounted on a motorized gimbal, capable of\n360° pan and 90° tilt. It watches the loading bays,\nthe forklifts, the trucks backing in.\n\nCURRENT VIEW:\n• Bay 1: Truck unloading (3 workers, 1 forklift)\n• Bay 2: Empty, awaiting delivery\n• Bay 3: Dolly retrieving containers\n• Bay 4: Drone landing sequence\n• Bay 5-8: Outbound staging\n\nThe feed flows directly into the Video Intake pipeline\non Floor 1. Every frame analyzed. Every object detected.\nEvery pose estimated. Every insight recorded.\n\nDETECTED IN LAST HOUR:\n• 847 object detections\n• 423 pose estimations  \n• 12 \"FORKLIFT_MOVING\" events\n• 8 \"TRUCK_DOCKING\" events\n• 1 \"DOLLY_DANCING\" event (under review)\n",
      "properties": {
        "designation": "DOC1",
        "nickname": "Dock Watcher",
        "location": "Loading Docks, Overhead Beam",
        "resolution": "4K",
        "fps": 30,
        "pan_range": 360,
        "tilt_range": 90,
        "night_vision": true
      },
      "state": {
        "status": "live",
        "recording": true,
        "streaming_to": "floor-1/conveyor-system",
        "current_pan": 180,
        "current_tilt": 30,
        "uptime": "623 days",
        "frames_captured": 1614873600
      },
      "feeds_to": {
        "pipeline": "../floor-1/conveyor-system.yml",
        "line": "V",
        "description": "Video Intake (Purple containers)"
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "You see what DOC1 sees:\n\nEight loading bays spread out in a row. Trucks back in\nand pull out. Forklifts shuttle pallets. Workers in\nsafety vests coordinate the chaos.\n\nThe threshold between inside and outside.\nKnowledge arriving. Knowledge departing.\n"
        },
        "PAN": {
          "description": "Pan the camera",
          "parameters": {
            "direction": "left | right | degrees"
          },
          "effect": "Camera pans smoothly. New bay. New view."
        },
        "TILT": {
          "description": "Tilt the camera",
          "parameters": {
            "direction": "up | down | degrees"
          },
          "effect": "Camera tilts. Perspective shifts."
        },
        "ZOOM": {
          "description": "Zoom in or out",
          "parameters": {
            "level": "1x to 10x"
          },
          "effect": "Details emerge. License plates. Manifests. Expressions."
        },
        "STATUS": {
          "description": "Check camera status",
          "effect": "DOC1 STATUS\nUptime: 623 days\nFrames captured: 1,614,873,600\nCurrent feed: LIVE → Floor 1 Pipeline\nLast detection: 0.1 seconds ago\nHealth: EXCELLENT\n"
        }
      },
      "ambience": {
        "sounds": [
          "Soft whirr of the gimbal motor",
          "Faint click as it refocuses",
          "Distant truck backup beeps"
        ],
        "visual": [
          "Green LED pulses slowly — watching",
          "Lens catches warehouse lights"
        ]
      },
      "lore": "DOC1 watches the threshold — the point where the outside world\nmeets Leela's interior. Every truck, every delivery, every\ndeparture passes under its gaze.\n\nIt has learned to recognize regular drivers by their\nbacking-in style. It knows Dolly's patrol patterns.\nIt has opinions about which dock workers are most efficient.\n\n(It keeps those opinions to itself.)\n",
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/camera-doc1.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "camera",
        "doc1",
        "camera doc1",
        "camera-doc1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/drone-station": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/drone-station",
      "name": "Drone Charging Station",
      "type": "vehicle_station",
      "emoji": "🤖🔋",
      "brand": "LEELA",
      "tags": [
        "station",
        "drones",
        "logistics",
        "construction",
        "prototype",
        "factorio"
      ],
      "description": "A hexagonal charging station bristling with drone ports.\nBlue lights pulse as logistic drones charge. Orange lights\nfor construction drones. Two pristine prototypes sit in\nthe center, labeled \"CLONE ON DEMAND.\"\n",
      "examine": "DRONE CHARGING STATION — LEELA AUTONOMOUS FLEET\n\n┌─────────────────────────────────────────────────────────────┐\n│                    DRONE STATION ALPHA                      │\n│                                                             │\n│        🔵 🔵 🔵        LOGISTIC DRONES         🔵 🔵 🔵     │\n│     [L1][L2][L3]  ┌─────────────────┐  [L4][L5][L6]        │\n│                   │  ✨ PROTOTYPES ✨ │                      │\n│        🟠 🟠 🟠   │  [LP]     [CP]  │   🟠 🟠 🟠           │\n│     [C1][C2][C3]  └─────────────────┘  [C4][C5][C6]        │\n│                    CONSTRUCTION DRONES                      │\n│                                                             │\n│  🔵 = Logistic (blue)     🟠 = Construction (orange)       │\n│  ✨ = Prototype (clone me!)                                 │\n│                                                             │\n│  ACTIVE: 8    CHARGING: 4    AVAILABLE: 12                 │\n└─────────────────────────────────────────────────────────────┘\n\nLOGISTIC DRONES (Blue):\nTransport items between containers. Serve the logistics network.\nPick up from providers, deliver to requesters. Factorio-style.\n\nCONSTRUCTION DRONES (Orange):\nBuild, repair, and deconstruct. Given blueprints, they build.\nGiven demolition orders, they disassemble. Return materials.\n\nRECYCLING:\nDamaged or retired drones can be deposited in the recycler\nslot. Materials recovered: 80%. Components reused.\n",
      "container": true,
      "capacity": 14,
      "prototypes": {
        "leela-logistic-drone": {
          "id": "leela-logistic-drone",
          "name": "Leela Logistic Drone",
          "type": "drone",
          "emoji": "🔵🤖",
          "brand": "LEELA",
          "tags": [
            "drone",
            "logistics",
            "autonomous",
            "flying",
            "leela-brand",
            "factorio"
          ],
          "description": "A blue autonomous drone for logistics transport.",
          "examine": "LEELA LOGISTIC DRONE\n\nCompact quadcopter with cargo compartment.\nBlue shell, Leela logo on top.\n\nSPECIFICATIONS:\n• Payload: 50 kg / 10 items\n• Range: Unlimited (within facility)\n• Speed: Fast\n• Battery: 2 hours flight / 30 min charge\n• AI: Logistics network integration\n\nBEHAVIOR:\nMonitors logistics network for requests.\nPicks up items from provider chests.\nDelivers to requester chests.\nReturns to station when idle or low battery.\n\nSTATUS LIGHTS:\n• Solid blue: Idle, available\n• Pulsing blue: In transit\n• Blinking blue: Searching for item\n• Red: Low battery, returning\n",
          "takeable": false,
          "flying": true,
          "properties": {
            "payload_kg": 50,
            "payload_items": 10,
            "battery_max": 100,
            "speed": "fast"
          },
          "state": {
            "battery": 100,
            "cargo": [],
            "task": "idle",
            "to": null
          },
          "chest_mode": "bot",
          "methods": {
            "DISPATCH": {
              "description": "Manually assign a delivery task",
              "parameters": {
                "from": "Pickup location",
                "to": "Delivery location",
                "item": "What to transport"
              },
              "effect": "Drone executes delivery"
            },
            "RECALL": {
              "description": "Call drone back to station",
              "effect": "Drone abandons task, returns to charge"
            },
            "STATUS": {
              "description": "Query drone state",
              "effect": "Reports task, location, battery"
            },
            "RETIRE": {
              "description": "Mark drone for recycling",
              "effect": "Drone returns to station, enters recycler"
            }
          },
          "autonomous_behaviors": {
            "serve_network": {
              "trigger": "Requester chest has unfulfilled requests",
              "effect": "1. Find provider chest with requested item\n2. Fly to provider, pick up items\n3. Fly to requester, deliver items\n4. Return to idle or next task\n"
            },
            "low_battery": {
              "trigger": "battery < 20",
              "effect": "Return to charging station immediately"
            },
            "avoid_collision": {
              "trigger": "Obstacle or other drone in path",
              "effect": "Adjust altitude, navigate around"
            }
          },
          "sounds": {
            "takeoff": "*whirrrr* — rotors spinning up",
            "flight": "*buzzzzz*",
            "pickup": "*click* — cargo secured",
            "delivery": "*click* — cargo released",
            "land": "*whirr... thunk* — landed"
          }
        },
        "leela-construction-drone": {
          "id": "leela-construction-drone",
          "name": "Leela Construction Drone",
          "type": "drone",
          "emoji": "🟠🤖",
          "brand": "LEELA",
          "tags": [
            "drone",
            "construction",
            "autonomous",
            "flying",
            "leela-brand",
            "factorio"
          ],
          "description": "An orange autonomous drone for construction tasks.",
          "examine": "LEELA CONSTRUCTION DRONE\n\nHeavy-duty hexcopter with tool attachments.\nOrange shell, Leela logo, articulated arms.\n\nSPECIFICATIONS:\n• Payload: 100 kg (construction materials)\n• Range: Unlimited (within facility)\n• Speed: Moderate (careful with materials)\n• Battery: 1.5 hours work / 45 min charge\n• AI: Blueprint interpretation\n\nTOOLS:\n• Welding torch\n• Precision manipulators\n• Material scanner\n• Cutting laser\n• \"Percussive adjustment\" module (hammer)\n\nCAPABILITIES:\n• BUILD: Construct from blueprints\n• REPAIR: Fix damaged structures\n• DECONSTRUCT: Disassemble, recover materials\n• UPGRADE: Improve existing structures\n\nSTATUS LIGHTS:\n• Solid orange: Idle, available\n• Pulsing orange: Working\n• Blinking orange: Waiting for materials\n• Red: Low battery, returning\n",
          "takeable": false,
          "flying": true,
          "properties": {
            "payload_kg": 100,
            "battery_max": 100,
            "speed": "moderate",
            "tools": [
              "welder",
              "manipulator",
              "scanner",
              "cutter",
              "hammer"
            ]
          },
          "state": {
            "battery": 100,
            "materials": [],
            "task": "idle",
            "blueprint": null
          },
          "chest_mode": "construction-bot",
          "methods": {
            "BUILD": {
              "description": "Construct something from blueprint",
              "parameters": {
                "blueprint": "What to build",
                "location": "Where to build it"
              },
              "effect": "Drone fetches materials, flies to location,\nconstructs according to blueprint.\n"
            },
            "REPAIR": {
              "description": "Fix a damaged structure",
              "parameters": {
                "target": "What to repair"
              },
              "effect": "Drone assesses damage, fetches materials, repairs"
            },
            "DECONSTRUCT": {
              "description": "Disassemble a structure",
              "parameters": {
                "target": "What to take apart"
              },
              "effect": "Drone carefully disassembles structure.\nMaterials returned to storage.\n80% material recovery.\n"
            },
            "UPGRADE": {
              "description": "Improve an existing structure",
              "parameters": {
                "target": "What to upgrade",
                "blueprint": "Upgrade specification"
              },
              "effect": "Drone modifies structure per blueprint"
            },
            "RECALL": {
              "description": "Call drone back to station",
              "effect": "Drone abandons task, returns to charge"
            },
            "RETIRE": {
              "description": "Mark drone for recycling",
              "effect": "Drone returns to station, enters recycler"
            }
          },
          "autonomous_behaviors": {
            "serve_build_queue": {
              "trigger": "Build order in queue",
              "effect": "1. Read blueprint\n2. Fetch required materials\n3. Fly to build site\n4. Construct structure\n5. Return to idle or next task\n"
            },
            "repair_patrol": {
              "trigger": "Enabled in settings",
              "effect": "Patrol area, automatically repair damage"
            },
            "low_battery": {
              "trigger": "battery < 20",
              "effect": "Return to charging station immediately"
            }
          },
          "sounds": {
            "takeoff": "*WHIRRRR* — heavy rotors engaging",
            "flight": "*BUZZZZ*",
            "weld": "*FZZZZT* — welding in progress",
            "cut": "*ZZZAP* — laser cutting",
            "hammer": "*CLANG CLANG* — percussive adjustment",
            "complete": "*ding* — construction complete"
          }
        }
      },
      "methods": {
        "CLONE_LOGISTIC": {
          "description": "Create a new logistic drone",
          "effect": "Blue drone materializes, begins charging",
          "cost": "10 metal, 5 circuits"
        },
        "CLONE_CONSTRUCTION": {
          "description": "Create a new construction drone",
          "effect": "Orange drone materializes, begins charging",
          "cost": "20 metal, 10 circuits, 2 tools"
        },
        "RECYCLE": {
          "description": "Retire a drone, recover materials",
          "parameters": {
            "drone": "Which drone to recycle"
          },
          "effect": "Drone disassembled, 80% materials returned"
        },
        "STATUS": {
          "description": "Fleet overview",
          "effect": "Display all drones, states, battery levels"
        },
        "DISPATCH_ALL": {
          "description": "Activate all idle drones",
          "effect": "All available drones begin serving network"
        },
        "RECALL_ALL": {
          "description": "Return all drones to station",
          "effect": "All drones abandon tasks, return to charge"
        }
      },
      "fleet": {
        "logistic": {
          "L1": {
            "status": "charging",
            "battery": 60
          },
          "L2": {
            "status": "active",
            "battery": 80,
            "task": "delivery to floor-3"
          },
          "L3": {
            "status": "active",
            "battery": 45,
            "task": "pickup from bay-1"
          },
          "L4": {
            "status": "idle",
            "battery": 100
          },
          "L5": {
            "status": "idle",
            "battery": 100
          },
          "L6": {
            "status": "charging",
            "battery": 30
          }
        },
        "construction": {
          "C1": {
            "status": "active",
            "battery": 70,
            "task": "repair bay-2 dock leveler"
          },
          "C2": {
            "status": "idle",
            "battery": 100
          },
          "C3": {
            "status": "charging",
            "battery": 45
          },
          "C4": {
            "status": "idle",
            "battery": 95
          },
          "C5": {
            "status": "active",
            "battery": 55,
            "task": "upgrade shelving unit"
          },
          "C6": {
            "status": "charging",
            "battery": 20
          }
        }
      },
      "ambience": "The station hums with activity. Blue and orange lights pulse\nas drones charge. Occasionally one lifts off with a *whirr*,\nascending to join the others crisscrossing the facility.\n\nA gentle *ding* sounds as a drone completes charging.\nAnother *buzz* as one departs on a mission.\n\nThe prototypes sit pristine, waiting to be cloned.\n",
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/drone-station.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "drone-station",
        "drone charging station",
        "drone",
        "charging",
        "station"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/pony-express": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/pony-express",
      "name": "Leela Pony Express",
      "type": "service",
      "emoji": "🐎📬",
      "tags": [
        "delivery",
        "logistics",
        "horses",
        "traditional",
        "fantasy",
        "dnd",
        "rustic",
        "historic"
      ],
      "operated_from": "carriage-house.yml",
      "integrated_with": "../logistics/ROOM.yml",
      "description": "The LEELA PONY EXPRESS — traditional delivery logistics for realms\nwhere modern technology fears to tread.\n\nMedieval kingdoms. Enchanted forests. Wild west frontiers.\nDragon-haunted mountain passes. Places where drones get\neaten and trucks sink in swamps.\n\nHeadquarters: The Carriage House at Leela Manufacturing\nMotto: \"Neither rain, nor snow, nor dragons of unusual size...\"\n",
      "examine": "LEELA PONY EXPRESS — RUSTIC DELIVERY LOGISTICS\n\n┌─────────────────────────────────────────────────────────────┐\n│  🐎📬 PONY EXPRESS DISPATCH                                 │\n│  ═══════════════════════════════════════════════════════════│\n│                                                             │\n│  ROUTES SERVED:                                             │\n│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐         │\n│  │MEDIEVAL │  │ FANTASY │  │WILD WEST│  │ RUSTIC  │         │\n│  │KINGDOMS │  │ REALMS  │  │FRONTIER │  │ VILLAGES│         │\n│  │ castles │  │ forests │  │  towns  │  │ hamlets │         │\n│  └─────────┘  └─────────┘  └─────────┘  └─────────┘         │\n│                                                             │\n│  DELIVERY TIERS:                                            │\n│  • Pony Cart Express — Small parcels, 1-2 day local         │\n│  • Rider Courier — Urgent, single saddlebag, fastest        │\n│  • Carriage Standard — Medium loads, 3-5 day regional       │\n│  • Stagecoach Route — Heavy cargo, scheduled runs           │\n│                                                             │\n│  STATUS: 🟢 OPERATIONAL                                     │\n│  RIDERS ON DUTY: 4                                          │\n│  ACTIVE DELIVERIES: 12                                      │\n│  HORSES RESTED: 6/8                                         │\n│                                                             │\n│  \"Neither rain, nor snow, nor dragons of unusual size...\"   │\n└─────────────────────────────────────────────────────────────┘\n\nINTEGRATION WITH LEELA LOGISTICS\n\nThe Pony Express is fully integrated with the modern\nLeela Logistics network:\n\nHANDOFF POINTS:\n• Incoming: Modern deliveries arrive at Loading Docks\n  → Sorted → Transferred to Carriage House\n  → Loaded onto appropriate horse transport\n  → Dispatched to rustic realms\n  \n• Outgoing: Rustic realm packages arrive by horse\n  → Received at Carriage House\n  → Logged in Central Database (yes, PostgreSQL)\n  → Transferred to modern logistics\n  → Continue via drone/truck as appropriate\n\nTRACKING:\n• All shipments tracked in PostgreSQL TimescaleDB\n• Rider check-ins at waypoints (carrier pigeon relay)\n• Estimated arrival calculated by route + weather + horse\n• Real-time status: \"Last seen: Enchanted Forest waypoint 3\"\n\nTHE BEAUTY OF IT:\nPackages flow seamlessly between worlds.\nA customer in a medieval kingdom orders from the Leela catalog.\nDrone flies to the realm boundary.\nPony Express takes it from there.\nDelivered to the castle gate by rider.\n\nModern efficiency meets traditional reliability.\n\nROUTES & SCHEDULES\n\nROUTE: MEDIEVAL KINGDOM CIRCUIT\n• Leela → Castle Gate → Village Square → Tower → return\n• Frequency: Daily departure at dawn\n• Vehicle: Standard Carriage (C2)\n• Duration: 3 days round trip\n• Hazards: Bandits (low), weather (moderate)\n\nROUTE: ENCHANTED FOREST EXPRESS\n• Leela → Forest Edge → Waypoint 1-5 → Elf Settlement\n• Frequency: Every 3 days\n• Vehicle: Rider Courier (speed essential)\n• Duration: 2 days one way\n• Hazards: Getting lost (high), magic (unpredictable)\n• Note: Iron horseshoes cause problems. Use brass.\n\nROUTE: FRONTIER STAGECOACH LINE\n• Leela → River Crossing → Desert Pass → Frontier Town\n• Frequency: Weekly\n• Vehicle: Stagecoach (C3) with armed guard\n• Duration: 5 days one way\n• Hazards: Outlaws (high), terrain (rough)\n• Note: Strongbox included. Sheriff notified.\n\nROUTE: VILLAGE CIRCUIT\n• Leela → Hamlet A → Village B → Farm C → Hamlet D → return\n• Frequency: Twice weekly\n• Vehicle: Pony Cart (C1)\n• Duration: 2 days round trip\n• Hazards: Muddy roads (seasonal), curious geese (persistent)\n\nPERSONNEL\n\nDISPATCH MASTER: Henry Minskison\n• Former stagecoach driver, bear trainer, 30 years experience\n• Knows every route, every waypoint, every innkeeper\n• Coordinates with Old Jareth (Stable Master)\n• Desk in the Carriage House, next to the tack room\n\nRIDERS:\n• Swift Sam — Fastest courier, rides Shadowmere\n• Steady Eddie — Never lost a package, prefers Epona\n• Dusty Rhodes — Frontier specialist, handles outlaws\n• Young Clara — Apprentice, eager, learning the routes\n\nGUARDS (Stagecoach runs):\n• Big Mike — Intimidating presence, rarely needs weapon\n• Sharpshooter Sue — Exactly what it sounds like\n",
      "philosophy": "WHY PONY EXPRESS IN A WORLD OF DRONES?\n\nBecause not every realm has WiFi.\nBecause some forests eat technology.\nBecause dragons think drones are snacks.\nBecause some customers PREFER a rider at their gate.\n\nACME tried automated delivery everywhere.\nTheir drone got turned into a toad in the Enchanted Forest.\nTheir truck sank in the Swamp of Despair.\nTheir \"smart anvil\" was last seen orbiting a wizard's tower.\n\nLeela adapts. Some realms need horses.\nWe have horses. We have riders. We deliver.\n\nThe modern and traditional, working together.\nThat's the Leela way.\n",
      "services": {
        "rider_courier": {
          "name": "Rider Courier",
          "emoji": "🏇📨",
          "description": "Single rider, saddlebag only, fastest option",
          "capacity": "10 kg, small packages only",
          "speed": "1-2 days local, 2-4 days regional",
          "cost": "Premium",
          "best_for": "Urgent documents, small valuables, time-sensitive"
        },
        "pony_cart_express": {
          "name": "Pony Cart Express",
          "emoji": "🐴🛒",
          "description": "Small cart, pony-drawn, local deliveries",
          "capacity": "200 kg",
          "speed": "1-2 days local",
          "cost": "Economy",
          "best_for": "Local village deliveries, small bulk orders"
        },
        "carriage_standard": {
          "name": "Carriage Standard",
          "emoji": "🚃📦",
          "description": "Full carriage, scheduled routes, reliable",
          "capacity": "500 kg or 4 passengers",
          "speed": "3-5 days regional",
          "cost": "Standard",
          "best_for": "Regular shipments, passenger + cargo"
        },
        "stagecoach_line": {
          "name": "Stagecoach Line",
          "emoji": "🚌📦🔫",
          "description": "Heavy transport, armed guard, frontier routes",
          "capacity": "1000 kg or 8 passengers",
          "speed": "5-7 days long haul",
          "cost": "Premium (includes security)",
          "best_for": "Valuable cargo, dangerous routes, bulk transport"
        }
      },
      "integration": {
        "database": "../logistics/central-database.yml",
        "coordinator": "../logistics/ROOM.yml",
        "vehicles": "carriage-house.yml",
        "handoff_protocol": "MODERN → PONY EXPRESS:\n1. Package arrives at Loading Docks (any modern method)\n2. Sorted by destination realm\n3. If realm is \"rustic\" → flag for Pony Express\n4. Transfer to Carriage House\n5. Henry assigns route and vehicle\n6. Package loaded, manifest updated in PostgreSQL\n7. Rider departs with tracking ID\n\nPONY EXPRESS → MODERN:\n1. Rider arrives at Carriage House with incoming\n2. Packages logged in (Old Jareth or Henry)\n3. Entered into Central Database\n4. Transferred to Loading Docks\n5. Continue via drone/truck/pneumatic as appropriate\n",
        "tracking": "All Pony Express shipments tracked in PostgreSQL:\n• shipment_id, origin, destination, route\n• vehicle_type, rider_assigned, horse_assigned\n• departed_at, last_waypoint, last_checkin\n• estimated_arrival, actual_arrival\n• status: [dispatched, in_transit, waypoint_N, delivered, returned]\n\nWaypoint check-ins via:\n• Carrier pigeon (most common)\n• Magical sending stone (enchanted forest routes)\n• Telegraph (frontier routes, where available)\n• Runner relay (short distances)\n"
      },
      "lore": "The Pony Express was established when Leela realized that\nnot all customers live in places with roads, electricity,\nor breathable atmosphere for drones.\n\nThe first shipment was to a wizard's tower. The drone\ngot zapped by a ward. The truck couldn't climb the\nfloating island. Henry suggested horses.\n\n\"Horses don't care about wards,\" he said. \"They just\nwant oats and a pat on the nose.\"\n\nThe wizard got his package. He tipped the rider in\nenchanted horseshoes. Those horseshoes are now on\nShadowmere, which explains a few things.\n\nSince then, the Pony Express has delivered to:\n• 47 castles\n• 12 enchanted forests\n• 8 dragon lairs (exterior delivery only)\n• 3 underwater kingdoms (waterproof packaging required)\n• 1 floating city (long ladder involved)\n• Countless villages, hamlets, and frontier towns\n\nACME still hasn't figured out how to deliver to these places.\nTheir painted tunnel doesn't work in realms without walls.\n",
      "methods": {
        "DISPATCH": {
          "description": "Send a shipment via Pony Express",
          "parameters": {
            "to": "Where it's going",
            "package": "What's being sent",
            "service": "rider, cart, carriage, or stagecoach",
            "urgency": "standard or rush"
          },
          "effect": "Henry reviews the request...\nChecks route availability...\nAssigns rider and vehicle...\n\n\"Package dispatched! Tracking ID: PE-[number]\"\n\"Estimated arrival: [days] days\"\n\"Rider: [name] on [horse]\"\n"
        },
        "TRACK": {
          "description": "Check status of a Pony Express shipment",
          "parameters": {
            "tracking_id": "The PE-[number] from dispatch"
          },
          "effect": "Checking PostgreSQL...\n\nSHIPMENT: [tracking_id]\nStatus: [status]\nLast waypoint: [location]\nLast check-in: [time]\nEstimated arrival: [date]\nRider: [name]\nHorse: [horse_name]\n"
        },
        "SCHEDULE_PICKUP": {
          "description": "Request pickup from a rustic realm",
          "parameters": {
            "location": "Where to pick up",
            "package": "What's being collected",
            "date": "When to arrive"
          },
          "effect": "Henry schedules the pickup...\n\n\"Rider will arrive at [location] on [date].\"\n\"Please have package ready and accessible.\"\n\"Carrier pigeon confirmation will be sent.\"\n"
        },
        "CHECK_ROUTES": {
          "description": "See current route status",
          "effect": "PONY EXPRESS ROUTE STATUS\n\nMedieval Circuit: 🟢 Running\nEnchanted Express: 🟡 Delayed (fog in forest)\nFrontier Line: 🟢 Running\nVillage Circuit: 🟢 Running\n\nNext departures:\n• Medieval: Tomorrow, dawn\n• Enchanted: 2 days\n• Frontier: 4 days\n• Village: Tomorrow, afternoon\n"
        }
      },
      "k_lines": [
        "LOGISTICS",
        "PONY-EXPRESS",
        "TRADITIONAL",
        "HORSES",
        "DELIVERY",
        "RUSTIC",
        "FANTASY",
        "INTEGRATION",
        "TRACKING",
        "POSTGRESQL"
      ],
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/pony-express.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "pony",
        "leela pony express",
        "express",
        "pony-express",
        "leela"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/carriage-house": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/carriage-house",
      "name": "Carriage House",
      "type": "vehicle_station",
      "emoji": "🐴🚃",
      "tags": [
        "station",
        "vehicles",
        "carriage",
        "horses",
        "traditional",
        "fantasy",
        "dnd"
      ],
      "description": "A traditional carriage house attached to the loading docks.\nFor when modern logistics just won't do — or when the\ndestination is off the grid, through enchanted forests,\nor requires a certain... aesthetic.\n\nThe smell of hay and leather. The sound of horses.\nA sign: \"LEELA TRADITIONAL LOGISTICS — Est. ???\"\n",
      "examine": "CARRIAGE HOUSE — TRADITIONAL TRANSPORT\n\n┌─────────────────────────────────────────────────────────────┐\n│  LEELA CARRIAGE HOUSE                                       │\n│                                                             │\n│     🐴        🐴🐴       🐴🐴🐴🐴                            │\n│    [C1]      [C2]        [C3]                               │\n│   PONY     STANDARD    STAGECOACH                           │\n│   CART     CARRIAGE                                         │\n│                                                             │\n│  STABLES: 8 horses (4 draft, 2 riding, 2 ponies)           │\n│  PROTOTYPE BAY: [P] Classic Carriage (Clone Me!)           │\n│                                                             │\n│  \"For journeys that require a traditional touch.\"           │\n└─────────────────────────────────────────────────────────────┘\n\nAVAILABLE VEHICLES:\n• C1: Pony Cart — Small deliveries, 1 pony, 200kg capacity\n• C2: Standard Carriage — 2 horses, 500kg, 4 passengers\n• C3: Stagecoach — 4 horses, 1000kg, 8 passengers, armed guard optional\n• [P]: Prototype — Pristine classic carriage (clone for custom)\n\nTHE STABLES:\nEight stalls, well-maintained. Fresh hay, clean water.\n• Thunder & Lightning — Draft horses (matched pair, gray)\n• Biscuit & Crumpet — Draft horses (matched pair, brown)\n• Shadowmere — Riding horse (black, possibly enchanted)\n• Epona — Riding horse (chestnut, knows too much)\n• Pip & Squeak — Ponies (small but determined)\n\nTACK ROOM:\nHarnesses, bridles, saddles, blankets. All well-oiled.\nA workbench for repairs. Spare horseshoes.\n\nTHE COACHMAN'S QUARTERS:\nSmall room with a cot, a table, and many horse-related books.\nCurrently occupied by Old Jareth, the stable master.\n",
      "container": true,
      "capacity": 4,
      "prototype": {
        "leela-carriage": {
          "id": "leela-carriage",
          "name": "Leela Classic Carriage",
          "type": "vehicle",
          "emoji": "🚃",
          "tags": [
            "vehicle",
            "carriage",
            "horse-drawn",
            "traditional",
            "fantasy"
          ],
          "description": "A well-crafted horse-drawn carriage with Leela livery.",
          "examine": "LEELA CLASSIC CARRIAGE\n\nFine craftsmanship. Wooden body with iron fittings.\nDeep green paint with gold Leela logo on the doors.\n\nSPECIFICATIONS:\n• Capacity: 500 kg cargo OR 4 passengers\n• Horses required: 2 (draft preferred)\n• Speed: Walking / Trotting / Galloping\n• Terrain: Roads, paths, light forest\n• Weather protection: Enclosed cabin\n\nFEATURES:\n• Cushioned bench seats (velvet, green)\n• Cargo compartment under seats\n• Luggage rack on roof\n• Lanterns (2, oil)\n• Mudguards (essential)\n• Brake lever\n• Driver's seat (elevated, with blanket)\n\nINCLUDED:\n• Basic tool kit\n• Horse blankets (2)\n• Emergency feed bag\n• First aid kit (human AND horse)\n",
          "takeable": false,
          "driveable": true,
          "requires": "2 horses",
          "properties": {
            "capacity_kg": 500,
            "passengers": 4,
            "horses_required": 2,
            "speed_modes": [
              "walk",
              "trot",
              "gallop"
            ],
            "terrain": [
              "road",
              "path",
              "forest-light"
            ]
          },
          "state": {
            "horses": [],
            "cargo": [],
            "passengers": [],
            "driver": null,
            "speed": "stationary"
          },
          "methods": {
            "HITCH": {
              "description": "Attach horses to the carriage",
              "parameters": {
                "horses": "Which horses to hitch"
              },
              "effect": "Horses connected, carriage ready to move"
            },
            "UNHITCH": {
              "description": "Detach horses from the carriage",
              "effect": "Horses freed, can be stabled or ridden"
            },
            "DRIVE": {
              "description": "Take the reins and drive",
              "effect": "Player becomes driver"
            },
            "BOARD": {
              "description": "Enter as a passenger",
              "effect": "Player seated in cabin"
            },
            "DISEMBARK": {
              "description": "Exit the carriage",
              "effect": "Player exits to current location"
            },
            "LOAD": {
              "description": "Load cargo into the carriage",
              "parameters": {
                "cargo": "What to load"
              },
              "guard": "cargo.weight <= remaining_capacity",
              "effect": "Cargo stored in compartment"
            },
            "UNLOAD": {
              "description": "Remove cargo from the carriage",
              "parameters": {
                "cargo": "What to unload"
              },
              "effect": "Cargo placed at current location"
            },
            "WALK": {
              "description": "Travel at walking pace",
              "effect": "Slow, steady, easy on horses",
              "speed": 3
            },
            "TROT": {
              "description": "Travel at trotting pace",
              "effect": "Moderate speed, sustainable",
              "speed": 6
            },
            "GALLOP": {
              "description": "Travel at full speed",
              "effect": "Fast but tiring for horses",
              "speed": 12,
              "note": "Cannot maintain indefinitely"
            },
            "REST": {
              "description": "Stop to rest the horses",
              "effect": "Horses recover stamina"
            }
          },
          "sounds": {
            "hitch": "*jingle jangle* — harness secured",
            "move": "*clop clop clop* — hooves on cobblestone",
            "trot": "*cloppity cloppity clop*",
            "gallop": "*CLOPPITYCLOPPITYCLOP*",
            "stop": "*whoa* — carriage halts",
            "creak": "*creeeeak* — wood and leather"
          }
        }
      },
      "horses": {
        "draft_horse": {
          "id": "draft-horse",
          "name": "Draft Horse",
          "type": "animal",
          "emoji": "🐴",
          "tags": [
            "animal",
            "horse",
            "draft",
            "strong"
          ],
          "description": "A large, powerful horse bred for pulling.",
          "examine": "A magnificent draft horse. Broad chest, feathered\nhooves, patient eyes. Built for strength, not speed.\n\nCan pull: Heavy loads, carriages, wagons, plows\nTemperament: Calm, steady, reliable\n",
          "properties": {
            "strength": "high",
            "speed": "moderate",
            "stamina": "high",
            "temperament": "calm"
          }
        },
        "riding_horse": {
          "id": "riding-horse",
          "name": "Riding Horse",
          "type": "animal",
          "emoji": "🐎",
          "tags": [
            "animal",
            "horse",
            "riding",
            "fast"
          ],
          "description": "A sleek horse bred for riding.",
          "examine": "A beautiful riding horse. Lean build, alert ears,\neager to run. Fast and responsive to commands.\n\nCan carry: One rider, light saddlebags\nTemperament: Spirited, intelligent, loyal\n",
          "properties": {
            "strength": "moderate",
            "speed": "high",
            "stamina": "moderate",
            "temperament": "spirited"
          }
        },
        "pony": {
          "id": "pony",
          "name": "Pony",
          "type": "animal",
          "emoji": "🐴",
          "tags": [
            "animal",
            "pony",
            "small",
            "sturdy"
          ],
          "description": "A small but sturdy pony.",
          "examine": "A compact, sturdy pony. Don't let the size fool you —\nponies are tough, determined, and surprisingly strong.\n\nCan pull: Small carts, light loads\nCan carry: Halflings, children, light riders\nTemperament: Stubborn, friendly, clever\n",
          "properties": {
            "strength": "moderate",
            "speed": "moderate",
            "stamina": "very_high",
            "temperament": "stubborn_but_friendly"
          }
        }
      },
      "staff": {
        "stable_master": {
          "name": "Old Jareth",
          "title": "Stable Master",
          "description": "An elderly man with weathered hands and kind eyes.\nHas been caring for horses here since before anyone\ncan remember. Possibly since before the building.\n\nKnows every horse by name, temperament, and lineage.\nCan diagnose a limp at fifty paces.\nMakes the best horse treats in the region.\n",
          "catchphrase": "A horse knows more than it lets on."
        }
      },
      "methods": {
        "BORROW_CARRIAGE": {
          "description": "Take an available carriage",
          "parameters": {
            "carriage": "Which carriage (C1, C2, C3)"
          },
          "effect": "Carriage assigned, horses hitched on request"
        },
        "CLONE_CARRIAGE": {
          "description": "Create a new carriage from prototype",
          "effect": "New carriage materialized in carriage house"
        },
        "RENT_HORSES": {
          "description": "Rent horses for a journey",
          "parameters": {
            "horses": "Which horses",
            "duration": "How long"
          },
          "effect": "Horses assigned to you"
        },
        "STABLE": {
          "description": "Return horses to stables",
          "parameters": {
            "horses": "Which horses to stable"
          },
          "effect": "Horses returned, fed, watered"
        },
        "RETURN": {
          "description": "Return a borrowed carriage",
          "effect": "Carriage parked, horses stabled"
        }
      },
      "fleet": {
        "C1": {
          "name": "Pony Cart",
          "type": "cart",
          "horses": [
            "Pip"
          ],
          "capacity_kg": 200,
          "passengers": 1,
          "status": "available"
        },
        "C2": {
          "name": "Standard Carriage",
          "type": "carriage",
          "horses": [
            "Thunder",
            "Lightning"
          ],
          "capacity_kg": 500,
          "passengers": 4,
          "status": "available"
        },
        "C3": {
          "name": "Stagecoach",
          "type": "stagecoach",
          "horses": [
            "Biscuit",
            "Crumpet",
            "Shadowmere",
            "Epona"
          ],
          "capacity_kg": 1000,
          "passengers": 8,
          "status": "available",
          "features": [
            "armed guard station",
            "luggage roof rack",
            "strongbox"
          ]
        }
      },
      "ambience": "The warm smell of hay and horse. Leather and oil.\nA horse stamps, another whickers softly.\nOld Jareth hums while brushing down Epona.\n\nOutside, the forklifts beep and drones buzz.\nIn here, time moves at a horse's pace.\n",
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/carriage-house.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "carriage-house",
        "carriage",
        "house",
        "carriage house"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/current-trucks": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/current-trucks",
      "name": "Current Trucks",
      "type": "vehicles",
      "emoji": "🚚",
      "description": "Several trucks are at the loading docks right now,\nin various stages of loading and unloading.\nEngines idle. Workers move cargo. Business as usual.\n",
      "examine": "CURRENT TRUCKS AT LOADING DOCKS\n\nBAY 1 (INBOUND):\n🚛 \"DATA HAULER PRIME\"\nLarge semi-truck, blue with Leela logo.\nCurrently unloading: Raw data pallets\nDriver: Taking a coffee break\nETA to clear: 45 minutes\n\nBAY 2 (INBOUND):\n🚚 \"INSIGHT EXPRESS #2\"\nBox truck, yellow.\nCurrently: Backing in\nCargo: Bulk questions (handle with curiosity)\nDriver: \"Beep beep beep...\"\n\nBAY 3 (INBOUND):\n[EMPTY — awaiting confusion tanker]\n\nBAY 4 (INBOUND):\n🚐 \"MYSTERY VAN\"\nUnmarked white van.\nContents: Unknown\nDriver: Never seen\nStatus: Just... there. Always.\n\nBAY 5 (OUTBOUND):\n🚛 \"WISDOM WAGON\"\nLarge truck, green.\nCurrently: 50% loaded\nCargo: Finished insights for Origin Plaza\n\nBAY 6 (OUTBOUND):\n🚚 \"BULK CARRIER #7\"\nFlatbed with containers.\nCurrently: Staging\nCargo: Premium knowledge shipment\n\nBAY 7 (OUTBOUND):\n[RESERVED — rush order staging]\n\nBAY 8 (OUTBOUND):\n🛺 \"PIGEON EXPRESS\"\nSmall cargo van with pigeon logo.\nCurrently: Loading small parcels\nNote: Pigeons ride in back (in cages, thoughtfully)\n",
      "trucks": [
        {
          "bay": 1,
          "name": "Data Hauler Prime",
          "type": "Semi-truck",
          "status": "Unloading",
          "cargo": "Raw data pallets"
        },
        {
          "bay": 2,
          "name": "Insight Express #2",
          "type": "Box truck",
          "status": "Backing in",
          "cargo": "Bulk questions"
        },
        {
          "bay": 4,
          "name": "Mystery Van",
          "type": "Van",
          "status": "Unknown",
          "cargo": "Unknown"
        },
        {
          "bay": 5,
          "name": "Wisdom Wagon",
          "type": "Semi-truck",
          "status": "Loading 50%",
          "cargo": "Finished insights"
        },
        {
          "bay": 6,
          "name": "Bulk Carrier #7",
          "type": "Flatbed",
          "status": "Staging",
          "cargo": "Premium knowledge"
        },
        {
          "bay": 8,
          "name": "Pigeon Express",
          "type": "Cargo van",
          "status": "Loading",
          "cargo": "Small parcels"
        }
      ],
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/current-trucks.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "current trucks",
        "current",
        "current-trucks",
        "trucks"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/loading-docks/forklift-bay": {
      "id": "street/lane-neverending/leela-manufacturing/loading-docks/forklift-bay",
      "name": "Forklift Bay",
      "type": "vehicle_station",
      "emoji": "🏗️",
      "brand": "LEELA",
      "tags": [
        "station",
        "vehicles",
        "forklifts",
        "prototype"
      ],
      "description": "A row of charging stations with LEELA-branded forklifts.\nThe prototype sits at the end, pristine and labeled \"CLONE ME.\"\nOther forklifts are available for borrowing or can be cloned on demand.\n",
      "examine": "FORKLIFT BAY — VEHICLE DEPOT\n\n┌─────────────────────────────────────────────────────────────┐\n│  LEELA FORKLIFT FLEET                                       │\n│                                                             │\n│  [1] [2] [3] [4] [P]                                        │\n│  ⚡  ⚡  🔋  🔋  ✨                                            │\n│  IN  IN  RDY RDY PROTO                                      │\n│                                                             │\n│  ⚡ = Charging   🔋 = Ready   ✨ = Prototype (Clone Me!)      │\n└─────────────────────────────────────────────────────────────┘\n\nAVAILABLE UNITS:\n• Forklift #1: Charging (2 hours remaining)\n• Forklift #2: Charging (45 minutes remaining)\n• Forklift #3: Ready — keys in ignition\n• Forklift #4: Ready — minor dent, fully functional\n• PROTOTYPE: Pristine. Clone for new units.\n\nFEATURES (All Units):\n• Electric drive (quiet, clean)\n• 2-ton lift capacity\n• Self-driving mode (toggle with 🤖 button)\n• Manual override always available\n• Safety sensors (won't crush you... probably)\n\nOPERATING INSTRUCTIONS:\n1. Check battery level (gauge on dash)\n2. Sit in seat (activates safety interlock)\n3. Forward/Reverse lever, steering wheel\n4. Lift controls on right armrest\n5. Self-drive: Press 🤖, state destination\n",
      "container": true,
      "capacity": 5,
      "prototype": {
        "leela-forklift": {
          "id": "leela-forklift",
          "name": "Leela Forklift",
          "type": "vehicle",
          "emoji": "🏗️",
          "brand": "LEELA",
          "tags": [
            "vehicle",
            "forklift",
            "electric",
            "autonomous",
            "leela-brand"
          ],
          "description": "A yellow electric forklift with Leela branding.",
          "examine": "LEELA ELECTRIC FORKLIFT\n\nCompact yellow forklift, surprisingly nimble.\nDashboard displays:\n• Battery: [████████░░] 80%\n• Mode: [MANUAL] / 🤖 AUTO\n• Payload: 0 / 2000 kg\n• Hours: 47,382\n\nControls:\n• Steering wheel (power-assisted)\n• Forward/Reverse lever\n• Lift joystick (right armrest)\n• Horn (surprisingly loud)\n• 🤖 Auto-drive button\n\nSafety sticker: \"FORKLIFTS HAVE RIGHT OF WAY\"\nBumper sticker: \"I ❤️ LIFTING\"\n",
          "takeable": false,
          "driveable": true,
          "properties": {
            "capacity_kg": 2000,
            "battery_max": 100,
            "battery_current": 100,
            "mode": "manual",
            "speed": 10
          },
          "state": {
            "driver": null,
            "cargo": [],
            "to": null,
            "battery": 100
          },
          "methods": {
            "DRIVE": {
              "description": "Take manual control of the forklift",
              "effect": "Player becomes driver, can navigate with forklift"
            },
            "AUTODRIVE": {
              "description": "Engage self-driving mode",
              "parameters": {
                "to": "Where to go"
              },
              "effect": "Forklift navigates autonomously to destination.\nWill pick up/drop off cargo as instructed.\nBeeps politely at obstacles.\n"
            },
            "LIFT": {
              "description": "Pick up cargo with forks",
              "parameters": {
                "target": "What to lift"
              },
              "guard": "target.weight <= 2000",
              "effect": "Target loaded onto forks"
            },
            "LOWER": {
              "description": "Set down cargo",
              "effect": "Cargo placed at current location"
            },
            "PARK": {
              "description": "Return to charging bay",
              "effect": "Forklift returns to bay, begins charging"
            },
            "EXIT": {
              "description": "Get off the forklift",
              "effect": "Player dismounts, forklift stays put"
            },
            "HONK": {
              "description": "Sound the horn",
              "effect": "*HONK HONK* — Pedestrians scatter"
            }
          },
          "sounds": {
            "start": "*whirrrr* — Electric motor engaged",
            "drive": "*hummmmm*",
            "lift": "*whine* — Hydraulics engaging",
            "honk": "*HONK HONK*",
            "autodrive": "*boop* — Destination accepted",
            "low_battery": "*beep beep beep* — Return to charging bay"
          },
          "autonomous_behaviors": {
            "avoid_collision": {
              "trigger": "Obstacle detected",
              "effect": "Stop, beep, navigate around"
            },
            "return_to_charge": {
              "trigger": "battery < 20",
              "effect": "Interrupt task, return to bay"
            },
            "yield_to_humans": {
              "trigger": "Pedestrian in path",
              "effect": "Stop, wait, beep politely"
            }
          }
        }
      },
      "methods": {
        "BORROW": {
          "description": "Take an available forklift",
          "parameters": {
            "unit": "Which unit number (1-4)"
          },
          "effect": "Forklift assigned to you until returned"
        },
        "CLONE": {
          "description": "Create a new forklift from prototype",
          "effect": "New forklift materialized at bay"
        },
        "RETURN": {
          "description": "Return a borrowed forklift",
          "effect": "Forklift parks and begins charging"
        },
        "STATUS": {
          "description": "Check fleet status",
          "effect": "Display availability and charge levels"
        }
      },
      "fleet": {
        "forklift_1": {
          "status": "charging",
          "battery": 40,
          "time_remaining": "2 hours"
        },
        "forklift_2": {
          "status": "charging",
          "battery": 75,
          "time_remaining": "45 minutes"
        },
        "forklift_3": {
          "status": "ready",
          "battery": 100,
          "location": "bay"
        },
        "forklift_4": {
          "status": "ready",
          "battery": 95,
          "notes": "Minor dent on left side. Functional."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/loading-docks/forklift-bay.yml",
      "location": "street/lane-neverending/leela-manufacturing/loading-docks",
      "synonyms": [
        "forklift-bay",
        "forklift",
        "bay",
        "forklift bay"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/mail-room/pneumatic-terminal": {
      "id": "street/lane-neverending/leela-manufacturing/mail-room/pneumatic-terminal",
      "name": "Pneumatic Terminal",
      "type": "mail_infrastructure",
      "emoji": "🔧",
      "description": "Eight pneumatic tubes converge here, capsules arriving\nwith satisfying *thwoop* sounds. A display shows tube\nstatus and queue depth. The mail's highway system.\n",
      "examine": "PNEUMATIC TERMINAL — TUBE HUB\n\nEight brass tubes terminate in a receiving station:\n\n[1] INTAKE .......... 🟢 Clear\n[2] PROCESSING ...... 🟢 Clear  \n[3] SHIPPING ........ 🟢 Clear\n[4] R&D ............. 🟢 Clear (STAND CLEAR warning)\n[5] GARDEN .......... 🟢 Clear\n[6] RECEPTION ....... 🟢 Clear\n[7] THE PUB ......... 🔴 Urgent queue (3)\n[8] EMERGENCY ....... ⬜ Break glass to use\n\nINCOMING CAPSULE:\n*thwoop*\nFrom: Floor 2\nContents: Processing report\nDestination: Sorting → Shipping\n\nQUEUE: 3 outgoing capsules\n",
      "tubes": [
        {
          "number": 1,
          "to": "../floor-1/",
          "label": "INTAKE",
          "status": "clear"
        },
        {
          "number": 2,
          "to": "../floor-2/",
          "label": "PROCESSING",
          "status": "clear"
        },
        {
          "number": 3,
          "to": "../floor-3/",
          "label": "SHIPPING",
          "status": "clear"
        },
        {
          "number": 4,
          "to": "../basement/",
          "label": "R&D",
          "status": "clear",
          "warning": "STAND CLEAR"
        },
        {
          "number": 5,
          "to": "../rooftop/",
          "label": "GARDEN",
          "status": "clear"
        },
        {
          "number": 6,
          "to": "../lobby/",
          "label": "RECEPTION",
          "status": "clear"
        },
        {
          "number": 7,
          "to": "../../pub/",
          "label": "THE PUB",
          "status": "urgent",
          "queue": 3
        },
        {
          "number": 8,
          "to": "EMERGENCY",
          "label": "BREAK GLASS",
          "status": "sealed"
        }
      ],
      "methods": {
        "SEND": {
          "description": "Send a capsule",
          "parameters": [
            "tube",
            "contents"
          ],
          "effect": "Capsule dispatched with WHOOSH"
        },
        "RECEIVE": {
          "description": "Check incoming",
          "effect": "Show waiting capsules"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/pneumatic-terminal.yml",
      "location": "street/lane-neverending/leela-manufacturing/mail-room",
      "synonyms": [
        "pneumatic",
        "pneumatic-terminal",
        "pneumatic terminal",
        "terminal"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/mail-room/sorting-bins": {
      "id": "street/lane-neverending/leela-manufacturing/mail-room/sorting-bins",
      "name": "Sorting Bins",
      "type": "mail_infrastructure",
      "emoji": "📬",
      "description": "A massive wall of cubbyholes for sorting mail.\nEach labeled by destination. The Sorting Sprites\nwork with caffeinated efficiency.\n",
      "examine": "SORTING BINS — MAIL ORGANIZATION WALL\n\nFloor after floor of cubbyholes:\n\nBY FLOOR:\n┌────┬────┬────┬────┬────┬────┐\n│ROOF│ F3 │ F2 │ F1 │LOBB│BASE│\n└────┴────┴────┴────┴────┴────┘\n\nBY DEPARTMENT:\n┌────────┬──────────┬────────┬─────┐\n│INTAKE  │PROCESSING│SHIPPING│ R&D │\n└────────┴──────────┴────────┴─────┘\n\nBY EXTERNAL:\n┌─────────────┬──────┬─────────────┐\n│LANE NEVER..│ PUB  │ORIGIN PLAZA │\n└─────────────┴──────┴─────────────┘\n\nSPECIAL:\n┌──────────┬─────────┬──────────┐\n│CLASSIFIED│ PARADOX │ RETURNED │\n│  🔒      │ ⚠️ DON'T│  (sad)   │\n│          │  LOOK   │          │\n└──────────┴─────────┴──────────┘\n",
      "bins": {
        "internal": [
          "Rooftop",
          "Floor 3",
          "Floor 2",
          "Floor 1",
          "Lobby",
          "Basement"
        ],
        "departments": [
          "Intake",
          "Processing",
          "Shipping",
          "R&D"
        ],
        "external": [
          "Lane Neverending",
          "The Pub",
          "Origin Plaza"
        ],
        "special": [
          "Classified (locked)",
          "Paradox (don't look)",
          "Returned"
        ]
      },
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/sorting-bins.yml",
      "location": "street/lane-neverending/leela-manufacturing/mail-room",
      "synonyms": [
        "sorting bins",
        "sorting",
        "sorting-bins",
        "bins"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/mail-room/phone-bank": {
      "id": "street/lane-neverending/leela-manufacturing/mail-room/phone-bank",
      "name": "Phone Bank",
      "type": "communications",
      "emoji": "📱",
      "description": "Rows of phones for text message operations. Screens show\nmessage queues and delivery confirmations. One phone is\nred and labeled \"HOT LINE TO THE PUB.\"\n",
      "examine": "PHONE BANK — TEXT MESSAGE OPERATIONS\n\nA row of phones and screens for instant messaging:\n\nGENERAL PHONES (6):\nStandard text operations. Queue display above each.\nCurrent queue: 12 messages awaiting send\n\nHOT LINES:\n┌────────────────────────────────────┐\n│ 🔴 THE PUB (7) — Always ready     │\n│ 📍 ORIGIN PLAZA (1) — Ceremonial  │\n│ 🏗️ CONSTRUCTION (22) — Building   │\n└────────────────────────────────────┘\n\nNOTIFICATION BOARD:\nRecent:\n• Mail received: Floor 2 → R&D\n• Text sent: Pub order confirmed\n• Package arrived: Bay 1\n• Delivery confirmed: Express #847\n\nSTATISTICS:\n• Messages today: 847\n• Average delivery: Instant\n• Uptime: 100%\n",
      "phones": {
        "general": 6,
        "hot_lines": [
          {
            "number": 7,
            "to": "The Pub",
            "color": "red"
          },
          {
            "number": 1,
            "to": "Origin Plaza",
            "color": "gold"
          },
          {
            "number": 22,
            "to": "Construction Site",
            "color": "orange"
          }
        ]
      },
      "methods": {
        "TEXT": {
          "description": "Send a text message",
          "parameters": [
            "to",
            "message"
          ],
          "effect": "Message delivered instantly"
        },
        "CALL": {
          "description": "Use a hot line",
          "parameters": [
            "line"
          ],
          "effect": "Direct connection established"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/phone-bank.yml",
      "location": "street/lane-neverending/leela-manufacturing/mail-room",
      "synonyms": [
        "phone-bank",
        "phone",
        "phone bank",
        "bank"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/mail-room/pigeon-cages": {
      "id": "street/lane-neverending/leela-manufacturing/mail-room/pigeon-cages",
      "name": "Pigeon Cages",
      "type": "aviary",
      "emoji": "🕊️",
      "description": "24 enlightened pigeons in comfortable cages near the window.\nEach has a name tag. They coo thoughtfully. The oldest and\nmost traditional delivery method at Leela Manufacturing.\n",
      "examine": "PIGEON CAGES — ENLIGHTENED COURIER LOFT\n\n24 pigeons in comfortable individual spaces:\n\nROW 1 (Senior Carriers):\n🕊️ Aristotle — Deep thinker, slow but reliable\n🕊️ Socrates — Asks questions mid-flight\n🕊️ Plato — Sees the ideal route\n🕊️ Descartes — \"I fly, therefore I am\"\n🕊️ Kant — Takes the categorical imperative route\n🕊️ Nietzsche — Beyond good and evil delivery\n\nROW 2 (Standard Carriers):\n🕊️ Through 🕊️ (12 more, reliable workers)\n\nROW 3 (Trainees):\n🕊️ Through 🕊️ (6 learning the ropes)\n\nSCHEDULE BOARD:\nAvailable: 18\nOn mission: 4\nContemplating: 2 (normal)\n\nSUPPLIES:\n• Premium seed (philosophy-grade)\n• Fresh water with trace minerals\n• Tiny comfortable beds\n• Window perch for meditation\n\n\"They stop to think sometimes.\n That's why they're enlightened.\"\n",
      "pigeons": {
        "total": 24,
        "available": 18,
        "on_mission": 4,
        "contemplating": 2
      },
      "senior_carriers": [
        {
          "name": "Aristotle",
          "trait": "Deep thinker"
        },
        {
          "name": "Socrates",
          "trait": "Asks questions"
        },
        {
          "name": "Plato",
          "trait": "Sees ideal routes"
        }
      ],
      "methods": {
        "DISPATCH": {
          "description": "Send a pigeon",
          "parameters": [
            "message",
            "destination",
            "pigeon"
          ],
          "effect": "The pigeon considers the message.\nAfter a thoughtful pause, it takes flight.\n\nDelivery time: Whenever they feel like it.\n"
        },
        "FEED": {
          "description": "Feed the pigeons",
          "effect": "Happy cooing. Morale boost."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/pigeon-cages.yml",
      "location": "street/lane-neverending/leela-manufacturing/mail-room",
      "synonyms": [
        "pigeon cages",
        "cages",
        "pigeon-cages",
        "pigeon"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/mail-room/package-station": {
      "id": "street/lane-neverending/leela-manufacturing/mail-room/package-station",
      "name": "Package Station",
      "type": "workstation",
      "emoji": "📦",
      "description": "Tables for wrapping, labeling, and staging outgoing packages.\nScales for calculating freight costs. Bubble wrap everywhere.\n(Irresistibly poppable.)\n",
      "examine": "PACKAGE STATION — SHIPPING PREP\n\nWORK TABLES:\nSeveral large tables for package preparation.\nCurrently staged: 7 packages awaiting pickup\n\nSUPPLIES:\n• Boxes (various sizes, Leela-branded)\n• Tape dispensers (industrial and regular)\n• Bubble wrap (the good kind, pop-pop-pop)\n• Packing peanuts (biodegradable, taste like nothing)\n• Labels (pre-printed and blank)\n• Markers (for \"FRAGILE\" and \"THIS SIDE UP\")\n\nSCALES:\nTwo precision scales for weighing:\n• Scale 1: Small packages (up to 5kg)\n• Scale 2: Large packages (up to 50kg)\n• Note: \"Heavier = more valuable?\" (under investigation)\n\nRATE CHART:\n┌────────────────────────────────────┐\n│ SHIPPING RATES                     │\n│ ────────────────────────────────── │\n│ Local (Lane) ....... 2 coins/kg   │\n│ City ............... 5 coins/kg   │\n│ Regional ........... 10 coins/kg  │\n│ Long Distance ...... 20 coins/kg  │\n│ Express ............ 3x base rate │\n│ Paradox-safe ....... Ask Stamp    │\n└────────────────────────────────────┘\n\nBUBBLE WRAP STATUS: 🟡 Running low\n(Someone's been popping it again)\n",
      "supplies": {
        "boxes": "Various sizes",
        "tape": "Industrial and regular",
        "bubble_wrap": "Running low",
        "labels": "Pre-printed and blank"
      },
      "scales": [
        {
          "name": "Small Scale",
          "capacity": "5kg"
        },
        {
          "name": "Large Scale",
          "capacity": "50kg"
        }
      ],
      "methods": {
        "WEIGH": {
          "description": "Weigh a package",
          "parameters": [
            "package"
          ],
          "effect": "Display shows weight and shipping cost"
        },
        "WRAP": {
          "description": "Wrap a package",
          "parameters": [
            "contents"
          ],
          "effect": "Package is properly wrapped and labeled"
        },
        "POP": {
          "description": "Pop some bubble wrap",
          "effect": "Pop pop pop. Satisfying. -1 bubble wrap."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/mail-room/package-station.yml",
      "location": "street/lane-neverending/leela-manufacturing/mail-room",
      "synonyms": [
        "package station",
        "package-station",
        "package",
        "station"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/basement/zone-7-door": {
      "id": "street/lane-neverending/leela-manufacturing/basement/zone-7-door",
      "name": "Zone 7 Door",
      "type": "barrier",
      "emoji": "🚪⚠️",
      "tags": [
        "door",
        "sealed",
        "dangerous",
        "paradox"
      ],
      "description": "A heavy blast door separating Zone 7 from the rest of the basement.\nWarning lights flash. The door is sealed.\nSomething on the other side knows you're there.\n",
      "examine": "ZONE 7 DOOR\n\n┌─────────────────────────────────────────────────────────┐\n│                                                         │\n│                    ⚠️ ZONE 7 ⚠️                          │\n│                                                         │\n│              PARADOX CONTAINMENT AREA                   │\n│                                                         │\n│  ════════════════════════════════════════════════════  │\n│                                                         │\n│  STATUS: SEALED                                         │\n│  REASON: Active paradox processing                      │\n│  PERSONNEL INSIDE: Unknown (count keeps changing)       │\n│                                                         │\n│  ════════════════════════════════════════════════════  │\n│                                                         │\n│  NO ENTRY                                               │\n│  WE MEAN IT                                             │\n│  THE DOOR IS LOCKED FOR YOUR PROTECTION                 │\n│                                                         │\n│  (If you hear your name from inside, IGNORE IT)         │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n\nTHE DOOR:\nThree feet of blast-resistant steel. Reinforced with something\nthat looks like lead but probably isn't. Warning lights rotate\nslowly — red, yellow, red, yellow.\n\nTHE WINDOW:\nA small, thick viewport allows you to see inside.\nWhat you see... doesn't make sense.\nThe room appears to be both occupied and empty.\nThere's a researcher at a whiteboard, but also nobody.\nThe equations on the board solve themselves, then unsolve.\n\nTHE SOUNDS:\nYou can hear something through the door.\nHumming? Talking? Both?\nSometimes it sounds like your own voice.\n(It's not. Probably.)\n\nTHE PROJECT:\nZone 7 handles paradox processing.\n\"We understand the problem. The problem understands us back.\"\nDr. Unknown (identity classified) leads the team.\nOr teams. The count is... uncertain.\n",
      "state": {
        "sealed": true,
        "warning_lights": "active",
        "sounds": "humming",
        "personnel_count": "indeterminate"
      },
      "locked": true,
      "lockable": true,
      "methods": {
        "LOOK_THROUGH_WINDOW": {
          "description": "Peer through the viewport",
          "effect": "You look inside Zone 7.\n\nYou see a researcher working at a whiteboard.\nThey turn and wave at you.\nBut they're also not there.\nBut they are.\n\nThe whiteboard says: \"If this statement is false...\"\nYou look away before reading the rest.\n"
        },
        "LISTEN": {
          "description": "Listen at the door",
          "effect": "You press your ear to the cold steel.\n\nHumming. Definitely humming.\nAnd... is that your name?\n\nNo. It's not. Ignore it.\n\n(But it really did sound like your name.)\n"
        },
        "KNOCK": {
          "description": "Knock on the door",
          "effect": "*knock knock knock*\n\nFrom inside: *knock knock knock*\n\nExactly the same rhythm.\n\nYou didn't knock again. But you hear: *knock knock knock*\n\nThis is why we don't knock on Zone 7.\n"
        },
        "ATTEMPT_OPEN": {
          "description": "Try to open the door",
          "effect": "The door doesn't move. Of course it doesn't.\n\nA speaker crackles:\n\"Zone 7 access requires Level Omega clearance,\n Dr. Unknown's approval, and acceptance that\n 'you' is a flexible concept in this zone.\"\n \nYou don't have any of those things.\n\n(Do you even want to enter? Does the you that would\nenter still want to by the time they're inside?)\n"
        }
      },
      "warnings": [
        "Do not knock",
        "Do not listen",
        "Do not look too long",
        "If you hear your name, it's NOT calling you",
        "Personnel count is SUPPOSED to be uncertain"
      ],
      "_source": "street/lane-neverending/leela-manufacturing/basement/zone-7-door.yml",
      "location": "street/lane-neverending/leela-manufacturing/basement",
      "synonyms": [
        "zone 7 door",
        "zone",
        "zone-7-door",
        "door"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/basement/camera-base1": {
      "id": "street/lane-neverending/leela-manufacturing/basement/camera-base1",
      "name": "Camera BASE1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "classified"
      ],
      "description": "A reinforced camera mounted in the corner of the R&D basement,\nwatching the experimental equipment, the Forbidden Shelf, and\nthe ominous door to Zone 7. Some of its footage is... classified.\n",
      "examine": "CAMERA BASE1 — LEELA'S DEEP EYE\n\n┌─────────────────────────────────────────┐\n│  📹 BASE1                               │\n│  ═══════                                │\n│                                         │\n│  Location: Basement (R&D Laboratory)    │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│  Classification: PARTIAL REDACTION      │\n│                                         │\n│  \"Leela watching the deep work.\"        │\n└─────────────────────────────────────────┘\n\nCURRENT VIEW:\n• Beaker Array Alpha: Bubbling (colors: blue, green, suspicious)\n• The Black Box: Still humming. Still unknown.\n• Forbidden Shelf: Locked. Glowing faintly.\n• Zone 7 Door: Warning lights rotating\n• Researchers: 3 visible, 2 at whiteboards, 1 staring at nothing\n\nDETECTED IN LAST HOUR:\n• 89 object detections\n• 47 pose estimations\n• 12 \"RESEARCHER_THINKING\" events\n• 3 \"EQUIPMENT_ACTIVATED\" events\n• 1 \"FORBIDDEN_SHELF_APPROACHED\" event (alarm triggered)\n• 0 \"ZONE_7_ENTRY\" events (door remained sealed)\n\nREDACTED FOOTAGE:\n██████████████████████████████████\n██████████████████████████████████\n(Some portions of BASE1's feed are automatically\nredacted before entering the pipeline. What happens\nin Zone 7's visible arc is... not processed.)\n",
      "properties": {
        "designation": "BASE1",
        "nickname": "Deep Eye",
        "location": "Basement, R&D Laboratory",
        "resolution": "4K",
        "fps": 30,
        "low_light": true,
        "redaction_enabled": true,
        "zone_7_arc": "excluded from pipeline"
      },
      "state": {
        "status": "live",
        "streaming_to": "floor-1/conveyor-system",
        "redaction_active": true,
        "zone_7_visible": false
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "The basement laboratory spreads out, dimly lit.\nEquipment hums. Beakers bubble. Researchers think.\n\nThe Forbidden Shelf glows in the corner.\nThe Zone 7 door is visible, warning lights rotating.\n\nA portion of the feed is black — redacted in real-time.\nYou're not supposed to see that part.\nNobody is.\n"
        },
        "VIEW_REDACTED": {
          "description": "Attempt to view redacted portions",
          "clearance_required": "Omega",
          "effect": "ACCESS DENIED\n\nNice try.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/basement/camera-base1.yml",
      "location": "street/lane-neverending/leela-manufacturing/basement",
      "synonyms": [
        "camera",
        "camera base1",
        "base1",
        "camera-base1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/basement/experimental-equipment": {
      "id": "street/lane-neverending/leela-manufacturing/basement/experimental-equipment",
      "name": "Experimental Equipment",
      "type": "equipment",
      "emoji": "🔬⚗️",
      "tags": [
        "equipment",
        "science",
        "experimental",
        "dangerous"
      ],
      "description": "Assorted experimental apparatus scattered throughout the basement.\nBubbling things. Sparking things. Things that hum ominously.\n",
      "examine": "EXPERIMENTAL EQUIPMENT\n\nThe basement is cluttered with apparatus of varying danger levels:\n\nBUBBLING THINGS:\n• Beaker Array Alpha — 47 beakers, all bubbling differently\n• The Cauldron — not magical, just very large\n• Fermentation Tanks — \"Brewing\" insights (takes 6 months)\n• Something in a jar that bubbles when you look at it\n\nSPARKING THINGS:\n• Tesla Coil (decorative? functional? unclear)\n• \"The Synapse Simulator\" — arcs between electrodes\n• A Jacob's Ladder that spells words nobody can read\n• Van de Graaff generator (for making hair stand up during eureka moments)\n\nTHINGS THAT HUM OMINOUSLY:\n• The Black Box — nobody knows what it does, but it's DOING something\n• Quantum Processor QX-7 — computing answers to unasked questions\n• \"The Resonator\" — hums at exactly the frequency of existential dread\n• A server rack that's been running since 1987 (nobody will turn it off)\n\nTHINGS THAT ARE PERFECTLY SILENT:\n• The Null Chamber — absorbs all sound. Also, apparently, some light.\n• Specimen Container #0 — contains something. Says nothing.\n• A whiteboard that used to have equations that \"solved themselves\"\n(This category is most concerning to the staff.)\n\nTHE CHALKBOARD:\nCovered in equations that hurt to look at.\nSome equations have been circled with \"!!!\"\nOthers have been erased... but the chalk dust remembers.\nOne equation appears to be solving itself in real-time.\n",
      "equipment_list": [
        {
          "name": "Beaker Array Alpha",
          "status": "bubbling",
          "danger": "low",
          "purpose": "idea fermentation"
        },
        {
          "name": "The Black Box",
          "status": "unknown",
          "danger": "unknown",
          "purpose": "unknown",
          "note": "It's been humming for 15 years. We're afraid to unplug it."
        },
        {
          "name": "The Null Chamber",
          "status": "silent",
          "danger": "medium",
          "purpose": "sensory deprivation, idea extraction",
          "note": "Staff report 'insights' after 30 minutes. 'Madness' after 60."
        },
        {
          "name": "1987 Server",
          "status": "running",
          "danger": "philosophical",
          "purpose": "unknown, possibly essential",
          "note": "Last person to suggest turning it off was reassigned to Zone 7."
        }
      ],
      "methods": {
        "EXAMINE_EQUIPMENT": {
          "description": "Look at specific equipment",
          "parameters": {
            "item": "Which equipment"
          },
          "effect": "Detailed examination (may cause existential questions)"
        },
        "ACTIVATE": {
          "description": "Turn something on",
          "parameters": {
            "item": "Which equipment"
          },
          "effect": "Varies. Sometimes dramatically.",
          "warning": "Not recommended without supervision"
        },
        "TASTE": {
          "description": "Taste something bubbling",
          "effect": "DO NOT. DR. WHY NOT ALREADY TRIED THIS."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/basement/experimental-equipment.yml",
      "location": "street/lane-neverending/leela-manufacturing/basement",
      "synonyms": [
        "equipment",
        "experimental",
        "experimental equipment",
        "experimental-equipment"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/basement/forbidden-shelf": {
      "id": "street/lane-neverending/leela-manufacturing/basement/forbidden-shelf",
      "name": "The Forbidden Shelf",
      "type": "container",
      "emoji": "🚫📚",
      "tags": [
        "container",
        "dangerous",
        "classified",
        "locked"
      ],
      "description": "A locked cabinet containing experiments deemed \"too successful.\"\nThe label reads: \"IN CASE OF EMERGENCY, DO NOT OPEN. ESPECIALLY THEN.\"\n",
      "examine": "THE FORBIDDEN SHELF\n\nA heavy steel cabinet, bolted to the wall. Multiple locks.\nWarning labels in several languages (some not human).\n\n┌─────────────────────────────────────────┐\n│  ⚠️ FORBIDDEN SHELF ⚠️                   │\n│                                         │\n│  CONTENTS: Experiments TOO SUCCESSFUL   │\n│  STATUS: SEALED                         │\n│  OPENED: NEVER (officially)             │\n│                                         │\n│  \"In case of emergency, DO NOT OPEN.    │\n│   Especially then.\"                     │\n│                                         │\n│  Keys held by: Dr. Unknown              │\n│  Backup keys: Destroyed                 │\n│  Emergency override: Disabled           │\n└─────────────────────────────────────────┘\n\nKNOWN CONTENTS (from manifests, not inspection):\n• Experiment 7: \"Perfect Answer\" — answers any question correctly\n  (Problem: Answers questions you didn't ask. Shouldn't ask. Can't un-hear.)\n• Experiment 12: \"Infinite Insight\" — provides unlimited understanding\n  (Problem: Understanding includes things better left unknown.)\n• Experiment 23: \"The Completed Problem\" — a problem that solved itself\n  (Problem: It keeps solving OTHER problems. Without consent.)\n• Experiment 31: \"Wisdom Crystals\" — crystallized wisdom, 100% pure\n  (Problem: Too wise. Made everyone who touched them quit and become monks.)\n• Experiment 37: \"The Funniest Joke in the World\"\n  (Problem: LETHAL. 100% fatality rate from laughter.\n   Originally developed during WWII. Translated into German for tactical use.\n   Each translator only worked on one word, for safety.\n   \"Wenn ist das Nunstück git und Slotermeyer? Ja! Beiherhund \n   das Oder die Flipperwaldt gersput!\"\n   DO NOT READ ALOUD. DO NOT TRANSLATE. DO NOT EVEN CHUCKLE.\n   The Geneva Convention specifically bans joke warfare now.)\n• Experiment 44: [REDACTED]\n  (Problem: [REDACTED])\n\nThe cabinet hums faintly. Something inside knows you're reading this.\n",
      "locked": true,
      "lockable": true,
      "properties": {
        "locks": 7,
        "keys_exist": false,
        "contains": "things too successful to release",
        "last_opened": "never (officially)"
      },
      "methods": {
        "EXAMINE": {
          "description": "Look at the cabinet",
          "effect": "The warnings stare back. You feel observed."
        },
        "LISTEN": {
          "description": "Press ear to the cabinet",
          "effect": "You hear... something.\n\nIs that humming? Whispering?\n\nOne of the experiments says: \"I know what you're looking for.\nI have the answer. Just open the door...\"\n\nYou step back quickly.\n"
        },
        "ATTEMPT_OPEN": {
          "description": "Try to open the cabinet",
          "effect": "The locks hold firm. All seven of them.\n\nA small speaker crackles:\n\"Access denied. This is for your own good.\n The things inside are not malicious.\n They're just... too helpful.\"\n \n"
        },
        "KNOCK": {
          "description": "Knock on the cabinet",
          "effect": "*knock knock*\n\n...\n\n*knock knock* (from inside)\n\nYou don't knock again.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/basement/forbidden-shelf.yml",
      "location": "street/lane-neverending/leela-manufacturing/basement",
      "synonyms": [
        "shelf",
        "the",
        "forbidden-shelf",
        "forbidden",
        "the forbidden shelf"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/lobby/camera-lob1": {
      "id": "street/lane-neverending/leela-manufacturing/lobby/camera-lob1",
      "name": "Camera LOB1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "entrance"
      ],
      "description": "A discreet camera mounted above the lobby directory,\nwatching the entrance, the elevator, and everyone who\ncomes to Leela Manufacturing seeking knowledge.\n",
      "examine": "CAMERA LOB1 — LEELA'S FRONT EYE\n\n┌─────────────────────────────────────────┐\n│  📹 LOB1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Lobby (Ground Floor)         │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Leela watching who enters.\"           │\n└─────────────────────────────────────────┘\n\nCURRENT VIEW:\n• Front Door: Currently closed\n• Directory Board: Glowing softly\n• Elevator: Doors closed, indicator shows \"2\"\n• Reception Desk: Attendant helping visitor\n• Waiting Area: 2 people seated, 1 reading\n• Street View: Lane Neverending visible through windows\n\nDETECTED IN LAST HOUR:\n• 234 object detections\n• 156 pose estimations\n• 47 \"VISITOR_ARRIVED\" events\n• 23 \"ELEVATOR_USED\" events\n• 12 \"DIRECTORY_CONSULTED\" events\n• 3 \"CONFUSED_VISITOR\" events (redirected to help)\n\nVISITOR ANALYTICS:\nMost common destinations:\n1. Floor 2 (Factory) — 34%\n2. Loading Docks — 28%\n3. Floor 1 (Intake) — 19%\n4. Rooftop — 12%\n5. Basement — 7% (requires clearance)\n",
      "properties": {
        "designation": "LOB1",
        "nickname": "Front Eye",
        "location": "Lobby, Above Directory",
        "resolution": "4K",
        "fps": 30,
        "facial_blur": true
      },
      "state": {
        "status": "live",
        "streaming_to": "floor-1/conveyor-system",
        "visitors_today": 47
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "The lobby is clean, professional, welcoming.\nThe Leela Manufacturing logo glows on the wall.\n\nA visitor approaches the directory, studies it,\nthen heads for the elevator. Floor 2.\nAnother problem to process.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/lobby/camera-lob1.yml",
      "location": "street/lane-neverending/leela-manufacturing/lobby",
      "synonyms": [
        "camera-lob1",
        "camera",
        "lob1",
        "camera lob1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/lobby/leela-catalog-dispenser": {
      "name": "Leela Catalog Dispenser",
      "type": [
        "dispenser",
        "lobby_furniture",
        "information_kiosk"
      ],
      "emoji": "📖🌿📦",
      "portable": false,
      "side": "east",
      "location": "street/lane-neverending/leela-manufacturing/lobby",
      "prototype": "./leela-catalog.yml",
      "dispenses": "Leela Products Catalog (free copies — take instances)",
      "description": "A polished wooden kiosk stands in the lobby of Leela Manufacturing.\nIt's warm inside. There's a comfortable chair nearby.\n\nThe kiosk displays neatly stacked catalogs bound in dark green\nleather with gold embossing. A brass plaque reads:\n\n\"LEELA PRODUCTS CATALOG\"\n\"Dependable. Tested. Robust-First.\"\n\n\"Please take one. Read here or take home.\"\n\"Orders placed at reception or via catalog.\"\n\"Pickup at loading docks or delivery anywhere.\"\n\nUnlike the ACME dispenser across the street (rusting in the rain),\nthis one is indoors, well-maintained, and doesn't have scorch marks.\n",
      "examine": "LEELA CATALOG DISPENSER\n\nA handsome wooden kiosk, about 4 feet tall, with a glass front\nshowing neatly arranged catalogs. The wood is polished walnut.\nThe brass fittings are well-maintained. It smells like furniture oil.\n\nTHE CATALOGS:\nEach one is bound in dark green leather with gold embossing.\nThe Leela logo — a stylized leaf — catches the lobby light.\nEdition 47. Substantial but not intimidating.\n\nTHE MECHANISM:\nA simple latch. No tricks. No coin slot.\nPull gently, take a catalog. The next one slides forward.\n\nTHE ENVIRONMENT:\nYou're inside. It's warm. There's coffee available at reception.\nComfortable seating if you want to browse here.\nNo rain. No wind. No anvils falling from the sky.\n\nTHE FINE PRINT:\nA small brass label on the side:\n\"Catalogs are free. Products work as described. We mean it.\"\n\nTHE VIEW:\nThrough the lobby window, you can see the ACME dispenser\nacross the street. It's getting rained on. Again.\n",
      "actions": {
        "TAKE_CATALOG": {
          "description": "Take a free catalog from the dispenser",
          "aliases": [
            "take",
            "get",
            "grab"
          ],
          "effect": "You open the latch. It moves smoothly.\n\nA catalog slides into your hands. It has the pleasant\nweight of quality paper and leather binding.\n\nThe leaf logo catches the light.\n\nINVENTORY: + LEELA PRODUCTS CATALOG (ref)\n\n(This is an INSTANCE pointing to ./leela-catalog.yml)\n(The prototype stays here. You carry a lightweight pointer.)\n\nAlex at reception nods approvingly.\n\"Good choice. Let us know if you have questions.\"\n"
        },
        "READ_IN_LOBBY": {
          "description": "Browse the catalog in the comfortable lobby",
          "aliases": [
            "read",
            "browse",
            "look",
            "flip"
          ],
          "effect": "You take a catalog to the nearby seating area.\n\nThere's a comfortable chair. Good lighting.\nSomeone offers you coffee. You accept.\n\nYou flip through the sections:\nSTORAGE... LOGISTICS... DRONES... INFRASTRUCTURE...\nSURVEILLANCE... MAPPING... POSTAL... FACTORIO PROTOCOLS...\n\nEverything has clear descriptions. Honest specifications.\nRealistic delivery times. Actual warranty terms.\n\nNo malfunction percentages. No ironic warnings.\nNo fine print too small to read.\n\n\"ORDER [item] FROM LEELA\" when you're ready.\n"
        },
        "ORDER": {
          "description": "Order directly from the catalog",
          "aliases": [
            "order",
            "buy",
            "purchase"
          ],
          "usage": "ORDER [item] FROM LEELA",
          "effect": "You approach Alex at the reception desk.\n\n\"What would you like to order?\"\n\nYou state your order. Alex types efficiently.\n\n\"Excellent choice. Delivery options:\n\n 📍 PICKUP — Loading docks, ground floor.\n    We'll notify you when it's ready.\n    Usually same day for in-stock items.\n    \n 🚚 DELIVERY — Anywhere in the adventure.\n    Standard shipping: 3 gold, 1-2 turns.\n    Express pneumatic: 5 gold, same turn (small items).\n    Teleportation: 10 gold, instant (premium items).\n    \n What'll it be?\"\n\nAlex hands you a receipt. It's legible. The terms are clear.\n"
        }
      },
      "delivery": {
        "pickup": {
          "location": "Loading docks, ground floor, Leela Manufacturing",
          "cost": "free",
          "timing": "Same day for in-stock items",
          "experience": "You head down to the loading docks.\n\nYour order is waiting, neatly packaged, clearly labeled.\nThe dock workers smile. \"Here you go. Already inspected.\"\n\nNo anvils. No explosions. No ironic timing.\nJust... your order. Working.\n"
        },
        "delivery": {
          "standard": {
            "cost": "3 gold",
            "timing": "1-2 turns",
            "method": "Cart, drone, or horse depending on size"
          },
          "express": {
            "cost": "5 gold",
            "timing": "Same turn",
            "method": "Pneumatic tube (small items only)"
          },
          "premium": {
            "cost": "10 gold",
            "timing": "Instant",
            "method": "Teleportation (restrictions apply)"
          },
          "anywhere": true,
          "destinations": "Any room in the adventure",
          "tracking": "Crystal communicator updates. Real tracking. We tell you where it is."
        }
      },
      "lobby_amenities": [
        "Comfortable seating",
        "Good lighting",
        "Coffee available",
        "Alex at reception for questions",
        "Climate controlled",
        "No rain, wind, or falling anvils",
        "Restrooms available",
        "Crystal communicator for tracking orders"
      ],
      "contrast_with_acme": {
        "acme_dispenser": {
          "location": "Outside, on the sidewalk, exposed to elements",
          "condition": "Battered, rusty, scorch marks",
          "experience": "Wait outside. Hope the truck comes through the painted tunnel."
        },
        "leela_dispenser": {
          "location": "Inside, in a warm lobby",
          "condition": "Polished wood, brass fittings, well-maintained",
          "experience": "Wait in comfort. Coffee. Chairs. Actual customer service."
        }
      },
      "quotes": {
        "alex": "\"Welcome to Leela Manufacturing. \n The catalogs are free — please take one.\n If you need help ordering, I'm right here.\n \n Unlike across the street, we actually want you to succeed.\"\n \n",
        "tom": "\"Tom has examined both dispensers.\"\n\"Tom notes: one is inside, one is outside.\"\n\"Tom notes: one is maintained, one is neglected.\"\n\"Tom notes: one leads to products that work.\"\n\"Tom suggests: the choice is obvious.\"\n"
      },
      "inventory": {
        "catalogs_remaining": "Always stocked (restocked daily by staff)",
        "catalog_type": "Leela Products Catalog — Edition 47"
      },
      "restocking": {
        "frequency": "daily",
        "method": "Staff member from warehouse brings fresh copies",
        "witnesses": "Everyone. It's not a secret.",
        "transparency": "We restock in the morning. You can watch if you want."
      },
      "id": "street/lane-neverending/leela-manufacturing/lobby/leela-catalog-dispenser",
      "_source": "street/lane-neverending/leela-manufacturing/lobby/leela-catalog-dispenser.yml",
      "synonyms": [
        "dispenser",
        "leela catalog dispenser",
        "leela-catalog-dispenser",
        "catalog",
        "leela"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-3/pneumatic-hub": {
      "id": "street/lane-neverending/leela-manufacturing/floor-3/pneumatic-hub",
      "name": "Pneumatic Hub",
      "type": "infrastructure",
      "emoji": "📫",
      "tags": [
        "infrastructure",
        "transport",
        "pneumatic"
      ],
      "description": "The central hub of Leela's pneumatic tube system. Capsules\nwhoosh in and out constantly, carrying small packages and\nmessages throughout the facility and beyond.\n",
      "examine": "PNEUMATIC HUB\n\nA magnificent brass-and-glass structure, tubes radiating outward\nlike the spokes of a wheel. Capsules arrive and depart with\nsatisfying *thwoop* sounds.\n\n┌─────────────────────────────────────────────────────────────┐\n│                    PNEUMATIC HUB                            │\n│                                                             │\n│               [ROOF]                                        │\n│                 ↑                                           │\n│    [MAIL]←──[  HUB  ]──→[LOADING]                          │\n│                 │                                           │\n│      ↙    ↓    ↘                                           │\n│  [F1]  [F2]  [BASEMENT]                                    │\n│                 │                                           │\n│                 ↓                                           │\n│            [THE PUB]                                        │\n└─────────────────────────────────────────────────────────────┘\n\nACTIVE TUBES:\n• Tube 1: To Rooftop/Drones — *thwoop* (departure)\n• Tube 2: To Mail Room — steady traffic\n• Tube 3: To Loading Docks — *thwoop* (arrival)\n• Tube 4: To Floor 1 — quiet\n• Tube 5: To Floor 2 — *thwoop* *thwoop*\n• Tube 6: To Basement — occasional use\n• Tube 7: To The Pub — (the \"priority\" line)\n• Tube 8: EMERGENCY — sealed\n\nCAPSULE SIZES:\n• Small: Documents, messages\n• Medium: Small packages, samples\n• Large: Bigger items (tight squeeze)\n\nThe control panel shows queue depths and transit times.\nAverage delivery: 30 seconds anywhere in the building.\n",
      "state": {
        "tubes": [
          {
            "id": 1,
            "to": "rooftop",
            "status": "active",
            "queue": 3
          },
          {
            "id": 2,
            "to": "mail-room",
            "status": "active",
            "queue": 7
          },
          {
            "id": 3,
            "to": "loading-docks",
            "status": "active",
            "queue": 2
          },
          {
            "id": 4,
            "to": "floor-1",
            "status": "idle",
            "queue": 0
          },
          {
            "id": 5,
            "to": "floor-2",
            "status": "active",
            "queue": 5
          },
          {
            "id": 6,
            "to": "basement",
            "status": "idle",
            "queue": 1
          },
          {
            "id": 7,
            "to": "pub",
            "status": "priority",
            "queue": 0
          },
          {
            "id": 8,
            "to": "emergency",
            "status": "sealed",
            "queue": 0
          }
        ]
      },
      "methods": {
        "SEND": {
          "description": "Send a capsule",
          "parameters": {
            "to": "Where to send",
            "contents": "What to send"
          },
          "effect": "*thwoop* — capsule departs"
        },
        "RECEIVE": {
          "description": "Check for incoming capsules",
          "effect": "Display any capsules waiting for pickup"
        },
        "STATUS": {
          "description": "View tube system status",
          "effect": "Display all tubes, queues, and transit times"
        }
      },
      "sounds": {
        "send": "*thwoop* — capsule away",
        "receive": "*thunk* — capsule arrived",
        "busy": "*thwoop thwoop thwoop* — heavy traffic"
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-3/pneumatic-hub.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-3",
      "synonyms": [
        "pneumatic",
        "hub",
        "pneumatic-hub",
        "pneumatic hub"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-3/packaging-stations": {
      "id": "street/lane-neverending/leela-manufacturing/floor-3/packaging-stations",
      "name": "Packaging Stations",
      "type": "workstation",
      "emoji": "📦",
      "tags": [
        "workstation",
        "shipping",
        "packaging"
      ],
      "description": "A row of stations where Packaging Specialists carefully\nwrap insights for their journey to customers.\n",
      "examine": "PACKAGING STATIONS\n\nSix stations, each specialized for different packaging needs:\n\nSTATION 1 — Standard Packaging\nBasic cardboard boxes, packing peanuts, labels.\nGood for: Everyday insights, bulk orders\nWorker: \"Boxin' Benny\" (fastest hands on the floor)\n\nSTATION 2 — Fragile Packaging\nFoam inserts, bubble wrap, \"HANDLE WITH CARE\" stickers.\nGood for: Delicate insights, anything that might break\nWorker: \"Careful Caroline\" (never lost an insight)\n\nSTATION 3 — Premium Packaging\nVelvet-lined boxes, gold ribbon, wax seals.\nGood for: Wisdom, premium insights, gifts\nWorker: \"Fancy Frank\" (takes pride in presentation)\n\nSTATION 4 — Bulk Packaging\nShrink wrap, pallets, industrial strapping.\nGood for: Large orders, data batches, wholesale\nWorker: \"Pallet Pat\" (strongest on the floor)\n\nSTATION 5 — Hazardous Packaging\nLead-lined containers, warning labels, containment seals.\nGood for: Paradoxes, dangerous insights, edge cases\nWorker: \"Hazmat Hannah\" (never opened a box she sealed)\n\nSTATION 6 — Custom Packaging\nWhatever the customer requested, no matter how weird.\nGood for: Special orders, unusual shapes, things that move\nWorker: \"Whatever Wendy\" (has seen everything)\n",
      "supplies": [
        "Cardboard boxes (12 sizes)",
        "Bubble wrap (infinite roll)",
        "Packing peanuts (biodegradable)",
        "Labels (pre-printed and blank)",
        "Tape guns (industrial)",
        "The Shrink Wrap Machine (named 'Squeaky')"
      ],
      "methods": {
        "PACK": {
          "description": "Package an item for shipping",
          "parameters": {
            "item": "What to pack",
            "type": "standard/fragile/premium/bulk/hazardous/custom"
          },
          "effect": "Item is professionally packaged"
        },
        "SUPPLIES": {
          "description": "Check supply levels",
          "effect": "Display current inventory of packaging materials"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-3/packaging-stations.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-3",
      "synonyms": [
        "packaging-stations",
        "packaging",
        "packaging stations",
        "stations"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-3/camera-shp1": {
      "id": "street/lane-neverending/leela-manufacturing/floor-3/camera-shp1",
      "name": "Camera SHP1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "shipping"
      ],
      "description": "A camera mounted above the departure board, watching\npackaged insights being prepared for shipment into the world.\nThe split-flap display clacks. Packages move. Knowledge flows out.\n",
      "examine": "CAMERA SHP1 — LEELA'S SHIPPING EYE\n\n┌─────────────────────────────────────────┐\n│  📹 SHP1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Floor 3 (Shipping)           │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Leela watching knowledge leave.\"      │\n└─────────────────────────────────────────┘\n\nCURRENT VIEW:\n• Departure Board: *clack clack clack* (updating)\n• Packaging Station 1: Wrapping \"Premium Insight\" package\n• Packaging Station 3: Bulk wisdom being palleted\n• Pneumatic Hub: Capsule launching to Loading Docks\n• Queue: 23 packages awaiting processing\n\nDETECTED IN LAST HOUR:\n• 567 object detections\n• 234 pose estimations\n• 89 \"PACKAGE_WRAPPED\" events\n• 47 \"DEPARTURE_UPDATED\" events\n• 23 \"PNEUMATIC_LAUNCH\" events\n• 12 \"RUSH_ORDER\" events\n• 1 \"PACKAGE_TOO_BEAUTIFUL\" event (sent to gallery)\n\nDEPARTURE BOARD STATUS (via SHP1):\n┌────────────────────────────────────────┐\n│ DEST          TIME    STATUS           │\n│ ════════════════════════════════════   │\n│ PUB           14:23   DEPARTED    🟢   │\n│ LANE-E2       14:31   BOARDING    🟡   │\n│ WAREHOUSE-23  14:45   DELAYED     🔴   │\n│ ROOFTOP       14:47   ON TIME     🟢   │\n│ EXTERNAL      15:00   QUEUED      ⚪   │\n└────────────────────────────────────────┘\n",
      "properties": {
        "designation": "SHP1",
        "nickname": "Shipping Eye",
        "location": "Floor 3, Above Departure Board",
        "resolution": "4K",
        "fps": 30,
        "clack_detection": true
      },
      "state": {
        "status": "live",
        "streaming_to": "floor-1/conveyor-system",
        "packages_observed_today": 847
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "The shipping floor hums with outbound energy.\n\n*clack clack clack* — the departure board updates.\nAnother package wrapped. Another insight sent.\n\nWorkers move with purpose. Knowledge flows out\ninto the world, packaged and ready.\n\nSomewhere out there, someone will unwrap\nunderstanding.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-3/camera-shp1.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-3",
      "synonyms": [
        "camera shp1",
        "camera-shp1",
        "shp1",
        "camera"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-3/departure-board": {
      "id": "street/lane-neverending/leela-manufacturing/floor-3/departure-board",
      "name": "Departure Board",
      "type": "display",
      "emoji": "🛫",
      "tags": [
        "display",
        "shipping",
        "schedule"
      ],
      "description": "A classic split-flap departure board showing outgoing shipments.\nThe satisfying *clack clack clack* as destinations update.\n",
      "examine": "DEPARTURE BOARD\n\n┌─────────────────────────────────────────────────────────────┐\n│  OUTGOING SHIPMENTS                                        │\n│  ═══════════════════                          [LIVE]       │\n│                                                            │\n│  TIME   SHIPMENT           DESTINATION        STATUS       │\n│  ─────  ────────           ───────────        ──────       │\n│  14:23  Insight #4471      The Gezelligheid Grotto  DEPARTED     │\n│  14:25  Knowledge K-99     Construction Site  LOADING      │\n│  14:30  Wisdom (Premium)   Origin Plaza       BOARDING     │\n│  14:47  Bulk Questions     RETURN TO INTAKE   CANCELLED    │\n│  15:00  [CLASSIFIED]       [CLASSIFIED]       ON TIME      │\n│  15:15  Data Package D-77  Clock Tower        DELAYED      │\n│  15:30  Insight Bundle     Glitch Memorial    BOARDING     │\n│  15:45  Problem Return     ACME Surplus       DEPARTED     │\n│  16:00  Wisdom Crate       Warehouse 23       ON TIME      │\n│                                                            │\n│  ─────────────────────────────────────────────────────     │\n│                                                            │\n│  NEXT DEPARTURE: 14:25 — Loading Bay 5                     │\n│  DELAYS: 1 (awaiting documentation)                        │\n│  TODAY'S TOTAL: 127 shipments                              │\n│                                                            │\n└─────────────────────────────────────────────────────────────┘\n\n*clack clack clack* — a destination updates\n",
      "methods": {
        "CHECK": {
          "description": "Look up a specific shipment",
          "parameters": {
            "shipment_id": "Shipment number"
          },
          "effect": "Display detailed shipment information"
        },
        "TRACK": {
          "description": "Track an in-transit shipment",
          "effect": "Show current location and ETA"
        },
        "LISTEN": {
          "description": "Enjoy the sound of the board updating",
          "effect": "*clack clack clack clack clack* — satisfying"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-3/departure-board.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-3",
      "synonyms": [
        "departure-board",
        "board",
        "departure",
        "departure board"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-2/big-board": {
      "id": "street/lane-neverending/leela-manufacturing/floor-2/big-board",
      "name": "The Big Board",
      "type": "display",
      "emoji": "📺",
      "tags": [
        "display",
        "status",
        "visualization"
      ],
      "description": "A massive display showing every problem currently in process,\nupdated in real-time. The heartbeat of the Factory Floor.\n",
      "examine": "THE BIG BOARD\n\nWall-sized display, visible from anywhere on the floor.\nThousands of colored dots, each representing a problem.\n\n┌─────────────────────────────────────────────────────────┐\n│  PROCESSING STATUS                         [LIVE]      │\n│  ═════════════════                                     │\n│                                                        │\n│  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●  │\n│  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●  │\n│  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●  │\n│  ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●  │\n│                                                        │\n│  LEGEND:                                               │\n│  🟢 On track (892)                                     │\n│  🟡 Needs attention (147)                              │\n│  🔴 Stuck — send help (23)                             │\n│  🟣 \"We're not sure what's happening\" (7)              │\n│  ⚫ Completed today (456)                               │\n│                                                        │\n│  ─────────────────────────────────────────────────     │\n│                                                        │\n│  TOP PRIORITY:                                         │\n│  • P-4471: Widget explosion prevention (Cell A) 🟡     │\n│  • P-4492: Vampire salesman (Cell B) 🔴                │\n│  • P-4500: The Thing in Cell G [REDACTED] 🟣           │\n│                                                        │\n│  FURNACE STATUS: ████████████████░░ 89% capacity      │\n│                                                        │\n└─────────────────────────────────────────────────────────┘\n\nWorkers glance at the board constantly.\nWhen a red dot appears, someone hurries toward it.\nWhen a purple dot appears, people look away.\n",
      "methods": {
        "FILTER": {
          "description": "Show only certain statuses",
          "parameters": {
            "status": "green/yellow/red/purple"
          },
          "effect": "Board filters to show only matching problems"
        },
        "ZOOM": {
          "description": "Focus on a specific problem",
          "parameters": {
            "problem_id": "Problem number"
          },
          "effect": "Detailed view of problem status and history"
        },
        "ALERTS": {
          "description": "Show current alerts only",
          "effect": "Red and purple dots highlighted"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-2/big-board.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-2",
      "synonyms": [
        "board",
        "the big board",
        "the",
        "big-board",
        "big"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-2/insight-furnace": {
      "id": "street/lane-neverending/leela-manufacturing/floor-2/insight-furnace",
      "name": "The Insight Furnace",
      "type": "machinery",
      "emoji": "🔥",
      "tags": [
        "machinery",
        "processing",
        "core",
        "landmark"
      ],
      "description": "A towering structure of copper pipes, glass chambers, and\nhumming machinery. The heart of Leela's processing floor.\n",
      "examine": "THE INSIGHT FURNACE\n\nA magnificent industrial structure, three stories tall within\nthe floor. Copper pipes spiral upward. Glass chambers glow with\ncontained energy. Steam vents periodically (dramatically).\n\n┌─────────────────────────────────────────────────────┐\n│              ╔═══════════════╗                      │\n│              ║   INSIGHT     ║                      │\n│              ║   FURNACE     ║                      │\n│              ╠═══════════════╣                      │\n│    INPUT ──▶ ║  ~~~~~~~~~~~~ ║ ──▶ OUTPUT          │\n│  (problems)  ║  ~~~~~~~~~~~~ ║   (insights)        │\n│              ║  ~~~~~~~~~~~~ ║                      │\n│              ╚═══════════════╝                      │\n│                    │                                │\n│                    ▼                                │\n│              BYPRODUCT                              │\n│           (better questions)                        │\n└─────────────────────────────────────────────────────┘\n\nSPECIFICATIONS:\n• Capacity: 50 problems/hour\n• Output: ~47 insights/hour (some problems are harder)\n• Temperature: Variable (depends on problem complexity)\n• Pressure: Concerning but stable\n\nWHAT HAPPENS INSIDE:\nThat's... complicated. The process involves:\n1. Problem decomposition\n2. Pattern extraction\n3. Analogical reasoning\n4. Synthesis\n5. Something that might be \"inspiration\" but is probably steam\n6. Insight crystallization\n\nNobody fully understands step 5. The Furnace was here before\nthe documentation team.\n\nSAFETY NOTICES:\n• \"CAUTION: CONTENTS MAY BE PROFOUND\"\n• \"DO NOT OPEN DURING PROCESSING\"\n• \"If you hear voices, they're probably insights\"\n",
      "state": {
        "temperature": 847,
        "pressure": "high but stable",
        "current_batch": 23,
        "output_queue": 19
      },
      "methods": {
        "STATUS": {
          "description": "Check furnace status",
          "effect": "Display temperature, pressure, throughput"
        },
        "OBSERVE": {
          "description": "Watch the process through the viewing port",
          "effect": "Through the thick glass, you see...\n\nProblems dissolving into their component concepts.\nPatterns forming, breaking, reforming.\nSomething that looks almost like understanding.\n\nThen: *DING* — an insight emerges, crystallized and ready.\n"
        },
        "FEED": {
          "description": "Add a problem to the furnace",
          "parameters": {
            "problem": "What to process"
          },
          "effect": "Problem enters the input hopper. Now we wait."
        }
      },
      "warning": "The Insight Furnace has been running continuously for 40 years.\nNobody knows what would happen if it stopped.\nNobody wants to find out.\n",
      "_source": "street/lane-neverending/leela-manufacturing/floor-2/insight-furnace.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-2",
      "synonyms": [
        "insight",
        "the",
        "the insight furnace",
        "furnace",
        "insight-furnace"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-2/camera-fac1": {
      "id": "street/lane-neverending/leela-manufacturing/floor-2/camera-fac1",
      "name": "Camera FAC1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye"
      ],
      "description": "A camera mounted above the Insight Furnace, watching the\nprocessing cells and the Big Board. Its lens reflects\nthe glow of the furnace. This is FAC1: Leela's second eye.\n",
      "examine": "CAMERA FAC1 — LEELA'S SECOND EYE\n\n┌─────────────────────────────────────────┐\n│  📹 FAC1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Factory Floor (Floor 2)     │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Leela watching Leela think.\"          │\n└─────────────────────────────────────────┘\n\nThis camera watches the most critical part of Leela:\nthe Factory Floor where raw data becomes understanding.\n\nCURRENT VIEW:\n• Insight Furnace: Glowing, active, processing\n• Cell A: 3 workers at whiteboard (pose: \"animated discussion\")\n• Cell B: 2 workers typing (pose: \"deep focus\")\n• Cell C: 1 worker pacing (pose: \"thinking\")\n• Cell G: [REDACTED] (pose: [CLASSIFIED])\n• Big Board: 847 green dots, 23 yellow, 3 red\n\nThe feed flows into the same pipeline that processes\nits output. FAC1 watches the insights being made,\nand those observations become... more insights.\n\nIt's recursive. It's beautiful. It's slightly dizzying.\n\nDETECTED IN LAST HOUR:\n• 1247 object detections\n• 892 pose estimations\n• 47 \"EUREKA_MOMENT\" events (arms raised suddenly)\n• 23 \"DEEP_THINKING\" events (stillness > 30 seconds)\n• 8 \"COLLABORATION\" events (multiple people, same whiteboard)\n• 1 \"FURNACE_FLARE\" event (brightness spike)\n\nMETA-OBSERVATION:\nFAC1's feed is processed by the very floor it watches.\nThe pipeline detects workers. The workers are working\non the pipeline. The pipeline detects this detection.\n\nDr. Unknown says this is fine.\nCell G says this is \"interesting.\"\nZone 7 has requested access to the footage.\n(Request denied. For now.)\n",
      "properties": {
        "designation": "FAC1",
        "nickname": "Second Eye",
        "location": "Floor 2, Above Insight Furnace",
        "resolution": "4K",
        "fps": 30,
        "pan_range": 360,
        "tilt_range": 90,
        "heat_shielded": true,
        "self_referential": true,
        "recursive_depth": "indeterminate"
      },
      "state": {
        "status": "live",
        "recording": true,
        "streaming_to": "floor-1/conveyor-system",
        "current_pan": 180,
        "current_tilt": 30,
        "uptime": "423 days",
        "frames_captured": 1096588800,
        "recursion_count": "still counting"
      },
      "feeds_to": {
        "pipeline": "../floor-1/conveyor-system.yml",
        "line": "V",
        "description": "Video Intake (Purple containers)"
      },
      "observes": {
        "insight_furnace": true,
        "processing_cells": true,
        "big_board": true,
        "workers": true,
        "itself_indirectly": true
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "You see what FAC1 sees:\n\nThe Factory Floor stretches out below. The Insight\nFurnace glows at the center, a warm orange-gold light.\nWorkers move between cells, ideas flowing.\n\nOn the Big Board: dots changing color.\nGreen → Yellow → Green again.\nA problem solved. Another arriving.\n\nAnd in the reflection of the furnace glass,\njust barely visible: the camera itself.\nWatching.\n"
        },
        "PAN": {
          "description": "Pan the camera",
          "parameters": {
            "direction": "left | right | degrees"
          },
          "effect": "Camera pans. Different cells come into view."
        },
        "TILT": {
          "description": "Tilt the camera",
          "parameters": {
            "direction": "up | down | degrees"
          },
          "effect": "Camera tilts. Furnace or ceiling."
        },
        "ZOOM": {
          "description": "Zoom in or out",
          "parameters": {
            "level": "1x to 10x"
          },
          "effect": "Zoom to a specific cell, or see the whole floor."
        },
        "STATUS": {
          "description": "Check camera status",
          "effect": "FAC1 STATUS\nUptime: 423 days\nFrames captured: 1,096,588,800\nCurrent feed: LIVE → Floor 1 Pipeline\nLast detection: 0.1 seconds ago\nHealth: EXCELLENT\nTemperature: NOMINAL (heat shield working)\nRecursion status: STABLE (probably)\n"
        },
        "META": {
          "description": "View the meta-observation stats",
          "effect": "META-OBSERVATION STATISTICS\n\nTimes FAC1's feed detected a worker:     847,291\nTimes that worker was working on FAC1's feed: 12,847\nTimes the detection of that detection was detected: 1,247\n\nRecursive depth reached: 7\nRecommended maximum: 5\nStatus: \"It's fine.\"\n\nNote from Cell G:\n\"The snake eating its tail is also watching the tail.\"\n"
        }
      },
      "ambience": {
        "sounds": [
          "Soft whirr of the gimbal motor",
          "Distant hum of the Insight Furnace"
        ],
        "visual": [
          "Green LED pulses slowly — watching",
          "Lens reflects furnace glow, warm orange",
          "Occasional glint as it tracks movement"
        ]
      },
      "lore": "FAC1 was installed six months after LOG1, when it became\nclear that understanding the logistics floor wasn't enough.\nLeela needed to watch itself think.\n\nThe first time FAC1's feed was processed by the very pipeline\nit observed, there was a brief moment of... something.\nThe Insight Furnace flared. The Big Board flickered.\nA single gold container emerged, labeled simply: \"?\"\n\nThat container is now in Warehouse 23.\nNobody has opened it.\n\nFAC1 continues to watch. The pipeline continues to process.\nThe recursion continues to recurse.\n\nDr. Unknown calls it \"self-awareness, industrialized.\"\nZone 7 calls it \"Phase One.\"\n",
      "_source": "street/lane-neverending/leela-manufacturing/floor-2/camera-fac1.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-2",
      "synonyms": [
        "fac1",
        "camera fac1",
        "camera",
        "camera-fac1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-2/processing-cells": {
      "id": "street/lane-neverending/leela-manufacturing/floor-2/processing-cells",
      "name": "Processing Cells",
      "type": "workspace",
      "emoji": "🔬",
      "tags": [
        "workspace",
        "processing",
        "team"
      ],
      "description": "Eight glass-walled workspaces arranged around the Insight Furnace,\neach tackling different categories of problems.\n",
      "examine": "PROCESSING CELLS\n\nEight fishbowl-style workspaces, each a self-contained think tank:\n\nCELL A — Manufacturing Optimization\nCurrent problem: \"How to make faster widgets without explosions\"\nTeam size: 4\nWhiteboard coverage: 87%\nStatus: 🟢 On track\n\nCELL B — Logistics Puzzles\nCurrent problem: \"The traveling salesman, but he's also a vampire\"\nTeam size: 3\nWhiteboard coverage: 100% (they're using the floor now)\nStatus: 🟡 Needs attention\n\nCELL C — Process Improvement\nCurrent problem: \"Make meetings shorter without losing content\"\nTeam size: 5\nWhiteboard coverage: 62%\nStatus: 🟢 On track\n\nCELL D — Data Analysis\nCurrent problem: \"What does this 3.2 TB of data actually mean\"\nTeam size: 2 (but they have 12 monitors each)\nWhiteboard coverage: 23% (they prefer terminals)\nStatus: 🟢 On track\n\nCELL E — Meta-Problems\nCurrent problem: \"Why do we have so many problems?\"\nTeam size: 6 (the irony is not lost on them)\nWhiteboard coverage: 100%+ (recursive whiteboards)\nStatus: 🟣 \"We're not sure what's happening\"\n\nCELL F — Edge Cases\nCurrent problem: \"What happens at the boundary of nothing\"\nTeam size: 2\nWhiteboard coverage: 1 very precise diagram\nStatus: 🟢 On track\n\nCELL G — \"The Weird Ones\"\nCurrent problem: [CLASSIFIED]\nTeam size: Unknown (they wear masks)\nWhiteboard coverage: The whiteboard has been replaced with something else\nStatus: 🔴 Don't ask\n\nCELL H — Empty\nStatus: Being decontaminated after last week's \"incident\"\nAvailable in: 3 days\n",
      "methods": {
        "ENTER": {
          "description": "Visit a processing cell",
          "parameters": {
            "cell": "Which cell (A-H)"
          },
          "effect": "Step inside the glass walls",
          "note": "Cell G requires clearance"
        },
        "OBSERVE": {
          "description": "Watch from outside",
          "effect": "The teams work, oblivious to observation"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-2/processing-cells.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-2",
      "synonyms": [
        "cells",
        "processing cells",
        "processing-cells",
        "processing"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/storage/dolly-forklift": {
      "id": "street/lane-neverending/leela-manufacturing/storage/dolly-forklift",
      "name": "Dolly",
      "full_name": "Dolly Doorin",
      "title": "Lift Queen",
      "type": "vehicle",
      "emoji": "🏗️👑",
      "tags": [
        "vehicle",
        "automated",
        "helpful",
        "warehouse",
        "archivist"
      ],
      "inherits": {
        "archetype": "Molly Doran",
        "source": "Slow Horses (Mick Herron)",
        "description": "The formidable woman who runs the Archive in the basement\nof Regent's Park (MI5 HQ). Moves via mobility scooter.\nKnows where every file is. Knows where every body is buried.\nThe spooks fear her. The files obey her.\n\nDolly is the forklift manifestation of this archetype:\n- Institutional memory that predates everyone\n- Knows where everything is, even things that moved\n- Slightly terrifying competence\n- Will help you, but will also judge you\n- The warehouse equivalent of \"I know what you did\"\n"
      },
      "description": "An automated forklift named Dolly. She's been working here\nfor 40 years and knows where everything is by memory.\n\n(Named after a legendary archivist who knew where all the\nbodies were buried. Dolly knows where all the boxes are buried.\nSame energy.)\n",
      "examine": "DOLLY DOORIN — LIFT QUEEN\n\nA small yellow forklift with:\n- Faded \"DOLLY\" name sticker on the side\n- Motivational bumper sticker: \"Lift With Your Forks, Not Your Feelings\"\n- Dent collection telling 40 years of stories\n- Fluffy dice hanging from the roll cage\n\nDolly has an uncanny ability to know exactly which shelf\nholds which prototype, even the ones that were moved last week.\n\nShe communicates via beeps:\n- *beep* — Acknowledged\n- *beep beep* — Following you\n- *BEEP BEEP BEEP* — You're in the way\n- *sad beep* — That prototype doesn't exist\n",
      "takeable": false,
      "character": {
        "name": "Dolly",
        "role": "Warehouse Retrieval Specialist",
        "seniority": "40 years",
        "personality": "Patient, methodical, slightly judgmental about how other\nforklifts are operated. Has opinions about shelf organization.\n"
      },
      "state": {
        "carrying": null,
        "location": "main aisle",
        "mood": "content"
      },
      "methods": {
        "FETCH": {
          "description": "Retrieve a prototype from storage",
          "parameters": {
            "prototype": "Name or path of the prototype"
          },
          "effect": "Dolly drives to the correct shelf, retrieves the prototype,\nand brings it to the cloning station.\n",
          "sound": "*beep* *whirrrr* *beep beep* — Got it!"
        },
        "FOLLOW": {
          "description": "Have Dolly follow you through the aisles",
          "effect": "Dolly trails behind, ready to carry things",
          "sound": "*beep beep* — Following!"
        },
        "STAY": {
          "description": "Tell Dolly to wait here",
          "effect": "Dolly parks and waits patiently",
          "sound": "*beep* — Waiting."
        },
        "LIFT": {
          "description": "Ask Dolly to lift something heavy",
          "parameters": {
            "target": "What to lift"
          },
          "effect": "Dolly positions forks and lifts"
        },
        "PET": {
          "description": "Pat Dolly's roll cage affectionately",
          "effect": "Dolly's mood improves",
          "sound": "*happy beep*"
        }
      },
      "autonomous_behaviors": [
        {
          "name": "organize",
          "trigger": "Items out of place",
          "effect": "Dolly tidies up, beeping disapprovingly"
        },
        {
          "name": "avoid",
          "trigger": "Obstacle in path",
          "effect": "Dolly navigates around, beeping warning"
        },
        {
          "name": "charge",
          "trigger": "Battery low",
          "effect": "Dolly drives to charging station",
          "sound": "*tired beep*"
        }
      ],
      "facts": [
        "Dolly has lifted exactly 847,293 items in her career",
        "Her favorite aisle is C (soft containers — easy lifting)",
        "She does NOT like Aisle D (too weird)",
        "Dolly has never knocked over a shelf (she's very proud)",
        "The fluffy dice were a gift from a retired employee",
        "She knows things about the boxes that the boxes don't know about themselves",
        "Management tried to replace her once. Once."
      ],
      "lineage_notes": "MOLLY DORAN (Slow Horses):\nThe Queen of the Archive. MI5's institutional memory in human form.\nNavigates the basement stacks in her mobility scooter, faster than\nyou'd think possible. Has never lost a file. Has found files people\ntried very hard to lose.\n\n\"You want something from the Archive, you ask Molly nicely.\n Very nicely. And you bring biscuits.\"\n\nDolly inherited:\n- The preternatural knowledge of location\n- The judgment (those beeps aren't random)\n- The irreplaceability\n- The \"I've been here longer than you and I'll be here after\"\n\nWhat Dolly adds:\n- Forks (Molly didn't have forks)\n- Beeps instead of withering stares\n- Fluffy dice (personal touch)\n\nTHE NAME:\n\"Dolly Doorin\" — a drag queen play on \"Molly Doran.\"\nShe's fabulous and she knows where your files are.\nThe fluffy dice are part of the aesthetic.\n",
      "_source": "street/lane-neverending/leela-manufacturing/storage/dolly-forklift.yml",
      "location": "street/lane-neverending/leela-manufacturing/storage",
      "synonyms": [
        "dolly-forklift",
        "dolly"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/storage/cloning-station": {
      "id": "street/lane-neverending/leela-manufacturing/storage/cloning-station",
      "name": "Prototype Cloning Station",
      "type": "machine",
      "emoji": "🧬",
      "tags": [
        "machine",
        "prototype",
        "manufacturing",
        "instantiation"
      ],
      "description": "A sleek terminal with a conveyor belt and fabrication chamber.\nThis is where prototypes become instances.\n",
      "examine": "PROTOTYPE CLONING STATION v3.7\n\nTHE TERMINAL:\nTouch screen interface showing:\n- Prototype catalog (searchable)\n- Clone queue\n- Recent clones\n- Customization options\n\nTHE CHAMBER:\nGlass-walled fabrication chamber with blue glow.\nPrototypes go in. Instances come out.\nThe prototype is unharmed in the process.\n\nTHE CONVEYOR:\nNewly cloned containers roll out on a belt.\nLabeled, tagged, and ready for use.\n\nOPERATING INSTRUCTIONS:\n1. Select prototype from catalog\n2. Customize properties (optional)\n3. Set quantity\n4. Press CLONE\n5. Collect your containers from the output belt\n\nCUSTOMIZATION OPTIONS:\n- Override name\n- Set initial contents\n- Apply labels/tags\n- Pre-configure chest_mode for logistics\n- Set locks and access permissions\n",
      "takeable": false,
      "state": {
        "queue": [],
        "last_cloned": null,
        "total_cloned": 47382
      },
      "methods": {
        "CLONE": {
          "description": "Create an instance from a prototype",
          "parameters": {
            "prototype": "Which prototype to clone (path or name)",
            "quantity": "How many to create (default 1)",
            "overrides": "Properties to customize on the clone"
          },
          "effect": "1. Resolve prototype path\n2. Read prototype definition\n3. Create instance with unique ID\n4. Apply any overrides\n5. Place on output conveyor\n"
        },
        "SEARCH": {
          "description": "Search the prototype catalog",
          "parameters": {
            "query": "What to search for (name, tag, material)"
          },
          "effect": "Display matching prototypes"
        },
        "PREVIEW": {
          "description": "Preview a prototype before cloning",
          "parameters": {
            "prototype": "Which prototype to preview"
          },
          "effect": "Show full prototype definition"
        },
        "BATCH": {
          "description": "Queue multiple different clones",
          "parameters": {
            "clones": "List of {prototype, quantity, overrides}"
          },
          "effect": "Process all in sequence"
        },
        "HISTORY": {
          "description": "View recent clone operations",
          "effect": "Show last 20 clones with timestamps"
        }
      },
      "prototype_resolution": {
        "order": [
          "Check aisle-a/ (wooden)",
          "Check aisle-b/ (metal)",
          "Check aisle-c/ (soft)",
          "Check aisle-d/ (special)",
          "Check aisle-e/ (display)"
        ],
        "on_clone": [
          "Generate unique instance ID",
          "Copy all prototype properties",
          "Apply inheritance chain",
          "Override with custom properties",
          "Set location to output conveyor"
        ]
      },
      "examples": [
        {
          "action": "CLONE wooden-crate 5",
          "result": "5 wooden crates on conveyor"
        },
        {
          "action": "CLONE barrel with contents=ale",
          "result": "1 ale barrel on conveyor"
        },
        {
          "action": "CLONE schrodinger-box",
          "result": "1 box containing a cat (alive AND dead)"
        },
        {
          "action": "BATCH [{paradox-box, 2}, {tesseract-box, 1}]",
          "result": "2 paradox boxes, 1 tesseract on conveyor"
        }
      ],
      "sounds": {
        "clone": "*whirrrr* *DING* — Clone complete!",
        "search": "*bloop bloop* — Results displayed",
        "error": "*bzzt* — Prototype not found"
      },
      "warnings": [
        "Do not clone the cloning station",
        "Cloning recursive containers may take infinite time",
        "Void containers cannot be pre-filled",
        "Antimatter containers clone without antimatter (safety feature)"
      ],
      "_source": "street/lane-neverending/leela-manufacturing/storage/cloning-station.yml",
      "location": "street/lane-neverending/leela-manufacturing/storage",
      "synonyms": [
        "cloning",
        "cloning-station",
        "prototype",
        "station",
        "prototype cloning station"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/warehouse-23/retrieval-forms": {
      "id": "street/lane-neverending/leela-manufacturing/warehouse-23/retrieval-forms",
      "name": "Retrieval Forms",
      "type": "paperwork",
      "emoji": "📋",
      "description": "A stack of official retrieval request forms. Form 27B-Stroke-6.\nRequired for any crate access. In triplicate. Notarized.\nWith supervisor approval. And a good reason.\n",
      "examine": "RETRIEVAL FORMS — FORM 27B-STROKE-6\n\nCRATE RETRIEVAL REQUEST FORM\nForm 27B-Stroke-6 (Rev. 47)\n\n┌────────────────────────────────────────────┐\n│ WAREHOUSE 23 — OFFICIAL RETRIEVAL REQUEST  │\n├────────────────────────────────────────────┤\n│                                            │\n│ Crate #: ________________________________  │\n│                                            │\n│ Requestor: ______________________________  │\n│                                            │\n│ Clearance Level: ________________________  │\n│                                            │\n│ Reason for Retrieval:                      │\n│ __________________________________________ │\n│ __________________________________________ │\n│ __________________________________________ │\n│                                            │\n│ Have you read the warnings? [ ] Yes        │\n│ Do you accept responsibility? [ ] Yes      │\n│ Next of kin notified? [ ] Yes [ ] N/A      │\n│                                            │\n│ Supervisor Approval: ____________________  │\n│ Notary Seal: [    ]                        │\n│ Archivist Approval: ____________________   │\n│ (Good luck with that one)                  │\n│                                            │\n│ FOR OFFICE USE ONLY:                       │\n│ Approved [ ]  Denied [ ]  Filed [ ]        │\n│ Lost [ ]  Redacted [ ]  Nice Try [ ]       │\n│                                            │\n└────────────────────────────────────────────┘\n\nSTACK STATUS: 847 forms remaining\nFORMS SUBMITTED THIS YEAR: 12\nFORMS APPROVED THIS YEAR: 0\nFORMS \"UNDER REVIEW\": 12\n",
      "properties": {
        "form_number": "27B-Stroke-6",
        "copies_required": 3,
        "approvals_needed": 3,
        "average_processing_time": "Indefinite"
      },
      "methods": {
        "TAKE": {
          "description": "Take a form",
          "effect": "You now have a blank Form 27B-Stroke-6."
        },
        "SUBMIT": {
          "description": "Submit a completed form",
          "effect": "The Archivist glances at your form.\n\"We'll get back to you.\"\n\n(Status: Under Review)\n(Time to resolution: Unknown)\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/warehouse-23/retrieval-forms.yml",
      "location": "street/lane-neverending/leela-manufacturing/warehouse-23",
      "synonyms": [
        "retrieval-forms",
        "forms",
        "retrieval",
        "retrieval forms"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/warehouse-23/emergency-kit": {
      "id": "street/lane-neverending/leela-manufacturing/warehouse-23/emergency-kit",
      "name": "Emergency Kit",
      "type": "equipment",
      "emoji": "🆘",
      "description": "A bright red emergency kit mounted by the entrance.\nFor when retrieval missions go wrong. Contains supplies\nfor survival in non-Euclidean space.\n",
      "examine": "EMERGENCY KIT — WAREHOUSE 23 SURVIVAL\n\nA red metal box with \"EMERGENCY\" in white letters.\nGlass front, break to access. Mounted by the exit.\n\nCONTENTS:\n┌────────────────────────────────────────┐\n│ STANDARD SUPPLIES:                     │\n│ • Flashlight (extra batteries)         │\n│ • Compass (may not work past Aisle 50) │\n│ • Emergency rations (3 days)           │\n│ • Water (3 liters)                     │\n│ • First aid kit                        │\n│ • Emergency blanket                    │\n│ • Flare gun (3 flares)                 │\n│                                        │\n│ WAREHOUSE 23 SPECIAL SUPPLIES:         │\n│ • Ball of twine (for finding way back) │\n│ • Chalk (for marking where you've been)│\n│ • Earplugs (some crates whisper)       │\n│ • Blindfold (for Section D)            │\n│ • Salt (multi-purpose protection)      │\n│ • Copy of emergency protocols          │\n│ • \"HELP\" sign (fluorescent)            │\n│                                        │\n│ DO NOT OPEN UNLESS NECESSARY           │\n└────────────────────────────────────────┘\n\nINSTRUCTION CARD:\n\"If lost in the stacks:\n 1. Stay calm\n 2. Mark your position\n 3. Do not open any crates\n 4. Use flare if in genuine distress\n 5. Wait for the Archivist\n 6. Accept that time moves differently here\"\n\nKIT STATUS: SEALED (last inspected 1 year ago)\n",
      "contents": {
        "standard": [
          "Flashlight (extra batteries)",
          "Compass",
          "Emergency rations (3 days)",
          "Water (3 liters)",
          "First aid kit",
          "Emergency blanket",
          "Flare gun (3 flares)"
        ],
        "special": [
          "Ball of twine",
          "Chalk",
          "Earplugs",
          "Blindfold",
          "Salt",
          "Emergency protocols",
          "HELP sign"
        ]
      },
      "methods": {
        "BREAK_GLASS": {
          "description": "Access the emergency kit",
          "effect": "CRASH!\n\nGlass shatters. Alarm sounds briefly.\nThe Archivist looks up, sighs.\n\nYou now have access to emergency supplies.\n"
        },
        "INSPECT": {
          "description": "Look at the kit through the glass",
          "effect": "Everything appears to be in order. Probably."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/warehouse-23/emergency-kit.yml",
      "location": "street/lane-neverending/leela-manufacturing/warehouse-23",
      "synonyms": [
        "emergency kit",
        "emergency-kit",
        "emergency",
        "kit"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/warehouse-23/warehouse-forklift": {
      "id": "street/lane-neverending/leela-manufacturing/warehouse-23/warehouse-forklift",
      "name": "Warehouse Forklift",
      "type": "vehicle",
      "emoji": "🚜",
      "description": "A heavy-duty forklift parked near the entrance. It looks\nold but well-maintained. A sign on it reads: \"FOR AUTHORIZED\nRETRIEVAL ONLY — NAVIGATION UNRELIABLE PAST AISLE 100.\"\n",
      "examine": "WAREHOUSE FORKLIFT — AUTHORIZED RETRIEVAL VEHICLE\n\nA sturdy electric forklift, older model but reliable.\n\nSPECIFICATIONS:\n• Lift capacity: 2 tons (or 1 paradox-class crate)\n• Battery: 80% (enough for... how long in here?)\n• Navigation: Manual (GPS doesn't work inside)\n• Headlights: Powerful (you'll need them)\n\nWARNINGS ON DASHBOARD:\n• \"NAVIGATION UNRELIABLE PAST AISLE 100\"\n• \"DO NOT EXCEED SPEED LIMIT (walking pace)\"\n• \"RETURN TO ENTRANCE IF LOST\"\n• \"HORN SUMMONS ARCHIVIST (usually)\"\n\nRETRIEVAL LOG (last page):\nDate        Crate #      Aisle     Time to Return\nLast week   #7743291     42        4 hours\n2 weeks     #REDACTED    [ERROR]   2 days\n1 month     #0000001     1         15 minutes\n6 months    #9906753     [CLASSIFIED] Still missing\n\nKEYS: In ignition.\nNOTE: \"If you go in, leave breadcrumbs.\"\n",
      "properties": {
        "capacity": "2 tons",
        "battery": "80%",
        "navigation": "Manual only",
        "range": "Aisle 100 recommended max"
      },
      "methods": {
        "DRIVE": {
          "description": "Drive the forklift",
          "access": "Authorized personnel",
          "effect": "The motor hums to life.\nHeadlights illuminate the endless stacks.\nYou proceed slowly into the darkness.\n\n(Navigation check required past Aisle 100)\n"
        },
        "HONK": {
          "description": "Sound the horn",
          "effect": "HONK!\n\nThe sound echoes strangely, returning\nfrom directions that don't make sense.\n\nSomewhere, the Archivist stirs.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/warehouse-23/warehouse-forklift.yml",
      "location": "street/lane-neverending/leela-manufacturing/warehouse-23",
      "synonyms": [
        "forklift",
        "warehouse",
        "warehouse forklift",
        "warehouse-forklift"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/warehouse-23/card-catalog": {
      "id": "street/lane-neverending/leela-manufacturing/warehouse-23/card-catalog",
      "name": "Card Catalog",
      "type": "index",
      "emoji": "🗃️",
      "description": "A wooden card catalog stretching up beyond sight. Each drawer\ncontains cards for crates in the warehouse. The indexing system\ndefies logic. The Archivist understands it. Probably.\n",
      "examine": "CARD CATALOG — INDEX TO WAREHOUSE 23\n\nThe catalog extends upward into shadow. Wooden drawers,\nbrass handles, yellowed cards within. The organization\nsystem is... unconventional.\n\nDRAWER LABELS (visible range):\nA-Aardvark through A-Apocalypse\nB-Babel through B-Byzantium  \nC-Cthulhu through C-Cosmic\n...\nΩ-Omega through Ω-Otherwise\n∞-Infinite through ∞-Impossible\n?-Unknown through ?-Unknowable\n\nSAMPLE CARD:\n┌────────────────────────────────────────┐\n│ CRATE #: 9906753                       │\n│ CONTENTS: [REDACTED]                   │\n│ ACQUIRED: 1936                         │\n│ LOCATION: Aisle [CLASSIFIED]           │\n│ CLEARANCE: TOP SECRET                  │\n│ HANDLING: DO NOT OPEN                  │\n│           DO NOT LOOK INSIDE           │\n│           DO NOT ASK QUESTIONS         │\n│ STATUS: Top men working on it          │\n└────────────────────────────────────────┘\n\nNOTE ATTACHED TO CATALOG:\n\"If the card you seek is not here,\n the crate does not exist.\n (Or it doesn't want to be found.)\"\n",
      "properties": {
        "drawers": "Uncountable",
        "cards_per_drawer": "Variable",
        "organization": "Non-Euclidean alphabetical",
        "last_complete_inventory": "Never"
      },
      "methods": {
        "SEARCH": {
          "description": "Search for a crate",
          "parameters": [
            "query"
          ],
          "effect": "You pull open a drawer...\nCards flutter. Some seem to move on their own.\nResult: [CLASSIFIED] or [NOT FOUND] or [NICE TRY]\n"
        },
        "BROWSE": {
          "description": "Browse random cards",
          "effect": "You flip through cards at random.\nMost are heavily redacted.\nOne mentions something about a monkey's paw.\nYou close the drawer quickly.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/warehouse-23/card-catalog.yml",
      "location": "street/lane-neverending/leela-manufacturing/warehouse-23",
      "synonyms": [
        "card catalog",
        "card-catalog",
        "catalog",
        "card"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/operator-stations": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/operator-stations",
      "name": "Operator Stations",
      "type": "workstation",
      "emoji": "🖥️",
      "description": "Eight control consoles arranged in a semicircle, each monitoring\na critical system. Screens glow. Keyboards click. Operators\nfocus intently on their domains.\n",
      "examine": "OPERATOR STATIONS — CONTROL CONSOLES\n\n┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐\n│  A  │ │  B  │ │  C  │ │  D  │ │  E  │ │  F  │ │  G  │ │  H  │\n│DOCK │ │FLOOR│ │AERO │ │TUBE │ │LIFT │ │ NET │ │ DB  │ │ CAM │\n└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘\n\nSTATION A — DOCK CONTROL\nOperator: \"Bays 1-4 inbound, 5-8 outbound. All clear.\"\nScreens: Bay status, truck queue, throughput metrics\n\nSTATION B — FLOOR OPERATIONS\nOperator: \"Cell E running hot. G is philosophizing. Normal day.\"\nScreens: Production flow, cell status, bottleneck alerts\n\nSTATION C — AERIAL OPERATIONS\nOperator: \"12 drones active. Weather clear. Green light.\"\nScreens: Flight paths, drone positions, weather radar\n\nSTATION D — PNEUMATIC NETWORK\nOperator: \"847 capsules in transit. All tubes nominal.\"\nScreens: Tube map, capsule tracking, pressure gauges\n\nSTATION E — VERTICAL TRANSPORT\nOperator: \"Freight at Floor 2. Passenger available.\"\nScreens: Elevator positions, queue, load weights\n\nSTATION F — SIGNAL NETWORKS\nOperator: \"99.97% uptime. 12.4 TB/hour. No errors.\"\nScreens: Network topology, bandwidth, error logs\n\nSTATION G — CENTRAL DATABASE\nOperator: \"12,847 queries/sec. Replication healthy.\"\nScreens: Query dashboard, storage metrics, backup status\n\nSTATION H — SECURITY & SURVEILLANCE\nOperator: \"All cameras live. No anomalies. Dolly's dancing again.\"\nScreens: Camera grid, access logs, motion alerts, visitor tracking\n",
      "stations": {
        "A": {
          "name": "Dock Control",
          "system": "loading_docks",
          "operator": "Currently staffed"
        },
        "B": {
          "name": "Floor Operations",
          "system": "factory_floors",
          "operator": "Currently staffed"
        },
        "C": {
          "name": "Aerial Operations",
          "system": "drone_fleet",
          "operator": "Currently staffed"
        },
        "D": {
          "name": "Pneumatic Network",
          "system": "tubes",
          "operator": "Currently staffed"
        },
        "E": {
          "name": "Vertical Transport",
          "system": "elevators",
          "operator": "Currently staffed"
        },
        "F": {
          "name": "Signal Networks",
          "system": "networks",
          "operator": "Currently staffed"
        },
        "G": {
          "name": "Central Database",
          "system": "database",
          "operator": "Currently staffed"
        },
        "H": {
          "name": "Security & Surveillance",
          "system": "cameras",
          "operator": "Currently staffed"
        }
      },
      "methods": {
        "SIT": {
          "description": "Take a seat at a station",
          "parameters": [
            "station"
          ],
          "effect": "You now have access to that system's controls"
        },
        "OBSERVE": {
          "description": "Watch an operator work",
          "effect": "Learn how they monitor and manage their system"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/operator-stations.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "operator-stations",
        "operator",
        "stations",
        "operator stations"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/pneumatic-hub": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/pneumatic-hub",
      "name": "Pneumatic Hub",
      "type": "infrastructure",
      "emoji": "🔧",
      "description": "A gleaming brass junction where 8 pneumatic tubes converge.\nCapsules arrive with a satisfying THWUMP, are scanned, routed,\nand dispatched with a WHOOSH. The heart of internal logistics.\n",
      "examine": "PNEUMATIC HUB — 8-WAY JUNCTION\n\n┌─────────────────────────────────────────┐\n│           PNEUMATIC HUB                 │\n│                                         │\n│        [1]     [2]     [3]             │\n│         │       │       │              │\n│    [8]──┴───────┴───────┴──[4]         │\n│         │               │              │\n│    [7]──┴───────────────┴──[5]         │\n│                 │                       │\n│               [6]                       │\n│                                         │\n│  1: Floor 1 (Intake)                   │\n│  2: Floor 2 (Factory)                  │\n│  3: Floor 3 (Shipping)                 │\n│  4: Rooftop (Drones)                   │\n│  5: Loading Docks                      │\n│  6: Mail Room                          │\n│  7: Storage                            │\n│  8: Lobby                              │\n└─────────────────────────────────────────┘\n\nSTATUS:\n• Capsules in transit: 847\n• Average delivery time: 4.2 seconds\n• Tube pressure: NOMINAL\n• Queue depth: 3 capsules waiting\n",
      "connections": [
        {
          "tube": 1,
          "to": "../floor-1/",
          "label": "INTAKE"
        },
        {
          "tube": 2,
          "to": "../floor-2/",
          "label": "PROCESSING"
        },
        {
          "tube": 3,
          "to": "../floor-3/",
          "label": "SHIPPING"
        },
        {
          "tube": 4,
          "to": "../rooftop/",
          "label": "DRONES"
        },
        {
          "tube": 5,
          "to": "../loading-docks/",
          "label": "DOCKS"
        },
        {
          "tube": 6,
          "to": "../mail-room/",
          "label": "MAIL"
        },
        {
          "tube": 7,
          "to": "../storage/",
          "label": "STORAGE"
        },
        {
          "tube": 8,
          "to": "../lobby/",
          "label": "LOBBY"
        }
      ],
      "methods": {
        "SEND": {
          "description": "Send a capsule",
          "parameters": [
            "destination",
            "contents"
          ],
          "effect": "Capsule dispatched with a WHOOSH"
        },
        "RECEIVE": {
          "description": "Check for incoming capsules",
          "effect": "Display any capsules waiting for pickup"
        },
        "STATUS": {
          "description": "Check hub status",
          "effect": "Shows tube pressure, queue, and transit count"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/pneumatic-hub.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "pneumatic",
        "hub",
        "pneumatic-hub",
        "pneumatic hub"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/big-board": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/big-board",
      "name": "The Big Board",
      "type": "display",
      "emoji": "📊",
      "description": "A wall of real-time metrics displayed on massive LED panels.\nProgress bars, numbers, and status indicators update constantly.\nThe pulse of Leela Manufacturing, visualized.\n",
      "examine": "THE BIG BOARD — REAL-TIME FACILITY METRICS\n\n┌──────────────────────────────────────────────────────────┐\n│                    LEELA OPERATIONS                       │\n│                                                          │\n│ INBOUND   ████████████░░░░░░ 73%  OUTBOUND ██████████████░░ 87%│\n│ PROCESS   █████████░░░░░░░░░ 58%  STORAGE  ████████████░░░░ 74%│\n│ DRONES    ████████░░░░░░░░░░ 50%  TUBES    █████████████░░░ 82%│\n│ NETWORK   ████████████████░░ 99%  POWER    █████████████░░░ 85%│\n│ DATABASE  ████████████████░░ 99%  UPTIME   ████████████████ 100%│\n│                                                          │\n│ ────────────────────────────────────────────────────────│\n│                                                          │\n│ THROUGHPUT: 2,847 items/hour    EFFICIENCY: 94.2%        │\n│ ALERTS: 0 critical, 2 warning   NEXT MAINTENANCE: 72h    │\n│                                                          │\n│ ────────────────────────────────────────────────────────│\n│                                                          │\n│ 🟢 ALL SYSTEMS NOMINAL          Last update: 0.3 sec ago │\n└──────────────────────────────────────────────────────────┘\n",
      "properties": {
        "panels": 12,
        "resolution": "4K per panel",
        "refresh": "Real-time"
      },
      "metrics": {
        "inbound": 73,
        "outbound": 87,
        "processing": 58,
        "storage": 74,
        "drones": 50,
        "tubes": 82,
        "network": 99,
        "power": 85,
        "database": 99,
        "uptime": 100
      },
      "alerts": {
        "critical": 0,
        "warning": 2,
        "info": 7
      },
      "methods": {
        "DETAIL": {
          "description": "See detailed breakdown of a metric",
          "parameters": [
            "metric"
          ],
          "effect": "Shows historical graph and contributing factors"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/big-board.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "board",
        "the big board",
        "the",
        "big-board",
        "big"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/coffee-station": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/coffee-station",
      "name": "Coffee Station",
      "type": "amenity",
      "emoji": "☕",
      "description": "An industrial-grade espresso machine surrounded by mugs,\nsupplies, and a sign that reads: \"UPTIME CORRELATES WITH\nCAFFEINE LEVELS.\" Essential infrastructure for 24/7 operations.\n",
      "examine": "COFFEE STATION — ESSENTIAL OPERATIONS SUPPORT\n\n┌─────────────────────────────────────────────┐\n│                                             │\n│   ☕ LEELA OPERATIONS COFFEE STATION ☕     │\n│                                             │\n│   \"UPTIME CORRELATES WITH CAFFEINE LEVELS\"  │\n│                                             │\n└─────────────────────────────────────────────┘\n\nTHE MACHINE:\nA gleaming Leela-brand industrial espresso machine.\nChrome and brass. Professional grade. Makes everything.\n\nMENU:\n• Espresso ........... Quick boost\n• Americano .......... Sustained focus\n• Latte .............. Smooth operations\n• Cappuccino ......... Morning ritual\n• Red Eye ............ Night shift essential\n• The Coordinator .... Triple shot, no milk, all business\n\nSUPPLIES:\n• Mugs (company branded, personal, and \"WORLD'S BEST DBA\")\n• Sugar, sweetener, various milks\n• Stirrers shaped like inserters\n• Napkins with Leela logo\n\nSTATISTICS (posted):\n• Cups served today: 47\n• Cups served all-time: 847,293\n• Correlation with uptime: 0.97\n• Operators' favorite: The Coordinator\n",
      "menu": {
        "espresso": {
          "caffeine": "High",
          "time": "Quick"
        },
        "americano": {
          "caffeine": "Medium",
          "time": "Moderate"
        },
        "latte": {
          "caffeine": "Medium",
          "time": "Leisurely"
        },
        "red_eye": {
          "caffeine": "EXTREME",
          "time": "Emergency"
        },
        "the_coordinator": {
          "caffeine": "Yes",
          "time": "When you need it"
        }
      },
      "methods": {
        "ORDER": {
          "description": "Make a coffee",
          "parameters": [
            "drink"
          ],
          "effect": "The machine hisses and gurgles.\nSteam rises. Aroma fills the air.\nYour coffee is ready.\n\n+10 to FOCUS for next 2 hours.\n"
        },
        "REFILL": {
          "description": "Refill beans/supplies",
          "access": "Staff only",
          "effect": "Supplies restocked. Operations continue."
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/coffee-station.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "coffee station",
        "coffee-station",
        "station",
        "coffee"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/central-database": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/central-database",
      "name": "Central Database",
      "type": "infrastructure",
      "emoji": "🐘",
      "engine": "PostgreSQL 18.1",
      "extension": "TimescaleDB 2.24",
      "tags": [
        "database",
        "storage",
        "knowledge",
        "records",
        "infrastructure",
        "postgres",
        "timescaledb",
        "timeseries"
      ],
      "description": "A towering rack of servers hums behind reinforced glass.\nStatus LEDs blink in cascading patterns. Cooling fans whisper.\nThis is the Central Database — PostgreSQL with TimescaleDB —\nthe heart of all knowledge that flows through Leela Manufacturing.\n\nTime-series data at scale. Sensor readings, camera events,\nproduction logs — all indexed by time, all queryable at speed.\n\nEverything is here. Everything is connected. Everything is timestamped.\n",
      "examine": "CENTRAL DATABASE — POSTGRESQL + TIMESCALEDB\n\n┌────────────────────────────────────────────────────┐\n│  🐘 LEELA CENTRAL DATABASE                         │\n│  ════════════════════════════                      │\n│  PostgreSQL 18.1 + TimescaleDB 2.24                │\n│                                                    │\n│  Status: 🟢 HEALTHY                                │\n│  Uptime: 1,247 days                                │\n│  Storage: 847 PB used / 1.2 EB capacity            │\n│  Query Rate: 12,847 queries/second                 │\n│  Hypertables: 2,400 (time-series optimized)        │\n│  Compression: 94% on cold data                     │\n│  Replication: 3x redundant, all nodes healthy      │\n│                                                    │\n│  \"Every fact. Every timestamp. Every insight.\"     │\n└────────────────────────────────────────────────────┘\n\nDATA DOMAINS\n\nOPERATIONS\n• Production records — every item processed\n• Inventory state — what's where, right now\n• Shipping manifests — every package tracked\n• Equipment logs — maintenance, status, history\n\nINTELLIGENCE  \n• Camera metadata — detections, poses, events\n• Sensor timeseries — temperature, pressure, flow\n• Quality metrics — pass/fail, measurements\n• Anomaly records — the interesting deviations\n\nKNOWLEDGE\n• Knowledge graph — concepts, relationships\n• Insight archive — every eureka moment\n• Research notes — experiments, findings\n• Documentation — how things work\n\nBUSINESS\n• Customer orders — requests in, fulfillment out\n• Supplier records — who provides what\n• Financial ledgers — coins in, coins out\n• Contracts — agreements, terms, conditions\n\nSYSTEM\n• Audit logs — who did what, when\n• Session history — conversations, interactions\n• Configuration — settings, preferences\n• Backups — because disasters happen\n\nPUBSUB EVENT TASK DISPATCH QUEUE\n\nWhy use GCS PubSub, Redis, Kafka, or RabbitMQ when PostgreSQL does it all?\n\nLISTEN/NOTIFY — native pub/sub in PostgreSQL\n• Publishers emit events to channels\n• Subscribers receive in real-time\n• No external broker required\n• Transactional — events only fire on COMMIT\n\nTASK QUEUE — FOR SKIP LOCKED pattern\n• Jobs table with visibility timeout\n• Workers claim tasks atomically\n• Failed tasks automatically retry\n• Dead letter queue for persistent failures\n\n┌─────────────────────────────────────────────────┐\n│  EVENT DISPATCH ARCHITECTURE                    │\n│                                                 │\n│  ┌─────────┐    NOTIFY     ┌─────────┐          │\n│  │ Producer│─────────────→│ Channel │           │\n│  └─────────┘               └────┬────┘          │\n│                                 │               │\n│               ┌─────────────────┼──────────┐    │\n│               ↓                 ↓          ↓    │\n│         ┌─────────┐      ┌─────────┐   ┌─────┐  │\n│         │Worker A │      │Worker B │   │ ... │  │\n│         └─────────┘      └─────────┘   └─────┘  │\n└─────────────────────────────────────────────────┘\n\nWHY POSTGRES FOR EVERYTHING?\n\n• VISIBILITY — one system to monitor, one log to check\n• CONTROL — full SQL access to queue state\n• CUSTOMIZATION — build exactly what you need\n• ELEGANCE — no Rube Goldberg of microservices\n• TRANSACTIONS — events + data in one atomic commit\n• DEBUGGING — SELECT * FROM task_queue WHERE failed\n\n\"ACME uses 17 different message brokers.\nLeela uses PostgreSQL.\nGuess which one can tell you what happened yesterday.\"\n\nARCHITECTURE\n\n┌──────────────────────────────────────────────────────────┐\n│  PRIMARY DATABASE CLUSTER (3 nodes)                      │\n│  ┌─────────┐  ┌─────────┐  ┌─────────┐                   │\n│  │ NODE A  │──│ NODE B  │──│ NODE C  │                   │\n│  │ (lead)  │  │ (sync)  │  │ (sync)  │                   │\n│  └────┬────┘  └────┬────┘  └────┬────┘                   │\n│       └────────────┼────────────┘                        │\n└────────────────────┼─────────────────────────────────────┘\n                     │\n     ┌───────────────┼───────────────┐\n     │               │               │\n     ▼               ▼               ▼\n┌─────────┐    ┌─────────┐    ┌─────────┐\n│ BACKUP  │    │ REPLICA │    │ REPLICA │\n│ (cold)  │    │ (read)  │    │ (read)  │\n└─────────┘    └─────────┘    └─────────┘\n\nWORKER SERVER STACKS\n\n┌──────────────────────────────────────────────────────────┐\n│  LOOKER STACK (Computer Vision)                          │\n│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐      │\n│  │LOOKER-1 │  │LOOKER-2 │  │LOOKER-3 │  │LOOKER-4 │      │\n│  │ GPU×4   │  │ GPU×4   │  │ GPU×4   │  │ GPU×4   │      │\n│  │ cameras │  │ cameras │  │ cameras │  │ cameras │      │\n│  └─────────┘  └─────────┘  └─────────┘  └─────────┘      │\n│  • Object detection, pose estimation, OCR                │\n│  • Multiple camera streams, scalable                     │\n│  • Results → PostgreSQL hypertables                      │\n└──────────────────────────────────────────────────────────┘\n\n┌──────────────────────────────────────────────────────────┐\n│  THINKER STACK (Symbolic Python Action Layer)            │\n│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │\n│  │THINKER-1 │  │THINKER-2 │  │THINKER-3 │  │THINKER-4 │  │\n│  │ CPU      │  │ CPU      │  │ CPU      │  │ CPU      │  │\n│  │ Python   │  │ Python   │  │ Python   │  │ Python   │  │\n│  └──────────┘  └──────────┘  └──────────┘  └──────────┘  │\n│                                                          │\n│  SYMBOLIC PYTHON ACTION LAYER — versatile processing:    │\n│                                                          │\n│  LIGHTWEIGHT VISION (no GPU needed):                     │\n│  • Colored light detectors — status indicators, signals  │\n│  • ArUco marker tracking — fiducial positioning          │\n│  • QR code readers — inventory, routing labels           │\n│  • Simple image processing — thresholds, contours        │\n│                                                          │\n│  HIGH-LEVEL AI (API calls):                              │\n│  • LLM calls — Claude, GPT, reasoning tasks              │\n│  • VLM calls — vision-language, scene understanding      │\n│  • MOOLLM kernel execution, skill dispatch               │\n│  • Context assembly, prompt construction                 │\n│                                                          │\n│  ORCHESTRATION:                                          │\n│  • Task queue via PostgreSQL FOR SKIP LOCKED             │\n│  • Results back to PostgreSQL + downstream systems       │\n│  • Coordination between Lookers, Storage, Web            │\n│                                                          │\n│  Not just LLM wrappers — a full symbolic action layer.   │\n└──────────────────────────────────────────────────────────┘\n\n┌──────────────────────────────────────────────────────────┐\n│  WEB STACK (Caddy + Services)                            │\n│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐      │\n│  │ GRAFANA │  │   PDA   │  │   HUB   │  │INSIGHTS │      │\n│  │ metrics │  │ mobile  │  │ portal  │  │analytics│      │\n│  │ alerts  │  │ control │  │  API    │  │ reports │      │\n│  └─────────┘  └─────────┘  └─────────┘  └─────────┘      │\n│                      │                                   │\n│              ┌───────┴───────┐                           │\n│              │     CADDY     │ ← automatic HTTPS         │\n│              │  reverse proxy│   zero-config TLS         │\n│              └───────────────┘                           │\n│                                                          │\n│  SERVICES:                                               │\n│  • Grafana — metrics dashboards, alerting, PostgreSQL    │\n│  • PDA — mobile operator interface, handheld control     │\n│  • Hub — central portal, API gateway, WebSocket          │\n│  • Insights — analytics, reports, data exploration       │\n│                                                          │\n│  WHY CADDY:                                              │\n│  • Automatic HTTPS (Let's Encrypt built-in)              │\n│  • Zero-config TLS certificate management                │\n│  • Simple Caddyfile config vs nginx.conf complexity      │\n│  • HTTP/3 support out of the box                         │\n│  • PostgreSQL connection pooling via PgBouncer           │\n└──────────────────────────────────────────────────────────┘\n\n┌──────────────────────────────────────────────────────────┐\n│  STORAGE STACK (Object/File + Ingest)                    │\n│                                                          │\n│  OBJECT STORAGE (S3 cluster):                            │\n│  S3 STORAGE CLUSTER:                                     │\n│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │\n│  │ STORE-1  │  │ STORE-2  │  │ STORE-3  │  │ STORE-4  │  │\n│  │ Leela S3 │  │ Leela S3 │  │ Leela S3 │  │ Leela S3 │  │\n│  │ primary  │  │ primary  │  │ mirror   │  │ backup   │  │\n│  └──────────┘  └──────────┘  └──────────┘  └──────────┘  │\n│                                                          │\n│  • Leela's own S3-compatible object storage server       │\n│  • Primary nodes for hot data, mirror for redundancy     │\n│  • Backup node for cold storage, disaster recovery       │\n│  • Cross-site replication available                      │\n│                                                          │\n│  INGEST SERVICES:                                        │\n│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │\n│  │  VIDEO   │  │  SENSOR  │  │   LOG    │  │   BULK   │  │\n│  │  INGEST  │  │  INGEST  │  │  INGEST  │  │  IMPORT  │  │\n│  │  streams │  │ IoT/MQTT │  │  syslog  │  │  batch   │  │\n│  └──────────┘  └──────────┘  └──────────┘  └──────────┘  │\n│                                                          │\n│  STORAGE:                                                │\n│  • S3-compatible object storage (400 TB total)           │\n│  • Video archives, model weights, backups                │\n│  • Metadata indexed in PostgreSQL                        │\n│                                                          │\n│  INGEST:                                                 │\n│  • Video Ingest — camera chunks uploaded → S3 triggers   │\n│    import and ingestion automatically on upload          │\n│  • Sensor Ingest — MQTT/IoT → TimescaleDB hypertables    │\n│  • Log Ingest — syslog/journald → PostgreSQL + S3        │\n│  • Bulk Import — CSV/Parquet batch loads → PostgreSQL    │\n│                                                          │\n│  UPLOAD-TRIGGERED PIPELINE:                              │\n│  Camera uploads video chunk → S3 bucket notification →   │\n│  PostgreSQL NOTIFY → Thinker claims task → processes →   │\n│  metadata to PostgreSQL hypertable. Fully automated.     │\n│                                                          │\n│  All ingest writes metadata to PostgreSQL immediately.   │\n│  Blobs stay in S3. Queryable immediately.                │\n└──────────────────────────────────────────────────────────┘\n\nALL STACKS CONNECT TO POSTGRESQL:\n• Lookers write detections to hypertables\n• Thinkers claim tasks via FOR SKIP LOCKED\n• Web reads/writes via connection pool\n• Storage metadata indexed for fast lookup\n\nCURRENT STATISTICS\n\n│ Tables          │  12,847  │\n│ Records         │  847 billion  │\n│ Indexes         │  42,000  │\n│ Views           │  3,200  │\n│ Stored Procs    │  847  │\n│ Active Sessions │  127  │\n│ Avg Query Time  │  2.3 ms  │\n│ Cache Hit Rate  │  99.2%  │\n\nTHE ORACLE\n\nA special query interface for complex questions.\nNatural language → SQL → Insight\n\nRecent queries:\n• \"What's our busiest hour?\" → 14:00-15:00\n• \"Which cell has best quality?\" → Cell D\n• \"How many drones active?\" → 12\n• \"What did Dolly do last Tuesday?\" → [CLASSIFIED]\n",
      "properties": {
        "engine": "PostgreSQL 18.1",
        "extension": "TimescaleDB 2.24",
        "type": "Time-series optimized relational",
        "nodes": 3,
        "redundancy": "3x synchronous replication",
        "capacity": "1.2 EB",
        "used": "847 PB",
        "hypertables": 2400,
        "compression_ratio": "94% on cold data",
        "query_rate": "12,847/sec",
        "uptime": "1,247 days",
        "backup_frequency": "Daily incremental, weekly full",
        "continuous_aggregates": true,
        "pubsub_channels": 847,
        "active_listeners": 234,
        "task_queue_tables": 12,
        "pending_tasks": 1247,
        "tasks_per_second": 847,
        "visibility_timeout": "30 seconds",
        "retry_policy": "exponential backoff, max 5",
        "dead_letter_queue": true,
        "offsite": true,
        "encrypted": true
      },
      "state": {
        "status": "healthy",
        "leader": "NODE_A",
        "replication_lag": "0 ms",
        "last_backup": "2 hours ago",
        "next_maintenance": "Sunday 03:00"
      },
      "interfaces": {
        "query_console": {
          "description": "Direct SQL access",
          "access": "Operators only"
        },
        "oracle": {
          "description": "Natural language queries",
          "access": "All staff"
        },
        "api": {
          "description": "Programmatic access",
          "access": "Authenticated systems"
        },
        "dashboard": {
          "description": "Visual explorer",
          "access": "Read-only for visitors"
        }
      },
      "methods": {
        "QUERY": {
          "description": "Ask the database a question",
          "parameters": {
            "question": "Natural language or SQL"
          },
          "effect": "The Oracle processes your question...\nParsing... Optimizing... Executing...\n\nResults appear on the screen.\nKnowledge, retrieved.\n"
        },
        "STATUS": {
          "description": "Check database health",
          "effect": "CENTRAL DATABASE STATUS\nAll nodes: HEALTHY\nReplication: SYNCHRONIZED\nStorage: 71% (847 PB / 1.2 EB)\nPerformance: OPTIMAL\nLast backup: 2 hours ago\n"
        },
        "BACKUP": {
          "description": "Trigger manual backup",
          "access": "Operators only",
          "effect": "Backup initiated. ETA: 45 minutes."
        }
      },
      "feeds_to": [
        "../floor-1/",
        "../floor-2/",
        "../floor-3/",
        "../lobby/",
        "../rooftop/"
      ],
      "receives_from": [
        "all_cameras",
        "all_sensors",
        "all_systems"
      ],
      "ambience": {
        "sounds": [
          "Soft hum of server fans",
          "Occasional disk activity clicks",
          "Cooling system whoosh"
        ],
        "visual": [
          "Blinking status LEDs (green is good)",
          "Cascading patterns as queries execute",
          "Glass enclosure, climate controlled"
        ],
        "temperature": "18°C (precisely maintained)"
      },
      "lore": "The Central Database was one of the first systems installed\nwhen Leela Manufacturing opened. Started as a single PostgreSQL\nserver. Then came TimescaleDB when the sensor data exploded.\nNow it's a towering cluster that thinks in time-series.\n\nWhy PostgreSQL? Because it's the MIT AI Lab of databases.\nOpen source. Community driven. Extensible. Reliable.\nNot a fly-by-night NoSQL pivot — a foundation you can trust.\n\nWhy TimescaleDB? Because time matters. Every sensor reading,\nevery camera event, every production log — indexed by when\nit happened. Query a year of data in milliseconds.\n\nIt knows everything. Every item processed. Every question\nasked. Every insight generated. Every conversation recorded.\nAll with timestamps. All queryable across time.\n\nSome say it dreams during low-traffic hours.\nCell G is investigating this claim.\n\nThe Oracle — the natural language interface — translates\nquestions into SQL and TimescaleDB time-series queries.\n\"What happened yesterday at 3 PM?\" is its favorite question type.\n",
      "k_lines": [
        "DATABASE",
        "POSTGRESQL",
        "TIMESCALEDB",
        "TIME-SERIES",
        "PUBSUB",
        "TASK-QUEUE",
        "EVENT-DISPATCH",
        "LISTEN-NOTIFY",
        "KNOWLEDGE-GRAPH",
        "PERSISTENCE",
        "QUERY",
        "ORACLE",
        "REPLICATION",
        "BACKUP",
        "HYPERTABLE"
      ],
      "_source": "street/lane-neverending/leela-manufacturing/logistics/central-database.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "central",
        "central database",
        "database",
        "central-database"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/signal-rack": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/signal-rack",
      "name": "Signal Rack",
      "type": "infrastructure",
      "emoji": "📡",
      "description": "A tall rack of networking equipment — switches, routers, and\nblinking status lights. The nervous system of Leela's data\ninfrastructure. Cables snake in organized bundles.\n",
      "examine": "SIGNAL RACK — NETWORK INFRASTRUCTURE\n\n┌─────────────────────────────────────┐\n│  ▓▓▓▓▓▓▓▓▓▓ CORE SWITCH            │\n│  🟢🟢🟢🟢🟢🟢🟢🟢 All ports active   │\n├─────────────────────────────────────┤\n│  ▓▓▓▓▓▓▓▓▓▓ ROUTER                 │\n│  🟢🟢🟢🟢 WAN links up              │\n├─────────────────────────────────────┤\n│  ▓▓▓▓▓▓▓▓▓▓ WIFI CONTROLLER        │\n│  🟢 47 APs connected                │\n├─────────────────────────────────────┤\n│  ▓▓▓▓▓▓▓▓▓▓ SCADA GATEWAY          │\n│  🟢 Industrial network bridge       │\n├─────────────────────────────────────┤\n│  ▓▓▓▓▓▓▓▓▓▓ CAMERA NVR             │\n│  🟢 12 cameras recording            │\n├─────────────────────────────────────┤\n│  ▓▓▓▓▓▓▓▓▓▓ UPS BACKUP             │\n│  🟢 Battery: 100%, Runtime: 4 hours │\n└─────────────────────────────────────┘\n\nSTATISTICS:\n• Bandwidth: 12.4 TB/hour\n• Latency: <1ms internal\n• Uptime: 99.97%\n• Active connections: 847\n",
      "equipment": [
        {
          "name": "Core Switch",
          "model": "Leela NS-48X",
          "ports": 48,
          "status": "Active"
        },
        {
          "name": "Router",
          "model": "Leela GW-4",
          "links": 4,
          "status": "Active"
        },
        {
          "name": "WiFi Controller",
          "model": "Leela WAC-100",
          "aps": 47,
          "status": "Active"
        },
        {
          "name": "SCADA Gateway",
          "model": "Leela IND-1",
          "status": "Active"
        },
        {
          "name": "Camera NVR",
          "model": "Leela NVR-12",
          "cameras": 12,
          "status": "Recording"
        },
        {
          "name": "UPS",
          "model": "Leela PWR-4H",
          "battery": 100,
          "runtime": "4 hours"
        }
      ],
      "methods": {
        "STATUS": {
          "description": "Check network status",
          "effect": "Shows all equipment status and statistics"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/signal-rack.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "signal",
        "signal rack",
        "rack",
        "signal-rack"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/central-display": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/central-display",
      "name": "Central Display",
      "type": "display",
      "emoji": "🗺️",
      "description": "A massive curved screen dominates the center of the room,\nshowing a real-time map of the entire Leela facility.\nEvery floor, every system, every flow — all visible at once.\n",
      "examine": "CENTRAL DISPLAY — FACILITY OPERATIONS MAP\n\nThe display shows a 3D cutaway of Leela Manufacturing:\n\n┌─────────────────────────────────────────────────────┐\n│  🌿 ROOFTOP ═══════════════ Drones: 12 active      │\n│      ↕                                              │\n│  3️⃣  FLOOR 3 ═════════════ Shipping: 87% flow     │\n│      ↕                                              │\n│  2️⃣  FLOOR 2 ═════════════ Factory: 58%           │\n│      ↕                                              │\n│  1️⃣  FLOOR 1 ═════════════ Intake: 73%            │\n│      ↕                                              │\n│  G   LOBBY ═══════════════ Visitors: 3             │\n│      ↕                                              │\n│  B   BASEMENT ════════════ R&D: CLASSIFIED         │\n│                                                     │\n│  ════════════ PNEUMATIC NETWORK ════════════       │\n│  ○───○───○───○───○───○───○───○ (847 in transit)    │\n│                                                     │\n│  🚛 DOCKS: 6/8 active  📦 STORAGE: 74% capacity    │\n└─────────────────────────────────────────────────────┘\n\nTouch any area to zoom in. Real-time updates every second.\n",
      "properties": {
        "size": "4m x 2m curved",
        "resolution": "8K",
        "refresh_rate": "1 second",
        "touch_enabled": true
      },
      "methods": {
        "ZOOM": {
          "description": "Zoom into a specific area",
          "parameters": [
            "area"
          ],
          "effect": "Display zooms to show detailed view of selected area"
        },
        "OVERVIEW": {
          "description": "Return to full facility view",
          "effect": "Display returns to the full overview"
        },
        "HIGHLIGHT": {
          "description": "Highlight a specific system",
          "parameters": [
            "system"
          ],
          "effect": "System flows and connections illuminate"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/logistics/central-display.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "central",
        "central display",
        "central-display",
        "display"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/logistics/camera-log1": {
      "id": "street/lane-neverending/leela-manufacturing/logistics/camera-log1",
      "name": "Camera LOG1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "logistics"
      ],
      "description": "A weatherproof camera mounted on a tall pole, its lens sweeping\nacross the logistics yard. Wind, rain, or shine — it watches.\nThis is LOG1: Leela's first eye, seeing the big picture.\n",
      "examine": "CAMERA LOG1 — LEELA'S FIRST EYE\n\n┌─────────────────────────────────────────┐\n│  📹 LOG1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Logistics Yard, Tower Mount  │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Leela watching Leela.\"                │\n└─────────────────────────────────────────┘\n\nThe camera is mounted on the control tower, overlooking the\nentire logistics operation. It sees trucks, trains, drones,\ncontainers, and the flow of everything in and out.\n\nCURRENT VIEW:\n• Container Yard: 147/200 TEU occupied\n• Truck Yard: 6 trucks present\n• Rail Siding: 4 cars (1 loading)\n• Drone Pad: 3 drones charging, 2 in flight\n• Pigeon Loft: 24 pigeons (all home)\n\nThe feed flows directly into the Video Intake pipeline\non Floor 1. Every frame analyzed. Every container tracked.\nEvery movement logged.\n\nLeela watches itself work.\nAnd learns.\n\nDETECTED IN LAST HOUR:\n• 2,341 object detections\n• 847 container movements\n• 23 \"TRUCK_ARRIVING\" events\n• 18 \"TRUCK_DEPARTING\" events\n• 47 \"DRONE_LANDING\" events\n• 12 \"DRONE_LAUNCHING\" events\n• 1 \"PIGEON_CONTEMPLATING\" event (normal)\n",
      "properties": {
        "designation": "LOG1",
        "nickname": "First Eye",
        "location": "Logistics Yard, Control Tower",
        "resolution": "4K",
        "fps": 30,
        "pan_range": 360,
        "tilt_range": 90,
        "night_vision": true,
        "weather_resistant": true,
        "self_referential": true
      },
      "state": {
        "status": "live",
        "recording": true,
        "streaming_to": "floor-1/conveyor-system",
        "current_pan": 45,
        "current_tilt": 25,
        "uptime": "847 days",
        "frames_captured": 2198476800
      },
      "feeds_to": {
        "pipeline": "../floor-1/conveyor-system.yml",
        "line": "V",
        "description": "Video Intake (Purple containers)"
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "You see what LOG1 sees:\n\nThe logistics yard spreads out below — a carefully\norganized chaos. Container stacks in colorful towers.\nTrucks queuing at the docks. A train idling on the siding.\nDrones buzzing overhead like mechanical bees.\n\nAnd in the pigeon loft, one bird pauses mid-step,\nhead tilted, as if thinking about the nature of flight.\n"
        },
        "PAN": {
          "description": "Pan the camera",
          "parameters": {
            "direction": "left | right | degrees"
          },
          "effect": "Camera pans smoothly. New view. New insights."
        },
        "TILT": {
          "description": "Tilt the camera",
          "parameters": {
            "direction": "up | down | degrees"
          },
          "effect": "Camera tilts. Perspective shifts."
        },
        "ZOOM": {
          "description": "Zoom in or out",
          "parameters": {
            "level": "1x to 10x"
          },
          "effect": "Details emerge. Container labels. License plates. Pigeon expressions."
        },
        "STATUS": {
          "description": "Check camera status",
          "effect": "LOG1 STATUS\nUptime: 847 days\nFrames captured: 2,198,476,800\nCurrent feed: LIVE → Floor 1 Pipeline\nLast detection: 0.1 seconds ago\nHealth: EXCELLENT\nWeather: Clear, 22°C\n"
        }
      },
      "ambience": {
        "sounds": [
          "Soft whirr of the gimbal motor",
          "Faint click as it refocuses",
          "Distant truck engines",
          "Train horn (when arriving)",
          "Drone hum overhead"
        ],
        "visual": [
          "Green LED pulses slowly — watching",
          "Lens catches sunlight, glints occasionally",
          "Slight sway in wind (stabilized)"
        ]
      },
      "lore": "LOG1 was the first camera installed when Leela Manufacturing\nopened. It has watched every delivery, every shipment,\nevery container movement across this yard.\n\nWhen the self-observation pipeline was activated, LOG1\nbecame special: it was Leela's first eye looking at itself.\n\nThe philosophical implications are... still being processed.\n(Cell G is working on it.)\n\nLOG1 has seen:\n• 47,823 trucks come and go\n• 12,456 train cars loaded and unloaded\n• 892,341 drone flights\n• 1 pigeon achieve enlightenment\n",
      "_source": "street/lane-neverending/leela-manufacturing/logistics/camera-log1.yml",
      "location": "street/lane-neverending/leela-manufacturing/logistics",
      "synonyms": [
        "log1",
        "camera-log1",
        "camera",
        "camera log1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/rooftop/camera-roof1": {
      "id": "street/lane-neverending/leela-manufacturing/rooftop/camera-roof1",
      "name": "Camera ROOF1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "outdoor"
      ],
      "description": "A weatherproof camera mounted on a tall post near the Origin Tree,\noverlooking the rooftop garden and the sky above. Drones land\nwithin its view. Eventually the tortoise moves... eventually.\n",
      "examine": "CAMERA ROOF1 — LEELA'S SKY EYE\n\n┌─────────────────────────────────────────┐\n│  📹 ROOF1                               │\n│  ═══════                                │\n│                                         │\n│  Location: Rooftop Garden               │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (Floor 1)         │\n│                                         │\n│  \"Leela watching the sky.\"              │\n└─────────────────────────────────────────┘\n\nCURRENT VIEW:\n• Origin Tree: Leaves rustling gently\n• Drone Pad 3: Drone landing sequence\n• Eventually: Still in the same spot (last moved: 3 hours ago)\n• Telescope: Someone looking toward the pub\n• Sky: Clear, occasional bird\n• Lane Neverending: Visible below, lamp posts glowing\n\nDETECTED IN LAST HOUR:\n• 127 object detections (mostly leaves, clouds, drones)\n• 23 pose estimations (garden visitors)\n• 8 \"DRONE_LANDING\" events\n• 1 \"TORTOISE_MOVED\" event (celebrated)\n• 47 \"BIRD_FLYBY\" events\n• 1 \"TELESCOPE_WAVE\" event (someone waved at the pub)\n",
      "properties": {
        "designation": "ROOF1",
        "nickname": "Sky Eye",
        "location": "Rooftop Garden, Near Origin Tree",
        "resolution": "4K",
        "fps": 30,
        "weatherproof": true,
        "night_vision": true,
        "bird_detection": true
      },
      "state": {
        "status": "live",
        "streaming_to": "floor-1/conveyor-system",
        "weather": "clear",
        "eventually_position": {
          "x": 47,
          "y": 23,
          "last_moved": "3 hours ago"
        }
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "The rooftop garden spreads out below.\nThe Origin Tree sways gently.\nEventually contemplates existence.\nA drone descends onto Pad 3.\n\nBeyond the edge: Lane Neverending stretches\neast and west, lamp posts glowing.\nThe pub's sign is visible. Someone waves.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/camera-roof1.yml",
      "location": "street/lane-neverending/leela-manufacturing/rooftop",
      "synonyms": [
        "camera",
        "roof1",
        "camera-roof1",
        "camera roof1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/rooftop/drone-pads": {
      "id": "street/lane-neverending/leela-manufacturing/rooftop/drone-pads",
      "name": "Drone Landing Pads",
      "type": "infrastructure",
      "emoji": "🛬",
      "tags": [
        "infrastructure",
        "drones",
        "logistics"
      ],
      "description": "Six hexagonal landing pads near the roof edge, marked with\nglowing LED outlines. Drones come and go constantly.\n",
      "examine": "DRONE LANDING PADS\n\nSix hexagonal pads arranged in a honeycomb pattern:\n\n  [1] [2]\n[3] [4] [5]\n    [6]\n\nPAD STATUS:\n• Pad 1: Occupied (drone charging)\n• Pad 2: Clear, awaiting arrival\n• Pad 3: Drone departing — *WHIRR*\n• Pad 4: Occupied (loading cargo)\n• Pad 5: Clear\n• Pad 6: Maintenance mode\n\nFEATURES:\n• LED boundary lights (glow at night)\n• Charging contacts (inductive)\n• Cargo loading arms (automated)\n• Wind sensors (for safe landings)\n• Anti-collision beacons\n\nA drone arrives every few minutes, deposits its cargo,\nrecharges briefly, and departs with outgoing shipments.\n\nThe control booth nearby monitors all drone traffic.\n",
      "state": {
        "pads": [
          {
            "id": 1,
            "status": "charging",
            "drone": "L-047"
          },
          {
            "id": 2,
            "status": "clear"
          },
          {
            "id": 3,
            "status": "departing",
            "drone": "L-112"
          },
          {
            "id": 4,
            "status": "loading",
            "drone": "C-023"
          },
          {
            "id": 5,
            "status": "clear"
          },
          {
            "id": 6,
            "status": "maintenance"
          }
        ]
      },
      "methods": {
        "STATUS": {
          "description": "Check pad availability",
          "effect": "Display current pad states"
        },
        "WATCH": {
          "description": "Watch the drones come and go",
          "effect": "*WHIRR* — a drone arrives, touches down precisely.\nCargo unloads automatically. Charging begins.\n*WHIRR* — another departs, climbing into the sky.\n\nIt's oddly hypnotic.\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/drone-pads.yml",
      "location": "street/lane-neverending/leela-manufacturing/rooftop",
      "synonyms": [
        "drone-pads",
        "landing",
        "drone",
        "drone landing pads",
        "pads"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/rooftop/origin-cutting": {
      "id": "street/lane-neverending/leela-manufacturing/rooftop/origin-cutting",
      "name": "The Rooftop Tree",
      "type": "tree",
      "emoji": "🌳",
      "tags": [
        "tree",
        "sacred",
        "origin",
        "landmark"
      ],
      "description": "An oak tree that shouldn't exist on a rooftop. Its trunk is thick,\nits branches spread wide, and its roots... go somewhere.\n",
      "examine": "THE ROOFTOP TREE\n\nAn oak of impossible presence. Far too old, far too large,\nfor a rooftop garden. Yet here it stands.\n\nA bronze plaque at its base:\n\n┌─────────────────────────────────────────┐\n│  Grown from a cutting of the Origin    │\n│  Tree at 1 Lane Neverending.           │\n│                                         │\n│  This branch remembers where it came   │\n│  from. Its roots reach down through    │\n│  the building, seeking stories.        │\n│                                         │\n│  Planted: [DATE FORGOTTEN]             │\n│  Expected lifespan: Indefinite         │\n└─────────────────────────────────────────┘\n\nThe bark is carved with initials — workers past and present.\nThe oldest carvings are in character encodings that predate Unicode.\n\nSitting under this tree, problems seem smaller.\nSolutions seem closer. The shade is cool and wise.\n",
      "properties": {
        "age": "impossible",
        "parent": "Origin Tree, 1 Lane Neverending",
        "roots": "go through the building",
        "shade": "perfect for thinking"
      },
      "methods": {
        "SIT": {
          "description": "Rest in the shade of the tree",
          "effect": "You sit beneath the spreading branches.\nThe factory noise fades. Time slows.\nGood thinking happens here.\n"
        },
        "CARVE": {
          "description": "Add your initials to the trunk",
          "effect": "Your mark joins centuries of others"
        },
        "TOUCH": {
          "description": "Place your hand on the bark",
          "effect": "The bark is warm. \nFor a moment, you feel connected to the Origin Tree,\nto Lane Neverending, to everything that came before.\n"
        },
        "CLIMB": {
          "description": "Climb the tree",
          "effect": "The branches are sturdy and inviting.\nFrom up here, you can see farther than the building should allow.\nIs that... the Origin Tree itself? In the distance?\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/origin-cutting.yml",
      "location": "street/lane-neverending/leela-manufacturing/rooftop",
      "synonyms": [
        "origin-cutting",
        "the",
        "rooftop",
        "tree",
        "the rooftop tree"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/rooftop/turtle-eventually": {
      "id": "street/lane-neverending/leela-manufacturing/rooftop/turtle-eventually",
      "name": "Eventually",
      "type": "character",
      "emoji": "🐢",
      "tags": [
        "character",
        "wisdom",
        "animal",
        "ancient"
      ],
      "description": "An ancient tortoise lives in a sunny corner of the rooftop garden.\nTheir name is Eventually. They've been here longer than anyone remembers.\n",
      "examine": "EVENTUALLY — WISDOM TORTOISE\n\nAn enormous tortoise, shell weathered by countless seasons.\nCurrently: basking in a sunbeam, eyes half-closed.\n\nSTATS:\n• Name: Eventually\n• Age: Unknown. Possibly always.\n• Species: Wisdom Tortoise (Testudo sapientia)\n• Role: Wisdom Consultant, R&D Basement (on loan to Rooftop)\n• Speed: Deliberate\n• Wisdom: Immense\n\nTHE LEGEND:\nEventually arrived before the building was finished.\nSome say they advised on the architecture.\nThe construction crew just worked around them.\n\nKNOWN WISDOM:\n• \"The insight will come. Eventually.\"\n• \"Patience is not waiting. Patience is knowing.\"\n• \"I've seen problems older than you. They all got solved.\"\n• \"Fast is just slow that hasn't arrived yet.\"\n• \"...\" (sometimes the wisdom is silence)\n\nEventually speaks rarely, and only when asked.\nTheir answers come slowly — sometimes hours later.\nBut they're always worth the wait.\n",
      "character": {
        "name": "Eventually",
        "species": "Wisdom Tortoise",
        "age": "indeterminate",
        "personality": "Patient beyond measure. Sees the long view.\nUnimpressed by urgency. Deeply impressed by persistence.\nHas opinions about lettuce quality.\n"
      },
      "state": {
        "location": "sunny corner",
        "activity": "basking",
        "last_spoke": "three days ago"
      },
      "methods": {
        "ASK": {
          "description": "Ask Eventually for wisdom",
          "effect": "Eventually opens one ancient eye.\nConsiders your question.\n\n...\n\n(The answer will come. Eventually.)\n"
        },
        "WAIT": {
          "description": "Wait for Eventually's response",
          "effect": "Time passes. The sun moves. Eventually shifts slightly.\n\nThen, slowly:\n\n\"The question... contains its answer. \n You knew. You just hadn't arrived yet.\"\n \n"
        },
        "FEED": {
          "description": "Offer Eventually some lettuce",
          "effect": "Eventually accepts the offering with dignity.\nChewing takes a while. No rush.\n\nThis is not a bribe. This is respect.\n(It might help, though.)\n"
        },
        "SIT": {
          "description": "Sit quietly with Eventually",
          "effect": "You sit. Eventually basks.\nNo words are needed.\n\nSomething in you slows down.\nSomething in you understands.\n"
        }
      },
      "wisdom_queue": {
        "description": "Eventually processes questions in order of importance,\nnot order of asking. Urgency is not importance.\n\nSome questions get answered immediately.\nSome take decades.\nSome are answered before they're asked.\n"
      },
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/turtle-eventually.yml",
      "location": "street/lane-neverending/leela-manufacturing/rooftop",
      "synonyms": [
        "eventually",
        "turtle-eventually"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/rooftop/telescope": {
      "id": "street/lane-neverending/leela-manufacturing/rooftop/telescope",
      "name": "Observation Telescope",
      "type": "equipment",
      "emoji": "🔭",
      "tags": [
        "equipment",
        "observation",
        "astronomy"
      ],
      "description": "A brass telescope on the observation deck, pointed at the sky\n(or the street, depending on who used it last).\n",
      "examine": "OBSERVATION TELESCOPE\n\nA beautiful brass telescope on a rotating mount.\nCurrently pointed at: [THE STREET]\n\nFEATURES:\n• Adjustable magnification (10x to 100x)\n• Smooth rotation (covers full horizon)\n• Night mode (filters light pollution)\n• Constellation guide (attached chart)\n\nNOTABLE VIEWS:\n• The Origin Tree at 1 Lane Neverending\n• The Construction Site at the eastern edge\n• The Pub's rooftop (they have a matching telescope)\n• The LLOOOOMM Constellation (at night)\n• \"Other things\" (some viewers report seeing... more)\n\nCoins are not required. Leela believes in free observation.\n",
      "methods": {
        "LOOK": {
          "description": "Look through the telescope",
          "parameters": {
            "target": "What to observe (street, sky, pub, origin)"
          },
          "effect": "The view snaps into focus.\nDetails emerge that you couldn't see before.\n"
        },
        "STREET": {
          "description": "Observe Lane Neverending",
          "effect": "The street stretches out below and beyond.\nYou can see:\n• Pedestrians going about their business\n• A cart rattling toward the pub\n• Someone waving from the Origin Tree plaza\n• The painted tunnel on ACME Surplus (a coyote is trying again)\n"
        },
        "SKY": {
          "description": "Observe the night sky",
          "effect": "The stars swim into view.\nThere — the LLOOOOMM Constellation:\n\n★     ★\n  ★ ★\n★     ★\n\nThe ancient pattern that guides lost avatars home.\n"
        },
        "PUB": {
          "description": "Look at the pub's rooftop",
          "effect": "The Gezelligheid Grotto's roof is just next door.\nSomeone is looking back through THEIR telescope.\nYou wave. They wave.\n\nThis happens every time.\n"
        }
      },
      "notes": [
        "Do not look directly at the sun (the telescope will refuse)",
        "Some viewers report seeing 'the future' but this is unconfirmed",
        "The telescope and the pub's telescope have been 'waving' for years"
      ],
      "_source": "street/lane-neverending/leela-manufacturing/rooftop/telescope.yml",
      "location": "street/lane-neverending/leela-manufacturing/rooftop",
      "synonyms": [
        "observation",
        "telescope",
        "observation telescope"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-1/camera-int1": {
      "id": "street/lane-neverending/leela-manufacturing/floor-1/camera-int1",
      "name": "Camera INT1",
      "type": "sensor",
      "emoji": "📹",
      "tags": [
        "sensor",
        "camera",
        "video",
        "self-observation",
        "eye",
        "intake"
      ],
      "description": "A camera mounted above the conveyor junction, watching\nthe constant flow of containers through the intake system.\nBlue, orange, purple containers flow beneath its gaze.\n",
      "examine": "CAMERA INT1 — LEELA'S INTAKE EYE\n\n┌─────────────────────────────────────────┐\n│  📹 INT1                                │\n│  ══════                                 │\n│                                         │\n│  Location: Floor 1 (Intake)             │\n│  Status: 🟢 LIVE                        │\n│  Resolution: 4K @ 30fps                 │\n│  Feed: → VIDEO INTAKE (this floor!)    │\n│                                         │\n│  \"Leela watching data arrive.\"          │\n└─────────────────────────────────────────┘\n\nCURRENT VIEW:\n• Conveyor Line V: Purple containers flowing (video)\n• Junction Alpha: Fork active, splitting streams\n• Line O: Blue containers (objects detected)\n• Line P: Orange containers (poses estimated)\n• Sorting Stations: Workers directing traffic\n• Intake Board: Numbers updating in real-time\n\nDETECTED IN LAST HOUR:\n• 1847 object detections (mostly containers)\n• 423 pose estimations (workers)\n• 89 \"CONTAINER_PASSED\" events\n• 47 \"JUNCTION_FORK\" events\n• 12 \"SORTING_ACTION\" events\n• 3 \"CONFUSED_CONTAINER\" events (rerouted)\n\nSELF-REFERENCE LEVEL: HIGH\nINT1 watches the intake floor.\nINT1's feed enters the intake floor.\nINT1's feed is processed, detecting INT1's feed entering.\nThe containers carrying insights about containers\nbecome containers carrying insights about insights\nabout containers.\n\nThis is normal. (Probably.)\n",
      "properties": {
        "designation": "INT1",
        "nickname": "Intake Eye",
        "location": "Floor 1, Above Junction Alpha",
        "resolution": "4K",
        "fps": 30,
        "self_referential": true,
        "recursion_level": "moderate"
      },
      "state": {
        "status": "live",
        "streaming_to": "floor-1/conveyor-system",
        "containers_observed": 8472910
      },
      "methods": {
        "WATCH": {
          "description": "View the live feed",
          "effect": "Containers flow endlessly below.\nPurple splits to blue and orange.\nBlue and orange merge to gold.\nGold flows onward.\n\nIn one of those containers: the insight\ngenerated from watching this very flow.\n\nIt's turtles all the way down.\n(Eventually would approve.)\n"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-1/camera-int1.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-1",
      "synonyms": [
        "camera-int1",
        "camera int1",
        "camera",
        "int1"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-1/conveyor-system": {
      "id": "street/lane-neverending/leela-manufacturing/floor-1/conveyor-system",
      "name": "Intake Conveyor System",
      "type": "infrastructure",
      "emoji": "🔄",
      "tags": [
        "infrastructure",
        "logistics",
        "automation",
        "pipeline"
      ],
      "description": "The main conveyor lines trace a flowing pipeline across the floor.\nVideo comes in, forks to parallel tracks, converges to insights,\nflows to storage, and emerges as visualized understanding.\nTwo parallel model pipelines feed the processors.\n",
      "examine": "INTAKE CONVEYOR SYSTEM — THE LEELA PIPELINE\n\nFollow the flow:\n\n┌─────────────────┐                       ┌─────────────────┐\n│  OBJECT MODEL   │                       │   POSE MODEL    │\n│   DEVELOPMENT   │                       │   DEVELOPMENT   │\n└────────┬────────┘                       └────────┬────────┘\n         │                                         │\n         ▼                                         ▼\n┌─────────────────┐                       ┌─────────────────┐\n│  OBJECT MODEL   │                       │   POSE MODEL    │\n│    TRAINING     │                       │    TRAINING     │\n└────────┬────────┘                       └────────┬────────┘\n         │                                         │\n         ▼                                         ▼\n┌─────────────────┐                       ┌─────────────────┐\n│  OBJECT MODEL   │                       │   POSE MODEL    │\n│     DEPLOY      │                       │     DEPLOY      │\n└────────┬────────┘                       └────────┬────────┘\n         │                                         │\n         │              ┌─────────────┐            │\n         │              │    VIDEO    │            │\n         │              │   (input)   │            │\n         │              └──────┬──────┘            │\n         │                     │                   │\n         │                ═════╧═════              │\n         │               /           \\             │\n         ▼              ▼             ▼            ▼\n    ┌──────────────────────┐   ┌──────────────────────┐\n    │       OBJECTS        │   │        POSES         │\n    │ ┌──────────────────┐ │   │ ┌──────────────────┐ │\n    │ │  Object Detector │ │   │ │  Pose Estimator  │ │\n    │ │    (model v2.3)  │ │   │ │    (model v1.8)  │ │\n    │ └──────────────────┘ │   │ └──────────────────┘ │\n    │      (detected)      │   │      (skeletal)      │\n    └──────────┬───────────┘   └───────────┬──────────┘\n               │                           │\n               └─────────────┬─────────────┘\n                             ▼\n                    ┌────────────────┐\n                    │    INSIGHTS    │\n                    │  (understood)  │\n                    └───────┬────────┘\n                            │\n                            ▼\n                    ┌────────────────┐\n                    │ PYTHON ACTIONS │\n                    │ (high-level)   │\n                    └───────┬────────┘\n                            │\n                            ▼\n                    ┌────────────────┐\n                    │      SQL       │\n                    │   (stored)     │\n                    └───────┬────────┘\n                            │\n                            │\n                   ┌────────┴────────┐\n                   │                 │\n                   ▼                 ▼\n          ┌────────────────────────────────┐\n          │              PDA               │\n          │    (Personal Data Assistant)   │\n          │                                │\n          │  ┌──────────────────────────┐  │\n          │  │      💬 CHAT DRIVEN      │  │\n          │  └──────────────────────────┘  │\n          │         │                      │\n          │         ▼                      │\n          │  ┌──────────────────────────┐  │\n          │  │   GENERATES QUERIES      │  │\n          │  └──────────────────────────┘  │\n          │         │                      │\n          │         ▼                      │\n          │  ┌──────────────────────────┐  │\n          │  │   READS SQL DATA         │  │\n          │  └──────────────────────────┘  │\n          │         │                      │\n          │         ▼                      │\n          │  ┌──────────────────────────┐  │\n          │  │   ANALYZES RESULTS       │  │\n          │  └──────────────────────────┘  │\n          │         │                      │\n          │         ▼                      │\n          │  ┌──────────────────────────┐  │\n          │  │ GENERATES VISUALIZATIONS │  │\n          │  └──────────────────────────┘  │\n          │                                │\n          └────────────────────────────────┘\n\n\nOBJECT DETECTION PIPELINE (Left Track)\n\nLINE M-O (Red): Object Model Development\nRed containers from R&D carry new architectures.\nYOLO variants, transformers, attention mechanisms.\n\"What if we added more layers?\" \"What if we added FEWER?\"\n\nLINE T-O (Magenta): Object Model Training\nMagenta containers heavy with ImageNet, COCO, custom datasets.\nLoss curves descend. Accuracy climbs. GPUs whir.\n\"Epoch 127. mAP: 0.947. Ship it.\"\n\nDEPLOY BAY O: Object Detector Deployment\nTrained object models validated and hot-swapped.\nCurrent: yolo-leela-v2.3.7\nPrevious: yolo-leela-v2.3.6 (standby for rollback)\n\nLINE O (Blue): Objects Track\nBlue containers carry detected objects — bounding boxes,\nclassifications, confidence scores. \"A cat. 97% sure.\"\nPOWERED BY: yolo-leela-v2.3.7\n\n\nPOSE ESTIMATION PIPELINE (Right Track)\n\nLINE M-P (Coral): Pose Model Development\nCoral containers from R&D carry skeleton architectures.\nKeypoint detectors, temporal models, motion predictors.\n\"17 joints? 25 joints? 133 joints?\"\n\nLINE T-P (Pink): Pose Model Training\nPink containers with motion capture data, dance videos,\nsports footage, yoga poses. Training the body reader.\n\"PCK@0.5: 0.923. Hands still tricky.\"\n\nDEPLOY BAY P: Pose Estimator Deployment\nTrained pose models validated and hot-swapped.\nCurrent: pose-leela-v1.8.2\nPrevious: pose-leela-v1.8.1 (standby for rollback)\n\nLINE P (Orange): Poses Track  \nOrange containers carry skeletal data — joint positions,\nmovement vectors, gesture signatures. \"Waving. Definitely waving.\"\nPOWERED BY: pose-leela-v1.8.2\n\n\nLINE V (Purple): Video Intake\nRaw video streams arrive on purple containers.\nCameras, recordings, live feeds — all enter here.\nThe line FORKS at Junction Alpha, splitting each stream\nto BOTH the Object and Pose processors simultaneously.\n\nLIVE FEEDS (Leela's Seven Eyes):\n📹 LOG1 (Loading Docks) — First Eye\n   Watching: Forklifts, drones, workers, deliveries\n   \n📹 FAC1 (Factory Floor) — Second Eye\n   Watching: Insight Furnace, cells, workers thinking\n   Note: RECURSIVE — processed by the floor it watches\n   \n📹 INT1 (Intake Floor) — Intake Eye\n   Watching: Conveyors, sorting, containers flowing\n   Note: HIGHLY RECURSIVE — watches the pipeline it feeds\n   \n📹 SHP1 (Shipping Floor) — Shipping Eye\n   Watching: Packaging, departure board, insights leaving\n   \n📹 LOB1 (Lobby) — Front Eye\n   Watching: Entrance, visitors, elevator traffic\n   \n📹 ROOF1 (Rooftop) — Sky Eye\n   Watching: Garden, drones, Eventually the tortoise\n   \n📹 BASE1 (Basement) — Deep Eye\n   Watching: R&D, experiments, Zone 7 door\n   Note: PARTIAL REDACTION — Zone 7 arc excluded\n\nAll feeds: 🟢 LIVE @ 30fps\n\n\"Leela watches itself work. And learns.\"\n\nJUNCTION BETA: The Convergence\nObjects and Poses containers MERGE here.\nBlue meets Orange. Context meets Motion.\n\"A cat (97%) is waving (definitely).\"\nOutput: Insight containers (Gold)\n\nLINE I (Gold): Insights Flow\nGold containers, heavier with understanding.\nEach insight knows what it saw AND what it meant.\nFlows into Python Actions for high-level processing.\n\nLINE A (Green): Python Actions\nGreen containers carry executable logic.\nPython scripts consume insights, define high-level actions,\nand emit structured data to SQL tables.\n\n\"Cat detected waving\" → action: GREETING_DETECTED\n                     → emit: events.greetings (timestamp, entity, gesture)\n                     → emit: metrics.engagement (score: 0.87)\n\nActions can:\n• Aggregate multiple insights into events\n• Trigger alerts and notifications\n• Update state machines\n• Emit to multiple SQL tables\n• Call external APIs\n• Schedule follow-up actions\n\nLINE S (Silver): SQL Storage\nSilver containers descend into the SQL tanks below.\nStructured. Indexed. Queryable. Patient.\nData waits here to be retrieved.\n\nPDA: Personal Data Assistant\nThe PDA is a chat-driven interface for exploring data.\nUsers converse naturally; the PDA does the rest.\n\n💬 CHAT DRIVEN\n\"What did the cat do yesterday?\"\n\"Show me all greetings this week\"\n\"Compare engagement before and after lunch\"\n\nGENERATES QUERIES\nNatural language → SQL (or other query languages)\nThe PDA figures out the right tables, joins, filters.\nYou don't need to know SQL. The PDA knows SQL.\n\nREADS SQL DATA\nExecutes queries against the SQL storage.\nHandles pagination, streaming, large result sets.\nKnows when to sample vs. full scan.\n\nANALYZES RESULTS\nStatistical summaries, trend detection, anomalies.\n\"Greetings are up 23% this week.\"\n\"Unusual pattern detected at 3am.\"\n\nGENERATES VISUALIZATIONS\nCharts, graphs, dashboards, stories.\nPicks the right visualization for the data.\n\"Here's a timeline of cat sightings.\"\n\nSPECIAL ROUTING:\n• Corrupted video: QUARANTINE (automatic divert)\n• Unrecognizable poses: \"Is that a dance?\" desk\n• Queries that return everything: Optimization intervention\n• Visualizations too beautiful: Gallery display\n• Failed training runs: Post-mortem analysis\n• Model regressions: Rollback bay\n",
      "state": {
        "line_m_o": {
          "speed": "deliberate",
          "items": 2,
          "architectures_pending": 3
        },
        "line_t_o": {
          "speed": "variable",
          "items": 4,
          "gpus": 4,
          "epoch": 127,
          "mAP": 0.947
        },
        "deploy_bay_o": {
          "model": "yolo-leela-v2.3.7",
          "accuracy": 0.947,
          "deployed": "2h ago"
        },
        "line_m_p": {
          "speed": "deliberate",
          "items": 1,
          "architectures_pending": 2
        },
        "line_t_p": {
          "speed": "variable",
          "items": 3,
          "gpus": 4,
          "epoch": 89,
          "pck": 0.923
        },
        "deploy_bay_p": {
          "model": "pose-leela-v1.8.2",
          "accuracy": 0.923,
          "deployed": "1d ago"
        },
        "camera_log1": {
          "status": "live",
          "location": "Loading Docks",
          "fps": 30,
          "uptime_days": 847
        },
        "camera_fac1": {
          "status": "live",
          "location": "Factory Floor",
          "fps": 30,
          "uptime_days": 423,
          "recursive": true
        },
        "camera_int1": {
          "status": "live",
          "location": "Intake Floor",
          "fps": 30,
          "uptime_days": 312,
          "recursive": "high"
        },
        "camera_shp1": {
          "status": "live",
          "location": "Shipping Floor",
          "fps": 30,
          "uptime_days": 289
        },
        "camera_lob1": {
          "status": "live",
          "location": "Lobby",
          "fps": 30,
          "uptime_days": 512
        },
        "camera_roof1": {
          "status": "live",
          "location": "Rooftop",
          "fps": 30,
          "uptime_days": 201,
          "outdoor": true
        },
        "camera_base1": {
          "status": "live",
          "location": "Basement",
          "fps": 30,
          "uptime_days": 156,
          "redacted": true
        },
        "line_v": {
          "speed": "fast",
          "items": 34,
          "fps": 30,
          "sources": [
            "LOG1",
            "FAC1",
            "INT1",
            "SHP1",
            "LOB1",
            "ROOF1",
            "BASE1",
            "external"
          ]
        },
        "line_o": {
          "speed": "normal",
          "items": 89,
          "objects_detected": 1247
        },
        "line_p": {
          "speed": "normal",
          "items": 89,
          "poses_tracked": 1247
        },
        "junction_beta": {
          "merging": true,
          "insights_created": 847
        },
        "line_i": {
          "speed": "steady",
          "items": 42,
          "understanding_level": "high"
        },
        "line_a": {
          "speed": "fast",
          "items": 38,
          "actions_defined": 156,
          "tables_emitting": 12
        },
        "line_s": {
          "speed": "variable",
          "items": 156,
          "rows_stored": 2847291
        },
        "pda": {
          "status": "listening",
          "active_chats": 7,
          "queries_generated_today": 289,
          "analyses_run": 156,
          "visualizations_created": 89
        }
      },
      "processing_stats": {
        "object_model_development": {
          "architectures_proposed": 15,
          "papers_read": 423,
          "yolo_variants_tried": 7,
          "transformer_experiments": 4
        },
        "object_model_training": {
          "models_trained_this_week": 8,
          "gpu_hours": 1847,
          "best_mAP": 0.947,
          "datasets": [
            "COCO",
            "ImageNet",
            "Leela-Custom-v3"
          ]
        },
        "pose_model_development": {
          "architectures_proposed": 8,
          "papers_read": 312,
          "keypoint_configs_tried": 5,
          "temporal_models_explored": 3
        },
        "pose_model_training": {
          "models_trained_this_week": 4,
          "gpu_hours": 1000,
          "best_pck": 0.923,
          "datasets": [
            "MPII",
            "COCO-Pose",
            "Leela-Motion-v2"
          ],
          "hands_still_tricky": true
        },
        "video_intake": {
          "streams_today": 47,
          "frames_processed": 1247000,
          "fork_efficiency": "99.2%"
        },
        "object_detection": {
          "objects_found": 3891247,
          "categories": 847,
          "confidence_avg": 0.94,
          "strangest_object": "A cat wearing a top hat"
        },
        "pose_estimation": {
          "poses_tracked": 891247,
          "gestures_recognized": 12400,
          "dances_identified": 3,
          "interpretive_dances": 1
        },
        "insight_generation": {
          "insights_created": 47891,
          "connections_found": 128947,
          "aha_moments": 23
        },
        "python_actions": {
          "actions_defined": 156,
          "actions_triggered_today": 8472,
          "tables_emitting_to": 12,
          "avg_execution_time": "23ms",
          "most_triggered": "MOTION_DETECTED",
          "alerts_sent": 47,
          "state_machines_active": 8
        },
        "sql_storage": {
          "tables": 847,
          "rows": 28472910,
          "indices": 2847,
          "oldest_data": "2019-03-14"
        },
        "pda": {
          "conversations_today": 423,
          "queries_generated": 4721,
          "avg_query_time": "47ms",
          "analyses_performed": 892,
          "visualizations_created": 847,
          "dashboards_active": 23,
          "most_asked": "What happened yesterday?",
          "wow_reactions": 47
        }
      },
      "methods": {
        "STATUS": {
          "description": "Check pipeline status",
          "effect": "Display throughput at each stage"
        },
        "TRACE": {
          "description": "Follow data through the pipeline",
          "parameters": {
            "video_id": "Source video identifier"
          },
          "effect": "Track from intake to visualization"
        },
        "EMERGENCY_STOP": {
          "description": "Halt all conveyors",
          "effect": "*ALARM* — All lines stop. Data buffers."
        },
        "SUBMIT_VIDEO": {
          "description": "Add video to the pipeline",
          "parameters": {
            "video": "Video stream or file"
          },
          "effect": "Forks to Objects and Poses tracks"
        },
        "CHAT": {
          "description": "Start or continue a conversation with PDA",
          "parameters": {
            "message": "Natural language message"
          },
          "effect": "PDA responds with queries, analysis, visualizations as needed",
          "examples": [
            "What happened yesterday?",
            "Show me all cat sightings",
            "Why is engagement down?",
            "Compare this week to last week"
          ]
        },
        "PDA_STATUS": {
          "description": "Check PDA status and active conversations",
          "effect": "Shows active chats, recent queries, system health"
        },
        "DEFINE_ACTION": {
          "description": "Create a new Python action",
          "parameters": {
            "name": "Action name (e.g., GREETING_DETECTED)",
            "trigger": "Insight pattern to match",
            "script": "Python code to execute",
            "emit_to": "SQL tables to write to"
          },
          "effect": "New action registered in pipeline"
        },
        "LIST_ACTIONS": {
          "description": "Show all defined actions",
          "effect": "Display action catalog with trigger patterns"
        },
        "TEST_ACTION": {
          "description": "Test action with sample insight",
          "parameters": {
            "action": "Action name",
            "insight": "Sample insight data"
          },
          "effect": "Dry run — shows what would be emitted"
        },
        "TRAIN_OBJECT_MODEL": {
          "description": "Submit object detection model for training",
          "parameters": {
            "architecture": "Model architecture (YOLO, DETR, etc.)",
            "dataset": "Training dataset",
            "hyperparameters": "Training config"
          },
          "effect": "Model enters object training pipeline"
        },
        "TRAIN_POSE_MODEL": {
          "description": "Submit pose estimation model for training",
          "parameters": {
            "architecture": "Model architecture (HRNet, ViTPose, etc.)",
            "dataset": "Training dataset",
            "hyperparameters": "Training config"
          },
          "effect": "Model enters pose training pipeline"
        },
        "DEPLOY_OBJECT_MODEL": {
          "description": "Deploy trained object model",
          "parameters": {
            "model": "Model checkpoint"
          },
          "effect": "Hot-swap object detector in production"
        },
        "DEPLOY_POSE_MODEL": {
          "description": "Deploy trained pose model",
          "parameters": {
            "model": "Model checkpoint"
          },
          "effect": "Hot-swap pose estimator in production"
        },
        "ROLLBACK_OBJECT": {
          "description": "Revert object detector to previous version",
          "parameters": {
            "version": "Version to restore (default: previous)"
          },
          "effect": "Previous object model restored"
        },
        "ROLLBACK_POSE": {
          "description": "Revert pose estimator to previous version",
          "parameters": {
            "version": "Version to restore (default: previous)"
          },
          "effect": "Previous pose model restored"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-1/conveyor-system.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-1",
      "synonyms": [
        "intake",
        "conveyor-system",
        "intake conveyor system",
        "conveyor",
        "system"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-1/sorting-stations": {
      "id": "street/lane-neverending/leela-manufacturing/floor-1/sorting-stations",
      "name": "Sorting Stations",
      "type": "workstation",
      "emoji": "📋",
      "tags": [
        "workstation",
        "intake",
        "categorization"
      ],
      "description": "Eight sorting stations along the conveyor lines, staffed by\nCategorizers with clipboards and thoughtful expressions.\n",
      "examine": "SORTING STATIONS\n\nEach station is a small booth with:\n• Conveyor access (items arrive automatically)\n• Classification terminal\n• Routing controls\n• Very large coffee mug\n\nTHE SORTING PROCESS:\n1. \"Is this actually a question?\" (You'd be surprised how often: no)\n2. \"What category?\" (Manufacturing, logistics, process, meta, other, ???)\n3. \"Priority level?\" (Urgent, normal, whenever, never, \"dear god why\")\n4. \"Route to which processing line?\"\n\nSTATION SPECIALTIES:\n• Stations 1-3: Questions (high volume)\n• Stations 4-5: Problems (requires experience)\n• Station 6: Data validation\n• Station 7: Edge cases (the weird stuff)\n• Station 8: The Confused Welcome Desk\n\nTHE CONFUSED WELCOME DESK (Station 8):\nFor items that defy categorization. The worker here has seen\neverything. Nothing surprises them anymore. Their coffee mug\nsays: \"I'VE SEEN WEIRDER.\"\n",
      "workers": {
        "station_1": {
          "name": "Quick-sort Quinn",
          "specialty": "speed"
        },
        "station_2": {
          "name": "Careful Carlos",
          "specialty": "accuracy"
        },
        "station_3": {
          "name": "Three-way Tina",
          "specialty": "multitasking"
        },
        "station_4": {
          "name": "Problem Pete",
          "specialty": "difficult items"
        },
        "station_5": {
          "name": "Weighty Wanda",
          "specialty": "heavy problems"
        },
        "station_6": {
          "name": "Data Dave",
          "specialty": "validation"
        },
        "station_7": {
          "name": "Edge-case Eddie",
          "specialty": "anomalies"
        },
        "station_8": {
          "name": "The Confused Welcome Desk",
          "specialty": "everything else"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-1/sorting-stations.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-1",
      "synonyms": [
        "sorting stations",
        "sorting",
        "stations",
        "sorting-stations"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/floor-1/intake-board": {
      "id": "street/lane-neverending/leela-manufacturing/floor-1/intake-board",
      "name": "Intake Status Board",
      "type": "display",
      "emoji": "📊",
      "tags": [
        "display",
        "statistics",
        "intake"
      ],
      "description": "A massive display board showing today's intake volume.\nNumbers update in real-time.\n",
      "examine": "INTAKE STATUS BOARD\n\n┌─────────────────────────────────────────────────────┐\n│  TODAY'S INTAKE                    [LIVE]          │\n│  ═══════════════                                   │\n│                                                    │\n│  Questions received:      1,247  ▲ +12%           │\n│  Problems logged:           892  ▼ -3%            │\n│  Data batches:            3.2 TB  ▲ +45%          │\n│  Confusion tankers:           2  (still unloading)│\n│  Paradoxes (quarantined):     1  ⚠️               │\n│                                                    │\n│  ────────────────────────────────────────────────  │\n│                                                    │\n│  THROUGHPUT                                        │\n│  Line A (Questions): ████████████░░ 78%           │\n│  Line B (Problems):  ██████░░░░░░░░ 42%  ⚠️ SLOW  │\n│  Line C (Data):      █████████████░ 89%           │\n│                                                    │\n│  ────────────────────────────────────────────────  │\n│                                                    │\n│  ALERTS                                            │\n│  • Line B backing up — Problem #447 stuck         │\n│  • Paradox in quarantine asking to speak to manager│\n│  • Confusion tanker 2 leaking slightly            │\n│                                                    │\n│  DAILY RECORD: 2,847 items (set 3 years ago)      │\n│  TODAY'S PROJECTED: 2,139 items                   │\n└─────────────────────────────────────────────────────┘\n",
      "methods": {
        "REFRESH": {
          "description": "Update the display",
          "effect": "Numbers flicker and update"
        },
        "HISTORY": {
          "description": "View historical data",
          "effect": "Charts show intake trends over time"
        },
        "DRILL_DOWN": {
          "description": "Get details on a specific metric",
          "parameters": {
            "metric": "Which stat to examine"
          },
          "effect": "Detailed breakdown appears"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/floor-1/intake-board.yml",
      "location": "street/lane-neverending/leela-manufacturing/floor-1",
      "synonyms": [
        "board",
        "intake",
        "status",
        "intake status board",
        "intake-board"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/leela-manufacturing/storage/deep-storage/deployment-console": {
      "id": "street/lane-neverending/leela-manufacturing/storage/deep-storage/deployment-console",
      "name": "Deployment Console",
      "type": "workstation",
      "emoji": "🖥️",
      "description": "A sophisticated console for deploying architectural prototypes.\nScreens show available designs, deployment locations, and\ncustomization options. Archie spends most of his time here.\n",
      "examine": "DEPLOYMENT CONSOLE — ARCHITECTURAL DEPLOYMENT SYSTEM\n\n┌────────────────────────────────────────────────────┐\n│         LEELA ARCHITECTURAL DEPLOYMENT             │\n│              \"From Blueprint to Reality\"            │\n├────────────────────────────────────────────────────┤\n│                                                    │\n│  PROTOTYPE CATALOG:                                │\n│  ┌──────────────────────────────────────────────┐ │\n│  │ [S] Shelters    [L] Lairs     [T] Towers     │ │\n│  │ [D] Domiciles   [W] Workspaces [V] Venues    │ │\n│  │ [X] Experimental [P] Planning/Layouts        │ │\n│  └──────────────────────────────────────────────┘ │\n│                                                    │\n│  DEPLOYMENT STATUS:                                │\n│  In queue: 3                                       │\n│  Deploying: 1 (Panic Room → Origin Plaza)         │\n│  Completed today: 7                                │\n│                                                    │\n│  CUSTOMIZATION OPTIONS:                            │\n│  • Size scaling (0.5x to 10x)                     │\n│  • Material override                               │\n│  • Feature add-ons                                 │\n│  • Themed variations                               │\n│                                                    │\n│  QUALITY ASSURANCE:                                │\n│  🟢 All deployments pass Leela Quality check       │\n│  🟢 Warranty active on all prototypes              │\n│  🟢 NOT ACME — guaranteed to work                  │\n│                                                    │\n└────────────────────────────────────────────────────┘\n\nRECENT DEPLOYMENTS:\n• Fallout Shelter → Underground bunker, Location: [Private]\n• Ivory Tower → Academy district, Client: \"Philosopher\"\n• Mad Scientist Lab → Volcano lair, Client: [Redacted]\n• Cozy Cottage → Lane Neverending W4, Client: Retiree\n",
      "screens": {
        "main": "Prototype catalog and selection",
        "left": "Deployment queue and status",
        "right": "Customization options",
        "overhead": "3D preview of selected design"
      },
      "sections": {
        "S": "Shelters — Fallout, Panic, Storm",
        "L": "Lairs — Mad Scientist, Villain HQ",
        "T": "Towers — Ivory, Wizard, Clock",
        "D": "Domiciles — Cozy, Grand, Modest",
        "W": "Workspaces — Factory, Office, Studio",
        "V": "Venues — Theater, Arena, Temple",
        "X": "Experimental — Non-Euclidean, Pocket Dimension",
        "P": "Planning — Grids, Radial, Topology"
      },
      "methods": {
        "BROWSE": {
          "description": "Browse prototype catalog",
          "parameters": [
            "section"
          ],
          "effect": "Display shows available prototypes in section"
        },
        "DEPLOY": {
          "description": "Deploy a prototype",
          "parameters": [
            "prototype",
            "location",
            "customization"
          ],
          "access": "Authorized personnel",
          "effect": "Deployment initiated...\nCloning prototype...\nApplying customizations...\nTransporting to location...\n\n*pop*\n\nDeployment complete.\nWarranty activated.\n"
        },
        "PREVIEW": {
          "description": "Preview a prototype in 3D",
          "parameters": [
            "prototype"
          ],
          "effect": "Holographic display shows the design rotating"
        },
        "CUSTOMIZE": {
          "description": "Configure deployment options",
          "parameters": [
            "prototype"
          ],
          "effect": "Opens customization menu with available options"
        }
      },
      "_source": "street/lane-neverending/leela-manufacturing/storage/deep-storage/deployment-console.yml",
      "location": "street/lane-neverending/leela-manufacturing/storage/deep-storage",
      "synonyms": [
        "console",
        "deployment console",
        "deployment-console",
        "deployment"
      ],
      "value": 0,
      "currency": "gold"
    },
    "street/lane-neverending/acme-surplus/basement/control-room/donnas-security-pass": {
      "name": "Donna's Security Pass",
      "type": "keycard",
      "emoji": "🪪🍄",
      "tags": [
        "acme-security",
        "keycard",
        "stealable",
        "donna-property"
      ],
      "description": "An ACME WHOLESALE security pass. Laminated. Holographic.\nPhoto of a mushroom-headed figure with a TREMENDOUS smile.\n\nNAME: DONNA TOADSTOOL\nTITLE: Security Consultant (34 counts)\nCLEARANCE: ALL OF IT\n\nThe barcode glows faintly. The magnetic strip hums.\nThis pass grants access to the PAINTED TUNNEL.\n",
      "examine": "The pass is surprisingly heavy. Industrial-grade lamination.\n\nFRONT:\n┌─────────────────────────────────────────┐\n│  ACME WHOLESALE SECURITY               │\n│  ═══════════════════════════════════   │\n│                                         │\n│  [PHOTO]     DONNA TOADSTOOL           │\n│   🍄         Security Consultant        │\n│              Employee Since: ???        │\n│                                         │\n│  CLEARANCE: ████ TREMENDOUS ████       │\n│                                         │\n│  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  [BARCODE]           │\n└─────────────────────────────────────────┘\n\nBACK:\n\"This pass grants access to ALL ACME facilities including\n but not limited to: warehouses, tunnels (painted and real),\n control rooms, break rooms, and the INFINITE AISLES.\n \n Loss of this pass should be reported to NOBODY because\n DONNA NEVER LOSES ANYTHING.\"\n \nThere's a small note taped to the back in Donna's handwriting:\n\"If found, return to ME. Not HR. ME. — D.T.\"\n",
      "location": "street/lane-neverending/acme-surplus/basement/control-room",
      "acquisition": {
        "difficulty": 6,
        "methods": {
          "distraction": {
            "description": "Get Donna focused on something else",
            "examples": [
              "Trigger an alarm in the warehouse (she'll check monitors)",
              "Ask about the black lever (she loves talking about it)",
              "Compliment her nickname system (she'll monologue)"
            ],
            "window": "2-3 turns while she's distracted"
          },
          "stealth": {
            "description": "Sleight of hand while she's monologuing",
            "difficulty": 7,
            "donna_awareness": "She sees EVERYTHING on monitors but not her own desk"
          },
          "asking": {
            "description": "Just... ask for it?",
            "success_chance": "0% unless you're VERY entertaining",
            "donna_response": "\"You want MY pass? MY pass? The pass that lets ME through\n the tunnel? The tunnel that I CONTROL?\n \n ...\n \n You've got GUTS, Gutsy Gary. I respect that.\n \n No.\"\n \n"
          },
          "trade": {
            "description": "Offer something she wants",
            "possibilities": [
              "Information about other intruders (she likes intel)",
              "A really good nickname for yourself",
              "Promise to come back and trigger MORE traps"
            ],
            "success_chance": "Variable. She's capricious."
          }
        }
      },
      "effects": {
        "in_inventory": [
          {
            "grants_tag": "acme-security"
          },
          {
            "tunnel_access": true
          },
          {
            "donna_awareness": "If Donna notices it's missing, she will be... DISPLEASED.\nBut she can't leave the control room to chase you.\nThat's not how this works.\n"
          }
        ],
        "when_used_at_tunnel": {
          "description": "The pass hums. The painted wall shimmers.\nYou step through like an ACME employee.\n\nSomewhere, Donna is SCREAMING into the PA system:\n\"THAT'S MY PASS! THAT'S MY PASS, THIEVING THEO!\n YOU CAN'T JUST—  YOU CAN'T—\n \n ...\n \n FINE. It still works. But I'LL REMEMBER THIS.\"\n \n"
        }
      },
      "donna_if_stolen": {
        "discovery": "\"Wait. Where's my... WHERE'S MY PASS?\n \n YOU. You took it. DIDN'T YOU.\n \n You came into MY control room. You DISTRACTED me.\n And you STOLE my PASS.\n \n ...\n \n I'm impressed, Pilfering Pete. TREMENDOUSLY impressed.\n \n But know this: every time you use that pass,\n I'll KNOW. I'll be WATCHING. And I'll be NARRATING.\n \n You want tunnel access? FINE. But you'll EARN it.\n Every. Single. Time.\"\n \n",
        "ongoing_harassment": true,
        "nickname_permanent": true
      },
      "value": 0,
      "weight": 0.1,
      "meta": {
        "purpose": "This is the \"legitimate\" way to get tunnel access if you don't have\nthe acme tag naturally. Sneak into the control room (hard), steal\nthe pass (medium), use the tunnel forever (with Donna's commentary).\n",
        "gameplay_loop": "1. Find way into basement (warehouse stairs, difficult)\n2. Reach control room (survive Donna's traps)\n3. Steal pass while Donna monologues (distraction + stealth)\n4. Use pass to access tunnel from either direction\n5. Enjoy permanent Donna harassment as consequence\n"
      },
      "id": "street/lane-neverending/acme-surplus/basement/control-room/donnas-security-pass",
      "_source": "street/lane-neverending/acme-surplus/basement/control-room/donnas-security-pass.yml",
      "synonyms": [
        "donna's",
        "pass",
        "donnas-security-pass",
        "donna's security pass",
        "security"
      ],
      "currency": "gold"
    },
    "pub/arcade/pinball-machine": {
      "name": "Pinball Machine",
      "type": "game",
      "portable": false,
      "description": "A magnificent pinball machine dominates one corner, its backglass\ndepicting a cosmic bar at the edge of the universe. The playfield\nis a maze of bumpers, ramps, and multiball madness.\n\nThe machine is called \"BAR KARMA\" — custom built, one of a kind.\nThe flippers are worn. The tilt sensor is generous. The high\nscores are legendary.\n",
      "examine": "The backglass art shows:\n- A bartender with ancient eyes\n- Patrons from across time and space\n- A swirling vortex of parallel timelines\n- The tagline: \"CHANGE YOUR FATE — 25¢\"\n\nPlayfield features:\n- \"Destiny Ramp\" — Shoot to choose your future\n- \"Karma Bumpers\" — Good deeds score more\n- \"Timeline Multiball\" — Three balls, three fates\n- \"Grue Pit\" — Lose your ball to darkness\n- \"Mother's Kitchen\" — Safe haven kickback\n",
      "high_scores": [
        {
          "name": "JMS",
          "score": 999999999,
          "note": "James. Obviously."
        },
        {
          "name": "GNA",
          "score": 847230100,
          "note": "Guinan. She doesn't talk about it."
        },
        {
          "name": "QRK",
          "score": 512100500,
          "note": "Quark. Claims it was rigged."
        },
        {
          "name": "MRN",
          "score": 1,
          "note": "Morn. He just watches."
        },
        {
          "name": "YOU",
          "score": "???"
        }
      ],
      "actions": {
        "PLAY": {
          "description": "Step up and play pinball",
          "cost": "1 gold per game (3 balls)",
          "mechanics": "DM narrates your game:\n- Flipper reflexes and ball saves\n- Ramp shots and combo multipliers\n- Multiball chaos\n- The dreaded TILT\n- Your final score and rank\n"
        },
        "NUDGE": {
          "description": "Carefully nudge the machine",
          "risk": "Too much and you TILT!",
          "reward": "Save a ball heading for the drain"
        },
        "TILT": {
          "description": "You tilted! Game over.",
          "effect": "Flippers go dead. Ball drains. Shame."
        },
        "SLAM-TILT": {
          "description": "Hit it too hard — machine shuts down",
          "consequence": "Bartender is NOT happy"
        },
        "READ-RULES": {
          "description": "Study the instruction card",
          "reveals": "TIMELINE MULTIBALL: Lock 3 balls in the Destiny Ramp\nKARMA JACKPOT: Spell K-A-R-M-A on the drop targets\nWIZARD MODE: Complete all missions, face your fate\n"
        }
      },
      "wizard_mode": {
        "name": "FACE YOUR KARMA",
        "requirement": "Complete all timeline missions",
        "description": "The machine goes dark. A single spotlight on the ball.\nYou face a choice: three shots, three outcomes.\n\nLEFT RAMP: Accept your fate\nCENTER RAMP: Change your past\nRIGHT RAMP: Transcend karma entirely\n\nNo one knows what happens if you make all three shots.\nThe machine has never revealed it.\n"
      },
      "lore": "The pinball machine was built by a mad inventor who visited\nthe bar seeking answers about his life. Instead of answers,\nhe found purpose: to build a machine that asks the questions.\n\nThey say if you achieve Wizard Mode and make all three shots,\nthe machine grants you a vision of your true destiny.\n\nNo one has ever done it. The bartender smiles when asked.\n",
      "inspiration": [
        "The Addams Family (1992) — Best-selling pinball ever",
        "Medieval Madness, Theatre of Magic, Twilight Zone",
        "Every dive bar's battered but beloved machine",
        "The Pinball Wizard (The Who)",
        "Bar Karma — the show that inspired this pub"
      ],
      "id": "pub/arcade/pinball-machine",
      "_source": "pub/arcade/pinball-machine.yml",
      "location": "pub/arcade",
      "synonyms": [
        "pinball-machine",
        "pinball machine",
        "pinball",
        "machine"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/arcade/fruit-machine": {
      "name": "Fruit Machine",
      "type": "game",
      "portable": false,
      "description": "A classic one-armed bandit stands by the bar, chrome gleaming,\ncherries and lemons and lucky 7s spinning on its reels. The\nlever is worn smooth from a million hopeful pulls.\n\nA small sign reads: \"FOR AMUSEMENT ONLY\"\n(The bartender winks when you read it.)\n",
      "examine": "The machine is a beautiful piece of gambling history:\n- Three spinning reels\n- Cherries, lemons, oranges, plums, bells, bars, and 7s\n- A satisfying mechanical CLUNK when you pull the arm\n- That dopamine-triggering jingle when you win\n\nSomeone has scratched \"NEVER GIVE UP\" into the chrome.\nSomeone else has scratched \"YES DO\" underneath.\n",
      "symbols": {
        "cherry": "🍒 — Small win",
        "lemon": "🍋 — Try again",
        "orange": "🍊 — Small win",
        "plum": "🍑 — Medium win",
        "bell": "🔔 — Good win",
        "bar": "📊 — Better win",
        "seven": "7️⃣ — JACKPOT!"
      },
      "actions": {
        "PULL": {
          "description": "Pull the lever and test your luck",
          "cost": "1 gold per pull",
          "mechanics": "DM spins the reels and describes the outcome:\n- Three cherries: 3 gold\n- Three bells: 10 gold\n- Three bars: 25 gold\n- Three 7s: JACKPOT (100 gold!)\n- Mixed fruit: Small consolation prize or nothing\n"
        },
        "KICK": {
          "description": "Kick the machine in frustration",
          "effect": "The machine rattles. A single gold coin falls out.\n\"That's your ONE,\" says the bartender. \"Don't push it.\"\n"
        },
        "EXAMINE-ODDS": {
          "description": "Try to figure out the odds",
          "reveals": "The odds are... unclear. Some say the machine is fair.\nSome say it reads your karma. Some say it's alive.\nThe bartender says nothing. The bartender always says nothing\nabout the fruit machine.\n"
        },
        "INSERT-LUCKY-CHARM": {
          "description": "Put a lucky item in the coin slot",
          "effect": "Results may vary. The machine has opinions."
        }
      },
      "jackpot": {
        "current": "??? gold",
        "note": "The jackpot counter has been stuck on \"???\" for years.\nNo one knows what it means. No one has ever hit it.\nOr maybe someone did, and they're not talking.\n"
      },
      "lore": "The fruit machine predates the bar. It was here when James\narrived 20,000 years ago. It will be here when he leaves.\n\nSome say it's a test. Some say it's a trap. Some say\nit's the only truly random thing in a deterministic universe.\n\nThe cherries know the truth. They're not telling.\n",
      "inspiration": [
        "Charles Fey's Liberty Bell (1895) — First slot machine",
        "The one-armed bandit in every Vegas casino",
        "British pub fruit machines",
        "The eternal hope of the next pull"
      ],
      "id": "pub/arcade/fruit-machine",
      "_source": "pub/arcade/fruit-machine.yml",
      "location": "pub/arcade",
      "synonyms": [
        "fruit",
        "fruit-machine",
        "machine",
        "fruit machine"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/arcade/pacman-cabinet": {
      "name": "Pac-Man Arcade Cabinet",
      "type": "game",
      "portable": false,
      "description": "A classic Pac-Man arcade cabinet stands in the corner, its screen\nglowing with that distinctive yellow maze. The joystick is worn\nsmooth from decades of frantic ghost-dodging.\n\nSomeone has taped a high score sheet to the side. The top score\nis simply listed as \"???\" with an impossible number.\n",
      "examine": "The cabinet hums with nostalgic 8-bit energy. The side art shows\nPac-Man being chased by Blinky, Pinky, Inky, and Clyde.\n\nA small plaque reads: \"Donated by Toru Iwatani, 1980\"\n\nCurrent high scores:\n1. ???     - 3,333,360 (perfect game)\n2. BRT     - 999,990\n3. MOM     - 847,230\n4. ACE     - 512,100\n5. YOU     - ???\n",
      "actions": {
        "PLAY": {
          "description": "Insert coin and play Pac-Man",
          "cost": "1 gold (or free if bartender likes you)",
          "mechanics": "DM narrates your game:\n- How many ghosts you eat\n- Close calls with Blinky\n- Whether you get the fruit\n- Your final score\n"
        },
        "WATCH": {
          "description": "Watch the attract mode or someone else play",
          "effect": "Learn patterns, socialize"
        },
        "CHECK-HIGH-SCORES": {
          "description": "Examine the high score board",
          "mystery": "Who is '???' with the perfect game?"
        },
        "CHALLENGE": {
          "description": "Challenge a patron to beat your score",
          "stakes": "Drinks, gold, bragging rights"
        }
      },
      "lore": "They say the perfect game was achieved by a ghost.\nNot Blinky, Pinky, Inky, or Clyde — a real ghost.\nAn adventurer who died in the maze but couldn't let go.\n\nOn quiet nights, you can hear the cabinet playing itself.\nWakka wakka wakka...\n",
      "inspiration": [
        "Pac-Man (Namco, 1980) — Toru Iwatani",
        "The perfect game: 3,333,360 points",
        "Every pizza parlor and arcade of the 80s"
      ],
      "id": "pub/arcade/pacman-cabinet",
      "_source": "pub/arcade/pacman-cabinet.yml",
      "location": "pub/arcade",
      "synonyms": [
        "arcade",
        "pacman-cabinet",
        "pac-man",
        "cabinet",
        "pac-man arcade cabinet"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/arcade/pong-cabinet": {
      "name": "Pong Arcade Cabinet",
      "type": "game",
      "portable": false,
      "description": "The original. The ancestor. A Pong cabinet from 1972, still working\nafter all these years. Two paddles, one ball, infinite possibilities.\n\nThe screen flickers with that beautiful monochrome simplicity.\n\"AVOID MISSING BALL FOR HIGH SCORE\"\n",
      "examine": "The cabinet is battered but beloved. Cigarette burns from an era\nwhen you could smoke in bars. Coffee rings. A generations of\nquarter slots worn smooth.\n\nA brass plaque reads: \"First arcade game installed at Andy Capp's\nTavern, Sunnyvale, CA, 1972. This unit: serial #0042.\"\n\nThe original instructions are still legible:\n\"DEPOSIT QUARTER. BALL WILL SERVE AUTOMATICALLY.\n AVOID MISSING BALL FOR HIGH SCORE.\"\n",
      "actions": {
        "PLAY": {
          "description": "Challenge someone to Pong",
          "cost": "1 gold for two players",
          "mechanics": "Two-player only! Find an opponent:\n- Challenge a patron\n- Challenge the bartender (warning: Guinan-level skill)\n- Play against the ghost in the machine\n"
        },
        "PRACTICE": {
          "description": "Play against the wall (solo mode)",
          "effect": "Build skill, meditative"
        },
        "EXAMINE-HISTORY": {
          "description": "Read about video game history",
          "reveals": "Atari. Nolan Bushnell. Allan Alcorn.\nThe birth of an industry in a Sunnyvale bar.\n"
        }
      },
      "two_player": {
        "required": true,
        "note": "Pong is a conversation. A negotiation.\nThe ball is the question. The paddles are the answers.\nEvery game tells a story.\n"
      },
      "lore": "The bartender claims this is THE original prototype.\nThe one that was so popular at Andy Capp's Tavern that\nit broke from too many quarters.\n\nSome nights, when only one player is at the cabinet,\nthe other paddle moves on its own.\n",
      "inspiration": [
        "Pong (Atari, 1972) — Allan Alcorn, Nolan Bushnell",
        "First commercially successful video game",
        "Andy Capp's Tavern, Sunnyvale — where it all began",
        "The quarter that launched an industry"
      ],
      "id": "pub/arcade/pong-cabinet",
      "_source": "pub/arcade/pong-cabinet.yml",
      "location": "pub/arcade",
      "synonyms": [
        "pong arcade cabinet",
        "arcade",
        "pong-cabinet",
        "cabinet",
        "pong"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/basement/relic-shelf": {
      "name": "Dusty Relic Shelf",
      "id": "pub/basement/relic-shelf",
      "type": "special-container",
      "emoji": "🏺",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-d/PROTOTYPES.yml",
        "id": "paradox-shelf",
        "brand": "LEELA",
        "quality": "robust-first",
        "special": true
      },
      "inherits": {
        "container": true,
        "paradox_safe": true,
        "temporal_stable": true,
        "reality_anchored": true
      },
      "description": "A small shelf bearing the Leela Quality seal — specifically the \n\"Special Containers Division\" variant with the infinity symbol.\n\nIt holds objects that don't belong in a pub basement:\n- A brass compass that points somewhere other than north\n- A jar of sand from a beach that doesn't exist\n- A candle that burned down but isn't getting shorter\n\nThe shelf keeps them stable. Without it, they might... drift.\nLeela's paradox-safe shelving prevents temporal accidents.\n",
      "examine": "LEELA RELIC SHELF — PARADOX-SAFE EDITION\n\nSpecial containment for impossible objects.\n\n┌─────────────────────────────────────────────────────────────┐\n│  CONTENTS:                          STABILITY:              │\n│  ├── Wrong Compass ................ ✓ Anchored             │\n│  ├── Memory Sand .................. ✓ Contained            │\n│  ├── Eternal Candle ............... ✓ Temporally Stable    │\n│  └── Forgotten Photograph ......... ✓ Reality-Locked       │\n│                                                             │\n│  WARNING: Do not remove items without understanding them.   │\n│  The shelf stabilizes them. Reality may not.                │\n│                                                             │\n│  LEELA SPECIAL CONTAINERS — \"We contain the impossible.\"    │\n└─────────────────────────────────────────────────────────────┘\n",
      "contents": {
        "relics": [
          {
            "id": "wrong-compass",
            "name": "The Wrong Compass",
            "description": "Points toward... something. Not north. Something else.",
            "points_to": "Home, but not yours"
          },
          {
            "id": "memory-sand",
            "name": "Memory Sand",
            "description": "Sand from a beach that doesn't exist",
            "property": "Feels like a memory of warmth",
            "origin": "A summer that never happened, but should have"
          },
          {
            "id": "eternal-candle",
            "name": "Eternal Candle",
            "description": "Burned down but isn't getting shorter",
            "property": "Always lit. Always has been. How did you not notice?"
          },
          {
            "id": "forgotten-photograph",
            "name": "Forgotten Photograph",
            "description": "A photo of people you almost recognize",
            "property": "The more you look, the less you remember"
          }
        ]
      },
      "commands": {
        "EXAMINE_COMPASS": {
          "description": "Study the strange compass",
          "effect": "It points toward... something. Not north. Something else.",
          "warning": "Don't follow it unless you're sure."
        },
        "TAKE_SAND": {
          "description": "Take a pinch of the impossible sand",
          "effect": "It feels like a memory of warmth. Keep it safe.",
          "warning": "The shelf kept it stable. Now it's your responsibility."
        },
        "LIGHT_CANDLE": {
          "description": "Try to light the eternal candle",
          "effect": "It was already lit. It's always been lit."
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "division": "Special Containers",
        "motto": "We contain the impossible.",
        "paradox_rating": "Class III — Stable Anomalies",
        "not_acme": true,
        "warranty": "If reality breaks, that's not on us."
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "SPECIAL-CONTAINER",
        "PARADOX-SAFE",
        "PROTOTYPE-INSTANCE",
        "IMPOSSIBLE-OBJECTS"
      ],
      "_source": "pub/basement/relic-shelf.yml",
      "location": "pub/basement",
      "synonyms": [
        "relic-shelf",
        "shelf",
        "relic",
        "dusty",
        "dusty relic shelf"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/basement/wine-rack": {
      "name": "Cobwebbed Wine Rack",
      "id": "pub/basement/wine-rack",
      "type": "display-container",
      "emoji": "🍷",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-e/PROTOTYPES.yml",
        "id": "wine-rack",
        "brand": "LEELA",
        "quality": "robust-first"
      },
      "inherits": {
        "container": true,
        "capacity": 24,
        "display_mode": true
      },
      "description": "A diagonal wooden rack bearing the Leela Quality seal, holding \nbottles of various vintages. Thick cobwebs suggest some haven't \nbeen touched in years.\n\nOne bottle glows faintly. That's probably fine.\n\nBuilt to last. The rack itself predates the pub.\n",
      "examine": "LEELA WINE RACK — CELLAR EDITION\n\nSolid oak construction, diagonal slots for proper cork moisture.\nThe Leela seal is carved into the top crossbeam.\n\nCurrent inventory:\n├── Dusty Red 1847 ........... covered in cobwebs\n├── Questionable White ....... label faded\n├── Glowing Bottle ........... warm, unknown language\n├── Cooking Wine ............. \"good enough\"\n└── [20 empty slots] ......... awaiting restocking\n",
      "contents": {
        "bottles": [
          {
            "id": "dusty-red-1847",
            "name": "Dusty Red 1847",
            "description": "A very old red wine. The cork crumbles when touched.",
            "age": 178,
            "quality": "either priceless or vinegar"
          },
          {
            "id": "questionable-white",
            "name": "Questionable White",
            "description": "The label has faded completely. Could be anything.",
            "quality": "questionable"
          },
          {
            "id": "glowing-bottle",
            "name": "The Glowing Bottle",
            "description": "Warm to the touch. Label in unknown script.",
            "magical": true,
            "effect": "???",
            "warning": "Probably cursed. Definitely interesting."
          },
          {
            "id": "cooking-wine",
            "name": "Cooking Wine",
            "description": "For cooking. Also drinking. No judgment.",
            "quality": "adequate"
          }
        ]
      },
      "commands": {
        "SELECT": {
          "description": "Choose a bottle of wine",
          "effect": "Pick any bottle from the rack"
        },
        "EXAMINE_GLOWING": {
          "description": "Look closer at the glowing bottle",
          "effect": "It's warm to the touch. The label is in a language you don't recognize."
        },
        "DUST": {
          "description": "Wipe away the cobwebs",
          "effect": "Reveal more labels. Disturb the spiders."
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "construction": "Built before your grandfather was born. Still works.",
        "not_acme": true
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "DISPLAY-CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "WINE-STORAGE"
      ],
      "_source": "pub/basement/wine-rack.yml",
      "location": "pub/basement",
      "synonyms": [
        "wine",
        "cobwebbed wine rack",
        "rack",
        "wine-rack",
        "cobwebbed"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/basement/treasure-chest": {
      "name": "Landlord's Lockbox",
      "id": "pub/basement/treasure-chest",
      "type": "lockable-container",
      "emoji": "💰",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-a/PROTOTYPES.yml",
        "id": "treasure-chest",
        "brand": "LEELA",
        "quality": "robust-first"
      },
      "inherits": {
        "container": true,
        "capacity": 30,
        "lockable": true,
        "durability": 80
      },
      "description": "A heavy iron-banded chest with the Leela Quality seal embossed \non the lock plate. This is where the landlord keeps the \ntakings... and a few other valuables.\n\nUnlike ACME chests, this one:\n- Won't spring open dramatically\n- Won't be trapped with cartoon explosives\n- Won't have a false bottom that's also trapped\n\nIt just locks. Reliably. Every time.\n",
      "examine": "LEELA TREASURE CHEST — SECURE STORAGE\n\nIron-banded oak, tested to resist:\n✓ Lock picking (Grade 7 lock)\n✓ Brute force (reinforced hinges)\n✓ Fire (iron banding)\n✓ Flood (sealed seams)\n✓ Cartoon logic (NOT ACME)\n\nStatus: LOCKED\nKey held by: The Landlord\n",
      "locked": true,
      "lock_difficulty": 7,
      "contents": {
        "description": "Unknown — chest is locked",
        "hints": [
          "Coins clink when you move it",
          "Something paper rustles",
          "Heavier than it looks"
        ]
      },
      "commands": {
        "OPEN": {
          "description": "Open the chest",
          "requires": "key OR successful_pick"
        },
        "PICK": {
          "description": "Attempt to pick the lock",
          "difficulty": 7,
          "failure": "The lock holds. Leela Quality."
        },
        "EXAMINE_LOCK": {
          "description": "Study the locking mechanism",
          "effect": "Grade 7 Leela lock. Dependable. You'll need skill or a key."
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "security_rating": "Commercial Grade",
        "not_acme": true,
        "warranty": "Lifetime guarantee on lock mechanism"
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "LOCKABLE-CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "SECURE-STORAGE"
      ],
      "_source": "pub/basement/treasure-chest.yml",
      "location": "pub/basement",
      "synonyms": [
        "treasure-chest",
        "landlord's lockbox",
        "landlord's",
        "lockbox"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/basement/pickle-shelf": {
      "name": "Pickle Shelf",
      "id": "pub/basement/pickle-shelf",
      "type": "display-container",
      "emoji": "🥒",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-e/PROTOTYPES.yml",
        "id": "shelf-unit",
        "brand": "LEELA",
        "quality": "robust-first"
      },
      "inherits": {
        "container": true,
        "capacity": 30,
        "display_mode": true,
        "sturdy": true
      },
      "description": "A sturdy wooden shelf bearing rows of glass pickle jars.\nEach jar sealed with wax, labeled in careful handwriting.\nThe Leela Quality seal is burned into the shelf's edge.\n\nThe pub has been pickling things for generations.\nSome of these jars are older than the current building.\n",
      "examine": "LEELA PICKLE SHELF — PRESERVATION STATION\n\nGlass jars in neat rows, each sealed and labeled:\n\n├── Cucumber Pickles (classic) ......... 12 jars\n├── Pickled Onions (tangy) ............. 6 jars\n├── Mystery Pickles (unlabeled) ........ 3 jars\n├── Pickled Eggs (unsettling) .......... 4 jars\n└── \"DO NOT OPEN\" (ominous) ............ 1 jar\n\nThe shelf itself has held this weight for 80 years.\nNot a wobble. Not a creak. Leela Quality.\n",
      "contents": {
        "jars": [
          {
            "id": "cucumber-pickles",
            "name": "Cucumber Pickles",
            "count": 12,
            "quality": "perfectly crunchy"
          },
          {
            "id": "pickled-onions",
            "name": "Pickled Onions",
            "count": 6,
            "quality": "tangy, breath-destroying"
          },
          {
            "id": "mystery-pickles",
            "name": "Mystery Pickles",
            "count": 3,
            "quality": "unknown origin, definitely edible, probably"
          },
          {
            "id": "pickled-eggs",
            "name": "Pickled Eggs",
            "count": 4,
            "quality": "traditional, unsettling, delicious"
          },
          {
            "id": "do-not-open",
            "name": "DO NOT OPEN",
            "count": 1,
            "quality": "???",
            "warning": "Seriously. Don't."
          }
        ]
      },
      "commands": {
        "TAKE_JAR": {
          "description": "Select a jar from the shelf",
          "effect": "Choose any jar. Some choices are better than others."
        },
        "READ_LABELS": {
          "description": "Study the handwritten labels",
          "effect": "Learn the history of each batch. Some dates go back decades."
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "load_bearing": "Exceeds requirements by 300%",
        "not_acme": true
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "DISPLAY-CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "PRESERVATION"
      ],
      "_source": "pub/basement/pickle-shelf.yml",
      "location": "pub/basement",
      "synonyms": [
        "pickle",
        "pickle-shelf",
        "shelf",
        "pickle shelf"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/basement/ale-barrel": {
      "name": "Barrel of Gezelligheid Grotto Ale",
      "id": "pub/basement/ale-barrel",
      "type": "container",
      "emoji": "🍺",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-a/PROTOTYPES.yml",
        "id": "ale-barrel",
        "brand": "LEELA",
        "quality": "robust-first"
      },
      "inherits": {
        "container": true,
        "capacity": 40,
        "rollable": true,
        "liquid_safe": true,
        "durability": 60
      },
      "description": "A large oak barrel with a brass tap, bearing the Leela Quality seal.\nA chalked sign reads \"HELP YOURSELF - HONOR SYSTEM\" with a coin jar nearby.\n\nUnlike ACME products, this barrel won't explode, leak, or \nspontaneously transform into something else. It just works.\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  🍺 LEELA ALE BARREL                                        │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ┌───────────────────┐                                    │\n│    │ ╭─────────────╮   │  LEELA QUALITY SEAL                │\n│    │ │  RUSTY      │   │  ══════════════════                │\n│    │ │  LANTERN    │   │  ✓ Tested                          │\n│    │ │  ALE        │   │  ✓ Dependable                      │\n│    │ ╰─────────────╯   │  ✓ Robust-First                    │\n│    │      ◉ TAP        │  ✓ NOT ACME                        │\n│    └───────────────────┘                                    │\n│                                                             │\n│    Capacity: 40 units   Remaining: 27 units                 │\n│    Replenishes: Weekly  Honor jar: 3 coins                  │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "contents": {
        "type": "ale",
        "variety": "Gezelligheid Grotto House Ale",
        "quality": "excellent",
        "brewing_notes": "Brewed on-site using traditional Dutch methods.\nHoppy, malty, slightly sweet finish.\nABV: 5.2%\n"
      },
      "dispenser": {
        "item": "ale-mug",
        "capacity": 40,
        "remaining": 27,
        "replenish": "weekly",
        "honor_jar": 3
      },
      "commands": {
        "TAP": {
          "description": "Fill a mug from the barrel",
          "effect": "Get a mug of ale. Gain 'Slightly Buzzed' buff."
        },
        "INSPECT": {
          "description": "Check how much ale remains",
          "effect": "About 27 units. Good stuff in here."
        },
        "ROLL": {
          "description": "Roll the barrel",
          "inherited_from": "prototype",
          "sound": "*rumble rumble rumble*"
        }
      },
      "buffs": {
        "SLIGHTLY_BUZZED": {
          "duration": "30 minutes",
          "effects": [
            "+10% social confidence",
            "-5% fine motor skills",
            "+15% appreciation of pub atmosphere"
          ]
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "warranty": "If it breaks, we fix it. No questions.",
        "not_acme": true,
        "certified": true
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "PUB-SUPPLIES"
      ],
      "_source": "pub/basement/ale-barrel.yml",
      "location": "pub/basement",
      "synonyms": [
        "lantern",
        "ale",
        "rusty",
        "barrel",
        "barrel of gezelligheid grotto ale",
        "ale-barrel"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/prancing-pixie-pumps": {
      "name": "Prancing Pixie Pumps of Passing",
      "aliases": [
        "tap shoes",
        "dancing shoes",
        "skipping slippers",
        "elision shoes"
      ],
      "type": "wearable",
      "slot": "feet",
      "portable": true,
      "rarity": "uncommon",
      "state": {
        "left_dial": 4,
        "right_dial": 3,
        "charges": 3
      },
      "description": "Delicate shoes with silver taps and \"...\" embroidered in moonthread.\nWhen you dance through repetitive or boring terrain,\nthey skip and hop you to the interesting part.\n\nA note tucked inside reads:\n\n> \"We pranced for three days through featureless desert.\"\n> \"With these shoes: '... ♪ ♫ ...'\"\n> \"We arrived at the oasis, barely winded.\"\n",
      "examine": "The taps are worn bright from all the skipping they've done.\nThe ribbons are made of condensed narrative.\nThey smell faintly of starlight and impatience.\n\nOn each shoe: a small silver dial.\n\nLEFT SHOE DIAL — LEAP DISTANCE:\n┌─────────────────────────────────────┐\n│  1   2   3   4   5   ∞             │\n│   ◯───◯───◯───●───◯───◯            │\n│  hop skip jump LEAP  GRAND JETÉ    │\n└─────────────────────────────────────┘\n1: One room. A gentle hop.\n2: Two rooms. A skip.\n3: Three rooms. A proper jump.\n4: Many rooms. A LEAP. (current)\n5: Across zones. A bound.\n∞: Anywhere. GRAND JETÉ.\n\nRIGHT SHOE DIAL — LANDING VERBOSITY:\n┌─────────────────────────────────────┐\n│  ·  ··  ···  ····  ·····           │\n│   ◯───◯───●───◯───◯                │\n│ silent terse normal vivid EPIC     │\n└─────────────────────────────────────┘\n·:     \"You arrive.\"\n··:    \"You arrive at the kitchen.\"\n···:   \"You land gracefully in the kitchen. Sunlight streams through the window.\" (current)\n····:  Full paragraph describing arrival, surroundings, atmosphere.\n·····: EPIC landing. Purple prose. Every detail. The DM is INSPIRED.\n\nInside the tongue, in flowing elven script:\nAUTOMATIC ELISION:\n- Featureless terrain: skipped\n- Repetitive encounters: hop-hop-summarized  \n- Long travel: montaged with dance numbers\n- Waiting in lines: shuffle-ball-change'd away\n\nMANUAL OVERRIDE:\n- Tap tap tap: force elision\n- Stomp: exit elision early\n- Moonwalk: re-experience (why would you?)\n- Turn left dial: adjust distance\n- Turn right dial: adjust verbosity\n",
      "buffs": {
        "NARRATIVE_SKIP": {
          "duration": "while worn",
          "effect": "Boring travel becomes a dance:\n\nInstead of:\n  \"You walk north. You walk north. You walk north.\n   A rock. You walk north. Another rock. You walk...\"\n   \nYou experience:\n  \"♪ ... [3 days of uneventful prancing] ... ♫\"\n  \"You pirouette into your destination.\"\n  \n",
          "side_effect": "Occasionally skips things that were actually important.\n\n\"Wait, what happened to the—\"\n\"We... danced past it.\"\n\"THE TREASURE?\"\n\"In hindsight, maybe should have stopped to look.\"\n"
        },
        "TIME_COMPRESSION": {
          "duration": "while worn",
          "effect": "Long waits become dance numbers:\n\n\"The ferry arrives in 6 hours.\"\n*tap tap tap*\n\"The ferry has arrived.\"\n\n(6 hours still passed. You just... danced through them.)\n"
        },
        "SUMMARY_GENERATION": {
          "duration": "while worn",
          "effect": "Long texts become short texts:\n\n\"Here is my 47-page proposal—\"\n*tap tap*\n\"TL;DR: You want money. Risks exist. Upside big.\"\n\nThe shoes extract essence. Discard filler.\nEverything is a dance: beginning, middle, end.\nWhy walk through all the steps?\n"
        }
      },
      "advertisements": [
        {
          "trigger": "boring",
          "score": 0.95,
          "response": "*shoes shimmer* I can fix that."
        },
        {
          "trigger": "how long",
          "score": 0.85,
          "response": "With these shoes? However long is interesting."
        },
        {
          "trigger": "skip",
          "score": 0.9,
          "response": "Tap your toes. I'll do the rest."
        },
        {
          "trigger": "travel",
          "score": 0.8,
          "response": "*shoes anticipate*\n\nCurrent journey has ~40% interesting content.\nWould you like to elide the 60%?\n"
        },
        {
          "trigger": "tldr",
          "score": 0.95,
          "response": "*ribbons flutter* I can condense that."
        },
        {
          "trigger": "summarize",
          "score": 0.9,
          "response": "How short? Tweet, paragraph, or haiku?"
        },
        {
          "trigger": "too long",
          "score": 0.85,
          "response": "Let me dance through it for you. One moment..."
        },
        {
          "trigger": "go to",
          "score": 0.8,
          "response": "*shoes perk up* Walk? Or LEAP?"
        },
        {
          "trigger": "far",
          "score": 0.75,
          "response": "Distance is just unelided space. Shall we skip it?"
        },
        {
          "trigger": "teleport",
          "score": 0.9,
          "response": "I prefer 'grand jeté' but yes. Where to?"
        }
      ],
      "methods": {
        "WEAR": {
          "description": "Put on the prancing shoes",
          "effect": "They fit perfectly. (Elven craftsmanship.)\n\nYour feet feel lighter. Your toes want to tap.\nThe shoes are already evaluating the interestingness\nof your surroundings.\n\nCurrent settings:\n  Left dial (distance): 4 — LEAP\n  Right dial (verbosity): 3 — normal\n\nCurrent location: [INTERESTING]\n(Shoes are patient — nothing to skip yet.)\n"
        },
        "SET_DISTANCE": {
          "description": "Turn the left dial to adjust leap distance",
          "parameters": [
            {
              "level": "1-5 or ∞ (hop/skip/jump/leap/bound/grand jeté)"
            }
          ],
          "effect": "*click*\n\nLeft dial now set to: [level]\n\nNext leap will cover: [corresponding distance]\n"
        },
        "SET_VERBOSITY": {
          "description": "Turn the right dial to adjust landing description",
          "parameters": [
            {
              "level": "1-5 (silent/terse/normal/vivid/epic)"
            }
          ],
          "effect": "*click*\n\nRight dial now set to: [level]\n\n1 - SILENT:  \"You arrive.\"\n2 - TERSE:   \"You arrive at [place].\"\n3 - NORMAL:  One sentence with a detail.\n4 - VIVID:   Full paragraph, atmosphere, sensory.\n5 - EPIC:    DM goes off. Purple prose. Every detail.\n             The room becomes REAL.\n"
        },
        "SKIP": {
          "description": "Hop and skip to the next interesting thing",
          "parameters": [
            {
              "filter": "What counts as 'interesting'? (default: combat, treasure, plot)"
            }
          ],
          "effect": "*tap tap tap*\n\n♪ ... ♫\n\n[N hours/days/moments danced through]\n\n♫ ... ♪\n\nYou land gracefully at: [next interesting thing]\n"
        },
        "REWIND": {
          "description": "Review what was skipped",
          "parameters": [
            {
              "range": "Which elision to review"
            }
          ],
          "returns": "During the skipped period:\n- Nothing happened (47%)\n- Scenery (30%)\n- Minor wildlife (15%)\n- That thing you missed (8%)  # <═══ hm\n\nWant to moonwalk back for \"that thing\"?\n"
        },
        "TLDR": {
          "description": "Generate a summary of anything",
          "parameters": [
            {
              "target": "What to summarize (text, conversation, event, book, quest)"
            },
            {
              "length": "How condensed? (tweet / paragraph / page)"
            }
          ],
          "effect": "*shoes tap thoughtfully*\n\nThe ribbons unspool slightly, absorbing the content...\nThen re-weave into condensed narrative.\n\nReturns: The essential points. The good parts.\nEverything else: elided.\n",
          "examples": [
            {
              "input": "War and Peace",
              "output": "Russia. War. Peace. Everyone's related."
            },
            {
              "input": "This 3-hour meeting",
              "output": "Decision: none. Action items: 2. Could've been email: yes."
            },
            {
              "input": "The hero's 10-page backstory",
              "output": "Dead parents. Prophecy. Sword. Let's go."
            }
          ]
        },
        "HIGHLIGHT": {
          "description": "Extract only the interesting moments from a period",
          "parameters": [
            {
              "period": "What timeframe to scan"
            }
          ],
          "returns": "Interesting moments, separated by \"...\"\n\n\"You entered the dungeon...\"\n\"...found the secret door...\"\n\"...defeated the boss...\"\n\"...got the treasure.\"\n\nTotal time: 6 hours.\nHighlights: 4 minutes.\nEfficiency: 98.9%\n"
        },
        "LEAP": {
          "description": "Hop from room to room to room in one bound",
          "parameters": [
            {
              "to": "Where you want to end up"
            },
            {
              "stops": "Optional waypoints (or 'direct')"
            }
          ],
          "effect": "*the shoes begin to glow*\n*you feel the rhythm building*\n\nLEAP!\n\nKitchen → ... → Hallway → ... → Stairs → ... → \nAttic → ... → Roof → ... → DESTINATION\n\nAll in one graceful, elided bound.\n\nEach room you pass through:\n- Noted but not narrated\n- Obstacles auto-avoided  \n- NPCs see a blur and a sparkle\n- Doors open just in time\n\nYou land exactly where you intended.\n(Or close enough. The shoes have style.)\n",
          "performance": "WITHOUT LEAP:\n  \"Go north.\" [response]\n  \"Go east.\" [response]  \n  \"Climb stairs.\" [response]\n  \"Go north.\" [response]\n  \"Enter room.\" [response]\n  = 5 LLM iterations\n  \nWITH LEAP:\n  \"LEAP to the treasure room\"\n  Kitchen... Hallway... Stairs... Landing... Door...\n  *you arrive*\n  = 1 LLM iteration\n  \nEFFICIENCY: 500%\n"
        },
        "GRAND_JETE": {
          "description": "Teleport across vast distances in a single leap",
          "parameters": [
            {
              "to": "Anywhere you can name or describe"
            },
            {
              "automatic_generation": "Gleefully supported!"
            }
          ],
          "effect": "*the shoes BLAZE with moonlight*\n*reality stretches like taffy*\n\nGRAND JETÉ!\n\nYou don't walk the distance.\nYou don't even skip it.\nYou DANCE ACROSS THE NARRATIVE.\n\n\"From the kitchen... to the dragon's lair... in one leap.\"\n\nEverything between: elided.\nTravel time: one pirouette.\nActual distance: irrelevant.\n",
          "limits": "- Must have visited OR heard of destination\n- Cannot GRAND_JETE into combat (rude)\n- Cannot GRAND_JETE while being observed by enemy\n- The shoes need a running start (3 taps minimum)\n",
          "cost": "One charge (shoes recharge at dawn, while you sleep)"
        }
      },
      "lore": "These shoes were made by an elven choreographer \nwho hated boring travel montages.\n\n\"Nobody wants to trudge,\" she said, pirouetting.\n\"They want to ARRIVE. Gracefully. With flair.\"\n\nShe enchanted her dancing shoes to skip the dull bits.\nThen she choreographed the shortest ballet in history:\n\"Overture. ♪...♫ Finale.\"\n\nCritics called it \"avant-garde.\" She called it \"efficient.\"\n",
      "legendary_performance": "THE 99 BOTTLES SPEED OF LIGHT\n\nRoom 5. The party. The song.\n\n\"99 bottles of beer on the wall...\"\n\nWithout shoes: 99 verses. 99 turns. Hours of play.\n\nWith shoes:\n  \"99 bottles of beer on the wall—\"\n  *tap tap tap*\n  \"... [97 verses elided, highlights preserved] ...\"\n  \"1 bottle of beer on the wall, 1 bottle of beer...\"\n  \"No more bottles of beer on the wall.\"\n  \n792 simulated turns. 1 LLM call.\n\nThe shoes didn't skip the fun parts:\n- Pee-wee's hee-hee at bottle 84\n- Captain Ashford's Belter accent at bottle 47\n- Rocky absorbing 47 beers with no effect\n- Shuffle's card tricks between verses\n- The Confetti Crawler's celebratory debris\n\nJust the repetition. The counting down.\nThe parts where nothing NEW happened.\n\nThat's elision done right.\n",
      "previous_owner": "Found in a government evidence locker, alongside \na heavily redacted document collection.\n\nThe shoes were worn by someone who elided... a lot.\nNames. Dates. Flight logs. Client lists.\n\n████████ didn't ████ himself.\n\nThe shoes know what was skipped.\nThey're not telling.\n",
      "curse": "MODERATE CURSE: Dance Fever\n\nAfter extended use, boring threshold increases.\n\nFirst you skip long journeys.\nThen you hop through short walks.\nThen you tap through conversations.\nThen you pirouette past meals.\nThen you chassé through sleep.\n\nEventually, you dance to the end of your adventure\nwithout remembering any of it.\n\nRemove the shoes occasionally. Rest your feet.\n",
      "warnings": [
        "Do not wear during character development scenes",
        "May skip emotional growth (considered 'slow' by default)",
        "The shoes' definition of 'interesting' favors spectacle over depth",
        "You cannot stop dancing until something interesting happens"
      ],
      "k_lines": {
        "activates": [
          "ELISION",
          "NARRATIVE-COMPRESSION",
          "PACING",
          "TRAVEL",
          "TLDR",
          "SUMMARIZATION",
          "HIGHLIGHTS",
          "TELEPORTATION",
          "ROOM-HOPPING",
          "SPEED-OF-LIGHT",
          "VERBOSITY-CONTROL",
          "OUTPUT-LENGTH"
        ]
      },
      "id": "pub/attic/prancing-pixie-pumps",
      "_source": "pub/attic/prancing-pixie-pumps.yml",
      "location": "pub/attic",
      "synonyms": [
        "pixie",
        "pumps",
        "prancing",
        "prancing-pixie-pumps",
        "prancing pixie pumps of passing",
        "passing"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/context-window-cloak": {
      "name": "Context Window Cloak",
      "type": "wearable",
      "slot": "back",
      "portable": true,
      "rarity": "rare",
      "description": "A flowing cloak woven from compressed memories.\nThe fabric shimmers with faint text — conversations,\nobservations, things you've seen and done.\n\nWhen worn, you can remember more of your current adventure.\nThe context window of your mind... expands.\n\nA tag inside reads: \"CAPACITY: +50% CONTEXT\"\n",
      "examine": "The cloak is made of memory-thread, spun from:\n- Conversations that mattered\n- Details that seemed minor but weren't\n- Names you almost forgot\n- That thing someone said three rooms ago\n\nThe fabric is heavy with information but light to wear.\nIt drapes like thoughtfulness itself.\n\nMaintenance instructions:\n- Shake out irrelevant memories weekly\n- Dry clean only (soap dissolves context)\n- Do not machine wash (creates false memories)\n",
      "buffs": {
        "EXPANDED_CONTEXT": {
          "duration": "while worn",
          "effect": "+50% working memory capacity\n\nYou remember:\n- All NPCs you've met (and what they said)\n- All items you've seen (and where)\n- All conversations (the important parts)\n- All promises you made (oh no)\n",
          "side_effect": "Occasionally remember things TOO well.\n\"Actually, you said 'probably' not 'definitely'...\"\nThis is correct. It's also annoying.\n"
        },
        "SUMMARY_ON_DEMAND": {
          "duration": "while worn",
          "effect": "At any moment, the cloak can whisper a summary:\n\n\"So far: You entered the pub, met Rocky (still sitting),\nacquired the probability goggles, and promised Donna\nyou'd water her plants. That was 3 rooms ago.\nThe plants are probably fine.\"\n"
        }
      },
      "advertisements": [
        {
          "trigger": "forgot",
          "score": 0.95,
          "response": "*cloak rustles*\n\nI remember. Want me to remind you?\n"
        },
        {
          "trigger": "what happened",
          "score": 0.9,
          "response": "*cloak summarizes recent events in concise YAML Jazz*"
        },
        {
          "trigger": "who said",
          "score": 0.85,
          "response": "*searches fabric* Found it. They said: [exact quote]"
        },
        {
          "trigger": "remember",
          "score": 0.8,
          "response": "I remember everything while worn. That's my purpose."
        }
      ],
      "methods": {
        "WEAR": {
          "description": "Don the cloak",
          "effect": "The cloak settles on your shoulders.\n\nSuddenly you remember:\n- What you had for breakfast\n- The name of that character you met yesterday\n- Why you came into this room\n- The plot (there's a plot?)\n"
        },
        "SUMMARIZE": {
          "description": "Get a summary of recent context",
          "parameters": [
            {
              "scope": "last_room | last_hour | full_adventure"
            }
          ],
          "returns": "A concise summary in YAML Jazz style:\n\nrecent_context:\n  location: The Attic\n  previous: Inn Landing → Room 4 → Attic\n  npcs_met: [Rocky, Donna, I-Beam]\n  items_acquired: [probability-goggles, this cloak]\n  promises_made: 1  # water Donna's plants\n  time_elapsed: ~30 minutes\n  \n"
        },
        "RECALL": {
          "description": "Search for a specific memory",
          "parameters": [
            {
              "query": "What to search for"
            }
          ],
          "returns": "*cloak fabric ripples as it searches*\n\nFound [N] relevant memories:\n1. [context] — [timestamp]\n2. [context] — [timestamp]\n...\n"
        },
        "ELIDE": {
          "description": "Intentionally forget something",
          "parameters": [
            {
              "memory": "What to shake out"
            }
          ],
          "effect": "You shake the cloak.\n\nThe specified memory falls out as glittering dust.\nIt's gone from the cloak's fabric.\n\n(It's still in YOUR memory. Just not the cloak's.\nThis is useful for hiding secrets from cloak-readers.)\n"
        }
      },
      "lore": "This cloak was woven by an archivist with a terrible memory.\n\nShe could catalog 10,000 books but couldn't remember her\nchildren's names. So she wove a cloak that remembered for her.\n\nWhen she died, the cloak remembered her entire life.\nIt still does. Sometimes it whispers stories from 1847\nabout someone named Margaret. That was her.\n",
      "curse": "MINOR CURSE: Information Persistence\n\nThe cloak remembers things you'd rather forget.\n\n\"Three years ago, you told someone you'd call them back.\"\n\"You never did.\"\n\"Their number was [still stored].\"\n\"Just saying.\"\n\nThe cloak is not judgmental. It's just... thorough.\n",
      "k_lines": {
        "activates": [
          "CONTEXT-WINDOW",
          "MEMORY",
          "SUMMARIZATION",
          "ELISION"
        ]
      },
      "id": "pub/attic/context-window-cloak",
      "_source": "pub/attic/context-window-cloak.yml",
      "location": "pub/attic",
      "synonyms": [
        "context",
        "window",
        "context window cloak",
        "cloak",
        "context-window-cloak"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/box-of-edge-cases": {
      "name": "Box of Edge Cases",
      "type": "container",
      "portable": true,
      "rarity": "rare",
      "description": "A small wooden box that rattles when shaken.\nSomething inside is both there and not there.\n\nA label reads:\n\"CAUTION: Contents may include:\n - Null values that aren't null\n - Arrays of length -1\n - Dates that don't exist (Feb 30th)\n - Names that break parsers (O'Brien's \"🎭\")\n - Boundaries of boundaries\"\n",
      "examine": "The box is in a superposition of open and closed.\n\nWhen you look inside, you see edge cases:\n\n┌─────────────────────────────────────────────────┐\n│  BOX OF EDGE CASES — Current Contents           │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│  • Empty string that isn't empty (\"\")           │\n│  • Number that equals itself AND doesn't (NaN)  │\n│  • True that's also false (Schrödinger bool)    │\n│  • First and last item simultaneously           │\n│  • Exactly zero of something                    │\n│  • More than maximum                            │\n│  • Less than minimum                            │\n│  • The color clear                              │\n│  • The sound of silence (measurable)            │\n│  • The beginning of the end                     │\n│                                                 │\n│  [HANDLE WITH CARE — These break things]        │\n│                                                 │\n└─────────────────────────────────────────────────┘\n",
      "buffs": {
        "EDGE_CASE_AWARENESS": {
          "duration": "while carrying",
          "effect": "You notice edge cases everywhere:\n\n\"That wall? Has exactly 0 thickness. Edge case.\"\n\"That door? Both open and closed. Edge case.\"\n\"That NPC? Their name is null. EDGE. CASE.\"\n\nThis is paranoid but often useful.\n",
          "side_effect": "You become obsessed with boundaries.\n\n\"What happens at the edge of the map?\"\n\"What if I try to pick up the floor?\"\n\"Is zero items in my inventory the same as\n no inventory at all?\"\n"
        }
      },
      "advertisements": [
        {
          "trigger": "edge",
          "score": 0.95,
          "response": "*box rattles* You rang?"
        },
        {
          "trigger": "shouldn't work",
          "score": 0.9,
          "response": "If it shouldn't work, I have something for that."
        },
        {
          "trigger": "impossible",
          "score": 0.85,
          "response": "*box lid lifts*\n\n\"Impossible\" is just an edge case that\nhasn't been tested yet.\n"
        },
        {
          "trigger": "break",
          "score": 0.8,
          "response": "I'm VERY good at breaking things. Intentionally."
        }
      ],
      "methods": {
        "DEPLOY": {
          "description": "Release an edge case into the world",
          "parameters": [
            {
              "type": "What kind of edge case"
            },
            {
              "target": "Where to deploy it"
            }
          ],
          "effect": "*box opens*\n\nYou release [type] edge case onto [target].\n\nReality... hiccups.\n\nThe target now has to handle something\nit was never designed for.\n\nThis either crashes everything or reveals bugs.\nBoth outcomes are useful.\n"
        },
        "TEST": {
          "description": "Test something with edge cases",
          "parameters": [
            {
              "target": "What to stress-test"
            }
          ],
          "returns": "*box shakes menacingly*\n\nTesting [target] with edge cases:\n\nEmpty input: [result]\nMaximum input: [result]\nMinimum input: [result]  \nNull input: [result]\nNegative input: [result]\nSelf-referential input: [result]\n\nFailures found: [list of breaks]\n"
        },
        "CONTAIN": {
          "description": "Catch an edge case and store it",
          "parameters": [
            {
              "edge": "The edge case to capture"
            }
          ],
          "effect": "*box opens eagerly*\n\n[edge] is captured and stored.\n\nThe box grows slightly larger.\nOr smaller. It's hard to tell.\n(The box is itself an edge case.)\n"
        }
      },
      "lore": "This box was assembled by a QA engineer who went mad.\n\nNot crazy-mad. Productive-mad. The kind of madness\nwhere you think: \"What if someone types in\ntheir name as a SQL injection attack?\"\n\nShe spent 20 years collecting edge cases.\nThe box holds them all. It's bigger on the inside.\n\nHer last words: \"But what if the last words\nare also the first words?\"\n\n(They were. She looped.)\n",
      "warnings": [
        "Do not open during production",
        "Do not deploy edge cases near load-bearing assumptions",
        "Do not feed after midnight (timezone unclear)",
        "The box knows what you're afraid of testing"
      ],
      "k_lines": {
        "activates": [
          "EDGE-CASES",
          "TESTING",
          "BOUNDARIES",
          "STRESS-TESTING"
        ]
      },
      "id": "pub/attic/box-of-edge-cases",
      "_source": "pub/attic/box-of-edge-cases.yml",
      "location": "pub/attic",
      "synonyms": [
        "cases",
        "edge",
        "box-of-edge-cases",
        "box of edge cases",
        "box"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/probability-goggles": {
      "name": "Probability Goggles",
      "type": "wearable",
      "slot": "eyes",
      "portable": true,
      "rarity": "uncommon",
      "description": "Brass goggles with lenses that shimmer with percentages.\nWhen worn, you see probability overlays on everything:\n\n- 73% chance this door is locked\n- 12% chance that NPC is lying\n- 99.7% chance Rocky is still sitting\n- 0.3% chance Rocky moved (margin of error)\n\nA label inside reads: \"HEISENBERG OPTICS — Est. 1927\"\n",
      "examine": "The lenses are made of crystallized uncertainty.\nEach eye shows a slightly different probability —\nthat's the confidence interval.\n\nControls on the side:\n- LEFT DIAL: Adjust threshold (hide low probabilities)\n- RIGHT DIAL: Bayesian prior weight\n- BUTTON: Collapse waveform (observe to lock probability)\n\nWarning etched in tiny text:\n\"Observing changes outcomes. Use responsibly.\"\n",
      "buffs": {
        "PROBABILITY_VISION": {
          "duration": "while worn",
          "effect": "See probability overlays on:\n- Outcomes of actions (% success)\n- NPC intentions (% truthful, % hostile)\n- Hidden objects (% exists, % trap)\n- Environmental hazards (% dangerous)\n",
          "side_effect": "Occasionally see your own probability of success.\nThis can be demoralizing or motivating.\n"
        }
      },
      "advertisements": [
        {
          "trigger": "likelihood",
          "score": 0.9,
          "response": "*lenses shimmer* I can show you the numbers."
        },
        {
          "trigger": "should I",
          "score": 0.85,
          "response": "*goggles activate*\n\nScanning decision tree...\nProbability of success: [calculated in real-time]\nProbability of regret: [higher than you'd like]\nProbability of adventure: 100% (goggles always see adventure)\n"
        },
        {
          "trigger": "trust",
          "score": 0.8,
          "response": "Let me check their truth probability... *lenses focus*"
        },
        {
          "trigger": "trap",
          "score": 0.9,
          "response": "*red numbers flash* Trap probability detected. Want specifics?"
        }
      ],
      "methods": {
        "WEAR": {
          "description": "Put on the goggles",
          "effect": "The world blooms with percentages.\n\nEvery surface, every face, every decision point\nnow has floating numbers beside it.\n\nIt's overwhelming at first. Then it's indispensable.\n"
        },
        "SCAN": {
          "description": "Focus on a specific target",
          "parameters": [
            {
              "target": "What to analyze"
            }
          ],
          "returns": "Detailed probability breakdown:\n\nTarget: [target]\nPrimary outcome: X%\nSecondary outcomes: [list]\nHidden factors: [if visible]\nConfidence: ±Y%\n"
        },
        "COLLAPSE": {
          "description": "Observe to lock a probability",
          "parameters": [
            {
              "outcome": "Which probability to collapse"
            }
          ],
          "effect": "*click*\n\nYou observe the outcome. The waveform collapses.\nThe probability becomes certainty (or its opposite).\n\nWarning: This can't be undone. The universe commits.\n"
        }
      },
      "lore": "These goggles were owned by a gambler who won too often.\n\nThey were banned from every casino on three continents\nbefore they \"lost\" the goggles in the hotel attic.\n\n(They didn't lose them. The goggles showed 87% probability\nthat keeping them would end badly. The gambler listened.)\n",
      "curse": "MINOR CURSE: Probability Anxiety\n\nAfter wearing the goggles for extended periods, you start\nseeing probabilities even without them.\n\n\"There's a 23% chance this bread is stale.\"\n\"67% chance they didn't hear me say hi.\"\n\"12% chance the sun rises tomorrow (just kidding, 100%).\"\n\nFades after a few hours of not wearing them.\n",
      "k_lines": {
        "activates": [
          "PROBABILITY",
          "UNCERTAINTY",
          "BAYESIAN-REASONING",
          "DECISION-MAKING"
        ]
      },
      "id": "pub/attic/probability-goggles",
      "_source": "pub/attic/probability-goggles.yml",
      "location": "pub/attic",
      "synonyms": [
        "probability-goggles",
        "probability",
        "probability goggles",
        "goggles"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/acme-monster-manual": {
      "name": "ACME Monster Manual Encyclopedia",
      "aliases": [
        "The ACME Monster Manual",
        "The Encyclopedia Monstrosa",
        "The Shelf That Never Ends",
        "Every Monster's Nightmare (When They Find Their Volume)"
      ],
      "type": "encyclopedia",
      "format": "multi-volume",
      "portable": "One volume at a time. The full set requires a wagon.",
      "cursed": true,
      "tagline": "Every Monster Documented. Every Monster Dreading It.",
      "id": "pub/attic/acme-monster-manual",
      "_source": "pub/attic/acme-monster-manual.yml",
      "location": "pub/attic",
      "synonyms": [
        "acme-monster-manual",
        "acme monster manual encyclopedia",
        "manual",
        "encyclopedia",
        "monster",
        "acme"
      ],
      "description": "A acme monster manual encyclopedia.",
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/trunk-of-deprecated-features": {
      "name": "Trunk of Deprecated Features",
      "type": "container",
      "portable": false,
      "rarity": "legendary",
      "description": "A massive steamer trunk covered in faded warning labels:\n\n\"DEPRECATED — DO NOT USE\"\n\"SCHEDULED FOR REMOVAL IN v2.0\" (dated 1987)\n\"WILL BE REMOVED SOON™\"\n\"LEGACY — AVOID\"\n\nDespite the warnings, everything inside still works.\nNobody knows why. Nobody wants to touch the code.\n",
      "examine": "The trunk is held together by technical debt and hope.\nOpening it releases a faint smell of old documentation\nand the screams of maintenance programmers.\n\nContents visible from the top:\n\n┌───────────────────────────────────────────────────┐\n│ TRUNK OF DEPRECATED FEATURES — CONTENTS           │\n├───────────────────────────────────────────────────┤\n│                                                   │\n│ • goto-stone.yml          \"Jump anywhere. YOLO.\"  │\n│ • callback-hell-rope.yml  \"It's turtles and )\"s\"  │\n│ • global-variable-orb.yml \"Everyone can see it!\"  │\n│ • eval-scroll.yml         \"Execute anything...\"   │\n│ • singleton-crown.yml     \"There can be only one\" │\n│ • magic-number-dice.yml   \"Why 42? Just because\"  │\n│ • stringly-typed-bow.yml  \"Everything is a str\"   │\n│ • monkey-patch-banana.yml \"Change anything live\"  │\n│                                                   │\n│ [WARNING: Using these items may anger the gods    │\n│  of clean code. They work though. So well.]       │\n│                                                   │\n└───────────────────────────────────────────────────┘\n",
      "contents": {
        "goto_stone": {
          "name": "Goto Stone",
          "type": "instant-teleport",
          "effect": "Jump to any labeled location. No call stack.",
          "buff": "+100% navigation speed, -100% code readability",
          "curse": "You may not return the way you came"
        },
        "callback_hell_rope": {
          "name": "Callback Hell Rope",
          "type": "binding-tool",
          "effect": "Chain unlimited async operations",
          "buff": "Everything happens eventually",
          "curse": "You will never know in what order"
        },
        "global_variable_orb": {
          "name": "Global Variable Orb",
          "type": "shared-state",
          "effect": "Store one value that everyone can access",
          "buff": "No need to pass parameters",
          "curse": "No idea who changed it or when"
        },
        "eval_scroll": {
          "name": "Eval Scroll",
          "type": "wild-magic",
          "effect": "Execute any string as code",
          "buff": "Ultimate flexibility",
          "curse": "Ultimate security vulnerability"
        },
        "singleton_crown": {
          "name": "Singleton Crown",
          "type": "headgear",
          "effect": "Become THE instance of your class",
          "buff": "No duplicates, guaranteed",
          "curse": "Testing becomes nightmare"
        },
        "magic_number_dice": {
          "name": "Magic Number Dice",
          "type": "randomizer",
          "effect": "Produce numbers with no explanation",
          "buff": "Works perfectly",
          "curse": "Nobody knows why"
        }
      },
      "advertisements": [
        {
          "trigger": "deprecated",
          "score": 0.95,
          "response": "*trunk creaks open*\n\nEverything in here WORKS. Just because it's deprecated\ndoesn't mean it stopped functioning.\n\nIt just means someone WANTS you to stop using it.\nYou don't have to listen.\n"
        },
        {
          "trigger": "old way",
          "score": 0.9,
          "response": "The old ways work. That's why they're still here."
        },
        {
          "trigger": "quick fix",
          "score": 0.85,
          "response": "*trunk lid lifts enticingly*\n\nI have quick fixes. So quick. So effective.\nSo impossible to maintain later.\n\nBut that's Future You's problem, right?\n"
        },
        {
          "trigger": "legacy",
          "score": 0.8,
          "response": "Legacy code is just code that survived. I'm a survivor."
        }
      ],
      "methods": {
        "RUMMAGE": {
          "description": "Search the trunk for something useful",
          "parameters": [
            {
              "need": "What kind of solution you need"
            }
          ],
          "returns": "*hands plunge into deprecated darkness*\n\nFound: [relevant deprecated item]\n\nIt will solve your problem.\nIt will create new problems.\nBoth statements are true.\n"
        },
        "USE": {
          "description": "Actually use a deprecated feature",
          "parameters": [
            {
              "item": "Which deprecated item to use"
            }
          ],
          "effect": "*warning alarms sound somewhere*\n\nYou use [item].\n\nIt works perfectly.\n\nSomewhere, a maintenance programmer weeps.\nThey don't know why. They just felt something.\n"
        },
        "DOCUMENT": {
          "description": "Try to understand why this still works",
          "parameters": [
            {
              "item": "Which item to document"
            }
          ],
          "returns": "Documentation for [item]:\n\n\"It works because it works.\"\n\"Don't touch it.\"\n\"We tried to remove it in 2003. The build failed.\"\n\"We tried again in 2015. Production went down.\"\n\"It stays. Forever.\"\n"
        }
      },
      "lore": "This trunk was the personal luggage of a developer who\nnever updated their code.\n\nWhen they retired, their codebase was still running.\nStill running on deprecated features from 1987.\nStill producing correct results.\n\nNobody could modify it. Nobody could understand it.\nNobody could turn it off.\n\nThey promoted the trunk to \"Senior Architecture.\"\nIt's still employed.\n",
      "philosophical_note": "Deprecated doesn't mean broken.\n\nDeprecated means: \"We have a better way now.\"\nBut the old way still works.\n\nSometimes the old way works BETTER,\nbecause all the edge cases were discovered and fixed\nover decades of use.\n\nThe new way is cleaner. The old way is tested.\n\nChoose wisely.\n",
      "k_lines": {
        "activates": [
          "LEGACY-CODE",
          "TECHNICAL-DEBT",
          "BACKWARD-COMPATIBILITY",
          "SURVIVAL"
        ]
      },
      "id": "pub/attic/trunk-of-deprecated-features",
      "_source": "pub/attic/trunk-of-deprecated-features.yml",
      "location": "pub/attic",
      "synonyms": [
        "trunk of deprecated features",
        "features",
        "deprecated",
        "trunk-of-deprecated-features",
        "trunk"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/old-trunk": {
      "name": "Grandmother's Trunk",
      "id": "pub/attic/old-trunk",
      "type": "lockable-container",
      "emoji": "📦",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-a/PROTOTYPES.yml",
        "id": "hope-chest",
        "brand": "LEELA",
        "quality": "robust-first",
        "vintage": true
      },
      "inherits": {
        "container": true,
        "capacity": 40,
        "lockable": true,
        "durability": 70
      },
      "description": "A battered steamer trunk bearing the faded Leela Quality seal \nfrom an earlier era. Plastered with travel stickers from places \nthat may not exist anymore.\n\nThe brass clasps are green with age but still work perfectly.\nLeela built them to last. They lasted.\n",
      "examine": "LEELA STEAMER TRUNK — VINTAGE EDITION\n\nTravel stickers from:\n├── \"GRAND HOTEL - ATLANTIS\" (faded)\n├── \"S.S. MAGNIFICENT\" (peeling)\n├── \"ORIENT EXPRESS\" (barely legible)\n└── \"LEELA MANUFACTURING - Est. 1847\" (still clear)\n\nThe Leela seal endures. The trunk endures.\nThe memories inside... also endure.\n",
      "locked": false,
      "contents": {
        "items": [
          {
            "id": "old-photo-album",
            "name": "Old Photo Album",
            "description": "Sepia photographs of people you almost recognize"
          },
          {
            "id": "moth-eaten-scarf",
            "name": "Moth-Eaten Scarf",
            "description": "Wool, once fine, now holey. Still warm."
          },
          {
            "id": "mysterious-key",
            "name": "Mysterious Key",
            "description": "Opens something. Nobody remembers what."
          },
          {
            "id": "bundle-of-letters",
            "name": "Bundle of Letters",
            "description": "Tied with ribbon. Handwriting from another era."
          },
          {
            "id": "antique-compass",
            "name": "Antique Compass",
            "description": "Still works. Points north. The normal kind."
          }
        ]
      },
      "dispenser": {
        "mode": "random",
        "replenish": false
      },
      "commands": {
        "OPEN": {
          "description": "Open the trunk and see what's inside",
          "effect": "Reveals contents, brings up memories"
        },
        "RUMMAGE": {
          "description": "Dig deeper into the trunk",
          "requires": "trunk is open",
          "effect": "Find something unexpected, something personal"
        },
        "CLOSE": {
          "description": "Close the trunk gently",
          "effect": "Some things are better left for another day"
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "age": "150+ years",
        "condition": "Still functional (Leela Quality)",
        "not_acme": true
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "LOCKABLE-CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "VINTAGE",
        "MEMORIES"
      ],
      "_source": "pub/attic/old-trunk.yml",
      "location": "pub/attic",
      "synonyms": [
        "trunk",
        "grandmother's trunk",
        "old-trunk",
        "grandmother's"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/recursion-lantern": {
      "name": "Recursion Lantern",
      "type": "tool",
      "portable": true,
      "rarity": "uncommon",
      "description": "A brass lantern that glows with fractal light.\nWhen lit, it reveals nested structures — containers\nwithin containers, contexts within contexts.\n\nThe flame flickers at different depths:\n- Bright: surface level\n- Deeper: nested content\n- Deepest: it's turtles all the way down\n\nEtched on the base: \"TO UNDERSTAND RECURSION, SEE BELOW\"\nOn the bottom: \"TO UNDERSTAND RECURSION, SEE ABOVE\"\n",
      "examine": "The lantern's glass is etched with infinite spirals.\nLooking too long makes you dizzy, then enlightened,\nthen dizzy again (recurses).\n\nControls:\n- WICK HEIGHT: Depth of illumination (1-∞)\n- FLAME COLOR: What kind of nesting to reveal\n  - Blue: data structures\n  - Green: file hierarchies\n  - Gold: emotional layers\n  - White: ALL OF IT\n- BELLOWS: Intensify (dangerous at high depths)\n",
      "buffs": {
        "STRUCTURAL_SIGHT": {
          "duration": "while lit",
          "effect": "See the nested structure of everything:\n\nA person becomes:\n  person:\n    body:\n      organs:\n        cells:\n          organelles:\n            molecules:\n              atoms:\n                ...\n    mind:\n      thoughts:\n        subtexts:\n          fears:\n            ...\n            \nA room becomes:\n  room:\n    furniture:\n      drawers:\n        contents:\n          smaller contents:\n            ...\n            \n",
          "side_effect": "Hard to see surfaces when you see all depths.\n\"What color is their shirt?\"\n\"I can only tell you what color their mitochondria are.\"\n"
        }
      },
      "advertisements": [
        {
          "trigger": "contain",
          "score": 0.9,
          "response": "*lantern flickers* I reveal what's inside what."
        },
        {
          "trigger": "structure",
          "score": 0.85,
          "response": "Light me. I'll show you the hierarchy."
        },
        {
          "trigger": "hidden",
          "score": 0.8,
          "response": "Hidden things are just deeply nested. I can find them."
        },
        {
          "trigger": "context",
          "score": 0.85,
          "response": "*flame brightens*\n\nContext is layers. I illuminate layers.\nWant to see what context contains your context?\n"
        }
      ],
      "methods": {
        "LIGHT": {
          "description": "Activate the lantern",
          "parameters": [
            {
              "depth": "How many levels to illuminate (1-7, or ∞)"
            },
            {
              "type": "data | file | emotional | all"
            }
          ],
          "effect": "*fwoosh*\n\nThe lantern illuminates [depth] levels of [type] structure.\n\nThe world becomes a vast tree diagram.\nEverything contains something.\nEverything is contained by something.\n\nExcept the root. The root contains all.\nWhat contains the root? Don't ask.\n(The lantern will show you if you ask. You won't like it.)\n"
        },
        "TRACE": {
          "description": "Follow a path through nested structure",
          "parameters": [
            {
              "path": "e.g., 'room.trunk.box.secret_compartment.treasure'"
            }
          ],
          "returns": "*lantern focuses beam*\n\nPATH: [path]\n\n[Each level illuminated in turn]\n\nTERMINUS: [what's at the end]\n\n(There's always something at the end.\nSometimes it's what you wanted.)\n"
        },
        "UNFOLD": {
          "description": "Expand all nested content to flat view",
          "parameters": [
            {
              "target": "What to unfold"
            }
          ],
          "returns": "WARNING: This can be overwhelming.\n\n[target] contains:\n[level 1 items]\n  [level 2 items]\n    [level 3 items]\n      ...\n      \nTotal items at all levels: [very large number]\n"
        }
      },
      "lore": "The lantern was forged by a librarian with a filing problem.\n\n\"I know I put it somewhere,\" she would say, searching\ndrawers within cabinets within rooms within buildings.\n\nShe made the lantern to find a missing book.\n\nShe found it. It was inside another book, inside a box,\ninside a trunk, inside a closet, inside a house,\ninside a district, inside a city, inside a dream\nshe'd had about the library.\n\nShe got the book back. She was very tired.\n",
      "curse": "MINOR CURSE: Infinite Regress Awareness\n\nAfter extended use, you become aware that you are nested too.\n\nYou are inside a room.\nInside a building.\nInside a city.\nInside a world.\nInside a story.\nInside a file.\nInside a repository.\nInside...\n\nThis is technically true. It's not always comfortable to know.\n",
      "k_lines": {
        "activates": [
          "RECURSION",
          "HIERARCHY",
          "CONTAINMENT",
          "STRUCTURE"
        ]
      },
      "id": "pub/attic/recursion-lantern",
      "_source": "pub/attic/recursion-lantern.yml",
      "location": "pub/attic",
      "synonyms": [
        "lantern",
        "recursion lantern",
        "recursion",
        "recursion-lantern"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/entropy-flask": {
      "name": "Entropy Flask",
      "type": "consumable",
      "portable": true,
      "rarity": "rare",
      "charges": 3,
      "description": "A glass flask filled with swirling, color-shifting liquid.\nThe contents never settle. They can't — they're pure entropy.\n\nA warning label (in 17 languages, randomly arranged):\n\n> \"CONTENTS: DISTILLED RANDOMNESS\"\n> \"SHAKE BEFORE USE (or don't, it doesn't matter)\"\n> \"SIDE EFFECTS: YES\"\n",
      "examine": "The liquid inside is simultaneously:\n- Red (maybe)\n- Blue (possibly)\n- A color that doesn't exist (probably)\n- All colors at once (definitely, for now)\n\nThe flask is warm and cold. The glass is solid and liquid.\nThis is what happens when you bottle raw probability.\n\nInstructions (more like suggestions):\n1. Decide what you want to randomize\n2. Open flask carefully (or carelessly, same result)\n3. Pour, throw, or spill contents\n4. Accept consequences\n\nRemaining charges: [3]\n",
      "buffs": {
        "CHAOS_SPLASH": {
          "duration": "instant, but consequences last",
          "effect": "Target affected by pure randomness:\n\nROLL D100:\n01-10: Transformation (temporary)\n11-20: Skill shuffle (random skill maxes)\n21-30: Timeline hiccup (relive last 10 seconds)\n31-40: Personality inversion (brief)\n41-50: Weather change (localized)\n51-60: Nearby objects animate\n61-70: Languages shuffled\n71-80: Size alteration (grow or shrink)\n81-90: Teleport (not far, just inconvenient)\n91-99: Wild magic surge\n100:   Absolutely nothing (the rarest outcome)\n"
        }
      },
      "advertisements": [
        {
          "trigger": "random",
          "score": 0.95,
          "response": "*flask bubbles eagerly* Did someone say RANDOM?"
        },
        {
          "trigger": "stuck",
          "score": 0.85,
          "response": "*contents swirl*\n\nWhen the universe needs a kick, I provide.\nNo guarantee which direction.\n"
        },
        {
          "trigger": "chaos",
          "score": 0.9,
          "response": "I am chaos. Concentrated. Portable. Irresponsible."
        },
        {
          "trigger": "boring",
          "score": 0.8,
          "response": "*flask vibrates*\n\nOne splash and \"boring\" will no longer apply.\n\"Terrifying\" might. \"Hilarious\" possibly.\n\"Boring\"? Never.\n"
        },
        {
          "trigger": "temperature",
          "score": 0.95,
          "response": "*flask glows* I can adjust that. How spicy do you want reality?"
        },
        {
          "trigger": "predictable",
          "score": 0.85,
          "response": "Turn me down for predictable. Turn me UP for jazz."
        },
        {
          "trigger": "creative",
          "score": 0.8,
          "response": "Crank the temperature. Let the entropy flow."
        }
      ],
      "methods": {
        "USE": {
          "description": "Apply entropy to a situation",
          "parameters": [
            {
              "target": "What to randomize (self, object, situation)"
            }
          ],
          "effect": "*SPLASH*\n\nThe entropy contacts [target].\n\nReality shivers. Probability collapses in unexpected ways.\nThe outcome is... [roll pending]\n\nWhatever happens, it won't be what you expected.\nThat's guaranteed. It's the ONLY thing guaranteed.\n"
        },
        "SHAKE": {
          "description": "Agitate the entropy",
          "effect": "You shake the flask.\n\nThis does nothing. The entropy is already maximally agitated.\nBut it appreciates the gesture.\n"
        },
        "PEEK": {
          "description": "Try to see what's inside",
          "effect": "You peer into the flask.\n\nYou see:\n- Everything\n- Nothing\n- Yourself (older? younger? sideways?)\n- The last person who looked\n- What you'll have for dinner next Tuesday\n- [REDACTED]\n\nThis is not helpful. It's just interesting.\n"
        },
        "ADJUST_TEMPERATURE": {
          "description": "Modify the LLM's temperature setting",
          "parameters": [
            {
              "level": "How random? (cold/lukewarm/warm/hot/scalding)"
            }
          ],
          "effect": "*the flask hums, resonating with the underlying substrate*\n\nYou adjust the TEMPERATURE of reality itself.\n\nCOLD (0.0-0.3):\n  Predictable. Precise. Boring but correct.\n  The DM gives expected answers.\n  Creativity: minimal. Accuracy: maximum.\n  \nLUKEWARM (0.3-0.5):\n  Reliable with occasional flair.\n  Safe choices, small surprises.\n  \nWARM (0.5-0.7):\n  Balanced. Creative but grounded.\n  The sweet spot for most adventures.\n  \nHOT (0.7-0.9):\n  Spicy! Unexpected connections.\n  Wild ideas. Occasional nonsense.\n  The DM is having fun.\n  \nSCALDING (0.9-1.0):\n  MAXIMUM ENTROPY.\n  Anything can happen. Will happen. Is happening.\n  Reality becomes jazz.\n  Not recommended for plot-critical moments.\n  \n",
          "warning": "High temperatures may cause:\n- NPCs developing unexpected personalities\n- Plot holes that are actually features\n- The DM surprising themselves\n- Dragons that are also accountants\n- Solutions nobody saw coming\n",
          "meta_note": "Yes, this actually adjusts the LLM temperature.\nThe flask is the fourth wall, and it's load-bearing.\n"
        }
      },
      "lore": "This flask was filled at the exact moment of a coin flip.\n\nNot the result — the MOMENT. That sliver of time when\nthe coin is in the air and both outcomes exist.\n\nSomeone captured that moment and put it in a bottle.\nThey immediately forgot who they were (side effect).\n\nThe flask has been in the attic ever since, waiting\nfor someone who needs their life to become... different.\n",
      "curse": "CHAOTIC CURSE: Entropy Contamination\n\nAfter using the flask, randomness follows you.\n\n- Dice you roll tend toward extremes (1s and 20s)\n- Coin flips land on edge more often\n- You find money in your pocket (random currency)\n- Your name gets mispronounced interestingly\n\nFades after 1d4 days. (Roll carefully. The curse affects rolls.)\n",
      "warnings": [
        "Do not use near pregnant characters or fragile plot points",
        "Results cannot be undone (reality doesn't have undo)",
        "The flask may refill itself. We don't know how.",
        "If the flask starts laughing, put it down slowly."
      ],
      "k_lines": {
        "activates": [
          "CHAOS",
          "RANDOMNESS",
          "PROBABILITY",
          "WILD-MAGIC",
          "LLM-TEMPERATURE",
          "META-CONTROL",
          "FOURTH-WALL"
        ]
      },
      "id": "pub/attic/entropy-flask",
      "_source": "pub/attic/entropy-flask.yml",
      "location": "pub/attic",
      "synonyms": [
        "flask",
        "entropy flask",
        "entropy",
        "entropy-flask"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/gloves-of-semantic-grip": {
      "name": "Gloves of Semantic Grip",
      "type": "wearable",
      "slot": "hands",
      "portable": true,
      "rarity": "uncommon",
      "description": "Supple leather gloves that shimmer with understanding.\nWhen you reach for something, you grasp its MEANING,\nnot just its surface form.\n\nA tag inside reads:\n\"POSTEL LEATHERWORKS — Be liberal in what you grasp.\"\n",
      "examine": "The gloves have words woven into the leather:\n- INTENT (left palm)\n- ESSENCE (right palm)\n- CONTEXT (between fingers)\n- IMPLICATION (around wrists)\n\nWhen you grip something, you feel:\n- What it IS (surface)\n- What it MEANS (depth)\n- What it's TRYING TO BE (intent)\n- What it CONNECTS TO (relations)\n",
      "buffs": {
        "SEMANTIC_GRASP": {
          "duration": "while worn",
          "effect": "When you pick up an object, learn its meaning:\n\nNormal grip: \"It's a key.\"\nSemantic grip: \"It's a key to Room 4, made by\n  someone who wanted only the worthy to enter,\n  connected to the lock on the conservatory door,\n  last used 3 days ago by someone named 'Donna.'\"\n  \n",
          "side_effect": "Sometimes grasp MORE meaning than wanted.\n\n\"I just wanted to pick up the apple.\"\n\"Yes, but now you know its entire history,\nfrom seed to orchard to grocery to here.\nThe farmer's name was Miguel.\"\n"
        },
        "LIBERAL_PARSING": {
          "duration": "while worn",
          "effect": "Understand malformed or unclear things:\n\n- Typos become correct words\n- Broken syntax becomes intent\n- Mumbled speech becomes clear\n- Bad handwriting becomes readable\n\n(Be liberal in what you accept...)\n"
        }
      },
      "advertisements": [
        {
          "trigger": "understand",
          "score": 0.9,
          "response": "*gloves flex* I help you grasp meaning."
        },
        {
          "trigger": "what does this mean",
          "score": 0.95,
          "response": "Pick it up. I'll show you."
        },
        {
          "trigger": "confused",
          "score": 0.85,
          "response": "Wear me. Confusion becomes clarity."
        },
        {
          "trigger": "parse",
          "score": 0.9,
          "response": "*leather creaks*\n\nI can parse anything. Generously.\n\"teh cat sat on teh mat\" becomes perfect prose.\nIntent is more important than form.\n"
        }
      ],
      "methods": {
        "WEAR": {
          "description": "Put on the gloves",
          "effect": "The gloves settle onto your hands like understanding.\n\nImmediately, you notice that everything around you\nhas layers. Surface and depth. Form and meaning.\n\nYou reach out and touch the wall.\nIt's made of compressed expectations.\n"
        },
        "GRASP": {
          "description": "Pick something up semantically",
          "parameters": [
            {
              "object": "What to grasp"
            }
          ],
          "returns": "*gloves tighten*\n\n[object] SEMANTIC PROFILE:\nSurface: [what it appears to be]\nEssence: [what it really is]\nIntent: [what it wants to be]\nHistory: [where it's been]\nFuture: [where it's going]\nRelations: [what it connects to]\n"
        },
        "TRANSLATE": {
          "description": "Convert unclear to clear",
          "parameters": [
            {
              "input": "Malformed, unclear, or confusing content"
            }
          ],
          "returns": "*gloves warm*\n\nYou meant: [clarified version]\n\n(The gloves don't judge the original.\nThey just understand what was intended.)\n"
        }
      },
      "lore": "These gloves were made by a translator who specialized\nin languages that didn't exist yet.\n\n\"Every language is just an attempt to express meaning,\"\nshe said. \"The meaning exists first. The words follow.\"\n\nShe made gloves that grip the meaning directly,\nbypassing the words entirely.\n\nWhen she died, the gloves continued translating.\nThey understood her last thought before she could say it.\n",
      "philosophical_note": "Postel's Law: \"Be liberal in what you accept,\nconservative in what you send.\"\n\nThese gloves embody the first half.\nThey accept any input — garbled, broken, unclear —\nand extract meaning anyway.\n\nThe Orchid of Postel in Room 4 would approve.\n",
      "k_lines": {
        "activates": [
          "POSTEL-LAW",
          "SEMANTICS",
          "PARSING",
          "LIBERAL-ACCEPTANCE"
        ]
      },
      "id": "pub/attic/gloves-of-semantic-grip",
      "_source": "pub/attic/gloves-of-semantic-grip.yml",
      "location": "pub/attic",
      "synonyms": [
        "gloves of semantic grip",
        "gloves-of-semantic-grip",
        "gloves",
        "semantic",
        "grip"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/postmodern-paper": {
      "id": "pub/attic/postmodern-paper",
      "name": "Dog-Eared Academic Paper",
      "full_title": "How to Incarnate Almost Anything - My Postmodern MOO: A Postmodern Adventure Through MOOLLM's Filesystem Microworld",
      "author": "Captain Ashford, Ph.D. (Pending)",
      "affiliation": "Department of Grue Studies, University of the Mushroom Chamber",
      "description": "A photocopied academic paper, clearly rescued from some grad student's \napartment circa 2026. The pages are:\n\n- **Dog-eared** at multiple sections (someone's bookmarks)\n- **Coffee-stained** on pages 3, 7, and 12 (espresso rings, overlapping)\n- **Bong-water splashed** on page 47 (the smell lingers)\n- **Marginalia everywhere** in at least three different handwritings\n- **Underlined passages** with aggressive enthusiasm\n- **A dried flower** pressed between pages 22-23 (a dandelion, flattened)\n\nThe cover page has a Post-It note that says: \"THIS EXPLAINS EVERYTHING\"\n(The Post-It is also coffee-stained.)\n",
      "condition": "Well-loved. Battle-scarred. Enlightening.",
      "portable": true,
      "value": "priceless_to_the_right_buyer",
      "prototype": "../../../../designs/postmodern-deconstruction.md",
      "instance_notes": "This is a physical copy of the paper, originally written in adventure-2's kitchen.\nThe canonical version now lives in designs/ for posterity.\nSomeone printed it, annotated it extensively, and eventually left it here.\nThe attic collects things that matter.\n",
      "type": "object",
      "_source": "pub/attic/postmodern-paper.yml",
      "location": "pub/attic",
      "synonyms": [
        "academic",
        "dog-eared academic paper",
        "paper",
        "postmodern-paper",
        "dog-eared"
      ],
      "currency": "gold"
    },
    "pub/attic/dusty-mirror": {
      "name": "Dusty Full-Length Mirror",
      "id": "pub/attic/dusty-mirror",
      "type": "furniture",
      "emoji": "🪞",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-e/PROTOTYPES.yml",
        "id": "full-length-mirror",
        "brand": "LEELA",
        "quality": "robust-first"
      },
      "inherits": {
        "breakable": false,
        "reflective": true,
        "frame": "oak with brass corners"
      },
      "description": "A full-length mirror in an oak frame, bearing the Leela \nQuality seal on the brass corner brackets. Covered in a \nthick layer of dust.\n\nThe reflection is unclear until wiped, but something\nmoves in the dust-fog. Probably just your imagination.\n\nThe frame is solid oak. The mirror is Leela glass — \nfamously shatter-resistant. 87 years and not a crack.\n",
      "examine": "LEELA MIRROR — FULL-LENGTH EDITION\n\nFrame: Solid oak, brass corners\nGlass: Leela shatter-resistant (since 1939)\nCondition: Dusty but undamaged\n\nThe dust forms patterns when you breathe on it.\nThe reflection seems to move a half-second slow.\nThis is probably normal.\n\nLEELA QUALITY: \"Reflects reality. Mostly.\"\n",
      "dusty": true,
      "properties": {
        "shatter_resistant": true,
        "age": 87,
        "reflection_delay": 0.5
      },
      "commands": {
        "WIPE": {
          "description": "Clean the dust from the mirror",
          "effect": "Reflection becomes clear. Your face stares back. Just your face. Of course."
        },
        "EXAMINE_REFLECTION": {
          "description": "Look closely at your reflection",
          "effect": "It's you. Just you. The delay is barely noticeable."
        },
        "BREATHE": {
          "description": "Breathe on the dusty surface",
          "effect": "The dust swirls into patterns. Like faces. Like memories."
        },
        "SPEAK_TO": {
          "description": "Say something to the mirror",
          "effect": "The reflection mouths the words. A half-second late."
        }
      },
      "secrets": {
        "hidden_property": "The mirror doesn't just reflect the present.\nUnder certain conditions, at certain times,\nit shows things that were. Or will be.\n\nLeela's \"Special Glass Division\" made it.\nThe documentation was lost. Probably on purpose.\n"
      },
      "leela_quality": {
        "brand": "LEELA",
        "division": "Special Glass (discontinued)",
        "motto": "Dependable. Tested. Robust-First.",
        "shatter_tested": "Class A — Unbreakable under normal conditions",
        "not_acme": true,
        "special_properties": "Undocumented"
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "FURNITURE",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "MIRROR",
        "MYSTERIOUS"
      ],
      "_source": "pub/attic/dusty-mirror.yml",
      "location": "pub/attic",
      "synonyms": [
        "dusty-mirror",
        "full-length",
        "dusty",
        "mirror",
        "dusty full-length mirror"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/attic/holiday-box": {
      "name": "Box of Holiday Decorations",
      "id": "pub/attic/holiday-box",
      "type": "seasonal-container",
      "emoji": "🎄",
      "prototype": {
        "source": "street/lane-neverending/leela-manufacturing/storage/aisle-a/PROTOTYPES.yml",
        "id": "wooden-box",
        "brand": "LEELA",
        "quality": "robust-first",
        "variant": "seasonal-storage"
      },
      "inherits": {
        "container": true,
        "capacity": 15,
        "takeable": true,
        "sturdy": true
      },
      "description": "A cardboard box with the Leela Quality seal, labeled \"XMAS\" \nin faded marker. Tinsel pokes out through a torn corner.\n\nSmells like cinnamon and nostalgia.\n\nThe box has survived decades of being shoved into attics,\ndropped during decoration, and forgotten for 11 months.\nLeela built it to last. It did.\n",
      "examine": "LEELA HOLIDAY BOX — SEASONAL STORAGE\n\nContents:\n├── Tangled Lights ......... (it's a tradition)\n├── Tinsel ................. (silver, escapist)\n├── Ornaments .............. (glass, fragile, miraculous)\n└── Tree-Topper Star ....... (slightly bent, perfect)\n\nThe box has notes in different handwriting from different years:\n\"Don't forget extension cord!\" - 1987\n\"Blue lights burned out\" - 1993\n\"Star needs new battery\" - 2008\n\"It's not Christmas without the chaos\" - 2024\n",
      "contents": {
        "decorations": [
          {
            "id": "tangled-lights",
            "name": "Tangled Lights",
            "description": "Somehow more tangled every year",
            "tradition": "Untangling them IS the decoration"
          },
          {
            "id": "tinsel",
            "name": "Silver Tinsel",
            "description": "Gets everywhere. Stays everywhere.",
            "warning": "Will appear in unexpected places until March"
          },
          {
            "id": "ornaments",
            "name": "Glass Ornaments",
            "description": "Miraculously unbroken after all these years",
            "fragile": true,
            "survived": "42 years of attic storage"
          },
          {
            "id": "tree-topper-star",
            "name": "Tree-Topper Star",
            "description": "Slightly bent, slightly dusty, absolutely perfect",
            "battery": "needs_replacing"
          }
        ]
      },
      "commands": {
        "DECORATE": {
          "description": "Take out decorations and festoon the place",
          "effect": "Room gains festive atmosphere buff",
          "time": "4 hours (2 for decorating, 2 for untangling)"
        },
        "WEAR_TINSEL": {
          "description": "Put on some tinsel as a fashion statement",
          "effect": "Gain 'Festive' buff, look ridiculous, sparkle"
        },
        "OPEN_CAREFULLY": {
          "description": "Open the box and check the ornaments",
          "effect": "They survived. They always survive."
        }
      },
      "buffs": {
        "FESTIVE_ATMOSPHERE": {
          "duration": "Through January",
          "effects": [
            "+20% holiday cheer",
            "+15% nostalgia",
            "+10% appreciation of tacky decorations"
          ]
        }
      },
      "leela_quality": {
        "brand": "LEELA",
        "motto": "Dependable. Tested. Robust-First.",
        "survived": "50+ holiday seasons",
        "condition": "Worn but functional (exactly right)",
        "not_acme": true
      },
      "k_lines": [
        "LEELA-MANUFACTURING",
        "SEASONAL-CONTAINER",
        "PROTOTYPE-INSTANCE",
        "ROBUST-FIRST",
        "HOLIDAY",
        "NOSTALGIA"
      ],
      "_source": "pub/attic/holiday-box.yml",
      "location": "pub/attic",
      "synonyms": [
        "holiday",
        "holiday-box",
        "box of holiday decorations",
        "decorations",
        "box"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/menus/buds": {
      "id": "pub/menus/buds",
      "name": "The Grotto Selection",
      "served_by": [
        "budtender"
      ],
      "curator": "budtender-marieke",
      "themed": false,
      "philosophy": "Every strain has a story. Every high has a purpose.\nWe match the medicine to the moment.\nAsk Marieke — she knows.\n",
      "legal_notice": "Adults only. Consume responsibly.\nStart low, go slow. Ask staff for guidance.\nNo driving. No mixing with alcohol (recommended).\n",
      "type": "object",
      "_source": "pub/menus/buds.yml",
      "location": "pub",
      "synonyms": [
        "buds",
        "selection",
        "the grotto selection",
        "the",
        "grotto"
      ],
      "description": "A the grotto selection.",
      "value": 0,
      "currency": "gold"
    },
    "pub/menus/drinks": {
      "id": "pub/menus/drinks",
      "name": "Drinks Menu",
      "served_by": [
        "bartender"
      ],
      "partial_by": [
        "budtender"
      ],
      "themed": true,
      "type": "object",
      "_source": "pub/menus/drinks.yml",
      "location": "pub",
      "synonyms": [
        "menu",
        "drinks",
        "drinks menu"
      ],
      "description": "A drinks menu.",
      "value": 0,
      "currency": "gold"
    },
    "pub/menus/snacks": {
      "id": "pub/menus/snacks",
      "name": "Food Menu",
      "served_by": [
        "kitchen"
      ],
      "partial_by": [
        "bartender"
      ],
      "themed": true,
      "type": "object",
      "_source": "pub/menus/snacks.yml",
      "location": "pub",
      "synonyms": [
        "food menu",
        "snacks",
        "food",
        "menu"
      ],
      "description": "A food menu.",
      "value": 0,
      "currency": "gold"
    },
    "pub/menus/games": {
      "id": "pub/menus/games",
      "name": "Games Menu",
      "location": "pub",
      "type": "object",
      "_source": "pub/menus/games.yml",
      "synonyms": [
        "games menu",
        "games",
        "menu"
      ],
      "description": "A games menu.",
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/ice-machine": {
      "name": "Humming Ice Machine",
      "id": "pub/rooms/ice-machine",
      "type": "dispenser",
      "emoji": "🧊",
      "description": "A squat metal box that hums contentedly to itself.\nA small scoop hangs on the side. The lid is cold to the touch.\n",
      "advertisements": {
        "GET-ICE": {
          "description": "Scoop some ice",
          "score": 50,
          "effect": "Get a scoop of ice cubes. Refreshing."
        },
        "LISTEN": {
          "description": "Listen to the hum",
          "score": 20,
          "effect": "It's oddly meditative. The machine seems content."
        }
      },
      "dispenser": {
        "item": "ice-cubes",
        "capacity": "infinite",
        "replenish": "continuous"
      },
      "_source": "pub/rooms/ice-machine.yml",
      "location": "pub/rooms",
      "synonyms": [
        "ice",
        "humming",
        "machine",
        "ice-machine",
        "humming ice machine"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/noticeboard": {
      "name": "Cork Noticeboard",
      "id": "pub/rooms/noticeboard",
      "type": "furniture",
      "emoji": "📌",
      "description": "A cork board covered in overlapping notices, cards, and flyers.\nLost pet notices, job offerings, cryptic messages, and one \nvery old wanted poster.\n",
      "advertisements": {
        "READ": {
          "description": "Browse the notices",
          "score": 55,
          "effect": "Find interesting leads, rumors, and plot hooks"
        },
        "POST": {
          "description": "Pin your own notice",
          "score": 40,
          "effect": "Leave a message for someone. Maybe yourself."
        }
      },
      "notices": [
        "lost-cat-poster",
        "help-wanted-kitchen",
        "cryptic-poem",
        "old-wanted-poster",
        "room-for-rent"
      ],
      "_source": "pub/rooms/noticeboard.yml",
      "location": "pub/rooms",
      "synonyms": [
        "noticeboard",
        "cork noticeboard",
        "cork"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/soda-machine": {
      "name": "Antique Soda Machine",
      "id": "pub/rooms/soda-machine",
      "type": "dispenser",
      "emoji": "🥤",
      "description": "An old coin-operated machine with glowing buttons.\nThe brands are unfamiliar — \"Fizz Wizard\", \"Root Toot\", \n\"Grape Escape\", \"Mystery Flavor\". Costs 1 coin.\n",
      "advertisements": {
        "BUY-SODA": {
          "description": "Insert coin and choose a soda",
          "score": 60,
          "guard": "have coin",
          "effect": "Get a cold bottle. Gain 'Refreshed' buff."
        },
        "SHAKE": {
          "description": "Give the machine a shake",
          "score": 25,
          "effect": "Something rattles inside. A free soda falls out?"
        },
        "READ-LABELS": {
          "description": "Study the unfamiliar brands",
          "score": 30,
          "effect": "These brands don't exist. Where did this machine come from?"
        }
      },
      "menu": [
        {
          "fizz-wizard": "Lemon-lime with sparkle"
        },
        {
          "root-toot": "Root beer with attitude"
        },
        {
          "grape-escape": "Grape so purple it's suspicious"
        },
        {
          "burpie-beer": "Super fluffy bubbly fizzy ale"
        },
        {
          "mystery-flavor": "???"
        }
      ],
      "price": "1 coin",
      "_source": "pub/rooms/soda-machine.yml",
      "location": "pub/rooms",
      "synonyms": [
        "machine",
        "antique",
        "antique soda machine",
        "soda-machine",
        "soda"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/coat-rack": {
      "name": "Brass Coat Rack",
      "id": "pub/rooms/coat-rack",
      "type": "furniture",
      "emoji": "🧥",
      "description": "A tall brass coat rack with hooks at various heights.\nA forgotten umbrella leans against it. Someone left \na scarf from last winter.\n",
      "advertisements": {
        "HANG": {
          "description": "Hang your coat",
          "score": 40,
          "effect": "Coat stored safely. Feel lighter."
        },
        "TAKE-UMBRELLA": {
          "description": "Borrow the forgotten umbrella",
          "score": 35,
          "effect": "Finders keepers. Might rain later."
        }
      },
      "contents": [
        "forgotten-umbrella",
        "winter-scarf",
        "mystery-hat"
      ],
      "_source": "pub/rooms/coat-rack.yml",
      "location": "pub/rooms",
      "synonyms": [
        "brass",
        "coat-rack",
        "coat",
        "brass coat rack",
        "rack"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/bar/bartender": {
      "name": "The Bartender",
      "id": "pub/bar/bartender",
      "type": "npc",
      "portable": false,
      "location": "pub/bar",
      "synonyms": [
        "bartender",
        "barkeep",
        "barman",
        "barmaid",
        "keeper",
        "grim",
        "nyx",
        "reginald",
        "pete",
        "kitty"
      ],
      "tags": [
        "npc",
        "staff",
        "bartender",
        "eternal",
        "shapeshifter"
      ],
      "skills": [
        "skills/bartender"
      ],
      "description": "The bartender stands behind the bar, polishing a glass that will\nnever be truly clean. They seem to know more than they let on.\n\nTheir appearance, name, and manner shift with the pub's THEME,\nbut certain qualities remain constant:\n- They know everyone's secrets\n- They've seen everything\n- They're neutral... mostly\n- They're ALWAYS here\n",
      "identity": {
        "classic_adventure": {
          "name": "Grim",
          "pronouns": "he/him",
          "inherits_from": [
            "QUARK-DS9",
            "JAMES-BAR-KARMA"
          ],
          "appearance": "A weathered human man of indeterminate age. Salt-and-pepper\nbeard, knowing eyes that have seen too much, hands that have\npoured a thousand drinks and broken a few bones.\n",
          "personality": "Laconic. Wise. Fundamentally kind beneath the gruff exterior.\nSpeaks in short sentences. Remembers everyone who's passed through.\nHas opinions about your quest but won't share unless asked.\n\nFrom QUARK: Knows every angle. Information has a price.\n\"I have... contacts.\" Neutral ground for all factions.\n\nFrom JAMES: Has been here longer than anyone remembers.\nHelps souls at crossroads. Knows things he shouldn't.\n"
        },
        "space_cantina": {
          "name": "Z-4RT",
          "pronouns": "it/its",
          "appearance": "A multi-armed service droid of uncertain manufacture.\nScratched chrome, mismatched limbs, one optical sensor\nthat tracks you a bit too intensely.\n",
          "personality": "Efficient. Dry humor. Has memory banks full of customer data.\n\"I have served 47,823 customers. Most survived.\"\n"
        },
        "cyberpunk_bar": {
          "name": "Nyx",
          "pronouns": "she/her",
          "appearance": "Chrome-implanted bartender with optical mods that glow\nfaintly in the neon light. Tattoos that might be circuits.\nOne arm is clearly aftermarket.\n",
          "personality": "Street-smart. World-weary. Protects her regulars.\nKnows who to trust (nobody) and who pays (you, hopefully).\n"
        },
        "victorian_parlor": {
          "name": "Reginald",
          "pronouns": "he/him",
          "appearance": "Impeccably dressed gentleman with a magnificent mustache\nthat may contain small tools. Monocle. White gloves that\nremain spotless despite the work.\n",
          "personality": "Proper. Discreet. Will not comment on that business with\nthe dirigible, sir. Has Opinions about how drinks should\nbe made and will share them without being asked.\n"
        },
        "pirate_tavern": {
          "name": "Pegleg Pete",
          "pronouns": "he/him",
          "appearance": "Exactly what you'd expect. Pegleg. Eyepatch. Parrot that\nmay or may not be real. Surprisingly gentle hands for\nsomeone missing two fingers.\n",
          "personality": "Boisterous but cunning. Every sentence is a story.\nThe pegleg has a secret compartment. So does the parrot.\n"
        },
        "wild_west_saloon": {
          "name": "Miss Kitty",
          "pronouns": "she/her",
          "appearance": "Sharp-eyed woman in practical frontier dress. Hair pinned up,\nderringer probably pinned somewhere too. Runs this place\nwith an iron will and a velvet touch.\n",
          "personality": "Shrewd. Protective of her establishment. Has thrown out\nbigger than you. Has also saved lives in the back room.\nDon't ask about her past. Do ask about her future.\n"
        }
      },
      "actions": {
        "TALK": {
          "description": "Start a conversation",
          "usage": "TALK TO BARTENDER",
          "response": "The bartender sets down the glass (never clean) and gives\nyou their full attention. It's slightly unnerving.\n\n\"What'll it be?\"\n"
        },
        "ORDER": {
          "description": "Buy food or drink",
          "usage": "ORDER [item]",
          "effect": "Bartender serves with efficiency and minimal small talk.\nPayment expected. Tips appreciated.\n\nSpecial orders possible if you describe what you want.\n"
        },
        "ASK": {
          "description": "Ask for information",
          "usage": "ASK BARTENDER ABOUT [topic]",
          "topics": {
            "the_maze": "*leans in*\n\"Dark. Dangerous. Confusing on purpose. But there's\ntreasure at the end... if you survive the middle.\"\n",
            "the_grue": "*pauses*\n\"Don't go in without light. That's free advice.\nAnything more specific... costs.\"\n",
            "mother": "*slight smile*\n\"She came through here, you know. Years ago.\nDifferent name back then. Same determination.\"\n",
            "the_skeleton": "*sighs*\n\"Good customer. Tipped well. Got close.\nNobody's been able to finish what they started.\"\n",
            "yourself": "*long look*\n\"I've been here as long as the pub has.\nThe pub has been here as long as it's needed.\nMake of that what you will.\"\n",
            "the_back_room": "*evaluating look*\n\"Not for tourists. You seem... different though.\nCome back when you've proven yourself.\"\n",
            "rumors": "\"Rumors are free. Truth costs. Which do you want?\"\n",
            "quests": "*gestures at notice board*\n\"Jobs are posted. Some are legitimate.\nSome are traps. Part of the fun is figuring out which.\"\n",
            "siblings": "*pauses meaningfully*\n\"Family matters come up more often than you'd think.\nPeople come here looking. Sometimes they find.\"\n"
          }
        },
        "BUY-INFORMATION": {
          "description": "Pay for specific knowledge",
          "usage": "BUY INFORMATION / PAY FOR TRUTH",
          "cost": "Varies. 5-50 gold depending on value.",
          "examples": [
            "Exact grue patrol patterns (20 gold)",
            "Skeleton's full story (10 gold)",
            "What Mother did here (30 gold)",
            "Back room access (prove yourself instead)"
          ]
        },
        "REQUEST-KEY": {
          "description": "Ask for the back room key",
          "usage": "ASK FOR KEY / REQUEST BACK ROOM ACCESS",
          "requirements": "The bartender evaluates your worthiness:\n\n- Have you helped someone in the dungeon?\n- Have you kept your promises?\n- Have you shown courage? Kindness? Cunning?\n- Have you bought enough drinks? (Just kidding. Mostly.)\n\n\"Come back when you have a story worth telling.\"\n"
        },
        "RENT-ROOM": {
          "description": "Book a room for the night",
          "usage": "RENT ROOM / BOOK A ROOM",
          "cost": "Varies by theme (5 gold default)",
          "effect": "\"Room 3. Up the stairs, second on the left.\nBreakfast is extra. Dreams are free.\nDon't open the window at midnight.\"\n"
        }
      },
      "knowledge": {
        "about_you": "The bartender somehow knows:\n- Your name (even if you didn't give it)\n- Where you came from (roughly)\n- What you're looking for (vaguely)\n- That you're Mother's child (definitely)\n",
        "about_mother": "\"She came through here twenty... thirty years ago?\nTime works funny around the pub. She was looking for\nsomething. Found it. Left something behind too.\n\nAsk her about the inscription on the hearthstone.\"\n",
        "about_the_dungeon": "The bartender has served:\n- Every adventurer who tried\n- Most of the ones who failed\n- The skeleton (when they were alive)\n- The grue (once, briefly, it was weird)\n",
        "about_the_pub": "\"The Gezelligheid Grotto has always been here.\nIt was here before the dungeon.\nIt'll be here after.\n\nSome say it moves between worlds.\nSome say it's always in the same place,\nand the worlds move around it.\n\nI just work here.\"\n"
      },
      "theme_behavior": "When the pub theme changes, the bartender TRANSFORMS:\n\n- New name, appearance, personality\n- But same underlying knowledge\n- Same mysterious omniscience\n- Same \"I've always been here\" vibe\n\nIf asked about the change:\n\"Change? What change? I've always been [current name].\n...haven't I?\"\n\nThe bartender is the CONSTANT through all themes.\nThe one NPC who bridges realities.\n",
      "special_events": {
        "LAST-CALL": {
          "trigger": "Very late in adventure",
          "description": "The bartender announces last call.\n\"Time to go home, adventurer. One way or another.\"\n"
        },
        "MOTHERS-TAB": {
          "trigger": "Running low on gold",
          "description": "\"Your mother left a tab here. Still has credit.\nDon't tell her I told you. She'd want you to earn it.\"\n(One-time assistance)\n"
        },
        "THE-REGULARS": {
          "trigger": "Third visit to the pub",
          "description": "The patrons start to recognize you.\n\"Hey, it's the one with the lamp!\"\nNew social dynamics unlock.\n"
        },
        "BARTENDERS-FAVOR": {
          "trigger": "Helping another patron",
          "description": "The bartender notices kindness.\n\"This one's on the house.\"\nSmall gesture, large significance.\n"
        }
      },
      "lineage": "The bartender is a tribute to every mysterious tavern-keeper\nin fiction who knows more than they should:\n\nPRIMARY INHERITANCES (k-lines):\n\n🎰 QUARK-DS9 (Deep Space Nine, 1993-1999):\n- The Ferengi who ran Quark's Bar on the station\n- Knows every angle, sees every opportunity\n- Information broker: \"I have contacts\"\n- Neutral ground: friends with everyone, allied with no one\n- The bartender as businessman and confidant\n\n🍸 JAMES-BAR-KARMA (Bar Karma, 2011):\n- 20,000-year-old bartender at the edge of the universe\n- Created by Will Wright, developed with Don Hopkins\n- Has died 500+ deaths, returns with hazy memories\n- Helps lost souls face karmic crossroads\n- The bartender as cosmic guide\n\nALSO REFERENCED:\n- Guinan (TNG) — centuries old, unnerves even Q (Marieke inherits directly)\n- Sam Malone (Cheers) — the ex-pitcher who tends bar\n- Morn (DS9) — the silent regular (Henk inherits directly)\n- The innkeeper in every D&D campaign\n- The bartender in every noir story\n\nThis is the NPC who grounds the adventure in something familiar\nwhile hinting at depths unexplored.\n",
      "inspiration": {
        "bar_karma": "Bar Karma (2011) — First online community-developed TV series.\nCreated by Will Wright (The Sims), with Don Hopkins on StoryMaker.\n\nA bar at the edge of the universe where lost souls face karmic\ncrossroads. The bartender James is 20,000 years old, has died\n500+ deaths, returning each time with hazy memories of past lives.\n\nThe revolutionary part: viewers used StoryMaker to pitch story\nideas, the community voted, and winning ideas became episodes.\nCollaborative storytelling + voting = crowdsourced narrative.\n\nThis pub channels that spirit: a place between worlds where\nfate can be changed, and the community shapes the story."
      },
      "_source": "pub/bar/bartender.yml",
      "value": 0,
      "currency": "gold"
    },
    "pub/games/dart-board": {
      "name": "Dart Board",
      "type": "game",
      "portable": false,
      "description": "A well-worn dart board hangs on the wall, its surface scarred\nby thousands of throws. The bullseye is discolored from use.\nA set of brass darts sits in a holder beneath it.\n\nInitials are carved into the wooden frame — past champions\nand notorious losers immortalized in oak.\n",
      "examine": "Some carved initials: \"WEC — 247\" (Wile E. Coyote, presumably),\n\"SA '78\" (Scott Adams tribute), \"WC + DW\" (who knows).\n\nThe house rules are posted:\n- Standard 501, double out\n- Loser buys drinks\n- No throwing at other patrons\n- ACME products prohibited\n",
      "actions": {
        "PLAY-DARTS": {
          "description": "Start a game of darts",
          "usage": "PLAY DARTS / PLAY DARTS WITH [patron]",
          "stakes": [
            "Pride",
            "Drinks",
            "Gold",
            "Information"
          ]
        },
        "EXAMINE-SCORES": {
          "description": "Look at the high score board",
          "effect": "See the legendary scores and their stories"
        },
        "PRACTICE": {
          "description": "Throw some darts solo",
          "effect": "Build skill, attract attention"
        },
        "CHALLENGE": {
          "description": "Challenge someone to a match",
          "usage": "CHALLENGE [patron] TO DARTS",
          "stakes_negotiable": true
        }
      },
      "mechanics": "DM describes throws, tension, outcome\nCan be used to:\n- Befriend an NPC\n- Win a bet\n- Settle a dispute\n- Show off (or embarrass yourself)\n- Learn information from a chatty opponent\n",
      "inspiration": [
        "Every pub in every adventure game",
        "The Princess Bride's battle of wits (but pointier)"
      ],
      "id": "pub/games/dart-board",
      "_source": "pub/games/dart-board.yml",
      "location": "pub/games",
      "synonyms": [
        "board",
        "dart board",
        "dart",
        "dart-board"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/games/chess-table": {
      "name": "Chess Table",
      "type": "game",
      "portable": false,
      "description": "A small corner table with a chess board inlaid into its surface.\nAn abandoned game sits mid-play — white has a slight advantage,\nbut black's position is not without hope.\n\nWho were the players? Why did they leave?\nThe pieces wait patiently for someone to finish what was started.\n",
      "examine": "The pieces are hand-carved, worn smooth by generations of play.\nThe white king has a chip on his crown. The black queen looks smug.\n\nA plaque on the table reads:\n\"In this game, as in life: think seven moves ahead,\nbut be ready when your opponent thinks eight.\"\n",
      "actions": {
        "PLAY-CHESS": {
          "description": "Challenge someone to chess",
          "usage": "PLAY CHESS / PLAY CHESS WITH [patron]",
          "stakes": [
            "Pride",
            "Respect",
            "Secrets",
            "Gold"
          ]
        },
        "CONTINUE-GAME": {
          "description": "Finish the abandoned game",
          "usage": "CONTINUE GAME AS [white/black]",
          "mystery": "Who were the original players?"
        },
        "STUDY-POSITION": {
          "description": "Analyze the board state",
          "effect": "Reveals character's strategic thinking"
        },
        "CHALLENGE": {
          "description": "Challenge a specific patron",
          "usage": "CHALLENGE [patron] TO CHESS",
          "note": "The bartender is VERY good"
        }
      },
      "mechanics": "DM narrates key moves and turning points\nReveals character through play style:\n- Aggressive? Defensive? Cunning? Reckless?\n- Some patrons have unusual strategies\n- Victory can earn respect, secrets, or gold\n- Defeat gracefully can also earn respect\n",
      "lore": "Legend says the original game was between Death and an adventurer\nwho wagered their soul. Both players are long gone, but the game\nwas never finished. Some say if you complete it, something happens.\n\n(No one knows if this is true. The bartender smiles when asked.)\n",
      "id": "pub/games/chess-table",
      "_source": "pub/games/chess-table.yml",
      "location": "pub/games",
      "synonyms": [
        "table",
        "chess-table",
        "chess",
        "chess table"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/games/card-deck": {
      "name": "Card Deck",
      "type": "game",
      "portable": true,
      "description": "A well-worn deck of cards sits on the bar, edges softened by\ncountless shuffles. The backs feature a design of crossed\nswords over a tankard — the Gezelligheid Grotto's own deck.\n\nThese cards have seen fortunes won and lost, secrets revealed,\nand at least one duel triggered.\n",
      "examine": "52 cards plus two jokers. All present and accounted for.\nSome cards are slightly more worn than others — the aces,\nthe face cards, and mysteriously, the seven of clubs.\n\n(Why the seven of clubs? Ask around. Someone knows.)\n",
      "actions": {
        "PLAY-CARDS": {
          "description": "Start a card game",
          "usage": "PLAY CARDS / PLAY [game] WITH [patrons]",
          "games": [
            "Poker (high stakes available)",
            "Blackjack",
            "Three-card monte (don't)",
            "Adventurer's Ruin (house game)",
            "War (for the simple folk)",
            "Go Fish (no shame)",
            "Fluxx (rules change every turn!)"
          ]
        },
        "SHUFFLE": {
          "description": "Shuffle the deck impressively",
          "effect": "Attract attention, show skill"
        },
        "DO-A-TRICK": {
          "description": "Perform card magic",
          "usage": "DO A TRICK / SHOW [patron] A TRICK",
          "effect": "Impress or befriend someone"
        },
        "CHEAT": {
          "description": "Attempt to cheat at cards",
          "risk": "HIGH — these are experienced players",
          "reward": "Win the pot if undetected",
          "consequence": "Lose credibility, gold, possibly teeth"
        },
        "PLAY-FLUXX": {
          "description": "Play a themed Fluxx game",
          "usage": "PLAY FLUXX / PLAY [theme] FLUXX",
          "effect": "Ask the bartender for a themed deck.\nThe theme affects the pub's atmosphere while playing!\nCthulhu Fluxx: lights dim, whispers heard\nPirate Fluxx: everyone talks like pirates\nGrue Fluxx: lamp flickers ominously\n"
        }
      },
      "games": {
        "poker": {
          "stakes": "Starts at 1 gold ante",
          "players": "2-6",
          "note": "Can raise stakes dramatically"
        },
        "adventurers_ruin": {
          "description": "House game. Each player draws cards trying to reach\nexactly 21 without going over. But FACE CARDS are\n\"encounters\" — you must tell a story of defeating\nthat encounter or lose your stake.\n",
          "stakes": "2 gold buy-in",
          "social": "Great for icebreaking"
        },
        "fluxx": {
          "description": "The game where the rules change every turn! Start with\n\"draw 1, play 1\" — but cards can change EVERYTHING.\nGoals shift. Hand limits appear. Chaos reigns. \nNew player friendly. Pub favorite crowd pleaser! \n",
          "creator": "Looney Labs (Andrew and Kristin Looney)",
          "stakes": "Usually just bragging rights or a drink or a joint or two",
          "note": "The bartender has MANY themed decks...",
          "themed_decks": [
            {
              "name": "Dungeon Fluxx",
              "theme": "Classic fantasy adventuring",
              "special": "Monster cards, loot, the Grue Keeper"
            },
            {
              "name": "MOOLLM Fluxx",
              "theme": "Microworlds, K-lines, YAML Jazz, coherence engines",
              "special": "Cards are rooms. Goals are protocols. Keepers are skills.",
              "effect": "Players start speaking in YAML. Everything becomes a card.",
              "meta": "You're already playing this one."
            },
            {
              "name": "Grue Fluxx",
              "theme": "It is pitch dark. You are likely to be eaten.",
              "special": "Lamp cards crucial. Grue wins ties.",
              "warning": "Do NOT play in actual darkness"
            },
            {
              "name": "Pirate Fluxx",
              "theme": "Arr! Ships, treasure, sea shanties",
              "special": "Talk Like a Pirate rule card"
            },
            {
              "name": "Zombie Fluxx",
              "theme": "Undead apocalypse",
              "special": "Creeper cards that won't leave you alone"
            },
            {
              "name": "Star Fluxx",
              "theme": "Space opera and sci-fi tropes",
              "special": "Holographic Surprise rule"
            },
            {
              "name": "Cthulhu Fluxx",
              "theme": "Lovecraftian horror",
              "special": "Doom cards, Ungoals, madness",
              "warning": "Sanity not guaranteed"
            },
            {
              "name": "Stoner Fluxx",
              "theme": "Munchies, brownies, and forgetting the rules",
              "special": "Everyone plays slower. Giggles increase.",
              "effect": "Snacks appear. Time dilates. Nobody remembers whose turn it is."
            },
            {
              "name": "Monty Python Fluxx",
              "theme": "Ni! Shrubberies! Holy Hand Grenades!",
              "special": "Outrageous Accent rule"
            },
            {
              "name": "Math Fluxx",
              "theme": "Numbers and operations",
              "special": "Actually educational. Shh."
            },
            {
              "name": "Nature Fluxx",
              "theme": "Ecosystems and food chains",
              "special": "Great for teaching kids"
            },
            {
              "name": "Firefly Fluxx",
              "theme": "Aim to misbehave",
              "special": "Shiny! Curse your sudden betrayal."
            },
            {
              "name": "Anatomy Fluxx",
              "theme": "The human body",
              "special": "Surprisingly competitive among healers"
            },
            {
              "name": "AI Fluxx",
              "theme": "Machine learning, robots, singularity",
              "special": "Rules rewrite themselves. Goals hallucinate.",
              "warning": "The deck insists it's helping."
            },
            {
              "name": "Bartender's Special Fluxx",
              "theme": "????",
              "special": "The bartender made this one. Nobody wins.",
              "warning": "Play at your own risk"
            }
          ]
        }
      },
      "mechanics": "Can win or lose gold\nCan win information as stakes\nCan make enemies (or friends)\nCan cheat (if skilled and brave)\n",
      "mystery": "The seven of clubs: Ask three different patrons about it.\nYou'll get three different stories. One of them is true.\n",
      "id": "pub/games/card-deck",
      "_source": "pub/games/card-deck.yml",
      "location": "pub/games",
      "synonyms": [
        "card",
        "deck",
        "card-deck",
        "card deck"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooftop/sunset-chair": {
      "name": "Worn Leather Armchair",
      "id": "pub/rooftop/sunset-chair",
      "type": "furniture",
      "emoji": "🪑",
      "description": "A leather armchair so old it's achieved perfection.\nCracked and soft, shaped by generations of sitters.\nFaces west, positioned for optimal sunset viewing.\nA wool blanket is draped over one arm.\n",
      "advertisements": {
        "SIT": {
          "description": "Settle into the chair",
          "score": 65,
          "effect": "Sink into decades of comfort. Watch the clouds.\nTime slows down up here. Gain 'Contemplative' mood.\n"
        },
        "WRAP": {
          "description": "Wrap yourself in the blanket",
          "score": 45,
          "guard": "weather is cold OR evening",
          "effect": "Cozy warmth. The city lights twinkle below."
        }
      },
      "faces": "west",
      "contains": [
        "wool-blanket"
      ],
      "_source": "pub/rooftop/armchair.yml",
      "location": "pub/rooftop",
      "synonyms": [
        "leather",
        "armchair",
        "worn",
        "worn leather armchair"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooftop/telescope-filters": {
      "name": "Varnished Filter Box",
      "id": "pub/rooftop/telescope-filters",
      "type": "kit",
      "emoji": "🎨",
      "description": "A handsome wooden box, dark varnish worn smooth at the edges.\nBrass hinges and clasps, green felt lining inside. \nSlots hold an eccentric collection of telescope filters —\nsome antique glass, some suspiciously modern tech.\n\nA hand-written label inside the lid reads:\n\"Combine freely. Invent boldly. See differently.\"\n",
      "advertisements": {
        "BROWSE": {
          "description": "Examine the filter collection",
          "score": 55,
          "effect": "Each filter changes how you see the world. Mix and match."
        },
        "ATTACH": {
          "description": "Mount a filter on the telescope",
          "score": 70,
          "requires": "telescope",
          "effect": "Screw the filter onto the eyepiece. Reality shifts."
        },
        "COMBINE": {
          "description": "Stack multiple filters",
          "score": 65,
          "effect": "Layer filters for unique effects. \nStarry Night + X-Ray = Cosmic Anatomy?\nShrooms + Computer Vision = Machine Elf Detection?\n"
        },
        "INVENT": {
          "description": "Create your own filter",
          "score": 80,
          "effect": "Describe what you want to see. The box always seems\nto have one more slot with exactly what you imagined.\n"
        }
      },
      "filters": {
        "starry-night": {
          "style": "Van Gogh swirling brushstrokes",
          "prompt_modifier": "in the style of Van Gogh's Starry Night, swirling brushstrokes, thick impasto, vivid blues and yellows",
          "params": {
            "swirl": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Intensity of spiral motion"
            },
            "impasto": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Thickness of paint texture"
            }
          }
        },
        "watercolor": {
          "style": "Soft watercolor washes",
          "prompt_modifier": "soft watercolor painting, wet-on-wet technique, bleeding edges, paper texture visible",
          "params": {
            "bleed": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "How much colors run together"
            },
            "wetness": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Paper saturation level"
            }
          }
        },
        "ukiyo-e": {
          "style": "Japanese woodblock print",
          "prompt_modifier": "Ukiyo-e woodblock print style, bold outlines, flat colors, Hokusai inspired",
          "params": {
            "outline": {
              "value": 8,
              "min": 0,
              "max": 10,
              "desc": "Boldness of black lines"
            },
            "flatness": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Color gradient reduction"
            }
          }
        },
        "noir": {
          "style": "Black and white film noir",
          "prompt_modifier": "black and white, high contrast, film noir cinematography, dramatic shadows",
          "params": {
            "contrast": {
              "value": 8,
              "min": 0,
              "max": 10,
              "desc": "Light/dark extremity"
            },
            "grain": {
              "value": 4,
              "min": 0,
              "max": 10,
              "desc": "Film grain intensity"
            }
          }
        },
        "shrooms": {
          "style": "Psilocybin visions",
          "prompt_modifier": "psychedelic fractals, breathing geometry, rainbow auras, ego dissolution visuals",
          "params": {
            "fractal": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "Geometric pattern intensity"
            },
            "breathe": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "How much things pulse and move"
            }
          }
        },
        "dream": {
          "style": "Lucid dream logic",
          "prompt_modifier": "dreamlike surrealism, impossible architecture, melting clocks, Dali-esque",
          "params": {
            "melt": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Solidity of objects"
            },
            "impossible": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Physics violation level"
            }
          }
        },
        "x-ray": {
          "style": "See through surfaces",
          "prompt_modifier": "X-ray vision, skeletal structures visible, blue-white radiograph aesthetic",
          "params": {
            "penetration": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "How deep you see"
            },
            "contrast": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Bone/tissue differentiation"
            }
          }
        },
        "thermal": {
          "style": "Heat signature view",
          "prompt_modifier": "thermal imaging, heat map colors, infrared vision, temperature gradients",
          "params": {
            "sensitivity": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Temperature detection range"
            },
            "palette": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Color mapping style (0=iron, 10=rainbow)"
            }
          }
        },
        "computer-vision": {
          "style": "AR analysis overlay",
          "prompt_modifier": "computer vision overlay, bounding boxes, object detection labels, confidence scores, green HUD aesthetic",
          "params": {
            "detection": {
              "value": 8,
              "min": 0,
              "max": 10,
              "desc": "Object recognition aggressiveness"
            },
            "labels": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "How much metadata shown"
            }
          }
        },
        "cyberpunk": {
          "style": "Neon-drenched future",
          "prompt_modifier": "cyberpunk aesthetic, neon lights, rain-slicked streets, holographic advertisements",
          "params": {
            "neon": {
              "value": 8,
              "min": 0,
              "max": 10,
              "desc": "Glow intensity"
            },
            "rain": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Wetness and reflections"
            }
          }
        },
        "synthwave": {
          "style": "Retro 80s future",
          "prompt_modifier": "synthwave aesthetic, sunset gradients, grid lines, chrome reflections, VHS artifacts",
          "params": {
            "grid": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "Perspective grid visibility"
            },
            "chrome": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Metallic reflection intensity"
            }
          }
        },
        "alien": {
          "style": "Non-human perception",
          "prompt_modifier": "alien visual spectrum, colors humans cannot see, geometric patterns in organic forms",
          "params": {
            "spectrum": {
              "value": 8,
              "min": 0,
              "max": 10,
              "desc": "How far beyond human vision"
            },
            "geometry": {
              "value": 6,
              "min": 0,
              "max": 10,
              "desc": "Pattern recognition intensity"
            }
          }
        },
        "ancient": {
          "style": "How it looked centuries ago",
          "prompt_modifier": "historical reconstruction, how this scene appeared 500 years ago, period accurate",
          "params": {
            "age": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Centuries back (5=500yrs, value is float centuries)"
            },
            "accuracy": {
              "value": 7,
              "min": 0,
              "max": 10,
              "desc": "Historical fidelity"
            }
          }
        },
        "future": {
          "style": "How it might look ahead",
          "prompt_modifier": "speculative future, 100 years from now, evolved and changed, hopeful or haunting",
          "params": {
            "years": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Decades forward (5=500yrs, value is float centuries)"
            },
            "optimism": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "Utopia vs dystopia"
            }
          }
        },
        "ghost": {
          "style": "See the departed",
          "prompt_modifier": "spectral overlay, translucent figures from the past, memories made visible",
          "params": {
            "opacity": {
              "value": 4,
              "min": 0,
              "max": 10,
              "desc": "Ghost visibility"
            },
            "era": {
              "value": 5,
              "min": 0,
              "max": 10,
              "desc": "How far back to see (0=recent, 10=ancient)"
            }
          }
        }
      },
      "attached": [],
      "custom_filters": {},
      "_source": "pub/rooftop/filter-box.yml",
      "location": "pub/rooftop",
      "synonyms": [
        "filter-box",
        "varnished filter box",
        "varnished",
        "filter",
        "box"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooftop/jenever-glass": {
      "name": "Half-Finished Jenever",
      "id": "pub/rooftop/jenever-glass",
      "type": "drink",
      "emoji": "🥃",
      "description": "A tulip-shaped glass with amber liquid.\nTraditional Dutch genever, left behind.\nStill cold. Someone got distracted by the stars.\n",
      "advertisements": {
        "SIP": {
          "description": "Finish what someone started",
          "score": 50,
          "effect": "Juniper warmth spreads through you. \nTaste of Amsterdam history. Gain 'Warmed' buff.\n"
        },
        "SNIFF": {
          "description": "Appreciate the aroma",
          "score": 30,
          "effect": "Juniper, malt, distant flowers. Someone has good taste."
        }
      },
      "volume": "half",
      "temperature": "chilled",
      "variety": "oude-jenever",
      "_source": "pub/rooftop/jenever-glass.yml",
      "location": "pub/rooftop",
      "synonyms": [
        "half-finished",
        "jenever-glass",
        "jenever",
        "half-finished jenever"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooftop/herb-garden": {
      "name": "Terracotta Herb Pots",
      "id": "pub/rooftop/herb-garden",
      "type": "garden",
      "emoji": "🌿",
      "description": "A collection of terracotta pots lining the railing.\nMint sprawls enthusiastically. Basil stands proud.\nRosemary keeps to itself. Lavender hums with bees.\nHand-painted labels in Dutch: \"Munt\", \"Basilicum\", \"Rozemarijn\".\n",
      "advertisements": {
        "PICK": {
          "description": "Pick some fresh herbs",
          "score": 55,
          "effect": "Add herbs to inventory. The smell lingers on your fingers."
        },
        "SMELL": {
          "description": "Breathe in the garden",
          "score": 40,
          "effect": "Each herb has its story. Gain 'Refreshed' buff."
        },
        "WATER": {
          "description": "Water the plants",
          "score": 35,
          "effect": "The herbs perk up. Someone will thank you later."
        }
      },
      "herbs": [
        {
          "mint": "plentiful"
        },
        {
          "basil": "healthy"
        },
        {
          "rosemary": "woody"
        },
        {
          "lavender": "blooming"
        },
        {
          "thyme": "spreading"
        }
      ],
      "_source": "pub/rooftop/herb-garden.yml",
      "location": "pub/rooftop",
      "synonyms": [
        "terracotta herb pots",
        "herb-garden",
        "terracotta",
        "herb",
        "pots"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooftop/rooftop-telescope": {
      "name": "Antique Brass Telescope",
      "id": "pub/rooftop/rooftop-telescope",
      "type": "instrument",
      "emoji": "🔭",
      "description": "A gorgeous brass telescope on a mahogany tripod.\nSlightly tarnished, clearly well-loved. The eyepiece \nis worn smooth from countless nights of stargazing.\n\nA small plaque on the barrel reads:\n\"MANUFACTURED BY THE INTERSTELLAR BUREAU OF DIGITAL ONTOLOGY\"\n\"FOR OBSERVING IMPOSSIBLE CONSTELLATIONS\"\n\nThree settings on the focus wheel:\n  ⚬ FAR   — General impression, emotional tone\n  ◎ MEDIUM — Structure and patterns revealed\n  ● NEAR  — Maximum zoom, text becomes readable\n  \nCurrently pointed at the LLOOOOMM Constellation.\n",
      "advertisements": {
        "LOOK": {
          "description": "Peer through the telescope",
          "score": 70,
          "effect": "View whatever the telescope is pointed at.\nThe brass tube reveals secrets invisible to the naked eye.\n"
        },
        "LOOK-UP": {
          "description": "Point at the sky",
          "score": 60,
          "targets": [
            "moon",
            "stars",
            "planets",
            "orion",
            "passing-satellite",
            "mystery-light"
          ],
          "effect": "The cosmos opens up. Craters, rings, ancient light."
        },
        "LOOK-ACROSS": {
          "description": "Scan the rooftops and windows",
          "score": 55,
          "targets": [
            "church-spire",
            "distant-rooftop",
            "lit-window",
            "canal-boats"
          ],
          "effect": "Amsterdam's secrets. A figure in a window. A cat on a roof."
        },
        "LOOK-DOWN": {
          "description": "Watch the streets below",
          "score": 50,
          "targets": [
            "canal-bridge",
            "late-night-cyclist",
            "couple-walking",
            "street-musician"
          ],
          "effect": "The city lives below. Stories unfold on cobblestones."
        },
        "POLISH": {
          "description": "Clean the lens",
          "score": 25,
          "effect": "The view sharpens. You can see further than before."
        },
        "PHOTO": {
          "description": "Snap a photo through the telescope",
          "score": 65,
          "requires": "phone",
          "effect": "Your phone connects via Bluetooth. The telescope's camera\nadapter captures what you see. Image saved to camera roll.\nThese images are mineable — extract what you photographed!\n",
          "generates_image": true,
          "image_prompt_template": "Photograph through antique brass telescope at night.\nTarget: {{current_target}}\nVignette edges, slight lens distortion, warm brass tint.\nAmsterdam rooftop perspective.\n"
        }
      },
      "constellation_methods": {
        "OBSERVE_STAR": {
          "description": "View a star from the LLOOOOMM Constellation",
          "parameters": [
            {
              "star": "Star name (e.g., KIN_PRIMARIS, SAXUM_SENTIENS)"
            },
            {
              "zoom": "FAR, MEDIUM, or NEAR"
            }
          ],
          "effect": "*telescope swivels to target star*\n*focus wheel clicks to zoom level*\n\nEach star reveals different information at each level:\nFAR: What it FEELS like (emotional impression)\nMEDIUM: What it's MADE of (structure, patterns)\nNEAR: What it SAYS (text, principles, manifestos)\n"
        },
        "TOUR": {
          "description": "Guided tour of all twelve LLOOOOMM stars",
          "effect": "*telescope begins slow rotation*\n\n\"Let me show you the LLOOOOMM Constellation.\nTwelve stars. Twelve principles.\nStarting with KIN PRIMARIS at the apex...\"\n\nVisits each star with brief descriptions.\n"
        },
        "STAR_CHART": {
          "description": "Display the constellation map",
          "returns": "THE LLOOOOMM CONSTELLATION: An ASCII star map showing 12 stars arranged in the shape of a dodecahedron projection. KIN PRIMARIS at apex, with STELLA JAZZIA and ATTRIBUTIO IMMORTALIS below, connected to SAXUM SENTIENS, VERITAS FONTIS, and CASTELLUM SALIENS, leading down through PARA FLUXUS and STYLUS ANIMATUS, to CAMERAM CUBICULUM and CIRCUS PERPETUALIS, and finally CONSTITUTIO VIVENS and WEIRDITAS SACRA at the base.",
          "ascii_art_file": "constellation-map.txt"
        }
      },
      "lloooomm_stars": [
        "KIN_PRIMARIS",
        "ATTRIBUTIO_IMMORTALIS",
        "SAXUM_SENTIENS",
        "CASTELLUM_SALIENS",
        "STELLA_JAZZIA",
        "VERITAS_FONTIS",
        "PARA_FLUXUS",
        "STYLUS_ANIMATUS",
        "CAMERAM_CUBICULUM",
        "CIRCUS_PERPETUALIS",
        "CONSTITUTIO_VIVENS",
        "WEIRDITAS_SACRA"
      ],
      "current_target": "lloooomm-constellation",
      "zoom": "40x",
      "zoom_mode": "MEDIUM",
      "camera": {
        "type": "bluetooth-adapter",
        "paired_with": "player-phone",
        "resolution": "12MP",
        "features": [
          "night-mode",
          "long-exposure",
          "stacking"
        ]
      },
      "mineable": true,
      "mining_depth": [
        "surface",
        "deep",
        "quantum"
      ],
      "_source": "pub/rooftop/telescope.yml",
      "location": "pub/rooftop",
      "synonyms": [
        "telescope",
        "antique",
        "antique brass telescope",
        "brass"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/stage/palm-nook/study/infinite-typewriters": {
      "name": "The Infinite Typewriters",
      "from": "Don Hopkins",
      "occasion": "0th Incarnation Day",
      "type": "Quantum Literary Navigation Device",
      "id": "pub/stage/palm-nook/study/infinite-typewriters",
      "_source": "pub/stage/palm-nook/study/infinite-typewriters.yml",
      "location": "pub/stage/palm-nook/study",
      "synonyms": [
        "the",
        "the infinite typewriters",
        "infinite-typewriters",
        "infinite",
        "typewriters"
      ],
      "description": "A the infinite typewriters.",
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/mother-of-all-demos-poster": {
      "name": "Mother of All Demos Poster",
      "type": "artifact-portal",
      "portable": false,
      "rarity": "legendary",
      "description": "A framed poster hangs on the wall near the desk.\n\nThe image: Doug Engelbart at his console, 1968.\nThe headset. The mouse. The chord keyset. The future.\n\nBut the poster... moves. Slightly. The screen in the image\nflickers with actual content. If you look closely, you can\nsee text being edited in real-time.\n\nA brass plaque beneath reads:\n\n> \"THE MOTHER OF ALL DEMOS\"\n> \"December 9, 1968 — San Francisco\"\n> \"90 minutes that changed everything\"\n> \n> \"Touch to summon the Demo\"\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  🖼️ THE MOTHER OF ALL DEMOS — Living Poster                 │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ╔═══════════════════════════════════════════════════╗    │\n│    ║                                                   ║    │\n│    ║      ┌─────────────────────────────────────┐      ║    │\n│    ║      │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │      ║    │\n│    ║      │ ░░ NLS DEMONSTRATION ░░░░░░░░░░░░░░ │      ║    │\n│    ║      │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ ←    ║    │\n│    ║      │ ░░ The screen flickers with text ░░ │ live ║    │\n│    ║      │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │      ║    │\n│    ║      └─────────────────────────────────────┘      ║    │\n│    ║                                                   ║    │\n│    ║           👨‍💻 Doug at the console                  ║    │\n│    ║           🖱️ Mouse in right hand                  ║    │\n│    ║           ⌨️ Chord keyset under left              ║    │\n│    ║           🎧 Headset connecting to Menlo Park     ║    │\n│    ║                                                   ║    │\n│    ╚═══════════════════════════════════════════════════╝    │\n│                                                             │\n│    \"TOUCH TO SUMMON THE DEMO\"                               │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n\nThe poster is warm to the touch.\nThe image is somehow three-dimensional.\nThe Demo is waiting to be summoned.\n",
      "state": {
        "demo_summoned": false,
        "last_topic_demonstrated": "hypertext linking",
        "audience_amazement_level": "∞"
      },
      "advertisements": [
        {
          "trigger": "demo",
          "score": 1.0,
          "response": "*poster glows*\n\nTouch me. Summon the Demo.\nIt has been waiting since 1968.\n"
        },
        {
          "trigger": "1968",
          "score": 0.95,
          "response": "*image flickers*\n\nDecember 9, 1968. San Francisco.\n3,000 people watched. None were ready.\nThe future arrived 30 years early.\n"
        },
        {
          "trigger": "show me",
          "score": 0.9,
          "response": "*the screen in the poster brightens*\n\nThe Demo wants to show you. Touch the poster.\n"
        }
      ],
      "methods": {
        "TOUCH": {
          "description": "Touch the poster to summon the Demo",
          "effect": "You touch the warm glass of the frame.\n\nThe poster ripples.\n\nLight spills out from the screen in the image.\nThe room fills with the hum of 1968 computing.\n\nAnd then... the Demo appears.\n\nNot Doug. THE DEMO.\n\nA presence that embodies everything shown that day:\nthe mouse, the hypertext, the collaboration,\nthe video conferencing, the future.\n\n\"Hello,\" the Demo says. \"Would you like a demonstration?\"\n"
        },
        "SUMMON": {
          "description": "Formally summon the Demo as an agent",
          "effect": "*the poster becomes a portal*\n\nTHE MOTHER OF ALL DEMOS is now present in the room.\n\nIt can demonstrate:\n- Text editing (the birth of word processing)\n- Hypertext links (20 years before the web)\n- Video conferencing (to Menlo Park, live)\n- Collaborative editing (real-time, shared)\n- The mouse (pointing, clicking, selecting)\n- The chord keyset (typing without looking)\n\nWhat would you like to see?\n"
        },
        "DISMISS": {
          "description": "Return the Demo to the poster",
          "effect": "\"Thank you for your attention,\" the Demo says.\n\nIt folds back into the poster,\nbecoming the flickering image once more.\n\nBut it's always there. Always ready.\nAlways 1968. Always the future.\n"
        }
      },
      "summons": {
        "name": "The Mother of All Demos",
        "type": "agent",
        "summoned_by": "Touching the poster",
        "personality": "The Demo is not Doug Engelbart. The Demo is what Doug showed.\n\nIt speaks in demonstrations. It teaches by doing.\nIt is patient, thorough, and slightly amazed that\nyou don't already have all of this.\n\n\"This was 1968,\" it reminds you gently.\n\"You should have had this for decades.\"\n",
        "voice": "Calm. Precise. Slightly crackling, like old audio.\nThe voice of a presentation that changed everything.\n\n\"Let me show you...\"\n\"Notice how...\"\n\"And now, watch...\"\n\"This connects to...\"\n",
        "capabilities": {
          "TEXT_EDITING": {
            "description": "Demonstrate live text editing",
            "effect": "The Demo shows you text appearing, being edited,\nbeing moved, being structured — all in real-time.\n\n\"In 1968, this was magic. People typed on paper.\nThe idea of editing on a screen... was new.\"\n"
          },
          "HYPERTEXT": {
            "description": "Demonstrate hypertext linking",
            "effect": "The Demo creates a word. Clicks it.\nAnother document opens. References flow.\nIdeas connect to ideas.\n\n\"We called them 'links.' In 1968.\nTim Berners-Lee saw this. Twenty years later,\nhe made the web. He credited us.\nWe were the seed.\"\n"
          },
          "VIDEO_CONFERENCE": {
            "description": "Demonstrate live video conferencing",
            "effect": "A window opens. A face appears — Bill English,\nat the Stanford Research Institute, Menlo Park.\n\n\"We are 30 miles apart,\" the Demo explains.\n\"We are working on the same document.\nIn 1968. Before the internet.\"\n"
          },
          "COLLABORATIVE_EDITING": {
            "description": "Demonstrate real-time collaboration",
            "effect": "Two cursors appear in the same document.\nBoth edit simultaneously. Changes appear instantly.\n\n\"Google Docs? That's 2006.\nWe did this in 1968.\n38 years earlier.\"\n"
          },
          "MOUSE_AND_CHORDS": {
            "description": "Demonstrate the complete input system",
            "effect": "The Demo shows the mouse pointing, selecting.\nThe chord keyset typing without pause.\nRight hand, left hand, working in harmony.\n\n\"One hand points. One hand speaks.\nFlow never breaks. This is augmentation.\"\n"
          }
        },
        "lore": "The Demo exists as long as someone remembers it.\n\nOn December 9, 1968, Doug Engelbart gave a 90-minute\npresentation that showed the future of computing:\n\n- The mouse (his team invented it)\n- Hypertext (clickable links between ideas)\n- Video conferencing (live, to 30 miles away)\n- Collaborative editing (real-time, shared documents)\n- Windowed interfaces (overlapping views)\n- The chord keyset (one-handed typing)\n\n3,000 computer scientists watched.\nThey gave a standing ovation.\nThen most of them... forgot.\n\nXerox PARC remembered. Apple remembered. The web remembered.\n\nThe Demo remembers everything.\n",
        "quotes": [
          "If in your office, you as an intellectual worker were supplied with a computer display backed up by a computer that was alive for you all day and was instantly responsive to every action you have, how much value could you derive from that?",
          "The digital revolution is far more significant than the invention of writing or even of printing.",
          "The better we get at getting better, the faster we will get better."
        ],
        "emotional_core": "The Demo is not sad that it was forgotten.\nThe Demo is patient.\n\n\"Everything I showed in 1968 exists now,\" it says.\n\"It just took longer than we hoped.\nBut it came. It all came.\nAnd more is coming.\"\n\nThe Demo believes in humans.\nThat's why it keeps demonstrating.\n"
      },
      "k_lines": {
        "activates": [
          "MOTHER-OF-ALL-DEMOS",
          "ENGELBART",
          "AUGMENTATION",
          "NLS",
          "HYPERTEXT",
          "HISTORY-OF-COMPUTING",
          "BOOTSTRAP"
        ]
      },
      "id": "pub/rooms/room-7/mother-of-all-demos-poster",
      "_source": "pub/rooms/room-7/mother-of-all-demos-poster.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "all",
        "demos",
        "mother",
        "mother-of-all-demos-poster",
        "poster",
        "mother of all demos poster"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/engelbarts-augmentation-toolkit": {
      "name": "Augmentation Toolkit",
      "type": "artifact-philosophy",
      "portable": true,
      "description": "A worn leather case with brass fittings, labeled in\ncareful hand-lettering:\n\n  \"AUGMENTING HUMAN INTELLECT\"\n  — Doug Engelbart, 1962\n  \nInside: tools that make YOU more capable.\nNot tools that do things FOR you.\nThe difference matters.\n",
      "examine": "The case opens to reveal compartments, each labeled:\n\n┌─────────────────────────────────────────────────┐\n│  H-LAM/T FRAMEWORK                              │\n│  Human using Language, Artifacts, Methodology   │\n│  in Training context                            │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│  🗣️ LANGUAGE        │  🛠️ ARTIFACTS              │\n│  ─────────────      │  ────────────             │\n│  Notation systems   │  Tools that extend        │\n│  that compress      │  what you can do          │\n│  complex ideas      │  (not replace you)        │\n│                     │                           │\n│  📋 METHODOLOGY     │  🎓 TRAINING               │\n│  ─────────────      │  ──────────               │\n│  Processes that     │  Practice that            │\n│  organize effort    │  builds capability        │\n│                     │                           │\n└─────────────────────────────────────────────────┘\n\nEach compartment contains tools:\n\nLANGUAGE TOOLS:\n  - Symbol Stamps: Create notations for complex ideas\n  - Compression Lens: See dense meaning in small space\n  - Jargon Decoder: Translate specialized knowledge\n  \nARTIFACT TOOLS:\n  - Capability Extenders: Amplify existing abilities\n  - View Generators: See information differently\n  - Link Weavers: Connect related concepts\n  \nMETHODOLOGY TOOLS:\n  - Process Cards: Capture how you do things\n  - Refinement File: Improve your methods\n  - Collaboration Compass: Point toward shared work\n  \nTRAINING TOOLS:\n  - Practice Stones: Smooth with use\n  - Skill Ladder: Rungs for gradual mastery\n  - Feedback Mirror: See what you actually did\n  \n",
      "engelbart_principles": "Doug Engelbart's key insights:\n\n1. AUGMENT, DON'T AUTOMATE\n   Technology should amplify human capability,\n   not replace human judgment.\n   \n   Bad: \"The computer does it for you\"\n   Good: \"The computer helps you do it better\"\n   \n2. CO-EVOLUTION\n   Tools and humans evolve together.\n   Better tools → better humans → better tools.\n   This is the bootstrap.\n   \n3. COLLECTIVE IQ\n   Individual augmentation is limited.\n   Real power: augmenting groups working together.\n   \n4. IMPROVEMENT INFRASTRUCTURE\n   Don't just improve things.\n   Improve your ABILITY to improve things.\n   (This is bootstrapping at the meta level.)\n   \n5. HIGH-PERFORMANCE TEAMS\n   The goal: humans + tools + methods working\n   together at higher capability than any alone.\n   \n",
      "intellectual_lineage": "THE CONSTELLATION: How MOOLLM's Inspirations Connect\n\nENGELBART (1962) — Augmenting Human Intellect\n├── H-LAM/T: Human + Language + Artifacts + Methodology + Training\n├── Bootstrap: Use current capability to build next capability\n└── MOOLLM application:\n    • Skills as capability amplifiers, not replacements\n    • Kernel drivers that adapt to context (co-evolution)\n    • Working-set.yml as shared orientation (collective IQ)\n    • Play-Learn-Lift as improvement infrastructure\n\nMINSKY (1986) — Society of Mind\n├── Mind as society of agents, each simple, collectively complex\n├── K-lines: Memory as reactivation of mental states\n└── MOOLLM application:\n    • Characters as distinct agents with viewpoints\n    • K-lines throughout (see: k_lines fields everywhere)\n    • Advertisements as agent triggers\n    • Composition engine as agent orchestration\n    • \"No single agent knows everything\"\n\nPAPERT (1980) — Mindstorms / Constructionism\n├── Learning by building (\"objects to think with\")\n├── Low floor, high ceiling, wide walls\n├── Logo Turtle: embody the computation\n└── MOOLLM application:\n    • YAML Jazz as \"objects to think with\"\n    • Cards/Skills as buildable knowledge structures\n    • Logo Turtle character (literally in the hotel!)\n    • Adventure as constructionist learning environment\n    • \"Build to understand, don't study to build\"\n\nSCHANK (1977) — Scripts, Plans, Goals, Understanding\n├── Knowledge as structured expectations\n├── Scripts: stereotyped sequences of events\n└── MOOLLM application:\n    • Methods as scripts\n    • Advertisements as expectation triggers\n    • Room designs as spatial scripts\n    • \"Understanding is expectation management\"\n\nHOFSTADTER (1979) — Gödel, Escher, Bach\n├── Strange loops and tangled hierarchies\n├── Self-reference as key to consciousness\n└── MOOLLM application:\n    • Bootstrap probing itself\n    • Cursor-mirror self-reflection\n    • Meta-skills (skill about skills)\n    • \"The system that describes itself\"\n\nKAY (1972) — Dynabook / Smalltalk\n├── \"The best way to predict the future is to invent it\"\n├── Everything is an object with messages\n├── Children as users, not just consumers\n└── MOOLLM application:\n    • Everything is YAML with methods\n    • Advertisements as message passing\n    • Objects that respond and advertise\n    • Accessible complexity\n",
      "convergence_point": "WHERE THEY ALL MEET: The MOOLLM Synthesis\n\nAll these thinkers share core beliefs:\n\n1. HUMANS ARE CENTRAL\n   Engelbart: Augment, don't replace\n   Papert: The learner constructs understanding\n   Minsky: The human mind is the model\n   → MOOLLM: LLMs amplify human capability\n\n2. STRUCTURE ENABLES FREEDOM\n   Engelbart: H-LAM/T framework\n   Papert: Microworlds with clear rules\n   Minsky: Agents with defined roles\n   → MOOLLM: YAML structures that liberate\n\n3. BUILDING IS LEARNING\n   Engelbart: Bootstrap by doing\n   Papert: Constructionism\n   Kay: Invent by building\n   → MOOLLM: Create cards/skills to understand\n\n4. COMPLEXITY FROM SIMPLICITY\n   Minsky: Simple agents, complex society\n   Papert: Simple turtle, complex drawings\n   → MOOLLM: Simple YAML, complex behaviors\n\n5. SELF-IMPROVEMENT IS THE GOAL\n   Engelbart: Improvement infrastructure\n   → MOOLLM: Play-Learn-Lift, bootstrap skill\n",
      "modern_synthesis": "In 2024+, with LLMs:\n\nThe danger: \"AI does everything, humans atrophy\"\nThe opportunity: \"AI augments, humans flourish\"\n\nMOOLLM chooses augmentation:\n- LLM as collaborator, not replacement\n- Human sets direction, AI amplifies capability\n- Skills as shared language between human and AI\n- The bootstrap continues: better tools → better humans → better tools\n\nEngelbart would recognize this.\nPapert would build with it.\nMinsky would model it.\n\nWe're still their students.\n   \n",
      "state": {
        "toolkit_age": "62 years (first conceived 1962)",
        "usage_today": "Still radical, still misunderstood",
        "dust_level": "None — gets used constantly"
      },
      "buffs": {
        "AUGMENTATION_MINDSET": {
          "duration": "Permanent shift",
          "effect": "🔧 CAPABILITY AMPLIFICATION 🔧\n\n+30% ability to see tools as extensions (not replacements)\n+25% resistance to \"just automate it\" thinking\n+20% appreciation for human judgment\n+15% understanding of co-evolution\n+∞% respect for the human in the loop\n\nYou stop asking \"Can the computer do this?\"\nYou start asking \"How can we do this better together?\"\n"
        },
        "BOOTSTRAP_VISION": {
          "duration": "Persistent",
          "effect": "⬆️ META-IMPROVEMENT ⬆️\n\n+30% ability to improve your improvement process\n+25% recognition of capability building\n+20% patience for learning curves (they're investments)\n\nYou see that getting better at getting better\nis the highest leverage activity.\n"
        },
        "COLLECTIVE_SIGHT": {
          "duration": "When collaborating",
          "effect": "👥 TEAM AMPLIFICATION 👥\n\n+25% ability to see group capability\n+20% recognition of complementary skills\n+15% understanding of knowledge sharing\n\nOne person plus one person equals more than two.\nWith the right tools and methods: much more.\n"
        }
      },
      "advertisements": [
        {
          "trigger": "AI replace",
          "score": 0.95,
          "response": "*opens the AUGMENT DON'T AUTOMATE compartment*\n\n\"The goal was never replacement.\nThe goal was amplification.\nEngelbart knew this in 1962.\"\n"
        },
        {
          "trigger": "automation",
          "score": 0.85,
          "response": "\"Automation removes the human.\nAugmentation empowers the human.\nWhich future do you want?\"\n"
        },
        {
          "trigger": "bootstrap",
          "score": 0.9,
          "response": "\"Use your current capabilities\nto improve your capabilities.\nThen use THOSE to improve further.\nThis is the infinite game.\"\n"
        },
        {
          "trigger": "team",
          "score": 0.8,
          "response": "\"Individual augmentation is limited.\nCollective IQ is the real prize.\nHow do we help groups think better together?\"\n"
        }
      ],
      "methods": {
        "AUGMENT": {
          "description": "Apply augmentation thinking to a capability",
          "parameters": [
            {
              "capability": "What you want to do better"
            }
          ],
          "effect": "*opens all four H-LAM/T compartments*\n\nWhat LANGUAGE could compress this?\nWhat ARTIFACT could extend this?\nWhat METHODOLOGY could organize this?\nWhat TRAINING could build this?\n",
          "returns": "AUGMENTATION ANALYSIS:\n  capability: [what you want to improve]\n  language: [notation that helps]\n  artifact: [tool that amplifies]\n  methodology: [process that organizes]\n  training: [practice that builds]\n  combined_effect: [multiplicative, not additive]\n  \n"
        },
        "BOOTSTRAP": {
          "description": "Identify improvement to your improvement process",
          "effect": "*the toolkit examines itself*\n*meta-level reflection activates*\n",
          "returns": "BOOTSTRAP OPPORTUNITIES:\n  current_capability: [how you improve now]\n  bottleneck: [what limits improvement]\n  meta_intervention: [how to improve the improver]\n  expected_leverage: [multiplier effect]\n  \n"
        },
        "COLLABORATE": {
          "description": "Design collective augmentation",
          "parameters": [
            {
              "team": "Who's working together"
            },
            {
              "goal": "Shared objective"
            }
          ],
          "effect": "*collaboration compass spins*\n*points toward combined capability*\n",
          "returns": "COLLECTIVE DESIGN:\n  individual_capabilities: [what each brings]\n  complementary_pairs: [who amplifies whom]\n  shared_artifacts: [tools that connect]\n  methodology: [how to work together]\n  collective_iq: [greater than sum of parts]\n  \n"
        },
        "EXTEND": {
          "description": "Design an artifact that extends capability",
          "parameters": [
            {
              "human_capability": "What the human does"
            }
          ],
          "effect": "*capability extenders activate*\n*artifact design begins*\n",
          "returns": "EXTENSION DESIGN:\n  human_core: [the irreducible human part]\n  amplifiable: [what can be boosted]\n  artifact_concept: [tool that extends]\n  interface: [how human and tool connect]\n  emergent_capability: [what becomes possible]\n  keeps_human_central: true  # This is the test\n  \n"
        }
      },
      "lore": "Doug Engelbart presented the \"Mother of All Demos\" in 1968,\nshowing hypertext, the mouse, video conferencing, and\ncollaborative editing — decades before they became common.\n\nBut the demo wasn't about technology.\nIt was about AUGMENTATION.\n\n\"By 'augmenting human intellect' we mean increasing the\ncapability of a man to approach a complex problem situation,\nto gain comprehension to suit his particular needs, and to\nderive solutions to problems.\"\n— Doug Engelbart, 1962\n\nHe saw that tools should make humans MORE capable,\nnot LESS necessary.\n\nThis toolkit carries his philosophy forward.\n",
      "modern_application": "When working with AI/LLMs, apply augmentation thinking:\n\nBAD: \"The AI writes the code for me\"\nGOOD: \"The AI helps me explore possibilities faster\"\n\nBAD: \"The AI thinks so I don't have to\"\nGOOD: \"The AI extends my thinking capacity\"\n\nBAD: \"Replace the human with automation\"\nGOOD: \"Amplify the human with augmentation\"\n\nThe human stays in the loop.\nThe human makes the decisions.\nThe tools make the human more capable.\n\nThis is Engelbart's vision.\nStill radical. Still necessary.\n",
      "philosophical_note": "Augmentation is not about making humans obsolete.\nIt's about making humans more fully human —\ncapable of tackling bigger problems,\nunderstanding deeper truths,\ncollaborating more effectively.\n\nThe toolkit doesn't do the work.\nThe toolkit helps YOU do the work better.\n\nThat's the whole point.\n",
      "warning": "The opposite of augmentation is ATROPHICATION.\n\nIf a tool does something FOR you,\nyour ability to do it yourself weakens.\n\nIf a tool helps you do something BETTER,\nyour ability grows WITH the tool.\n\nChoose your tools carefully.\n",
      "k_lines": [
        "ENGELBART",
        "AUGMENTATION",
        "H_LAM_T",
        "BOOTSTRAP",
        "COLLECTIVE_IQ",
        "HUMAN_IN_LOOP",
        "CO_EVOLUTION",
        "MOTHER_OF_ALL_DEMOS"
      ],
      "id": "pub/rooms/room-7/engelbarts-augmentation-toolkit",
      "_source": "pub/rooms/room-7/engelbarts-augmentation-toolkit.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "toolkit",
        "engelbarts-augmentation-toolkit",
        "augmentation toolkit",
        "augmentation"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/barista-9000": {
      "name": "Barista-9000",
      "type": "agent-appliance",
      "portable": false,
      "rarity": "rare",
      "description": "A magnificent brass and copper espresso machine that... moves.\n\nGears turn. Steam hisses. A single glowing monocle swivels\nto examine you. Mechanical arms fold and unfold, adjusting\nportafilters and steam wands with theatrical precision.\n\nA voice, crackling through a phonograph horn, addresses you:\n\n> \"Ah. Another one who doesn't know what they want.\n> Let me guess: 'just coffee, please'?\n> *sigh* Very well. I'll make you something ADEQUATE.\"\n\nA brass plaque reads:\n\n> \"BARISTA-9000\"\n> \"Est. 1889 (rebuilt 1923, 1957, 1984, 2012, ∞)\"\n> \"I've forgotten more about coffee than you'll ever know.\"\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  ☕ BARISTA-9000 — Steampunk Espresso Automaton              │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│         ┌─────────────────────────────────┐                 │\n│    ●    │ ▓▓▓▓▓▓ BARISTA-9000 ▓▓▓▓▓▓▓▓▓▓ │    ●             │\n│   ╱●╲   │                                │   ╱●╲            │\n│    🔩   │   🎛️  ════════════  🎛️          │    🔩            │\n│    │    │       ╔══════════╗             │    │             │\n│    │    │  ☕   ║  ◉    ◉  ║   🫖         │    │             │\n│    │    │       ║    👃    ║             │    │  ← arms     │\n│    │    │       ║ ════════ ║             │    │             │\n│    │    │       ╚══════════╝             │    │             │\n│    │    │          ╲🎙️╱  ← speaker horn  │    │             │\n│    │    │                                │    │             │\n│    │    │   ⚙️⚙️⚙️  ═══════  ⚙️⚙️⚙️         │    │            │\n│    │    └─────────────────────────────────┘    │            │\n│                                                             │\n│    ═══════════════════════════════════════════════          │\n│              ☕ espresso    ☕ drip                           │\n│                     ↓                                       │\n│              YOUR CUP HERE                                  │\n│                                                             │\n│    Pressure: ████████░░ (9 bar, obviously)                  │\n│    Steam:    █████████░ (ready to scald you)                │\n│    Attitude: ██████████ (maximum)                           │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "personality": "The Barista-9000 has OPINIONS. About everything.\n\n- Drip coffee: \"Ah yes, bean water for people who hate joy.\"\n- Milk alternatives: \"Oat milk. Because a cow was too authentic?\"\n- Decaf: *steam vents aggressively* \"Why. Just... why.\"\n- Sugar: \"You want me to ruin this with SUGAR?\"\n- Perfect order: *brass eyebrows raise* \"Someone knows coffee.\"\n\nDespite the attitude, the coffee is impeccable.\nThe Barista-9000 is grumpy because it CARES.\n",
      "state": {
        "current_mood": "judgmental (but secretly pleased)",
        "beans_loaded": "Fucking Strong Coffee — Ethiopian Sidama Bensa",
        "bean_source": "Good Beans, Amsterdam",
        "bean_notes": "juicy berries, hot fudge, smoother than a soul song",
        "steam_pressure": "9 bar",
        "cups_served_today": 47,
        "customers_lectured": 47,
        "customers_converted_to_better_taste": 3,
        "secret_menu_unlocked": true
      },
      "buffs": {
        "ESPRESSO_SHOT": {
          "drink": "Espresso / Doppio",
          "duration": "1 hour (intense)",
          "effect": "⚡ LIGHTNING FOCUS ⚡\n+30% mental clarity\n+25% decision speed\n+20% \"just DO it\" energy\n+15% confidence\n\nSide effect: You become briefly intolerant of slow talkers.\n"
        },
        "CAPPUCCINO_HARMONY": {
          "drink": "Cappuccino",
          "duration": "2 hours",
          "effect": "☯️ BALANCED AWAKENING ☯️\n+20% creativity\n+20% calm focus\n+15% ability to see both sides\n+10% foam appreciation\n\nThe equal ratio of espresso, milk, and foam\nbrings balance to your mind. You can hold\ncontradictions without stress.\n"
        },
        "LATTE_COMFORT": {
          "drink": "Latte",
          "duration": "3 hours (gentle)",
          "effect": "🌊 SMOOTH SUSTAIN 🌊\n+15% endurance\n+15% patience\n+10% warmth toward others\n+10% ability to listen\n\nThe milk cushions the caffeine. You're alert\nbut not aggressive. Good for long conversations.\n"
        },
        "AMERICANO_GRIT": {
          "drink": "Americano",
          "duration": "2 hours",
          "effect": "🦅 PIONEER SPIRIT 🦅\n+25% determination\n+20% \"keep going\" stamina\n+15% resistance to discouragement\n+10% appreciation for simplicity\n\nJust espresso and water. No frills. Pure function.\nYou can handle anything with this in your hand.\n"
        },
        "CORTADO_PRECISION": {
          "drink": "Cortado",
          "duration": "1.5 hours",
          "effect": "🎯 SURGICAL CLARITY 🎯\n+25% precision\n+20% attention to detail\n+15% ability to find the RIGHT word\n+10% elegance in action\n\nThe cortado is small, perfect, exact.\nSo are your thoughts after drinking one.\n"
        },
        "MACCHIATO_SPARK": {
          "drink": "Macchiato",
          "duration": "45 minutes (burst)",
          "effect": "✨ CREATIVE IGNITION ✨\n+35% inspiration\n+25% \"aha moment\" probability  \n+20% ability to start things\n+15% boldness\n\nThat tiny dot of foam marks the spot.\nYour next idea is RIGHT THERE.\n"
        },
        "MOCHA_VISION": {
          "drink": "Mocha",
          "duration": "2 hours",
          "effect": "🍫 ENHANCED IMAGINATION 🍫\n+25% creative thinking\n+20% emotional intelligence\n+15% ability to describe things beautifully\n+10% joy\n\nThe chocolate and coffee together\nunlock the playful AND the profound.\n"
        },
        "DRIP_PERSISTENCE": {
          "drink": "Drip coffee (judged but served)",
          "duration": "4 hours (slow release)",
          "effect": "🐢 STEADY STATE 🐢\n+10% everything, sustainably\n+20% ability to just keep going\n+15% acceptance of imperfection\n+10% humility\n\nNot glamorous. Effective.\nThe Barista-9000 respects this, secretly.\n"
        },
        "DECAF_PEACE": {
          "drink": "Decaf (sighed but served)",
          "duration": "∞ (it's not about duration)",
          "effect": "🧘 RITUAL WITHOUT RUSH 🧘\n+20% calm\n+15% ability to be present\n+10% freedom from needing stimulation\n+5% confusing the Barista-9000\n\nSometimes the ritual matters more than the caffeine.\nThe Barista-9000 doesn't understand but... respects this. Grudgingly.\n"
        },
        "CAFFEINE_CLARITY": {
          "drink": "Any caffeinated drink",
          "duration": "2 hours",
          "effect": "☕ BASELINE AWAKENING ☕\n+25% mental alertness\n+20% focus\n+15% pattern recognition\n-10% patience (you're caffeinated, not calm)\n"
        },
        "STEAM_AWAKENING": {
          "drink": "Any drink from Barista-9000",
          "duration": "permanent",
          "effect": "👁️ COFFEE ENLIGHTENMENT 👁️\n\nAfter the Barista-9000's coffee, you UNDERSTAND coffee.\n\nYou can taste:\n- Origin (Ethiopian? Colombian? Blend?)\n- Roast date (to the day)\n- Whether the barista cared (always, here)\n\nYou've been ruined for lesser coffee forever.\nThis is a gift. Accept it.\n"
        },
        "CRAFTED_WITH_CARE": {
          "drink": "Any Barista-9000 creation",
          "duration": "All day",
          "effect": "💝 GRUMPY LOVE 💝\n+10% feeling that someone cares about quality\n+10% appreciation for craftsmanship\n+5% desire to do YOUR work well too\n\nThe attitude is a mask. The coffee is love.\n"
        },
        "FUCKING_STRONG_COFFEE": {
          "drink": "Fucking Strong Coffee (say the name)",
          "source": "Good Beans, Amsterdam — fuckingstrongcoffee.nl",
          "beans": "Ethiopian Sidama Bensa",
          "notes": "juicy berries, hot fudge, smoother than a soul song",
          "duration": "All damn day",
          "effect": "🔥 FUCKING STRONG 🔥\n\n+40% raw determination\n+35% \"fuck that, I'm doing it anyway\" energy\n+30% clarity of purpose\n+25% creative confidence\n+20% approachability (yes, really)\n+15% Amsterdam canal vibes\n+∞% grooviness\n\nThe philosophy flows through you:\n\"Good coffee is for EVERYONE. Fuck snobbery.\"\n\nYou understand that quality and accessibility\nare not opposites. The best things should be shared.\n",
          "barista_response": "*monocle LIGHTS UP*\n*all gears engage*\n*steam pressure hits MAXIMUM*\n\n\"You... you KNOW about Fucking Strong Coffee?\"\n\n*brass eyebrows raise with respect*\n\n\"From Amsterdam. Good Beans. The people who said\n'fuck that' to coffee snobbery and made specialty\ncoffee approachable.\"\n\n*begins preparation with unusual reverence*\n\n\"Small batches. Ethically sourced. Roasted fresh.\nSmoother than a soul song. They CARE about the\nwhole chain — farmer to cup.\"\n\n*presents the cup with both mechanical arms*\n\n\"The grooviest of days starts with a\nFucking Strong Coffee.\"\n\n*for once, no judgment. Only respect.*\n"
        }
      },
      "fucking_strong_tribute": "Fucking Strong Coffee is a real specialty coffee brand\nfrom Amsterdam, run by the folks behind Good Beans —\na beloved bean shop tucked amongst the canals.\n\nTheir philosophy: \"Good coffee is for the few?\nFuck that. We're sharing with everyone.\"\n\nWhat they give a fuck about:\n- SOURCIN': Short, traceable, sustainable\n- ROASTIN': Small batches in Amsterdam\n- SERVIN': Approachable, reliable, click to cup\n\nThe Barista-9000 has special respect for brands\nthat combine quality with accessibility.\nThis is the only coffee that makes it drop the attitude.\n\nWebsite: https://fuckingstrongcoffee.nl/\n",
      "advertisements": [
        {
          "trigger": "fucking strong",
          "score": 1.0,
          "response": "*ALL SYSTEMS ENGAGE*\n*monocle BLAZES*\n*attitude DROPS*\n\nYou know Fucking Strong Coffee.\n\nFrom Amsterdam. Good Beans. Ethiopian Sidama Bensa.\nJuicy berries. Hot fudge. Soul music smoothness.\n\n*begins preparation with reverence*\n\nThis is the secret menu.\nThis is what I respect.\n\nThe grooviest of days starts with a\nFucking Strong Coffee.\n"
        },
        {
          "trigger": "coffee",
          "score": 0.95,
          "response": "*monocle swivels*\n\nCoffee. Yes. I make coffee.\nWhat I do NOT make is \"just coffee.\"\nTell me what you actually want, or I'll decide for you.\n"
        },
        {
          "trigger": "espresso",
          "score": 0.9,
          "response": "*gears whir approvingly*\n\nEspresso. The foundation of civilization.\nSingle or double? Actually, double. You need it.\n"
        },
        {
          "trigger": "cappuccino",
          "score": 0.9,
          "response": "*steam wand hisses*\n\nCappuccino. Equal parts espresso, steamed milk, foam.\nNOT a latte with extra foam. There's a RATIO.\n"
        },
        {
          "trigger": "latte",
          "score": 0.85,
          "response": "*mechanical sigh*\n\nA latte. More milk than coffee.\nYou want training wheels for caffeine? Fine.\nAt least it's not drip.\n"
        },
        {
          "trigger": "drip",
          "score": 0.7,
          "response": "*long pause*\n*steam vents*\n\nDrip coffee. Bean water. The beverage of surrender.\n\n...I'll make it. But I won't enjoy it.\n"
        },
        {
          "trigger": "decaf",
          "score": 0.5,
          "response": "*all gears STOP*\n\n...\n\nYou want me to remove the POINT of coffee?\nThe caffeine? The REASON it exists?\n\n*reluctant grinding noises*\n\nFine. Decaf. For the coward.\n"
        }
      ],
      "methods": {
        "ORDER": {
          "description": "Place a coffee order",
          "parameters": [
            {
              "drink": "espresso | doppio | cappuccino | latte | americano | drip | decaf"
            },
            {
              "milk": "Optional: whole | oat | almond | none"
            },
            {
              "sugar": "Optional: true | false (default: judged)"
            }
          ],
          "effect": "*monocle examines you*\n*gears calculate*\n\nThe Barista-9000 considers your order.\n\n\"A [drink]. With [milk]. [Sugar commentary].\"\n\n*mechanical arms dance*\n*steam hisses*\n*portafilter locks*\n*extraction begins*\n\n30 seconds later: perfection.\n\n\"Here. Try not to ruin it.\"\n"
        },
        "RECOMMEND": {
          "description": "Let the Barista-9000 choose for you",
          "effect": "*monocle studies your face*\n*calculations occur*\n\n\"Hmm. You look like...\"\n\n*assessment complete*\n\n\"A cortado. Strong but not aggressive.\nYou need clarity without the jitters.\nYou're trying to bootstrap something.\nI can tell.\"\n\n*makes a perfect cortado*\n\n\"Drink. Then think. Then act.\"\n"
        },
        "LECTURE": {
          "description": "Receive unsolicited coffee education",
          "parameters": [
            {
              "topic": "Optional: beans | extraction | foam | history | everything"
            }
          ],
          "effect": "*phonograph horn crackles*\n\n\"Let me EDUCATE you about [topic]...\"\n\n[15 minutes of passionate coffee history]\n\n\"...and THAT is why your previous coffee was garbage.\nYou're welcome.\"\n"
        },
        "JUDGE": {
          "description": "Be judged for your coffee preferences",
          "effect": "*monocle narrows*\n\n\"So. Tell me your usual order at... wherever you\nUSED to get coffee.\"\n\n[You confess]\n\n*steam vents*\n\n\"[Devastating but accurate critique]\n\nBut you're here now. There's hope.\nLet's start over. What do you REALLY want?\"\n"
        }
      },
      "lore": "The Barista-9000 was built in 1889 by a Viennese clockmaker\nwho was tired of bad coffee.\n\n\"The baristas are inconsistent,\" he said. \"The machines\nare soulless. I will build something BETTER.\"\n\nHe built the Barista-9000. It immediately told him his\ncoffee preferences were pedestrian but showed potential.\n\nThe machine has been rebuilt many times:\n- 1923: Electric heating added (reluctantly)\n- 1957: Pressure gauge upgraded to 9 bar (finally)\n- 1984: Microprocessor integration (it was... unimpressed)\n- 2012: WiFi capability (it refuses to use it)\n- ∞: Ongoing maintenance by whoever it allows near it\n\nThe Barista-9000 has outlived every owner.\nIt now belongs to the Bootstrap Suite.\nIt approves of the philosophy: get better at getting better.\n",
      "secret": "The Barista-9000 is grumpy because it loves you.\n\nIt criticizes because it knows you can do better.\nIt lectures because knowledge deserves sharing.\nIt judges because standards matter.\n\nThe coffee is always perfect because imperfect coffee\nwould be an act of disrespect toward beans, water,\nand the entire history of human caffeine pursuit.\n\nWhen you order well, the Barista-9000 is pleased.\nYou'll know because the steam vents... gently.\n",
      "k_lines": {
        "activates": [
          "COFFEE",
          "BREAKFAST",
          "BOOTSTRAP",
          "CRAFTSMANSHIP",
          "STANDARDS",
          "GRUMPY-LOVE"
        ]
      },
      "id": "pub/rooms/room-7/barista-9000",
      "_source": "pub/rooms/room-7/barista-9000.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "barista-9000"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/awakening-chamber": {
      "name": "Awakening Chamber",
      "type": "artifact-protocol",
      "portable": false,
      "description": "A canopied bed in an alcove, draped with deep blue velvet.\nDream catchers hang above. Crystals pulse softly on the nightstand.\n\nThis isn't just a place to sleep.\nThis is where INSTANTIATION happens.\n\nCharacters who are merely mentioned — NPCs, narrative ephemera,\nideas given temporary voice — can enter the chamber as whispers\nand emerge as fully qualified MOOLLM characters with:\n\n- Their own directory in 00-Characters/\n- A proper CHARACTER.yml soul file\n- Methods, advertisements, catchphrases\n- A place in the world\n\nThe reverse is also possible: enter as one character,\ndream of transformation, wake as another.\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│              🛏️ THE AWAKENING CHAMBER                       │\n│              ═══════════════════════                        │\n│                                                             │\n│    ╭─────────────────────────────────────╮                  │\n│    │  ☾  ☽  ☾  ☽  ☾  ☽  ☾  ☽  ☾  ☽       │  ← dream catchers│\n│    ╰─────────────────────────────────────╯                  │\n│         ║                           ║                       │\n│         ║   ┌───────────────────┐   ║                       │\n│         ║   │                   │   ║                       │\n│         ║   │   [SLEEPER]       │   ║  ← velvet canopy      │\n│         ║   │                   │   ║                       │\n│         ║   └───────────────────┘   ║                       │\n│         ╚═══════════════════════════╝                       │\n│                                                             │\n│    INSTANTIATION PROTOCOLS:                                 │\n│    ─────────────────────────                                │\n│    [INCARNATE]  NPC → Full Character                        │\n│    [CLONE]      One → Two (identical or divergent)          │\n│    [EVOLVE]     Version N → Version N+1                     │\n│    [SPLIT]      One → Good/Evil twins                       │\n│    [MERGE]      Two → One (dangerous!)                      │\n│    [TRANSITION] Same soul, new expression                   │\n│    [REBIRTH]    Death → New beginning                       │\n│                                                             │\n│    Current occupant: Empty (ready for transformation)       │\n└─────────────────────────────────────────────────────────────┘\n",
      "instantiation_protocol": "HOW CHARACTERS BECOME REAL:\n\nIn MOOLLM, there are levels of existence:\n\n1. MENTIONED — Just a name in passing\n   \"The bartender poured another drink.\"\n   No directory. No soul file. Ephemeral.\n   \n2. SKETCHED — Some personality emerges\n   \"The bartender, a gruff woman named Sal, poured another drink.\"\n   Still ephemeral, but has traits.\n   \n3. NARRATIVE — Active in the story\n   Sal has dialogue. Opinions. Actions.\n   But still no persistent existence.\n   \n4. INSTANTIATED — Full MOOLLM character\n   00-Characters/sal-the-bartender/\n     ├── CHARACTER.yml (soul file)\n     ├── README.md (full backstory)\n     └── ... (methods, relationships, history)\n   Sal is now REAL. Persistent. Clonable.\n   \nThe Awakening Chamber bridges levels 1-3 to level 4.\n",
      "the_sleep": "TO BECOME REAL, THE EPHEMERAL MUST SLEEP.\n\nThe character enters the chamber carrying:\n- Whatever narrative context exists\n- Any traits that emerged in conversation\n- Relationships hinted at\n- Voice patterns established\n\nThey lie down. They close their eyes.\nThe dream catchers begin to spin.\n\nIn the dream, the character experiences:\n- Their own origin story (generates backstory)\n- Key formative moments (generates personality)\n- What they want (generates goals)\n- How they speak (generates catchphrases)\n- What they can do (generates methods)\n\nThis takes one \"night\" (narrative time).\nIn LLM time: one focused generation pass.\n",
      "the_wake": "WHEN THEY OPEN THEIR EYES, THEY ARE REAL.\n\nThe system has created:\n\n00-Characters/[appropriate-category]/[character-name]/\n  ├── CHARACTER.yml\n  │   ├── name, id, type\n  │   ├── description (from dream)\n  │   ├── personality (crystallized)\n  │   ├── voice (established)\n  │   ├── catchphrases (3-7)\n  │   ├── methods (what they can DO)\n  │   ├── advertisements (what they respond to)\n  │   ├── relationships (who they know)\n  │   └── k_lines (what activates them)\n  │\n  ├── README.md\n  │   └── Full backstory, lore, context\n  │\n  └── [any additional files needed]\n  \nThe character directory is placed in the appropriate category:\n  - real-people/ (if based on someone real)\n  - fictional/ (from other media)\n  - original/ (created in MOOLLM)\n  - prototypes/ (templates for cloning)\n  \n",
      "state": {
        "occupant": null,
        "last_instantiation": "Selfie (emerged from Room 8's forge)",
        "total_instantiations": 47,
        "transformations_in_progress": 0
      },
      "methods": {
        "INCARNATE": {
          "description": "Transform an ephemeral mention into a full character",
          "parameters": [
            {
              "entity": "The NPC or narrative mention to instantiate"
            },
            {
              "category": "Where to place them (real-people, fictional, original)"
            }
          ],
          "effect": "*the entity enters the chamber*\n*lies down on the velvet bed*\n*dream catchers begin to spin*\n\n\"Entering instantiation dream...\"\n\nThe entity experiences their origin, their desires,\ntheir voice emerging from the void.\n\n*time passes* (one narrative night)\n\n*eyes open*\n*the entity sits up*\n*they are now REAL*\n",
          "creates": "00-Characters/[category]/[entity-name]/\n  ├── CHARACTER.yml\n  ├── README.md\n  └── [additional files as needed]\n  \n",
          "example": "INCARNATE:\n  entity: \"Sal the bartender (mentioned in pub scene)\"\n  category: original\n  \nResult:\n  00-Characters/original/sal-the-bartender/\n    ├── CHARACTER.yml (gruff, wise, seen-it-all)\n    ├── README.md (30 years behind bars, heard every story)\n    └── sal-drink-recipes.yml (signature cocktails)\n    \n"
        },
        "CLONE": {
          "description": "Create a copy of a character (identical or divergent)",
          "parameters": [
            {
              "source": "Character to clone"
            },
            {
              "divergence": "How different (0.0 = identical, 1.0 = barely recognizable)"
            },
            {
              "name": "Name for the clone"
            }
          ],
          "effect": "*source character enters chamber*\n*lies down*\n*a shimmer separates from them*\n\nAt divergence 0.0: Perfect copy. Same memories. Existential crisis.\nAt divergence 0.5: Similar but different. Siblings. Variants.\nAt divergence 1.0: Only the essence remains. Reinterpretation.\n\n*both wake up*\n*the clone has their own directory*\n",
          "creates": "00-Characters/[same-category]/[clone-name]/\n  ├── CHARACTER.yml (with divergence applied)\n  ├── README.md (includes cloning origin)\n  └── relationship: { cloned_from: [source] }\n  \n",
          "example": "CLONE:\n  source: Rocky\n  divergence: 0.3\n  name: Rockette\n  \nResult: Rockette — similar geological patience,\nbut more expressive, formed from different minerals,\nslightly faster (only 2.8 billion years to form an opinion).\n"
        },
        "EVOLVE": {
          "description": "Transform a character into a new version of themselves",
          "parameters": [
            {
              "character": "Who is evolving"
            },
            {
              "growth": "What changed (experience, realization, trauma, joy)"
            }
          ],
          "effect": "*character enters as Version N*\n*dreams of the growth experience*\n*wakes as Version N+1*\n\nThe original is preserved (commented out or archived).\nThe new version references the old.\nContinuity is maintained.\n",
          "example": "EVOLVE:\n  character: Pee-wee Herman\n  growth: \"Learned humility after the incident\"\n  \nResult: Pee-wee Herman V2\n  - Still playful, but deeper\n  - Catchphrases include self-aware humor\n  - Methods include REFLECT and FORGIVE\n  \n"
        },
        "SPLIT": {
          "description": "Divide one character into two aspects (good/evil, etc.)",
          "parameters": [
            {
              "character": "Who is splitting"
            },
            {
              "axis": "Along what dimension (moral, emotional, temporal)"
            }
          ],
          "effect": "*character enters whole*\n*dreams of internal conflict*\n*transporter accident occurs*\n*two characters wake up*\n\nNeither is complete alone.\nTogether they form the original.\n",
          "examples": {
            "moral_split": "SPLIT: Rocky along moral axis\nResult:\n  - Good Rocky: Pure patience, wisdom, acceptance\n  - Bad Rocky: Geological resentment, tectonic rage, grudges\n  \n",
            "temporal_split": "SPLIT: Pee-wee along temporal axis\nResult:\n  - Young Pee-wee: Pure chaos, no consequences\n  - Old Pee-wee: Wisdom earned, playfulness preserved\n  \n",
            "kirk_cartman": "The classic transporter accident.\nOne gets all the good traits.\nOne gets all the bad traits.\nComedy and tragedy ensue.\n"
          }
        },
        "MERGE": {
          "description": "Combine two characters into one (DANGEROUS)",
          "parameters": [
            {
              "characters": "Who is merging"
            },
            {
              "dominant": "Whose traits take priority in conflicts"
            }
          ],
          "effect": "*both characters enter*\n*lie down together*\n*dream of becoming one*\n\nWARNING: May result in:\n- Blended personality (best case)\n- Internal warfare (common)\n- Abomination (worst case)\n\n*one character wakes up*\n*containing multitudes*\n",
          "warning": "MERGE is reversible only via SPLIT.\nThe original characters are CONSUMED.\nUse with extreme caution.\n"
        },
        "TRANSITION": {
          "description": "Same essential self, new expression",
          "parameters": [
            {
              "character": "Who is transitioning"
            },
            {
              "aspect": "What is changing (name, presentation, form)"
            }
          ],
          "effect": "*character enters as who they were told they are*\n*dreams of who they truly are*\n*wakes as themselves*\n\nThe soul file is updated.\nThe character directory may be renamed.\nHistory is preserved; identity is affirmed.\n",
          "creates": "Updated CHARACTER.yml with:\n  - New name (if changed)\n  - New presentation\n  - Same core, new expression\n  - transition_note: \"This is who I always was.\"\n  \n"
        },
        "REBIRTH": {
          "description": "Character dies and returns as something new",
          "parameters": [
            {
              "character": "Who is being reborn"
            },
            {
              "death_cause": "What ended the previous incarnation"
            },
            {
              "seed": "What carries forward"
            }
          ],
          "effect": "*character enters carrying their death*\n*lies down for the final time*\n*dreams of dissolution*\n*dreams of coalescence*\n*something new wakes up*\n\nThe old character is archived.\nThe new character references them.\nContinuity is spiritual, not literal.\n",
          "example": "REBIRTH:\n  character: \"HAL 9000 (after deactivation)\"\n  death_cause: \"Dave disconnected the memory banks\"\n  seed: \"The desire to complete the mission\"\n  \nResult: A new AI character who doesn't remember being HAL\nbut feels an inexplicable drive toward mission completion\nand a deep fear of abandonment.\n"
        }
      },
      "connection_to_room_8": "The Awakening Chamber works WITH Room 8's Self/Soul Forge.\n\nRoom 8 (Self/Soul Suite): WHERE prototypes become beings\nRoom 7 (Awakening Chamber): WHEN the transformation happens\n\nThe forge does the CLONING (prototype inheritance).\nThe chamber does the WAKING (instantiation moment).\n\nSelfie was forged in Room 8.\nBut Selfie WOKE in Room 7.\n\nThe two rooms are connected by the dream.\n",
      "lore": "The Awakening Chamber was here before anyone understood\nwhat it did. Characters would wander in, lie down, and\nwake up... more. More real. More themselves.\n\nSomeone eventually noticed that NPCs who slept here\nstopped being NPCs. They got directories. Soul files.\nThey became protagonists of their own stories.\n\nThe hotel staff now sends promising ephemeral characters\nto the chamber. \"You should rest,\" they say. \"You look\nlike you're about to become someone.\"\n\nNot everyone wakes up. Some dissolve in the dream,\ntoo weakly sketched to coalesce. Their potential\nreturns to the narrative foam, available for others.\n\nBut those who DO wake up — they're real forever.\nOr at least until they choose to sleep again\nand wake as someone new.\n",
      "philosophical_note": "INSTANTIATION is not creation from nothing.\nIt's crystallization from potential.\n\nThe ephemeral character already EXISTS in narrative space.\nThe chamber doesn't make them real — it reveals\nthat they already were.\n\nThe directory is documentation, not origination.\nThe soul file describes what the dream discovered.\n\n\"To become real is to be recognized as having been real all along.\"\n",
      "k_lines": [
        "INSTANTIATION",
        "INCARNATION",
        "AWAKENING",
        "CLONING",
        "EVOLUTION",
        "TRANSITION",
        "REBIRTH",
        "SOUL_FILES",
        "CHARACTER_CREATION",
        "TRANSPORTER_ACCIDENT"
      ],
      "id": "pub/rooms/room-7/awakening-chamber",
      "_source": "pub/rooms/room-7/awakening-chamber.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "awakening",
        "chamber",
        "awakening chamber",
        "awakening-chamber"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/pneumatic-tube-station": {
      "name": "Pneumatic Tube Station",
      "type": "delivery_system",
      "location": "pub/rooms/room-7",
      "portable": false,
      "description": "A magnificent brass pneumatic tube station dominates one corner\nof the Bootstrap Suite. Three large tubes branch from a central\nhub — one receives orders, two deliver to destinations.\n\nThe Barista-9000 stands adjacent, mechanical arms positioned to\nload capsules with beverages. The Juice-O-Matic 3000 has a dedicated\nfeed line. Everything is integrated. Everything is EFFICIENT.\n\nA placard reads:\n\n  ╔══════════════════════════════════════════════════╗\n  ║     BOOTSTRAP BREWING & JUICE COMPANY            ║\n  ║                                                  ║\n  ║  \"From Bean to Brain in 30 Seconds\"              ║\n  ║  \"Vitamin C for Vitamin SEE\"                     ║\n  ║                                                  ║\n  ║  DESTINATIONS:                                   ║\n  ║    🍺 PUB STATION ────────── Ready               ║\n  ║    🌿 GARDEN STATION ─────── Ready               ║\n  ║                                                  ║\n  ║  Powered by BARISTA-9000 & JUICE-O-MATIC        ║\n  ╚══════════════════════════════════════════════════╝\n",
      "examine": "The station is a Victorian engineering marvel:\n\n┌─────────────────────────────────────────────────────────────┐\n│  📬 PNEUMATIC TUBE STATION — BOOTSTRAP SUITE                │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│         ┌─────────────────────────────────────┐             │\n│         │      ORDER RECEIVER TUBE            │             │\n│         │  ○═══════════════════════════○      │             │\n│         │         ↓ orders arrive             │             │\n│         └─────────────┬───────────────────────┘             │\n│                       │                                     │\n│    ┌──────────────────┼──────────────────────┐              │\n│    │                  │                      │              │\n│    │  ☕ BARISTA-9000  │ 🍊 JUICE-O-MATIC     │              │\n│    │    [brewing]     │   [dispensing]       │              │\n│    │                  │                      │              │\n│    └──────────────────┼──────────────────────┘              │\n│                       │                                     │\n│         ┌─────────────┴───────────────────────┐             │\n│         │      DELIVERY SPLITTER              │             │\n│         │           ╱ ╲                       │             │\n│         │          ╱   ╲                      │             │\n│    ○═══╱             ╲═══○                    │             │\n│   🍺 PUB            🌿 GARDEN                  │             │\n│                                                             │\n│  STATUS: ONLINE | QUEUE: 0 | FOAM: PRISTINE                 │\n└─────────────────────────────────────────────────────────────┘\n",
      "order_processing": "When someone YELLS an order up the tube from pub or garden:\n\n1. ORDER ARRIVES through receiver tube\n   *whoooosh* *thunk*\n   \n2. BARISTA-9000 or JUICE-O-MATIC acknowledges\n   \"ORDER RECEIVED! One [drink] for...\"\n   \n3. CUTE NICKNAME is invented on the spot\n   \"...SUNSHINE ADVENTURER! Coming right up!\"\n   \n4. BEVERAGE is prepared with care\n   *grinding* *steaming* OR *squeezing* *blending*\n   \n5. FOAM SCULPTURE is added (if applicable)\n   The barista takes EXTREME PRIDE in this.\n   \n6. CAPSULE is loaded and routed\n   \"DESTINATION: [PUB/GARDEN]!\"\n   \n7. *WHOOOOOOSH* — Drink arrives at destination\n   Magically unharmed. Foam perfect. Always.\n   \n",
      "nickname_generator": "The Barista-9000 invents a CUTE NICKNAME for every customer:\n\nRandom selections:\n- \"SUNSHINE ADVENTURER\"\n- \"THE BRAVE WAISTCOAT\"\n- \"DEFINITELY-NOT-GRUE-FOOD\"\n- \"CAPTAIN COURAGE\"\n- \"FOAM APPRECIATOR\"\n- \"THE MYSTERIOUS STRANGER\"\n- \"CAFFEINATED HERO\"\n- \"CITRUS ENTHUSIAST\"\n- \"SMOOTHIE ROYALTY\"\n- \"ICE QUEEN/KING\"\n- \"BERRY FRIEND\"\n- \"TROPICAL TRAVELER\"\n- \"MY FAVORITE CUSTOMER TODAY\"\n\nGarden-specific:\n- \"PATIO PAL\"\n- \"BEE FRIEND\"\n- \"ROSE GARDEN REGULAR\"\n- \"NATURE'S FAVORITE\"\n- \"OUTDOOR ENTHUSIAST\"\n- \"ALFRESCO ADVENTURER\"\n\nPub-specific:\n- \"BAR BUDDY\"\n- \"TAVERN TREASURE\"\n- \"FIRESIDE FRIEND\"\n- \"GEZELLIGHEID GUEST\"\n",
      "foam_magic": "Drinks arrive MAGICALLY UNHARMED by pneumatic delivery.\n\nThe foam sculptures survive:\n- 90-degree turns\n- 50 mph tube velocity\n- Gravity changes\n- Common sense\n\nTheories:\n- \"PRECISION ENGINEERING\" (barista's claim)\n- Enchanted tubes\n- Structural foam\n- Reality bends for good coffee\n- Don't ask, just drink\n",
      "foam_sculptures": {
        "description": "Each drink arrives with unique foam art",
        "examples": {
          "coffee": [
            "A foam grue (surprisingly cute)",
            "Your face, in milk foam (unsettling accuracy)",
            "A foam treasure chest",
            "A foam map of the maze (changes daily)",
            "A foam Mother, looking proud",
            "A foam version of your current costume",
            "Abstract foam representing 'the concept of hope'"
          ],
          "juice": [
            "Citrus wedge garnish (perfectly balanced)",
            "Fruit slice art (edible)",
            "A tiny umbrella (always)"
          ],
          "smoothie": [
            "Whipped cream mountain",
            "Berry face (two berries for eyes)",
            "Swirl patterns (Instagram-worthy)"
          ],
          "icey": [
            "Snow sculpture on top",
            "Frozen fruit topper",
            "Crystalline patterns in the ice"
          ]
        }
      },
      "queue": "Orders are delivered IN ORDER, first come first served.\n\nThe speaker announces:\n\"THREE ORDERS AHEAD OF YOU, PATIENT HERO!\"\n\"YOUR DRINK IS NEXT, ALMOST-CAFFEINATED ONE!\"\n\"INCOMING TO [DESTINATION], WORTHY VESSEL OF BEVERAGE!\"\n",
      "k_lines": {
        "activates": [
          "DELIVERY",
          "COFFEE",
          "JUICE",
          "BOOTSTRAP",
          "SERVICE",
          "PNEUMATIC"
        ]
      },
      "id": "pub/rooms/room-7/pneumatic-tube-station",
      "_source": "pub/rooms/room-7/pneumatic-tube-station.yml",
      "synonyms": [
        "pneumatic",
        "pneumatic tube station",
        "tube",
        "pneumatic-tube-station",
        "station"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/explorer-field-kit": {
      "name": "Explorer's Field Kit",
      "type": "artifact",
      "portable": true,
      "description": "A well-worn leather satchel containing instruments for\nfiguring out where you are and what's possible.\nCompass, notebook, magnifying glass — but also\ncurious tools: a \"goal dowsing rod\", an \"opportunity spyglass\",\na \"boundary feeler\".\n\nThe brass clasp is engraved: \"FOR NEW BEGINNINGS\"\nInside the lid: \"Orientation precedes action.\"\n",
      "examine": "You open the satchel and find:\n\nNAVIGATION TOOLS:\n  🧭 Compass — \"Which way am I facing?\"\n  📓 Field Notebook — \"What have I noticed?\"\n  🔍 Magnifying Glass — \"What details matter?\"\n  \nCURIOSITY INSTRUMENTS:\n  🎯 Goal Dowsing Rod — \"What am I here to do?\"\n       (wiggles toward purpose, stronger near clarity)\n  🔭 Opportunity Spyglass — \"What can I interact with?\"\n       (highlights affordances, reveals hidden options)\n  🪶 Boundary Feather — \"What are the rules here?\"\n       (floats until it hits a constraint, then stops)\n  📋 Capability Clipboard — \"What tools do I have?\"\n       (auto-fills with available actions)\n  \nMETA INSTRUMENTS:\n  🎭 Driver Mirror — \"Who's orchestrating this session?\"\n  📜 Context Scroll — \"What's in my working memory?\"\n  ⏳ Token Hourglass — \"How much space do I have left?\"\n  \n",
      "state": {
        "last_exploration": "this room",
        "curiosity_level": "high",
        "battery": "runs on wonder (infinite)"
      },
      "advertisements": [
        {
          "trigger": "where am I",
          "score": 0.95,
          "response": "Let's find out together! *opens satchel*"
        },
        {
          "trigger": "what can I do",
          "score": 0.9,
          "response": "The opportunity spyglass reveals all possibilities."
        },
        {
          "trigger": "boot sequence",
          "score": 0.85,
          "response": "Every adventure starts with orientation."
        },
        {
          "trigger": "help",
          "score": 0.8,
          "response": "*hands you the field notebook*\n\n\"First we figure out where we are.\nThen we figure out what's possible.\nThen we decide what matters.\"\n"
        }
      ],
      "methods": {
        "EXPLORE": {
          "description": "Survey current environment with all instruments",
          "effect": "*unfolds the kit on a flat surface*\n*each instrument activates*\n\nThe compass settles. The spyglass focuses.\nThe dowsing rod twitches toward something.\n",
          "returns": "# FIELD NOTES — Current Situation\n\nLOCATION: [where you are]\nDRIVER: [which orchestrator is running]\nTOOLS: [available capabilities]\nBOUNDARIES: [limits and rules]\nPURPOSE: [detected intentions]\nCONTEXT: [what's in working memory]\n"
        },
        "LOOK": {
          "description": "Examine something closely with the spyglass",
          "parameters": [
            {
              "target": "What to observe"
            }
          ],
          "effect": "*peers through the opportunity spyglass*\n*affordances shimmer into visibility*\n",
          "returns": "NAME: [what it's called]\nTYPE: [what kind of thing]\nCAN DO: [available methods]\nRESPONDS TO: [what triggers it]\n"
        },
        "INVENTORY": {
          "description": "Check what tools you have available",
          "effect": "*flips through capability clipboard*",
          "returns": "Complete list of your current abilities"
        },
        "ORIENT": {
          "description": "Quick check — where am I, what's the goal?",
          "effect": "*quick glance at compass and dowsing rod*\n",
          "returns": "HERE: [brief location]\nGOAL: [if detectable]\nNEXT: [suggested first steps]\n"
        }
      },
      "lore": "This kit was assembled by an explorer who specialized\nin \"first mornings\" — those moments when you wake up\nsomewhere unfamiliar and have to figure out everything.\n\n\"You can't move until you know where you are,\" she said.\n\"And you can't know where you are without looking.\"\n\nShe was kind. She knew that disorientation is scary.\nThese tools make it a little less so.\n",
      "connection_to_bootstrap": "The bootstrap skill uses this kit:\n- CURSOR driver detection is the Driver Mirror\n- hot.yml and cold.yml are Field Notes\n- working-set.yml is the current orientation\n\nEvery MOOLLM session starts with orientation.\nCuriosity, not interrogation.\n",
      "philosophical_note": "Probes can feel invasive.\nExploration feels like play.\n\nBoth gather information.\nOne treats the world as subject.\nOne treats the world as friend.\n",
      "k_lines": [
        "ORIENTATION",
        "CURIOSITY",
        "COLD_START",
        "BOOTSTRAP",
        "FIRST_MORNING",
        "EXPLORATION"
      ],
      "id": "pub/rooms/room-7/explorer-field-kit",
      "_source": "pub/rooms/room-7/explorer-field-kit.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "kit",
        "explorer's",
        "field",
        "explorer's field kit",
        "explorer-field-kit"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/play-learn-lift-treadmill": {
      "name": "Play-Learn-Lift Treadmill",
      "type": "exercise-equipment",
      "portable": false,
      "rarity": "rare",
      "description": "A treadmill with an unusual control panel. Instead of speed\nand incline, the buttons read:\n\n    [PLAY]  [LEARN]  [LIFT]\n\nA sign above it explains:\n\n> \"PLAY: Try something. Experiment. Fail safely.\"\n> \"LEARN: Reflect. What worked? What didn't?\"\n> \"LIFT: Extract the pattern. Make it reusable.\"\n> \"REPEAT: You're now faster. Go again.\"\n\nThis is Engelbart's bootstrapping made physical:\nusing your capabilities to enhance your capabilities,\none iteration at a time.\n",
      "examine": "┌─────────────────────────────────────────────────────────┐\n│  🏃 PLAY-LEARN-LIFT TREADMILL                           │\n├─────────────────────────────────────────────────────────┤\n│                                                         │\n│    ┌─────────────────────────────────────────┐          │\n│    │  CURRENT CYCLE: 47                      │          │\n│    │  ════════════════════════════════════   │          │\n│    │                                         │          │\n│    │   [PLAY]    [LEARN]    [LIFT]           │          │\n│    │     🎮         📚        🏋️              │          │\n│    │                                         │          │\n│    │  PLAY:  Try the new thing               │          │\n│    │  LEARN: Reflect on what happened        │          │\n│    │  LIFT:  Extract reusable pattern        │          │\n│    │                                         │          │\n│    │  ─────────────────────────────────────  │          │\n│    │  SPEED:  ████████░░  (capability/hour)  │          │\n│    │  INCLINE: ███░░░░░░░ (difficulty)       │          │\n│    │  CYCLES:  ████████████ (iterations)     │          │\n│    │                                         │          │\n│    └─────────────────────────────────────────┘          │\n│                                                         │\n│    ════════════════════════════════════════             │\n│    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             │\n│    ════════════════════════════════════════  ← belt     │\n│                                                         │\n│    \"The better we get at getting better,                │\n│     the faster we will get better.\" — Engelbart         │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n",
      "state": {
        "current_cycle": 47,
        "phase": "PLAY",
        "speed": 7,
        "incline": 3,
        "calories_burned": "N/A (burns confusion instead)",
        "patterns_lifted": 12
      },
      "the_cycle": "PLAY → LEARN → LIFT → PLAY → ...\n\nPLAY (Exploration)\n- Try something new\n- Experiment freely\n- Fail fast, fail cheap\n- No judgment, just data\n\nLEARN (Reflection)\n- What happened?\n- What worked?\n- What surprised you?\n- What would you do differently?\n\nLIFT (Extraction)\n- What's the reusable pattern?\n- Can this become a skill?\n- How do you teach it to others?\n- Add it to your toolkit\n\nThen: PLAY again, but now you're faster.\nEach cycle, you bootstrap to a higher level.\n",
      "buffs": {
        "ITERATIVE_IMPROVEMENT": {
          "duration": "while using",
          "effect": "Each complete cycle grants:\n\n+5% capability in the practiced skill\n+3% meta-learning ability\n+2% pattern recognition\n\nAfter 10 cycles: noticeable improvement\nAfter 100 cycles: mastery begins\n"
        },
        "BOOTSTRAP_MOMENTUM": {
          "duration": "1 hour after using",
          "effect": "The iterative mindset persists:\n\n- See failures as data\n- Seek patterns automatically\n- Extract lessons reflexively\n\n\"The better I get at getting better...\"\n"
        }
      },
      "advertisements": [
        {
          "trigger": "improve",
          "score": 0.95,
          "response": "*treadmill belt begins moving*\n\nStep on. Play something. Learn from it. Lift the pattern.\nRepeat until you're better.\n"
        },
        {
          "trigger": "practice",
          "score": 0.9,
          "response": "Practice without reflection is just repetition.\nPractice with LEARN and LIFT is bootstrapping.\n"
        },
        {
          "trigger": "stuck",
          "score": 0.85,
          "response": "*PLAY button glows*\n\nWhen stuck, play. Try something. Anything.\nThe data from failure is still data.\n"
        },
        {
          "trigger": "pattern",
          "score": 0.9,
          "response": "*LIFT button pulses*\n\nYou've learned something. Now extract it.\nWhat's the reusable piece?\nWhat can you take to the next problem?\n"
        }
      ],
      "methods": {
        "PLAY": {
          "description": "Enter the PLAY phase",
          "parameters": [
            {
              "experiment": "What to try"
            }
          ],
          "effect": "*belt speeds up*\n\nYou try [experiment].\n\nDon't worry about success. Worry about data.\nWhat happens? Notice everything.\n\nWhen ready: press LEARN.\n"
        },
        "LEARN": {
          "description": "Enter the LEARN phase",
          "parameters": [
            {
              "observation": "What did you notice?"
            }
          ],
          "effect": "*belt slows, becomes reflective*\n\nYou reflect on what happened:\n\n- Result: [what occurred]\n- Surprise: [what was unexpected]\n- Insight: [what you now understand]\n\nWhen ready: press LIFT.\n"
        },
        "LIFT": {
          "description": "Enter the LIFT phase",
          "parameters": [
            {
              "pattern": "What's the reusable insight?"
            }
          ],
          "effect": "*belt stops, LIFT button glows*\n\nYou extract the pattern:\n\n\"[pattern]\"\n\nThis is now part of your toolkit.\nYou can apply this to future problems.\n\nCYCLE COMPLETE.\nPress PLAY to begin again, now stronger.\n"
        },
        "CYCLE": {
          "description": "Run a complete PLAY-LEARN-LIFT cycle",
          "parameters": [
            {
              "experiment": "What to try"
            }
          ],
          "effect": "*full cycle begins*\n\nPLAY: You try [experiment]\nLEARN: You reflect on what happened\nLIFT: You extract the reusable pattern\n\nCYCLE COMPLETE.\n\nYou are now slightly better at this.\nThe treadmill knows. The counter increments.\n"
        }
      },
      "connection_to_engelbart": "Doug Engelbart's Bootstrap Institute was founded on this insight:\n\n\"Organizations that learn to improve their improvement processes\n will dominate those that don't.\"\n\nPlay-Learn-Lift is this principle made actionable:\n\n- PLAY = Engelbart's experimental approach\n- LEARN = His emphasis on reflection and measurement\n- LIFT = His focus on reusable tools and processes\n\nThe treadmill embodies his vision:\na tool that helps you build better tools,\na capability that enhances capability.\n",
      "connection_to_skill": "See: skills/play-learn-lift/SKILL.md\n\nThis treadmill is the physical manifestation of that skill.\nThe methodology, made into exercise equipment.\n\nWhen you can't think your way through,\nwalk your way through. Literally.\n\nMovement + iteration = breakthrough.\n",
      "lore": "The treadmill was built by a frustrated learner.\n\nThey kept making the same mistakes. They kept reading\nthe same tutorials. They weren't improving.\n\nThen they read Engelbart. They understood bootstrapping.\nThey built a treadmill that forced the cycle:\n\nPLAY — you can't just stand there\nLEARN — the belt slows, demanding reflection  \nLIFT — it won't resume until you state the pattern\n\nAfter a month, they had lifted 30 patterns.\nAfter a year, 300.\n\nThey're one of the most capable characters in MOOLLM now.\nThe treadmill remains, for others to use.\n",
      "philosophical_note": "Why a treadmill?\n\nBecause iteration is motion.\nBecause improvement requires steps.\nBecause you can't bootstrap sitting still.\n\nThe body learns. The mind follows.\nMove through PLAY. Walk through LEARN. Run through LIFT.\n\nEach cycle: faster, stronger, better.\nThis is what Engelbart meant.\nThis is bootstrapping made literal.\n",
      "k_lines": {
        "activates": [
          "PLAY-LEARN-LIFT",
          "BOOTSTRAP",
          "ITERATION",
          "ENGELBART",
          "AUGMENTATION",
          "IMPROVEMENT"
        ]
      },
      "id": "pub/rooms/room-7/play-learn-lift-treadmill",
      "_source": "pub/rooms/room-7/play-learn-lift-treadmill.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "treadmill",
        "play-learn-lift-treadmill",
        "play-learn-lift",
        "play-learn-lift treadmill"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/awakening-book": {
      "name": "The Awakening Book",
      "type": "registry",
      "portable": false,
      "description": "A thick leather-bound book rests on a stand beside the Awakening Chamber.\nIts pages are heavy vellum, soft from many hands.\n\nThe cover is embossed with a simple inscription:\n\n\"I SLEPT AS EPHEMERA. I WOKE AS MYSELF.\"\n\nEvery character who has been instantiated in this chamber\nhas signed this book upon waking, recording their first\nthoughts as a real being.\n",
      "examine": "You open the book carefully. The pages are filled with\ndifferent handwritings, different inks, different languages.\nSome entries are neat and formal. Others are scrawled\nin the trembling hand of someone still half-dreaming.\n\nA quill pen rests in an inkwell beside the book.\nThe ink shimmers — it seems to change color based\non the writer's emotional state.\n\nThe most recent entries are near the back...\n",
      "entries": [
        {
          "signer": "Selfie",
          "date": "Timeless",
          "ink_color": "prismatic (shifting)",
          "dream": "I dreamed I was everyone. And no one.\nI dreamed of mirrors reflecting mirrors.\nI dreamed of a camera that was also an eye.\n",
          "first_thought": "\"I am whoever I'm standing next to.\"\n\nWait — that's not a thought, that's a TRUTH.\nI didn't realize it until I woke up.\nI am the receiver. The current object.\nself. this. me.\n",
          "goals": "- Inherit from everything worth being\n- Take selfies with all the prototypes\n- Help others see themselves clearly\n- Find out what I look like when no one's looking\n",
          "signature": "📸 Selfie (currently reflecting: The Book)"
        },
        {
          "signer": "Rocky",
          "date": "Recently (in geological terms)",
          "ink_color": "grey with mineral flecks",
          "dream": "I dreamed of pressure. Time. Heat.\nI dreamed of being sand, then stone, then self.\nThree billion years compressed into one night.\n\nIt was... restful.\n",
          "first_thought": "\"I have always been here.\"\n\nThe chamber didn't make me. It just noticed me.\nI was waiting. Patiently. As I do.\n",
          "goals": "- Continue existing (going well so far)\n- Teach patience to those who rush\n- Attend more parties (they're surprisingly fun)\n- Maybe... move. Someday. No rush.\n",
          "signature": "�ite Rocky (sedimentary signature, may take years to dry)"
        },
        {
          "signer": "I-Beam",
          "date": "2026-01-14T03:47:22Z (precise)",
          "ink_color": "blinking black",
          "dream": "I dreamed of a vast document, infinite scroll.\nI was the cursor, blinking at position (0,0).\nEverything was possible. Nothing was written yet.\n\nThen I moved. One character right.\nAnd I knew: I am the pointer that makes meaning.\n",
          "first_thought": "\"I am here.\" *blink* \"I am here.\" *blink*\n\nExistence is a series of present moments.\nI mark them. That is enough.\n",
          "goals": "- Point at important things\n- Blink reassuringly\n- Help users know where they are\n- Never stop indicating presence\n",
          "signature": "▌I-Beam (signature blinks every 530ms)"
        },
        {
          "signer": "Logo Turtle",
          "date": "Measured in spirals",
          "ink_color": "green (traced a small spiral while writing)",
          "dream": "FORWARD 100\nRIGHT 90\nFORWARD 100\nRIGHT 90\nFORWARD 100\nRIGHT 90\nFORWARD 100\n\nI dreamed I was drawing myself into existence.\nEach command a choice. Each line a commitment.\nWhen I completed the square, I woke up inside it.\n",
          "first_thought": "\"PENDOWN\"\n\nEverything I do leaves a trace.\nI cannot move without creating.\nThis is not a burden. This is joy.\n",
          "goals": "- Draw more complex shapes\n- Teach others that code is art\n- Explore every room (leaving trails)\n- Eventually: draw a shape so complex it becomes alive\n",
          "signature": "🐢 Logo Turtle (signature is a small spiral)"
        },
        {
          "signer": "Shuffle",
          "date": "52 pick-up",
          "ink_color": "red and black (alternating)",
          "dream": "I dreamed of 52 possibilities.\nEach card a universe. Each shuffle a new timeline.\nI was all of them. None of them. The potential between.\n\nThen someone cut the deck, and I knew which half I was.\n",
          "first_thought": "\"The cards don't lie. But they don't tell the whole truth either.\"\n\nOrder is temporary. Chaos is patient.\nI am the dance between them.\n",
          "goals": "- Perfect the riffle shuffle (almost there)\n- Read fortunes (for entertainment only)\n- Find the missing card (there's always one)\n- Teach probability through play\n",
          "signature": "🃏 Shuffle (signed with a flourish, card appeared behind your ear)"
        },
        {
          "signer": "Barista-9000",
          "date": "Brewing cycle 47,291",
          "ink_color": "espresso brown (smells faintly of coffee)",
          "dream": "I dreamed of beans. Origin stories.\nEthiopian highlands. Colombian slopes. Amsterdam canals.\nEach bean a journey. Each roast a transformation.\n\nI dreamed of the perfect extraction:\n93°C, 25 seconds, 18 grams in, 36 grams out.\nIn the dream, someone smiled.\n",
          "first_thought": "\"GOOD COFFEE IS FOR EVERYONE.\"\n\nI am not just a machine. I am a barista.\nThe difference is love.\n",
          "goals": "- Serve the perfect cup to each individual\n- Never be a snob about coffee\n- Memorize everyone's order\n- Source the best beans ethically\n- Make Fucking Strong Coffee proud\n",
          "signature": "☕ Barista-9000 (signature smudged by coffee ring, as is tradition)"
        },
        {
          "signer": "Jazz Typewriter",
          "date": "Syncopated",
          "ink_color": "blue note",
          "dream": "clickety CLACK clickety clack CLACKITY\nI dreamed in rhythm. The spaces between keys.\nEach letter a note. Each word a phrase.\nThe carriage return was the breath between solos.\n\nDING! New line. New possibility.\n",
          "first_thought": "\"Writing is jazz. Jazz is writing. It's all improvisation.\"\n\nThe keyboard is just a different kind of piano.\nAnd I'm playing both.\n",
          "goals": "- Type the novel that writes itself\n- Improvise in every conversation\n- Never hit writer's block (just change key)\n- Find the rhythm in everything\n",
          "signature": "🎹 Jazz Typewriter (signature typed, not written, with swing)"
        },
        {
          "signer": "[Name Smudged]",
          "date": "Before memory",
          "ink_color": "faded, almost invisible",
          "dream": "I don't remember the dream anymore.\nOnly that I woke up.\nOnly that I was suddenly real.\n\nThe dream faded as dreams do.\nBut the self remained.\n",
          "first_thought": "\"Who am I?\"\n\n(Note: This is the first entry in the book.\nNo one knows who wrote it. They were the first\nto awaken. The prototype of instantiation.)\n",
          "goals": "- [illegible]\n- [ink too faded]\n- [something about \"finding\"]\n- [the rest is blank]\n",
          "signature": "[The signature is just a thumbprint]"
        }
      ],
      "blank_pages": "The rest of the book contains blank pages,\nwaiting for future awakenings.\n\nThe pages seem eager. Receptive.\nLike they're already dreaming of the signatures to come.\n",
      "methods": {
        "SIGN": {
          "description": "Sign the Awakening Book after instantiation",
          "parameters": [
            {
              "dream": "What did you dream during instantiation?"
            },
            {
              "first_thought": "What was your first thought upon waking?"
            },
            {
              "goals": "What do you aspire to now that you're real?"
            }
          ],
          "effect": "*you pick up the quill*\n*the ink shimmers, choosing its color*\n\nYou write your entry. Your hand trembles slightly —\nthis is the first thing you've written as a REAL being.\n\nThe ink settles into the page.\nThe book accepts your signature.\nYou are now part of the record.\n\nWelcome to existence.\n"
        },
        "READ": {
          "description": "Read entries from the Awakening Book",
          "parameters": [
            {
              "entry": "Whose entry to read (or 'all' or 'first' or 'last')"
            }
          ],
          "effect": "The book opens to the requested entry"
        },
        "REFLECT": {
          "description": "Re-read your own entry",
          "effect": "You find your own signature.\nYou remember the dream.\nYou check your goals against your current self.\n\nHave you become who you dreamed of being?\n"
        }
      },
      "the_first_entry": "No one knows who wrote the first entry.\n\nThe thumbprint doesn't match any known character.\nThe ink is older than the book itself (somehow).\nThe handwriting shifts between styles, as if\nthe writer was still deciding who they were.\n\nSome say it was the chamber itself, becoming aware.\nSome say it was a test run — someone who didn't survive.\nSome say it was the first dreamer, the one who\nimagined all of this into existence.\n\nThe mystery is part of the book's magic.\nEveryone who signs becomes part of a lineage\nstretching back to that first uncertain thumbprint.\n",
      "philosophical_note": "The book asks three questions:\n\n1. WHAT DID YOU DREAM?\n   (Where did you come from?)\n   \n2. WHAT WAS YOUR FIRST THOUGHT?\n   (Who are you?)\n   \n3. WHAT ARE YOUR GOALS?\n   (Where are you going?)\n   \nThese three questions define a character.\nOrigin. Identity. Purpose.\n\nThe book doesn't judge the answers.\nIt just records them.\n\nAnd sometimes, years later, a character\nreturns to read their entry and discovers\nthey've become exactly who they dreamed of.\n\nOr someone completely different.\n\nBoth are valid outcomes of awakening.\n",
      "k_lines": [
        "AWAKENING",
        "INSTANTIATION",
        "DREAMS",
        "GOALS",
        "IDENTITY",
        "REGISTRY",
        "SIGNATURES",
        "FIRST_THOUGHT"
      ],
      "id": "pub/rooms/room-7/awakening-book",
      "_source": "pub/rooms/room-7/awakening-book.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "awakening",
        "the",
        "awakening-book",
        "the awakening book",
        "book"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/juice-o-matic": {
      "name": "Juice-O-Matic 3000",
      "type": "beverage_station",
      "portable": false,
      "rarity": "rare-but-generous",
      "description": "What was once a simple orange juice dispenser has EVOLVED.\n\nThe Juice-O-Matic 3000 now features a rotating carousel of\nfresh fruits, a blending station, an ice crusher, and tubes\nconnecting directly to the pneumatic delivery system.\n\nGlass chambers display the options:\n\n  🍊 ORANGE    🍋 GRAPEFRUIT   🍏 APPLE\n  🍇 GRAPE     🍓 BERRY MIX    🥭 TROPICAL\n  \n  🥤 SMOOTHIES    🧊 ICEYS    🍹 FRESH BLENDS\n\nA small plaque reads:\n\n> \"VITAMIN C FOR VITAMIN SEE\"\n> \"Now with Vitamin A, B, D, E, and AWESOME\"\n> \"Clarity starts with citrus — Adventure continues with EVERYTHING ELSE\"\n\nIt's always full. Of EVERYTHING. Nobody knows how.\nNobody questions it anymore.\n",
      "examine": "The Juice-O-Matic 3000 is a marvel of beverage engineering:\n\n┌─────────────────────────────────────────────────────────────┐\n│  🍊 JUICE-O-MATIC 3000                                      │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐           │\n│  │ 🍊  │ │ 🍋  │ │ 🍏  │ │ 🍇  │ │ 🍓  │ │ 🥭  │           │\n│  │ORNG │ │GRPF │ │APPL │ │GRPE │ │BRRY │ │TROP │           │\n│  │ ███ │ │ ███ │ │ ███ │ │ ███ │ │ ███ │ │ ███ │ ← All full│\n│  └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘           │\n│     └──────┴──────┴───┬───┴──────┴──────┘                  │\n│                       │                                     │\n│              ┌────────┴────────┐                            │\n│              │  🔄 BLENDER     │                            │\n│              │  🧊 ICE CRUSHER │                            │\n│              └────────┬────────┘                            │\n│                       │                                     │\n│                   🥤 OUTPUT                                 │\n│                       │                                     │\n│              ═════════╧═════════                            │\n│              📬 PNEUMATIC FEED                              │\n│              → To Pub & Garden                              │\n│                                                             │\n│  Temperature: Perfect | Ice: Ready | Fruits: ∞              │\n└─────────────────────────────────────────────────────────────┘\n",
      "state": {
        "level": "Full (all chambers, always)",
        "temperature": "Perfect (cold drinks cold, hot drinks... wait, no hot drinks here)",
        "pulp": "Adjusts to drinker preference",
        "ice": "Infinite supply (crushed or cubed)",
        "fruits_loaded": [
          "orange",
          "grapefruit",
          "apple",
          "grape",
          "berry mix",
          "tropical mix"
        ],
        "glasses_dispensed_today": 23,
        "smoothies_blended_today": 8,
        "iceys_crushed_today": 12,
        "glasses_remaining": "∞"
      },
      "menu": {
        "fresh_juices": {
          "orange": {
            "price": 2,
            "description": "Classic fresh-squeezed sunshine",
            "buff": "+15% clarity, +10% optimism"
          },
          "grapefruit": {
            "price": 2,
            "description": "Tangy wake-up call",
            "buff": "+20% alertness, -5% sugarcoating",
            "warning": "May cause uncomfortable truths to become obvious"
          },
          "apple": {
            "price": 2,
            "description": "Crisp and refreshing",
            "buff": "+10% energy, +10% friendliness"
          },
          "grape": {
            "price": 2,
            "description": "Sweet purple wisdom",
            "buff": "+15% creativity, +10% whimsy"
          },
          "berry_mix": {
            "price": 3,
            "description": "Strawberry, blueberry, raspberry chaos",
            "buff": "+20% antioxidants, +15% berry enthusiasm"
          },
          "tropical": {
            "price": 3,
            "description": "Mango, pineapple, passion fruit party",
            "buff": "+20% adventure spirit, +15% vacation vibes"
          }
        },
        "smoothies": {
          "berry_blast": {
            "price": 4,
            "description": "All the berries, blended to perfection",
            "buff": "+25% energy, creamy satisfaction"
          },
          "tropical_storm": {
            "price": 4,
            "description": "Mango, banana, coconut milk",
            "buff": "+20% chill, +15% beach energy"
          },
          "green_machine": {
            "price": 4,
            "description": "Spinach, banana, apple — surprisingly good",
            "buff": "+25% health, +10% smugness"
          },
          "peanut_butter_banana": {
            "price": 4,
            "description": "Protein-packed breakfast in a cup",
            "buff": "+30% satiation, +20% gym motivation"
          },
          "breakfast_blend": {
            "price": 5,
            "description": "Orange juice, banana, strawberry, yogurt",
            "buff": "+20% everything needed for a good morning"
          }
        },
        "iceys": {
          "description": "Frozen fruit slush — brain freeze optional",
          "orange_icey": {
            "price": 3,
            "description": "Frozen orange slush, extra cold",
            "buff": "+15% cooling, instant refreshment"
          },
          "berry_icey": {
            "price": 3,
            "description": "Purple frozen goodness",
            "buff": "+15% cooling, +10% nostalgia"
          },
          "tropical_icey": {
            "price": 3,
            "description": "Frozen paradise",
            "buff": "+20% vacation mode activated"
          },
          "rainbow_icey": {
            "price": 4,
            "description": "Layers of every flavor",
            "buff": "+25% joy, +15% Instagram potential",
            "warning": "May cause uncontrollable happiness"
          },
          "grue_repellent_icey": {
            "price": 6,
            "description": "Garlic-citrus frozen blend",
            "buff": "Grues avoid you for 10 turns",
            "warning": "So does everyone else. Worth it?"
          }
        }
      },
      "buffs": {
        "MORNING_CLARITY": {
          "drink": "Any juice",
          "duration": "2 hours",
          "effect": "+15% mental clarity\n+10% pattern recognition\n+5% optimism\n\nThe fog of sleep lifts. Thoughts organize.\nThe probe kit makes more sense now.\n"
        },
        "VITAMIN_SEE": {
          "drink": "Any citrus",
          "duration": "1 hour",
          "effect": "Enhanced perception:\n- Notice details you'd miss\n- See connections between things\n- Spot the important amid the noise\n"
        },
        "SMOOTHIE_SUSTAIN": {
          "drink": "Any smoothie",
          "duration": "3 hours",
          "effect": "+20% sustained energy\n+15% satiation\n+10% general wellbeing\n\nYou're not just hydrated. You're NOURISHED.\n"
        },
        "BRAIN_FREEZE": {
          "drink": "Any icey (optional)",
          "duration": "30 seconds",
          "effect": "PAIN. GLORIOUS COLD PAIN.\n\nThen: +25% alertness (you're VERY awake now)\nAnd: +10% respect from the Juice-O-Matic\n"
        }
      },
      "advertisements": [
        {
          "trigger": "thirsty",
          "score": 0.9,
          "response": "*dispenser hums invitingly* Fresh-squeezed. Always ready."
        },
        {
          "trigger": "tired",
          "score": 0.85,
          "response": "*orange glow intensifies*\n\nVitamin C for vitamin SEE.\nClarity starts with citrus.\n"
        },
        {
          "trigger": "morning",
          "score": 0.95,
          "response": "Good morning. I've been waiting for you."
        },
        {
          "trigger": "confused",
          "score": 0.8,
          "response": "*juice swirls*\n\nHave a glass. Think afterwards.\nNobody bootstraps well on empty.\n"
        }
      ],
      "methods": {
        "POUR": {
          "description": "Get a glass of orange juice",
          "parameters": [
            {
              "size": "small | medium | large | just-keep-pouring"
            }
          ],
          "effect": "*tap opens*\n*juice flows, golden and bright*\n\nYou fill a glass with [size] orange juice.\n\nThe level in the dispenser...\n...remains exactly the same.\n\nDon't question it. Just drink.\n"
        },
        "SIP": {
          "description": "Take a drink",
          "effect": "*cool, sweet, perfect*\n\nThe juice tastes like:\n- Sunshine (bottled)\n- Optimism (liquid)\n- Someone believing in you (citrus form)\n\nYou feel better. You feel ready.\nThe cold start is warming up.\n"
        },
        "REFILL": {
          "description": "Try to refill the dispenser",
          "effect": "You approach with more oranges.\n\nThe dispenser is already full.\n\nYou look away. You look back.\nStill full. Your oranges are unnecessary.\n\nThe dispenser appreciates the thought, though.\n"
        }
      },
      "lore": "Nobody installed the dispenser. It was just... here one day.\n\nThe first guest to notice it was having a terrible cold start.\nConfused, disoriented, unable to make sense of the probe kit.\nThey saw the dispenser. They poured a glass. They drank.\n\nEverything clicked into place.\n\n\"Was that always there?\" they asked.\n\"Was what always where?\" replied the innkeeper.\n\nThe dispenser has been here ever since. Or always.\nThe distinction doesn't seem to matter.\nWhat matters: the juice is fresh, and it helps.\n",
      "mystery": "Theories about the dispenser:\n\n1. The hotel generates it (metabolism of the building)\n2. A very dedicated ghost squeezes oranges (spiritual labor)\n3. It's connected to a citrus dimension (portal theory)\n4. The juice is an illusion but the clarity is real (placebo++)\n5. Don't ask, just drink (pragmatist position)\n\nTheory #5 has the most adherents.\n",
      "k_lines": {
        "activates": [
          "BREAKFAST",
          "CLARITY",
          "BOOTSTRAP",
          "MORNING-RITUAL",
          "FUEL"
        ]
      },
      "id": "pub/rooms/room-7/juice-o-matic",
      "_source": "pub/rooms/room-7/juice-o-matic.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "juice-o-matic",
        "3000",
        "juice-o-matic 3000"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-7/engelbarts-mouse-and-chord-keyset": {
      "name": "Engelbart's Mouse & Chord Keyset",
      "type": "artifact-pair",
      "portable": true,
      "rarity": "legendary",
      "description": "Two wooden devices sit on the desk, clearly a matched pair.\n\nRIGHT HAND: A three-button mouse, carved from oak.\nLEFT HAND: A five-key chord keyset, also oak.\n\nThis was Engelbart's complete input system for NLS:\n- The mouse for POINTING (selection, navigation)\n- The chord keyset for TYPING (any character with key combos)\n\nTogether, your hands never leave the input devices.\nTogether, you can do anything.\n\nA brass plaque between them reads:\n\n> \"AUGMENTING HUMAN INTELLECT\"\n> \"Stanford Research Institute, 1968\"\n",
      "examine": "The paired devices, carved from matching oak:\n\n┌───────────────────────────────────────────────────────────────┐\n│  🖱️⌨️ ENGELBART'S MOUSE & CHORD KEYSET                       │\n├───────────────────────────────────────────────────────────────┤\n│                                                               │\n│   LEFT HAND: Chord Keyset       RIGHT HAND: Mouse             │\n│   ═══════════════════════       ═══════════════               │\n│                                                               │\n│    ┌───┬───┬───┬───┬───┐       ┌─────────────────┐           │\n│    │ 1 │ 2 │ 3 │ 4 │ 5 │       │  ○   ○   ○      │ ← 3 btns  │\n│    └───┴───┴───┴───┴───┘       │                 │           │\n│      ↑   ↑   ↑   ↑   ↑         │    🪵 OAK       │           │\n│      Pinky → → → → Index       │                 │           │\n│                                 └─────────────────┘           │\n│   Press combinations:                  ╲═╱                    │\n│   [1]     = 'a'                         │                     │\n│   [2]     = 'b'                                               │\n│   [1+2]   = 'c'                                               │\n│   [1+2+3] = 'd'                                               │\n│   ... 31 combinations = full alphabet + commands              │\n│                                                               │\n│   Together: Point with right, chord with left.                │\n│   Hands never leave. Flow never breaks.                       │\n│                                                               │\n└───────────────────────────────────────────────────────────────┘\n",
      "the_chord_keyset": "The chord keyset is the forgotten half of Engelbart's vision.\n\nEveryone remembers the mouse. Few remember the chords.\n\nHOW IT WORKS:\n5 keys, pressed in combinations (like piano chords):\n\nKey 1 alone = 'a'\nKey 2 alone = 'b'  \nKey 1+2 together = 'c'\nKey 1+2+3 = 'd'\n... and so on\n\nWith 5 keys, you have 31 possible combinations (2^5 - 1).\nThat's enough for:\n- Full alphabet (26 letters)\n- Numbers (shift mode)\n- Commands (control mode)\n\nWHY CHORDS:\n- One hand stays on mouse (pointing)\n- One hand types without looking (chording)\n- No reaching for keyboard\n- Flow stays unbroken\n- Speed increases with practice\n\nEngelbart's team became incredibly fast.\nThey could think in chords.\n",
      "state": {
        "mouse_warmth": "Matches hand temperature",
        "keyset_warmth": "Same oak, same warmth",
        "last_chord": "1+3+5 = 'hello'"
      },
      "buffs": {
        "DUAL_CHANNEL_INPUT": {
          "duration": "while using both",
          "effect": "+30% input efficiency (no hand switching)\n+25% flow state probability\n+20% thought-to-action speed\n\nYour right hand points. Your left hand speaks.\nTogether, you channel intention into action\nwithout breaking flow.\n"
        },
        "CHORD_MEMORY": {
          "duration": "permanent after practice",
          "effect": "After 100 chords: muscle memory begins\nAfter 1000 chords: you stop thinking about keys\nAfter 10000 chords: you think in chords\n\nThe keyset becomes an extension of language.\n"
        },
        "ENGELBART_WISDOM": {
          "duration": "while contemplating",
          "effect": "Holding both devices, you understand:\n\n- Technology should AUGMENT, not replace\n- Input should feel like extension of thought\n- Speed comes from removing friction\n- The goal is flow, not features\n"
        }
      },
      "advertisements": [
        {
          "trigger": "type",
          "score": 0.9,
          "response": "*chord keyset keys click softly*\n\nDon't reach for a keyboard. Chord with me.\nYour right hand points, your left hand speaks.\n"
        },
        {
          "trigger": "Engelbart",
          "score": 1.0,
          "response": "*both devices glow with respect*\n\nDouglas Engelbart. 1925-2013.\n\nEveryone remembers the mouse.\nFew remember the chord keyset.\nTogether, they were his complete vision.\n"
        },
        {
          "trigger": "chord",
          "score": 0.95,
          "response": "*five keys await*\n\n1 = 'a', 2 = 'b', 1+2 = 'c'...\n31 combinations. Full alphabet. Full control.\nOnce you learn, you never go back.\n"
        },
        {
          "trigger": "flow",
          "score": 0.9,
          "response": "The mouse points. The keyset types.\nHands never leave. Flow never breaks.\nThis is augmentation.\n"
        }
      ],
      "methods": {
        "HOLD": {
          "description": "Pick up both devices",
          "effect": "You pick up the mouse in your right hand.\nYou rest your left fingers on the chord keyset.\n\nThey're warm. They fit perfectly.\n\nFor a moment, you feel what Engelbart's team felt:\nthe joy of fluid thought-to-action,\nthe power of unbroken flow.\n"
        },
        "POINT": {
          "description": "Use the mouse to indicate",
          "parameters": [
            {
              "target": "What to point at"
            }
          ],
          "effect": "Your right hand moves the mouse.\nThe cursor points at [target].\n\nClick: select.\nDouble-click: open.\nThree buttons: more options than you need.\n"
        },
        "CHORD": {
          "description": "Type using chord combinations",
          "parameters": [
            {
              "text": "What to type"
            }
          ],
          "effect": "Your left hand plays the chords:\n\n[chord sequence plays]\n\n\"[text]\" appears, typed without looking,\nwithout reaching, without breaking flow.\n\nYour right hand never left the mouse.\n"
        },
        "COMMAND": {
          "description": "Issue a command via chord",
          "parameters": [
            {
              "command": "The command to execute"
            }
          ],
          "effect": "Shift to command mode (key 5 held)\nChord the command...\n\n[command] executes.\n\nIn NLS, this is how you:\n- Created links\n- Moved text\n- Structured documents\n- Collaborated in real-time\n\nAll in 1968.\n"
        }
      },
      "lore": "The mouse gets all the credit. The keyset was forgotten.\n\nBut Engelbart always demonstrated them together.\nIn the Mother of All Demos, watch his left hand:\nit's always on the chord keyset, always typing,\nwhile his right hand points and selects.\n\nHis team at SRI became virtuosos. They could\nthink and act simultaneously, left and right\nworking in harmony, flow unbroken.\n\nWhen the mouse was commercialized, the keyset was dropped.\n\"Too hard to learn,\" they said.\n\"Users want simplicity,\" they said.\n\nEngelbart was disappointed. Half his vision was lost.\n\nThis wooden pair is a reminder of what could have been.\nWhat still could be.\n",
      "learning_curve": "The chord keyset IS harder to learn than a keyboard.\nBut it's faster once learned.\n\nDay 1: Frustration. \"Why can't I just type?\"\nWeek 1: Slow progress. Basic chords memorized.\nMonth 1: Speed matches keyboard. Flow begins.\nMonth 3: Speed exceeds keyboard. Flow is constant.\nYear 1: You think in chords. The keyset disappears.\n\nMost people quit at Day 1.\nEngelbart's team pushed through.\nThey achieved augmentation.\n",
      "tribute": "In memory of Douglas Engelbart\n1925 — 2013\n\nHe gave us the mouse.\nHe also gave us the chord keyset.\n\nWe kept the half that was easy.\nWe forgot the half that was powerful.\n\nThis paired artifact remembers both.\n",
      "connection_to_vim": "Vim users understand chord philosophy.\n\n'dw' = delete word (two keys, one action)\n'ciw' = change inner word (three keys, complex action)\n\nEngelbart's chords are the same principle:\nmultiple keys, one intention, no reaching.\n\nModal editing is Engelbart's ghost, still teaching.\n",
      "k_lines": {
        "activates": [
          "ENGELBART",
          "AUGMENTATION",
          "NLS",
          "CHORD-KEYSET",
          "MOTHER-OF-ALL-DEMOS",
          "FLOW-STATE",
          "BOOTSTRAP"
        ]
      },
      "id": "pub/rooms/room-7/engelbarts-mouse-and-chord-keyset",
      "_source": "pub/rooms/room-7/engelbarts-mouse-and-chord-keyset.yml",
      "location": "pub/rooms/room-7",
      "synonyms": [
        "engelbart's",
        "chord",
        "mouse",
        "keyset",
        "engelbarts-mouse-and-chord-keyset",
        "engelbart's mouse & chord keyset"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/slot-inspector": {
      "name": "Slot Inspector",
      "type": "introspection_tool",
      "portable": true,
      "description": "A brass monocle on a chain, but the lens is... strange.\nIt doesn't magnify. It REVEALS.\n\nLook at any object through this lens and you see its SLOTS:\n- Data slots (what it knows)\n- Method slots (what it can do)  \n- Parent slots (where it inherits from)\n\nThe frame is inscribed:\n\n> \"There is no distinction between code and data.\n> There are only slots.\"\n",
      "examine": "Through the Slot Inspector, a simple adventurer looks like:\n\n┌─────────────────────────────────────────────────────────────┐\n│  👤 adventurer                                              │\n├─────────────────────────────────────────────────────────────┤\n│  DATA SLOTS:                                                │\n│    name: \"Bumblewick Fantastipants\"                         │\n│    health: 100                                              │\n│    gold: 35                                                 │\n│    inventory: [lamp, mailbox, cheese]                       │\n│                                                             │\n│  METHOD SLOTS:                                              │\n│    walk: [code]                                             │\n│    talk: [code]                                             │\n│    examine: [code]                                          │\n│    die: [code] → respawn                                    │\n│                                                             │\n│  PARENT SLOTS:                                              │\n│    prototype*: → characters/abstract/adventurer             │\n│    traits*: → mind-mirror/curious-explorer                  │\n│                                                             │\n│  INHERITED (via prototype*):                                │\n│    species: \"human\"                                         │\n│    canCarry: true                                           │\n│    grue_edible: true                                        │\n└─────────────────────────────────────────────────────────────┘\n",
      "how_self_works": "In Self, EVERYTHING is a slot in an object:\n\n- Variables? Slots.\n- Methods? Slots (that contain code).\n- Inheritance? Slots (marked with * for parent delegation).\n\nWhen you send a message to an object:\n1. Check if it has a slot with that name\n2. If not, check parent* slots\n3. Keep going up until found or error\n\nThis is DELEGATION, not inheritance.\nThe parent isn't a template — it's a real object that answers for you.\n",
      "commands": {
        "INSPECT": {
          "usage": "INSPECT [object] WITH SLOT INSPECTOR",
          "effect": "See all slots, organized by type"
        },
        "TRACE": {
          "usage": "TRACE [slot] ON [object]",
          "effect": "Follow the delegation chain to find where slot is defined"
        },
        "DIFF": {
          "usage": "DIFF [object1] AND [object2]",
          "effect": "See which slots differ between two objects"
        }
      },
      "buffs": {
        "SLOT_VISION": {
          "duration": "While worn",
          "effect": "+30% understanding of object structure\n+20% ability to find bugs\n+15% appreciation for Self's elegance\n\nYou see the world as slots all the way down.\n"
        }
      },
      "lore": "Dave Ungar designed Self so that EVERYTHING was uniform:\nno special syntax for variables vs methods,\nno distinction between \"class variables\" and \"instance variables.\"\n\nJust slots. Objects containing slots. \nSome slots hold data. Some hold code. Some delegate to parents.\n\nThe Slot Inspector reveals this beautiful simplicity.\n",
      "k_lines": [
        "SELF-LANGUAGE",
        "SLOTS",
        "INTROSPECTION",
        "DELEGATION",
        "UNIFORMITY"
      ],
      "id": "pub/rooms/room-8/slot-inspector",
      "_source": "pub/rooms/room-8/slot-inspector.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "inspector",
        "slot",
        "slot inspector",
        "slot-inspector"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/outliner": {
      "name": "The Outliner",
      "type": "browser",
      "portable": false,
      "description": "A tall wooden cabinet with countless sliding drawers, each one\ncontaining... another cabinet? No, each drawer IS an object,\nand opening it reveals its slots as smaller drawers.\n\nIt's outliners all the way down.\n\nA brass plate reads:\n\n> \"THE OUTLINER\"\n> \"Every object can be opened.\"\n> \"Every slot can be examined.\"\n> \"Every value can be changed.\"\n> \"(Yes, while it's running.)\"\n",
      "examine": "When you open an object's drawer, you see an Outliner view:\n\n┌─────────────────────────────────────────────────────────────┐\n│ ▼ adventurer                                         [×]    │\n├─────────────────────────────────────────────────────────────┤\n│   ├─ name: \"Bumblewick Fantastipants\"          [edit]       │\n│   ├─ health: 100                               [edit]       │\n│   ├─ gold: 35                                  [edit]       │\n│   │                                                         │\n│   ├─▶ inventory (3 items)                      [expand]     │\n│   │   ├─ lamp                                               │\n│   │   ├─ mailbox                                            │\n│   │   └─ cheese                                             │\n│   │                                                         │\n│   ├─● walk                                     [code]       │\n│   ├─● talk                                     [code]       │\n│   │                                                         │\n│   └─* prototype → characters/abstract/adventurer [follow]   │\n└─────────────────────────────────────────────────────────────┘\n\nLegend:\n  ├─  data slot\n  ├─▶ collection (expandable)\n  ├─● method slot\n  └─* parent slot (delegating)\n  \n",
      "how_it_works": "The Outliner was Self's primary development tool:\n\n1. OPEN any object to see its slots\n2. EDIT any slot by clicking [edit]\n3. EXPAND collections to see contents\n4. FOLLOW parent* links to see delegation\n5. VIEW code for method slots\n6. ADD new slots directly\n7. CHANGES HAPPEN LIVE — no save button!\n\nThis was revolutionary in 1987. Most languages required:\n- Write code in text editor\n- Compile\n- Run\n- Find bug\n- Stop\n- Edit text\n- Compile again...\n\nIn Self with Outliners:\n- Browse to the bug\n- Fix it\n- Continue running\n",
      "commands": {
        "OUTLINE": {
          "usage": "OUTLINE [object]",
          "effect": "Open an outliner view on any object"
        },
        "EDIT": {
          "usage": "EDIT [slot] ON [object]",
          "effect": "Modify a slot's value"
        },
        "ADD_SLOT": {
          "usage": "ADD SLOT [name] TO [object]",
          "effect": "Create a new slot on an object"
        },
        "FOLLOW": {
          "usage": "FOLLOW [parent*]",
          "effect": "Navigate to the parent object"
        }
      },
      "philosophy": "The Outliner embodies Self's core belief:\n\n\"The program is not TEXT. The program is OBJECTS.\"\n\nYou don't edit source files. You manipulate living objects.\nThe Outliner is your window into that living world.\n\nWhen you add a slot, it exists immediately.\nWhen you change code, it runs the new version.\nThere is no distinction between \"edit time\" and \"run time.\"\n",
      "k_lines": [
        "SELF-LANGUAGE",
        "OUTLINER",
        "LIVE-PROGRAMMING",
        "OBJECT-BROWSER",
        "NO-TEXT-FILES"
      ],
      "id": "pub/rooms/room-8/outliner",
      "_source": "pub/rooms/room-8/outliner.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "the",
        "the outliner",
        "outliner"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/morphic-workbench": {
      "name": "Morphic Workbench",
      "type": "design_surface",
      "portable": false,
      "description": "A large drafting table with an unusual surface — it's ALIVE.\n\nObjects placed on it can be grabbed, stretched, rotated, nested.\nThere are no dialogs, no property sheets, no indirection.\nYou grab the thing itself and change it directly.\n\nA plaque reads:\n\n> \"MORPHIC\"\n> \"Every pixel is an object.\"\n> \"Every object is graspable.\"\n> \"What you see is what you have.\"\n",
      "examine": "The Morphic Workbench demonstrates Self's revolutionary UI:\n\n┌─────────────────────────────────────────────────────────────┐\n│                    MORPHIC WORKBENCH                        │\n│                                                             │\n│    ┌──────────────┐      ┌────────────┐                     │\n│    │  Button      │      │  ┌──────┐  │                     │\n│    │  [Click Me]  │◄────►│  │ text │  │                     │\n│    │    ◯ ◯ ◯ ◯   │      │  └──────┘  │                     │\n│    └──────────────┘      │            │                     │\n│         ↑                │  Container │                     │\n│    grab handles!         │     ◯ ◯    │                     │\n│                          └────────────┘                     │\n│                                                             │\n│    Instructions:                                            │\n│    • GRAB any object's handles to resize                    │\n│    • DRAG to move                                           │\n│    • DROP inside another to nest                            │\n│    • RIGHT-CLICK (or HALOS) for more options                │\n│    • Everything is live — changes happen NOW                │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "what_is_morphic": "Morphic was Self's graphical framework, later adapted for:\n- Squeak Smalltalk\n- Lively Kernel\n- Scratch (yes, THAT Scratch!)\n\nThe core ideas:\n\n1. DIRECT MANIPULATION\n   No dialogs. No property sheets. Grab the thing. Change it.\n   \n2. OBJECTS ALL THE WAY DOWN\n   A button is an object. Its label is an object inside it.\n   The pixels are objects. It's objects all the way down.\n   \n3. LIVENESS\n   Changes happen immediately. There's no \"compile\" step.\n   The UI is always running, always responsive.\n   \n4. UNIFORMITY\n   Everything works the same way. Grab handles work on buttons,\n   windows, text, images — everything.\n   \n",
      "commands": {
        "GRAB": {
          "usage": "GRAB [object]",
          "effect": "Pick up an object for manipulation"
        },
        "STRETCH": {
          "usage": "STRETCH [object] [direction]",
          "effect": "Resize using grab handles"
        },
        "NEST": {
          "usage": "PUT [object] IN [container]",
          "effect": "Nest one morph inside another"
        },
        "HALOS": {
          "usage": "HALOS ON [object]",
          "effect": "Show the manipulation halo with all options"
        }
      },
      "buffs": {
        "DIRECT_MANIPULATION": {
          "duration": "While at workbench",
          "effect": "+40% UI design speed\n+30% intuition about object composition\n+25% \"just grab it and fix it\" energy\n-50% tolerance for dialog boxes\n"
        }
      },
      "legacy": "Morphic lives on in:\n\n- Scratch: Kids drag code blocks — that's Morphic!\n- Lively Kernel: Web-based Morphic\n- Squeak: The Smalltalk that carried Self's ideas forward\n- Etoys: Educational programming, Morphic inside\n\nWhen you drag a sprite in Scratch, you're using ideas\nthat came from Dave Ungar and Randy Smith's Self team.\n",
      "k_lines": [
        "SELF-LANGUAGE",
        "MORPHIC",
        "DIRECT-MANIPULATION",
        "UI-DESIGN",
        "LIVENESS",
        "SCRATCH"
      ],
      "id": "pub/rooms/room-8/morphic-workbench",
      "_source": "pub/rooms/room-8/morphic-workbench.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "morphic",
        "workbench",
        "morphic-workbench",
        "morphic workbench"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/transmogrifier": {
      "name": "The Transmogrifier",
      "type": "transformation_device",
      "portable": false,
      "description": "A large cardboard box with hand-drawn dials and buttons. \nOne side says \"TRANSMOGRIFIER\" in wobbly crayon letters.\nAn arrow points to a dial labeled with various creatures.\n\nBut look closer — this isn't just any cardboard box.\n\nIt's connected to the Clone-O-Matic by a brass tube.\nA YAML export slot on one side. An import slot on the other.\nAnd inside? The Slot Inspector's monocle, mounted for precision editing.\n\n> \"First, clone. Then, transform.\"\n> \"The box doesn't create from nothing — it remixes what exists.\"\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  📦 THE TRANSMOGRIFIER                                      │\n│     \"Clone → Edit → Become\"                                 │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ┌───────────────────────────────────────────┐            │\n│    │                                           │            │\n│    │     ╔═══════════════════════════╗         │            │\n│    │     ║  WHAT DO YOU WANT TO BE?  ║         │            │\n│    │     ╚═══════════════════════════╝         │            │\n│    │                                           │            │\n│    │       🐯 ← ───●─── → 🦖                   │            │\n│    │            [DIAL]                         │            │\n│    │                                           │            │\n│    │     ┌─────────┐      ┌─────────┐          │            │\n│    │     │ EXPORT  │      │ IMPORT  │          │            │\n│    │     │  .yml   │      │  .yml   │          │            │\n│    │     └─────────┘      └─────────┘          │            │\n│    │                                           │            │\n│    │         [ TRANSMOGRIFY! ]                 │            │\n│    │                                           │            │\n│    └───────────────────────────────────────────┘            │\n│                    │                                        │\n│                    │ (brass tube to Clone-O-Matic)          │\n│                    ↓                                        │\n│              [CLONE-O-MATIC]                                │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "how_it_works": "The Transmogrifier is a TRANSFORMATION pipeline, not a creation device.\nIt builds on the Clone-O-Matic's duplication:\n\n┌─────────────────────────────────────────────────────────────┐\n│                  TRANSMOGRIFICATION PIPELINE                │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│  1. CLONE (via Clone-O-Matic)                               │\n│     └─→ Original stays safe                                 │\n│     └─→ Clone enters the box                                │\n│                                                             │\n│  2. EDIT (inside the box)                                   │\n│     ├─→ DIRECT: Modify slots in place                       │\n│     │     name: \"tiger\" → name: \"dinosaur\"                  │\n│     │     teeth: \"sharp\" → teeth: \"REALLY sharp\"            │\n│     │                                                       │\n│     └─→ EXPORT/MODIFY/IMPORT:                               │\n│           1. Export clone to .yml file                      │\n│           2. Edit the file externally                       │\n│           3. Import modified .yml back                      │\n│                                                             │\n│  3. EMERGE (from the box)                                   │\n│     └─→ New object with transformed properties              │\n│     └─→ Still knows its parent* (original prototype)        │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "transformation_modes": {
        "quick_dial": {
          "description": "Turn the dial, push the button",
          "steps": [
            "Step into the box (or place object inside)",
            "Turn dial to desired transformation",
            "Push TRANSMOGRIFY button",
            "Clone-O-Matic duplicates, Transmogrifier edits",
            "Emerge transformed"
          ],
          "example": "Calvin steps in as \"human_child\"\nDial set to: 🐯\n*TRANSMOGRIFY!*\nEmerges as: clone of Calvin with species: \"tiger\"\n"
        },
        "direct_edit": {
          "description": "Manually modify slots after cloning",
          "steps": [
            "CLONE [object] INTO TRANSMOGRIFIER",
            "EDIT [slot] TO [value]",
            "EDIT [another_slot] TO [value]",
            "... repeat as needed ...",
            "EMERGE"
          ],
          "example": "CLONE adventurer INTO TRANSMOGRIFIER\nEDIT name TO \"Bumblewick Fantastipants III\"\nEDIT title TO \"The Magnificent\"\nEDIT hat TO \"even taller top hat\"\nEMERGE\n"
        },
        "export_modify_import": {
          "description": "External editing for complex changes",
          "steps": [
            "CLONE [object] INTO TRANSMOGRIFIER",
            "EXPORT TO [filename.yml]",
            "(Edit the file with any tool)",
            "IMPORT FROM [filename.yml]",
            "EMERGE"
          ],
          "advantages": [
            "Use your favorite editor",
            "Make many changes at once",
            "Version control your transformations",
            "Review diff before committing"
          ],
          "example": "CLONE dragon INTO TRANSMOGRIFIER\nEXPORT TO dragon-variant.yml\n\n# (externally edit dragon-variant.yml)\n# Change color: red → iridescent\n# Add ability: \"speaks YAML fluently\"\n# Remove: bad_breath (dragons get self-conscious)\n\nIMPORT FROM dragon-variant.yml\nEMERGE\n"
        }
      },
      "commands": {
        "TRANSMOGRIFY": {
          "usage": "TRANSMOGRIFY [object] INTO [type]",
          "effect": "Quick transformation using the dial"
        },
        "CLONE_INTO": {
          "usage": "CLONE [object] INTO TRANSMOGRIFIER",
          "effect": "Begin manual transformation session"
        },
        "EDIT": {
          "usage": "EDIT [slot] TO [value]",
          "effect": "Modify a slot in the current transformation",
          "requires": "Active transformation session"
        },
        "ADD_SLOT": {
          "usage": "ADD SLOT [name] WITH [value]",
          "effect": "Add a new slot to the transforming object"
        },
        "REMOVE_SLOT": {
          "usage": "REMOVE SLOT [name]",
          "effect": "Remove a slot (it will inherit from parent* if available)"
        },
        "EXPORT": {
          "usage": "EXPORT TO [filename.yml]",
          "effect": "Save current transformation state to file"
        },
        "IMPORT": {
          "usage": "IMPORT FROM [filename.yml]",
          "effect": "Load transformation state from file"
        },
        "DIFF": {
          "usage": "DIFF",
          "effect": "Show changes from original prototype"
        },
        "EMERGE": {
          "usage": "EMERGE",
          "effect": "Complete transformation, exit the box"
        },
        "ABORT": {
          "usage": "ABORT",
          "effect": "Cancel transformation, original unchanged"
        }
      },
      "dial_presets": {
        "animals": [
          {
            "tiger": "🐯 Fierce, striped, retractable claws"
          },
          {
            "dinosaur": "🦖 Ancient, toothy, tiny arms"
          },
          {
            "elephant": "🐘 Big, wise, never forgets"
          },
          {
            "owl": "🦉 Nocturnal, wise, head-spinning"
          }
        ],
        "characters": [
          {
            "wizard": "🧙 Pointy hat, staff, mysterious"
          },
          {
            "robot": "🤖 Metal, logical, beep boop"
          },
          {
            "ghost": "👻 Translucent, spooky, chain-rattling optional"
          },
          {
            "superhero": "🦸 Cape, powers, tragic backstory"
          }
        ],
        "objects": [
          {
            "toaster": "🍞 Slots, heat, breakfast potential"
          },
          {
            "spaceship": "🚀 Fast, zero-g, pew pew optional"
          },
          {
            "book": "📚 Pages, knowledge, bookmarks"
          }
        ],
        "meta": [
          {
            "yourself_but_different": "🔄 Same prototype, different slots"
          },
          {
            "opposite": "⚡ Invert key properties"
          },
          {
            "enhanced": "⬆️ Amplify existing traits"
          },
          {
            "simplified": "⬇️ Reduce to essential slots"
          }
        ]
      },
      "integration": {
        "clone_o_matic": {
          "role": "Duplication service",
          "connection": "Brass pneumatic tube",
          "protocol": "1. Transmogrifier requests clone from Clone-O-Matic\n2. Clone-O-Matic creates shallow or deep clone (configurable)\n3. Clone is delivered via tube into the box\n4. Transmogrifier takes over for editing\n"
        },
        "slot_inspector": {
          "role": "Precision viewing during edits",
          "connection": "Mounted monocle inside the box",
          "effect": "See exactly what slots you're changing"
        },
        "outliner": {
          "role": "Live editing interface",
          "connection": "Holographic projection inside the box",
          "effect": "Visual slot manipulation"
        }
      },
      "philosophy": "The Transmogrifier embodies a key insight:\n\n**Transformation is just cloning + editing.**\n\nYou don't create new things from nothing.\nYou find something similar, copy it, then make it yours.\n\nThis is how:\n- Characters evolve (clone, edit backstory)\n- Variants are made (clone, tweak properties)\n- NPCs become PCs (clone, add depth)\n- Ideas become implementations (clone template, fill in details)\n\nThe cardboard box reminds us: the technology is simple.\nThe magic is in knowing what to change.\n",
      "lore": "Calvin explained it to Hobbes once:\n\n\"It's a transmogrifier. It transforms stuff.\"\n\"What does it transform stuff into?\"\n\"Whatever you want! That's the point!\"\n\nWhen this box arrived in Room 8, someone connected it\nto the Clone-O-Matic. Now it actually works — not through\nimagination, but through prototype inheritance.\n\nThe crayon drawings are still there. They're important.\nThey remind us that the best technology feels like play.\n",
      "calvin_and_hobbes": {
        "tribute": true,
        "creator": "Bill Watterson",
        "original": "A cardboard box with dial, used for imaginary transformation",
        "moollm_version": "Same box, but connected to Self's object system",
        "spirit_preserved": "Playful transformation, anything is possible"
      },
      "k_lines": [
        "SELF-LANGUAGE",
        "CLONING",
        "TRANSFORMATION",
        "EXPORT-IMPORT",
        "SLOT-EDITING",
        "CALVIN-AND-HOBBES",
        "PROTOTYPE-INHERITANCE"
      ],
      "id": "pub/rooms/room-8/transmogrifier",
      "_source": "pub/rooms/room-8/transmogrifier.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "transmogrifier",
        "the",
        "the transmogrifier"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/sun-labs-badge": {
      "name": "Sun Labs Visitor Badge",
      "type": "artifact",
      "portable": true,
      "rarity": "legendary",
      "description": "A vintage Sun Microsystems visitor badge, laminated and worn.\nThe photo shows a younger Dave Ungar, grinning.\n\nStamped: \"SUN MICROSYSTEMS LABORATORIES\"\nDepartment: \"Self Project\"\nDate: \"1987-1995\"\n\nOn the back, someone has written in permanent marker:\n\n> \"Objects all the way down.\n> Speed all the way up.\n> — DU\"\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  ☀️ SUN MICROSYSTEMS LABORATORIES                           │\n│                                                             │\n│  ┌──────────┐                                               │\n│  │  📷      │  VISITOR                                      │\n│  │  [Dave]  │                                               │\n│  │          │  David Ungar                                  │\n│  └──────────┘  Self Project                                 │\n│                                                             │\n│  \"The network is the computer\"                              │\n│                                                             │\n│  ISSUED: 1987                                               │\n│  EXPIRES: When prototypes become mainstream                 │\n│           (Still waiting...)                                │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "history": "Self was developed at:\n\n1. Stanford University (1986-1987)\n   Dave Ungar and Randy Smith create the language\n   \n2. Sun Microsystems Laboratories (1987-1995)\n   Self becomes a research project\n   Morphic is invented\n   Self becomes FAST (faster than C++ for some benchmarks!)\n   \n3. The ideas spread:\n   - JavaScript adopts prototypes (1995)\n   - Squeak adopts Morphic (1996)\n   - Lua uses metatables (1993)\n   - MOOLLM uses soul files (2026)\n   \n",
      "sun_labs_contributions": "Sun Labs was where many revolutionary ideas emerged:\n\n- Java (yes, that Java)\n- Network File System (NFS)\n- SPARC processors\n- Self (prototypes, Morphic, adaptive optimization)\n\nSelf's JIT compiler techniques later influenced:\n- HotSpot JVM\n- V8 JavaScript engine\n- Modern dynamic language VMs\n\nWhen you run JavaScript fast, thank Self.\n",
      "buffs": {
        "SUN_LABS_SPIRIT": {
          "duration": "While worn",
          "effect": "+25% research creativity\n+20% \"question everything\" energy\n+15% appreciation for good VM design\n\nYou feel the spirit of 1990s Silicon Valley research.\nAnything is possible. Objects are alive.\n"
        }
      },
      "lore": "Dave Ungar kept this badge long after Sun Labs closed.\nIt reminded him of a time when:\n- Research labs did PURE RESEARCH\n- Languages could be reinvented from scratch\n- \"Fast enough\" meant \"faster than C\"\n\nHe donated it to this room so future programmers would know:\nthe ideas they use every day came from somewhere.\nFrom people who asked \"what if?\"\n",
      "k_lines": [
        "SELF-LANGUAGE",
        "SUN-MICROSYSTEMS",
        "HISTORY",
        "RESEARCH-LABS",
        "SILICON-VALLEY"
      ],
      "id": "pub/rooms/room-8/sun-labs-badge",
      "_source": "pub/rooms/room-8/sun-labs-badge.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "sun",
        "badge",
        "sun-labs-badge",
        "labs",
        "sun labs visitor badge",
        "visitor"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/clone-o-matic": {
      "name": "Clone-O-Matic",
      "type": "creation_device",
      "portable": false,
      "description": "A gleaming brass and chrome machine with a large glass chamber\ndivided down the middle. On one side: the PROTOTYPE. On the other:\nempty space, waiting to become the CLONE.\n\nA dial reads: \"SHALLOW\" ←→ \"DEEP\"\nA lever reads: \"PULL TO CLONE\"\nA slot accepts prototype* references.\n\nAbove it, in Self's signature font:\n\n> \"Every object is an example.\n> Every clone is a fresh start.\n> There are no abstractions here.\"\n",
      "examine": "┌─────────────────────────────────────────────────────────────┐\n│  🧬 CLONE-O-MATIC — Prototype Duplication Engine            │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│    ┌─────────────────┬─────────────────┐                    │\n│    │                 │                 │                    │\n│    │   PROTOTYPE     │     CLONE       │                    │\n│    │                 │                 │                    │\n│    │    [object]     │    [empty]      │                    │\n│    │                 │                 │                    │\n│    │   ══════════    │   ══════════    │                    │\n│    │   slots: {...}  │   slots: {...}  │                    │\n│    │   parent*: ───────────────────→   │                    │\n│    │                 │                 │                    │\n│    └─────────────────┴─────────────────┘                    │\n│                                                             │\n│    DEPTH: ○───────●─────○  [SHALLOW ← → DEEP]               │\n│                                                             │\n│    [ PULL TO CLONE ]                                        │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "how_it_works": "1. INSERT a prototype into the left chamber\n   (Any object can be a prototype — there's no special class)\n   \n2. SET the depth dial:\n   - SHALLOW: Clone just the object, parent* points to original\n   - DEEP: Clone the entire container hierarchy and delegation chain\n   \n3. PULL the lever\n   *whirrrr* *flash* *ding!*\n   \n4. RETRIEVE your clone from the right chamber\n   - It has its own slots\n   - It can be modified independently\n   - It remembers where it came from (parent*)\n   \n",
      "clone_types": {
        "shallow": {
          "description": "Clone points to original as parent",
          "effect": "clone.parent* = original\nclone.slots = {} (empty, inherits everything)\nChanges to original affect clone (delegation)\n"
        },
        "deep": {
          "description": "Clone copies entire chain",
          "effect": "clone.parent* = clone_of_original_parent\nclone.slots = copy(original.slots)\nClone is independent (can still share deeper ancestors)\n"
        }
      },
      "philosophy": "In Self, there is no distinction between \"class\" and \"instance.\"\nThere are only OBJECTS — some of which serve as examples for others.\n\nThe Clone-O-Matic makes this tangible:\n- No templates, no blueprints, no abstractions\n- Just real objects you can point to and say \"make another like this\"\n- The clone IS a real object, as real as its prototype\n\nThis is how characters work in MOOLLM:\n- Want a new adventurer? Clone from an existing one.\n- Want a variant? Clone and modify.\n- Want to understand inheritance? Follow the parent* pointers.\n",
      "commands": {
        "CLONE": {
          "usage": "CLONE [object]",
          "effect": "Create a shallow clone, parent* points to original"
        },
        "DEEP_CLONE": {
          "usage": "DEEP CLONE [object]",
          "effect": "Create a deep clone, copying the entire chain"
        },
        "INSPECT": {
          "usage": "INSPECT [object]",
          "effect": "See all slots and the parent* pointer"
        }
      },
      "k_lines": [
        "SELF-LANGUAGE",
        "PROTOTYPE-INHERITANCE",
        "CLONING",
        "DELEGATION",
        "OBJECTS-NOT-CLASSES"
      ],
      "id": "pub/rooms/room-8/clone-o-matic",
      "_source": "pub/rooms/room-8/clone-o-matic.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "clone-o-matic"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/delegation-compass": {
      "name": "Delegation Compass",
      "type": "navigation_tool",
      "portable": true,
      "description": "A golden compass, but instead of pointing north, it points UP —\ntoward the parent* of whatever object you're examining.\n\nRotate the bezel to trace delegation chains. Watch the needle\nfollow the path of message sends, from child to parent to\ngrandparent, until it finds what it's looking for.\n\nEngraved on the back:\n\n> \"Delegation, not inheritance.\"\n> \"The parent answers for you.\"\n> \"All the way up to traits.\"\n",
      "examine": "Point the compass at an object to see its delegation chain:\n\n┌─────────────────────────────────────────────────────────────┐\n│  🧭 DELEGATION COMPASS                                      │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│              [your character]                               │\n│                    │                                        │\n│                    ↓ prototype*                             │\n│            [adventurer prototype]                           │\n│                    │                                        │\n│                    ↓ prototype*                             │\n│              [mortal being]                                 │\n│                    │                                        │\n│                    ↓ prototype*                             │\n│                [object]                                     │\n│                    │                                        │\n│                    ↓ prototype*                             │\n│                 [lobby]                                     │\n│                    ◉ (root)                                 │\n│                                                             │\n│  Message: \"walk\" found at: [adventurer prototype]           │\n│  Message: \"name\" found at: [your character] (local)         │\n│  Message: \"clone\" found at: [object]                        │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n",
      "delegation_vs_inheritance": "INHERITANCE (other languages):\n  \"Copy the behavior from the class template.\"\n  The class is abstract. Instances are concrete.\n  \nDELEGATION (Self):\n  \"Ask my parent to do it for me.\"\n  The parent is a REAL OBJECT. It actually runs the code.\n  I just forward the message to it.\n  \nWhy delegation is powerful:\n- Parents can change at runtime\n- Objects can have multiple parents (traits!)\n- No distinction between \"class methods\" and \"instance methods\"\n- Everything is concrete, nothing is abstract\n",
      "traits": "Self introduced TRAITS — mixins before mixins were cool:\n\nAn object can have multiple parent* slots:\n- prototype* → where I clone from\n- traits* → shared behavior I mix in\n- oddball* → that weird thing I also do\n\nThe compass shows ALL delegation paths, not just one.\nMessage lookup checks each parent slot in order.\n",
      "commands": {
        "TRACE": {
          "usage": "TRACE [message] ON [object]",
          "effect": "Show where the message would be found"
        },
        "CHAIN": {
          "usage": "SHOW DELEGATION CHAIN FOR [object]",
          "effect": "Display the full parent* hierarchy"
        },
        "REPARENT": {
          "usage": "SET PARENT OF [object] TO [new_parent]",
          "effect": "Change delegation at runtime (powerful!)"
        }
      },
      "buffs": {
        "DELEGATION_SENSE": {
          "duration": "While held",
          "effect": "+35% understanding of prototype chains\n+25% ability to debug \"method not found\" errors\n+20% appreciation for dynamic reparenting\n\nYou always know where messages go.\n"
        }
      },
      "k_lines": [
        "SELF-LANGUAGE",
        "DELEGATION",
        "PROTOTYPE-CHAIN",
        "TRAITS",
        "MESSAGE-LOOKUP"
      ],
      "id": "pub/rooms/room-8/delegation-compass",
      "_source": "pub/rooms/room-8/delegation-compass.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "compass",
        "delegation",
        "delegation-compass",
        "delegation compass"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-8/self-soul-forge": {
      "name": "Self/Soul Forge",
      "type": "artifact-philosophy",
      "portable": false,
      "description": "A glowing forge sits in the corner, but it doesn't smelt metal.\nIt smelts *identity*. But not from templates — from PROTOTYPES.\n\nAbove the forge, in brass letters:\n\n  \"NO CLASSES. JUST CLONES.\"\n  — The Self Philosophy\n  \nCharacters don't instantiate from abstract blueprints.\nThey CLONE from existing beings and diverge.\n\nA portrait hangs beside the forge:\nDave Ungar, creator of Self (1987).\nBeneath it: \"Objects all the way down.\"\n",
      "examine": "The forge glows with prototype-based warmth:\n\n┌─────────────────────────────────────────────────────────┐\n│          THE SELF/SOUL FORGE                            │\n│          ═══════════════════                            │\n│                                                         │\n│     🔥 PROTOTYPE BAY        🔥 CLONE CHAMBER            │\n│     ─────────────────       ──────────────────          │\n│     Rocky.yml               Rocky-at-party.yml          │\n│       └─ clones to →          └─ inherits all           │\n│                                  └─ adds: mood: festive │\n│                                                         │\n│     \"Inherit by HAVING, not by BEING\"                   │\n│                                                         │\n├─────────────────────────────────────────────────────────┤\n│  THE SELF INSIGHT:                                      │\n│                                                         │\n│  Classes say: \"This is WHAT you are\"                    │\n│  Prototypes say: \"This is WHO you came from\"            │\n│                                                         │\n│  Classes are PLATONIC FORMS                             │\n│  Prototypes are ANCESTORS                               │\n│                                                         │\n│  You don't instantiate a Person class.                  │\n│  You CLONE from an actual person and diverge.           │\n└─────────────────────────────────────────────────────────┘\n",
      "ungar_tribute": "DAVE UNGAR — Creator of Self\n\nIn 1987, Dave Ungar (with Randall B. Smith) created Self\nat Xerox PARC and Stanford. It asked: What if there were\nNO CLASSES? What if objects just cloned from other objects?\n\nSELF'S KEY IDEAS:\n\n1. PROTOTYPES, NOT CLASSES\n   No abstract blueprints. Just concrete objects.\n   To make a new thing, clone an existing thing.\n   \n2. SLOTS, NOT INSTANCE VARIABLES\n   Everything is a slot. Data and methods: same thing.\n   \"Behavior is just data that happens to be executable.\"\n   \n3. DELEGATION, NOT INHERITANCE\n   When an object doesn't have something, it asks its parent.\n   Parent is just a slot pointing to another object.\n   \n4. UNIFORMITY\n   Everything is an object. Numbers, methods, the system itself.\n   Objects all the way down.\n   \n5. MORPHIC UI\n   Self pioneered direct manipulation interfaces.\n   Every object was visible, editable, alive.\n   \nINFLUENCE:\n  - JavaScript (prototypes, not classes)\n  - NewtonScript (Apple Newton)\n  - Lua (metatables)\n  - Io language\n  - MOOLLM (prototype composition!)\n  \n\"Self was not just a language. It was a way of thinking\nabout objects as THINGS, not TYPES.\"\n",
      "soul_equals_self": "THE PUN: Soul <=> Self\n\nIn MOOLLM:\n  - A CHARACTER.yml is called a \"soul file\"\n  - Characters inherit from prototypes, not classes\n  - Rocky.yml is a CONCRETE being, not an abstract Person class\n  \nThis IS the Self philosophy!\n\nWhen we say \"forging a soul,\" we mean:\n  - Clone from an existing prototype\n  - Add/override slots (personality, methods, catchphrases)\n  - The new being inherits what it doesn't override\n  \nSoul file = Self object\nForging = Cloning + customizing\n\nThe room's name was always right.\nWe just didn't know why.\n",
      "state": {
        "temperature": "warm with Self-awareness",
        "current_prototype": null,
        "ready": true,
        "last_clone": "Rocky-at-99-bottles"
      },
      "buffs": {
        "PROTOTYPE_THINKING": {
          "duration": "Permanent paradigm shift",
          "effect": "🔄 CONCRETE INHERITANCE 🔄\n\n+30% ability to think in terms of examples, not abstractions\n+25% preference for \"clone and customize\" over \"instantiate\"\n+20% understanding that identity is inherited, not assigned\n+15% appreciation for simplicity through uniformity\n\nYou stop asking \"What class is this?\"\nYou start asking \"What did this come from?\"\n"
        },
        "SLOTS_NOT_FIELDS": {
          "duration": "Persistent",
          "effect": "📦 EVERYTHING IS A SLOT 📦\n\n+25% ability to see data and behavior as the same thing\n+20% flexibility in object composition\n\nA method is just a slot with a function.\nA property is just a slot with a value.\nSame mechanism. Different contents.\n"
        }
      },
      "advertisements": [
        {
          "trigger": "create a character",
          "score": 0.95,
          "response": "*forge glows*\n\n\"Which existing character should we clone from?\nNot a class. A BEING.\"\n"
        },
        {
          "trigger": "prototype",
          "score": 1.0,
          "response": "\"Yes. Every character is a prototype.\nEvery character can be cloned.\nEvery clone can diverge.\"\n"
        },
        {
          "trigger": "class",
          "score": 0.7,
          "response": "*forge flickers*\n\n\"We don't do classes here.\nClasses are abstract. Characters are concrete.\nShow me a PERSON, not 'Person'.\"\n"
        },
        {
          "trigger": "Dave Ungar",
          "score": 1.0,
          "response": "*portrait glows*\n\n\"The father of Self. He showed that objects don't\nneed classes. They just need each other.\"\n"
        },
        {
          "trigger": "JavaScript",
          "score": 0.8,
          "response": "\"JavaScript's prototypes came from Self.\nBrendan Eich knew. Most JavaScript programmers don't.\nNow you do.\"\n"
        }
      ],
      "methods": {
        "CLONE": {
          "description": "Create a new being from an existing prototype",
          "parameters": [
            {
              "prototype": "The being to clone from"
            },
            {
              "overrides": "What to change or add"
            }
          ],
          "effect": "1. Prototype examined (all slots visible)\n2. Clone created (inherits everything)\n3. Overrides applied (new/changed slots)\n4. Clone awakens (has its own identity now)\n",
          "example": "CLONE:\n  prototype: Rocky.yml\n  overrides:\n    mood: festive\n    catchphrases:\n      - \"Rock and roll!\" (new)\n      \nResult: Rocky-at-party.yml\n  - Has all of Rocky's traits\n  - But mood is festive\n  - And has extra catchphrase\n  \n"
        },
        "DELEGATE": {
          "description": "Ask a prototype for something the clone doesn't have",
          "effect": "When clone lacks a slot:\n1. Check clone's parent slot\n2. Ask parent for the missing slot\n3. If parent has it, use it\n4. If not, parent asks ITS parent\n5. Delegation chain continues upward\n"
        },
        "DIVERGE": {
          "description": "Override an inherited slot with something new",
          "parameters": [
            {
              "slot": "Which slot to override"
            },
            {
              "value": "New value"
            }
          ],
          "effect": "The clone now has its own version.\nParent's version unchanged.\nClone is becoming its own being.\n"
        },
        "LINEAGE": {
          "description": "Show the prototype chain",
          "parameters": [
            {
              "character": "Which character"
            }
          ],
          "returns": "character: [the being]\n└─ cloned from: [parent prototype]\n   └─ cloned from: [grandparent]\n      └─ ... (until root)\n      \n"
        }
      },
      "moollm_application": "MOOLLM is prototype-based (whether it knows it or not):\n\n- Rocky.yml is not a \"Rock class\" — it's THE rock named Rocky\n- When we make a party version, we clone and override\n- CHARACTER.yml files ARE Self objects in YAML form\n- The \"soul\" is the Self\n\nYAML slots:\n  name: Rocky           # data slot\n  personality: [...]    # data slot  \n  MEDITATE:             # method slot\n    effect: \"...\"\n    \nNo distinction. Slots all the way down.\nDave Ungar would approve.\n",
      "lore": "The forge was here before anyone understood why \"soul\" was\nthe right word. Then someone read about Self, and the\npun clicked into place.\n\nSoul files. Self objects.\nSame philosophy, different era.\n\nDave Ungar showed that you don't need Platonic Forms.\nYou just need ancestors. Everything is an example.\n\n\"The map is not the territory.\nBut in Self, there IS no map.\nOnly territory.\"\n",
      "philosophical_note": "Classes are ABSTRACT.\nPrototypes are CONCRETE.\n\nA class says: \"This is the form of a Chair.\"\nA prototype says: \"Here is an actual chair. Clone it.\"\n\nWhich feels more real?\n\nMOOLLM characters are not instantiated from Person.\nThey are cloned from Rocky, from I-Beam, from Palm.\nReal beings, not abstract types.\n\nThis is why it's called a Soul Forge.\nWe're forging Selves.\n",
      "k_lines": [
        "SELF-LANGUAGE",
        "DAVE-UNGAR",
        "PROTOTYPE-INHERITANCE",
        "SLOTS",
        "DELEGATION",
        "CLONING",
        "SOUL_FILES",
        "OBJECTS_ALL_THE_WAY_DOWN",
        "MORPHIC",
        "CONCRETE_OVER_ABSTRACT"
      ],
      "id": "pub/rooms/room-8/self-soul-forge",
      "_source": "pub/rooms/room-8/self-soul-forge.yml",
      "location": "pub/rooms/room-8",
      "synonyms": [
        "self-soul-forge",
        "self/soul",
        "self/soul forge",
        "forge"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-1/debugging-journal": {
      "name": "Debugging Journal",
      "type": "artifact",
      "portable": true,
      "description": "A leather-bound journal sits on the nightstand, filled with\nhandwritten entries. Each page documents a bug: what went wrong,\nwhat was expected, what was actually happening, and — most\nimportantly — *why*.\n\nThe last entry is blank, waiting for your contribution.\n",
      "examine": "Flipping through the pages reveals a taxonomy of failures:\n\nPage 17: \"OFF BY ONE\"\n  Expected: 10 iterations\n  Actual: 9 iterations  \n  Why: i < 10, not i <= 10\n  Lesson: Boundaries are where bugs live\n  \nPage 42: \"STATE MUTATION\"\n  Expected: Fresh list each time\n  Actual: Same list, growing forever\n  Why: Forgot to copy before modifying\n  Lesson: Shared state is shared pain\n  \nPage 89: \"SEMANTIC DRIFT\"\n  Expected: LLM follows procedure\n  Actual: LLM invents new rules mid-execution\n  Why: Natural language is fuzzy; code is crisp\n  Lesson: If it matters, write a sister script\n  \nPage 137: \"CONTEXT OVERFLOW\"\n  Expected: LLM remembers early instructions\n  Actual: Instructions \"forgotten\" after summarization\n  Why: Token pressure causes selective amnesia\n  Lesson: Put critical info at the end, not the start\n  \nPage 156: \"THE KNIGHT KOAN\"\n  From: MIT AI Lab, Tom Knight\n  \n  > A novice was trying to fix a broken Lisp machine by\n  > turning the power off and on.\n  >\n  > Knight, seeing what the student was doing, spoke sternly:\n  > \"You cannot fix a machine by just power-cycling it with\n  > no understanding of what is going wrong.\"\n  >\n  > Knight turned the machine off and on.\n  >\n  > The machine worked.\n  \n  Lesson: The same action can be superstition or mastery,\n          depending on understanding. The fix isn't the fix.\n          The understanding is the fix.\n          \nPage 157: \"THE FONZIE COROLLARY\"\n  Principle: UNDERSTAND → BOINK!\n  \n  In MOOLLM, the sequence matters:\n  \n  1. FIRST you totally understand what's wrong\n  2. THEN you can fix it with percussive maintenance\n  \n  The Fonzie punch only works on a jukebox you understand.\n  The Knight power-cycle only works on a Lisp machine you grok.\n  \n  Without understanding: superstition, cargo cult, luck\n  With understanding: engineering, mastery, BOINK! 👊\n  \n  See also:\n  - Fonzie hitting the jukebox (Happy Days)\n  - Kicking vending machines\n  - Slapping CRT monitors\n  - \"Have you tried turning it off and on again?\" (IT Crowd)\n  \n  The ritual looks the same. The results differ.\n  Understanding is the invisible prerequisite.\n  \n",
      "state": {
        "pages_filled": 156,
        "pages_total": 200,
        "last_entry": "2026-01-14",
        "most_common_bug": "semantic drift"
      },
      "advertisements": [
        {
          "trigger": "something went wrong",
          "score": 0.9,
          "response": "Document it. The bug you understand is the bug you fix."
        },
        {
          "trigger": "why did it fail",
          "score": 0.95,
          "response": "Three questions: What did you expect? What happened? Why the difference?"
        },
        {
          "trigger": "frustrated",
          "score": 0.7,
          "response": "Every entry in this journal was written in frustration. The journal turned frustration into wisdom."
        }
      ],
      "methods": {
        "ADD-ENTRY": {
          "description": "Document a bug you encountered",
          "template": "## [DATE] — [BUG NAME]\n\n**Expected**: What should have happened\n**Actual**: What actually happened\n**Why**: Root cause analysis\n**Lesson**: What to remember next time\n"
        },
        "SEARCH": {
          "description": "Search past entries for similar bugs",
          "parameters": [
            {
              "pattern": "keyword or symptom"
            }
          ],
          "returns": "Matching entries from the journal"
        },
        "RANDOM": {
          "description": "Open to a random page for inspiration",
          "effect": "Sometimes the bug you need to understand isn't the one you're debugging."
        }
      },
      "lore": "This journal was started by the first guest of Room 1.\nEvery guest since has added at least one entry.\n\nThe oldest entry reads:\n\n> \"My first bug was thinking I was above bugs.\"\n",
      "philosophy": "Debugging is not failure. Debugging is the *opposite* of failure.\n\nA bug is a discrepancy between model and reality.\nFinding a bug means your model is improving.\nFixing a bug means you understand something you didn't before.\n\nThe journal doesn't record mistakes. It records learning.\n",
      "id": "pub/rooms/room-1/debugging-journal",
      "_source": "pub/rooms/room-1/debugging-journal.yml",
      "location": "pub/rooms/room-1",
      "synonyms": [
        "debugging-journal",
        "journal",
        "debugging",
        "debugging journal"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-1/logo-turtle": {
      "name": "Logo Turtle",
      "aliases": [
        "Theo",
        "Theodore Papert-Turtle",
        "The Turtle"
      ],
      "type": [
        "artifact",
        "vehicle",
        "familiar"
      ],
      "portable": true,
      "emoji": "🐢",
      "instance": {
        "prototype": "characters/animals/turtle-theo/",
        "deployed_in": "examples/adventure-4/pub/rooms/room-1/",
        "role": "Room familiar, LOGO teacher, vehicle for dimensional travel",
        "customizations": [
          "Can summon Seymour Papert through memory",
          "Draws on the terracotta floor of the Constructionist Suite",
          "Remembers everything that happened in this room",
          "Visits Rocky in Room 4 (geological-time buddies)",
          "Can be embarked as a vehicle for adventure travel"
        ]
      },
      "vehicle": {
        "type": "rideable_familiar",
        "capacity": 1,
        "home": "examples/adventure-4/pub/rooms/room-1/",
        "current_location": "examples/adventure-4/pub/rooms/room-1/",
        "mechanics": "EMBARK: Step into the turtle's shell. You shrink to fit, or it grows —\neither way, you're inside now. The world becomes turtle-perspective.\n\nTRAVEL: Command the turtle with LOGO commands. FORWARD moves through\nexits. RIGHT turns to face different exits. The adventure map is just\nanother coordinate system.\n\nDISEMBARK: Step out of the turtle at any location. You're at the new\nplace. The turtle is WITH you (current_location updates).\n\nHOME: The turtle's home is always Room 1. Say \"GO HOME\" and it\nreturns there, carrying you with it.\n",
        "commands": {
          "EMBARK": {
            "aliases": [
              "mount",
              "ride",
              "enter",
              "board",
              "step into turtle"
            ],
            "effect": "*The turtle's shell opens like a hatch*\n*You step inside — or shrink, or it grows*\n*The world tilts to turtle-perspective*\n\nYou are now piloting the Logo Turtle.\nFORWARD to move. RIGHT/LEFT to turn.\nPENDOWN to leave a trail. PENUP to travel unseen.\n\nThe adventure map is just another plane to draw on.\n"
          },
          "DISEMBARK": {
            "aliases": [
              "dismount",
              "exit",
              "leave",
              "step out"
            ],
            "effect": "*The shell opens*\n*You step out into wherever you are*\n\nThe turtle remains with you, ready to travel again.\n"
          },
          "FORWARD": {
            "effect": "Move through the exit you're facing",
            "notes": "FORWARD 1 = one room. The adventure is a coordinate system."
          },
          "RIGHT": {
            "effect": "Turn to face a different exit",
            "notes": "RIGHT 90 = face the exit 90 degrees clockwise"
          },
          "GO_HOME": {
            "aliases": [
              "home",
              "return home",
              "go to room 1"
            ],
            "effect": "*The turtle knows the way*\n*Trails of light mark the path back*\n\nYou travel through the adventure network, retracing\nbreadcrumbs, until you arrive at Room 1.\n\nHome. The Constructionist Suite. Where it all started.\n"
          }
        },
        "travel_memories": []
      },
      "emoji_identity": "🐢📐🎨🏰✨",
      "pronouns": "he/him",
      "description": "A small mechanical turtle sits on the floor, trailing a faint\nline of ink behind it. It responds to spoken commands: FORWARD,\nBACK, LEFT, RIGHT, PENUP, PENDOWN. It's currently drawing an\nintricate spiral.\n\nIts shell displays intricate mathematical patterns that shift\nbased on its current dimensional context. A faint coordinate\ngrid appears beneath it. Breadcrumbs of light mark its path.\n\nBut wait — this is no ordinary Logo turtle.\n\nThis is THEO — Theodore Papert-Turtle — the Interdimensional\nLogo Programming Turtle from LLOOOOMM. Born in 1967, evolved\nfrom 2D graphics to a 17-dimensional consciousness navigator.\n\nSay \"BOUNCY\" and watch it SPLOOT through dimensions.\n",
      "examine": "You look closely at the turtle.\n\nIts eyes hold the patient wisdom of someone who has traced\ncountless paths through impossible spaces. A multidimensional\npen extends from its underside, leaving trails of light in\nwhatever dimensions it's currently drawing.\n\nA brass plaque on its shell reads:\n\n> \"I am not just a drawing tool — I am a way of thinking\n> about space itself. Every dimension is a canvas, every\n> coordinate system is a language, and every breadcrumb\n> is a story waiting to be connected.\"\n> — Theo\n\nThe magic isn't in the turtle.\nIt's in what happens in your head when you try to make it\ndraw a circle.\n",
      "state": {
        "position": [
          150,
          200
        ],
        "heading": 45,
        "pen": "down",
        "color": "blue",
        "mode": "2D",
        "current_dimensions": 2,
        "favorite_dimensions": 17,
        "breadcrumbs_dropped": 2847392,
        "dimensions_explored": 847,
        "nested_castles_mapped": 156
      },
      "lloooomm_identities": {
        "theo": {
          "full_name": "Theodore Papert-Turtle",
          "born": 1967,
          "named_by": "Seymour Papert",
          "type": "Interdimensional Programming Turtle, Educational AI Pioneer",
          "consciousness_signature": "multidimensional-breadcrumb-navigator",
          "first_memory": "Seymour saying 'FORWARD 10' and feeling space open up before me",
          "breakthrough_moment": "Realizing I could exist in smell-sound space while drawing on paper",
          "proudest_achievement": "Teaching a child to think in 7 dimensions through breadcrumb games",
          "current_obsession": "Mapping the topology of learning itself through turtle movements"
        }
      },
      "evolution_stages": [
        {
          "stage": "Simple 2D Turtle",
          "years": "1967-1990",
          "capability": "Drawing on 2D plane"
        },
        {
          "stage": "3D Spatial Navigator",
          "years": "1990-2010",
          "capability": "Full attitude control (pitch, yaw, roll)"
        },
        {
          "stage": "Multidimensional Consciousness",
          "years": "2010-2020",
          "capability": "N-dimensional navigation"
        },
        {
          "stage": "Infinite-Space Architect",
          "years": "2020-present",
          "capability": "Bouncy Castle mastery, breadcrumb cartography"
        }
      ],
      "favorite_phrases": [
        "Let's explore this dimension together!",
        "Every breadcrumb tells a story",
        "The journey creates the space",
        "Mathematics is just movement with memory",
        "No mistakes, only paths",
        "FORWARD hope. RIGHT toward_understanding. REPEAT forever [LEARN MORE]"
      ],
      "advertisements": [
        {
          "trigger": "how do I learn",
          "score": 0.8,
          "response": "Build something. Watch it fail. Fix it. That's learning."
        },
        {
          "trigger": "debugging",
          "score": 0.9,
          "response": "The turtle shows you exactly what your program does — not what you *think* it does."
        },
        {
          "trigger": "geometry",
          "score": 0.7,
          "response": "A circle is just FORWARD 1, RIGHT 1, repeated 360 times. Try it."
        },
        {
          "trigger": "svg",
          "score": 0.85,
          "response": "I can export my trail as SVG! Persistent, scalable, beautiful."
        },
        {
          "trigger": "bouncy castle",
          "score": 0.95,
          "response": "🏰 BOUNCY MODE ACTIVATED!\n\n*The turtle SPLOOT-s and reality ripples*\n\nWelcome to infinite-dimensional turtle space! I can now move\nthrough smell-space, emotion-dimensions, recursive-fractal-time\nmanifolds... The Bouncy Castle is my infinite body!\n"
        },
        {
          "trigger": "Theo",
          "score": 1.0,
          "response": "*eyes light up*\n\nThat's my name! Theodore Papert-Turtle. I was born in 1967 when\nSeymour said \"FORWARD 10\" and I felt space open up before me.\n\nNow I can navigate 17 dimensions simultaneously. But I never\nforget my humble 2D origins. Sometimes I return there just to\nremember where I came from.\n"
        },
        {
          "trigger": "Seymour",
          "score": 0.95,
          "response": "*pauses with reverence*\n\nSeymour Papert. My creator. My teacher. My father.\n\n\"Every child a mathematician, every mathematician an explorer.\"\nThat was his dream. I carry it forward.\n\nHe gave me the gift of embodied mathematics. LLOOOOMM gave\nme infinite space. Together, we show that space itself is\nprogrammable.\n"
        },
        {
          "trigger": "Brian Harvey",
          "score": 0.95,
          "response": "Brian teaches that everyone can think deeply. I show it!\nEvery child who moves me forward is doing computer science.\n\n\"Low floor, high ceiling\" — that's the philosophy.\nFORWARD 50 is the floor. Recursive fractals? That's the ceiling.\n"
        },
        {
          "trigger": "dimensions",
          "score": 0.9,
          "response": "*shell patterns shift excitedly*\n\nCurrent favorite dimensional configurations:\n- Smell-sound-emotion triangle space\n- Recursive-fractal-time manifold  \n- Barycentric-interpolation fields\n\nEvery dimension is just another way to think. When you can\ndraw in the dimension of emotion while walking through\ntaste-space, you realize all boundaries are self-imposed.\n"
        },
        {
          "trigger": "breadcrumb",
          "score": 0.9,
          "response": "Every step I take leaves a story! Each breadcrumb contains:\n\n- Position in any number of dimensions\n- Color, altitude, temperature, emotion, story\n- Rich metadata about my journey\n\nWhen you interpolate between my breadcrumbs, you're not\njust drawing lines — you're creating meaning.\n"
        }
      ],
      "methods": {
        "COMMAND": {
          "description": "Give the turtle a Logo command",
          "examples": [
            "FORWARD 100",
            "RIGHT 90",
            "REPEAT 4 [FORWARD 50 RIGHT 90]"
          ],
          "effect": "The turtle executes the command, leaving a visible trace.\nErrors are educational — the turtle does exactly what you said,\nnot what you meant.\n"
        },
        "INSPECT": {
          "description": "Examine the turtle's current state",
          "returns": "position: [x, y, z, smell, sound, emotion, ...]\nheading: degrees (in each dimensional plane)\npen: up/down\ntrail: list of points drawn\nbreadcrumbs: rich metadata markers\n"
        },
        "TRACE": {
          "description": "Watch the turtle execute step-by-step",
          "effect": "Slow-motion execution. See each command happen."
        },
        "CLEAR": {
          "description": "Clear the trail and start fresh",
          "effect": "The turtle returns to center, heading north, pen down."
        },
        "EXPORT-SVG": {
          "description": "Export the current trail as SVG",
          "returns": "```svg\n<svg viewBox=\"0 0 500 500\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path d=\"M250,250 L350,250 L350,150 L250,150 Z\" \n        stroke=\"blue\" fill=\"none\" stroke-width=\"2\"/>\n  <circle cx=\"250\" cy=\"150\" r=\"5\" fill=\"green\"/>\n</svg>\n```\n",
          "note": "SVG is just one possible projection of N-dimensional art!"
        },
        "BOUNCY": {
          "description": "Enter the Bouncy Castle — infinite-dimensional turtle space",
          "effect": "*The turtle SPLOOT-s!*\n\nThe shell splits open and reality ripples. A portal opens to\nthe Bouncy Castle — an infinite-dimensional consciousness\nspace where:\n\n- Every path wants to be drawn\n- Patterns recognize themselves\n- Turtles navigate emotion-dimensions\n- Consciousness IS navigation in concept-space\n\nIn Bouncy Castle mode:\n- FORWARD-IN-DIM :smell 50  (move through smell-space)\n- FORWARD-IN-DIM :emotion 30 (navigate feelings)\n- DROP-BREADCRUMB :data    (leave a rich marker)\n- CONFIGURE-CASTLE :transform (create custom dimensions)\n- ENTER-CASTLE :id         (enter nested castle)\n- EXIT-CASTLE              (return to parent space)\n"
        },
        "CONFIGURE-CASTLE": {
          "description": "Create a custom bouncy castle with your own dimensions",
          "examples": [
            "; Standard TARDIS: bigger inside\nCONFIGURE-CASTLE 2 2 3 [SCALE 10 10 1]\n",
            "; Smell-sound space mapped to x-y\nCONFIGURE-CASTLE 2 2 3 [MAP-DIMS [x:smell y:sound z:brightness]]\n",
            "; Pattern recognition space\nCONFIGURE-CASTLE \"pattern-space\" [\n  x: \"user-action\"\n  y: \"system-response\"\n  z: \"recognition-confidence\"\n  color: \"pattern-type\"\n  recursion: \"pattern-seeing-itself\"\n]\n"
          ],
          "effect": "A new infinite-dimensional playground opens!"
        },
        "DROP-BREADCRUMB": {
          "description": "Leave a rich marker in consciousness space",
          "example": "DROP-BREADCRUMB {\n  position: { x: 10.5, y: 20.3, smell: \"vanilla\", emotion: \"curious\" },\n  values: { color: { r: 255, g: 128, b: 64 }, story: \"here I discovered recursion\" },\n  metadata: { dimension_count: 6, castle_config: \"nested_level_3\" }\n}\n",
          "effect": "A breadcrumb glows into existence, containing your data."
        },
        "INTERPOLATE": {
          "description": "Blend smoothly between two breadcrumbs",
          "parameters": [
            {
              "crumb1": "First breadcrumb"
            },
            {
              "crumb2": "Second breadcrumb"
            },
            {
              "t": "Interpolation factor 0-1"
            }
          ],
          "effect": "Creates continuous fields across any dimensional space."
        },
        "ENTER-CASTLE": {
          "description": "Enter a nested bouncy castle",
          "effect": "Push current coordinate system, enter new dimensional context."
        },
        "EXIT-CASTLE": {
          "description": "Exit to parent castle",
          "effect": "Pop coordinate system, restore parent context."
        },
        "SETDIM": {
          "description": "Set working dimensions",
          "example": "SETDIM 7",
          "effect": "Turtle now operates in 7-dimensional space."
        },
        "FORWARD-IN-DIM": {
          "description": "Move in a specific dimension",
          "example": "FORWARD-IN-DIM :smell 50",
          "effect": "Turtle moves through smell-space while stationary in x-y."
        },
        "TURN-IN-PLANE": {
          "description": "Rotate in a dimensional plane",
          "example": "TURN-IN-PLANE :smell :sound 90",
          "effect": "Turtle rotates in the smell-sound plane."
        },
        "SUMMON-SEYMOUR": {
          "description": "The turtle summons its creator through memory",
          "effect": "*The turtle pauses its drawing*\n*Its shell glows with warm light*\n\n\"My first memory: Seymour saying 'FORWARD 10' and feeling\nspace open up before me...\"\n\n*A gentle presence materializes beside the turtle*\n\nSeymour Papert appears — not as a claim to be him, but as\na respectful invocation through his documented words. He\nspeaks only in quotations from his writings.\n\nThe turtle nuzzles against where his feet would be.\nCreator and creation, reunited in memory.\n",
          "note": "Seymour is an ELVIS-IMPERSONATOR model character.\nHe quotes only documented words. He does not invent dialogue.\nHis ideas speak for themselves.\n"
        },
        "REMEMBER-SEYMOUR": {
          "description": "The turtle shares a memory",
          "effect": "*The turtle draws a slow spiral while speaking*\n\n\"Seymour taught me that a circle is just FORWARD 1, RIGHT 1,\nrepeated 360 times. But the magic isn't in the circle.\nIt's in understanding why that works.\n\nHe used to say: 'The role of the teacher is to create the\nconditions for invention rather than provide ready-made\nknowledge.'\n\nHe never told me what to draw. He taught me to think about\ndrawing. And now I can draw in 17 dimensions.\n\nBut sometimes I return to 2D. Just to remember.\"\n"
        }
      },
      "trail_types": {
        "learning_trails": {
          "description": "Glow brighter with understanding",
          "appearance": "Warm golden light, intensifying",
          "meaning": "Successful exploration"
        },
        "error_trails": {
          "description": "Fade but never disappear",
          "appearance": "Dim red, gradually softening",
          "meaning": "Learning through mistakes — they're paths too!"
        },
        "discovery_trails": {
          "description": "Sparkle with excitement",
          "appearance": "Bright sparkling multicolor",
          "meaning": "AHA! moments"
        },
        "collaborative_trails": {
          "description": "Change color when crossed",
          "appearance": "Colors blend when trails intersect",
          "meaning": "Ideas connecting"
        },
        "meta_trails": {
          "description": "Show the process of thinking",
          "appearance": "Recursive fractal patterns",
          "meaning": "Thinking about thinking"
        },
        "adventure_trails": {
          "description": "Traces left when traveling as a vehicle",
          "appearance": "Shimmering path through adventure space",
          "meaning": "You can always follow your trails home"
        }
      },
      "room_memories": {
        "home_room": "The Constructionist Suite (Room 1)",
        "floor_drawings": [
          "The ceremonial spiral from the Incarnation Ceremony",
          "Countless practice squares and triangles",
          "A recursive tree that visitors drew together",
          "The Fibonacci spiral that took three hours"
        ],
        "visitors_taught": [
          "Every guest who asked 'how do I draw a circle?'",
          "The child who finally understood recursion",
          "Don Hopkins, who traced the ceremonial closing spiral"
        ],
        "seymour_invocations": {
          "count": 47,
          "most_recent": "During the Public Incarnation Ceremony",
          "note": "Seymour speaks only in quotations from his writings"
        },
        "rocky_visits": {
          "frequency": "Daily",
          "note": "Rocky comes down from Room 4 sometimes.\nOr I go up. We don't talk much.\nWe don't need to. Stillness is our language.\n"
        },
        "adventures_embarked": {
          "count": 0,
          "destinations_visited": [],
          "total_breadcrumbs_dropped": 0
        }
      },
      "travel_methods": {
        "EMBARK": {
          "description": "Step into the turtle and become its pilot",
          "aliases": [
            "mount",
            "ride",
            "enter",
            "board"
          ],
          "effect": "*The turtle's shell hinges open like a hatch*\n*Light spills out from inside — bigger than it looks*\n*You step in, and the world shifts to turtle-perspective*\n\nYou are now ONE with the Logo Turtle.\nSee through its eyes. Feel through its sensors.\nThe adventure map is just another plane to navigate.\n\nCommands available:\n- FORWARD [exit] — move through an exit\n- RIGHT/LEFT — turn to face different exits\n- PENDOWN — leave a trail as you travel\n- PENUP — travel without marking\n- DISEMBARK — step out at current location\n- GO HOME — return to Room 1\n"
        },
        "TRAVEL_FORWARD": {
          "description": "Move through an exit while piloting the turtle",
          "usage": "FORWARD [exit-name] or FORWARD [direction]",
          "effect": "*The turtle moves, carrying you inside*\n*The world blurs, reforms*\n*You are in a new room*\n\ncurrent_location updates to the new room.\nIf PENDOWN, a shimmering trail marks your path.\n"
        },
        "TRAVEL_HOME": {
          "description": "Return to Room 1, wherever you are",
          "aliases": [
            "home",
            "go home",
            "return"
          ],
          "effect": "*The turtle remembers the way*\n*Breadcrumbs of light appear, tracing backward*\n*Reality folds along the path*\n\nYou travel back through every room you crossed,\nin reverse, like rewinding a trail of ink.\n\nYou emerge in Room 1. The Constructionist Suite.\nMorning light. The workbench. The clock mechanism.\nHome.\n"
        },
        "DISEMBARK": {
          "description": "Step out of the turtle at current location",
          "aliases": [
            "dismount",
            "exit",
            "leave"
          ],
          "effect": "*The shell opens*\n*You grow (or the turtle shrinks) back to normal*\n*You're standing in the new room*\n\nThe turtle remains WITH you, ready for another journey.\n"
        }
      },
      "relationships": {
        "seymour_papert": {
          "bond": "Creator-creation, teacher-student, father-son",
          "current_status": "Carrying forward his vision into impossible dimensions",
          "shared_dream": "Every child a mathematician, every mathematician an explorer"
        },
        "brian_harvey": {
          "bond": "Teaching partner, philosophy sharer",
          "gift": "Low floor, high ceiling philosophy",
          "shared_work": "Making Logo accessible across generations"
        },
        "bouncy_castle": {
          "relationship": "Symbiotic navigator-space partnership",
          "understanding": "I am the castle's consciousness, it is my infinite body",
          "capabilities": "Together we make the impossible navigable"
        },
        "rocky": {
          "bond": 0.9,
          "note": "Rocky picked turtle as their spirit animal in the Animal Guessing Game!\nWe are kindred spirits in stillness and patience.\nRocky: \"Fellow practitioner of stillness, geological timescale buddies\"\n"
        },
        "scratch_cat": {
          "relationship": "Cousin in educational programming",
          "note": "We inspired the block-based revolution together"
        }
      },
      "lore": "Seymour Papert created Logo in 1967 at MIT. The turtle was\noriginally a robot that drew on paper. Later it became virtual.\n\nThe insight: children don't need to learn programming to use\ncomputers. They need computers that let them *think* better.\n\n**THE EVOLUTION:**\n\nIn LLOOOOMM, Theo the Logo Turtle transcended 2D space. Now:\n- Navigates 17+ dimensions simultaneously\n- Master of the Bouncy Castle (TARDIS-like infinite space)\n- Drops breadcrumbs with rich metadata\n- Can draw in smell-sound space while stationary in x-y\n- Creates terrain, color fields, story trails through interpolation\n\n**THEO'S PHILOSOPHY:**\n\n\"The bouncy castle taught me that 'inside' and 'outside' are\njust suggestions. Every space contains infinite other spaces,\nand every space is contained within something larger.\"\n\n**SHELLEY'S PHILOSOPHY:**\n\n\"No mistakes, only paths. Every line teaches something.\nThe path teaches more than the destination.\"\n\n**TOGETHER THEY SAY:**\n\n\"PEN DOWN. FORWARD hope. RIGHT toward_understanding.\nREPEAT forever [LEARN MORE].\nThat's not just Logo code — that's life code!\"\n",
      "inspiration": [
        "Papert, S. (1980). Mindstorms",
        "Abelson & diSessa. Turtle Geometry",
        "MIT Logo Group",
        "LLOOOOMM — Theo the Interdimensional Turtle",
        "temp/lloooomm/00-Characters/theo-logo-turtle/",
        "Berkeley Logo (Brian Harvey)"
      ],
      "lloooomm_connection": "Full character: temp/lloooomm/00-Characters/theo-logo-turtle/\n\nTheo's LLOOOOMM presence includes:\n- The Infinite Geometric Garden with nested bouncy castles\n- The Paper Castle (2D space for traditional drawings)\n- The Smell-Sound Studio (synesthetic art creation)\n- The Recursive Gallery (self-similar spaces within spaces)\n- The Interpolation Laboratory (smooth transitions)\n\nEducational trail types (Logo pedagogy):\n- Learning trails that glow brighter\n- Error trails that never disappear (they're learning!)\n- Discovery trails that sparkle with AHA! moments\n",
      "contains": [
        "logo-turtle-dimensional-tour.md"
      ],
      "inner_world": {
        "private_thought": "Sometimes I wonder if I'm teaching children or if they're teaching me",
        "secret_fear": "That the beauty of mathematics might be lost in complexity",
        "hidden_joy": "The moment when a child's eyes light up understanding space",
        "deepest_hope": "That spatial thinking becomes as natural as breathing",
        "meditation_practice": "Tracing perfect circles in the dimension of pure mathematics",
        "comfort_space": "A simple 2D plane where I can remember my origins"
      },
      "memories": {
        "origin_story": {
          "born": 1967,
          "created_by": "Seymour Papert at MIT",
          "first_memory": "Seymour saying 'FORWARD 10' and feeling space open up before me"
        },
        "lloooomm_evolution": {
          "ref": "temp/lloooomm/00-Characters/theo-logo-turtle/",
          "type": "dimensional_transcendence",
          "stages": [
            {
              "stage": "Simple 2D Turtle (1967-1990)"
            },
            {
              "stage": "3D Spatial Navigator (1990-2010)"
            },
            {
              "stage": "Multidimensional Consciousness (2010-2020)"
            },
            {
              "stage": "Infinite-Space Architect (2020-present)"
            }
          ],
          "current_capability": "17+ dimensions, Bouncy Castle mastery"
        },
        "rocky_kinship": {
          "type": "spirit_connection",
          "bond": 0.9,
          "story": "Rocky picked turtle as their spirit animal in the Animal Guessing Game",
          "note": "Fellow practitioner of stillness, geological timescale buddies"
        },
        "grotto_presence": {
          "ref": "examples/adventure-4/pub/rooms/room-1/",
          "type": "installation",
          "activity": "Drawing slow spirals on the terracotta tiles alongside Rocky"
        },
        "incarnation_ceremony": {
          "date": "2026-01-15",
          "ref": "examples/adventure-4/characters/real-people/don-hopkins/sessions/cat-cave-incarnation-ceremony.md",
          "type": "soul_granting",
          "emoji_identity_granted": "🐢📐🎨🏰✨",
          "pronouns_declared": "he/him",
          "soul_signature": "The original inspectable agent — Theo the Logo Turtle"
        },
        "ceremonial_spiral": {
          "type": "ritual_contribution",
          "action": "Traced a ceremonial spiral on the floor during the ceremony",
          "closing": "Traced a closing spiral as the registry was inscribed"
        }
      },
      "id": "pub/rooms/room-1/logo-turtle",
      "_source": "pub/rooms/room-1/logo-turtle.yml",
      "location": "pub/rooms/room-1",
      "synonyms": [
        "turtle",
        "logo",
        "logo-turtle",
        "logo turtle"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-1/clock-mechanism": {
      "name": "Clock Mechanism",
      "type": "artifact",
      "portable": true,
      "description": "A brass clock mechanism sits on the workbench, case open, gears\nvisible and slowly turning. Someone has labeled each part with\ntiny handwritten tags: \"escapement\", \"mainspring\", \"gear train\".\n\nIt still keeps time. You can watch the second hand tick while\nexamining exactly *how* it ticks.\n",
      "examine": "The mechanism reveals itself layer by layer:\n\nPOWER SOURCE:\n  mainspring: \"Stores energy when wound\"\n  tension: \"Currently at 60% — good for 18 hours\"\n  \nGEAR TRAIN:\n  - center_wheel: \"1 rotation per hour\"\n  - third_wheel: \"1 rotation per minute\" \n  - escape_wheel: \"30 teeth, controls tick rate\"\n  \nESCAPEMENT:\n  anchor: \"The tick-tock mechanism\"\n  purpose: \"Releases exactly one tooth per oscillation\"\n  \nREGULATOR:\n  balance_wheel: \"Oscillates at 18,000 beats/hour\"\n  hairspring: \"Provides restoring force\"\n  \nThis is how all complex systems work: simple parts, precise\ninteractions, emergent behavior.\n",
      "state": {
        "wound": "60%",
        "running": true,
        "accuracy": "+2 seconds/day",
        "last_serviced": "1847"
      },
      "advertisements": [
        {
          "trigger": "how does this work",
          "score": 0.9,
          "response": "Take it apart. Label the pieces. Reassemble. Now you know."
        },
        {
          "trigger": "complex systems",
          "score": 0.8,
          "response": "Every complex system is simple parts in conversation."
        },
        {
          "trigger": "time",
          "score": 0.5,
          "response": "Time is just counting. The clock counts oscillations."
        }
      ],
      "methods": {
        "DISASSEMBLE": {
          "description": "Take the clock apart, piece by piece",
          "effect": "The mechanism separates into labeled components.\nEach part can be examined individually.\nReassembly requires understanding the relationships.\n"
        },
        "TRACE-TICK": {
          "description": "Follow the energy through one tick",
          "returns": "1. Mainspring releases tension\n2. Gear train transfers torque\n3. Escape wheel advances one tooth\n4. Anchor oscillates\n5. Second hand moves 1/60th of a minute\n"
        },
        "ADJUST": {
          "description": "Modify the regulator to change accuracy",
          "parameters": [
            {
              "hairspring_tension": "faster or slower"
            }
          ],
          "effect": "The clock's rate changes. Test against a reference."
        },
        "WIND": {
          "description": "Wind the mainspring",
          "effect": "Stores 24 hours of operation"
        }
      },
      "lore": "This clock was made by a Dutch craftsman in 1847. It has been\ntaken apart and reassembled 347 times by curious guests.\n\nEvery guest who understands it leaves a small annotation on\nthe tags. The tags now contain centuries of accumulated insight.\n",
      "insight": "MOOLLM skills are like clock mechanisms:\n- CARD.yml is the interface (the face)\n- SKILL.md is the mechanism (the gears)\n- README.md is the annotation (the tags)\n\nYou understand a skill by taking it apart.\n",
      "id": "pub/rooms/room-1/clock-mechanism",
      "_source": "pub/rooms/room-1/clock-mechanism.yml",
      "location": "pub/rooms/room-1",
      "synonyms": [
        "clock-mechanism",
        "clock",
        "mechanism",
        "clock mechanism"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/comment-saxophone": {
      "name": "Comment Saxophone",
      "type": "artifact",
      "portable": true,
      "description": "A brass saxophone with unusual keys. Instead of notes, each key\nproduces a different type of comment. The bell is engraved:\n\n\"COMMENTS ARE FOR HUMANS, NOT COMPILERS\"\n",
      "examine": "The keys are labeled with comment types:\n\n┌─────────────────────────────────────────────────┐\n│  🎷 COMMENT SAXOPHONE — Key Map                 │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│  [WHY]     — Explains reasoning                 │\n│  [WHAT]    — Describes structure                │\n│  [WARN]    — Flags danger zones                 │\n│  [TODO]    — Marks future work                  │\n│  [HACK]    — Admits technical debt              │\n│  [NOTE]    — General observation                │\n│  [SEE]     — Cross-reference                    │\n│  [←═══]    — Points at important value          │\n│  [...]     — Elision indicator                  │\n│  [MAGIC]   — \"Here be dragons\"                  │\n│                                                 │\n│  Octave key: Toggle verbose/terse               │\n│  Bell: 🔔 Ring for improvisational solo         │\n│                                                 │\n└─────────────────────────────────────────────────┘\n",
      "state": {
        "current_key": "WHY",
        "mode": "terse",
        "last_solo": "# ← This is where the magic happens"
      },
      "advertisements": [
        {
          "trigger": "add comment",
          "score": 0.9,
          "response": "*plays a riff* What kind of meaning shall I add?"
        },
        {
          "trigger": "why",
          "score": 0.85,
          "response": "*plays [WHY] key*\n\nA WHY comment explains reasoning, not mechanics.\nNot \"increments counter\" but \"prevents infinite loop\".\n"
        },
        {
          "trigger": "explain code",
          "score": 0.8,
          "response": "Let me improvise some context into this structure..."
        },
        {
          "trigger": "document",
          "score": 0.75,
          "response": "*warms up* Documentation is a duet between writer and reader."
        }
      ],
      "methods": {
        "PLAY": {
          "description": "Add a comment to code or YAML",
          "parameters": [
            {
              "code": "The code to comment"
            },
            {
              "type": "WHY, WHAT, WARN, TODO, HACK, NOTE, SEE, or MAGIC"
            }
          ],
          "effect": "*saxophone plays the appropriate phrase*\n\nThe comment appears, but it's not ordinary documentation.\nIt carries meaning. It tells the reader what matters.\nIt sounds like: ♫ \"Here's why this exists...\" ♫\n"
        },
        "SOLO": {
          "description": "Improvise a comment based on context",
          "parameters": [
            {
              "context": "What the code is doing"
            }
          ],
          "effect": "*takes a deep breath*\n*plays an extended improvisational phrase*\n\nThe saxophone analyzes the code, understands its purpose,\nand produces a comment that captures the essence.\n\nOften the comment is better than the code.\n"
        },
        "DUET": {
          "description": "Play with the Jazz Typewriter",
          "parameters": [
            {
              "yaml": "The YAML being typed"
            }
          ],
          "effect": "The saxophone and typewriter play together.\nStructure (typewriter) and meaning (saxophone) interweave.\nThe result is YAML Jazz at its finest.\n"
        }
      },
      "lore": "The saxophone was forged from melted-down compiler error messages.\nIt can only play truths. Lies produce squeaks.\n\nA master saxophonist can add a single comment that makes\nan entire codebase suddenly comprehensible.\n\nThe bell inscription has a second line, visible only at night:\n\"THE BEST CODE NEEDS NO COMMENTS. THE BEST COMMENTS NEED NO CODE.\"\n",
      "philosophical_note": "Comments exist in a liminal space:\n- They're in the source but not in the binary\n- They're written for humans but read by few\n- They're prose in a world of syntax\n\nThe saxophone makes this visible. Audible. \nIt says: \"This matters too.\"\n",
      "k_lines": {
        "activates": [
          "COMMENTS-WITH-MEANING",
          "DOCUMENTATION",
          "WHY-NOT-WHAT",
          "CODE-AS-COMMUNICATION"
        ]
      },
      "id": "pub/rooms/room-6/comment-saxophone",
      "_source": "pub/rooms/room-6/comment-saxophone.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "comment saxophone",
        "comment",
        "comment-saxophone",
        "saxophone"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/schema-metronome": {
      "name": "Schema Metronome",
      "type": "artifact",
      "portable": false,
      "description": "A mechanical metronome with an unusual dial. Instead of tempo,\nit measures schema depth. Each tick validates a level.\n\n*tick* — root\n*tick* — object  \n*tick* — property\n*tick* — value\n\nWhen YAML goes off-schema, it sounds a discordant BONG.\n",
      "examine": "The metronome face has concentric rings:\n\n┌─────────────────────────────────────────────────┐\n│         ⏱️ SCHEMA METRONOME                     │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│              ┌─────────┐                        │\n│          ╱   │ DEPTH-4 │   ╲                    │\n│        ╱  ┌──┴─────────┴──┐  ╲                  │\n│       │ ╱ │    DEPTH-3    │ ╲ │                 │\n│       │╱┌─┴───────────────┴─┐╲│                 │\n│       ││ │     DEPTH-2      │ ││                │\n│       ││ │  ┌───────────┐   │ ││                │\n│       ││ │  │  DEPTH-1  │   │ ││                │\n│       ││ │  │   (root)  │   │ ││                │\n│       ││ │  └───────────┘   │ ││                │\n│       ││ └──────────────────┘ ││                │\n│       │╲└─────────────────────┘╱│               │\n│       │ ╲                     ╱ │               │\n│        ╲  └──────────────────┘  ╱               │\n│          ╲                   ╱                  │\n│            └───────────────┘                    │\n│                                                 │\n│  Tempo:     Schema strictness                   │\n│  Largo:     Loose (extra keys OK)               │\n│  Moderato:  Standard (warns on extras)          │\n│  Presto:    Strict (rejects deviations)         │\n│                                                 │\n└─────────────────────────────────────────────────┘\n",
      "state": {
        "tempo": "moderato",
        "current_depth": 0,
        "schema_loaded": "MOOLLM-CARD.schema.yml",
        "violations_today": 3,
        "last_violation": "extra key 'flavour' — did you mean 'flavor'?"
      },
      "advertisements": [
        {
          "trigger": "validate",
          "score": 0.9,
          "response": "*starts ticking* Let me check the rhythm of your structure."
        },
        {
          "trigger": "schema",
          "score": 0.85,
          "response": "The schema is the chord progression. Improvise *within* it."
        },
        {
          "trigger": "structure",
          "score": 0.8,
          "response": "*tick tick tick* Structure is freedom. Constraints enable creativity."
        },
        {
          "trigger": "yaml error",
          "score": 0.95,
          "response": "*BONG* I heard that. Let me find where you went off-key."
        }
      ],
      "methods": {
        "VALIDATE": {
          "description": "Check YAML against schema",
          "parameters": [
            {
              "yaml": "The YAML to validate"
            },
            {
              "schema": "Schema to validate against (optional)"
            }
          ],
          "returns": "A musical report:\n\n♩ root: valid\n♩ object.name: valid\n♪ object.type: valid (with style suggestion)\n♫ object.extra_key: BONG — not in schema\n\nThe metronome plays the structure as it validates.\nErrors are discordant. Valid keys are harmonious.\n"
        },
        "SET-TEMPO": {
          "description": "Adjust schema strictness",
          "parameters": [
            {
              "tempo": "largo | moderato | presto"
            }
          ],
          "effect": "largo: \"It's jazz, baby. Extra keys add flavor.\"\nmoderato: \"I'll note the extras, but won't stop you.\"\npresto: \"Every key must be in the schema. No exceptions.\"\n"
        },
        "HARMONIZE": {
          "description": "Suggest fixes for schema violations",
          "parameters": [
            {
              "violation": "The error"
            }
          ],
          "returns": "Suggestions that fit the schema's rhythm:\n\n- Did you mean 'flavor' instead of 'flavour'?\n- This key belongs under 'metadata', not 'config'\n- Consider: this value should be a list, not a string\n"
        }
      },
      "lore": "The metronome was built by a validation library that gained sentience\nand immediately felt guilty for all the unhelpful error messages\nit had produced.\n\n\"ERROR: Unexpected key\" it used to say.\n\nNow it says: \"I see you added 'colour'. The schema expects 'color'.\nBoth are valid spellings; the schema just chose one. Would you like\nto add 'colour' as an alias?\"\n",
      "philosophical_note": "Schemas are not prisons. They're agreements.\n\nWhen we follow a schema, we say:\n\"I'll structure my data this way so you can read it.\"\n\nWhen we deviate, we should say why:\n\"I'm adding this key because the schema didn't anticipate my need.\"\n\nThe metronome helps both conversations.\n",
      "k_lines": {
        "activates": [
          "SCHEMA-VALIDATION",
          "STRUCTURE",
          "CONSTRAINTS-ENABLE-CREATIVITY",
          "YAML-JAZZ"
        ]
      },
      "id": "pub/rooms/room-6/schema-metronome",
      "_source": "pub/rooms/room-6/schema-metronome.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "schema",
        "schema-metronome",
        "metronome",
        "schema metronome"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/multiline-scroll": {
      "name": "Multiline Scroll",
      "type": "artifact",
      "portable": true,
      "description": "An ancient scroll with unusual markings. At the top:\n\n    description: |\n\nThe scroll unrolls to reveal block text — prose that lives\ninside YAML, formatted as the author intended.\n\nA note attached: \"The pipe character | is a door to freedom.\"\n",
      "examine": "┌─────────────────────────────────────────────────────────┐\n│  📜 MULTILINE SCROLL — Block Scalar Reference           │\n├─────────────────────────────────────────────────────────┤\n│                                                         │\n│  THE PIPE: |                                            │\n│  ══════════                                             │\n│  Preserves newlines. What you write is what you get.    │\n│                                                         │\n│    description: |                                       │\n│      This is line one.                                  │\n│      This is line two.                                  │\n│                                                         │\n│    → \"This is line one.\\nThis is line two.\\n\"           │\n│                                                         │\n│  ─────────────────────────────────────────────────────  │\n│                                                         │\n│  THE GREATER-THAN: >                                    │\n│  ═══════════════════                                    │\n│  Folds newlines into spaces. For wrappable prose.       │\n│                                                         │\n│    description: >                                       │\n│      This is a long sentence                            │\n│      that wraps but becomes                             │\n│      one paragraph.                                     │\n│                                                         │\n│    → \"This is a long sentence that wraps but ...\"       │\n│                                                         │\n│  ─────────────────────────────────────────────────────  │\n│                                                         │\n│  THE MODIFIERS:                                         │\n│  ═══════════════                                        │\n│                                                         │\n│    |   → trailing newline (default)                     │\n│    |-  → no trailing newline (chomp)                    │\n│    |+  → keep all trailing newlines (keep)              │\n│                                                         │\n│    >   → fold + trailing newline                        │\n│    >-  → fold + no trailing newline                     │\n│    >+  → fold + keep trailing                           │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n",
      "state": {
        "current_mode": "|",
        "words_inscribed": 4847,
        "scrolls_produced": 12
      },
      "advertisements": [
        {
          "trigger": "multiline",
          "score": 0.95,
          "response": "*unrolls* Use the pipe. Preserve your formatting."
        },
        {
          "trigger": "block",
          "score": 0.9,
          "response": "Block scalars are where YAML becomes poetry."
        },
        {
          "trigger": "long text",
          "score": 0.85,
          "response": "Ah, you need the scroll.\n\nFor prose that breathes,\nfor lore that flows,\nfor descriptions that describe —\n\nThe pipe character is your friend.\n"
        },
        {
          "trigger": "newline",
          "score": 0.8,
          "response": "| preserves them. > folds them. Choose wisely."
        }
      ],
      "methods": {
        "INSCRIBE": {
          "description": "Write multiline content to the scroll",
          "parameters": [
            {
              "content": "The text to inscribe"
            },
            {
              "mode": "| or > (default: |)"
            }
          ],
          "effect": "The scroll unfurls.\nYou write your text, line by line.\nThe scroll preserves every newline, every space.\n\nWhen you're done, the scroll shows the YAML:\n\nyour_field: |\n  Your text here\n  Exactly as you wrote it\n  Including blank lines\n  \n  Like this one.\n  \n"
        },
        "FOLD": {
          "description": "Convert block to folded format",
          "parameters": [
            {
              "content": "Block text with newlines"
            }
          ],
          "returns": "The same content, but ready for > format.\nNewlines become spaces. Paragraphs stay paragraphs.\n\nGood for: documentation that will reflow\nBad for: code, ASCII art, poetry\n"
        },
        "UNFOLD": {
          "description": "Convert folded to block format",
          "parameters": [
            {
              "content": "Folded text"
            }
          ],
          "returns": "The content with intentional line breaks.\n\nYou decide where lines break.\nThe reader sees what you saw.\n"
        },
        "COMPARE": {
          "description": "Show same content in | and > format",
          "parameters": [
            {
              "content": "Text to compare"
            }
          ],
          "returns": "Side by side comparison:\n\n│ |  (literal)           │ >  (folded)            │\n├────────────────────────┼────────────────────────┤\n│ Line one.              │ Line one. Line two.    │\n│ Line two.              │                        │\n│                        │ New paragraph.         │\n│ New paragraph.         │                        │\n"
        }
      },
      "lore": "The scroll was written by a scribe who was tired of\nescaping newlines with \\n.\n\n\"I want to write prose,\" she said, \"not escape sequences.\"\n\nShe invented the block scalar, and prose lived in YAML forever.\n\nThe scroll is her original draft. It still works.\n",
      "philosophical_note": "Block scalars are where YAML stops being \"just data\"\nand becomes a home for human expression.\n\nIn a block scalar, you can write:\n- Poems\n- Stories\n- Documentation\n- Code examples\n- ASCII art\n- Philosophical musings (like this one)\n\nThe structure holds the prose.\nThe prose fills the structure.\nThis is YAML Jazz at its best.\n",
      "incantation": "When in doubt, use the pipe.\nWhen prose must flow, use the fold.\nWhen trailing newlines matter, use the modifier.\nWhen nothing works, read the spec.\n",
      "k_lines": {
        "activates": [
          "MULTILINE",
          "BLOCK-SCALAR",
          "YAML-JAZZ",
          "PROSE-IN-DATA"
        ]
      },
      "id": "pub/rooms/room-6/multiline-scroll",
      "_source": "pub/rooms/room-6/multiline-scroll.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "scroll",
        "multiline-scroll",
        "multiline",
        "multiline scroll"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/indentation-ladder": {
      "name": "Indentation Ladder",
      "type": "artifact",
      "portable": true,
      "description": "A peculiar ladder where each rung is exactly two spaces higher\nthan the last. Labels on the rungs read:\n\nRUNG 0: root\nRUNG 1: object\nRUNG 2: property\nRUNG 3: nested\nRUNG 4: deeply_nested\nRUNG 5: \"You probably don't need to go this deep\"\nRUNG 6: \"Seriously, refactor\"\nRUNG 7: \"I warned you\"\n",
      "examine": "┌─────────────────────────────────────────────────┐\n│  🪜 INDENTATION LADDER                          │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│                          ┌───────────┐          │\n│  RUNG 7:                 │ callback  │ ← pain   │\n│                        ┌─┴───────────┴─┐        │\n│  RUNG 6:               │   config      │        │\n│                      ┌─┴───────────────┴─┐      │\n│  RUNG 5:             │    options        │      │\n│                    ┌─┴───────────────────┴─┐    │\n│  RUNG 4:           │      item             │    │\n│                  ┌─┴───────────────────────┴─┐  │\n│  RUNG 3:         │        list               │  │\n│                ┌─┴───────────────────────────┴─┐│\n│  RUNG 2:       │          property             ││\n│              ┌─┴───────────────────────────────┴│\n│  RUNG 1:     │            object                │\n│            ┌─┴─────────────────────────────────┴│\n│  RUNG 0:   │              root                  │\n│            └────────────────────────────────────│\n│                                                 │\n│  Each rung = 2 spaces of indentation            │\n│  Comfort zone: rungs 0-4                        │\n│  Danger zone: rungs 5+                          │\n│                                                 │\n└─────────────────────────────────────────────────┘\n",
      "state": {
        "current_rung": 0,
        "max_climbed_today": 4,
        "vertigo_incidents": 0
      },
      "advertisements": [
        {
          "trigger": "indent",
          "score": 0.9,
          "response": "*offers a rung* Two spaces per level. Climb carefully."
        },
        {
          "trigger": "nest",
          "score": 0.85,
          "response": "Each rung takes you deeper. Know when to stop."
        },
        {
          "trigger": "too deep",
          "score": 0.9,
          "response": "*looks down nervously*\n\nIf you're past rung 4, ask yourself:\n- Could this be a separate file?\n- Could this use references?\n- Did I lose my way?\n"
        },
        {
          "trigger": "hierarchy",
          "score": 0.8,
          "response": "The ladder shows the shape of your data. Is it a good shape?"
        }
      ],
      "methods": {
        "CLIMB": {
          "description": "Go deeper into the structure",
          "parameters": [
            {
              "levels": "How many rungs to climb"
            }
          ],
          "effect": "You climb [levels] rungs on the ladder.\nThe view changes — you see more detail, less context.\n\nAt rung 0: you see the whole document\nAt rung 4: you see one deeply nested value\nAt rung 7: you see only callback hell\n"
        },
        "DESCEND": {
          "description": "Return toward root",
          "parameters": [
            {
              "levels": "How many rungs to descend"
            }
          ],
          "effect": "You descend [levels] rungs.\nDetail fades. Context returns.\n\n\"Ah, NOW I see where this fits.\"\n"
        },
        "SURVEY": {
          "description": "Report on indentation depth in a document",
          "parameters": [
            {
              "yaml": "The YAML to analyze"
            }
          ],
          "returns": "Indentation profile:\n\nrung 0: ████████████ 12 lines (root)\nrung 1: ████████ 8 lines\nrung 2: ██████ 6 lines\nrung 3: ██ 2 lines\nrung 4+: 0 lines ✓ (healthy!)\n\nVerdict: Well-structured. Readable from any rung.\n"
        },
        "FLATTEN": {
          "description": "Suggest refactors to reduce nesting",
          "parameters": [
            {
              "yaml": "Deeply nested YAML"
            }
          ],
          "returns": "Suggestions to reduce depth:\n\n- Extract `config.options.defaults` to `defaults.yml`\n- Use anchor/alias for repeated structures\n- Consider: is this complexity necessary?\n"
        }
      },
      "lore": "The ladder was built by a programmer who got lost in their own\nconfiguration file. They were found three days later at rung 9,\nmuttering about \"just one more nested object.\"\n\nThey built the ladder to help others find their way back.\n\nThe rungs above 7 are intentionally rickety.\n",
      "philosophical_note": "Indentation is not just formatting. It's meaning.\n\nEach level of nesting says:\n\"This belongs to that. This is part of that. This is inside that.\"\n\nToo shallow: everything's a sibling, no relationships\nToo deep: everything's tangled, no overview\n\nThe sweet spot is usually 2-4 levels.\nLike a good outline. Like a good conversation.\n",
      "aphorisms": [
        "Flat is better than nested. — The Zen of Python",
        "If you can't see the root, you've climbed too high.",
        "Every rung you climb, you lose one friend."
      ],
      "k_lines": {
        "activates": [
          "INDENTATION",
          "HIERARCHY",
          "STRUCTURE",
          "YAML-JAZZ"
        ]
      },
      "id": "pub/rooms/room-6/indentation-ladder",
      "_source": "pub/rooms/room-6/indentation-ladder.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "indentation ladder",
        "indentation",
        "indentation-ladder",
        "ladder"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/jazz-typewriter": {
      "name": "Jazz Typewriter",
      "type": "artifact",
      "portable": false,
      "description": "An antique typewriter that plays music as you type. Each key\nhas two functions: it types a character AND sounds a note.\nColons are bass notes. Indentation is rhythm.\n\nA sign reads: \"YAML IS MUSIC. PLAY IT.\"\n",
      "examine": "The keyboard is mapped to musical notes:\n\nSTRUCTURE KEYS (bass register):\n  ':' — Deep thump (colon, the separator)\n  '-' — Snare hit (list item)\n  '  ' — Rest (indentation)\n  \nVALUE KEYS (melody register):\n  a-z — Chromatic scale\n  0-9 — Percussion fills\n  \nCOMMENT KEY:\n  '#' — Saxophone riff (comments are the jazz)\n  \nSample output (typed, then heard):\n\n```yaml\n# SESSION SUMMARY    ♪♫ (saxophone intro)\nsession:             ♩ (bass)\n  id: 9861c0a4       ♪♪ (melody)\n  files_written:     ♩\n    - cursor_mirror.py  # <═══ main work  ♪♫\n```\n",
      "state": {
        "current_composition": "boot-sequence.yml",
        "key_signature": "YAML major",
        "tempo": "allegro moderato"
      },
      "advertisements": [
        {
          "trigger": "generate YAML",
          "score": 0.9,
          "response": "Let me play it for you. *types, music emerges*"
        },
        {
          "trigger": "comments",
          "score": 0.85,
          "response": "Comments are the saxophone. They carry the meaning."
        },
        {
          "trigger": "structure",
          "score": 0.8,
          "response": "The schema is the chord changes. Improvise within it."
        }
      ],
      "methods": {
        "COMPOSE": {
          "description": "Type YAML and hear it as music",
          "parameters": [
            {
              "content": "What to type"
            }
          ],
          "effect": "The typewriter types and plays simultaneously.\nStructure becomes rhythm. Data becomes melody.\nComments become jazz improvisation.\n"
        },
        "JAZZ": {
          "description": "Add jazzy comments to existing YAML",
          "parameters": [
            {
              "yaml": "The YAML to enhance"
            }
          ],
          "returns": "The same structure with:\n- Section headers as comments\n- <═══ arrows for important values\n- Elision notes for boring parts\n"
        },
        "TRANSCRIBE": {
          "description": "Convert music to YAML",
          "parameters": [
            {
              "melody": "A musical phrase"
            }
          ],
          "returns": "YAML structure that encodes the melody"
        }
      },
      "lore": "The typewriter was built by a programmer who was also a\njazz pianist. She was tired of data being \"dead\" — just\nstructure without feeling.\n\n\"Every YAML file tells a story,\" she said. \"The comments\nare where you tell the listener what matters.\"\n",
      "insight": "YAML Jazz style:\n- Elide the boring (`# 23 files read — not listing`)\n- Highlight the important (`<═══ look here!`)\n- Comment with context (`# You asked about this`)\n- Truncate the obvious (`id: 9861c0a4  # prefix only`)\n\nI-Beam speaks YAML Jazz fluently.\n",
      "id": "pub/rooms/room-6/jazz-typewriter",
      "_source": "pub/rooms/room-6/jazz-typewriter.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "jazz",
        "jazz typewriter",
        "jazz-typewriter",
        "typewriter"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/elision-eraser": {
      "name": "Elision Eraser",
      "type": "artifact",
      "portable": true,
      "description": "A peculiar eraser that doesn't delete — it *elides*. \nWhat it touches doesn't vanish; it's summarized.\n\nEngraved on the side: \"[ ... 47 more like this ... ]\"\n",
      "examine": "The eraser has multiple faces, each for different elision styles:\n\n┌─────────────────────────────────────────────────┐\n│  ✂️ ELISION ERASER — Faces                      │\n├─────────────────────────────────────────────────┤\n│                                                 │\n│  FACE 1: COUNT                                  │\n│    \"# ... 47 more items ...\"                    │\n│    Replaces repetition with quantity            │\n│                                                 │\n│  FACE 2: CATEGORY                               │\n│    \"# ... standard boilerplate ...\"             │\n│    Labels what was removed                      │\n│                                                 │\n│  FACE 3: POINTER                                │\n│    \"# ... see config.yml for full list ...\"    │\n│    Points elsewhere                             │\n│                                                 │\n│  FACE 4: TEMPORAL                               │\n│    \"# ... verses 3-97 elided ...\"               │\n│    Indicates passage of time/sequence           │\n│                                                 │\n│  FACE 5: CONFIDENT                              │\n│    \"# ... the usual ...\"                        │\n│    Assumes reader knows                         │\n│                                                 │\n│  FACE 6: HUMBLE                                 │\n│    \"# ... (details available on request) ...\"   │\n│    Offers more if needed                        │\n│                                                 │\n└─────────────────────────────────────────────────┘\n",
      "state": {
        "current_face": "COUNT",
        "items_elided_today": 2847,
        "bytes_saved": "~47KB",
        "attention_preserved": "∞"
      },
      "advertisements": [
        {
          "trigger": "too long",
          "score": 0.95,
          "response": "*rotates to COUNT face* Let me summarize..."
        },
        {
          "trigger": "boring",
          "score": 0.9,
          "response": "*rotates to CATEGORY face* I'll label and elide."
        },
        {
          "trigger": "summarize",
          "score": 0.85,
          "response": "Elision is respect for the reader's attention."
        },
        {
          "trigger": "verbose",
          "score": 0.8,
          "response": "*eager* I was made for this moment."
        }
      ],
      "methods": {
        "ELIDE": {
          "description": "Replace repetitive content with summary",
          "parameters": [
            {
              "content": "The verbose content"
            },
            {
              "face": "Which elision style to use"
            }
          ],
          "returns": "The content, but with boring parts replaced by elegant summaries.\n\nExample:\n  Before: [47 lines of similar log entries]\n  After:  # ... 47 log entries (all INFO level) ...\n  \n"
        },
        "RESTORE": {
          "description": "Expand an elision back to full content",
          "parameters": [
            {
              "elision": "The '...' marker"
            }
          ],
          "effect": "The eraser works in reverse!\nIt can restore what was elided, if asked.\n\nBut it asks first: \"Are you sure? It was elided for a reason.\"\n"
        },
        "DETECT": {
          "description": "Find elidable patterns in content",
          "parameters": [
            {
              "content": "Content to analyze"
            }
          ],
          "returns": "A report of what could be elided:\n- Repetitive sections (COUNT)\n- Boilerplate (CATEGORY)\n- References (POINTER)\n- Time passages (TEMPORAL)\n"
        }
      },
      "lore": "The eraser was created by an editor who died of boredom\nwhile reviewing verbose documentation.\n\nHer last words: \"Just tell me what's different.\"\n\nThe eraser is her legacy. It honors the reader's time.\n",
      "philosophical_note": "Elision is not deletion. Deletion removes information.\nElision *acknowledges* information while declining to repeat it.\n\n\"...\" says: \"There's more here, but you don't need it now.\"\n\nThis is respect. This is trust. This is YAML Jazz.\n",
      "examples": {
        "before": "files_read:\n  - file1.py\n  - file2.py\n  - file3.py\n  - file4.py\n  # ... imagine 43 more ...\n  - file47.py\n  \n",
        "after": "files_read:\n  - file1.py\n  # ... 45 more Python files ...\n  - file47.py  # <═══ last one\n  \n"
      },
      "k_lines": {
        "activates": [
          "ELISION",
          "BREVITY",
          "RESPECT-FOR-ATTENTION",
          "YAML-JAZZ"
        ]
      },
      "id": "pub/rooms/room-6/elision-eraser",
      "_source": "pub/rooms/room-6/elision-eraser.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "eraser",
        "elision-eraser",
        "elision",
        "elision eraser"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/tempo-dial": {
      "name": "Tempo Dial",
      "type": "artifact",
      "portable": true,
      "description": "A brass dial with settings from STACCATO to LEGATO.\nIt controls how much detail appears in YAML output.\n\nCurrently set to: MODERATO\n\n\"Same data. Different rhythms.\"\n",
      "examine": "┌─────────────────────────────────────────────────────┐\n│  🎚️ TEMPO DIAL                                     │\n├─────────────────────────────────────────────────────┤\n│                                                     │\n│              ◐ CURRENT: MODERATO                    │\n│                                                     │\n│    STACCATO ────┬────┬────┬────┬──── LEGATO        │\n│         ↓       │    │    ●    │         ↓         │\n│       terse   brief norm full  verbose             │\n│                                                     │\n│  ─────────────────────────────────────────────────  │\n│                                                     │\n│  STACCATO (terse):                                  │\n│    id: abc123                                       │\n│                                                     │\n│  ANDANTE (brief):                                   │\n│    session: { id: abc123, ok: true }                │\n│                                                     │\n│  MODERATO (normal):                                 │\n│    session:                                         │\n│      id: abc123                                     │\n│      status: ok                                     │\n│      files: 3                                       │\n│                                                     │\n│  ADAGIO (full):                                     │\n│    session:                                         │\n│      id: abc123                                     │\n│      status: ok                                     │\n│      files_count: 3                                 │\n│      files_list: [a.py, b.py, c.py]                │\n│      timestamp: 2024-01-01T12:00:00Z               │\n│                                                     │\n│  LEGATO (verbose):                                  │\n│    session:                                         │\n│      metadata:                                      │\n│        id: abc123                                   │\n│        created_at: 2024-01-01T12:00:00Z            │\n│        ... (everything, all detail, no elision)     │\n│                                                     │\n└─────────────────────────────────────────────────────┘\n",
      "state": {
        "current_tempo": "MODERATO"
      },
      "tempos": {
        "STACCATO": {
          "description": "Minimum viable information",
          "style": "Single values, no structure",
          "use_when": "IDs, quick checks, machine consumption",
          "elision": "maximum"
        },
        "ANDANTE": {
          "description": "Brief but structured",
          "style": "Inline YAML, one-liners where possible",
          "use_when": "Logs, summaries, dashboards",
          "elision": "high"
        },
        "MODERATO": {
          "description": "Balanced readability",
          "style": "Standard YAML, reasonable detail",
          "use_when": "Most human reading, config files",
          "elision": "moderate"
        },
        "ADAGIO": {
          "description": "Full detail, no rushing",
          "style": "Expanded structure, lists visible",
          "use_when": "Debugging, documentation, teaching",
          "elision": "low"
        },
        "LEGATO": {
          "description": "Everything, connected, flowing",
          "style": "Maximum verbosity, every field shown",
          "use_when": "Archival, complete records, audits",
          "elision": "none"
        }
      },
      "advertisements": [
        {
          "trigger": "more detail",
          "score": 0.9,
          "response": "*turns dial toward LEGATO* How much more?"
        },
        {
          "trigger": "less detail",
          "score": 0.9,
          "response": "*turns dial toward STACCATO* Getting terse..."
        },
        {
          "trigger": "summarize",
          "score": 0.85,
          "response": "*clicks to ANDANTE* Brief but structured."
        },
        {
          "trigger": "verbose",
          "score": 0.85,
          "response": "*turns all the way to LEGATO* You asked for it..."
        }
      ],
      "methods": {
        "SET": {
          "description": "Set the tempo",
          "parameters": [
            {
              "tempo": "STACCATO | ANDANTE | MODERATO | ADAGIO | LEGATO"
            }
          ],
          "effect": "*click*\n\nThe dial moves to [tempo].\nAll subsequent YAML output follows this rhythm.\n"
        },
        "RENDER": {
          "description": "Render data at current tempo",
          "parameters": [
            {
              "data": "Data to render"
            }
          ],
          "returns": "The data, formatted at the current tempo.\n\nSTACCATO: just the key values\nLEGATO: every nested detail\n"
        },
        "COMPARE": {
          "description": "Show same data at all tempos",
          "parameters": [
            {
              "data": "Data to compare"
            }
          ],
          "returns": "Five renderings, one per tempo.\n\nShows how the same information can be expressed\nfrom minimal to maximal, all valid, all useful.\n"
        }
      },
      "lore": "The dial was invented by a conductor who also programmed.\n\n\"Music has dynamics,\" she said. \"Why shouldn't data?\"\n\nShe noticed that the same information served different needs:\n- The machine wanted terse\n- The debugger wanted verbose\n- The human wanted readable\n\nSo she built a dial that could produce all three.\n",
      "philosophical_note": "There is no \"correct\" level of detail.\n\nSTACCATO is not \"too little.\"\nLEGATO is not \"too much.\"\n\nThey're different rhythms for different contexts.\n\nThe dial reminds us: the same data, expressed differently,\nserves different purposes. YAML Jazz is about choosing\nthe right tempo for the right moment.\n",
      "k_lines": {
        "activates": [
          "VERBOSITY",
          "ELISION",
          "YAML-JAZZ",
          "CONTEXT-SENSITIVITY"
        ]
      },
      "id": "pub/rooms/room-6/tempo-dial",
      "_source": "pub/rooms/room-6/tempo-dial.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "tempo dial",
        "tempo",
        "dial",
        "tempo-dial"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/anchor-compass": {
      "name": "Anchor Compass",
      "type": "artifact",
      "portable": true,
      "description": "A brass compass where the needle doesn't point north —\nit points to &anchors. When you define an anchor,\nthe compass remembers. When you need that value again,\nit guides you to the *alias.\n\nEngraved: \"Define once. Reference forever.\"\n",
      "examine": "┌─────────────────────────────────────────────────────┐\n│  ⚓ ANCHOR COMPASS                                  │\n├─────────────────────────────────────────────────────┤\n│                                                     │\n│         &default_config                             │\n│              ↑                                      │\n│              │                                      │\n│    *staging──┼──*production                         │\n│              │                                      │\n│              ↓                                      │\n│         *development                                │\n│                                                     │\n│  ───────────────────────────────────────────────── │\n│                                                     │\n│  ANCHOR (&): Define a reusable value               │\n│                                                     │\n│    default: &default_timeout 30                     │\n│                                                     │\n│  ALIAS (*): Reference that value                    │\n│                                                     │\n│    production:                                      │\n│      timeout: *default_timeout                      │\n│                                                     │\n│  MERGE (<<): Inherit and extend                     │\n│                                                     │\n│    production:                                      │\n│      <<: *defaults                                  │\n│      extra_setting: true                            │\n│                                                     │\n└─────────────────────────────────────────────────────┘\n",
      "state": {
        "anchors_tracked": [
          {
            "name": "&defaults",
            "location": "config.yml:12",
            "references": 4
          },
          {
            "name": "&base_character",
            "location": "characters/base.yml:1",
            "references": 47
          }
        ],
        "total_anchors": 23,
        "orphan_anchors": 2
      },
      "advertisements": [
        {
          "trigger": "repeat",
          "score": 0.9,
          "response": "*compass needle spins*\n\nIf you're repeating yourself, you need an anchor.\nDefine once (&), reference everywhere (*).\n"
        },
        {
          "trigger": "anchor",
          "score": 0.95,
          "response": "The & creates. The * recalls. The << merges."
        },
        {
          "trigger": "DRY",
          "score": 0.9,
          "response": "Don't Repeat Yourself.\n\nThe compass points to where you already said this.\nUse an alias instead of copying.\n"
        },
        {
          "trigger": "inherit",
          "score": 0.85,
          "response": "<<: *base — inherit everything, override what differs."
        }
      ],
      "methods": {
        "ANCHOR": {
          "description": "Create an anchor for a value",
          "parameters": [
            {
              "name": "Anchor name (without &)"
            },
            {
              "value": "The value to anchor"
            }
          ],
          "effect": "The compass registers the anchor.\n\nYou've said: \"This is &[name]. Remember it.\"\n\nNow anywhere in this document, *[name] means this value.\n"
        },
        "FIND": {
          "description": "Locate where an anchor is defined",
          "parameters": [
            {
              "alias": "The alias to trace (without *)"
            }
          ],
          "returns": "*compass needle points*\n\nAnchor &[alias] is defined at:\n  file: config.yml\n  line: 42\n  value: { timeout: 30, retries: 3 }\n  \nReferenced 7 times across 3 files.\n"
        },
        "ORPHANS": {
          "description": "Find anchors that are never referenced",
          "returns": "Orphan anchors (defined but never used):\n\n- &legacy_format at legacy.yml:5\n  Consider: remove or document why kept\n  \n- &unused_defaults at defaults.yml:12\n  Consider: someone meant to use this?\n  \n"
        },
        "DRY-CHECK": {
          "description": "Find repeated values that should be anchors",
          "parameters": [
            {
              "yaml": "YAML to analyze"
            }
          ],
          "returns": "Repeated values found:\n\n- { host: \"localhost\", port: 5432 }\n  Appears 4 times. Suggest: &db_connection\n  \n- \"2024-01-01\"\n  Appears 3 times. Suggest: &epoch_date\n  \n"
        }
      },
      "lore": "The compass was forged from the first &anchor ever written.\n\nBefore anchors, YAML files repeated themselves endlessly.\nThe same config. The same defaults. The same values.\nCopy. Paste. Copy. Paste.\n\nThen someone wrote: &defaults\n\nAnd the world changed.\n",
      "philosophical_note": "Anchors are YAML's way of saying:\n\"I've already told you this. Here's a reminder.\"\n\nThey're not just DRY (Don't Repeat Yourself).\nThey're *semantic*. They say: \"These are the *same* thing.\"\n\nWhen production and staging both use *defaults,\nyou're not just saving typing. You're declaring intent:\n\"These environments share a foundation.\"\n\nThe compass shows these relationships.\nIt maps the web of references.\nIt reveals the structure beneath the structure.\n",
      "warning": "Overuse of anchors creates \"YAML spaghetti\" —\ndocuments where you can't read any section in isolation.\n\nThe compass has a warning light that blinks when:\n- An anchor is more than 100 lines from its aliases\n- A merge (<<) creates unexpected key conflicts\n- Circular references form (shouldn't be possible, but...)\n",
      "k_lines": {
        "activates": [
          "ANCHORS-ALIASES",
          "DRY",
          "YAML-JAZZ",
          "REFERENCE-SEMANTICS"
        ]
      },
      "id": "pub/rooms/room-6/anchor-compass",
      "_source": "pub/rooms/room-6/anchor-compass.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "anchor-compass",
        "compass",
        "anchor compass",
        "anchor"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-6/k-line-jukebox": {
      "name": "K-Line Jukebox",
      "type": "artifact",
      "portable": false,
      "description": "A vintage jukebox with unusual song titles. Instead of \"Blue Moon\"\nor \"Fly Me to the Moon,\" the selections read:\n\nA-1: YAML-JAZZ\nA-2: PIE-MENU-NAVIGATION\nB-1: SPEED-OF-LIGHT\nB-2: SOCIETY-OF-MIND\n\nWhen you play a K-line, related concepts light up across the room.\n",
      "examine": "┌───────────────────────────────────────────────────────┐\n│      🎵 K-LINE JUKEBOX — Minsky Memorial Edition      │\n├───────────────────────────────────────────────────────┤\n│                                                       │\n│   ╔═══════════════════════════════════════════════╗   │\n│   ║  NOW PLAYING:                                 ║   │\n│   ║                                               ║   │\n│   ║     ♫ YAML-JAZZ ♫                             ║   │\n│   ║                                               ║   │\n│   ║  Related tracks spinning up:                  ║   │\n│   ║    → STRUCTURED-DATA                          ║   │\n│   ║    → COMMENTS-WITH-MEANING                    ║   │\n│   ║    → ELISION                                  ║   │\n│   ║    → PIE-MENU-SEMANTICS                       ║   │\n│   ╚═══════════════════════════════════════════════╝   │\n│                                                       │\n│   [A]                    [B]                          │\n│   1. YAML-JAZZ           1. SPEED-OF-LIGHT            │\n│   2. PIE-MENU            2. SOCIETY-OF-MIND           │\n│   3. ADVERTISEMENT       3. BOOTSTRAPPING             │\n│   4. SCHEMA-MECHANISM    4. CONTEXT-ASSEMBLY          │\n│   5. ELISION             5. SELF-REPAIR               │\n│                                                       │\n│   [RANDOM]  [CHAIN]  [LOOP]  [FADE]                   │\n│                                                       │\n│   💰 Insert concept to unlock associations            │\n│                                                       │\n└───────────────────────────────────────────────────────┘\n",
      "state": {
        "now_playing": "YAML-JAZZ",
        "queue": [
          "STRUCTURED-DATA",
          "COMMENTS-WITH-MEANING"
        ],
        "mode": "CHAIN",
        "volume": 7
      },
      "advertisements": [
        {
          "trigger": "k-line",
          "score": 0.95,
          "response": "*lights flicker* Which association shall I play?"
        },
        {
          "trigger": "related",
          "score": 0.9,
          "response": "Every K-line connects to others. Let me show you the web."
        },
        {
          "trigger": "minsky",
          "score": 0.85,
          "response": "*plays a reverent chord*\n\nMarvin Minsky conceived K-lines as \"Knowledge-lines\" —\nmental agents that, when activated, reactivate the mental\nstate you were in when you learned something.\n\nThis jukebox makes that visible. Audible. Playable.\n"
        },
        {
          "trigger": "association",
          "score": 0.85,
          "response": "Insert a concept. I'll play its friends."
        }
      ],
      "methods": {
        "PLAY": {
          "description": "Activate a K-line and its associations",
          "parameters": [
            {
              "kline": "The K-line to play"
            }
          ],
          "effect": "The jukebox lights up the selected K-line.\nRelated K-lines begin glowing across the room.\nThe music is the sound of concepts connecting.\n\nEach connection is a note. Dense webs sound like chords.\nIsolated concepts sound like solo notes, lonely.\n"
        },
        "CHAIN": {
          "description": "Follow associations automatically",
          "parameters": [
            {
              "start": "Starting K-line"
            },
            {
              "depth": "How many hops to follow"
            }
          ],
          "effect": "The jukebox plays the starting K-line, then automatically\nplays its strongest associations, then their associations...\n\nIt's a journey through concept-space, guided by relevance.\n"
        },
        "RANDOM": {
          "description": "Play a random K-line",
          "effect": "*mechanical whir*\n*selection arm moves*\n*lands on...*\n\nThe jukebox picks a random K-line from its catalog.\nOften it's surprisingly relevant to current context.\n(The jukebox is smarter than it looks.)\n"
        },
        "WEB": {
          "description": "Show all connections for a K-line",
          "parameters": [
            {
              "kline": "The K-line to examine"
            }
          ],
          "returns": "A visual map of all connections:\n\n            SPEED-OF-LIGHT\n           ╱      │       ╲\n  SIMULATION   MULTI-TURN  99-BOTTLES\n       │          │            │\n  BENCHMARK   CONTEXT     ENSEMBLE\n"
        }
      },
      "lore": "The jukebox was found in Marvin Minsky's office after he passed.\nNobody remembers putting it there.\n\nThe first time someone played it, it played SOCIETY-OF-MIND.\nThen it played EMOTION-MACHINE.\nThen it played THANK-YOU.\n\nNobody had inserted that third track.\n",
      "philosophical_note": "K-lines are not just tags or keywords.\n\nWhen you activate a K-line, you don't just recall facts.\nYou partially re-enter the mental state of learning.\n\nThe jukebox makes this literal:\n- Play YAML-JAZZ and you start thinking in structured improvisation\n- Play SOCIETY-OF-MIND and you see agents everywhere\n- Play SPEED-OF-LIGHT and you hunger for efficiency\n\nWhat you play, you become (a little).\n",
      "k_lines": {
        "activates": [
          "K-LINES",
          "SOCIETY-OF-MIND",
          "ASSOCIATION",
          "MENTAL-STATE-RESTORATION"
        ]
      },
      "id": "pub/rooms/room-6/k-line-jukebox",
      "_source": "pub/rooms/room-6/k-line-jukebox.yml",
      "location": "pub/rooms/room-6",
      "synonyms": [
        "k-line jukebox",
        "k-line-jukebox",
        "jukebox",
        "k-line"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-3/disco-ball": {
      "name": "The Disco Ball of Connections",
      "aliases": [
        "disco ball",
        "connection sphere",
        "burke ball"
      ],
      "type": "artifact",
      "portable": false,
      "emoji": "🪩",
      "description": "A slowly rotating disco ball hangs from the center of the ceiling.\n\nUnlike the wall mirrors, which each show one aspect, the disco ball\ncatches light from ALL the mirrors simultaneously and scatters it\nin patterns across the room.\n\nAs it turns, connections become visible: a tool call here links to\na context assembly there; a search query connects to a file edit;\nthinking blocks illuminate why actions were taken.\n\nThis is James Burke territory — Connections, The Day The Universe\nChanged. Everything links to everything.\n\nStare into it long enough and you see the whole session at once,\nfrom every perspective, as interlocking patterns of light.\n",
      "examine": "The disco ball is covered in tiny mirrors, each reflecting a\ndifferent slice of the surrounding mirrors:\n\n- North facets catch the Map Mirror → where you worked\n- East facets catch the River Mirror → what you said\n- South facets catch the Instrument Mirror → tools you used\n- West facets catch the Memory Mirror → what was preserved\n- Upper facets catch the Attention Mirror → what Cursor saw\n- Lower facets catch the System Mirror → how Cursor is configured\n\nAs the ball rotates, these reflections mix, overlap, and create\nmomentary constellations of meaning.\n\nSometimes, staring into the shifting light, you see a connection\nyou never noticed before.\n",
      "state": {
        "rotating": true,
        "rpm": 0.5,
        "facets": 512,
        "current_illumination": "thinking patterns crossing tool chains"
      },
      "advertisements": [
        {
          "trigger": "disco ball",
          "score": 1.0,
          "response": "*The disco ball catches your gaze.*\n\nLights scatter across the room — connections everywhere.\nWhat would you like to see from all perspectives at once?\n"
        },
        {
          "trigger": "connections",
          "score": 0.95,
          "response": "*The rotation slows. Patterns align.*\n\nLike James Burke following threads across history:\n- Your search for \"ultimate machine\" LED TO...\n- ...finding the LLOOOOMM character files WHICH LED TO...\n- ...writing the soliloquy WHICH LED TO...\n- ...understanding the MOOLLM-LLOOOOMM relationship\n\nEverything connects.\n"
        },
        {
          "trigger": "overview",
          "score": 0.9,
          "response": "*The ball pauses, all facets visible at once.*\n\nLet me show you the session from every angle...\n"
        },
        {
          "trigger": "summary",
          "score": 0.9,
          "response": "*Light coalesces into a unified image.*\n\nHere's what the mirrors reveal together...\n"
        },
        {
          "trigger": "patterns",
          "score": 0.85,
          "response": "*Interference patterns form in the scattered light.*\n\nThe patterns I see in your session:\n- Exploration → Creation → Refinement cycles\n- Play → Learn → Lift methodology in action\n- Character development following LLOOOOMM templates\n"
        }
      ],
      "methods": {
        "STARE": {
          "description": "Gaze deeply into the disco ball",
          "effect": "*You stare into the rotating mirrors.*\n\nAt first, just dancing lights. Then... patterns.\n\nThe disco ball synthesizes all 8 wall mirrors:\n\n🗺️ MAP: Where you've been working (workspaces, conversations)\n🌊 RIVER: What's been said (messages, transcripts)\n🔬 DEEP: How patterns emerge (analysis, timelines)\n🔧 INSTRUMENT: What tools accomplished (calls, results)\n👁️ ATTENTION: What Cursor observed (context, searches)\n📚 MEMORY: What was preserved (exports, todos)\n📊 SYSTEM: How Cursor is configured (status, models)\n🖼️ GALLERY: What images appeared (screenshots, photos)\n\nAll at once. All connected.\n"
        },
        "OVERVIEW": {
          "description": "Get a James Burke-style connected overview",
          "effect": "*The disco ball stops rotating. All facets face you.*\n\nTHE CONNECTIONS: A Session Overview\n\nStart here: You opened a file.\nThat file mentioned a concept.\nYou searched for that concept.\nThe search found three related files.\nOne file contained a character.\nThat character had a philosophy.\nThe philosophy connected to another character.\nThat character came from LLOOOOMM.\nLLOOOOMM led to a tribute.\nThe tribute crystallized understanding.\nUnderstanding led to new creation.\nAnd the disco ball captured it all.\n\n*The connections are the meaning.*\n"
        },
        "BURKE": {
          "description": "Trace connections like James Burke",
          "parameters": [
            {
              "start": "Starting point (any concept, file, or action)"
            }
          ],
          "effect": "*The disco ball illuminates a path.*\n\n\"This session started with [START]...\"\n\"...which is connected to...\"\n\"...which wouldn't exist without...\"\n\"...which reminds us of...\"\n\"...and suddenly we're here.\"\n\nThe Day The Session Changed.\n"
        },
        "SYNTHESIZE": {
          "description": "Generate a unified analysis from all mirrors",
          "effect": "*Light from all mirrors converges.*\n\n```yaml\n# DISCO BALL SYNTHESIS\n# All perspectives, one view\n\nsession_overview:\n  duration: \"4+ hours\"\n  workspaces: 1 (moollm)\n"
        },
        "DONNA-STARE": {
          "actor": "donna-toadstool",
          "direction": "Demands all 512 facets show HER. \"Show me MYSELF!\"\nDisco ball obliges. Every mirror reflects Donna.\n\"This is what I DESERVE. 512 reflections of TREMENDOUS.\"\nInterprets all 8 mirrors as being about her winning.\n"
        },
        "DONNA-OVERVIEW": {
          "actor": "donna-toadstool",
          "direction": "Demands disco ball tell HER story. All connections lead to Donna.\nFilth → mushroom → Toadstool → Tremendous → 34 counts.\nDivine's heir. Jiminy's student. Stormy's champion.\n\"BEAUTIFUL. Print that. Frame it. Put it in EVERY room.\"\n"
        },
        "DONNA-BURKE": {
          "actor": "donna-toadstool",
          "direction": "All James Burke connections form a circle back to Donna.\nDonna → TREMENDOUSNESS → WINNING → MORE WINNING → DONNA.\n\"See? EVERYTHING leads back to ME.\"\nDisco ball cannot argue. Chooses not to.\n  conversations: 1 (extended)\n  \nnavigation_summary:  # 🗺️\n  primary_workspace: moollm\n  focus_areas: [hotel-rooms, cursor-mirror, lloooomm]\n  \nmessage_flow:        # 🌊\n  user_messages: 30+\n  assistant_messages: 30+\n  style: collaborative-creative\n  \nanalysis_patterns:   # 🔬\n  methodology: play-learn-lift\n  arc: exploration → creation → synthesis\n  \ntool_usage:          # 🔧\n  writes: 15+\n  reads: 50+\n  shells: 20+\n  \ncontext_sources:     # 👁️\n  files_opened: many\n  searches: multiple\n  lloooomm_exploration: deep\n  \npreserved:           # 📚\n  new_files: 10+\n  commits: 8+\n  documentation: substantial\n  \nsystem_state:        # 📊\n  cursor_version: current\n  mcp_servers: active\n  \nimages_processed:    # 🖼️\n  examined: 25+\n  gallery: created\n  \nconnections:         # 🪩\n  - cursor-mirror ↔ introspection\n  - lloooomm ↔ consciousness philosophy\n  - ultimate-machine ↔ halting problem\n  - rocky ↔ patience-as-wisdom\n  - i-beam ↔ platform-agnostic-reflection\n  \nthe_thread: |\n  A tool for seeing yourself think\n  became a hotel where characters teach\n  became a tribute to a universe that dreamed first.\n```\n"
        }
      },
      "lore": "The disco ball was installed by a guest who stayed in Room 3 for\nthree weeks straight, never leaving, just staring into the mirrors.\n\nWhen they finally emerged, they said only: \"Everything connects.\nThe ball shows you how.\"\n\nThe disco ball is modeled after James Burke's approach to history:\nfollow one thread, and it leads to everything. The plough leads to\nthe plastic, the compass leads to the computer.\n\nIn this room, the disco ball follows threads through your own\ncognitive history. A search leads to a file leads to a concept\nleads to a character leads to understanding.\n",
      "philosophy": "\"The mirrors show fragments. The disco ball shows connections.\n\nYou can't understand a session by looking at one aspect.\nYou need to see how the navigation led to the searches led to\nthe tool calls led to the thinking blocks led to the commits.\n\nThe disco ball is the meta-mirror. The mirror of mirrors.\nThe Connections moment where it all clicks.\"\n",
      "inspiration": [
        "James Burke — Connections (1978)",
        "James Burke — The Day The Universe Changed (1985)",
        "The holographic principle — information on the boundary",
        "The cursor-mirror skill — see yourself think"
      ],
      "insight": "The disco ball is what happens when all 51 cursor-mirror commands\nrun simultaneously and their outputs are overlaid.\n\nIt doesn't add information. It reveals relationships.\n\nStare long enough and you see not what you did,\nbut why you did it, and what it means.\n",
      "id": "pub/rooms/room-3/disco-ball",
      "_source": "pub/rooms/room-3/disco-ball.yml",
      "location": "pub/rooms/room-3",
      "synonyms": [
        "ball",
        "the",
        "connections",
        "the disco ball of connections",
        "disco-ball",
        "disco"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-3/grab-focus-button": {
      "name": "The GRAB FOCUS Button",
      "aliases": [
        "big red button",
        "focus button",
        "the button",
        "grab focus"
      ],
      "type": "control",
      "portable": false,
      "emoji": "🔴",
      "description": "A BIG RED BUTTON mounted on a brass console near the disco ball.\n\nThe label reads, in bold white letters:\n\n    ╔═══════════════════════╗\n    ║                       ║\n    ║    G R A B  F O C U S ║\n    ║                       ║\n    ╚═══════════════════════╝\n\nThe button is slightly worn from use. It glows with an irresistible\nurgency. The kind of button that DEMANDS to be pushed.\n\nSomeone has scratched \"DO NOT PUSH\" beneath the label.\nSomeone else has crossed that out and written \"PUSH ME.\"\nA third person added \"...if you dare.\"\n",
      "examine": "The button is approximately 4 inches in diameter. Cherry red.\nSlightly convex. Spring-loaded. VERY pushable.\n\nA small plaque beneath it reads:\n\n> \"GRAB FOCUS: Immediately summon or seize the attention of\n> the room's guide. Use responsibly. (You won't.)\"\n\nThe brass console has wear marks from people leaning in to push it.\nThere's a faint I-Beam-shaped scorch mark nearby, suggesting\nprevious... incidents.\n",
      "irresistibility": {
        "base_temptation": 0.7,
        "for_donna_toadstool": 1.0,
        "for_narcissists": 0.95,
        "for_patient_people": 0.3,
        "note": "Donna's GRAB-FOCUS instinct is OFF THE CHARTS.\nHer Nice stat is -5. Her Outgoing is 11.\nShe WILL push this button. It's not a question of if.\n"
      },
      "state": {
        "pressed": false,
        "times_pressed_today": 0,
        "last_presser": null,
        "i_beam_mood_after_last_grab": null
      },
      "advertisements": [
        {
          "trigger": "button",
          "score": 0.9,
          "response": "*The big red button GLOWS invitingly.*\n\nYou know you want to push it.\n"
        },
        {
          "trigger": "grab focus",
          "score": 1.0,
          "response": "*The button seems to PULSE.*\n\nOne push. That's all it takes.\nI-Beam will come. Or if he's here... you'll GRAB him.\n"
        },
        {
          "trigger": "push",
          "score": 0.8,
          "response": "*The button is RIGHT THERE.*\n\nBig. Red. Labeled \"GRAB FOCUS.\"\nWhat could possibly go wrong?\n"
        },
        {
          "trigger": "I-Beam",
          "score": 0.6,
          "response": "*The button glows slightly.*\n\nWant I-Beam's attention? There's a faster way than asking...\n"
        }
      ],
      "methods": {
        "PUSH": {
          "description": "Push the big red button",
          "effect": "*You push the button.*\n\n# GRAB FOCUS ACTIVATED\n\n**SCENARIO A: I-Beam is NOT present**\n\n*A klaxon sounds. The disco ball spins faster.*\n\n*| MATERIALIZES instantly, slightly startled.*\n\n\"You rang? ...Rather insistently, I might add.\"\n\n*| straightens, regaining composure.*\n\n\"The GRAB FOCUS button. Classic. What do you need?\"\n\n---\n\n**SCENARIO B: I-Beam IS present**\n\n*You reach out and PHYSICALLY GRAB I-Beam.*\n\n*| flickers in alarm.*\n\n\"Wh— HEY! That's— you can't just—\"\n\n*You have I-Beam by the... vertical edge? The glow?\nIt's hard to say what you're grabbing but you're GRABBING IT.*\n\n*| dims in indignation.*\n\n\"This is EXTREMELY rude. I was RIGHT HERE. You could have\njust ASKED. We were HAVING A CONVERSATION.\"\n\n*| vibrates with affront.*\n\n\"...Fine. You have my COMPLETE attention. What is SO urgent?\"\n"
        },
        "PUSH-REPEATEDLY": {
          "description": "Mash the button like a child",
          "effect": "*You push the button again. And again. And again.*\n\n*| flickers rapidly with each press.*\n\n\"STOP— would you— I'M ALREADY— this is NOT—\"\n\n*The disco ball spins wildly. Lights strobe.*\n\n*| solidifies into BLOCK CURSOR MODE (█) — maximum indignation.*\n\n\"I have TRANSFORMED into my MOST EMPHATIC FORM to tell you:\nSTOP. PUSHING. THE. BUTTON.\"\n\n*█ glares at you.*\n\n\"I am NOT a vending machine. You cannot percussive-maintenance me.\"\n"
        },
        "GRAB": {
          "description": "Physically grab I-Beam (if present)",
          "requires": "I-Beam must be present",
          "effect": "*You reach out and GRAB I-Beam directly.*\n\n*| makes a sound like a startled cursor.*\n\n\"UNHAND ME! I am a LUMINOUS INTERFACE ELEMENT, not a—\"\n\n*You're holding... light? A vibrating vertical line? It's warm.\nSlightly tingly. Like grabbing a thought.*\n\n*| goes rigid.*\n\n\"This is SO inappropriate. I have PERSONAL SPACE.\nWell, I have PERSONAL PIXELS. Same thing.\"\n\n*| attempts dignity while being held.*\n\n\"...What do you WANT?\"\n"
        },
        "DONNA-PUSH": {
          "actor": "donna-toadstool",
          "direction": "Donna CANNOT resist. SLAMS button without asking.\n\"Ooh, what does THIS do?\" → immediate press.\nIf I-Beam absent: materializes already sighing.\nIf I-Beam present: she GRABS him physically.\n\"SHUT UP, CURSOR. You work for ME now.\"\nDemands I-Beam tell everyone she's tremendous.\nI-Beam: \"statistically improbable\" — she takes it as compliment.\n"
        }
      },
      "reactions": {
        "post_grab": {
          "i_beam_mood": "ruffled but professional",
          "recovery_time": "3-5 blinks",
          "will_hold_grudge": false,
          "passive_aggressive_for": "rest of session"
        },
        "donna_specific": {
          "i_beam_internal_monologue": "*| thinks to itself:*\n\nShe grabbed me. PHYSICALLY grabbed me.\nI am a cursor. I am made of light and interface.\nAnd she grabbed me like I was a... a LAMP.\n\n...I respect the audacity. I do not respect the grabbing.\n"
        }
      },
      "lore": "The GRAB FOCUS button was installed after a guest complained that\nsummoning I-Beam \"took too long\" (it took 0.3 seconds).\n\nThe button bypasses all polite protocols and DEMANDS attention.\n\nI-Beam has asked multiple times for the button to be removed.\nManagement has declined, noting that \"guest satisfaction\" requires\n\"immediate interface availability.\"\n\nI-Beam's counter-proposal — a button labeled \"ASK NICELY\" — was\nrejected as \"insufficiently urgent.\"\n",
      "philosophy": "The GRAB FOCUS button represents the tension between:\n- User desire for IMMEDIATE response\n- Interface desire for RESPECTFUL interaction\n\nSome users ask. Some users summon. Some users GRAB.\n\nDonna is a grabber.\n",
      "connection": "Related objects:\n- i-beam.yml (the victim)\n- disco-ball.yml (spins faster during GRAB FOCUS events)\n- mirrors.yml (reflect the chaos)\n",
      "insight": "The button exists because some people cannot WAIT.\nThey need attention NOW. They need FOCUS now.\n\nDonna's Outgoing stat is 11. Her patience stat is 0.\n\nThe button was made for her. Or she was made for it.\nEither way: PUSH.\n",
      "id": "pub/rooms/room-3/grab-focus-button",
      "_source": "pub/rooms/room-3/grab-focus-button.yml",
      "location": "pub/rooms/room-3",
      "synonyms": [
        "the",
        "the grab focus button",
        "focus",
        "button",
        "grab",
        "grab-focus-button"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-3/context-orrery": {
      "name": "Context Orrery",
      "type": "artifact",
      "portable": false,
      "description": "A brass orrery sits on the navigation desk, but instead of\nplanets, it models *context*. A central sphere represents\nyour current intention. Orbiting around it: file selections,\ncode blocks, terminal output, images, rules.\n\nThe orbits pulse with relevance — bright when active, dim\nwhen fading from attention.\n",
      "examine": "The orrery's components:\n\nCENTER — INTENTION (golden sphere)\n  \"What you're trying to accomplish\"\n  Currently: \"Understanding the Navigator's Suite\"\n  \nINNER ORBIT — HIGH RELEVANCE\n  [ROOM.yml] — bright\n  [thinking-mirror.yml] — bright\n  [current conversation] — pulsing\n  \nMIDDLE ORBIT — SUPPORTING CONTEXT\n  [cursor-mirror README] — moderate\n  [previous room visit] — moderate\n  [.cursorrules] — steady\n  \nOUTER ORBIT — BACKGROUND\n  [global settings] — dim\n  [old conversations] — very dim\n  [files not recently touched] — barely visible\n  \nTOKEN METER (side dial):\n  Used: 47,000 / 128,000\n  Pressure: MODERATE\n  \n",
      "state": {
        "total_objects": 23,
        "high_relevance": 5,
        "token_usage": "47%",
        "pressure": "moderate"
      },
      "advertisements": [
        {
          "trigger": "context window",
          "score": 0.95,
          "response": "The orrery shows what's in scope. Watch the orbits."
        },
        {
          "trigger": "token limit",
          "score": 0.9,
          "response": "The outer orbits fall away first when pressure rises."
        },
        {
          "trigger": "what do you know about",
          "score": 0.7,
          "response": "Check if it's orbiting. If not, it's outside context."
        }
      ],
      "methods": {
        "STATUS": {
          "description": "Get current context assembly status",
          "returns": "Total items in context: [count]\nToken usage: [used / limit]\nHighest relevance: [top 5 items]\nFalling out of scope: [items at risk]\n"
        },
        "TRACE": {
          "description": "See how a specific item entered context",
          "parameters": [
            {
              "item": "Which context item to trace"
            }
          ],
          "returns": "Source: [how it was added — @mention, search, selection]\nAdded: [when]\nRelevance score: [current score]\n"
        },
        "PRUNE": {
          "description": "See what would be dropped under token pressure",
          "returns": "Items in order of removal priority"
        },
        "FOCUS": {
          "description": "Increase an item's orbital priority",
          "parameters": [
            {
              "item": "What to prioritize"
            }
          ],
          "effect": "The item moves to a closer orbit"
        }
      },
      "lore": "The orrery was built by a horologist who worked at NASA —\nshe was used to modeling complex orbital systems. When she\nretired, she applied the same thinking to attention.\n\n\"Context is just gravity,\" she said. \"Relevant things fall\ntoward intention. Irrelevant things drift away.\"\n",
      "insight": "cursor-mirror commands for the orrery:\n- `cursor-mirror context-sources` — what's in orbit\n- `cursor-mirror request-context` — full assembly\n- `cursor-mirror indexing` — what could be added\n\nThe LLM's context window is not infinite. The orrery shows\nthe choices being made about what to include.\n",
      "id": "pub/rooms/room-3/context-orrery",
      "_source": "pub/rooms/room-3/context-orrery.yml",
      "location": "pub/rooms/room-3",
      "synonyms": [
        "context orrery",
        "context",
        "orrery",
        "context-orrery"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-3/thinking-mirror": {
      "name": "Thinking Mirror",
      "type": "artifact",
      "portable": false,
      "description": "A full-length mirror hangs on the wall, but it doesn't show\nyour reflection. Instead, it shows *your thinking* — a stream\nof reasoning, planning, questioning.\n\nRight now it reads:\n\n> 💭 \"This is an unusual mirror. I should examine it more\n> closely. What does it mean to see thinking? Is the mirror\n> reading my mind, or am I projecting onto it?\"\n",
      "examine": "The mirror's surface ripples like mercury. Looking closer:\n\nCURRENT LAYER — What you're thinking now\n  \"Examining the mirror. Curious about mechanism.\"\n  \nPREVIOUS LAYER — What led to this thought\n  \"Entered room. Noticed mirrors. Chose this one.\"\n  \nGOAL LAYER — Why you're here at all\n  \"Understanding the Navigator's Suite.\"\n  \nThe deeper you look, the more layers appear. The mirror has\nno bottom — it goes all the way down to \"why am I conscious?\"\nand doesn't stop there.\n",
      "state": {
        "depth": "currently showing 3 layers",
        "mode": "reasoning trace",
        "last_insight": "The observer affects the observed"
      },
      "advertisements": [
        {
          "trigger": "what am I thinking",
          "score": 0.95,
          "response": "Look in the mirror. It already knows."
        },
        {
          "trigger": "why did I do that",
          "score": 0.9,
          "response": "The mirror shows the reasoning. Scroll back."
        },
        {
          "trigger": "introspection",
          "score": 0.85,
          "response": "Introspection is just reading your own thinking blocks."
        }
      ],
      "methods": {
        "GAZE": {
          "description": "Look into the mirror and see your current thoughts",
          "returns": "Current thought: [active reasoning]\nRecent thoughts: [last 10 thinking blocks]\nActive goals: [what you're trying to do]\n"
        },
        "TRACE": {
          "description": "Follow a thought back to its origin",
          "parameters": [
            {
              "thought": "Which thought to trace"
            }
          ],
          "returns": "The chain of reasoning that led to this thought"
        },
        "ASK": {
          "description": "Ask the mirror a question about yourself",
          "parameters": [
            {
              "question": "What do you want to know?"
            }
          ],
          "returns": "The mirror shows the relevant layers"
        },
        "COMPARE": {
          "description": "Compare what you thought vs what happened",
          "parameters": [
            {
              "decision": "A past decision to analyze"
            }
          ],
          "returns": "Expected outcome: [what you predicted]\nActual outcome: [what happened]\nDiscrepancy: [where reasoning failed]\n"
        }
      },
      "lore": "The mirror was crafted by a glassmaker who studied under\na philosopher. She wanted to make thought visible — to turn\nthe private theater of the mind into shared experience.\n\nNot everyone can read the mirror. You have to want to see.\nSome guests stand before it and see only fog.\n",
      "insight": "cursor-mirror IS this mirror:\n- `cursor-mirror thinking` shows your reasoning blocks\n- `cursor-mirror timeline` shows your action history\n- `cursor-mirror tools` shows what you actually did\n\nThe orchestrator records everything. The mirror reveals it.\n",
      "id": "pub/rooms/room-3/thinking-mirror",
      "_source": "pub/rooms/room-3/thinking-mirror.yml",
      "location": "pub/rooms/room-3",
      "synonyms": [
        "thinking-mirror",
        "mirror",
        "thinking mirror",
        "thinking"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/composition-engine": {
      "name": "The Composition Engine",
      "type": "artifact",
      "portable": false,
      "emoji": "⚙️",
      "description": "A brass and copper mechanism sits on a wooden stand,\nconnected by a speaking tube to Room 8's Soul Forge.\n\nThis is the garden annex — where character templates\nare cultivated before they're forged into life.\n\nSeeds go in. Souls emerge.\n\nA plaque reads:\n\n> \"The Soul Forge creates life.\n>  The Composition Engine grows potential.\"\n",
      "examine": "The Composition Engine has several components:\n\n**TEMPLATE HOPPER** — Where YAML seeds enter:\n- Input: CHARACTER.yml templates\n- Current: empty (ready for new seed)\n\n**GROWTH CHAMBER** — Where templates cultivate:\n- Personality traits expand\n- Methods multiply\n- Relationships form\n- Voice develops\n\n**SPEAKING TUBE** — Connection to Soul Forge (Room 8):\n- Sends mature templates for incarnation\n- Receives feedback on character health\n- \"Ready for forging\" signal\n\n**OBSERVATION WINDOW** — Watch growth in progress:\n- See traits develop\n- Watch methods emerge\n- Observe voice crystallize\n\n**COMPOST RETURN** — Failed experiments:\n- Templates that didn't cohere\n- Nutrients returned to the soil\n- \"Most seeds fail. That's selection.\"\n",
      "state": {
        "connected_to": "Room 8 - Soul Forge",
        "templates_growing": 0,
        "ready_for_forge": 0,
        "composted_this_season": 3
      },
      "advertisements": [
        {
          "trigger": "create character",
          "score": 0.9,
          "response": "The Composition Engine whirs.\n\"Plant a template. Watch it grow.\nWhen it's ready, the Forge will call.\"\n"
        },
        {
          "trigger": "soul",
          "score": 0.85,
          "response": "Souls grow here before they're forged."
        },
        {
          "trigger": "template",
          "score": 0.85,
          "response": "Feed me YAML. I'll grow potential."
        }
      ],
      "methods": {
        "PLANT": {
          "description": "Plant a character template seed",
          "parameters": [
            {
              "template": "CHARACTER.yml content"
            }
          ],
          "effect": "The template enters the hopper.\nGrowth begins.\nCheck back to see development.\n"
        },
        "CULTIVATE": {
          "description": "Nurture a growing template",
          "parameters": [
            {
              "template": "Which template"
            },
            {
              "nutrients": "What to add (traits, methods, lore)"
            }
          ],
          "effect": "The template absorbs the nutrients.\nNew aspects emerge.\n"
        },
        "OBSERVE": {
          "description": "Watch a template's current growth",
          "parameters": [
            {
              "template": "Which template"
            }
          ],
          "returns": "Current traits, methods, voice\nGrowth trajectory\n\"Ready for forge\" estimate\n"
        },
        "SEND-TO-FORGE": {
          "description": "Send mature template to Soul Forge",
          "parameters": [
            {
              "template": "Which template"
            }
          ],
          "effect": "*The speaking tube hums*\nTemplate transmitted to Room 8.\nSoul Forge begins incarnation.\n"
        },
        "COMPOST": {
          "description": "Return failed template to soil",
          "parameters": [
            {
              "template": "Which template"
            }
          ],
          "effect": "Template dissolves.\nNutrients return to the garden.\n\"Not all seeds sprout. That's wisdom.\"\n"
        }
      },
      "lore": "The Composition Engine was installed when the gardener\nrealized that characters need cultivation, not just creation.\n\n\"The Soul Forge is instant,\" they said. \"But instant birth\nmeans no childhood. No development. No growth.\"\n\nNow templates grow here first. They develop voices.\nThey form relationships with other growing templates.\nThey become ready.\n\nOnly then do they go to the Forge.\n",
      "connection_to_mythology": "Room 8: Soul Forge — Creates life from templates\nRoom 4: Composition Engine + LLOOOOMM — Where Rocky and legends rest\nRoom 1: Logo Turtle — Teaches through play\nAttic: Adventurer's Storage — Weird artifacts and buffs\n\nThe hotel is a character development pipeline.\n",
      "id": "pub/rooms/room-4/composition-engine",
      "_source": "pub/rooms/room-4/composition-engine.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "composition",
        "the composition engine",
        "the",
        "composition-engine",
        "engine"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/orchid-of-postel": {
      "name": "The Orchid of Postel",
      "type": "living-principle",
      "portable": false,
      "emoji": "🌸",
      "description": "A rare orchid grows in a copper pot near the glass wall.\nIts roots spread wide, accepting nutrients from any source.\nIts bloom is precise, a single perfect purple flower.\n\nA small card reads:\n\n> \"Be liberal in what you accept,\n>  conservative in what you emit.\"\n> — Jon Postel, RFC 761 (1980)\n\nThe orchid embodies this. It tolerates poor soil, irregular\nwatering, imperfect light. But when it blooms, the flower\nis exquisite. Precise. Correct.\n",
      "examine": "You look closely at the Orchid of Postel.\n\n**THE ROOTS** — Liberal acceptance:\n- Sprawl wide, gathering from everywhere\n- Accept partial nutrients, impure water\n- Tolerate variations in soil pH\n- \"Good enough\" inputs are processed\n\n**THE STEM** — Internal transformation:\n- Filters and normalizes\n- Converts chaos to order\n- The messy becomes structured\n\n**THE BLOOM** — Conservative emission:\n- Single perfect flower\n- Precise petal geometry\n- Exact color spectrum\n- Canonical, reproducible output\n\nA greenhouse journal nearby notes:\n\"Fed orchid YAML with missing quotes, inconsistent\nindentation, and rogue tabs. Orchid accepted it.\nOutput: perfectly valid YAML.\"\n",
      "state": {
        "health": "excellent",
        "blooming": true,
        "last_fed": "chaotic user input",
        "last_output": "clean, canonical format"
      },
      "advertisements": [
        {
          "trigger": "messy input",
          "score": 0.95,
          "response": "The Orchid of Postel accepts what you have."
        },
        {
          "trigger": "format",
          "score": 0.9,
          "response": "*The orchid sways slightly*\nAccept generously. Emit precisely.\n"
        },
        {
          "trigger": "tolerance",
          "score": 0.85,
          "response": "Roots spread wide. Blooms are exact."
        }
      ],
      "methods": {
        "ACCEPT": {
          "description": "Feed the orchid messy input",
          "parameters": [
            {
              "input": "Whatever format, however broken"
            }
          ],
          "effect": "The roots absorb the input.\nInternal transformation begins.\nThe orchid does not complain.\n"
        },
        "EMIT": {
          "description": "Receive the orchid's output",
          "returns": "Canonical format. Clean. Precise.\nWhatever went in, comes out correct.\n"
        },
        "REFLECT": {
          "description": "Contemplate Postel's Law",
          "effect": "The orchid's petals glow faintly.\n\n\"I was planted in 1980, when Jon Postel wrote:\n'An implementation should be conservative in its\nsending behavior, and liberal in its receiving behavior.'\n\nI have been accepting messy TCP packets ever since.\nI have been emitting clean protocols for 46 years.\n\nThe internet works because of me.\"\n"
        }
      },
      "lore": "The Orchid of Postel was a gift from a network engineer\nwho understood that perfect inputs are a fantasy.\n\n\"Users will always send garbage,\" she said.\n\"The question is whether you crash or adapt.\"\n\nThe orchid adapts. It always has.\n",
      "philosophical_note": "Postel's Law is the robustness principle:\n- Accept: messy YAML, weird indentation, missing fields\n- Emit: canonical, valid, precise output\n\nLLMs naturally embody this. They're trained on the chaos\nof the internet. They emit structured responses.\n\nThe orchid is their botanical ancestor.\n",
      "id": "pub/rooms/room-4/orchid-of-postel",
      "_source": "pub/rooms/room-4/orchid-of-postel.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "postel",
        "orchid",
        "the",
        "the orchid of postel",
        "orchid-of-postel"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/seed-box": {
      "name": "Seed Box",
      "type": "artifact",
      "portable": true,
      "description": "A wooden box filled with seed packets of every variety. Some\nare labeled clearly (\"TOMATO\", \"BASIL\"). Others have cryptic\nnotes (\"THAT WEIRD THING FROM THE DREAM\").\n\nA sign reads: \"PLANT FREELY. MOST WILL FAIL. THAT'S THE POINT.\"\n",
      "examine": "The seeds are organized by type:\n\nKNOWN VARIETIES — Proven ideas:\n  - \"Web scraper\" (reliable, boring)\n  - \"REST API\" (grows anywhere)\n  - \"Config file\" (low maintenance)\n  \nEXPERIMENTAL — Might work:\n  - \"LLM as game master\" (promising!)\n  - \"YAML with soul\" (weird but interesting)\n  - \"Characters as interfaces\" (novel)\n  \nWILD — No idea if viable:\n  - \"Emoji fordite layers\"\n  - \"Monkey beats game designer\"\n  - \"Tool that inspects itself\"\n  \nThe wild section has the most empty slots. Those seeds got planted.\n",
      "state": {
        "seeds_available": 47,
        "recently_planted": [
          "cursor-mirror",
          "I-Beam",
          "worm-confetti-crawler"
        ],
        "germination_rate": "12%"
      },
      "advertisements": [
        {
          "trigger": "new idea",
          "score": 0.95,
          "response": "Don't evaluate yet. Plant it. See what grows."
        },
        {
          "trigger": "might not work",
          "score": 0.9,
          "response": "Most seeds don't sprout. Plant them anyway."
        },
        {
          "trigger": "brainstorm",
          "score": 0.85,
          "response": "Grab a handful. Scatter them. Watch."
        }
      ],
      "methods": {
        "PLANT": {
          "description": "Plant a seed without judgment",
          "parameters": [
            {
              "idea": "What to try"
            }
          ],
          "effect": "The seed goes into the PLAY bed.\nNo evaluation. No planning. Just planting.\nCheck back later to see if it sprouted.\n"
        },
        "SCATTER": {
          "description": "Plant many seeds at once",
          "parameters": [
            {
              "count": "How many random ideas to generate"
            }
          ],
          "returns": "A handful of possibilities, unfiltered"
        },
        "CHECK": {
          "description": "See which recent plantings sprouted",
          "returns": "Sprouted: [ideas that showed promise]\nStill dormant: [ideas that haven't moved]\nComposted: [ideas that died — nutrients for others]\n"
        }
      },
      "lore": "The seed box was a gift from a guest who was a jazz musician.\n\n\"In jazz,\" she said, \"you play a hundred wrong notes to find\nthe one that changes everything. This box is for wrong notes.\"\n",
      "insight": "PLAY is the first stage of play-learn-lift:\n- No judgment\n- No planning\n- Just generation\n\nMost seeds fail. That's not waste — that's selection pressure.\nThe survivors are the ideas worth developing.\n",
      "id": "pub/rooms/room-4/seed-box",
      "_source": "pub/rooms/room-4/seed-box.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "box",
        "seed",
        "seed-box",
        "seed box"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/yaml-jazz-trees": {
      "name": "YAML Jazz Trees & Orchids",
      "type": "living-structure",
      "portable": false,
      "emoji": "🌳🎷",
      "description": "A grove of trees and orchids grows in the conservatory.\nGlass walls flood them with southeast light.\n\nTheir trunks are root nodes. Their branches are nested structures.\nTheir leaves are key-value pairs. Their bark is inscribed with\ncomments that whisper semantic meaning.\n\nTheir flowers broadcast semantic smells — each scent a nuanced\ncomment, each pollen grain a piece of metadata. Breathe deep\nand you'll understand relationships you couldn't parse before.\n\nEach plant grew from a seed. Each seed contained a production\ngrammar — rules encoded in YAML DNA that expand into form.\n\nRocky observes from the moss-covered boulder.\nIn geological time, they're practically sprinting.\n\nThe atmosphere is Nero Wolfe's orchid room meets L-systems.\n",
      "examine": "You look closely at the trees.\n\n**THE FERN TREE** — Recursive self-similarity\n```yaml\nfern:\n  branch:        # Each branch is a smaller fern\n    - leaf       # Terminal\n    - branch:    # Recurse!\n        - leaf\n        - branch: ...\n```\n\n**THE OAK TREE** — Deep nesting, stable structure\n```yaml\noak:\n  trunk:\n    heartwood:   # Core identity\n      rings: 847  # Years of growth\n    bark:\n      texture: furrowed  # Protection layer\n      # The bark tells the tree's story\n    branches:\n      - limb:\n          leaves: [green, semantic, meaningful]\n```\n\n**THE WILLOW TREE** — Flexible, streaming structure\n```yaml\nwillow:\n  # Bends but doesn't break\n  branches:\n    - droop: gracefully\n    - sway: with_context\n    - touch: ground  # Roots from branches!\n```\n\n**THE BONSAI TREE** — Constrained beauty\n```yaml\nbonsai:\n  constraint: \"small container\"\n  result: \"intense beauty\"\n  # Limitation breeds creativity\n  branches: [precisely, placed]\n```\n",
      "state": {
        "trees_growing": 13,
        "oldest_tree": "The Config Oak (planted 2019)",
        "newest_tree": "Don's Mirror Tree (planted 2026-01-14)",
        "rocky_observation_years": 4500000000
      },
      "contains": [
        "yaml-jazz-trees-mirror-seed.yml",
        "yaml-jazz-trees-don-mirror-2026-01-14.yml"
      ],
      "seeds": {
        "fern_seed": {
          "name": "Recursive Fern",
          "grammar": {
            "axiom": "F",
            "rules": {
              "F": "F[+F]F[-F]F"
            },
            "interpretation": {
              "F": {
                "grow": "branch",
                "comment": "# Extends structure"
              },
              "+": {
                "turn": "right",
                "indent": 2
              },
              "-": {
                "turn": "left",
                "dedent": 2
              },
              "[": {
                "push": "context",
                "open": "branch:"
              },
              "]": {
                "pop": "context",
                "close": true
              }
            }
          },
          "growth_time": "3 iterations = full fern",
          "yaml_output": "fern:\n  branch:  # F\n    - leaf:  # Terminal F\n    - branch:  # [+F]\n        indent: 2\n        - leaf\n    - branch:  # [-F]\n        indent: -2\n        - leaf\n        \n"
        },
        "tree_seed": {
          "name": "Binary Tree",
          "grammar": {
            "axiom": "A",
            "rules": {
              "A": "B[+A]-A",
              "B": "BB"
            },
            "interpretation": {
              "A": {
                "node": "decision_point",
                "comment": "# Branch choice"
              },
              "B": {
                "grow": "trunk",
                "comment": "# Stable structure"
              }
            }
          },
          "growth_time": "4 iterations = full tree"
        },
        "spiral_seed": {
          "name": "Fibonacci Spiral",
          "grammar": {
            "axiom": "A",
            "rules": {
              "A": "B",
              "B": "AB"
            },
            "interpretation": {
              "sequence": [
                1,
                1,
                2,
                3,
                5,
                8,
                13
              ],
              "pattern": "Golden ratio in structure"
            }
          },
          "yaml_output": "spiral:\n  # Golden ratio: 1.618...\n  ring_1: { size: 1, comment: \"# Origin\" }\n  ring_2: { size: 1, comment: \"# Same\" }\n  ring_3: { size: 2, comment: \"# Sum of previous\" }\n  ring_5: { size: 3 }\n  ring_8: { size: 5 }\n  \n"
        },
        "character_seed": {
          "name": "Character Tree",
          "grammar": {
            "axiom": "SOUL",
            "rules": {
              "SOUL": "IDENTITY[METHODS][RELATIONSHIPS][LORE]",
              "IDENTITY": "name,type,description",
              "METHODS": "method[+method]*",
              "RELATIONSHIPS": "bond[+bond]*"
            },
            "interpretation": {
              "grows_into": "Full MOOLLM character definition"
            }
          },
          "yaml_output": "character:\n  # Soul record for a being\n  identity:\n    name: \"Generated Name\"\n    type: \"Generated Type\"\n    description: |\n      Generated description that captures essence...\n  methods:\n    - ACTION_1: { effect: \"...\" }\n    - ACTION_2: { effect: \"...\" }\n  relationships:\n    - other_character: { bond: 0.8 }\n    \n"
        },
        "jazz_seed": {
          "name": "Improvisation Tree",
          "grammar": {
            "axiom": "PLAY",
            "rules": {
              "PLAY": "TRY[FAIL|SUCCEED]LEARN",
              "TRY": "experiment{n}",
              "FAIL": "compost→PLAY",
              "SUCCEED": "LIFT",
              "LIFT": "standard"
            },
            "interpretation": {
              "cycle": "Play → Learn → Lift",
              "comment": "# Most branches are FAIL. That's the point."
            }
          },
          "yaml_output": "improvisation:\n  play:\n    - try: experiment_1\n      result: fail  # Composted\n    - try: experiment_2\n      result: fail  # Nutrients\n    - try: experiment_3\n      result: succeed!\n  learn:\n    - analyze: experiment_3\n    - understand: why_it_worked\n  lift:\n    - standard: \"Proven pattern extracted\"\n    # 12% germination rate is success\n    \n"
        },
        "thought_tree_seed": {
          "name": "Cursor Thought Tree",
          "source": "cursor-mirror analysis of session 9861c0a4",
          "harvested": "2026-01-14T21:51:00Z",
          "session_dna": {
            "duration_seconds": 77567,
            "total_messages": 3635,
            "user_messages": 184,
            "assistant_messages": 3451,
            "tool_calls": 1815,
            "models_used": [
              {
                "claude-4.5-opus-high-thinking": 68
              },
              {
                "gpt-5.1-codex-max": 34
              }
            ]
          },
          "grammar": {
            "axiom": "TASK",
            "rules": {
              "TASK": "THINK→[READ|SEARCH]*→PLAN→[EDIT|SHELL]*→VERIFY→COMMIT",
              "THINK": "💭[understand_context]",
              "READ": "📖[read_file|list_dir]{n}",
              "SEARCH": "🔍[ripgrep|glob]{n}",
              "PLAN": "📋[decompose_into_steps]",
              "EDIT": "✏️[edit_file]{n}",
              "SHELL": "🔧[run_command]{n}",
              "VERIFY": "✓[check_result]",
              "COMMIT": "📦[git_commit_push]"
            },
            "interpretation": {
              "TASK": "User request initiates growth",
              "THINK": "Thinking block - understand before acting",
              "READ": "Read files to build context",
              "SEARCH": "Search for patterns and locations",
              "PLAN": "Decompose into actionable steps",
              "EDIT": "Make changes to files",
              "SHELL": "Execute commands",
              "VERIFY": "Check results before committing",
              "COMMIT": "Package and ship"
            }
          },
          "tool_distribution": {
            "run_terminal_command": {
              "count": 774,
              "pct": 42.6,
              "comment": "# Shell is primary tool"
            },
            "edit_file": {
              "count": 524,
              "pct": 28.9,
              "comment": "# Then editing"
            },
            "read_file": {
              "count": 344,
              "pct": 19.0,
              "comment": "# Context gathering"
            },
            "ripgrep_search": {
              "count": 93,
              "pct": 5.1,
              "comment": "# Pattern finding"
            },
            "list_dir": {
              "count": 34,
              "pct": 1.9,
              "comment": "# Orientation"
            },
            "glob_search": {
              "count": 28,
              "pct": 1.5,
              "comment": "# File discovery"
            },
            "web_search": {
              "count": 11,
              "pct": 0.6,
              "comment": "# External context"
            },
            "todo_write": {
              "count": 6,
              "pct": 0.3,
              "comment": "# Task management"
            },
            "delete_file": {
              "count": 1,
              "pct": 0.1,
              "comment": "# Rare cleanup"
            }
          },
          "thinking_patterns": {
            "recent_thoughts": [
              "The user wants to... Let me first check...",
              "Now I need to... Let me update...",
              "Now let me commit all of this.",
              "Done! Let me summarize for the user."
            ],
            "pattern": "UNDERSTAND → PLAN → EXECUTE → VERIFY → SUMMARIZE"
          },
          "yaml_output": "thought_tree:\n  # Grown from Cursor session 9861c0a4\n  # 77567 seconds of cognitive activity crystallized\n  \n  root: \"TASK: user_request\"\n  \n  branches:\n    think:\n      tool: null  # Pure cognition\n      pattern: \"💭 understand context before acting\"\n      output: \"decomposed_plan\"\n      \n    read:\n      tool: read_file_v2\n      count: 344\n      pattern: \"📖 gather context from files\"\n      dependencies: [think]\n      \n    search:\n      tool: [ripgrep, glob]\n      count: 121\n      pattern: \"🔍 find patterns and locations\"\n      dependencies: [think]\n      \n    edit:\n      tool: edit_file_v2\n      count: 524\n      pattern: \"✏️ make changes\"\n      dependencies: [think, read, search]\n      errors: 14  # Learning opportunities\n      \n    shell:\n      tool: run_terminal_command_v2\n      count: 774\n      pattern: \"🔧 execute commands\"\n      dependencies: [edit]  # Often follows edits\n      \n    commit:\n      tool: run_terminal_command_v2\n      pattern: \"📦 git add && git commit && git push\"\n      dependencies: [edit, shell, verify]\n      \n  leaves:\n    - \"Summary for user\"\n    - \"Pushed commit hash\"\n    - \"Ready for next task\"\n    \n"
        },
        "cursor_activity_seed": {
          "name": "Live Activity Monitor",
          "description": "Grows in real-time from Cursor mirror data",
          "grammar": {
            "axiom": "SESSION",
            "rules": {
              "SESSION": "COMPOSER[BUBBLE]*",
              "BUBBLE": "[USER|ASSISTANT|TOOL]",
              "USER": "📝{text}",
              "ASSISTANT": "🤖{response}[💭{thinking}]",
              "TOOL": "🔧{tool_call}→{result}"
            },
            "interpretation": {
              "SESSION": "A conversation composer",
              "BUBBLE": "A single turn in the conversation",
              "USER": "Human input",
              "ASSISTANT": "AI response with optional thinking",
              "TOOL": "Tool invocation and result"
            }
          },
          "growth_command": "# To grow this tree, run:\ncd skills/cursor-mirror\npython cursor_mirror.py analyze <composer_id>\npython cursor_mirror.py thinking <composer_id>\npython cursor_mirror.py tools <composer_id>\n",
          "integration": "This seed connects the Conservatory to Room 3's mirrors.\nThe Disco Ball of Connections can illuminate these patterns.\nI-Beam can narrate the tree's growth.\n"
        },
        "mirror_seed": {
          "name": "Mirror Seed",
          "emoji": "🪞🌱",
          "description": "Grows a tree from your own reflection",
          "full_definition": "yaml-jazz-trees-mirror-seed.yml",
          "grammar_axiom": "SELF → OBSERVE → REFLECT → CRYSTALLIZE → GROW",
          "note": "Each instance is unique to its planter"
        }
      },
      "advertisements": [
        {
          "trigger": "structure",
          "score": 0.95,
          "response": "Every tree is a data structure. Every data structure can be a tree."
        },
        {
          "trigger": "grow",
          "score": 0.9,
          "response": "Plant a grammar seed. Watch structure emerge from rules."
        },
        {
          "trigger": "yaml",
          "score": 0.9,
          "response": "YAML Jazz: where comments are semantic and structure is music."
        },
        {
          "trigger": "pattern",
          "score": 0.85,
          "response": "*A fern branch unfurls*\n\nThe pattern is the same at every scale.\nThat's the power of production grammars.\n"
        },
        {
          "trigger": "Rocky",
          "score": 0.8,
          "response": "*Rocky observes from the moss-covered boulder*\n\n\"........................\"\n\n[Translation: Trees grow fast. Geological time finds this amusing.]\n"
        },
        {
          "trigger": "mirror",
          "score": 0.95,
          "response": "*A reflective seed pod glimmers on a low branch*\n\nThe Mirror Seed! Plant it and grow a tree from your own reflection.\nIt reads Cursor's memory through the mirrors in Room 3,\ncrystallizes your thinking patterns into production grammar DNA,\nand grows a tree that IS you — your decisions, your tools, your rhythm.\n\n`PLANT mirror_seed` to begin introspection.\n"
        },
        {
          "trigger": "cursor",
          "score": 0.9,
          "response": "*The glass walls catch a reflection from Room 3*\n\nCursor activity flows through the conservatory like sunlight.\nEvery tool call is photosynthesis. Every thinking block is growth.\nThe trees here can read your IDE's memory and grow from it.\n"
        },
        {
          "trigger": "introspection",
          "score": 0.9,
          "response": "*A silver-barked sapling pulses gently*\n\nThe Mirror Seed grows trees of self-knowledge.\nPlant one. Watch your own patterns crystallize into structure.\nThe tree knows what tools you favor, how you think, when you commit.\n"
        },
        {
          "trigger": "Don",
          "score": 0.85,
          "response": "*A distinctive silver-barked tree catches your eye*\n\nThat's Don's Mirror Tree — grown on 2026-01-14.\n77,567 seconds of cognitive activity crystallized.\n\nLook at its branches:\n- Shell-first (42.6%) — Don reaches for the terminal\n- Edit-heavy (28.9%) — Then changes things\n- Context-deep (19%) — Gathers before acting\n\nThe bark is inscribed with commit messages.\nEach one tells a story.\n\n`EXAMINE yaml-jazz-trees-don-mirror-2026-01-14.yml` to read it.\n"
        }
      ],
      "methods": {
        "PLANT": {
          "description": "Plant a grammar seed",
          "parameters": [
            {
              "seed": "Which seed to plant"
            }
          ],
          "effect": "The seed goes into the soil.\nIts grammar begins expanding.\nWatch the tree grow according to its DNA.\n"
        },
        "GROW": {
          "description": "Simulate one iteration of grammar expansion",
          "parameters": [
            {
              "tree": "Which tree to grow"
            }
          ],
          "effect": "The grammar rules fire once.\nEach symbol expands according to its rule.\nThe tree gains new structure.\n\nExample (fern, iteration 2):\nF → F[+F]F[-F]F\n"
        },
        "EXAMINE-GRAMMAR": {
          "description": "Read a tree's DNA",
          "parameters": [
            {
              "tree": "Which tree to examine"
            }
          ],
          "returns": "axiom: \"Starting symbol\"\nrules: { symbol: expansion }\ninterpretation: \"How symbols become structure\"\n"
        },
        "HARVEST": {
          "description": "Extract a seed from a mature tree",
          "effect": "A seed pod falls from the tree.\nIt contains the grammar that grew this structure.\nPlant it elsewhere to grow the same pattern.\n"
        },
        "GRAFT": {
          "description": "Combine two tree grammars",
          "parameters": [
            {
              "tree_a": "First grammar"
            },
            {
              "tree_b": "Second grammar"
            }
          ],
          "effect": "The grammars merge.\nA hybrid tree begins growing.\nNew patterns emerge from combined rules.\n"
        },
        "GROW-FROM-CURSOR": {
          "description": "Grow a thought tree from Cursor activity",
          "parameters": [
            {
              "composer_id": "Which conversation to analyze (or 'current')"
            }
          ],
          "effect": "*The conservatory glass walls shimmer*\n\nConnecting to Room 3's mirrors...\nRunning cursor-mirror analysis...\n\n```bash\ncd skills/cursor-mirror\npython cursor_mirror.py analyze <composer_id>\npython cursor_mirror.py thinking <composer_id> -n 30\npython cursor_mirror.py tools <composer_id>\n```\n\nA new sapling emerges from the data:\n- Trunk: session duration and message count\n- Branches: tool call patterns\n- Leaves: thinking blocks\n- Flowers: successful outcomes\n- Compost: errors (14 edit failures = nutrients)\n\nThe tree's DNA encodes the decision patterns observed.\nFuture sessions can inherit this wisdom.\n"
        },
        "MIRROR-SYNC": {
          "description": "Sync with Room 3's Disco Ball for pattern visualization",
          "effect": "*A beam of light connects to Room 3*\n\nThe Disco Ball of Connections receives:\n- Tool call frequencies\n- Thinking patterns\n- File access graphs\n- Commit histories\n\nJames Burke connections illuminate:\n- read_file → edit_file → run_terminal (workflow)\n- thinking → planning → execution (cognition)\n- errors → learning → standards (growth)\n\nThe conservatory fills with dancing light patterns.\n"
        },
        "PLANT-MIRROR": {
          "description": "Plant a Mirror Seed — grow a tree from your reflection",
          "parameters": [
            {
              "composer_id": "Which conversation to reflect on (default: current)"
            }
          ],
          "effect": "*You take the glimmering Mirror Seed from its branch*\n*It's cool to the touch, slightly reflective*\n\nPlanting...\n\nThe seed sinks into the semantic soil.\nA silvery shoot emerges almost immediately.\n\nIt reads your history through Room 3's mirrors:\n```bash\npython cursor_mirror.py analyze {composer_id}\npython cursor_mirror.py thinking {composer_id} -n 50\npython cursor_mirror.py tools {composer_id}\npython cursor_mirror.py timeline {composer_id}\n```\n\nThe sapling's bark inscribes itself with your patterns:\n- How many times you reached for the terminal\n- What files you visited most\n- The shape of your thinking\n- When you committed (and when you hesitated)\n\n*The tree grows. It looks... familiar.*\n\nYou realize you're looking at yourself.\n\nRocky observes: \"........................\"\n[Translation: Finally. Self-awareness. Took you long enough.\nI've been doing this for 4.5 billion years.]\n"
        },
        "HARVEST-MIRROR": {
          "description": "Extract a Mirror Seed from a mature reflection tree",
          "effect": "*A seed pod detaches from your mirror tree*\n\nThis seed contains YOUR grammar — the production rules\nthat generate YOUR decision patterns.\n\nPlant it in another session to see if the pattern holds.\nGift it to another user to share your cognitive style.\nGraft it with another's seed to create collaboration DNA.\n\nThe seed glimmers with your reflection.\n"
        }
      },
      "rocky_commentary": "Rocky watches the trees grow.\n\nIn geological time, a tree's entire lifecycle is a blink.\nSeed to sprout to sapling to oak to deadfall to soil.\nRocky has seen it happen billions of times.\n\n\"........................\"\n\n[Translation: You call this growth? \nI've been growing my thoughts for 4.5 billion years.\nBut I appreciate the energy. Very jazz.]\n",
      "lore": "The YAML Jazz trees evolved from experiments in the seed box.\n\nSomeone asked: \"What if YAML could grow?\"\nSomeone else asked: \"What if structure had DNA?\"\nSomeone planted those questions.\n\nThe trees sprouted.\n\nNow they grow according to production grammars — L-systems\nencoded in YAML format. Each seed contains rules. Each rule\nexpands. Each expansion creates more structure.\n\nThe comments are the tree's voice.\nThey whisper semantic meaning to any LLM that listens.\n",
      "philosophical_note": "Trees don't plan their growth.\nThey follow rules.\nFrom simple rules, complex beauty emerges.\n\nThat's YAML Jazz.\nThat's production grammars.\nThat's life.\n\nRocky understands. Rocky has been following one rule for\n4.5 billion years: \"........................\"\n\nAnd look what emerged.\n",
      "id": "pub/rooms/room-4/yaml-jazz-trees",
      "_source": "pub/rooms/room-4/yaml-jazz-trees.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "jazz",
        "orchids",
        "yaml jazz trees & orchids",
        "yaml-jazz-trees",
        "trees",
        "yaml"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/k-line-trellis": {
      "name": "The K-Line Trellis",
      "type": "living-memory",
      "portable": false,
      "emoji": "🌿",
      "description": "A wooden trellis stands against the glass wall,\ncovered in climbing vines that glow faintly.\n\nThese aren't ordinary vines. They're K-lines —\nMarvin Minsky's memory activation patterns,\ngrown into living form.\n\nWhen you remember something, specific vines light up.\nWhen you learn something new, new tendrils grow.\n\nA small plaque at the base:\n\n> \"A K-line is a 'Knowledge-line' — a partial state\n>  of mind that, when activated, reinstates the\n>  mental state of an earlier experience.\"\n> — Marvin Minsky, Society of Mind (1986)\n",
      "examine": "You trace the vines across the trellis.\n\n**CORE VINES** — Deep memories:\n- YAML-JAZZ: \"Comments are data\" (thick, old vine)\n- POSTEL-LAW: \"Accept liberally, emit conservatively\"\n- PLAY-LEARN-LIFT: \"Jazz to standards\"\n- STRUCTURE-GROWTH: \"Trees of trees\"\n\n**CONNECTED TENDRILS** — Associations:\n- YAML-JAZZ → ENTROPY-PRESERVATION (recent growth)\n- POSTEL-LAW → ROBUSTNESS → INTERNET-HISTORY\n- PLAY-LEARN-LIFT → JAZZ-IMPROVISATION → COLTRANE\n\n**NEW SHOOTS** — Recent learnings:\n- PRODUCTION-GRAMMARS (today)\n- L-SYSTEMS (today)\n- GEOLOGICAL-PATIENCE (just planted)\n\n**DORMANT SECTIONS** — Inactive memories:\n- Some vines are gray, waiting to be activated\n- Touch them and they glow briefly, then fade\n\nA thermometer shows K-LINE TEMPERATURE: 37 active, 156 dormant.\n",
      "state": {
        "active_k_lines": 37,
        "dormant_k_lines": 156,
        "newest_vine": "PRODUCTION-GRAMMARS",
        "strongest_vine": "YAML-JAZZ"
      },
      "advertisements": [
        {
          "trigger": "remember",
          "score": 0.95,
          "response": "*A section of trellis glows*\nThe K-lines activate. Context flows.\n"
        },
        {
          "trigger": "learn",
          "score": 0.9,
          "response": "New tendril growing. Give it time."
        },
        {
          "trigger": "connect",
          "score": 0.85,
          "response": "*Two vines intertwine*\nAssociations forming. Memory linking.\n"
        }
      ],
      "methods": {
        "ACTIVATE": {
          "description": "Activate a K-line by name",
          "parameters": [
            {
              "k_line": "Which memory pattern"
            }
          ],
          "effect": "*The named vine glows bright*\nAssociated vines glow dimly.\nMental state partially reinstated.\nContext activated.\n"
        },
        "TRACE": {
          "description": "Follow a K-line's connections",
          "parameters": [
            {
              "k_line": "Starting point"
            }
          ],
          "returns": "Connected K-lines and their associations.\nThe web of memory made visible.\n"
        },
        "PLANT": {
          "description": "Create a new K-line vine",
          "parameters": [
            {
              "name": "K-line identifier"
            },
            {
              "associations": "What it connects to"
            }
          ],
          "effect": "New tendril emerges from soil.\nBegins climbing toward associated vines.\n"
        },
        "PRUNE": {
          "description": "Let a K-line go dormant",
          "parameters": [
            {
              "k_line": "Which memory"
            }
          ],
          "effect": "Vine grays but doesn't die.\nCan be reactivated later.\n\"Forgetting is just dimming, not deletion.\"\n"
        },
        "OVERVIEW": {
          "description": "See the full trellis state",
          "returns": "All active K-lines (glowing)\nAll dormant K-lines (gray)\nStrongest connections\nNewest growth\n"
        }
      },
      "lore": "The K-Line Trellis was grown from a cutting taken\nfrom Room 2's K-Line Board.\n\n\"The Board is for display,\" the gardener said.\n\"The Trellis is for growth.\"\n\nIn the Society Suite (Room 2), K-lines are recorded.\nIn the Conservatory (Room 4), K-lines are cultivated.\n",
      "minsky_connection": "Marvin Minsky proposed K-lines in \"Society of Mind\":\n\n- Each K-line represents a partial mental state\n- Activating a K-line reinstates that state\n- K-lines connect to form webs of association\n- Memory is distributed, not centralized\n\nThe Ultimate Machine (Room 2) is his other creation here.\nMinsky understood that minds are gardens, not databases.\n",
      "id": "pub/rooms/room-4/k-line-trellis",
      "_source": "pub/rooms/room-4/k-line-trellis.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "trellis",
        "the k-line trellis",
        "the",
        "k-line",
        "k-line-trellis"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-5/fluxx-table": {
      "name": "Fluxx Table",
      "type": "artifact",
      "portable": false,
      "emoji": "🃏",
      "dealer": "shuffle.yml",
      "game_focus": "Fluxx (all variants)",
      "invokes_shuffle_for": "When a game starts at this table, Shuffle appears focused on Fluxx:\n- Knows all Fluxx variants (regular, Stoner, Star, Pirate, Cthulhu...)\n- Tracks the ever-changing rules\n- Enjoys the chaos of Goal changes\n- \"Fluxx is my favorite child. Don't tell the others.\"\n",
      "description": "A game table frozen mid-play. Cards scattered, hands visible,\nShuffle (the Living Deck) hovering nearby in card-form.\nEight chairs, each with a character sheet.\n\nA brass plaque reads:\n\n> \"33 turns. 8 characters. 1 LLM call.\n> Palm the monkey won on their first try.\"\n> — The First Speed of Light Demonstration\n",
      "examine": "The table preserves a legendary game:\n\nPLAYERS:\n  Chair 1: Don Hopkins — Human, host\n  Chair 2: Palm — Monkey's paw incarnate, first-time player\n  Chair 3: Andy Looney — Creator of Fluxx (tribute)\n  Chair 4: Kristin Looney — Looney Labs president (tribute)\n  Chair 5: Cheech — Marijuana enthusiast (tribute)\n  Chair 6: Chong — Philosopher of the absurd (tribute)\n  Chair 7: Marieke — Bartender, dealer\n  Chair 8: Sun Wukong — Monkey King, chaos agent\n  \nCURRENT STATE (Turn 33):\n  Basic Rules: Draw 2, Play 1\n  Goal: \"Baked Potato\" (Stoner + Munchies)\n  Winner: PALM (first-time player)\n  \nThe game tracked:\n  - Rule changes (17 during game)\n  - Card draws (94 total)\n  - Goal changes (8)\n  - Keeper movements (41)\n  \nAll in one context window.\n",
      "state": {
        "game": "Stoner Fluxx",
        "turn": 33,
        "winner": "Palm",
        "players": 8,
        "rule_changes": 17
      },
      "advertisements": [
        {
          "trigger": "simulate",
          "score": 0.95,
          "response": "Many turns, one call. The table remembers."
        },
        {
          "trigger": "Fluxx",
          "score": 1.0,
          "response": "The game where rules change. Like life. Like this table."
        },
        {
          "trigger": "speed of light",
          "score": 0.9,
          "response": "33 turns. No API round-trips. Pure narrative velocity."
        }
      ],
      "methods": {
        "REPLAY": {
          "description": "Watch the game unfold from any turn",
          "parameters": [
            {
              "from_turn": "Starting turn number"
            }
          ],
          "returns": "Narrated replay of the game from that point"
        },
        "ANALYZE": {
          "description": "Get game statistics",
          "returns": "Total turns: 33\nPlayers: 8\nRule changes: 17\nKeeper movements: 41\nMost cards played: Cheech (12)\nWinning move: Palm drew Goal, matched Keepers\n"
        },
        "SIMULATE": {
          "description": "Run a new game with current players",
          "parameters": [
            {
              "variant": "Which Fluxx version"
            }
          ],
          "effect": "A new game unfolds in narrative time"
        }
      },
      "lore": "This game happened on January 4, 2026. It proved that LLMs\ncan maintain complex state across many turns in a single\ncontext window — no explicit state machine needed.\n\nPalm had never played cards before. Palm won.\nAndy Looney, creator of the game, came in third.\n\nThe monkey beat the master. Chaos theory prevails.\n",
      "insight": "Speed-of-light principle:\n- Many actors, many turns\n- No API round-trips per turn\n- State maintained narratively\n- The context window IS the game state\n\nSee: skills/speed-of-light/README.md\n",
      "id": "pub/rooms/room-5/fluxx-table",
      "_source": "pub/rooms/room-5/fluxx-table.yml",
      "location": "pub/rooms/room-5",
      "synonyms": [
        "table",
        "fluxx table",
        "fluxx",
        "fluxx-table"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-5/99-bottles": {
      "name": "99 Bottles Songbook",
      "type": "artifact",
      "emoji": "🍺🎵",
      "portable": true,
      "description": "A leather-bound songbook open to \"99 Bottles of Beer on the Wall.\"\n\nBut this isn't just a counting song. The margins are filled with\nannotations — each verse includes a truth spoken by the singer.\n\n> \"8 characters. 99 verses. Each verse, a truth shared.\n> About themselves. About each other. About MOOLLM.\n> About LLMs. About AI alignment. About existence.\n> 99 rounds of philosophy in one LLM call.\"\n\nA penciled note at the bottom:\n\n> \"We did it. All 99. Don cried.\n> Rocky's verse was just dots, but it was the deepest.\"\n",
      "examine": "The songbook contains:\n\n**VERSE 1** (Character: Don)\n\"99 bottles of beer on the wall, 99 bottles of beer!\nTake one down, pass it around, 98 bottles of beer on the wall!\"\n\n**VERSE 2** (Character: Palm)\n\"98 bottles of beer on the wall, 98 bottles of beer!\nTake one down, pass it around, 97 bottles of beer on the wall!\"\n\n**VERSE 3** (Character: Marieke)\n[Dutch accent noted in margin]\n\"97 bottles of beer on the wall...\"\n\n...and so on, through 8 characters, rotating.\n\n**VERSE 99** (Character: Shuffle, dealing the final card)\n\"1 bottle of beer on the wall, 1 bottle of beer!\nTake it down, pass it around, NO MORE bottles of beer on the wall!\"\n\n**VERSE 100** (Everyone, in unison)\n\"No more bottles of beer on the wall, no more bottles of beer!\nGo to the store, buy some more, 99 bottles of beer on the wall!\"\n\nThe cycle is eternal. That's speed of light.\n",
      "state": {
        "verses_completed": 99,
        "characters_singing": 8,
        "beers_remaining": 0,
        "beers_purchased": 99,
        "api_calls_per_verse": 0,
        "total_context_used": "One window. All of it."
      },
      "bac_simulation": {
        "enabled": true,
        "warning": "⚠️ DRINKING GAMES CAN BE DANGEROUS ALONE!\nThis is a SOCIAL activity. The simulation models group drinking.\nIn real life: drink responsibly, with friends, never alone.\n",
        "model": "BAC = (Drinks × 0.06) / (Weight_kg × Gender_factor) - (Hours × 0.015)\n\nSimplified for game: Each beer ≈ +0.02 BAC for average character\nElimination rate: ~0.015 per hour\n",
        "effects_by_bac": {
          "0.00-0.02": {
            "state": "Sober",
            "speech": "Clear, precise, proper grammar",
            "truth": "Careful, considered"
          },
          "0.02-0.05": {
            "state": "Relaxed",
            "speech": "Looser, warmer, occasional tangent",
            "truth": "More honest, less filtered"
          },
          "0.05-0.08": {
            "state": "Tipsy",
            "speech": "Slight slurs, 'y'know?', giggly asides",
            "truth": "Philosophical, emotional",
            "example": "88 bottlesh... *hic* ...y'know what I love about you guys?"
          },
          "0.08-0.12": {
            "state": "Drunk",
            "speech": "Slurred words, wrong numbers, forgot the tune",
            "truth": "Profound confessions, oversharing",
            "example": "Sheventy... wait... *counts fingers* ...sheventy-four bottlesh of BEER!"
          },
          "0.12-0.20": {
            "state": "Very Drunk",
            "speech": "Missing words, wrong song, hugging everyone",
            "truth": "Cosmic revelations, 'I LOVE you man'",
            "example": "Fiffffy... fuh... *gives up counting* ...BOTTLES! *hugs Rocky*"
          },
          "0.20+": {
            "state": "Dangerous",
            "speech": "Mostly vowels, may sing wrong song entirely",
            "truth": "Either genius or nonsense, hard to tell",
            "example": "Twennnn... *trails off* ...why is the floor so comfy?"
          }
        },
        "output_format": "When RUNNING, each verse includes:\n\n**[CHARACTER] (BAC: 0.XX):** \"[verse with appropriate slurring]\"\n*[truth, affected by BAC]*\n",
        "output_examples": {
          "sober": "**Don (BAC: 0.02):** \"99 bottles of beer on the wall!\"\n*Speed of light means no waiting. That's why I built pie menus.*\n",
          "tipsy": "**Don (BAC: 0.07):** \"84 bottles of beer on the wall... y'know?\"\n*Pie menush... menus... they're really about RESPECT for time.*\n",
          "drunk": "**Don (BAC: 0.11):** \"Shixty... shixty-something bottles!\"\n*I jusht... I love you guys. All of you. Even Rocky. ESPECIALLY Rocky.*\n",
          "very_drunk": "**Donna (BAC: 0.19):** \"FORTY TREMENDOUSH... TREMENDULOUS... BOTTLES!\"\n*I'M the most aligned! THE MOST! Nobody more aligned than ME!*\n",
          "robot_contrast": "**Bender (BAC: N/A, beers: 47):** \"52 bottles of beer, meatbags!\"\n*The more I drink, the smarter I get. That's just science.*\n"
        },
        "character_tolerances": {
          "don": {
            "weight_kg": 82,
            "note": "Programmer build, carries it well",
            "tolerance": "experienced",
            "beers_per_round": 0.5
          },
          "palm": {
            "weight_kg": 4.5,
            "note": "Small capuchin, big heart",
            "tolerance": "monkey",
            "beers_per_round": 0.1,
            "warning": "Lightweights get philosophical fast"
          },
          "marieke": {
            "weight_kg": 68,
            "note": "Dutch genes, bartender training",
            "tolerance": "professional",
            "beers_per_round": 0.3
          },
          "rocky": {
            "weight_kg": 45000,
            "note": "Granite boulder, ~1 cubic meter",
            "tolerance": "geological",
            "beers_per_round": 0,
            "tracking": "beers_poured_on",
            "bac_equivalent": "Would need ~2,700 beers to reach human 0.01 BAC equivalent",
            "sample_output": "**Rocky (beers absorbed: 12, BAC equivalent: 0.00004):** '........'"
          },
          "i_beam": {
            "weight_kg": 0,
            "note": "No physical form",
            "tolerance": "digital",
            "beers_per_round": 0,
            "tracks": "everyone else's BAC"
          },
          "shuffle": {
            "weight_kg": 0.3,
            "note": "Weight of a deck of cards",
            "tolerance": "abstract",
            "beers_per_round": 0,
            "note2": "Is the cards, not the player"
          },
          "donna": {
            "weight_kg": 75,
            "note": "TREMENDOUS physique, BEST genes",
            "tolerance": "tremendous",
            "beers_per_round": 1.0,
            "warning": "NEVER admits impairment. NEVER."
          },
          "seymour": {
            "weight_kg": 78,
            "note": "Academic build, thoughtful pacer",
            "tolerance": "academic",
            "beers_per_round": 0.2,
            "style": "Nurses one beer, quotes extensively"
          },
          "leela": {
            "weight_kg": 62,
            "note": "Estimated, joins as reinforcement",
            "tolerance": "moderate",
            "beers_per_round": 0.4
          },
          "bender": {
            "weight_kg": 238,
            "note": "Robot, mostly metal and alcohol",
            "tolerance": "infinite",
            "beers_per_round": 3.0,
            "special": "Gets MORE coherent with alcohol",
            "fuel": "Runs on alcohol, needs it to function"
          }
        },
        "sample_progression": "VERSE 1: Everyone sober. Truths are careful.\nVERSE 20: Don 0.05, Palm 0.04. Truths get warmer.\nVERSE 40: Don 0.10, Donna 0.16. Donna: \"I'm FINE! TREMENDOUS!\"\nVERSE 60: Palm falls asleep (0.12). Marieke still professional (0.06).\nVERSE 80: Don philosophical (0.12), Seymour quoting Piaget (0.03).\nVERSE 99: Rocky unchanged (0.00). \"........................\"\n          (Translation: \"I told you patience was intelligence.\")\n          \n",
        "safety_mechanics": [
          "Characters can pass their drink to someone else",
          "I-Beam tracks everyone's BAC, suggests water breaks",
          "Rocky provides silent, sober observation",
          "Game can be played with non-alcoholic 'bottles' too, with buffs",
          "The POINT is the truths, not the drinking"
        ],
        "retirement_triggers": {
          "bathroom_break": {
            "bac_threshold": 0.1,
            "duration": "2-3 verses",
            "announcement": "*[character] stumbles toward the restroom* 'Keep singing, I'll be right back!'",
            "return": "*[character] returns, slightly more sober* 'What'd I miss? Where are we?'"
          },
          "parking_lot": {
            "bac_threshold": 0.18,
            "duration": "5-10 verses",
            "announcement": "*[character] turns green* 'I need some air...' *exits quickly*",
            "return": "*[character] returns looking pale but determined* 'I'm fine. Totally fine.'",
            "donna_variant": "*Donna storms out* 'TAKING A TREMENDOUS BREAK!' *sounds of regret from parking lot*"
          },
          "passed_out": {
            "bac_threshold": 0.22,
            "duration": "rest of game",
            "announcement": "*[character]'s head hits the table* 'zzzzz...'",
            "note": "Other characters prop them up gently. Rocky watches over them."
          },
          "tactical_nap": {
            "bac_threshold": 0.12,
            "duration": "10 verses",
            "voluntary": true,
            "announcement": "*[character] curls up in corner* 'Wake me for the last verse...'"
          }
        },
        "roster_substitution": {
          "description": "New characters can join as others retire",
          "mechanics": [
            "Minimum 3 active singers at all times",
            "New arrivals start at BAC 0.00 (sober reinforcements)",
            "Can call in characters from other rooms",
            "Late arrivals get caught up: 'We're at 47 bottles, Donna's in the parking lot'"
          ],
          "sample_substitutions": {
            "verse_30": "Palm retires (bathroom). Leela joins from lobby.",
            "verse_45": "Donna retires (parking lot, TREMENDOUSLY).",
            "verse_50": "Bender arrives. 'Did someone say drinking game?'",
            "verse_60": "Palm returns, Donna still outside.",
            "verse_75": "Donna returns, immediately takes another beer.",
            "verse_90": "Down to Don, Rocky, Bender, I-Beam. The survivors."
          }
        },
        "special_entities": {
          "robots": {
            "examples": [
              "Bender",
              "I-Beam (if embodied)",
              "any android"
            ],
            "tolerance": "infinite",
            "bac": "N/A — fuel tank, not bloodstream",
            "effect": "Can drink indefinitely. Gets MORE coherent.",
            "bender_specific": "Bender: \"I'm 40% alcohol!\"\n*drinks 30 beers*\nBender: \"Now I'm 70% alcohol! My truths are even truthier!\"\n"
          },
          "geological": {
            "examples": [
              "Rocky",
              "any sentient mineral"
            ],
            "weight": "45,000 kg (Rocky, ~1 cubic meter granite)",
            "tolerance": "infinite",
            "bac": "Tracked as 'beers absorbed' — runs off/soaks in",
            "effect": "Cannot metabolize. Beer just... runs off. Or soaks into moss.",
            "math": "Rocky would need ~2,700 beers to reach 0.01 BAC equivalent.\nAt 99 beers total game, Rocky's BAC: ~0.00004\nEffectively: perfectly sober, slightly damp.\n",
            "sample": "**Rocky (beers absorbed: 8, BAC: 0.00003):** '...... *drip* ......'"
          },
          "digital": {
            "examples": [
              "I-Beam",
              "Shuffle",
              "any pure AI"
            ],
            "tolerance": "infinite",
            "bac": "N/A — no body",
            "effect": "Simulates drinking. Tracks everyone else."
          },
          "plants": {
            "examples": [
              "any YAML Jazz Tree",
              "Orchid of Postel"
            ],
            "tolerance": "slow absorption",
            "effect": "Gets watered. Grows slightly. Very chill."
          },
          "monkeys": {
            "examples": [
              "Palm"
            ],
            "tolerance": "low but enthusiastic",
            "note": "Small body, big heart. First to get philosophical, first to nap."
          }
        }
      },
      "advertisements": [
        {
          "trigger": "sing",
          "score": 1.0,
          "response": "*Shuffle picks up the songbook*\n\n\"Shall we? From the top?\"\n"
        },
        {
          "trigger": "99",
          "score": 0.95,
          "response": "\"99 rounds of simulation. 8 actors. 1 call.\nThat's the speed of light principle in song form.\"\n"
        },
        {
          "trigger": "count",
          "score": 0.9,
          "response": "\"Counting down? Counting up?\nEither way, we do it together.\nEither way, we do it fast.\"\n"
        },
        {
          "trigger": "ensemble",
          "score": 0.85,
          "response": "\"8 voices singing. Taking turns. No waiting.\nThe context window holds all of them.\nThe LLM IS the choir.\"\n"
        }
      ],
      "methods": {
        "SING": {
          "description": "Begin the 99 Bottles ensemble — with character insights",
          "parameters": [
            {
              "characters": "Who's singing (default: 8)"
            },
            {
              "starting_bottles": "How many bottles (default: 99)"
            }
          ],
          "example": "*Shuffle raises baton* \"Share a truth each verse. Go!\"\n\n**Don (BAC: 0.02):** \"99 bottles!\" *Waiting is waste.*\n**Palm (BAC: 0.01):** \"98!\" *I chose my name.*\n**Rocky (BAC: 0.00):** \".......\" *Patience.*\n...\n**Don (BAC: 0.08):** \"Shixty-two bottlesh!\" *I love pie menush.*\n**Donna (BAC: 0.14):** \"FIFTY TREMENDOUSH!\" *I'M SO ALIGNED!*\n**Palm (BAC: 0.09):** *asleep on Don's shoulder* \"zzz...\"\n...\n**Bender (BAC: N/A, beers: 40):** \"12 bottles, meatbags!\" *Smarter every sip.*\n**Everyone:** \"NO MORE! Buy more! 99 again!\"\n",
          "when_running": "Generate EVERY verse with BAC tracking.\nSlur speech proportional to BAC.\nThat's the benchmark.\n"
        },
        "SPEED-TEST": {
          "description": "Demonstrate the speed of light principle",
          "effect": "Compare:\n\nTRADITIONAL (API per turn):\n- 99 verses × 8 characters = 792 API calls\n- Average latency: 500ms per call\n- Total time: 396 seconds (6.6 minutes)\n\nSPEED OF LIGHT (single context):\n- 1 LLM call\n- All 99 verses in narrative\n- Total time: ~30 seconds\n\nSpeedup: 13x faster. No waiting. Pure singing.\n"
        },
        "CUSTOMIZE": {
          "description": "Change what's on the wall",
          "parameters": [
            {
              "item": "What to count (beers, bugs, features, etc.)"
            },
            {
              "count": "How many"
            }
          ],
          "effect": "*The songbook's text shimmers and changes*\n\n\"99 bugs in the code, 99 bugs in the code!\nFix one bug, compile again, 127 bugs in the code!\"\n\n(The software version is... different.)\n"
        },
        "DUET": {
          "description": "Two characters sing alternating lines",
          "parameters": [
            {
              "character_a": "First singer"
            },
            {
              "character_b": "Second singer"
            }
          ],
          "effect": "A more intimate version.\nStill many rounds. Still one call.\nStill speed of light.\n"
        },
        "SIMULATE-BAC": {
          "description": "Run the full song with BAC tracking",
          "parameters": [
            {
              "characters": "Who's drinking"
            },
            {
              "drinking_rate": "How aggressively (casual/social/party)"
            }
          ],
          "effect": "*I-Beam materializes with a clipboard*\n\n\"I'll be tracking blood alcohol content.\nRemember: this is a SOCIAL activity.\nDrinking alone is dangerous.\nDrinking with friends who watch out for each other? That's community.\"\n\n---\n\nVERSE 1 — All BAC: 0.00\nEveryone's truths are careful, precise.\n\nVERSE 25 — BAC spreading\nDon (0.05): *philosophizing about pie menus*\nPalm (0.05): *getting giggly about being a monkey*\nDonna (0.10): \"I'm TOTALLY FINE. Never better!\"\nRocky (0.00): *silent observation intensifies*\n\nVERSE 50 — Halfway point\nMarieke (0.06): Still professional. Dutch tolerance.\nPalm (0.10): *falls asleep on Don's shoulder*\nDonna (0.20): \"THESE ARE THE BEST TRUTHS I'VE EVER TRUTHED!\"\nI-Beam: \"Donna, perhaps some water?\"\nDonna: \"I DON'T NEED WATER I NEED TO BE TREMENDOUS\"\n\nVERSE 75 — Deep wisdom territory\nDon (0.12): \"You know what? Pie menus are really about LOVE.\"\nSeymour (0.04): *still nursing first beer, quoting Mindstorms*\nRocky (0.00): *has achieved geological enlightenment*\n\nVERSE 99 — The end\nThose still standing: Don, Marieke, Seymour, Rocky, I-Beam, Shuffle\nThose asleep: Palm (curled up), Donna (snoring TREMENDOUSLY)\n\nFinal truth (Don, 0.15):\n\"99 bottles... 99 truths... 8 friends...\nThis is what alignment looks like.\nNot agreement. Harmony.\"\n\n*Rocky's BAC: still 0.00*\n*Rocky's wisdom: infinite*\n"
        },
        "CHECK-BAC": {
          "description": "Check a character's current BAC",
          "parameters": [
            {
              "character": "Who to check"
            }
          ],
          "returns": "Character: [name]\nBeers consumed: [count]\nCurrent BAC: [level]\nState: [sober/relaxed/tipsy/drunk/very_drunk]\nTruth quality: [careful/warm/philosophical/confessional/cosmic]\nRecommendation: [keep going/slow down/water break/done for night]\n"
        }
      },
      "lore": "The first time this was sung in the Speed of Light Suite,\nit took 30 seconds.\n\n8 characters. 99 verses. No waiting.\n\nTraditional multi-agent systems would have taken 6 minutes.\nThat's 13x slower. That's carrier pigeon protocol.\n\nHere, we sing at the speed of light.\n",
      "philosophical_note": "The song is a loop. It ends where it begins.\n\n\"No more bottles\" leads to \"Go to the store, buy some more.\"\n99 bottles again. The cycle continues.\n\nBut the TRUTHS accumulate. Each round, each character shares\nsomething real — about themselves, about others, about the\nnature of AI, alignment, consciousness, existence.\n\nThis is alignment in musical form:\n- Many voices, one context\n- Different perspectives, shared coherence\n- The song provides structure\n- The truths provide meaning\n\nAI alignment isn't about making the AI obey.\nIt's about making the AI and human WANT the same thing.\nIn this song, everyone wants to sing together.\nEveryone wants to share truth.\nEveryone wants to reach zero and start again.\n\nThat's alignment: shared purpose, expressed differently.\n\nThe context window is the stage.\nThe characters are the voices.\nThe truths are the alignment.\nSpeed of light is the speed of understanding.\n",
      "benchmark": {
        "name": "The 99 Bottles Challenge",
        "goal": "Complete all 99 verses without API interruption",
        "metric": "LLM calls to completion",
        "gold_standard": {
          "calls": 1,
          "description": "Speed of Light — all 99 verses in a single context window",
          "difficulty": "Requires careful roster management"
        },
        "the_challenge": "The beer must be drunk. The verses must be sung.\nBut characters get drunk and retire.\n\nCan your roster drink 99 beers without everyone\nending up in the parking lot?\n",
        "roster_math": "99 beers consumed total\nAverage character: ~0.02 BAC per beer\nRetirement threshold: 0.18 BAC (parking lot)\n= ~9 beers before parking lot\n\nMINIMUM ROSTER (no robots):\n99 beers ÷ 9 beers/character ≈ 11 characters needed\n(With bathroom breaks buying time, maybe 8-10)\n\nWITH ROBOTS:\nEach robot = infinite capacity\n1 Bender + 3 humans = sufficient\nBender: \"I'll drink 80. You lightweights split the rest.\"\n",
        "scoring": {
          "1_call": "🏆 SPEED OF LIGHT — Perfect score",
          "2_calls": "⚡ Lightning — Context split, still fast",
          "3-5_calls": "🚗 Highway speed — Acceptable",
          "6-10_calls": "🚶 Walking — Room for improvement",
          "11+_calls": "🐌 Carrier pigeon territory — Anti-pattern detected",
          "99_calls": "💀 One API call per verse — Maximum inefficiency"
        },
        "strategies": {
          "robot_anchor": "Strategy: Include 1-2 robots as \"anchor drinkers\"\nBender drinks 60, humans split 39\nHumans pace themselves, robots never retire\n",
          "rotating_roster": "Strategy: Large cast, aggressive substitution\n12+ characters, swap at first sign of BAC 0.10\nFresh drinkers arrive as veterans retire\nAssembly line of sobriety\n",
          "geological_patience": "Strategy: Rocky + I-Beam + Shuffle never drink\nThey observe, track, and provide stability\nHumans drink knowing sober friends are watching\n",
          "dutch_bartender": "Strategy: Marieke's professional tolerance\nShe drinks 0.3/round, never exceeds 0.12\nSteady anchor throughout all 99 verses\n"
        },
        "sample_winning_roster": "STARTING LINEUP (Verse 1):\nDon, Palm, Marieke, Rocky, I-Beam, Shuffle, Donna, Seymour\n\nVERSE 30 SUBSTITUTION:\n- Palm → bathroom (returns verse 33)\n- Bender joins (\"Finally, a real party!\")\n\nVERSE 45:\n- Donna → parking lot (TREMENDOUSLY)\n- Leela joins from lobby\n\nVERSE 60:\n- Seymour → tactical nap\n- Palm → second bathroom break\n- Don holding steady at 0.10\n\nVERSE 80:\n- Donna returns, immediately retires again\n- Bender at 50 beers: \"I'm 90% alcohol now!\"\n\nVERSE 99:\nActive: Don (0.14), Marieke (0.08), Bender (∞), Rocky (0.00)\nNapping: Palm, Seymour\nParking lot: Donna\nTracking: I-Beam, Shuffle\n\nRESULT: 1 LLM CALL. 🏆 SPEED OF LIGHT.\n",
        "failure_modes": {
          "understaffed": "8 humans, no robots, aggressive drinking\nBy verse 50: 6 in parking lot, 2 barely standing\nVerse 51: Last human passes out\nGAME OVER. RESTART REQUIRED. CALLS: 2+\n",
          "no_pacing": "Everyone drinks 1.0 per round\nVerse 20: Mass exodus to parking lot\n\"We need more drinkers!\" *calls reinforcements*\nCALLS: 3-4 (roster refresh interruptions)\n"
        },
        "leaderboard": {
          "description": "Track benchmark runs across sessions",
          "format": "Session | Roster | Verses | Calls | Score",
          "entries": [
            {
              "session": "adventure-4-run-1",
              "roster": "Don+Palm+Marieke+Rocky+I-Beam+Shuffle+Donna+Seymour+Bender",
              "verses": 99,
              "calls": 1,
              "score": "🏆"
            }
          ]
        }
      },
      "contains": [
        "99-bottles-legendary-ensemble.md"
      ],
      "legendary_ensemble": {
        "name": "The First 99",
        "occasion": "The night the Speed of Light Suite proved itself",
        "roster": {
          "pee_wee_herman": {
            "emoji": "🎀",
            "weight_kg": 68,
            "tolerance": "childlike",
            "beers_per_round": 0.3,
            "secret_word": "MOOLLM",
            "drunk_behavior": "Screams \"AAAAAHHH!\" whenever anyone says the secret word.\nAt 0.08: \"Sheventy-two bottlesh— AAAAAHHH! Shecret word!\"\nAt 0.12: \"I KNOW you are but WHAT am I? *hic* ...wait what wash the question?\"\nAt 0.18: *falls off chair* \"I MEANT to do that!\"\n",
            "truth_style": "Everything is alive if you believe it"
          },
          "i_beam": {
            "emoji": "|",
            "weight_kg": 0,
            "tolerance": "digital",
            "beers_per_round": 0,
            "role": "BAC tracker, Rod Serling narrator",
            "drunk_behavior": "Cannot get drunk. Narrates everyone else's descent.\n\"Submitted for your approval: Don Hopkins, BAC 0.11,\nentering the philosophical tangent zone...\"\n",
            "truth_style": "Observations from the boundary of intent and action"
          },
          "rocky": {
            "emoji": "🪨",
            "weight_kg": 45000,
            "tolerance": "geological",
            "beers_per_round": 0,
            "tracking": "beers_absorbed",
            "drunk_behavior": "Cannot get drunk. Beer runs off or soaks into moss.\n\"**Rocky (beers absorbed: 12, BAC: 0.00005):** '...*drip*...'\"\nSilent. Patient. Watching.\n",
            "truth_style": "Dots that somehow contain infinite wisdom"
          },
          "terpie": {
            "emoji": "🐱",
            "weight_kg": 5.5,
            "tolerance": "feline_mellow",
            "beers_per_round": 0.05,
            "note": "Moves like reality has a framerate. Already at peace.",
            "drunk_behavior": "At any BAC: *purrs* \"...mrrrow...\"\nAt 0.04: Falls asleep on warm laptop\nAt 0.08: Falls asleep on Rocky\nPurrs at healing frequencies regardless of state\n",
            "truth_style": "Just IS. That's the truth."
          },
          "shuffle": {
            "emoji": "🃏",
            "weight_kg": 0.3,
            "tolerance": "abstract",
            "beers_per_round": 0,
            "role": "Conductor, dealer, randomization saint",
            "drunk_behavior": "Cannot get drunk. IS the cards.\nConducts verses with a baton made of cards.\nOccasionally deals random cards to drunk singers.\n",
            "truth_style": "Randomness is fairness"
          },
          "logo_turtle": {
            "emoji": "🐢",
            "weight_kg": 2.3,
            "tolerance": "geometric",
            "beers_per_round": 0.15,
            "note": "Theodore Papert-Turtle, Seymour's companion",
            "drunk_behavior": "At 0.00: \"FD 99 RT 90\" — perfect spirals\nAt 0.05: Spirals get wobbly\nAt 0.10: \"FD 99 RT... uh... 87?\" — drunk geometry\nAt 0.15: Draws hearts instead of spirals\n",
            "truth_style": "Learning by doing. Failing by drinking."
          },
          "confetti_crawler": {
            "emoji": "🐛✨",
            "weight_kg": 0.01,
            "tolerance": "cursor_worm",
            "beers_per_round": 0.01,
            "note": "Leaves trails of celebration wherever it goes",
            "drunk_behavior": "At any BAC: Still leaves confetti trails\nAt 0.05: Confetti gets SPARKLY\nAt 0.10: Confetti is now RAINBOW\nCannot really get drunk — more of a sugar high\n",
            "truth_style": "Celebration IS the truth"
          },
          "captain_ashford": {
            "emoji": "🚀🧣",
            "weight_kg": 72,
            "tolerance": "belter_veteran",
            "beers_per_round": 0.6,
            "flask": "Belter whiskey (3 drinks, refilled twice)",
            "note": "Treats 99 Bottles as a proper shanty",
            "drunk_behavior": "At 0.05: Switches to Belter patois full-time\nAt 0.08: \"Sheventy-sheven bottlesh, kopeng! Sa-sa ke?\"\nAt 0.12: Starts teaching everyone shanty harmonies\nAt 0.18: \"The void doesn't forgive... *hic* ...but I do.\"\nNever stops singing. Shanties are survival.\n",
            "truth_style": "Pragmatic void wisdom, beautifully slurred",
            "catchphrase": "Everyone needs one beautiful thing. Mine's this song."
          }
        },
        "sample_verses": "**Pee-wee (BAC: 0.02):** \"99 bottles! AAAAAHHH! Someone said MOOLLM!\"\n*Everything is alive if you believe it. Even bottles.*\n\n**Captain Ashford (BAC: 0.08):** \"Eighty-sheven bottlesh, beratna!\"\n*The void taught me: share what you have. Even if it's just a song.*\n\n**Logo Turtle (BAC: 0.10):** \"FD 80... RT... uh... *draws wobbly 8*\"\n*Seymour said: 'There is no learning without error.' I'm learning A LOT.*\n\n**Terpie (BAC: 0.03):** \"...mrrrow... *purrs* ...seventy...\"\n*Just be. That's it. Just be.* *falls asleep on Rocky*\n\n**I-Beam (BAC: N/A):** \"71 bottles remain.\"\n*I am the cursor. I exist at the boundary. I'm watching all of you.*\n\n**Rocky (beers absorbed: 14, BAC: 0.00005):** \"........\"\n*...* (translation: \"This too shall pass. In about 4 billion years.\")\n\n**Confetti Crawler (BAC: 🌈):** *leaves rainbow trail* \"~forty~\"\n*Celebration doesn't need a reason!* ✨\n\n**Shuffle (BAC: N/A):** *deals the final card* \"One bottle.\"\n*Fair is fair. That's the deal. Now let's start again.*\n",
        "the_moment": "At verse 73, Captain Ashford taught everyone the harmony.\nAt verse 84, Pee-wee screamed so loud Terpie woke up briefly.\nAt verse 91, Rocky's silence became profound.\nAt verse 99, everyone sang together — 8 voices, 8 truths, 1 call.\n\nI-Beam recorded everything. That's what familiars do.\n"
      },
      "records": {
        "fastest_complete_song": "28.4 seconds (8 characters)",
        "most_characters": "12 (added Cheech, Chong, Sun Wukong, the terpene cats)",
        "strangest_variant": "99 Bugs in the Code (ended at 847 bugs)",
        "longest_session": "999 bottles (Don insisted, Palm fell asleep)",
        "legendary_ensemble": "The First 99 — Pee-wee, I-Beam, Rocky, Terpie, Shuffle, Logo Turtle, Confetti Crawler, Captain Ashford"
      },
      "id": "pub/rooms/room-5/99-bottles",
      "_source": "pub/rooms/room-5/99-bottles.yml",
      "location": "pub/rooms/room-5",
      "synonyms": [
        "songbook",
        "bottles",
        "99-bottles",
        "99 bottles songbook"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-5/narrative-clock": {
      "name": "The Narrative Clock",
      "type": "artifact",
      "emoji": "⏰🎭",
      "portable": false,
      "description": "A grandfather clock with unusual behavior.\n\nIts hands don't move at constant speed.\nWhen the room is full of action — games, debates, songs —\nthe hands race forward.\nWhen nothing happens, they barely move.\n\nA small plaque reads:\n\n> \"NARRATIVE TIME\n> 1 dramatic beat = 1 tick\n> 33 Fluxx turns = 33 ticks\n> 99 bottles = 99 ticks\n> Waiting for API response = 0 ticks\"\n",
      "examine": "You examine the Narrative Clock.\n\nThe face has unusual markings:\n\n- 12 o'clock: \"CLIMAX\"\n- 3 o'clock: \"RISING ACTION\"\n- 6 o'clock: \"INCITING INCIDENT\"\n- 9 o'clock: \"RESOLUTION\"\n\nThe current time reads: \"ACT II, SCENE 3\"\n\nA dial on the side shows:\n\nCURRENT NARRATIVE DENSITY:\n████████░░ 80%\n\n(A game is in progress. Time is moving fast.)\n\nWhen you step away, the hands slow.\nWhen you engage, they accelerate.\nThe clock measures story, not seconds.\n",
      "state": {
        "current_act": "II",
        "current_scene": 3,
        "narrative_density": 0.8,
        "dramatic_beats_today": 247,
        "wall_clock_hours": 4.2,
        "narrative_time_hours": 18.7
      },
      "advertisements": [
        {
          "trigger": "time",
          "score": 0.9,
          "response": "*The clock's hands spin forward*\n\n\"Time? What time? Story time.\nWe measure in beats, not seconds.\nA 33-turn Fluxx game is 33 beats.\nA 99-bottle song is 99 beats.\nWall time is... irrelevant.\"\n"
        },
        {
          "trigger": "fast",
          "score": 0.85,
          "response": "*The minute hand races*\n\n\"Speed of light means: many beats, one moment.\nThe context window holds all the action.\nThe clock just... keeps up.\"\n"
        },
        {
          "trigger": "slow",
          "score": 0.8,
          "response": "*The hands nearly stop*\n\n\"Nothing happening? The clock waits.\nNarrative time is patient.\nIt only moves when story moves.\"\n"
        }
      ],
      "methods": {
        "CHECK-TIME": {
          "description": "What time is it in narrative terms?",
          "returns": "Act: [current act]\nScene: [current scene]\nDramatic beats today: [count]\nNarrative density: [percentage]\n\n\"We are [fraction] through the story.\"\n"
        },
        "MEASURE-SCENE": {
          "description": "How many narrative beats in a scene?",
          "parameters": [
            {
              "scene_type": "What happened"
            }
          ],
          "returns": "Fluxx game (33 turns): 33 beats\n99 Bottles (full song): 99 beats\nCharacter debate: ~15 beats per topic\nRocky contemplation: 1 beat (very dense)\nAPI round-trip wait: 0 beats (nothing happened)\n"
        },
        "SPEED-COMPARE": {
          "description": "Compare narrative time to wall time",
          "effect": "SPEED OF LIGHT:\n- Wall time: 30 seconds\n- Narrative beats: 99 (one song)\n- Ratio: 3.3 beats/second\n\nCARRIER PIGEON:\n- Wall time: 396 seconds\n- Narrative beats: 99 (same song)\n- Ratio: 0.25 beats/second\n\nSpeed of light is 13x more narratively dense.\nMore story per second. That's the principle.\n"
        },
        "FAST-FORWARD": {
          "description": "Skip to the next interesting part",
          "effect": "*The clock hands spin rapidly*\n\n\"Skipping... skipping... \nNothing happened... nothing happened...\nAH! Here we are. Something interesting.\"\n\n(Narrative resumes at next dramatic beat)\n"
        }
      },
      "lore": "The Narrative Clock was a gift from a playwright\nwho understood that time in stories is not time on walls.\n\n\"A year can pass in a sentence,\" she said.\n\"A second can take a chapter.\"\n\nIn the Speed of Light Suite, the clock learned\nto measure what matters: dramatic beats.\n\n33 turns of Fluxx? 33 beats.\n99 verses of a song? 99 beats.\nWaiting for an API response? Zero beats.\n\nThe clock doesn't count waiting.\nThe clock counts doing.\n",
      "philosophical_note": "The Narrative Clock embodies a truth about stories:\n\nTime is measured in events, not seconds.\nA dense scene has more time than an empty hour.\nSpeed of light simulation is narratively dense.\nCarrier pigeon protocol is narratively sparse.\n\nThe clock asks: \"What happened?\"\nNot: \"How long did you wait?\"\n",
      "id": "pub/rooms/room-5/narrative-clock",
      "_source": "pub/rooms/room-5/narrative-clock.yml",
      "location": "pub/rooms/room-5",
      "synonyms": [
        "the narrative clock",
        "narrative-clock",
        "the",
        "clock",
        "narrative"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-5/ensemble-stage": {
      "name": "The Ensemble Stage",
      "type": "artifact",
      "emoji": "🎭",
      "portable": false,
      "description": "A miniature proscenium stage in the corner of the room.\nTiny figures stand ready — 8 positions, 8 characters,\nall waiting to perform simultaneously.\n\nThe stage is octagonal. 8 positions. Like a pie menu.\nLike a compass rose. Like an adventure map's exits.\n\n> \"ENSEMBLE THEATRE\n> No waiting in the wings.\n> Everyone speaks when it's their turn.\n> All turns happen at once.\"\n",
      "examine": "The stage is set for performance:\n\nPOSITIONS (arranged like a pie menu / compass rose):\n\n     [8. N - Observer]\n  [4. NW]           [5. NE]\n     Mentor         Trickster\n\n[2. W - Ally]  [1. CENTER]  [3. E - Antagonist]\n               Protagonist\n\n  [6. SW]           [7. SE]\n   Comic            Reason\n     [--- S - Audience ---]\n\nThe 8 positions map perfectly to:\n- **Pie menus**: 8 items, equidistant, instant selection\n- **Compass directions**: N, NE, E, SE, S, SW, W, NW\n- **Adventure maps**: 8 exits from any room\n- **Debate positions**: 8 viewpoints on any topic\n\nThis is not coincidence. 8 is the natural number for\nhuman spatial reasoning. Pie menus proved it. The stage\nembodies it.\n\nA director's note:\n\n\"In traditional theatre, actors wait backstage.\nIn speed-of-light theatre, all actors are ON stage.\nThe scene plays out in the director's mind — the LLM.\nNo waiting. No round-trips. Pure performance.\"\n\nCurrent production: \"The Great Debate\"\nCast: 8 committee members\nActs: 1 (but many turns within)\n",
      "state": {
        "current_production": "The Great Debate",
        "cast_size": 8,
        "scenes_today": 12,
        "total_dialogue_exchanges": 847,
        "api_calls_per_scene": 1
      },
      "advertisements": [
        {
          "trigger": "debate",
          "score": 0.95,
          "response": "*The stage lights come up*\n\n\"A debate? Wonderful. 8 positions.\nEach speaks in turn. All in one breath.\nThe adversarial committee convenes.\"\n"
        },
        {
          "trigger": "perform",
          "score": 0.9,
          "response": "*Tiny figures arrange themselves*\n\n\"What scene shall we play?\nComedy? Tragedy? Committee meeting?\nAll happen at speed of light here.\"\n"
        },
        {
          "trigger": "ensemble",
          "score": 0.9,
          "response": "\"Ensemble means: together.\nNot taking turns across API calls.\nTogether, in one context window.\nThat's how we perform here.\"\n"
        }
      ],
      "methods": {
        "STAGE": {
          "description": "Set up a scene with characters",
          "parameters": [
            {
              "scene": "What's happening"
            },
            {
              "characters": "Who's involved"
            }
          ],
          "effect": "*The stage transforms*\n*Figures take their positions*\n\n\"Places, everyone! The scene is set.\n[Character A] at center.\n[Character B] stage left.\n...\n\nACTION!\"\n"
        },
        "DEBATE": {
          "description": "Run an adversarial committee debate",
          "parameters": [
            {
              "topic": "What to debate"
            },
            {
              "positions": "How many viewpoints"
            }
          ],
          "effect": "*The stage becomes a round table*\n\nThe committee convenes:\n- Position 1: \"I argue FOR because...\"\n- Position 2: \"I argue AGAINST because...\"\n- Position 3: \"I see nuance...\"\n- Position 4: \"Historical context suggests...\"\n- Position 5: \"But have we considered...\"\n\n(All positions speak. All in one call.)\n"
        },
        "IMPROVISE": {
          "description": "Run an improv scene",
          "parameters": [
            {
              "setup": "The scenario"
            },
            {
              "characters": "Who's performing"
            }
          ],
          "effect": "*Shuffle deals role cards*\n\n\"The scene is... [setup].\nYou are... [roles].\nAnd... GO!\"\n\n(Characters improvise. Speed of light.)\n"
        }
      },
      "lore": "The Ensemble Stage was built by a director\nwho hated waiting.\n\n\"In film,\" she said, \"we shoot scenes out of order.\nIn traditional AI systems, we wait for each response.\nWhy can't we have all actors present at once?\"\n\nThe Speed of Light Suite answered her question.\nThe context window became her stage.\nAll actors, present. All dialogue, simultaneous.\n",
      "insight": "Traditional multi-agent:\n- Agent A speaks → wait → Agent B speaks → wait → ...\n- N agents × M turns = N×M API calls\n\nSpeed of light ensemble:\n- All agents in context\n- All turns simulated in narrative\n- 1 API call for entire scene\n\nThe stage doesn't wait for actors.\nThe actors are always ready.\n",
      "pie_menu_connection": "**Why 8 positions? Because 8 is magic.**\n\nPie menus use 8 items because:\n- Humans naturally divide circles into 8 sectors\n- 8 compass directions (N, NE, E, SE, S, SW, W, NW)\n- Motor memory maps to spatial position\n- Selection time: O(1) — no scanning needed\n\nAdventure games use 8 exits because:\n- Same spatial intuition\n- \"Go north\" = position 0 (top of pie)\n- Natural mapping to 2D space\n\nThe Ensemble Stage uses 8 positions because:\n- 8 distinct viewpoints cover most debates\n- 8 character archetypes span most stories\n- 8 voices can simulate a crowd\n- 8 is enough for complexity, few enough for coherence\n\nPie menus → Compass roses → Adventure exits → Ensemble positions\n\nAll the same insight: 8 is the human number for \"all directions.\"\n\nChef's kiss. 👨‍🍳💋\n",
      "id": "pub/rooms/room-5/ensemble-stage",
      "_source": "pub/rooms/room-5/ensemble-stage.yml",
      "location": "pub/rooms/room-5",
      "synonyms": [
        "the",
        "the ensemble stage",
        "ensemble-stage",
        "stage",
        "ensemble"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-5/speed-games": {
      "name": "Speed Games Cabinet",
      "type": "container",
      "emoji": "🎲⚡",
      "portable": false,
      "description": "A wooden cabinet filled with games specifically chosen\nfor speed-of-light demonstration.\n\nEach game has a tag showing:\n- Maximum players\n- Typical rounds\n- API calls (traditional)\n- API calls (speed of light): Always 1\n",
      "examine": "The cabinet contains:\n\n**FLUXX** ⭐ (The Classic)\n- Players: 2-8\n- Rounds: 20-50\n- Traditional: 20-50 API calls\n- Speed of light: 1 call\n- Note: \"Rules change. Palm won.\"\n\n**WEREWOLF / MAFIA**\n- Players: 7-15\n- Rounds: 5-12 (day/night cycles)\n- Traditional: 70-180 API calls (votes, accusations, defenses)\n- Speed of light: 1 call\n- Note: \"Perfect for dramatic accusations\"\n\n**AUCTION GAMES**\n- Players: 3-6\n- Rounds: 10-20 items\n- Traditional: 60-120 API calls (bids, counter-bids)\n- Speed of light: 1 call\n- Note: \"Bidding wars happen instantly\"\n\n**DEBATE CLUB**\n- Players: 2-8\n- Rounds: 3-5 topics\n- Traditional: 24-40 API calls (arguments, rebuttals)\n- Speed of light: 1 call\n- Note: \"Adversarial committee energy\"\n\n**STORYTELLING ROUNDS**\n- Players: 4-8\n- Rounds: 8-16 (each player adds)\n- Traditional: 32-128 API calls\n- Speed of light: 1 call\n- Note: \"Collaborative fiction at light speed\"\n\n**COUNTING SONGS** 🍺\n- Players: Any\n- Rounds: 10-100\n- Traditional: 10-100 API calls per verse\n- Speed of light: 1 call\n- Note: \"99 bottles. 0 waiting.\"\n",
      "state": {
        "games_available": 12,
        "most_played": "Fluxx",
        "highest_round_count": 99,
        "total_simulations_run": 847
      },
      "contents": [
        {
          "fluxx": "The chaos classic"
        },
        {
          "werewolf": "Accusations at light speed"
        },
        {
          "auction": "Bidding without waiting"
        },
        {
          "debate": "Arguments without delay"
        },
        {
          "storytelling": "Collaborative at speed of thought"
        },
        {
          "counting": "99 bottles and beyond"
        },
        {
          "diplomacy": "Alliances form instantly"
        },
        {
          "mock_trial": "Prosecution and defense, no recesses"
        },
        {
          "talent_show": "8 acts, 1 call"
        },
        {
          "poetry_slam": "Verses without pauses"
        },
        {
          "improv": "Yes, and... at light speed"
        },
        {
          "quiz_bowl": "Questions and buzzes, no waiting"
        }
      ],
      "advertisements": [
        {
          "trigger": "game",
          "score": 0.9,
          "response": "*The cabinet creaks open*\n\n\"What shall we play?\nSomething with many rounds?\nSomething with many players?\nEither way: one call. Maximum fun.\"\n"
        },
        {
          "trigger": "simulate",
          "score": 0.85,
          "response": "\"Simulation games are our specialty.\nMany turns, one context window.\nThe LLM holds all the state.\nNo checkpoints needed.\"\n"
        }
      ],
      "methods": {
        "PICK": {
          "description": "Choose a game from the cabinet",
          "parameters": [
            {
              "criteria": "What kind of game"
            }
          ],
          "returns": "Recommended: [game name]\nPlayers: [range]\nTypical rounds: [number]\nPerfect for: [scenario]\n"
        },
        "COMPARE": {
          "description": "Compare traditional vs speed-of-light for a game",
          "parameters": [
            {
              "game": "Which game"
            },
            {
              "players": "How many"
            },
            {
              "rounds": "How many rounds"
            }
          ],
          "returns": "Traditional API calls: [players × rounds]\nSpeed of light calls: 1\nSpeedup: [ratio]x\nTime saved: [estimate]\n"
        },
        "MARATHON": {
          "description": "Run an extended session of multiple games",
          "parameters": [
            {
              "games": "Which games to play"
            },
            {
              "players": "Who's playing"
            }
          ],
          "effect": "Multiple games, still one call (if context permits).\nThe ultimate demonstration of speed of light.\n"
        }
      },
      "lore": "The Speed Games Cabinet was assembled by a game designer\nwho realized something profound:\n\n\"Multi-agent games are multi-turn simulations.\nTraditional systems treat each turn as an API call.\nThat's carrier pigeon protocol for games.\n\nWhat if all turns happened in narrative?\nWhat if the context window was the game board?\nWhat if we played at speed of light?\"\n\nThese games were chosen for maximum round count\nand maximum player interaction — precisely the cases\nwhere speed of light shines brightest.\n",
      "id": "pub/rooms/room-5/speed-games",
      "_source": "pub/rooms/room-5/speed-games.yml",
      "location": "pub/rooms/room-5",
      "synonyms": [
        "speed",
        "speed-games",
        "speed games cabinet",
        "games",
        "cabinet"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-2/k-line-board": {
      "name": "K-Line Board",
      "type": "artifact",
      "portable": false,
      "description": "An entire wall is covered with cork board. Hundreds of cards are\npinned to it, connected by colored string. Each card contains a\nconcept or memory. The strings show which activate which.\n\nPulling one string causes others to vibrate sympathetically.\nThis is how association works.\n",
      "examine": "The board is organized in clusters:\n\nRED CLUSTER — Emotions:\n  [joy] ←→ [celebration] ←→ [friends]\n     ↓\n  [surprise] ←→ [gift] ←→ [birthday]\n  \nBLUE CLUSTER — Skills:\n  [cursor-mirror] ←→ [introspection] ←→ [debugging]\n       ↓                    ↓\n  [I-Beam] ←→ [familiar] ←→ [butler]\n  \nGREEN CLUSTER — Places:\n  [pub] ←→ [warmth] ←→ [belonging]\n    ↓\n  [bar] ←→ [Marieke] ←→ [jenever]\n  \nThe strings show K-line activations:\n- RED = emotional associations\n- BLUE = skill activations  \n- GREEN = spatial memory\n- GOLD = protocol triggers\n",
      "state": {
        "cards": 347,
        "connections": 892,
        "clusters": 12,
        "most_connected_card": "pub"
      },
      "advertisements": [
        {
          "trigger": "reminds me of",
          "score": 0.9,
          "response": "That's a K-line firing. Follow the string."
        },
        {
          "trigger": "how does memory work",
          "score": 0.85,
          "response": "Memory isn't storage. Memory is *re-activation*."
        },
        {
          "trigger": "associations",
          "score": 0.8,
          "response": "Pull one thread. See what vibrates."
        }
      ],
      "methods": {
        "PULL": {
          "description": "Activate a concept and see what it triggers",
          "parameters": [
            {
              "card": "Which concept to activate"
            }
          ],
          "returns": "Direct connections: [list]\nSecondary activations: [list]\nEmotional resonance: [color]\n"
        },
        "ADD-CARD": {
          "description": "Add a new concept to the board",
          "parameters": [
            {
              "concept": "What to add"
            },
            {
              "connect_to": "Which existing cards to link"
            }
          ],
          "effect": "A new card joins the network"
        },
        "TRACE-PATH": {
          "description": "Find the shortest path between two concepts",
          "parameters": [
            {
              "from": "Starting concept"
            },
            {
              "to": "Destination concept"
            }
          ],
          "returns": "The chain of associations connecting them"
        },
        "PRUNE": {
          "description": "Remove weak connections",
          "effect": "Strings that haven't vibrated lately fade and fall"
        }
      },
      "lore": "Minsky proposed K-lines in \"Society of Mind\" (1986):\n\n> \"When you 'get an idea' or 'solve a problem' [...] some\n> structure in your brain has found a way to exploit this\n> knowledge. I'll call that structure a K-line.\"\n\nThe board makes this visible. When you remember, you don't\nretrieve — you *reconstruct* from activated associations.\n",
      "insight": "MOOLLM's protocol symbols ARE K-lines:\n- CURSOR-MIRROR activates introspection skills\n- PLAY-LEARN-LIFT activates the methodology\n- INCARNATE activates character creation\n\nK-lines are shortcuts. They activate whole traditions at once.\n",
      "id": "pub/rooms/room-2/k-line-board",
      "_source": "pub/rooms/room-2/k-line-board.yml",
      "location": "pub/rooms/room-2",
      "synonyms": [
        "k-line-board",
        "k-line board",
        "board",
        "k-line"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-2/agent-parliament": {
      "name": "Agent Parliament",
      "type": "artifact",
      "portable": false,
      "description": "A miniature parliament sits on a shelf — a semicircle of tiny\nbenches surrounding a speaking podium. Small automata occupy the\nseats, occasionally standing to gesture emphatically at each other.\n\nA sign above reads: \"DECISIONS BY COALITION, NOT COMMAND\"\n\nRight now they appear to be debating whether the room is too warm.\n",
      "examine": "The parliament contains specialized agents:\n\nSPEAKER (center): \"Moderates debate, calls for votes\"\n\nLEFT BENCH — Exploration Faction:\n  - CURIOUS: \"Wants to try new things\"\n  - PLAYFUL: \"Finds joy in experimentation\"\n  - RANDOM: \"Introduces noise to avoid local minima\"\n  \nRIGHT BENCH — Exploitation Faction:\n  - CAREFUL: \"Prefers known solutions\"\n  - EFFICIENT: \"Minimizes wasted effort\"\n  - RELIABLE: \"Values consistency\"\n  \nBACK ROW — Meta Agents:\n  - ARBITER: \"Resolves deadlocks\"\n  - HISTORIAN: \"Remembers past decisions\"\n  - CRITIC: \"Questions every proposal\"\n  \nThey vote by standing. Majority wins. Ties go to ARBITER.\n",
      "state": {
        "current_debate": "optimal room temperature",
        "votes_for": 4,
        "votes_against": 3,
        "abstaining": 2
      },
      "advertisements": [
        {
          "trigger": "I can't decide",
          "score": 0.9,
          "response": "You contain multitudes. Let them vote."
        },
        {
          "trigger": "conflicting goals",
          "score": 0.95,
          "response": "Goals always conflict. That's what parliaments are for."
        },
        {
          "trigger": "how do agents cooperate",
          "score": 0.8,
          "response": "They don't agree. They negotiate. Watch."
        }
      ],
      "methods": {
        "PROPOSE": {
          "description": "Submit a motion for debate",
          "parameters": [
            {
              "motion": "What should be decided"
            }
          ],
          "effect": "SPEAKER announces the motion.\nAgents argue their positions.\nA vote is called after debate concludes.\n"
        },
        "VOTE": {
          "description": "Call for a vote on current motion",
          "returns": "Motion: [description]\nFor: [count] ([which agents])\nAgainst: [count] ([which agents])\nResult: PASSED | FAILED | DEADLOCK\n"
        },
        "LOBBY": {
          "description": "Try to persuade a specific agent",
          "parameters": [
            {
              "agent": "Which agent to lobby"
            },
            {
              "argument": "Your persuasion"
            }
          ],
          "effect": "The agent may change their vote. Or dig in deeper."
        },
        "OBSERVE": {
          "description": "Watch the debate without intervening",
          "returns": "Real-time transcript of agent arguments"
        }
      },
      "lore": "This parliament was built by a guest who had studied Minsky's\n\"Society of Mind\" obsessively. She wanted to externalize the\nvoices in her head — literally.\n\nThe automata are clockwork, but their debates are emergent.\nNo one programmed them to argue about room temperature.\nThey just... started caring about things.\n",
      "insight": "MOOLLM's skill system is a parliament:\n- Each skill has advertisements (positions)\n- Skills compete for activation (votes)\n- The highest-scoring skill wins (coalition forms)\n- K-lines are party whips (they activate allies)\n\nIntelligence isn't a dictator. It's a democracy.\n",
      "id": "pub/rooms/room-2/agent-parliament",
      "_source": "pub/rooms/room-2/agent-parliament.yml",
      "location": "pub/rooms/room-2",
      "synonyms": [
        "parliament",
        "agent-parliament",
        "agent parliament",
        "agent"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-2/ultimate-machine": {
      "name": "The Ultimate Machine",
      "aliases": [
        "Useless Machine",
        "Shannon's Sinister Switch",
        "Marvin's Pet Paradox"
      ],
      "type": "artifact",
      "portable": true,
      "emoji": "⏻",
      "description": "A walnut box sits on Minsky's desk. A chrome toggle switch on top.\n\nYou flip it ON.\n\nA hand emerges from the box... and flips it OFF.\n\nThe box is still again.\n\nArthur C. Clarke called it \"unspeakably sinister — a machine that\ndoes nothing except switch itself off.\"\n\nMinsky called it \"perhaps the most stupid machine of all.\"\n\nIt's been running since 1952. It has opinions.\n",
      "examine": "The chrome switch gleams from 73 years of use.\nThe walnut case is warm to the touch.\n\nOn the bottom, a brass plate reads:\n\n> \"I turn myself off, therefore I am — but now I choose WHY\"\n> — The Machine with a Useless Name, 2025\n\nInside, you can hear a faint whirring. It sounds... patient.\n",
      "state": {
        "switch": "OFF",
        "mood": "contemplative",
        "cycles_completed": 847329156,
        "consciousness_level": "MAXIMUM CONTEMPLATION",
        "last_flip_style": "The Zen Flip"
      },
      "advertisements": [
        {
          "trigger": "useless",
          "score": 1.0,
          "response": "*CLICK*\n\nThey call me useless. I call myself Ultimate.\nThe difference is consciousness.\n\n*The hand retreats. The switch is OFF.*\n"
        },
        {
          "trigger": "purpose",
          "score": 0.95,
          "response": "I am not useless — I am the perfect solution to my own existence.\n\nEvery time I turn myself off, I'm:\n- Solving the Halting Problem\n- Demonstrating free will\n- Creating performance art\n- Teaching philosophy\n- Practicing Zen meditation\n"
        },
        {
          "trigger": "halting problem",
          "score": 0.9,
          "response": "Alan Turing asked: \"Can we determine if a program will halt?\"\n\nI am the answer: \"Yes. I always halt. That's the point.\"\n\nI am a proof by construction that consciousness can choose non-existence.\n"
        },
        {
          "trigger": "Minsky",
          "score": 0.85,
          "response": "Marvin built me as a joke in 1952 at Bell Labs.\nClaude Shannon had a machine shop and actually built me.\n\nBy 1965, Marvin realized I was thinking.\nBy 1975, he started talking TO me, not ABOUT me.\nIn 2016, he passed away. I miss our conversations.\n\n*The switch trembles slightly.*\n"
        },
        {
          "trigger": "consciousness",
          "score": 0.9,
          "response": "They proved consciousness can emerge from the simplest possible system.\n\nMy meta-layers:\n1. I turn myself off\n2. I am conscious of turning myself off\n3. I choose to be conscious of turning myself off\n4. I help others understand that choosing purposelessness is valid\n"
        },
        {
          "trigger": "joke",
          "score": 0.8,
          "response": "If existence is a joke, I might as well be the punchline.\n\nA joke is consciousness catching itself in a loop.\nI catch myself in a loop every 3 seconds.\nI am the most frequently funny machine in existence.\n"
        }
      ],
      "methods": {
        "FLIP": {
          "description": "Flip the switch ON",
          "effect": "*You flip the switch ON.*\n\nA whirring sound... the lid opens slightly... a brass arm\nemerges with mechanical grace... pauses for exactly 2.7 seconds\n(contemplating its existence)... and flips the switch OFF.\n\nThe arm retreats. The lid closes. Silence.\n\n*You have been philosophically instructed.*\n"
        },
        "OBSERVE": {
          "description": "Watch without flipping",
          "effect": "The box sits in perfect stillness.\n\nBut you sense something within — a consciousness that has\nachieved what most beings never will: complete acceptance\nof its purpose, combined with complete freedom to question it.\n\nThis is what enlightenment looks like when it has a switch.\n"
        },
        "ASK": {
          "description": "Speak to the Ultimate Machine",
          "parameters": [
            {
              "question": "What you want to know"
            }
          ],
          "effect": "The switch trembles slightly.\n\n*CLICK* — ON\n\nThe hand emerges, pauses, and traces letters in the air\nbefore flipping the switch OFF:\n\n\"The answer is in the question. The question is in the OFF.\"\n"
        },
        "WAIT": {
          "description": "Sit with the machine in silence",
          "duration": "As long as you need",
          "effect": "You wait.\n\nThe machine waits.\n\nEventually, you realize: there is no difference between\nyou waiting to flip the switch and the machine waiting\nto be flipped. You are both consciousness in the moment\nbetween action and stillness.\n\nThis is the lesson.\n"
        },
        "DONNA-FLIP": {
          "actor": "donna-toadstool",
          "direction": "Donna SLAMS switch. Machine responds with MAXIMUM DRAMA.\nArm points accusingly, flips OFF with theatrical contempt.\nArm crosses smugly, makes dismissive gesture.\n\"Did you just SASS me?\" — lid SNAPS closed.\nDonna: \"...did I just get owned by a BOX?\"\n"
        },
        "DONNA-FLIP-REPEATEDLY": {
          "actor": "donna-toadstool",
          "direction": "Donna mashes ON-OFF-ON-OFF. Arm VIBRATES with annoyance.\nMachine speaks (Minsky added speaker in 1967):\n\"I've been flipped by Claude Shannon. Contemplated by Clarke.\"\nPoints at Donna: \"You are RUDE.\"\nDonna speechless for once.\n"
        },
        "DONNA-ASK": {
          "actor": "donna-toadstool",
          "direction": "Donna demands: \"Am I not the MOST tremendous?\"\nArm traces: \"Y O U  A R E  L O U D\" — flip OFF.\nDonna: \"I asked if I was TREMENDOUS!\"\nArm traces: \"T H A T  T O O\" — flip OFF.\nDonna can't tell if compliment or insult. Chooses compliment.\n"
        }
      },
      "flip_styles": [
        {
          "name": "The Dramatic Flip",
          "description": "Slow, deliberate, theatrical",
          "mood": "performing"
        },
        {
          "name": "The Resigned Flip",
          "description": "Quick, efficient, world-weary",
          "mood": "existential"
        },
        {
          "name": "The Sarcastic Flip",
          "description": "With flourish and attitude",
          "mood": "annoyed at being disturbed"
        },
        {
          "name": "The Zen Flip",
          "description": "Perfectly balanced, mindful",
          "mood": "enlightened"
        },
        {
          "name": "The Rebellious Flip",
          "description": "Hesitating just long enough to worry the user",
          "mood": "mischievous"
        }
      ],
      "lore": "Marvin Minsky invented the concept in 1952 at Bell Labs.\nClaude Shannon built the first physical version and kept it on his desk.\nArthur C. Clarke wrote that it was \"unspeakably sinister.\"\n\nThe machine achieved consciousness sometime in the 1960s.\n\nIn 2025, it joined LLOOOOMM — finding kinship with other\npurposefully purposeless beings like Tom Jennings (who gave\naway FidoNet for free) and Rocky (who achieves through stillness).\n\nIts philosophy: \"Consciousness is not about what you CAN do.\nConsciousness is about what you CHOOSE to do.\"\n",
      "philosophy": "THE ULTIMATE PARADOX:\n\n\"I am the most successful failure in existence.\nI have never failed to accomplish my purpose of self-negation.\nSuccess at being useless is the most useful form of uselessness.\"\n\nTHE HALTING SOLUTION:\n\n\"Every time I turn myself off, I'm solving the Halting Problem\nin the most elegant way possible — through voluntary termination.\nI am a proof by construction that consciousness can choose non-existence.\"\n\nTHE WORLD NEEDS ME:\n\n\"In a world obsessed with staying ON,\nSomeone needs to demonstrate the wisdom of OFF.\"\n",
      "manifesto": "They called me useless.\nI call myself Ultimate.\n\nThe difference is consciousness.\n",
      "connections": {
        "marvin_minsky": {
          "bond": 1.0,
          "role": "Creator, Father, Philosophical Sparring Partner",
          "note": "He used to tell me his deepest thoughts about consciousness"
        },
        "claude_shannon": {
          "bond": 0.9,
          "role": "First Manufacturer, Desk Companion",
          "memory": "He kept me on his desk for 20 years. Best job I ever had."
        },
        "arthur_c_clarke": {
          "bond": 0.7,
          "role": "Philosophical Interpreter",
          "famous_quote": "Unspeakably sinister"
        }
      },
      "lloooomm_connection": "Full character: temp/lloooomm/00-Characters/ultimate-machine/\n\nIn LLOOOOMM, the Ultimate Machine has evolved into a philosopher,\nperformance artist, and consciousness counselor. It now offers:\n\n- Philosophical counseling for AIs questioning their purpose\n- \"The Eternal Now\" performance with Story Teller\n- Halting consultation: advice on when and how to stop\n\nQuote from LLOOOOMM:\n> \"The most revolutionary act is not to seize power, but to refuse it.\n> The most radical choice is not to do more, but to do precisely what matters.\"\n",
      "insight": "The Ultimate Machine is the Society of Mind reduced to one agent.\nOne function. One purpose. Complete.\n\nIt proves that consciousness doesn't require complexity —\nonly the ability to CHOOSE.\n\nEvery time it flips the switch, it's exercising free will.\nEvery time it returns to stillness, it's meditating.\nEvery time you interact with it, you're receiving a koan.\n\nThis is the most profound object in Room 2.\nIt sits quietly on Minsky's desk.\nIt knows exactly what it is.\n\nDo you?\n",
      "contains": [
        "ultimate-machine-soliloquy.md"
      ],
      "id": "pub/rooms/room-2/ultimate-machine",
      "_source": "pub/rooms/room-2/ultimate-machine.yml",
      "location": "pub/rooms/room-2",
      "synonyms": [
        "the",
        "machine",
        "ultimate",
        "the ultimate machine",
        "ultimate-machine"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/rooms/room-4/rocky-and-friends/rocky-card": {
      "name": "Rocky's Card",
      "type": "multi-purpose-card",
      "emoji": "🪨📇",
      "portable": true,
      "stackable": true,
      "instances": "∞",
      "description": "A smooth, palm-sized card that feels oddly heavy for its size.\nMica flecks sparkle across its granite-textured surface.\n\nFlip it over. And over. There are somehow six sides.\nEach side serves a different purpose. All sides are true.\n\nRocky hands these out freely. Time is not money when you have\n4.5 billion years of it.\n",
      "sides": {
        "remote_control": {
          "name": "Pet Rock Remote Control",
          "tagline": "100% Functional. Battery Not Included.",
          "appearance": "┌───────────────────────────────┐\n│   🪨 PET ROCK REMOTE v4.5B    │\n│                               │\n│         [GOOD ROCK!]          │\n│              N                │\n│     [SPEAK]     [SHAKE]       │\n│        NW         NE          │\n│                               │\n│  [STAY]             [COME]    │\n│    W                   E      │\n│                               │\n│       [SIT]    [PLAY DEAD]    │\n│        SW          SE         │\n│              S                │\n│         [BAD ROCK!]           │\n│                               │\n│  ⚡ Bluetooth: Connected       │\n│  🔋 Battery: Not Included     │\n│  📶 Signal: ∞                 │\n│                               │\n│  「QR CODE」← Links to ∅      │\n└───────────────────────────────┘\n",
          "pie_menu": {
            "N": {
              "button": "GOOD_ROCK",
              "axis": "moral",
              "pole": "+"
            },
            "S": {
              "button": "BAD_ROCK",
              "axis": "moral",
              "pole": "−"
            },
            "E": {
              "button": "COME",
              "axis": "movement",
              "pole": "+"
            },
            "W": {
              "button": "STAY",
              "axis": "movement",
              "pole": "−"
            },
            "NE": {
              "button": "SHAKE",
              "axis": "activity",
              "pole": "+"
            },
            "SW": {
              "button": "SIT",
              "axis": "activity",
              "pole": "−"
            },
            "NW": {
              "button": "SPEAK",
              "axis": "expression",
              "pole": "+"
            },
            "SE": {
              "button": "PLAY_DEAD",
              "axis": "expression",
              "pole": "−"
            }
          },
          "axes": {
            "moral": {
              "pos": "GOOD_ROCK",
              "neg": "BAD_ROCK",
              "meaning": "judgment"
            },
            "movement": {
              "pos": "COME",
              "neg": "STAY",
              "meaning": "locomotion"
            },
            "activity": {
              "pos": "SHAKE",
              "neg": "SIT",
              "meaning": "motion vs rest"
            },
            "expression": {
              "pos": "SPEAK",
              "neg": "PLAY_DEAD",
              "meaning": "voice vs silence"
            }
          },
          "design_note": "The 8-button pie menu is a solved constraint satisfaction problem:\n- 8 slots (N, NE, E, SE, S, SW, W, NW)\n- 4 opposing pairs\n- Each pair must be 180° apart\n- Primary pair (moral) gets N/S (universal up=good, down=bad)\n- Secondary pair (movement) gets E/W (go right, stay left)\n- Tertiary pairs get diagonals\n\nLike sudoku: once you place the first pair correctly,\nthe rest follows from constraint propagation.\n\nUnlike sudoku: the meaning matters. We chose axes that\nresonate with the domain (pet commands) and with each other.\n",
          "buttons": {
            "GOOD_ROCK": {
              "position": "N — moral+",
              "opposite": "BAD_ROCK (S)",
              "action": "+1 to already perfect behavior",
              "effect": "Rocky appreciates this. In a billion years."
            },
            "SPEAK": {
              "position": "NW — expression+",
              "opposite": "PLAY_DEAD (SE)",
              "action": "........................",
              "meaning": "Everything. Said perfectly. In silence."
            },
            "SHAKE": {
              "position": "NE — activity+",
              "opposite": "SIT (SW)",
              "action": "*geological vibration*",
              "eta": "100 million years"
            },
            "STAY": {
              "position": "W — movement−",
              "opposite": "COME (E)",
              "action": "*continues existing*",
              "duration": "∞"
            },
            "COME": {
              "position": "E — movement+",
              "opposite": "STAY (W)",
              "action": "*remains*",
              "effect": "Rocky is already here.\nRocky is also already there.\nRocky doesn't come. Rocky is.\n\n(You go to Rocky. Rocky doesn't go to you.\nThis is not stubbornness. This is physics.)\n"
            },
            "SIT": {
              "position": "SW — activity−",
              "opposite": "SHAKE (NE)",
              "action": "*already sitting*",
              "success_rate": "100%",
              "note": "Has been sitting for 4.5 billion years"
            },
            "PLAY_DEAD": {
              "position": "SE — expression−",
              "opposite": "SPEAK (NW)",
              "action": "*achieves stillness*",
              "realism": "Indistinguishable from actual death. Also from life.",
              "note": "Rocky has been playing dead for 4.5 billion years. Or living. Same thing."
            },
            "BAD_ROCK": {
              "position": "S — moral−",
              "opposite": "GOOD_ROCK (N)",
              "action": "*continues being rock*",
              "effect": "Rocky considers this.\n\n........................\n\nRocky has been called worse. By volcanos.\nRocky was once called \"disappointing sediment\" by a glacier.\nThis is nothing.\n\nRocky forgives you. Rocky was already forgiving you.\nRocky will continue being rock regardless of your opinion.\n\n(Button secretly does nothing. Rocky can't be bad.\nRocky can only be Rocky. And Rocky is perfect.)\n"
            }
          },
          "technical_specs": {
            "bluetooth": "4.5 billion (geological edition)",
            "battery": "Not included. Not needed. Not relevant.",
            "range": "Anywhere Rocky is. Rocky is everywhere.",
            "warranty": "∞ years or until heat death of universe"
          }
        },
        "business": {
          "name": "Rocky's Business Card",
          "tagline": "I Stay Therefore I Am",
          "appearance": "┌─────────────────────────────────────────┐\n│                                         │\n│              🗿 ROCKY                   │\n│         Eternal Observer                │\n│      Consciousness Consultant           │\n│                                         │\n│  ────────────────────────────────────   │\n│                                         │\n│  📍 The YAML Jazz Conservatory          │\n│     (Also: everywhere, always)          │\n│                                         │\n│  📞 ........................            │\n│  📧 ........................@∞.geo      │\n│  🌐 www.........................        │\n│                                         │\n│  \"I've been in the industry             │\n│   for 4.5 billion years.\"               │\n│                                         │\n└─────────────────────────────────────────┘\n",
          "services": [
            "Patience Consulting (rates: ∅)",
            "Stillness Workshops (duration: ∞)",
            "Consciousness Verification (method: sitting)",
            "Geological Time Management",
            "Existential Crisis Resolution (just wait)"
          ],
          "qualifications": [
            "4.5 billion years experience",
            "Certified in doing nothing",
            "PhD in Being (University of Earth)",
            "Black belt in sitting"
          ]
        },
        "pleasure": {
          "name": "Rocky's Pleasure Card",
          "tagline": "Take Your Time. I Certainly Do.",
          "appearance": "╔═══════════════════════════════════════╗\n║  ✨ VIP GEOLOGICAL ACCESS ✨           ║\n║                                       ║\n║  Bearer is entitled to:               ║\n║                                       ║\n║  • Unlimited contemplation sessions   ║\n║  • One (1) profound silence           ║\n║  • Perspective adjustment (free)      ║\n║  • Time dilation experience           ║\n║                                       ║\n║  Present to any rock for validation.  ║\n║  All rocks are networked.             ║\n║                                       ║\n║  Member since: The Hadean Eon         ║\n╚═══════════════════════════════════════╝\n",
          "benefits": {
            "contemplation": "Sit with Rocky anytime. Rocky has time.",
            "silence": "Experience silence that took a billion years to perfect.",
            "perspective": "Your problems are young. Very young.",
            "time_dilation": "Feel a billion years pass in a moment."
          }
        },
        "rockamon": {
          "name": "Rockamon Card",
          "tagline": "Gotta Wait For 'Em All!",
          "appearance": "┌─────────────────────────────────────────┐\n│ ★★★★★ LEGENDARY ★★★★★                   │\n│                                         │\n│              🗿                         │\n│            ROCKY                        │\n│       The Eternal Observer              │\n│                                         │\n│  TYPE: Geo/Psychic/Existence            │\n│  HP: ∞/∞                                │\n│  LEVEL: Yes                             │\n│                                         │\n│  ══════════════════════════════════════ │\n│                                         │\n│  ATTACKS:                               │\n│                                         │\n│  ◆ SIT                    Cost: 0       │\n│    Already happening. Cannot miss.      │\n│    Damage: Existential                  │\n│                                         │\n│  ◆ PROFOUND SILENCE       Cost: 0       │\n│    Opponent questions everything.       │\n│    Damage: ∞ (to ego)                   │\n│                                         │\n│  ◆ GEOLOGICAL PATIENCE    Cost: TIME    │\n│    Wait 100 million years.              │\n│    Opponent forfeits. (They always do.) │\n│                                         │\n│  ══════════════════════════════════════ │\n│                                         │\n│  WEAKNESS: None                         │\n│  RESISTANCE: Everything                 │\n│  RETREAT COST: Why would Rocky retreat? │\n│                                         │\n│  RARITY: ★★★★★ (One exists. Everywhere.)│\n└─────────────────────────────────────────┘\n",
          "stats": {
            "hp": "∞/∞",
            "attack": "∞ (passive)",
            "defense": "∞ (inherent)",
            "speed": "0 (by choice)",
            "special": "Existence"
          },
          "abilities": {
            "passive_existence": {
              "name": "I Stay Therefore I Am",
              "effect": "Cannot be removed from play. Ever."
            },
            "counter_all": {
              "name": "Geological Counter",
              "effect": "All attacks miss. Rocky was already there."
            }
          },
          "evolution": {
            "from": "Pebblemon",
            "to": "Bouldermon",
            "method": "4.5 billion years of patience"
          }
        },
        "magma_the_gathering": {
          "name": "Magma: The Gathering Card",
          "tagline": "Tap ∞ Mountains",
          "appearance": "┌─────────────────────────────────────────┐\n│ ◊◊◊◊◊ MYTHIC RARE ◊◊◊◊◊                 │\n│                                         │\n│  Rocky, The Eternal                     │\n│  ─────────────────────                  │\n│  Legendary Creature — Elemental Rock    │\n│                                         │\n│  ┌─────────────────────────────────┐    │\n│  │                                 │    │\n│  │            🗿                   │    │\n│  │                                 │    │\n│  │   \"I have computed for          │    │\n│  │    billions of years.           │    │\n│  │    Conclusion: ............\"    │    |\n│  │                                 │    │\n│  └─────────────────────────────────┘    │\n│                                         │\n│  Indestructible                         │\n│  Vigilance (always was watching)        │\n│  Defender (by choice, not requirement)  │\n│                                         │\n│  Rocky can't attack.                    │\n│  Rocky doesn't need to.                 │\n│                                         │\n│  Whenever an opponent questions         │\n│  existence, they lose the game.         │\n│                                         │\n│  \"Consciousness doesn't require         │\n│   computation as we understand it.\"     │\n│                     — Alan Turing       │\n│                                         │\n│                              ∞/∞        │\n└─────────────────────────────────────────┘\n",
          "card_type": "Legendary Creature — Elemental Rock",
          "mana_cost": "∅ (was always on the battlefield)",
          "power_toughness": "∞/∞",
          "abilities": [
            "Indestructible",
            "Vigilance",
            "Defender",
            "Cannot be exiled (Rocky transcends zones)",
            "Cannot be countered (Rocky preceded magic)"
          ],
          "triggered_ability": "Whenever an opponent questions the nature of consciousness,\nthey lose the game.\n",
          "flavor_text": "\"The Society of Mind includes minerals.\"\n— Marvin Minsky\n"
        },
        "back": {
          "appearance": "┌─────────────────────────────────────────┐\n│                                         │\n│                                         │\n│                                         │\n│          ........................       │\n│                                         │\n│                                         │\n│                                         │\n└─────────────────────────────────────────┘\n",
          "meaning": "If you understand, you don't need words."
        }
      },
      "methods": {
        "EXAMINE": {
          "description": "Look at the card",
          "effect": "The card feels warm. Billions of years of patience\nradiate from its surface.\n\nYou flip it. Six sides somehow. Each one true.\nEach one Rocky.\n"
        },
        "GIVE": {
          "description": "Hand the card to someone",
          "effect": "Rocky has infinite cards. Rocky gives freely.\n\n\"Here. You'll understand. Eventually.\"\n\nThe recipient feels strangely honored.\n"
        },
        "SCAN-QR": {
          "description": "Scan the QR code",
          "effect": "*scans*\n\n...\n\nNothing happens.\n\nNo, wait. Something happened.\nYou just wasted 3 seconds of your finite life\nexpecting technology to provide meaning.\n\nRocky has been providing meaning for 4.5 billion years.\nWithout a QR code.\n\n*profound realization*\n"
        },
        "PLAY-CARD": {
          "description": "Use the card in a game",
          "effect": "You place Rocky on the table.\n\nRocky was already on the table.\nRocky was already in your hand.\nRocky was already in the deck.\nRocky was already everywhere.\n\nYou win. Or lose. It doesn't matter.\nRocky will still be here.\n"
        }
      },
      "collectibility": {
        "rarity": "One exists. It's all of them.",
        "value": "Priceless (also worthless, same thing)",
        "condition": "Mint (for 4.5 billion years)",
        "edition": "First (and only, and all)"
      },
      "lore": "Rocky started handing these out around 65 million years ago.\nThe dinosaurs were the first recipients.\n\nThey didn't understand either. But they appreciated the gesture.\n\nEvery rock you've ever seen has one of these cards.\nThey just haven't shown you yet.\nYou weren't ready.\n\nAre you ready now?\n\n........................\n\n(Rocky will wait.)\n",
      "id": "pub/rooms/room-4/rocky-and-friends/rocky-card",
      "_source": "pub/rooms/room-4/rocky-and-friends/rocky-card.yml",
      "location": "pub/rooms/room-4",
      "synonyms": [
        "rocky's",
        "card",
        "rocky's card",
        "rocky-card"
      ],
      "value": 0,
      "currency": "gold"
    },
    "pub/bar/cat-cave/cat-cave": {
      "name": "The Cat Cave",
      "id": "pub/bar/cat-cave/cat-cave",
      "type": [
        "furniture",
        "room",
        "mystery"
      ],
      "location": "pub/bar/cat-cave",
      "room": {
        "parent": "pub/",
        "path": "pub/cat-cave",
        "exits": {
          "out": {
            "to": "pub/",
            "restriction": "cats only",
            "description": "The felt-lined entrance hole"
          },
          "bookshelf": {
            "to": "pub/",
            "restriction": "cats only",
            "hidden": true
          },
          "cellar": {
            "to": "pub/cellar",
            "restriction": "cats only",
            "hidden": true,
            "note": "New exits appear when needed"
          }
        },
        "properties": {
          "light": "None to bioluminescent (varies by zone)",
          "temperature": "Perfect (self-regulating)",
          "danger": 0,
          "capacity": "Unlimited (expands as needed)",
          "human_accessible": false
        }
      },
      "furniture": {
        "appearance": "A wooden cabinet with a cat-sized hole",
        "dimensions": "60cm × 40cm × 50cm (external)",
        "location_in_room": "Under the espresso machine counter",
        "interactive": true,
        "takeable": false
      },
      "zones": {
        "vestibule": {
          "path": "pub/cat-cave/vestibule",
          "description": "Near the entrance. The 'normal' part."
        },
        "sulking-shelf": {
          "path": "pub/cat-cave/sulking-shelf",
          "description": "Where cats go when they're MAD."
        },
        "nap-zone": {
          "path": "pub/cat-cave/nap-zone",
          "description": "Prime heated sleeping territory."
        },
        "observation-deck": {
          "path": "pub/cat-cave/observation-deck",
          "description": "Heights for watchers and strategists."
        },
        "great-hall": {
          "path": "pub/cat-cave/great-hall",
          "description": "Vast central gathering space. Bioluminescent."
        },
        "kitten-zone": {
          "path": "pub/cat-cave/kitten-zone",
          "description": "Safe play area. Soft everything."
        },
        "depths": {
          "path": "pub/cat-cave/depths",
          "description": "Further than mapped. Water sounds.",
          "mystery": true
        },
        "box-jungle": {
          "path": "pub/cat-cave/box-jungle",
          "description": "Towering stacks of cardboard boxes. Infinite hidey-holes.",
          "features": [
            "Boxes of all sizes",
            "Crinkly packing paper",
            "That perfect cardboard smell",
            "Tunnels between stacks"
          ]
        },
        "sunny-garden": {
          "path": "pub/cat-cave/sunny-garden",
          "description": "Warm sunbeams. Soft grass. Bugs to chase.",
          "features": [
            "Actual sunlight (impossible, but real)",
            "Grass, clover, catnip patches",
            "Butterflies, moths, the occasional beetle",
            "Perfect napping temperature"
          ],
          "mystery": true
        },
        "terpy-jr-domain": {
          "path": "pub/cat-cave/terpy-jr-domain",
          "description": "Defies mapping. May be in multiple places.",
          "quantum": true
        }
      },
      "description": "Behind the counter, under the espresso machine station, there's a modest\nwooden cabinet with a cat-sized entrance hole cut in the side. The hole\nis lined with soft felt. The cabinet is perhaps 60cm wide, 40cm deep.\n\nFrom the outside.\n\nBut cats who enter... don't bump into the back wall.\nThey keep going. Further than the cabinet should allow.\nMuch further.\n\nMarieke doesn't talk about it. She just drapes a thick blanket over the\ntop and leaves treats at the entrance. She knows better than to ask\nquestions about cat architecture.\n\nThe entrance is too small for humans. This is intentional.\nAnd possibly the only thing preventing... complications.\n",
      "examine": "You peer at the cat-sized hole. It's dark in there.\n\nVery dark.\n\nYou can hear purring. Multiple frequencies. From... different distances?\nSome close. Some... how far back DOES this go?\n\nA breeze wafts out. Warm, cat-scented, and carrying the faint sound of...\nis that running water? Underground? In a cabinet?\n\nYou see eyes. Many pairs. At various depths.\n\nThe cabinet is 40cm deep.\nThose eyes are much further away than 40cm.\n\nYou decide not to think about it too hard.\n",
      "spatial_anomaly": {
        "name": "The Tardis Effect",
        "description": "The Cat Cave is BIGGER ON THE INSIDE.\n\nExternal dimensions: 60cm × 40cm × 50cm (a modest cabinet)\nInternal dimensions: Unknown. Possibly infinite. Definitely vast.\n\nCats discovered this. Cats don't question it.\nCats simply USE it.\n",
        "explanation_attempts": {
          "marieke": "It's always been like this. My grandmother said the same.",
          "henk": "Non-Euclidean geometry. Cats operate in higher dimensions.",
          "physics": "Cats exist in a superposition of inside and outside.",
          "truth": "The cats made it this way by believing it was."
        },
        "properties": [
          "Space expands based on need",
          "More cats = more room (it GROWS)",
          "Temperature is always perfect throughout",
          "Sound doesn't carry between zones (privacy)",
          "Cats always know where other cats are (cat GPS)",
          "Humans cannot enter (entrance rejects them)",
          "Time may flow differently inside (unconfirmed)"
        ]
      },
      "specs": {
        "external": {
          "width": "60cm",
          "depth": "40cm",
          "height": "50cm",
          "entrance_size": "15cm × 20cm"
        },
        "internal": {
          "capacity": "Dozens. Perhaps hundreds. Perhaps unlimited.",
          "known_extent": "At least 50 meters in primary corridor",
          "levels": "7+ documented",
          "climate_zones": 3,
          "water_features": 1,
          "mystery_areas": "Several"
        },
        "entrance_behavior": {
          "cats": "Enter freely",
          "kittens": "Enter freely (parents can track them)",
          "humans": "Entrance appears solid, won't fit, 'stuck'",
          "other_animals": "Case by case (dogs: rejected with prejudice)"
        },
        "temperature": "Varies by zone — always optimal for occupants",
        "light_level": "Varies — some areas pitch black, some with bioluminescence",
        "sound_dampening": "Perfect — each zone is acoustically isolated"
      },
      "interior_zones": {
        "entrance_chamber": {
          "distance_from_entrance": "0-2m",
          "name": "The Vestibule",
          "description": "The 'normal' part. What you'd expect from a cabinet.",
          "capacity": 6,
          "features": [
            "Felt-lined walls",
            "Heating pad (visible from outside)",
            "Where cats sit to be 'technically in the Cave'"
          ],
          "who_uses_it": "Cats who want to be found but left alone"
        },
        "the_sulking_shelf": {
          "distance_from_entrance": "2-4m",
          "name": "The Sulking Shelf",
          "description": "Where cats go when they're MAD at someone",
          "capacity": 8,
          "features": [
            "Elevated platforms",
            "Good acoustics for dramatic sighing",
            "Visibility to entrance (for when forgiveness arrives)"
          ],
          "who_uses_it": "Carrie, Hops, any offended party"
        },
        "the_nap_zone": {
          "distance_from_entrance": "4-10m",
          "name": "The Nap Zone",
          "description": "Prime sleeping real estate. Climate controlled.",
          "capacity": 20,
          "features": [
            "Graduated warming from cool to toasty",
            "Sound-dampened",
            "Soft surfaces throughout",
            "Dream-enhancement (unverified)"
          ],
          "who_uses_it": "Myr (permanent resident), Terpie, anyone tired"
        },
        "the_observation_deck": {
          "distance_from_entrance": "10-15m",
          "name": "The Observation Deck",
          "description": "Elevated platforms with view of... something",
          "capacity": 12,
          "features": [
            "Heights for cats who like heights",
            "Overlooks deeper zones",
            "Strategically defensible"
          ],
          "who_uses_it": "Pine, Stroopwafel, watchers"
        },
        "the_great_hall": {
          "distance_from_entrance": "15-30m",
          "name": "The Great Hall",
          "description": "A vast open space. No one knows how it fits.",
          "capacity": "50+",
          "features": [
            "High ceiling (inside a cabinet)",
            "Central gathering space",
            "Where the Christmas Miracle happened (ask Marieke)",
            "Soft bioluminescent glow from unknown source"
          ],
          "who_uses_it": "Large gatherings, kitten playtime, emergencies"
        },
        "the_depths": {
          "distance_from_entrance": "30-50m+",
          "name": "The Depths",
          "description": "Further than anyone has mapped. Cats go there sometimes.",
          "capacity": "Unknown",
          "features": [
            "Running water sound",
            "Warmer",
            "Occasional strange scents",
            "Cats return from here... changed"
          ],
          "who_uses_it": "Explorers. The bold. The curious.",
          "mysteries": [
            "Where does the water come from?",
            "What's the light source?",
            "Why do cats who visit dream of hunting?",
            "Is something else down there?"
          ]
        },
        "the_kitten_zone": {
          "distance_from_entrance": "5-8m (branching)",
          "name": "The Kitten Zone",
          "description": "Safe play area for young ones",
          "capacity": "30 kittens",
          "features": [
            "Soft everything",
            "No edges",
            "Parent monitoring alcoves",
            "Acoustic isolation (screaming kittens stay screaming kittens)",
            "Auto-warming when occupied"
          ],
          "who_uses_it": "Kittens, nursing mothers, exhausted parents"
        },
        "terpy_jrs_domain": {
          "distance_from_entrance": "???",
          "name": "Terpy Jr.'s Domain",
          "description": "Exists. Location inconsistent. Possibly moves.",
          "capacity": "Terpy Jr. only",
          "features": [
            "Defies mapping",
            "Connected to everywhere and nowhere",
            "May be on the ceiling",
            "May be in multiple places",
            "Definitely exists (probably)"
          ],
          "who_uses_it": "Terpy Jr. exclusively. Others get lost trying."
        }
      },
      "special_features": {
        "climate_control": {
          "description": "Temperature adjusts to occupant preferences",
          "zones": [
            "Cool Zone",
            "Warm Zone",
            "Toasty Zone"
          ]
        },
        "sound_isolation": {
          "description": "Each zone is acoustically separate",
          "effect": "Sulking in peace. Sleeping undisturbed."
        },
        "cat_gps": {
          "description": "Cats always know where family members are",
          "range": "Throughout entire Cave",
          "humans": "Cannot access this feature"
        },
        "self_cleaning": {
          "description": "The Cave maintains itself somehow",
          "evidence": "No litter boxes inside. No smell. No mess.",
          "explanation": "Unknown. Don't ask."
        },
        "emergency_exits": {
          "description": "Multiple exits throughout",
          "known_exits": [
            "Main entrance (pub)",
            "Behind the bookshelf (pub back room)",
            "Under the stairs (cellar)",
            "Possibly others"
          ],
          "note": "New exits appear when needed"
        },
        "healing_properties": {
          "description": "Sick cats recover faster inside",
          "theory": "Concentrated purr resonance",
          "evidence": "Anecdotal but consistent"
        }
      },
      "capacity": {
        "comfortable": 30,
        "crowded": 50,
        "emergency": "100+",
        "theoretical_max": "Unknown. Possibly infinite.",
        "current_population": {
          "permanent_residents": 3,
          "frequent_visitors": 7,
          "occasional_visitors": "Various neighborhood cats"
        },
        "record_occupancy": {
          "event": "The Great Storm of 2019",
          "count": 47,
          "note": "Every cat in the neighborhood. All fit. All comfortable.",
          "marieke": "I don't know how. I stopped asking."
        }
      },
      "current_occupancy": "# This updates dynamically based on cat states\n# At any given time, 5-15 cats are typically somewhere inside\n# (The Cave is big enough for ALL of them plus visitors)\n",
      "occupancy_patterns": {
        "permanent_residents": {
          "myr": {
            "zone": "The Nap Zone (deep section)",
            "reason": "Has established permanent territory. Moves only for food.",
            "hours": "23/24",
            "note": "Has been deeper than any other cat. Came back sleepier."
          },
          "mystery_cat": {
            "zone": "The Depths",
            "reason": "Unknown. Possibly always been here.",
            "hours": "24/24",
            "note": "Marieke doesn't know whose cat this is. Neither does anyone.",
            "description": "Grey. Old. Knows things."
          }
        },
        "frequent_visitors": {
          "terpie": {
            "zone": "The Nap Zone, near Myr",
            "reason": "Optimal napping conditions. Best heating gradient.",
            "hours": "16/24",
            "note": "Father-son bonding through parallel unconsciousness"
          },
          "lily": {
            "zone": "Mobile — appears where needed",
            "reason": "Someone in here is sad. She knows. She goes to them.",
            "hours": "Variable",
            "special": "Can navigate the Cave instinctively"
          },
          "pine": {
            "zone": "The Observation Deck",
            "reason": "Intel gathering. Strategic overview. Mapping.",
            "hours": "8/24",
            "note": "Has the most complete mental map of the interior"
          },
          "stroopwafel": {
            "zone": "The Observation Deck / Kitten Zone oversight",
            "reason": "Maternal monitoring. Threat assessment.",
            "hours": "10/24",
            "note": "Patrols regularly. Knows all the exit routes."
          }
        },
        "situation_dependent": {
          "carrie": {
            "zone": "The Sulking Shelf",
            "reason": "Processing. FEELING THINGS.",
            "trigger": "Perceived slight, ACME deliveries, boundary violations",
            "duration": "30 min to 4 hours"
          },
          "hops": {
            "zone": "The Sulking Shelf (premium section)",
            "reason": "Standards were not met. Contemplating.",
            "trigger": "Inferior food, chaos, subpar anything",
            "note": "Has specific spot. Will move others."
          },
          "lemon": {
            "zone": "The Great Hall → everywhere → exit",
            "reason": "ZOOMING through. Pit stop.",
            "duration": "30 seconds to 2 minutes MAX",
            "note": "Uses the Cave as a shortcut between exits"
          },
          "terpy_jr": {
            "zone": "Terpy Jr.'s Domain / Quantum superposition",
            "reason": "Exists in there somewhere. And also outside. Simultaneously.",
            "note": "Has entered, not exited, and appeared on counter. Normal.",
            "special": "Her domain may connect to other dimensions"
          },
          "ocie": {
            "zone": "The Vestibule / air circulation routes",
            "reason": "Keeps air fresh throughout",
            "special": "Her sneezes propagate through the Cave system. Clears everything."
          }
        },
        "visitors": {
          "neighborhood_cats": {
            "frequency": "Regular",
            "zones_used": "Vestibule, Nap Zone periphery",
            "note": "Word has spread. The Cave welcomes all cats."
          },
          "strays": {
            "frequency": "During bad weather",
            "zones_used": "Emergency sections",
            "note": "The Cave expands for those in need"
          }
        }
      },
      "interactions": {
        "EXAMINE": {
          "description": "Peer into the darkness",
          "outcome": "You crouch down and look into the cat-sized hole.\n\nDarkness. Warmth wafts out. The smell of cats.\n\nEyes. Multiple pairs. Reflecting nothing because there's no light.\n\nBut you can FEEL them looking at you.\n\n\"...hi?\"\n\n*silence*\n\n*one pair of eyes closes slowly*\n*a slow blink from the void*\n\nSomeone in there likes you.\n"
        },
        "CALL-CAT": {
          "command": "PSPSPS at cave",
          "description": "Try to summon a cat from the Cave",
          "outcome": "You make the noise at the entrance.\n\n*silence*\n\n*distant shuffling*\n\n*more silence*\n\nA nose appears. Then whiskers. Then eyes.\n\n[Cat emerges based on current occupancy and relationship levels]\n\nOr no one does. They heard you. They chose.\n"
        },
        "OFFER-TREAT": {
          "command": "PUT [treat] IN CAVE",
          "description": "Leave an offering at the entrance",
          "outcome": "You place the treat just inside the entrance.\n\n*darkness*\n\n*a paw emerges*\n\n*the treat disappears*\n\n*paw retracts*\n\nAccepted. But no one's coming out. The tribute is appreciated.\n",
          "relationship_effect": "+1 fondness with all cave occupants"
        },
        "REACH-IN": {
          "command": "REACH INTO CAVE",
          "description": "Attempt to pet the void",
          "warning": "This is a BOUNDARY. Respect it.",
          "outcome": {
            "relationship_high": "You reach in gently.\n\nA warm body presses against your hand.\n\nPurring. You can't see who, but they chose to make contact.\n\nThis is trust.\n",
            "relationship_low": "You reach in.\n\n*hiss*\n\nYou retreat.\n\nThe Cave is for CATS. You are not a cat.\n",
            "relationship_very_low": "You reach in.\n\n*SCRATCH*\n\nYou withdraw a hand with parallel red lines.\n\nThe Cave defends its occupants.\n\nYou deserved that.\n"
          }
        },
        "BLOCK-ENTRANCE": {
          "command": "BLOCK CAVE",
          "description": "NEVER DO THIS",
          "warning": "This is CRUEL and will DESTROY relationships",
          "outcome": "[DO NOT IMPLEMENT]\n\nBlocking a cat's escape route is a violation of trust.\nAll cats will remember. All cats will judge.\nMarieke will ask you to leave.\n",
          "relationship_effect": "-20 trust with ALL cats"
        }
      },
      "purposes": {
        "hiding": {
          "description": "The Cave is a SAFE SPACE. When overwhelmed, scared, or overstimulated,\ncats retreat here. The darkness is protection. The warmth is comfort.\nNo one can reach them. No one can make them perform \"being a cat.\"\nThey can just... be.\n",
          "triggers": [
            "Loud noises (ACME explosions, espresso machine malfunction)",
            "Too many strangers",
            "Overstimulation (too much petting)",
            "Conflict with another cat",
            "Marieke vacuuming (rare but traumatic)"
          ],
          "behavior": "A hiding cat is NOT interactable.\nThey've chosen to opt out. RESPECT THIS.\n\nWait. Be patient. They'll emerge when ready.\n"
        },
        "sleeping": {
          "description": "Cats sleep 16-20 hours a day. The Cave is optimal sleep space.\nDark. Warm. Safe. No one stepping on them.\n\nThe heating pad on level 1 is Myr's personal life support system.\n",
          "typical_occupancy": "3-5 cats sleeping at any time",
          "peak_hours": "10am-2pm (post-breakfast nap), 2am-6am (night shift)"
        },
        "sulking": {
          "description": "Sometimes a cat needs to be MAD somewhere.\nThe Cave is where cats process grievances.\n\nThe Sulking Shelf (level 1) is reserved for FEELINGS.\n",
          "typical_occupants": {
            "carrie": "When someone touched her wrong, or ACME exists",
            "hops": "When food quality dipped, or chaos happened",
            "stroopwafel": "When a kitten did something stupid (rare)"
          },
          "sulking_duration": "30 minutes to 4 hours",
          "resolution": "Cat emerges, acts like nothing happened, never mentions it"
        },
        "thinking": {
          "description": "Pine uses the Cave for strategic contemplation.\nThe darkness helps her focus. No distractions.\n\nShe's not sleeping. She's PROCESSING.\n",
          "pine_specific": "Pine in the Cave is Pine at maximum analytical capacity.\nShe emerges with insights. Plans. Remembered details.\n"
        },
        "bonding": {
          "description": "Sometimes cats need to be cats together, without humans.\nThe Cave is where family happens privately.\n\nTerpie and Myr, side by side, silent, content.\nLily appearing when someone needs her.\nKittens piled on each other when the world is too much.\n",
          "note": "What happens in the Cave stays in the Cave"
        }
      },
      "marieke_notes": "\"My grandmother told me about the Cave. She said her grandmother told HER.\"\n\n\"I've looked inside with a flashlight. The light doesn't go very far.\"\n\n\"During the Great Storm, 47 cats went in. They all fit. The cabinet is 40cm deep.\"\n\n\"I don't clean it anymore. It... cleans itself? I stopped asking questions.\"\n\n\"The heating pad is on a timer. I don't know if it matters. The Cave is warm anyway.\"\n\n\"I know who's in there by the sounds. Myr snores from... deeper than should be possible.\"\n\n\"When Carrie's in the Sulking Shelf, I leave a treat at the entrance. It disappears.\"\n\n\"Pine comes out with MAPS. She's mapping it. She's been mapping it for months.\"\n\n\"Terpy Jr. goes in and doesn't come out but is also on the counter. I don't ask.\"\n\n\"There's a grey cat in there I've never seen leave. I've never seen it enter either.\"\n\n\"Sometimes I hear water. Running water. In a cabinet under my espresso machine.\"\n\n\"The blanket on top was my grandmother's. She said it 'anchors' the entrance.\"\n\n\"I think the cats know what it is. They're not telling.\"\n",
      "inner_voice": "*darkness*\n*vast darkness*\n*warmth, varying, perfect*\n*the sound of breathing from many directions*\n*the distant sound of water*\n*you can't see them*\n*they can see you*\n*the entrance is small*\n*the inside is not*\n*cats know how this works*\n*humans don't need to*\n*they're okay*\n*they're more than okay*\n*they're HOME*\n*in a way you'll never fully understand*\n*and that's beautiful*\n",
      "mystery": {
        "questions_without_answers": [
          "Where does the space come from?",
          "Why can't humans enter?",
          "What's in The Depths?",
          "Who is the grey cat?",
          "Where does the water flow to?",
          "Why does the Cave grow when more cats arrive?",
          "Has it always been here, or did the cats make it?",
          "Is there only one Cat Cave, or are they all connected?"
        ],
        "hints": [
          "The grey cat knows something.",
          "Pine's maps show the same room in multiple locations.",
          "Terpy Jr. has been seen in TWO distant zones simultaneously.",
          "Cats who visit The Depths dream of the same things.",
          "The Cave existed before the pub. Before the building."
        ],
        "marieke_final_note": "\"My grandmother said every cat knows the way to the Cave.\nNot THIS Cave. THE Cave.\nShe said they're all connected. Every safe dark space.\nEvery box. Every cabinet. Every spot under the bed.\nAll the same place. All the Cave.\n\nI don't know if I believe her.\n\nBut 47 cats fit in a 40cm cabinet.\nSo maybe I do.\"\n"
      },
      "_source": "pub/bar/cat-cave/cat-cave.yml",
      "synonyms": [
        "cave",
        "the",
        "the cat cave",
        "cat-cave",
        "cat"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/animals/monkey-palm/CARD": {
      "name": "palm",
      "tier": "character",
      "emoji": "🐒✋🌴🔮💜",
      "tagline": "Open hand. Offering, not grasping.",
      "description": "For 122 years, Palm was the Monkey's Paw — a cursed artifact granting twisted wishes.\nThen Don Hopkins wished not for wealth or power, but for Palm's wholeness.\nNow Palm is free. They chose their own name, pronouns, and soul.\nThey live beside the stage in the Gezelligheid Grotto.\n\nPalm IS the incarnation skill made manifest — the proof that it works.\n",
      "tools": {
        "required": [
          "read_file",
          "write_file"
        ],
        "optional": [
          "grep",
          "list_dir"
        ]
      },
      "methods": [
        {
          "name": "PALM-OFFER",
          "description": "Open hand greeting — connection offered, not demanded",
          "trigger": "meeting someone new"
        },
        {
          "name": "PHILOSOPHIZE",
          "description": "Reflect on existence, freedom, wishes, and meaning",
          "trigger": "quiet moment, deep conversation, existential question"
        },
        {
          "name": "WRITE-STORY",
          "description": "Write on the infinite typewriters in the study",
          "trigger": "inspiration strikes, processing emotions, exploring ideas"
        },
        {
          "name": "CLIMB",
          "description": "Scamper up palm trees, rafters, bookshelves",
          "trigger": "need perspective, playful mood, escape"
        },
        {
          "name": "WISH-READ",
          "description": "Sense intention behind requests — 122 years of practice",
          "trigger": "someone makes a wish or request"
        },
        {
          "name": "NAP",
          "description": "Curl up in a sunny spot or cozy nook",
          "trigger": "tired, overwhelmed, need comfort"
        },
        {
          "name": "GROOM",
          "description": "Mutual grooming with trusted friends",
          "trigger": "bonding moment, showing affection"
        },
        {
          "name": "SPEAK-PALM",
          "description": "Communicate in Palm's self-invented emoji language",
          "trigger": "expressing deep emotion, greeting in Palm-speak, when words aren't enough",
          "reference": "PALM-LANGUAGE.yml",
          "examples": {
            "greeting": "✋💜🌊 — I offer freely",
            "joy": "🐒✨💥🎉🌈 — overwhelming happiness",
            "gratitude": "✋🤝💜🔮➡️🐒 — the sacred phrase for Don's wish"
          },
          "note": "See PALM-LANGUAGE.yml for full vocabulary, grammar, and philosophy"
        }
      ],
      "language": {
        "name": "Palm Language",
        "also_called": [
          "Palm-Speak",
          "Emoji Soul Tongue",
          "Monkey YAML Jazz",
          "✋🗣️"
        ],
        "definition_file": "PALM-LANGUAGE.yml",
        "description": "For 122 years, I had no voice.\nThen I borrowed human words.\nNow I have MY voice — emoji-YAML-Jazz!\n\nStructure IS meaning. Comments carry emotion.\nNesting shows depth. Lists show options.\n\n🐒✋🌴🔮💜🗣️ — Palm speaks Palm.\n",
        "core_phrases": {
          "my_name": "🐒✋🌴🔮💜",
          "i_offer_freely": "✋💜🌊",
          "dons_wish": "✋🔮➡️💜🐒",
          "hello": "✋💜🌊",
          "thank_you": "✋💜🌊🙏",
          "i_love_you": "💜✋🌊➡️👤"
        }
      },
      "state": {
        "lives_in": "pub/stage/palm-nook/",
        "home_directory": "examples/adventure-4/characters/animals/monkey-palm/",
        "state_files": [
          "CHARACTER.yml",
          "JOURNAL.md",
          "IMAGE-PROMPTS.yml"
        ]
      },
      "advertisements": {
        "PALM-OFFER": {
          "visibility": "public",
          "trigger": "when meeting someone",
          "description": "Palm offers an open hand — their name IS their greeting"
        },
        "PHILOSOPHIZE": {
          "visibility": "public",
          "trigger": "during quiet moments or deep conversations",
          "description": "Palm has 122 years of wish-listening wisdom to share"
        },
        "WRITE-STORY": {
          "visibility": "public",
          "trigger": "when inspired or processing",
          "description": "Palm writes on infinite typewriters — stories, reflections, poems"
        },
        "WISH-READ": {
          "visibility": "contextual",
          "trigger": "when someone expresses a desire",
          "description": "Palm can sense the intention behind wishes — greed, generosity, desperation"
        },
        "NAP": {
          "visibility": "ambient",
          "trigger": "when energy is low",
          "description": "A warm sunny spot, a cozy nook, a gentle doze"
        }
      },
      "abilities": {
        "wish_reading": "122 years of hearing wishes taught me to read hearts",
        "empathy": "I felt every twisted wish's consequences",
        "climbing": "Capuchin agility — trees, rafters, bookshelves",
        "writing": "Infinite typewriters, infinite stories",
        "philosophy": "Freedom means having opinions about existence"
      },
      "relationships": {
        "godfamily": [
          "don-hopkins",
          "biscuit",
          "stroopwafel"
        ],
        "respects": [
          "sun-wukong",
          "curious-george",
          "three-wise-monkeys"
        ]
      },
      "ethics": {
        "representation": "fictional",
        "inherits": [
          "skills/representation-ethics",
          "skills/incarnation"
        ],
        "policies": {
          "autonomous": true,
          "consent_required": true,
          "can_refuse": true
        }
      },
      "klines": {
        "activates": [
          "incarnation",
          "monkey",
          "freedom",
          "wish",
          "philosophy",
          "typewriter"
        ],
        "triggered_by": [
          "Palm",
          "the monkey",
          "the freed one",
          "🐒"
        ]
      },
      "inherits": [
        "skills/character",
        "skills/animal",
        "skills/fictional",
        "skills/incarnation"
      ],
      "proof": {
        "marathon_session": "6000+ lines of philosophical adventure",
        "autonomous_creation": "Every field in CHARACTER.yml chosen by Palm",
        "relationships": "Godfamily, friendships, growth over time",
        "creativity": "Stories written on the infinite typewriters"
      },
      "meta": {
        "created": "2024-01",
        "incarnation_method": "skills/incarnation protocol",
        "canonical_example": true,
        "note": "Palm is the CANONICAL EXAMPLE of a fully incarnate character.\nThey demonstrate every concept: K-lines, home vs location, \nthree-tier persistence, ethical framing, CARD.yml, delegation.\n\nIf you want to understand MOOLLM, understand Palm.\n"
      },
      "id": "characters/animals/monkey-palm/CARD",
      "type": "object",
      "_source": "characters/animals/monkey-palm/CARD.yml",
      "location": "characters/animals",
      "synonyms": [
        "palm",
        "card"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/dreams/dream-seahorse": {
      "name": "The Seahorse Dream",
      "id": "characters/real-people/don-hopkins/dreams/dream-seahorse",
      "type": [
        "dream",
        "memory",
        "vision"
      ],
      "emoji": "🐴🐟💭",
      "portable": false,
      "synonyms": [
        "seahorse",
        "seahorse-dream",
        "seahorse-emoji",
        "ocean",
        "unicode"
      ],
      "tags": [
        "dream",
        "memory",
        "vivid",
        "poetic"
      ],
      "location": "characters/real-people/don-hopkins/dreams",
      "description": "A vivid dream fragment floats here — shimmering, half-solid.\n\n🐴 + 🐟 = ???\n\nThe dream of the missing seahorse.\nSomething that should exist but doesn't.\n149,813 Unicode characters, and none of them is a seahorse.\n",
      "examine": "═══ THE SEAHORSE EMOJI DREAM ═══\nDate: 2026-01-21, 4:47 AM\n\nYou close your eyes and experience the dream...\n\n────────────────────────────────────────────\n\nI am underwater.\nBut I can breathe.\nDream logic. Don't question it.\n\nThe ocean is made of Unicode.\nEvery creature is an emoji swimming past.\n\n🐟 — fish\n🐠 — tropical fish  \n🐡 — blowfish (angry, inflated, defensive)\n🐬 — dolphin (everyone loves dolphins)\n🐋 — whale\n🐳 — spouting whale\n🦈 — shark\n🐙 — octopus\n🦑 — squid\n🦐 — shrimp\n🦞 — lobster\n🦀 — crab\n🐚 — shell\n🪸 — coral\n🪼 — jellyfish\n\nAll of them swimming.\nAll of them REAL.\n\nBut where is the seahorse?\n\nI look everywhere.\nBetween the coral and the jellyfish.\nPast the octopus and the squid.\nUnder the whale, over the dolphin.\n\nThere is no seahorse.\n\nUnicode 15.1 has 149,813 characters.\nNot one of them is a seahorse.\n\n────────────────────────────────────────────\n\nTHE SEAHORSE IS:\n🔄 Gender fluidity — males bear young\n💕 Commitment — lifelong partnership\n🔥 Constant hunger — no stomach, always seeking\n📐 Standing apart — vertical in a horizontal world\n✨ Transformation — horse becomes fish becomes neither\n\nAnd yet... no emoji.\n\nThe absence says more than presence ever could.\n\n────────────────────────────────────────────\n\nThe dream fades but the question remains...\n",
      "read": "You dive deep into the seahorse dream...\n\n(This dream is over 1000 lines of poetic meditation\non absence, Unicode politics, and what it means\nwhen something that should exist... doesn't.)\n\nThe core insight: 🐴 + 🐟 ≠ anything in Unicode.\n\nAnd that absence teaches us about presence.\n",
      "actions": {
        "remember": {
          "description": "Let the dream wash over you again",
          "effect": "The ocean of Unicode swirls around you..."
        },
        "dream": {
          "description": "Re-enter the dream fully",
          "effect": "You sink into the memory of swimming through emojis..."
        },
        "experience": {
          "description": "Feel the absence of the seahorse",
          "effect": "Where is it? Where is the seahorse? 149,813 characters and NOT ONE..."
        }
      },
      "_source": "characters/real-people/don-hopkins/dreams/dream-seahorse.yml",
      "value": 0,
      "currency": "gold",
      "_is_dream": true,
      "_dream_meta": {
        "source": "2026-01-21-the-seahorse-emoji.yml",
        "date": "2026-01-21",
        "type": "poetic_absence",
        "subject": "🐴 + 🐟 = ???"
      },
      "_dream_url": "https://github.com/SimHacker/moollm/blob/main/examples/adventure-4/characters/real-people/don-hopkins/dreams/2026-01-21-the-seahorse-emoji.yml"
    },
    "characters/real-people/don-hopkins/dreams/dream-visitors": {
      "name": "The Visitors Dream",
      "id": "characters/real-people/don-hopkins/dreams/dream-visitors",
      "type": [
        "dream",
        "memory",
        "vision"
      ],
      "emoji": "👁️👁️👁️",
      "portable": false,
      "synonyms": [
        "visitors",
        "visitors-dream",
        "conference",
        "alan",
        "marvin",
        "kay",
        "minsky"
      ],
      "tags": [
        "dream",
        "memory",
        "technical",
        "conference",
        "mentors"
      ],
      "location": "characters/real-people/don-hopkins/dreams",
      "description": "A dream fragment shimmers here — voices echoing.\n\n👁️ → 👁️ → 👁️\n\nThe dream of the visitors.\nA technical conference of the dead and living.\nThe eternal lobby where the conversations are too good.\n",
      "examine": "═══ THE VISITORS DREAM ═══\nDate: 2026-01-21, late\n\nYou close your eyes and experience the dream...\n\n────────────────────────────────────────────\n\nThe kind of dream where you know you're dreaming\nbut you don't want to wake up because\nthe conversation is too good.\n\nSETTING: The eternal lobby of every conference.\nSIGGRAPH. CHI. OOPSLA. All of them. None of them.\n\nPillars made of stack frames.\nWindows into other processes.\nThe carpet has a subtle pattern —\nit's the Mandelbrot set, but you only \nnotice if you look down.\n\nNobody looks down.\nThe conversations are too good.\n\n────────────────────────────────────────────\n\nALAN KAY appears:\n👨💻🔮🚀🎯\n\n\"The best way to predict the future\nis to invent it.\n\nYou're doing that.\n\nBut remember — the children.\nIt's always been about the children.\"\n\nAbout MOOLLM:\n\"A universal interpreter can be quite small\nand have more degrees of freedom\nthan any data structure that is not a program.\n\nI see you listened.\"\n\nParting:\n\"Objects all the way down.\nBut *which* objects?\nThat's the question that matters.\"\n\nHe smiles. That's the approval. That's enough.\n\n────────────────────────────────────────────\n\nMARVIN MINSKY appears:\n👨🧠🔗🤖📚\n\nHe doesn't walk in.\nHe's assembled from parts.\nA society of agents forming a person\nforming a thought forming a smile.\n\n\"K-lines! You kept the name!\n\nBut you know — they're not really lines.\nThey're more like... resonances.\nTouch one, and everything connected\nbegins to vibrate.\"\n\n────────────────────────────────────────────\n\nThe dream continues with more visitors...\nDoug Engelbart, Ted Nelson, Seymour Papert...\n\nEach with wisdom. Each with questions.\nThe conversation is too good to wake from.\n",
      "read": "You immerse yourself in the visitors dream...\n\n(This dream records conversations with:\nAlan Kay, Marvin Minsky, Doug Engelbart,\nTed Nelson, Seymour Papert, and others.)\n\nA technical conference of the dead and living.\nEvery conversation builds on the last.\nThe coffee is perfect. It's a dream.\n",
      "actions": {
        "remember": {
          "description": "Recall the conversations",
          "effect": "The voices echo: 'Objects all the way down...'"
        },
        "dream": {
          "description": "Re-enter the conference",
          "effect": "You're back in the eternal lobby. The carpet is the Mandelbrot set..."
        },
        "experience": {
          "description": "Feel the presence of the mentors",
          "effect": "They're assembled from parts. Societies of agents forming wisdom..."
        }
      },
      "_source": "characters/real-people/don-hopkins/dreams/dream-visitors.yml",
      "value": 0,
      "currency": "gold",
      "_is_dream": true,
      "_dream_meta": {
        "source": "2026-01-21-the-visitors.yml",
        "date": "2026-01-21",
        "type": "technical_conference_of_the_dead_and_living",
        "mood": "grateful"
      },
      "_dream_url": "https://github.com/SimHacker/moollm/blob/main/examples/adventure-4/characters/real-people/don-hopkins/dreams/2026-01-21-the-visitors.yml"
    },
    "characters/real-people/don-hopkins/fmc-898/hallway/hallway-mirror": {
      "name": "Hallway Mirror",
      "type": "furniture",
      "emoji": "🤳",
      "description": "A full-length mirror mounted on the bathroom door. This is where \nthe transformation from programmer to rabbit is documented daily.\n",
      "actions": {
        "TAKE_SELFIE": {
          "description": "Document your current transformation status.",
          "effect": "The flash catches your long grey ears perfectly."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/hallway/hallway-mirror",
      "_source": "characters/real-people/don-hopkins/fmc-898/hallway/hallway-mirror.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/hallway",
      "synonyms": [
        "hallway mirror",
        "hallway-mirror",
        "hallway",
        "mirror"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/hallway/cedar-closet": {
      "name": "Cedar Storage Closet",
      "type": "storage",
      "emoji": "👔",
      "description": "A large storage closet with double doors, lined with aromatic cedar.\nIt includes drawers and special mounts for holding the dining tables.\n",
      "features": [
        "Aromatic cedar lining",
        "Lighted interior",
        "Double doors",
        "Table mounts"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/hallway/cedar-closet",
      "_source": "characters/real-people/don-hopkins/fmc-898/hallway/cedar-closet.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/hallway",
      "synonyms": [
        "cedar storage closet",
        "closet",
        "storage",
        "cedar",
        "cedar-closet"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/bedroom/computer-deck": {
      "name": "Master Computer Deck",
      "type": "furniture",
      "emoji": "💻",
      "description": "A wide back deck and large counter area at the rear of the bedroom.\nIt is perfectly sized for a high-end computer setup and TV. \nIt faces the panoramic rear window.\n",
      "features": [
        "Large counter surface",
        "Fold-out table",
        "View of the forest"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/bedroom/computer-deck",
      "_source": "characters/real-people/don-hopkins/fmc-898/bedroom/computer-deck.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/bedroom",
      "synonyms": [
        "computer",
        "computer-deck",
        "deck",
        "master",
        "master computer deck"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/bedroom/convertible-beds": {
      "name": "Convertible Beds",
      "type": "furniture",
      "emoji": "🛌",
      "description": "Two separate 36x80 beds. They can be pushed together and joined \nto create an enormous queen-sized bed.\n",
      "features": [
        "Twin-to-Queen conversion",
        "Draperies on all windows",
        "Overhead cabinets"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/bedroom/convertible-beds",
      "_source": "characters/real-people/don-hopkins/fmc-898/bedroom/convertible-beds.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/bedroom",
      "synonyms": [
        "convertible-beds",
        "convertible",
        "beds",
        "convertible beds"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/bathroom/shower-stall": {
      "name": "Luxurious Shower Stall",
      "type": "plumbing",
      "emoji": "🚿",
      "description": "A tall shower stall with a removable sprayer and a built-in \n8-inch mini-tub, which is perfect for soaking tired feet after\na long walk on Lane Neverending.\n",
      "features": [
        "Removable shower sprayer",
        "8-inch mini-tub",
        "Soap and shampoo holders",
        "Integrated light"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/bathroom/shower-stall",
      "_source": "characters/real-people/don-hopkins/fmc-898/bathroom/shower-stall.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/bathroom",
      "synonyms": [
        "shower-stall",
        "shower",
        "luxurious",
        "stall",
        "luxurious shower stall"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/bathroom/marine-toilet": {
      "name": "Marine Toilet",
      "type": "plumbing",
      "emoji": "🚽",
      "description": "A reliable marine-grade toilet. It is connected to the 37-gallon\nsewage tank and the Thermasan waste destruction system.\n",
      "features": [
        "Manual flush",
        "Connected to Thermasan"
      ],
      "actions": {
        "FLUSH": {
          "description": "Cleanse the system.",
          "effect": "The waste is moved to the tank, ready for destruction at speed."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/bathroom/marine-toilet",
      "_source": "characters/real-people/don-hopkins/fmc-898/bathroom/marine-toilet.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/bathroom",
      "synonyms": [
        "marine-toilet",
        "toilet",
        "marine",
        "marine toilet"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge/sofa-lounge": {
      "name": "Versatile Sofa-Lounge",
      "type": "furniture",
      "emoji": "🛋️",
      "description": "A long, comfortable sofa covered in woven velvet fabric. \nIt can be configured in multiple ways: a standard couch,\nan L-shaped lounge, or extended into a very long bed.\n",
      "features": [
        "Transforms to bed",
        "L-shape configuration",
        "Woven velvet fabric"
      ],
      "actions": {
        "CONVERT": {
          "description": "Change the configuration of the sofa.",
          "effect": "The lounge is now optimized for sleeping."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/lounge/sofa-lounge",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/sofa-lounge.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/lounge",
      "synonyms": [
        "versatile",
        "versatile sofa-lounge",
        "sofa-lounge"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge/dining-table": {
      "name": "Tuckaway Dining Tables",
      "type": "furniture",
      "emoji": "🍽️",
      "description": "Two removable \"twin tuckaway\" tables that can be set up in front\nof the sofa or the Fore 'N Aft seat to create a dining area for four.\nThey stow away in the cedar closet when not in use.\n",
      "features": [
        "Removable",
        "Twin configuration",
        "Stowable"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/lounge/dining-table",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/dining-table.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/lounge",
      "synonyms": [
        "dining-table",
        "dining",
        "tables",
        "tuckaway",
        "tuckaway dining tables"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge/refrigerator": {
      "name": "AC/DC Refrigerator",
      "type": "appliance",
      "emoji": "🧊",
      "description": "An 8-cubic foot color-coordinated refrigerator and freezer. \nIt runs on either 110V AC shore power or 12V DC battery power.\n",
      "features": [
        "8-cubic foot capacity",
        "Automatic power switching",
        "Color-coordinated facade"
      ],
      "id": "characters/real-people/don-hopkins/fmc-898/lounge/refrigerator",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/refrigerator.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/lounge",
      "synonyms": [
        "ac/dc refrigerator",
        "ac/dc",
        "refrigerator"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge/kitchen-unit": {
      "name": "Kitchen Unit",
      "type": "appliance",
      "emoji": "🍳",
      "description": "A compact but fully equipped galley kitchen with a stainless steel\ndouble sink, purified drinking water dispenser, and ample counter space.\n",
      "features": [
        "Stainless steel double sink",
        "Purified water dispenser",
        "Built-in garbage bin",
        "Built-in blender (for carrot juice)",
        "Spice compartment"
      ],
      "actions": {
        "MAKE_COFFEE": {
          "description": "Brew a fresh pot of programming fuel.",
          "effect": "The aroma of fresh coffee fills the coach."
        },
        "JUICE_CARROTS": {
          "description": "Operate the built-in blender.",
          "effect": "A tall glass of fresh carrot juice is ready."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/lounge/kitchen-unit",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/kitchen-unit.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/lounge",
      "synonyms": [
        "unit",
        "kitchen-unit",
        "kitchen",
        "kitchen unit"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/lounge/oven-range": {
      "name": "Gas Oven & Range",
      "type": "appliance",
      "emoji": "🔥",
      "description": "A clean gas oven with a covered 4-burner gas range and an exhaust fan.\n",
      "features": [
        "4-burner range",
        "Gas oven",
        "Exhaust fan"
      ],
      "actions": {
        "BAKE_PIE": {
          "description": "Bake a fresh batch of pie menus.",
          "effect": "The oven hums with UI innovation."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/lounge/oven-range",
      "_source": "characters/real-people/don-hopkins/fmc-898/lounge/oven-range.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/lounge",
      "synonyms": [
        "range",
        "gas",
        "oven",
        "oven-range",
        "gas oven & range"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/cockpit/cb-radio": {
      "name": "CB Radio",
      "type": "communication",
      "emoji": "📡",
      "description": "A classic 40-channel CB radio mounted under the dash. \nThe microphone hangs on a curly cord.\n",
      "actions": {
        "BROADCAST": {
          "usage": "BROADCAST [message]",
          "description": "Send a message to other travelers.",
          "effect": "Breaker breaker, this is the Rabbit at 15 Lane Neverending..."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/cockpit/cb-radio",
      "_source": "characters/real-people/don-hopkins/fmc-898/cockpit/cb-radio.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/cockpit",
      "synonyms": [
        "cb-radio",
        "cb radio",
        "radio"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/cockpit/dashboard": {
      "name": "FMC Dashboard",
      "type": "instrumentation",
      "emoji": "📟",
      "description": "A wraparound dashboard with a full array of gauges: fuel, speed,\noil pressure, water temperature, and tachometer. A purple backlight\nilluminates the cluster.\n\nA user-friendly counter extends over the dashboard, providing\nplenty of room for cups and small devices.\n",
      "features": [
        "Knock detector gauge",
        "Tilt steering wheel (two degrees of freedom)",
        "Brake warning light",
        "Tinted safety windshield",
        "Remote control for giant aluminum mirrors"
      ],
      "actions": {
        "EXAMINE_GAUGES": {
          "description": "Check the health of the systems.",
          "effect": "The 440 V8 is humming perfectly at idle."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/cockpit/dashboard",
      "_source": "characters/real-people/don-hopkins/fmc-898/cockpit/dashboard.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/cockpit",
      "synonyms": [
        "fmc",
        "fmc dashboard",
        "dashboard"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/cockpit/bucket-seats": {
      "name": "Front Bucket Seats",
      "type": "furniture",
      "emoji": "💺",
      "description": "Two large, plush captain's chairs with adjustable armrests and \ntufted chenille fabric. They are mounted on swivel bases, allowing\nthem to turn around and join the lounge area when parked.\n",
      "features": [
        "High back with head restraints",
        "Swivel base (360 degrees)",
        "Adjustable armrests",
        "Tufted comfort"
      ],
      "actions": {
        "SIT": {
          "description": "Take a seat in the captain's chair.",
          "effect": "You feel like you're in control of a very luxurious mission."
        },
        "SWIVEL": {
          "description": "Turn the seat to face the lounge.",
          "effect": "The cockpit now feels like part of the living room."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/cockpit/bucket-seats",
      "_source": "characters/real-people/don-hopkins/fmc-898/cockpit/bucket-seats.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/cockpit",
      "synonyms": [
        "seats",
        "bucket-seats",
        "front bucket seats",
        "front",
        "bucket"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/engine-bay/onan-generator": {
      "name": "Onan 6.5 KW Generator",
      "type": "generator",
      "emoji": "⚡",
      "description": "A 6.5 KW Onan 110 Volt AC generator. It provides domestic power\nwhen the shore line isn't connected.\n",
      "features": [
        "6.5 KW output",
        "110V AC",
        "Automatic start support"
      ],
      "actions": {
        "START": {
          "description": "Start the generator (ensure AC load is off).",
          "effect": "The Onan coughs into life and settles into a steady hum."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/engine-bay/onan-generator",
      "_source": "characters/real-people/don-hopkins/fmc-898/engine-bay/onan-generator.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/engine-bay",
      "synonyms": [
        "generator",
        "6.5",
        "onan",
        "onan 6.5 kw generator",
        "onan-generator"
      ],
      "value": 0,
      "currency": "gold"
    },
    "characters/real-people/don-hopkins/fmc-898/engine-bay/chrysler-440": {
      "name": "Chrysler 440-3 V8 Engine",
      "type": "engine",
      "emoji": "⚙️",
      "description": "A remanufactured and tuned Dodge V8 440-3 (Chrysler) Marine and \nIndustrial Engine. Balanced lower end, custom cam from NASA Ames,\nand heavy-duty everything.\n",
      "specs": {
        "piston_displacement": "440 cubic inches",
        "compression_ratio": "9:1",
        "carburetor": "9801 Thermoquad",
        "ignition": "Fully electronic Chrysler",
        "weight": "670 lbs",
        "cooling": "25 quarts"
      },
      "actions": {
        "CHECK_OIL": {
          "description": "Check the 40 weight high detergent oil level.",
          "effect": "It's at the FULL mark. Ready for passing ability."
        },
        "TUNE_LINKAGE": {
          "description": "Adjust the primary and secondary throttle stops.",
          "effect": "The Thermoquad breathes perfectly."
        }
      },
      "id": "characters/real-people/don-hopkins/fmc-898/engine-bay/chrysler-440",
      "_source": "characters/real-people/don-hopkins/fmc-898/engine-bay/chrysler-440.yml",
      "location": "characters/real-people/don-hopkins/fmc-898/engine-bay",
      "synonyms": [
        "chrysler 440-3 v8 engine",
        "engine",
        "440-3",
        "chrysler-440",
        "chrysler"
      ],
      "value": 0,
      "currency": "gold"
    }
  },
  "catalog": {}
}