permanent-underclass-linux-x64 0.1.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,145 @@
1
+ {"id": "plumber_01_data_center_broke_ground", "phase": "Early", "title": "Data Center Broke Ground Tuesday", "body": "Hyperscale data center on the old soybean fields off Route 9. Your union rep calls before coffee: they need 200 licensed plumbers, yesterday. $180/hr weekend shifts, prevailing wage plus benefits. Your neighbor with the Stanford hoodie just got laid off and texts asking if you're hiring.", "choices": [{"title": "Take every weekend shift offered", "body": "Take every weekend shift they'll give you. Sleep when you're dead.", "delta": {"money": 3500, "sanity": -10, "audience": 0, "ai_skill": 5, "friends": -8}, "min_money": null}, {"title": "Refer the Stanford kid, one shift", "body": "Refer the Stanford neighbor, take one shift a week yourself.", "delta": {"money": -1000, "sanity": 2, "audience": 4, "ai_skill": 0, "friends": 10}, "min_money": 1000, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Pass, already booked through spring", "body": "You're booked solid. Let someone else chase the gold rush.", "delta": {"money": 0, "sanity": 8, "audience": 3, "ai_skill": 0, "friends": 1}, "min_money": null}], "allow_freeform": true}
2
+ {"id": "plumber_02_learn_to_code_guy", "phase": "Early", "title": "\"Learn To Code\" Guy Wants Coffee", "body": "Derek spent three years telling you trades were dead-end. Now he's in a six-week plumbing apprenticeship. He found you through your cousin, sent four follow-up texts, and wants to \"pick your brain.\" He does not know what a P-trap is.", "choices": [{"title": "Mentor Derek, be the bigger man", "body": "Meet Derek. Teach him properly. Resist the urge to gloat.", "delta": {"money": 0, "sanity": -5, "audience": 4, "ai_skill": 0, "friends": 7}, "min_money": null, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Send the IBEW link, nothing else", "body": "Text him the apprenticeship link. Do not reply further.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": 0, "friends": -1}, "min_money": null}, {"title": "Charge $200 consulting fee for coffee", "body": "Your time has a rate. Derek can pay it like everyone else.", "delta": {"money": 200, "sanity": 2, "audience": 4, "ai_skill": 0, "friends": -6}, "min_money": null}], "allow_freeform": true}
3
+ {"id": "plumber_03_permit_inspector_favor", "phase": "Early", "title": "Ron the Inspector Has a Proposition", "body": "You've pulled enough permits that inspector Ron waves you through. Ron moonlights as a landlord and has a rental with \"some plumbing issues.\" He'll fast-track your next three permits for a weekend of free work. Technically not corruption. Technically.", "choices": [{"title": "Do the work, take the favors", "body": "Weekend of work for months of smooth permits. Easy math.", "delta": {"money": 800, "sanity": -6, "audience": 0, "ai_skill": 4, "friends": 2}, "min_money": null, "effects": [{"op": "set_flag", "flag": "made_industry_contact"}]}, {"title": "Decline, keep the relationship clean", "body": "You don't need favors. You need a clear conscience.", "delta": {"money": 0, "sanity": 8, "audience": 4, "ai_skill": 0, "friends": 1}, "min_money": null}, {"title": "Do it but document everything", "body": "Help Ron, but put it all in writing. Insurance policy.", "delta": {"money": 400, "sanity": -2, "audience": 4, "ai_skill": 4, "friends": -4}, "min_money": null}], "allow_freeform": true}
4
+ {"id": "plumber_04_foreman_wants_the_app", "phase": "Early", "title": "Foreman Wants You on \"The App\"", "body": "Company licensed $40/month project management software a podcast founder called \"Slack meets Jira meets your grandma's recipe box.\" Everyone must log hours, materials, and \"daily wins\" by EOD. Push notifications contain the word \"synergy.\"", "choices": [{"title": "Learn it, become reluctant IT guy", "body": "Master the app. Become the crew's tech support. Regret it immediately.", "delta": {"money": 0, "sanity": -7, "audience": 4, "ai_skill": 8, "friends": 2}, "min_money": null, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Log bare minimum, ignore the rest", "body": "Type the numbers. Close the app. Go back to actual work.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": -1, "friends": 0}, "min_money": null}, {"title": "Paper timesheets, hand to foreman", "body": "Your handwriting is fine. The app can wait.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": -2, "friends": 5}, "min_money": null, "effects": [{"op": "set_flag", "flag": "rejected_ai"}]}], "allow_freeform": true}
5
+ {"id": "plumber_05_tech_podcast_interview", "phase": "Early", "title": "\"Future of Work\" Podcast Wants You", "body": "Podcast called \"Future of Work Unplugged\" with 200K subscribers wants to interview \"a skilled plumber for balance.\" Host's bio says he lives at the intersection of technology and humanity. Segment title in his accidentally-attached pitch deck: \"The Last Human Jobs???\"", "choices": [{"title": "Do it, be diplomatically honest", "body": "Go on. Be yourself. Let them deal with it.", "delta": {"money": 0, "sanity": -4, "audience": 10, "ai_skill": 0, "friends": 6}, "min_money": null, "effects": [{"op": "set_flag", "flag": "built_following"}]}, {"title": "Pass, don't need the exposure", "body": "You have enough work. You don't need 200K people knowing your name.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Invoice them your day rate", "body": "Your time costs money. Even for content.", "delta": {"money": 1200, "sanity": 2, "audience": 4, "ai_skill": 0, "friends": -6}, "min_money": null}], "allow_freeform": true}
6
+ {"id": "plumber_06_overtime_season", "phase": "Early", "title": "Overtime Season Hits Different", "body": "Commercial build season. Six-day weeks. Your body is tired in the good concrete way, not the bad spreadsheet way. Savings account growing. Wife noticing. Former coworker Brad who pivoted to \"AI consulting\" is billing $85/hr and telling people he's killing it.", "choices": [{"title": "Push through, bank every dollar", "body": "Sleep is for winter. Money is for now.", "delta": {"money": 3800, "sanity": -10, "audience": 0, "ai_skill": 4, "friends": -10}, "min_money": null}, {"title": "Scale to five days, protect marriage", "body": "Money means nothing if you come home to an empty house.", "delta": {"money": -500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 500, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Split weekends with apprentice", "body": "Bring the apprentice on Saturdays. Train and share the load.", "delta": {"money": -800, "sanity": 1, "audience": 0, "ai_skill": 6, "friends": 8}, "min_money": 800}], "allow_freeform": true}
7
+ {"id": "plumber_07_crawl_space_incident", "phase": "Early", "title": "The Crawl Space From Hell", "body": "Fourteen inches of clearance, standing water, knob-and-tube wiring from the Eisenhower era. GC wants it done by Thursday. Your apprentice looks at the space and asks \"can't a robot do this?\" You look at the standing water near live wire. No. No it cannot.", "choices": [{"title": "Do it yourself, bill hazard premium", "body": "Mud, wire, and money. The holy trinity.", "delta": {"money": 1500, "sanity": -7, "audience": 0, "ai_skill": 5, "friends": -1}, "min_money": null}, {"title": "Refuse until proper safety clearance", "body": "Nobody dies on your watch. Not for a Thursday deadline.", "delta": {"money": -200, "sanity": 10, "audience": 7, "ai_skill": 0, "friends": 2}, "min_money": 200, "effects": [{"op": "set_flag", "flag": "blew_the_whistle"}]}, {"title": "Send the apprentice, teaching moment", "body": "Best way to learn is face-down in crawl space mud.", "delta": {"money": 0, "sanity": -8, "audience": 0, "ai_skill": 4, "friends": -4}, "min_money": null}], "allow_freeform": true}
8
+ {"id": "plumber_08_copper_spike", "phase": "Early", "title": "Copper Prices Just Spiked Again", "body": "Supplier calls: copper up 18%. Lead times worse. Parts list is now a suggestion. Foreman asks if you can \"make it work.\" You can. It'll take planning, substitutions, and creative profanity.", "choices": [{"title": "Redesign runs, minimize waste", "body": "Reroute everything. Use less material. Bill the same.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 8, "friends": 1}, "min_money": null}, {"title": "Weekend shifts when materials arrive", "body": "Wait it out, then work double when the copper shows up.", "delta": {"money": 3000, "sanity": -8, "audience": 0, "ai_skill": 0, "friends": -4}, "min_money": null}, {"title": "Blame the supplier like everyone else", "body": "Not your fault. Not your problem. Pass the delay up the chain.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": -1, "friends": -2}, "min_money": null}], "allow_freeform": true}
9
+ {"id": "plumber_09_apprentice_drone", "phase": "Early", "title": "Apprentice Brought a Drone to Site", "body": "New apprentice shows up with a drone and GoPro. Wants to \"document the build\" for TikTok. You see trip hazards, live panels, and crew who didn't consent to becoming content.", "choices": [{"title": "Set safety rules, then let him film", "body": "Rules first. Content second. Nobody gets hurt or doxxed.", "delta": {"money": 0, "sanity": -4, "audience": 6, "ai_skill": 1, "friends": 6}, "min_money": null}, {"title": "Shut it down, no filming on site", "body": "This is a job site, not a studio. Drone goes in the truck.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": 0, "friends": -2}, "min_money": null}, {"title": "Let him film you, get your name out", "body": "Free marketing. Just make sure your good side is showing.", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 0, "friends": 2}, "min_money": null, "effects": [{"op": "set_flag", "flag": "built_following"}]}], "allow_freeform": true}
10
+ {"id": "plumber_10_vr_safety_module", "phase": "Early", "title": "VR Safety Training Smells Like 40 Heads", "body": "Company mandates a VR safety module with AI narrator. Headset smells like every forehead that came before you. It tracks your \"attention\" and grades you on safety. Something that has never carried a spool up a ladder is judging your competence.", "choices": [{"title": "Take it seriously, might learn something", "body": "Even stupid training has a useful nugget. Find it.", "delta": {"money": 0, "sanity": 4, "audience": -3, "ai_skill": 7, "friends": 0}, "min_money": null}, {"title": "Click through fast, back to work", "body": "Speed-run the module. Real safety happens on the job.", "delta": {"money": 0, "sanity": 6, "audience": 0, "ai_skill": -6, "friends": -1}, "min_money": null}, {"title": "Help older crew through the tech", "body": "Walk the vets through the headset. Team effort.", "delta": {"money": 0, "sanity": -4, "audience": 5, "ai_skill": 1, "friends": 8}, "min_money": null}], "allow_freeform": true}
11
+ {"id": "plumber_11_smart_home_side_job", "phase": "Early", "title": "Neighbor Wants a Smart Home Install", "body": "Neighbor wants an EV charger, smart panel, and enough Wi-Fi gadgets to summon a spaceship. Weekend job. Cash. No paperwork. Also: your only weekend off this month.", "choices": [{"title": "Cash job, sacrifice the weekend", "body": "Money talks. Your weekend doesn't.", "delta": {"money": 3500, "sanity": -8, "audience": 0, "ai_skill": 1, "friends": -6}, "min_money": null}, {"title": "Fair rate, teach them basics", "body": "Do it right, show them how it works, stop the midnight texts.", "delta": {"money": 0, "sanity": -5, "audience": 6, "ai_skill": 2, "friends": 6}, "min_money": null, "effects": [{"op": "set_flag", "flag": "started_side_project"}]}, {"title": "Decline, protect your time", "body": "You need a day off more than you need the cash.", "delta": {"money": 0, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 2}, "min_money": null}], "allow_freeform": true}
12
+ {"id": "plumber_73_supply_house_politics", "phase": "Early", "title": "Supply House Guy Plays Favorites", "body": "The guy at the supply house gives the big contractors their orders first. You've been waiting 40 minutes for pipe that's sitting on the shelf behind him. He's on the phone. He sees you. He does not care. This is the supply chain nobody talks about.", "choices": [{"title": "Wait politely, maintain the relationship", "body": "You'll need this guy next week. Be patient.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 0, "friends": 6}, "min_money": null}, {"title": "Call the manager, escalate", "body": "Your time has a dollar value. This is costing you money.", "delta": {"money": 0, "sanity": 4, "audience": 2, "ai_skill": 0, "friends": -6}, "min_money": null}, {"title": "Find a new supplier entirely", "body": "Loyalty to a supply house that doesn't respect you is stupidity.", "delta": {"money": -300, "sanity": 6, "audience": 4, "ai_skill": 1, "friends": -2}, "min_money": 300}], "allow_freeform": true}
13
+ {"id": "plumber_74_asbestos_surprise", "phase": "Early", "title": "Surprise, It's Asbestos", "body": "You open up a wall in a 1960s build and the insulation looks wrong. Real wrong. Fluffy wrong. You stop everything. The GC says \"just be careful.\" You know what \"just be careful\" means when it comes to asbestos: nothing good.", "choices": [{"title": "Stop work, call abatement", "body": "Nobody breathes this. Full stop. Call the professionals.", "delta": {"money": -1000, "sanity": 11, "audience": 10, "ai_skill": 0, "friends": 2}, "min_money": 1000}, {"title": "Document it, refuse to continue", "body": "Put it in writing. Cover yourself. Walk away.", "delta": {"money": -600, "sanity": 8, "audience": 4, "ai_skill": 0, "friends": -2}, "min_money": 600, "effects": [{"op": "set_flag", "flag": "blew_the_whistle"}]}, {"title": "Work around it carefully", "body": "You know what you're doing. Wet it down. Suit up. Keep going.", "delta": {"money": 2000, "sanity": -14, "audience": -5, "ai_skill": 4, "friends": -9}, "min_money": null}], "allow_freeform": true}
14
+ {"id": "plumber_78_code_violation_neighbor", "phase": "Early", "title": "Neighbor Running Unpermitted Plumbing", "body": "Neighbor is installing a bathroom addition without permits. You can see the PVC from your yard. It's wrong. Not a little wrong. The kind of wrong that backs sewage into the basement in six months.", "choices": [{"title": "Talk to them privately, offer to help", "body": "Neighborly intervention. Fix it before the county finds it.", "delta": {"money": -500, "sanity": -4, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 500}, {"title": "Report it to the county anonymously", "body": "Code exists for a reason. Let the system handle it.", "delta": {"money": 0, "sanity": 4, "audience": 2, "ai_skill": 0, "friends": -8}, "min_money": null}, {"title": "Mind your business entirely", "body": "Not your house. Not your sewer. Not your problem.", "delta": {"money": 0, "sanity": 4, "audience": -5, "ai_skill": 0, "friends": -2}, "min_money": null}], "allow_freeform": true}
15
+ {"id": "plumber_94_new_code_requirements", "phase": "Early", "title": "Code Updates Hit Like a Pop Quiz", "body": "New plumbing code just dropped. Lead-free requirements tightened. Backflow testing frequency doubled. Your current inventory is now non-compliant. The transition deadline is 90 days. You have 45 jobs in the pipeline.", "choices": [{"title": "Upgrade everything immediately", "body": "Stay ahead of code. It's cheaper than getting caught behind.", "delta": {"money": -6000, "sanity": 4, "audience": 0, "ai_skill": 8, "friends": 1}, "min_money": 6000}, {"title": "Phase in compliance as current stock runs out", "body": "Use what you have. Replace as you go. Smart transition.", "delta": {"money": -1500, "sanity": 2, "audience": -1, "ai_skill": 6, "friends": 0}, "min_money": 1500}, {"title": "Attend the code update seminar and network", "body": "Learn the details. Meet the inspectors who'll enforce them.", "delta": {"money": -300, "sanity": -4, "audience": 6, "ai_skill": 2, "friends": 8}, "min_money": 300}], "allow_freeform": true}
16
+ {"id": "plumber_98_new_apprentice_woman", "phase": "Early", "title": "First Woman Apprentice at the Hall", "body": "New apprentice is the first woman at your IBEW local in years. She's sharp, strong, and tired of being asked if she's the office manager. Two guys on your crew are being weird about it. Not mean, just weird. The kind of weird that becomes mean if nobody addresses it.", "choices": [{"title": "Shut down the weird, set the standard", "body": "She's here to work. Anyone with a problem can talk to you.", "delta": {"money": 0, "sanity": -6, "audience": 6, "ai_skill": 0, "friends": 10}, "min_money": null}, {"title": "Let her handle it, she's tough enough", "body": "She doesn't need a white knight. She needs equal treatment.", "delta": {"money": 0, "sanity": 4, "audience": -6, "ai_skill": 0, "friends": -2}, "min_money": null}, {"title": "Pair her with your best journeyman", "body": "Best training, no politics. Let her skill speak.", "delta": {"money": 0, "sanity": 2, "audience": 2, "ai_skill": 6, "friends": 6}, "min_money": null}], "allow_freeform": true}
17
+ {"id": "plumber_108_apprentice_program_bureaucracy", "phase": "Early", "title": "Apprentice Paperwork Is Its Own Full-Time Job", "body": "You're sponsoring an apprentice through the official program. The state paperwork is so dense it makes permit applications look like haiku. Three forms need the same information in slightly different formats. Someone at the state office asks if you've tried their new online portal. You have. It crashed.", "choices": [{"title": "Grind through the paperwork, do it right", "body": "Bureaucracy is the tax on doing things properly. Pay it.", "delta": {"money": 0, "sanity": -7, "audience": 0, "ai_skill": 5, "friends": 1}, "min_money": null}, {"title": "Have the apprentice fill out their own forms", "body": "Learning to deal with paperwork is part of the trade.", "delta": {"money": 0, "sanity": 5, "audience": 0, "ai_skill": 1, "friends": -7}, "min_money": null}, {"title": "Call your state rep about the process", "body": "If it's this bad for you, it's killing smaller shops. Complain upward.", "delta": {"money": 0, "sanity": 3, "audience": 8, "ai_skill": 0, "friends": 2}, "min_money": null}], "allow_freeform": true}
18
+ {"id": "plumber_110_code_update_seminar_networking", "phase": "Early", "title": "Code Seminar Full of Familiar Faces", "body": "At the code update seminar, you run into plumbers from three counties over. Everyone's dealing with the same problems: material costs, apprentice shortages, AI tools being pushed by management. By lunch, you've got six new numbers in your phone.", "choices": [{"title": "Start a group chat for the region", "body": "Organize. Share intel. Build the network.", "delta": {"money": 0, "sanity": -4, "audience": 9, "ai_skill": 0, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "built_community"}]}, {"title": "Focus on the technical content", "body": "You came to learn code updates, not make friends.", "delta": {"money": 0, "sanity": 2, "audience": -1, "ai_skill": 8, "friends": 0}, "min_money": null}, {"title": "Exchange cards, follow up later", "body": "Don't force it. Let the connections develop naturally.", "delta": {"money": 0, "sanity": 6, "audience": 2, "ai_skill": 0, "friends": 6}, "min_money": null}], "allow_freeform": true}
19
+ {"id": "plumber_136_first_big_callback", "phase": "Early", "title": "First Callback Complaint Stings", "body": "A client calls back: the fixture you installed is leaking. You know you did it right. You go back. It's a defective fitting from the manufacturer. But the client doesn't care whose fault it is -- they see a leak and they see your name on the invoice.", "choices": [{"title": "Fix it free, no argument", "body": "Your reputation is worth more than one fitting. Fix it.", "delta": {"money": -200, "sanity": 5, "audience": 6, "ai_skill": 0, "friends": 2}, "min_money": 200}, {"title": "Fix it, then fight the manufacturer for credit", "body": "Fix the client's problem. Then make it the manufacturer's problem.", "delta": {"money": 0, "sanity": -4, "audience": 2, "ai_skill": 6, "friends": 0}, "min_money": null}, {"title": "Explain the defect, charge for the return trip", "body": "Not your fault. Not your freebie.", "delta": {"money": 200, "sanity": -7, "audience": -10, "ai_skill": 0, "friends": -9}, "min_money": null}], "allow_freeform": true}
20
+ {"id": "plumber_12_union_cybersecurity_cert", "phase": "Mid", "title": "Union Offers Cybersecurity Cert", "body": "IBEW local now offers a \"Critical Infrastructure Cybersecurity\" cert, co-developed with a community college and, inexplicably, a Palo Alto VC firm. Pitch: data centers need plumbers who \"speak IT.\" Costs $800, three weekends. Half your crew says scam. Other half already signed up.", "choices": [{"title": "Get the cert, hedge your bets", "body": "$800 and three weekends for a credential that might print money. Do it.", "delta": {"money": -800, "sanity": -6, "audience": 6, "ai_skill": 8, "friends": 0}, "min_money": 800, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Skip it, your work speaks", "body": "You don't need a certificate to prove you know pipe from conduit.", "delta": {"money": 0, "sanity": 6, "audience": -6, "ai_skill": 3, "friends": 0}}, {"title": "Group discount, certify the crew", "body": "Organize a bulk rate. Rising tide lifts all plumbers.", "delta": {"money": -3200, "sanity": -2, "audience": 10, "ai_skill": 2, "friends": 10}, "min_money": 3200, "effects": [{"op": "set_flag", "flag": "built_community"}]}], "allow_freeform": true}
21
+ {"id": "plumber_13_carnegie_mellon_apprentice", "phase": "Mid", "title": "Carnegie Mellon Guy Wants to Shadow You", "body": "Marcus: CS degree from Carnegie Mellon, four years at a startup that \"pivoted to enterprise,\" and a genuine desire to learn plumbing. He's 34, watched twelve YouTube videos, and bought $600 of Klein Tools. Wants to shadow you unpaid for a month. He is not annoying. This is somehow worse.", "choices": [{"title": "Take him on, he learns fast", "body": "Smart hands are still hands. Put him to work.", "delta": {"money": 0, "sanity": -6, "audience": 2, "ai_skill": 8, "friends": 9}, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Point him to proper IBEW channels", "body": "There's a system. Use it. No shortcuts.", "delta": {"money": 0, "sanity": 6, "audience": 6, "ai_skill": 0, "friends": -6}}, {"title": "Hire at apprentice wage, official", "body": "If he wants to learn, he can earn. On the books.", "delta": {"money": 1500, "sanity": -6, "audience": 0, "ai_skill": 2, "friends": 6}, "min_money": null}], "allow_freeform": true}
22
+ {"id": "plumber_14_voltsy_disrupts_plumbing", "phase": "Mid", "title": "VC-Backed App Wants to \"Disrupt\" You", "body": "Startup called Voltsy -- \"Uber, but for electrons\" -- launches in your market. AI dispatch, gig-economy plumbers, 40% below union rates. TOS absolves them of liability for unlicensed work. Three clients got quotes. One of those clients just had a breaker panel fail.", "choices": [{"title": "Undercut one job, make a point", "body": "Win the job back at a loss. Let quality speak.", "delta": {"money": -1500, "sanity": -8, "audience": 7, "ai_skill": 0, "friends": 0}, "min_money": 1500}, {"title": "Let liability play out, stay course", "body": "Wait for the lawsuits. They always come.", "delta": {"money": -1500, "sanity": 6, "audience": 4, "ai_skill": 0, "friends": 0}, "min_money": 1500}, {"title": "Coordinate union public response", "body": "This isn't just your fight. Get the hall involved.", "delta": {"money": -1500, "sanity": -3, "audience": 8, "ai_skill": 0, "friends": 10}, "min_money": 1500, "effects": [{"op": "set_flag", "flag": "joined_union"}]}], "allow_freeform": true}
23
+ {"id": "plumber_16_solar_farm_hiring", "phase": "Mid", "title": "Solar Farm Hiring Everything That Moves", "body": "400-megawatt solar installation, two counties over. 18 months, full benefits, per diem, housing stipend. Your daughter is in fifth grade. Crew lead wants to go. Wife says it's your call. It is never your call.", "choices": [{"title": "Take the contract, family stays", "body": "18 months away. Big money. Big cost.", "delta": {"money": 3500, "sanity": -13, "audience": 0, "ai_skill": 6, "friends": -13}, "min_money": null}, {"title": "Pass, roots here pay fine", "body": "Home is worth more than a per diem.", "delta": {"money": -500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 500}, {"title": "Negotiate four-day week, drive home Fridays", "body": "Split the difference. Be everywhere, rest nowhere.", "delta": {"money": -2000, "sanity": -5, "audience": 0, "ai_skill": 2, "friends": 6}, "min_money": 2000}], "allow_freeform": true}
24
+ {"id": "plumber_18_ai_permit_assistant", "phase": "Mid", "title": "AI Wants to Pull Your Permits", "body": "SaaS company pitching an \"AI permit assistant\" that files applications, schedules inspections, generates compliance docs. $300/month. Ron tells you privately it gets things wrong 20% of the time. Ron seems professionally pleased about this.", "choices": [{"title": "Trial it, verify everything manually", "body": "Test it for a month. Trust nothing. Verify everything.", "delta": {"money": -300, "sanity": -6, "audience": 0, "ai_skill": 8, "friends": 0}, "min_money": 300, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Hard pass, you and Ron have a system", "body": "If it ain't broke and Ron's happy, don't fix it.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": -2, "friends": 6}, "effects": [{"op": "set_flag", "flag": "rejected_ai"}]}, {"title": "Buy it, resell to smaller contractors", "body": "If it works 80% of the time, that's somebody else's problem.", "delta": {"money": -300, "sanity": -6, "audience": 7, "ai_skill": 2, "friends": -2}, "effects": [{"op": "set_flag", "flag": "started_side_project"}], "min_money": 300}], "allow_freeform": true}
25
+ {"id": "plumber_20_surprise_inspection", "phase": "Mid", "title": "Surprise Inspection, Minor Flag", "body": "Inspector shows up unannounced. Finds a minor issue that could fail the whole job if they feel like it. Some of this is code. Some of it is relationship management.", "choices": [{"title": "Fix immediately, document everything", "body": "Make it airtight. Leave no room for doubt.", "delta": {"money": 0, "sanity": -6, "audience": 6, "ai_skill": 6, "friends": 0}}, {"title": "Talk to inspector like a human", "body": "Relationship matters. Be professional. Be real.", "delta": {"money": 0, "sanity": -4, "audience": 5, "ai_skill": 0, "friends": 8}, "effects": [{"op": "set_flag", "flag": "made_industry_contact"}]}, {"title": "Argue and blame the plans", "body": "You're tired of this. The plans were wrong. Say so.", "delta": {"money": 0, "sanity": 4, "audience": -8, "ai_skill": 0, "friends": -6}}], "allow_freeform": true}
26
+ {"id": "plumber_21_tech_ceo_equity_offer", "phase": "Mid", "title": "Tech CEO Offers You Equity", "body": "Founder of an AI startup has a burst pipe at 11pm. You fix it in 40 minutes. He offers you equity in his company instead of cash. Says it'll be worth \"ten times your invoice\" in two years. You've heard this before. Not from a guy in $400 pajamas, but you've heard it.", "choices": [{"title": "Take cash, thank him, leave", "body": "Equity doesn't fix the next burst pipe. Cash does.", "delta": {"money": 500, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 1}, "min_money": null}, {"title": "Take the equity as a gamble", "body": "What's the worst that happens? You lose an invoice.", "delta": {"money": -500, "sanity": -8, "audience": 7, "ai_skill": 2, "friends": 2}, "min_money": 500, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}, {"title": "Take cash AND negotiate a retainer", "body": "You'll take dollars today and a monthly check for being on call.", "delta": {"money": 800, "sanity": 0, "audience": 6, "ai_skill": 0, "friends": -6}, "min_money": null}], "allow_freeform": true}
27
+ {"id": "plumber_22_contract_negotiation", "phase": "Mid", "title": "Contract Negotiation Season Gets Loud", "body": "Union contract is up. Meetings packed. Everyone has an opinion on the raise. Data center demand is real. So is inflation. So is the fact that people get emotional when talking about money and respect at the same time.", "choices": [{"title": "Show up, vote, organize hard", "body": "Democracy is showing up. Show up.", "delta": {"money": 0, "sanity": -5, "audience": 6, "ai_skill": 0, "friends": 10}, "effects": [{"op": "set_flag", "flag": "joined_union"}]}, {"title": "Push hard line for higher wages", "body": "Demand is leverage. Use it now or lose it.", "delta": {"money": 3000, "sanity": -10, "audience": -2, "ai_skill": 0, "friends": -10}, "min_money": null}, {"title": "Stay out of it, focus on jobs", "body": "Let the talkers talk. You'll cash whatever check they negotiate.", "delta": {"money": 0, "sanity": 6, "audience": -6, "ai_skill": 0, "friends": -2}}], "allow_freeform": true}
28
+ {"id": "plumber_24_vc_blog_post", "phase": "Mid", "title": "VC Writes \"Plumbers Are the New Engineers\"", "body": "A Silicon Valley VC published a blog post titled \"Why Plumbers Are the New Software Engineers.\" It has 200K views. He cites Baumol's cost disease, explains it wrong, and uses the phrase \"blue-collar alpha.\" Your union rep shares it. You read one paragraph and go back to the panel schedule.", "choices": [{"title": "Ignore it completely", "body": "You don't need a venture capitalist to explain your job to you.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": 0, "friends": 1}}, {"title": "Share with apprentice as morale boost", "body": "Kid needs to know the world is noticing, even if the noticing is cringe.", "delta": {"money": 0, "sanity": -3, "audience": 6, "ai_skill": 0, "friends": 6}}, {"title": "Email the VC a correction", "body": "If you're going to write about plumbers, get the economics right.", "delta": {"money": 0, "sanity": 2, "audience": 8, "ai_skill": 1, "friends": -4}, "effects": [{"op": "set_flag", "flag": "started_newsletter"}]}], "allow_freeform": true}
29
+ {"id": "plumber_51_mentor_apprentice_quits", "phase": "Mid", "title": "Your Apprentice Just Quit Via Text", "body": "The kid you mentored -- spent months teaching him to read blueprints and sweat copper -- just texted that he's going back to coding bootcamp. Says plumbing is \"too physical\" and he found a remote job. The text ends with a thumbs up emoji.", "requires": ["became_mentor"], "choices": [{"title": "Wish him well, mean it mostly", "body": "People leave. Trades aren't for everyone. Let him go.", "delta": {"money": 0, "sanity": 4, "audience": -4, "ai_skill": 0, "friends": -8}, "effects": [{"op": "set_flag", "flag": "mentor_burned"}]}, {"title": "Tell him he's making a mistake", "body": "You invested time. He's wasting it. Say so.", "delta": {"money": 0, "sanity": -10, "audience": -1, "ai_skill": 0, "friends": -11}, "effects": [{"op": "set_flag", "flag": "burned_bridge"}]}, {"title": "Find a better apprentice immediately", "body": "One out, next one up. The pipeline doesn't stop.", "delta": {"money": -300, "sanity": 0, "audience": 6, "ai_skill": 0, "friends": 5}, "min_money": 300}], "allow_freeform": true}
30
+ {"id": "plumber_53_side_project_ev_charger_boom", "phase": "Mid", "title": "Your EV Charger Side Hustle Is Printing", "body": "That smart home install you did? Word spread. Now you've got a waitlist for EV charger installations. Neighbors are calling neighbors. You accidentally started a business within a business.", "requires": ["started_side_project"], "choices": [{"title": "Formalize it, start a proper LLC", "body": "If it's making money, make it official.", "delta": {"money": 3000, "sanity": -8, "audience": 6, "ai_skill": 0, "friends": 0}, "effects": [{"op": "set_flag", "flag": "side_project_shipped"}], "min_money": null}, {"title": "Keep it casual, cash only", "body": "Side hustle stays a side hustle. No paperwork.", "delta": {"money": 2000, "sanity": 3, "audience": -3, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Refer overflow to other plumbers", "body": "Share the wealth. Build the network.", "delta": {"money": -500, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 500}], "allow_freeform": true}
31
+ {"id": "plumber_54_podcast_fame_followup", "phase": "Mid", "title": "Podcast Clip Goes Viral on Twitter", "body": "That podcast interview? Someone clipped your best line -- \"My pipes don't need a prompt\" -- and it has 2 million views on Twitter. Your phone won't stop. Three news outlets want follow-ups. Your crew is roasting you in the group chat.", "requires": ["built_following"], "once_per_run": true, "choices": [{"title": "Ride the wave, do more interviews", "body": "You're the voice of the trades now. Lean into it.", "delta": {"money": 0, "sanity": -8, "audience": 12, "ai_skill": 0, "friends": 6}, "effects": [{"op": "set_flag", "flag": "went_viral"}]}, {"title": "Go dark, let it die down", "body": "Fame is a distraction. You have jobs to finish.", "delta": {"money": 0, "sanity": 8, "audience": -10, "ai_skill": 0, "friends": 1}}, {"title": "Monetize it, start a TikTok", "body": "If people want to watch a plumber, charge admission.", "delta": {"money": 500, "sanity": -7, "audience": 12, "ai_skill": 0, "friends": -10}, "effects": [{"op": "set_flag", "flag": "started_newsletter"}], "min_money": null}], "allow_freeform": true}
32
+ {"id": "plumber_57_sold_out_sponsor_demands", "phase": "Mid", "title": "Sponsor Wants More Than a Logo Now", "body": "That tool brand deal? They want social media posts. They want you at trade shows. They want you to say \"game-changing\" in a video about a wrench. You are holding the wrench. The wrench is fine. It is not game-changing.", "requires": ["sold_out"], "choices": [{"title": "Do the video, cash the check", "body": "It's a wrench. Say what they want. Go home richer.", "delta": {"money": 3000, "sanity": -10, "audience": 8, "ai_skill": 0, "friends": -1}, "min_money": null}, {"title": "Renegotiate to tools-only, no content", "body": "Free gear yes. Content creation no. Draw the line.", "delta": {"money": 0, "sanity": 8, "audience": -5, "ai_skill": 0, "friends": 1}}, {"title": "Drop the sponsor entirely", "body": "Your integrity costs more than a free impact driver.", "delta": {"money": -1500, "sanity": 10, "audience": 1, "ai_skill": 0, "friends": 8}, "min_money": 1500, "effects": [{"op": "set_flag", "flag": "found_balance"}]}], "allow_freeform": true}
33
+ {"id": "plumber_61_union_brother_in_crisis", "phase": "Mid", "title": "Union Brother Calls at Midnight", "body": "Your buddy Dave from the hall calls at midnight. Not about work. His voice sounds wrong. He says things aren't good at home and he doesn't know who else to call. You have a 5am start tomorrow.", "requires": ["joined_union"], "choices": [{"title": "Talk as long as he needs", "body": "Sleep can wait. Dave can't.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": 13}}, {"title": "Meet him for coffee at the diner", "body": "Some things need to happen face to face. Get in the truck.", "delta": {"money": -30, "sanity": -11, "audience": 0, "ai_skill": 0, "friends": 14}, "min_money": 30}, {"title": "Give him the EAP number, check in tomorrow", "body": "You care. But you also know your limits.", "delta": {"money": 0, "sanity": 5, "audience": 0, "ai_skill": 0, "friends": -8}}], "allow_freeform": true}
34
+ {"id": "plumber_62_industry_contact_big_referral", "phase": "Mid", "title": "Ron Sends You a Whale Client", "body": "Remember helping Ron the inspector? He just referred you to the county's biggest commercial developer. They want a plumber for a multi-year hospital build. Prevailing wage. Guaranteed hours. Ron texts: \"You're welcome.\"", "requires": ["made_industry_contact"], "once_per_run": true, "choices": [{"title": "Take the contract, commit fully", "body": "Hospital build. Stable work. Lock it in.", "delta": {"money": 8000, "sanity": -10, "audience": 0, "ai_skill": 9, "friends": -1}, "min_money": null}, {"title": "Negotiate better terms first", "body": "Ron's goodwill got you in the door. Your skills get you the rate.", "delta": {"money": 4000, "sanity": -3, "audience": 4, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Bring your crew into the bid", "body": "You don't take big jobs alone. Bring the team.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 2, "friends": 10}}], "allow_freeform": true}
35
+ {"id": "plumber_64_lifestyle_creep_new_truck", "phase": "Mid", "title": "You Bought the Truck. The Nice One.", "body": "You told yourself you'd always drive the work truck. But the money's been good and the dealership had a fully loaded F-350 with heated seats and a backup camera. Your crew sees it Monday morning. The roasting begins immediately.", "requires": ["lifestyle_crept"], "choices": [{"title": "Own it, you earned this", "body": "Heated seats and a clear conscience. You worked for it.", "delta": {"money": -8000, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": -9}, "min_money": 8000}, {"title": "Return it, get something practical", "body": "What were you thinking? Get the base model.", "delta": {"money": 0, "sanity": 8, "audience": -5, "ai_skill": 0, "friends": 4}}, {"title": "Keep it, but buy crew lunch all week", "body": "Smooth over the jealousy with burritos.", "delta": {"money": -200, "sanity": 3, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 200}], "allow_freeform": true}
36
+ {"id": "plumber_67_health_scare_knees", "phase": "Mid", "title": "Your Knees File a Formal Complaint", "body": "Woke up and your left knee said no. Not \"maybe later,\" just no. The doctor says years of crawl spaces and squatting have taken a toll. He recommends physical therapy. You recommend he try installing a water heater in a 3-foot basement.", "choices": [{"title": "Do the PT, adjust how you work", "body": "Fix the body like you'd fix a pipe. Properly.", "delta": {"money": -1500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 1500, "effects": [{"op": "set_flag", "flag": "had_health_scare"}]}, {"title": "Push through, Advil and tape", "body": "You're not the first plumber with bad knees. Won't be the last.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": 0}}, {"title": "Train apprentices for the hard access jobs", "body": "Let younger knees do the crawl spaces. Your brain still works.", "delta": {"money": 0, "sanity": 3, "audience": 0, "ai_skill": 7, "friends": 8}, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}], "allow_freeform": true}
37
+ {"id": "plumber_69_debt_cleared_celebration", "phase": "Mid", "title": "Last Truck Payment Hits Different", "body": "You made the last payment on the work truck. No more monthly. No more interest. You sit in the cab for a minute and feel something foreign: financial peace. Then you remember the insurance is due Friday.", "requires": ["debt_cleared"], "once_per_run": true, "choices": [{"title": "Start saving aggressively", "body": "No debt means every dollar is yours. Stack them.", "delta": {"money": 1500, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Treat the crew to a dinner", "body": "You didn't get here alone. Buy the steaks.", "delta": {"money": -500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 500}, {"title": "Invest in better tools", "body": "Good tools last. Upgrade the kit.", "delta": {"money": -1800, "sanity": 3, "audience": 0, "ai_skill": 8, "friends": 0}, "min_money": 1800}], "allow_freeform": true}
38
+ {"id": "plumber_70_scammed_by_supplier", "phase": "Mid", "title": "Supplier Shipped Counterfeit Fittings", "body": "New online supplier had great prices. Too great. The fittings are counterfeit. Three jobs need to be redone. Your insurance is involved. The supplier's website is already down. You are holding a fake brass coupling and contemplating violence.", "choices": [{"title": "Eat the cost, redo everything right", "body": "Your name is on the work. Fix it. Bill later.", "delta": {"money": -4500, "sanity": -11, "audience": 10, "ai_skill": 0, "friends": 0}, "min_money": 4500, "effects": [{"op": "set_flag", "flag": "got_scammed"}]}, {"title": "File insurance claim, report to AG", "body": "Document everything. Let the system handle it.", "delta": {"money": -2000, "sanity": 4, "audience": 1, "ai_skill": 1, "friends": 0}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "got_scammed"}]}, {"title": "Warn every plumber you know", "body": "Blast it in the group chat. Save someone else the pain.", "delta": {"money": -2000, "sanity": -1, "audience": 7, "ai_skill": 0, "friends": 11}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "got_scammed"}]}], "allow_freeform": true}
39
+ {"id": "plumber_79_wife_wants_vacation", "phase": "Mid", "title": "Wife Says \"We Need a Vacation\"", "body": "She's not asking. She's informing. The tone suggests this has been coming for weeks. You look at the calendar: three jobs booked, two bids pending, one data center shift on Saturday. She looks at you like you're a pipe that needs rerouting.", "choices": [{"title": "Cancel everything, book the trip", "body": "She's right. She's always right. Go somewhere warm.", "delta": {"money": -3500, "sanity": 11, "audience": 0, "ai_skill": 0, "friends": 12}, "min_money": 3500, "effects": [{"op": "set_flag", "flag": "took_sabbatical"}]}, {"title": "Compromise: long weekend, not a week", "body": "Three days. Beach. Back to work Monday.", "delta": {"money": -1500, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 4}, "min_money": 1500}, {"title": "Promise vacation \"after this job\"", "body": "You'll go. Soon. Definitely. Probably. Maybe.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": -11}}], "allow_freeform": true}
40
+ {"id": "plumber_80_old_timer_retires", "phase": "Mid", "title": "Old-Timer Sal Hangs Up the Belt", "body": "Sal, who's been at the hall for 38 years, retires. He shakes your hand and says \"don't let them turn this into gig work.\" His tool belt is older than you. He gives you his channel locks. They're perfect.", "choices": [{"title": "Promise to keep standards high", "body": "Sal earned those words. Honor them.", "delta": {"money": 0, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 9}}, {"title": "Buy him a retirement dinner", "body": "38 years deserves more than a handshake.", "delta": {"money": -700, "sanity": 9, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 700}, {"title": "Ask to buy his customer list", "body": "Sal's Rolodex is worth more than a tool belt.", "delta": {"money": -2000, "sanity": -7, "audience": 5, "ai_skill": 0, "friends": -11}, "min_money": 2000}], "allow_freeform": true}
41
+ {"id": "plumber_81_bitcoin_plumber", "phase": "Mid", "title": "Client Offers to Pay in Bitcoin", "body": "Commercial client wants to pay your $12,000 invoice in Bitcoin. He says it's \"the future of money\" and that you'd be \"getting in early.\" He is wearing a Patagonia vest and has a podcast about decentralized finance. The invoice is 45 days overdue.", "choices": [{"title": "Cash only, like always", "body": "You accept dollars. The kind backed by the government that issues plumbing licenses.", "delta": {"money": 6000, "sanity": 6, "audience": -7, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Take half in Bitcoin, why not", "body": "Diversify. Worst case you lose half an invoice.", "delta": {"money": 0, "sanity": -5, "audience": 5, "ai_skill": 0, "friends": -1}, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}, {"title": "Double the Bitcoin invoice for volatility", "body": "If he wants to pay in magic internet money, he pays a premium.", "delta": {"money": 8000, "sanity": 3, "audience": -1, "ai_skill": 0, "friends": -9}, "min_money": null}], "allow_freeform": true}
42
+ {"id": "plumber_83_insurance_audit", "phase": "Mid", "title": "Insurance Audit Finds a Gap", "body": "Annual insurance audit. They find a gap in your liability coverage from when you took on that smart home work. Closing the gap costs $3,000. Not closing it means one bad job could end you.", "choices": [{"title": "Pay for proper coverage immediately", "body": "Insurance isn't optional. It's the thing between you and ruin.", "delta": {"money": -3000, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 3000}, {"title": "Shop around for a better rate", "body": "Three quotes. Best price. Don't rush.", "delta": {"money": -2000, "sanity": 3, "audience": 0, "ai_skill": 6, "friends": 0}, "min_money": 2000}, {"title": "Risk it for now, fix it next quarter", "body": "Three months without full coverage. It's probably fine.", "delta": {"money": 0, "sanity": -9, "audience": 0, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
43
+ {"id": "plumber_84_competitor_undercuts", "phase": "Mid", "title": "Non-Union Shop Undercutting Every Bid", "body": "A non-union shop is quoting 30% below your rate on every commercial bid in the county. Their work is mediocre. Their insurance is suspect. Two of your regular clients switched. One already called back after the work failed inspection.", "choices": [{"title": "Win on quality, let time prove you right", "body": "Cheap work is expensive work done twice. Wait.", "delta": {"money": -1000, "sanity": 6, "audience": 7, "ai_skill": 0, "friends": 0}, "min_money": 1000}, {"title": "Report their licensing issues", "body": "If they're cutting corners on price, they're cutting corners on permits.", "delta": {"money": 0, "sanity": 6, "audience": -1, "ai_skill": 0, "friends": -6}}, {"title": "Match their price on one key job", "body": "Lose money once to keep the client forever.", "delta": {"money": -3000, "sanity": -9, "audience": 5, "ai_skill": 0, "friends": 0}, "min_money": 3000}], "allow_freeform": true}
44
+ {"id": "plumber_88_union_election", "phase": "Mid", "title": "Union Election Gets Heated", "body": "Election season at the hall. Two candidates. One wants to modernize everything -- apps, AI scheduling, digital dispatch. The other wants to keep things the way they've always worked. Everyone has an opinion. Everyone is shouting.", "choices": [{"title": "Campaign for the modernizer", "body": "The world is changing. The union should change with it. Carefully.", "delta": {"money": 0, "sanity": -9, "audience": 7, "ai_skill": 8, "friends": -9}}, {"title": "Campaign for the traditionalist", "body": "The union's strength is its traditions. Protect them.", "delta": {"money": 0, "sanity": -7, "audience": -1, "ai_skill": 0, "friends": 11}}, {"title": "Stay neutral, vote your conscience", "body": "You don't need to pick a side publicly. Just vote.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": 0, "friends": -1}}], "allow_freeform": true}
45
+ {"id": "plumber_89_data_center_coolant_leak", "phase": "Mid", "title": "Data Center Coolant System Is Yours Now", "body": "The data center's liquid cooling system is leaking. The server guys are panicking because they know servers, not plumbing. The irony is not lost on you: the AI that's supposed to replace everyone needs a plumber to keep it alive. You bill $300/hr for this. Nobody argues.", "choices": [{"title": "Fix it, bill premium, enjoy the irony", "body": "The machines need you. Savor this.", "delta": {"money": 3000, "sanity": 10, "audience": 0, "ai_skill": 9, "friends": 0}, "min_money": null}, {"title": "Fix it and teach their team basics", "body": "Show them how pipes work so they stop calling you at midnight.", "delta": {"money": 0, "sanity": -6, "audience": 6, "ai_skill": 4, "friends": 10}, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Fix it, but sign a retainer first", "body": "You'll keep their AI alive. For a monthly fee.", "delta": {"money": 4000, "sanity": 3, "audience": 5, "ai_skill": 3, "friends": -3}, "min_money": null}], "allow_freeform": true}
46
+ {"id": "plumber_91_high_school_reunion", "phase": "Mid", "title": "High School Reunion, You're Winning", "body": "20-year reunion. Half the room works in tech and looks anxious. A few are in finance and look tired. You're the plumber making more than most of them and you don't have a LinkedIn. Someone asks what you do and says \"oh\" in a way that immediately becomes \"oh, REALLY\" when you mention the rate.", "choices": [{"title": "Be gracious, change the subject", "body": "You don't need them to validate your career. Talk about the game instead.", "delta": {"money": 0, "sanity": 9, "audience": -7, "ai_skill": 0, "friends": 9}}, {"title": "Enjoy the moment, drop the numbers", "body": "You earned this. Let the accountant at table 4 do the math.", "delta": {"money": 0, "sanity": 7, "audience": 8, "ai_skill": 0, "friends": -9}}, {"title": "Leave early, you have a 5am start", "body": "Reunions are for people who peaked. You're still climbing.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": 0, "friends": -1}}], "allow_freeform": true}
47
+ {"id": "plumber_93_ai_generated_blueprint", "phase": "Mid", "title": "Architect Sends AI-Generated Blueprints", "body": "New project blueprints arrive. Something's off. The pipe routing is physically impossible -- a drain running uphill, a vent that terminates inside a wall. You realize the architect used AI to generate the plans. The AI does not understand gravity.", "choices": [{"title": "Red-line everything, send it back", "body": "Gravity is not optional. Fix the plans or find another plumber.", "delta": {"money": 0, "sanity": 6, "audience": 7, "ai_skill": 0, "friends": -9}}, {"title": "Fix it yourself, bill for design work", "body": "If you're doing the architect's job, bill the architect's rate.", "delta": {"money": 3000, "sanity": -9, "audience": 0, "ai_skill": 9, "friends": 0}, "min_money": null}, {"title": "Call the architect directly, collaborate", "body": "AI made the mess. Humans clean it up. Together.", "delta": {"money": 0, "sanity": -3, "audience": 0, "ai_skill": 7, "friends": 8}}], "allow_freeform": true}
48
+ {"id": "plumber_99_commercial_bid_war", "phase": "Mid", "title": "Three Plumbers Bidding the Same Hospital", "body": "You, a non-union shop, and a national chain are all bidding the same hospital renovation. The hospital CFO wants the cheapest. The hospital maintenance chief wants the best. They are not the same person and they are not talking to each other.", "choices": [{"title": "Bid your real number, quality sells", "body": "Cheap plumbing in a hospital kills people. Bid what the work costs.", "delta": {"money": -1000, "sanity": 6, "audience": 6, "ai_skill": 0, "friends": 0}, "min_money": 1000}, {"title": "Undercut slightly, win on reputation", "body": "Shave enough to win. Make it up on change orders.", "delta": {"money": 1500, "sanity": -8, "audience": -1, "ai_skill": 0, "friends": -1}, "min_money": null}, {"title": "Talk to the maintenance chief directly", "body": "Go around the CFO. Talk to the person who knows what matters.", "delta": {"money": 0, "sanity": -5, "audience": 5, "ai_skill": 0, "friends": 8}, "effects": [{"op": "set_flag", "flag": "made_industry_contact"}]}], "allow_freeform": true}
49
+ {"id": "plumber_106_real_estate_agent_pitch", "phase": "Mid", "title": "Real Estate Agent Wants You on Speed Dial", "body": "A real estate agent wants to put you on retainer for all her property inspections and quick fixes before closing. Guaranteed 10 calls a month. The work is boring -- running toilets, leaky faucets, nothing that challenges you. But the money is steady and the hours are predictable.", "choices": [{"title": "Take the retainer, enjoy easy money", "body": "Boring work that pays well is still work that pays well.", "delta": {"money": 1500, "sanity": 7, "audience": -7, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Negotiate a higher rate, you're worth it", "body": "If she wants you on call, she pays the premium.", "delta": {"money": 4000, "sanity": -3, "audience": 0, "ai_skill": 0, "friends": -5}, "min_money": null}, {"title": "Pass, you want the challenging work", "body": "Running toilets don't make you better. Take the hard jobs.", "delta": {"money": 0, "sanity": 1, "audience": 0, "ai_skill": 8, "friends": 0}, "min_money": null}], "allow_freeform": true}
50
+ {"id": "plumber_111_ai_material_estimator", "phase": "Mid", "title": "AI Material Estimator Gets It Wrong", "body": "New AI tool estimated materials for a bathroom remodel. It's off by 30%. Too little pipe, wrong fittings, and it specified a type of valve that doesn't exist. You would have caught this in 10 minutes with a tape measure. The contractor who trusted the AI is now two days behind.", "choices": [{"title": "Fix the estimate, charge for your time", "body": "Human expertise has a price. Pay it.", "delta": {"money": 500, "sanity": 5, "audience": 0, "ai_skill": 2, "friends": 0}, "min_money": null}, {"title": "Teach the contractor what went wrong", "body": "Explain why AI can't estimate a bathroom it's never seen.", "delta": {"money": 0, "sanity": -4, "audience": 7, "ai_skill": 8, "friends": 2}}, {"title": "Say nothing, just fix it and move on", "body": "Don't make it a thing. Fix. Bill. Leave.", "delta": {"money": 500, "sanity": 6, "audience": -7, "ai_skill": 0, "friends": 0}, "min_money": null}], "allow_freeform": true}
51
+ {"id": "plumber_116_green_plumbing_certification", "phase": "Mid", "title": "\"Green Plumbing\" Cert Is the New Thing", "body": "Everyone's talking about green building certifications. Rainwater harvesting, greywater systems, low-flow everything. A certification course costs $1,200 and takes a week. The work pays 20% more. The waiting list is three months.", "choices": [{"title": "Get certified, chase the premium work", "body": "If green means green, learn the color.", "delta": {"money": -1200, "sanity": -5, "audience": 7, "ai_skill": 8, "friends": 0}, "min_money": 1200}, {"title": "Wait and see if it's a trend or real", "body": "Not every certification is worth the paper. Let others go first.", "delta": {"money": 0, "sanity": 6, "audience": -5, "ai_skill": 0, "friends": 0}}, {"title": "Send your best apprentice instead", "body": "Invest in the next generation's skills. They'll teach you later.", "delta": {"money": -1200, "sanity": 3, "audience": 0, "ai_skill": 4, "friends": 9}, "min_money": 1200}], "allow_freeform": true}
52
+ {"id": "plumber_120_side_project_failed", "phase": "Mid", "title": "Your EV Charger Venture Hit a Wall", "body": "That side business? A client's charger caught fire. Nobody hurt, but the liability scare killed the momentum. Insurance went up. Three clients cancelled. The dream of a second business just met reality, and reality brought a fire extinguisher.", "requires": ["started_side_project"], "forbids": ["side_project_shipped"], "choices": [{"title": "Shut it down, focus on core plumbing", "body": "Not every idea works. Cut losses. Go back to what you know.", "delta": {"money": 0, "sanity": 7, "audience": -8, "ai_skill": 0, "friends": 0}, "min_money": null, "effects": [{"op": "set_flag", "flag": "side_project_failed"}]}, {"title": "Investigate the root cause, fix the process", "body": "One bad install doesn't kill a good idea. Find the problem.", "delta": {"money": -3000, "sanity": -10, "audience": 0, "ai_skill": 11, "friends": 0}, "min_money": 3000}, {"title": "Bring in a partner with electrical expertise", "body": "You know plumbing. Get someone who knows chargers.", "delta": {"money": -2000, "sanity": -7, "audience": 5, "ai_skill": 2, "friends": 10}, "min_money": 2000}], "allow_freeform": true}
53
+ {"id": "plumber_131_emergency_fund_milestone", "phase": "Mid", "title": "Six Months Emergency Fund, First Time", "body": "You check your savings account and realize you have six months of expenses banked. For the first time in your adult life, a bad month wouldn't ruin you. Your father never had this. You sit with the number for a while.", "choices": [{"title": "Keep building, aim for twelve months", "body": "Six is good. Twelve is unshakeable.", "delta": {"money": -1500, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 1500}, {"title": "Relax a little, enjoy what you've built", "body": "You earned the right to breathe. Take a shift off.", "delta": {"money": 0, "sanity": 10, "audience": -4, "ai_skill": 0, "friends": 7}, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Invest some of the surplus", "body": "Money sitting in savings loses to inflation. Put it to work.", "delta": {"money": -2000, "sanity": -4, "audience": 0, "ai_skill": 7, "friends": 0}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}], "allow_freeform": true}
54
+ {"id": "plumber_137_union_hall_renovation", "phase": "Mid", "title": "Union Hall Needs Renovation, Irony Thick", "body": "The IBEW hall -- where tradespeople organize -- needs its plumbing redone. The building is 60 years old. The pipes are original. The irony of union plumbers in a building with bad plumbing has not been lost on anyone. Volunteers needed.", "choices": [{"title": "Volunteer your weekends, do it right", "body": "This is the hall. This is home. Fix it properly.", "delta": {"money": -300, "sanity": -7, "audience": 6, "ai_skill": 0, "friends": 9}, "min_money": 300}, {"title": "Donate materials, let apprentices do the work", "body": "Training opportunity disguised as charity. Win-win.", "delta": {"money": -500, "sanity": 3, "audience": 0, "ai_skill": 7, "friends": 8}, "min_money": 500}, {"title": "Bid it formally, do it at cost", "body": "Even charity should be professional. Bid the job. Do it right.", "delta": {"money": 0, "sanity": 2, "audience": 3, "ai_skill": 0, "friends": 6}}], "allow_freeform": true}
55
+ {"id": "plumber_24_kid_asks_about_robots", "phase": "Late", "title": "Your Kid Asks If Robots Take Your Job", "body": "Daughter, now in middle school, absorbed enough internet anxiety to ask at breakfast if AI will make plumbers irrelevant. You think about the crawl space on Route 9. The standing water. The live knob-and-tube. You say: \"probably not this week.\"", "choices": [{"title": "Give her the honest economic answer", "body": "Explain supply, demand, and the value of hands. She'll understand.", "delta": {"money": 0, "sanity": 8, "audience": -7, "ai_skill": 0, "friends": 8}}, {"title": "Bring her to a job site", "body": "Show don't tell. Let her see what the work actually looks like.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 9, "friends": 10}, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Tell her to consider the trades", "body": "Plant the seed. Let it grow on its own schedule.", "delta": {"money": 0, "sanity": 4, "audience": 8, "ai_skill": 0, "friends": 6}, "min_money": null}], "allow_freeform": true}
56
+ {"id": "plumber_26_you_are_the_waitlist", "phase": "Late", "title": "You Are the Waitlist Now", "body": "Residential inquiries booking twelve weeks out. Commercial clients asking you to name your price. Property management company with 400 units offers a monthly retainer just to be available. More work than hours. More hours than crew. You are the bottleneck and the product.", "choices": [{"title": "Hire aggressively, scale up", "body": "Build the crew. Take the risk. Grow or stagnate.", "delta": {"money": 1500, "sanity": -11, "audience": 0, "ai_skill": -9, "friends": 6}, "min_money": null}, {"title": "Take retainer, cap at current crew", "body": "Guaranteed money, manageable load. Lock it in.", "delta": {"money": 9000, "sanity": 9, "audience": -1, "ai_skill": 0, "friends": -9}, "min_money": null}, {"title": "Raise rates until waitlist shrinks", "body": "Price is a signal. Let the market sort itself out.", "delta": {"money": 1500, "sanity": 4, "audience": 9, "ai_skill": 0, "friends": -7}, "effects": [{"op": "set_flag", "flag": "lifestyle_crept"}], "min_money": null}], "allow_freeform": true}
57
+ {"id": "plumber_28_school_counselor_reversal", "phase": "Late", "title": "School Counselor Recommends Trades First", "body": "Your kid's school counselor -- a different one from Mrs. Pellegrino, but the same energy -- told your daughter's class that skilled trades are \"the most promising career path in the current economy.\" For the first time ever, college was the backup plan. Your daughter comes home confused. You come home validated.", "choices": [{"title": "Go speak to the class yourself", "body": "They should hear from someone who actually does it.", "delta": {"money": 0, "sanity": -7, "audience": 9, "ai_skill": 0, "friends": 7}, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Tell your kid to choose her own path", "body": "Don't let anyone's trend -- including yours -- choose for her.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 8}}, {"title": "Call the counselor, offer a site visit", "body": "Words are nice. Seeing the work is better.", "delta": {"money": 0, "sanity": 0, "audience": 7, "ai_skill": 8, "friends": 2}, "min_money": null}], "allow_freeform": true}
58
+ {"id": "plumber_29_prestige_trade_waitlist", "phase": "Late", "title": "Plumbing Apprenticeships Have a Waitlist", "body": "The IBEW apprenticeship program now has a two-year waitlist. Plumbing is officially a \"prestige trade.\" The New York Times called it that. You remember when your mother cried because you didn't go to college. You text her the article. She sends back a heart emoji. First emoji she's ever sent.", "choices": [{"title": "Push to expand apprentice slots", "body": "More spots means more plumbers means the trade survives. Fight for it.", "delta": {"money": 0, "sanity": -10, "audience": 9, "ai_skill": 0, "friends": 11}, "effects": [{"op": "set_flag", "flag": "built_community"}]}, {"title": "Keep standards high, limit growth", "body": "Prestige means nothing if quality drops. Hold the line.", "delta": {"money": 0, "sanity": 8, "audience": 0, "ai_skill": 8, "friends": -7}}, {"title": "Start your own training program", "body": "If the hall can't keep up, you will.", "delta": {"money": -8000, "sanity": -11, "audience": 10, "ai_skill": 11, "friends": 3}, "min_money": 8000, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}], "allow_freeform": true}
59
+ {"id": "plumber_30_800_dollar_hour", "phase": "Late", "title": "$800/hr to Maintain Data Center Cooling", "body": "An AI company offers you $800/hr to maintain their data center liquid cooling system. The work is straightforward -- check valves, monitor flow rates, replace gaskets. Boring as watching paint dry. But at $800/hr, you'd watch paint dry and write it a thank-you note.", "choices": [{"title": "Take the contract, endure the boredom", "body": "Your boredom is worth more than most people's excitement. Accept it.", "delta": {"money": 6000, "sanity": -10, "audience": 0, "ai_skill": 8, "friends": -6}, "min_money": null}, {"title": "Negotiate a part-time retainer instead", "body": "Two days a week at $800/hr. Keep the rest for real plumbing.", "delta": {"money": 3200, "sanity": 6, "audience": 0, "ai_skill": 4, "friends": 2}, "min_money": null}, {"title": "Decline, this isn't why you became a plumber", "body": "You didn't learn a trade to babysit server rooms.", "delta": {"money": -1000, "sanity": 10, "audience": -4, "ai_skill": 0, "friends": 6}, "min_money": 1000}], "allow_freeform": true}
60
+ {"id": "plumber_32_billionaire_mansion_2am", "phase": "Late", "title": "Billionaire's Mansion, 2am Emergency", "body": "A tech billionaire's estate manager calls at 2am. Burst pipe in the wine cellar. 40,000 bottles at risk. You quote $5,000 for the emergency call. He says \"done\" before you finish the sentence. You fix it in 90 minutes. The wine cellar is bigger than your house. He doesn't blink at the invoice.", "choices": [{"title": "Take the money, go home, sleep", "body": "$5,000 for 90 minutes. Don't overthink it. Sleep well.", "delta": {"money": 5000, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Pitch a preventive maintenance contract", "body": "If his pipes burst once, they'll burst again. Lock in monthly.", "delta": {"money": 4000, "sanity": -6, "audience": 6, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Tell the story at the hall, buy rounds", "body": "The crew needs to hear about the wine cellar bigger than your house.", "delta": {"money": -250, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 250}], "allow_freeform": true}
61
+ {"id": "plumber_33_storm_outage", "phase": "Late", "title": "Storm Knocks Out Half the County", "body": "Power gone across the county. Everyone needs a plumber. Everyone is suddenly polite. You can work nonstop and make a fortune or break your body doing it. You do not have infinite hands.", "choices": [{"title": "Work nonstop, stack emergency cash", "body": "Disaster pricing isn't gouging when you're the one crawling through mud.", "delta": {"money": 4500, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": -7}, "min_money": null}, {"title": "Prioritize vulnerable neighbors", "body": "Old folks and families first. Some of it for free.", "delta": {"money": -1000, "sanity": 10, "audience": 2, "ai_skill": 0, "friends": 10}, "min_money": 1000, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Do your shift and protect your body", "body": "You're no good to anyone with a blown-out back.", "delta": {"money": -1200, "sanity": 6, "audience": -4, "ai_skill": 0, "friends": 0}, "min_money": 1200}], "allow_freeform": true}
62
+ {"id": "plumber_34_grid_breaking", "phase": "Late", "title": "The Grid Is Breaking, They Need Everyone", "body": "Rolling brownouts across the eastern seaboard. Three data centers on backup power. Phone ringing since 4am. FEMA coordinating with utilities. Union hall activated as staging area. Governor's office called IBEW directly. You're available. You were always going to be available.", "choices": [{"title": "Deploy immediately, this is the job", "body": "This is what you trained for. Go.", "delta": {"money": 0, "sanity": -10, "audience": 10, "ai_skill": 8, "friends": 10}}, {"title": "Go, but negotiate federal prevailing wage", "body": "Emergency doesn't mean free. Get the rate first.", "delta": {"money": 2000, "sanity": -1, "audience": 6, "ai_skill": 0, "friends": -8}, "min_money": null}, {"title": "Coordinate crew, go in as a unit", "body": "Your people, your plan, your standards. Together.", "delta": {"money": -500, "sanity": 6, "audience": 3, "ai_skill": 6, "friends": 10}, "min_money": 500}], "allow_freeform": true}
63
+ {"id": "plumber_35_union_most_powerful", "phase": "Late", "title": "Plumbers' Union Is the Most Powerful Now", "body": "The IBEW just negotiated the largest wage increase in its history. Your local is the most politically powerful union in the state. You vote on infrastructure policy now. A senator calls your business agent by first name. This is not the timeline anyone predicted, but here you are.", "choices": [{"title": "Get involved in union leadership", "body": "Power without direction is just noise. Help steer.", "delta": {"money": 0, "sanity": -6, "audience": 8, "ai_skill": 0, "friends": 8}, "effects": [{"op": "set_flag", "flag": "joined_union"}]}, {"title": "Stay on the tools, let others lead", "body": "Somebody has to still do the work. That's you.", "delta": {"money": 2000, "sanity": 8, "audience": -6, "ai_skill": 4, "friends": 0}, "min_money": null}, {"title": "Push for apprenticeship expansion policy", "body": "Use the power for something real. More plumbers means more resilience.", "delta": {"money": -1000, "sanity": -7, "audience": 8, "ai_skill": 0, "friends": 8}, "min_money": 1000, "effects": [{"op": "set_flag", "flag": "built_community"}]}], "allow_freeform": true}
64
+ {"id": "plumber_52_mentor_apprentice_thrives", "phase": "Late", "title": "Your Apprentice Passed the Journeyman Exam", "body": "The kid you mentored passed the journeyman exam on the first try. Scored higher than you did. He buys you a beer and says you changed his life. You feel something you haven't felt since your own dad taught you to use a level.", "requires": ["became_mentor"], "forbids": ["mentor_burned"], "once_per_run": true, "choices": [{"title": "Celebrate, then put him on real jobs", "body": "He earned it. Now earn together.", "delta": {"money": 1200, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 9}, "min_money": null}, {"title": "Recommend him for foreman track", "body": "Push him up. Good people deserve good paths.", "delta": {"money": 0, "sanity": 10, "audience": 8, "ai_skill": 0, "friends": 8}}, {"title": "Poach him for your own crew", "body": "Loyalty is nice. Good plumbers on your crew is nicer.", "delta": {"money": 1200, "sanity": -8, "audience": -1, "ai_skill": 2, "friends": -10}, "min_money": null}], "allow_freeform": true}
65
+ {"id": "plumber_55_went_freelance_payroll", "phase": "Late", "title": "Payroll Night at Your New Company", "body": "You started your own shop. Congrats. It's midnight and you're doing payroll instead of sleeping. Your apprentice's hours don't add up. Insurance is due. The accountant you can't afford says you need a bookkeeper you also can't afford.", "requires": ["went_freelance"], "choices": [{"title": "Hire a bookkeeper, eat the cost", "body": "Pay someone to handle the numbers. Focus on pipe.", "delta": {"money": -500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 500}, {"title": "Learn QuickBooks yourself at 1am", "body": "YouTube tutorials and coffee. The founder's life.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 8, "friends": 0}}, {"title": "Ask your wife to help with books", "body": "Family business means family does the books. She's better at math anyway.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 6}}], "allow_freeform": true}
66
+ {"id": "plumber_56_promoted_foreman_regret", "phase": "Late", "title": "Foreman Life: All Emails, No Wrenches", "body": "You took the promotion. Now you spend more time in meetings than on job sites. You miss the weight of tools. You miss mud. A junior asks you a technical question and you realize you haven't touched a pipe in three weeks.", "requires": ["got_promoted"], "choices": [{"title": "Accept the new role, grow into it", "body": "Leadership is a skill too. Learn it.", "delta": {"money": 1500, "sanity": -6, "audience": 8, "ai_skill": 0, "friends": 1}, "min_money": null}, {"title": "Step back down, return to tools", "body": "Not everyone is meant for a desk. Go back to the work.", "delta": {"money": -500, "sanity": 10, "audience": -5, "ai_skill": 8, "friends": 0}, "min_money": 500, "effects": [{"op": "clear_flag", "flag": "got_promoted"}, {"op": "set_flag", "flag": "pivoted_career"}]}, {"title": "Do both, burn the candle at every end", "body": "Foreman by day, plumber by choice. Sleep is for civilians.", "delta": {"money": 1500, "sanity": -12, "audience": 2, "ai_skill": 8, "friends": -8}, "min_money": null}], "once_per_run": true, "allow_freeform": true}
67
+ {"id": "plumber_58_embraced_ai_specialist", "phase": "Late", "title": "They're Calling You the \"Smart Plumber\"", "body": "Word got around that you know AI tools AND pipe. Data center contractors are paying a premium for plumbers who can interface with their monitoring systems. You're billing $300/hr for specialized work. Other plumbers think you sold out. You think they're leaving money on the table.", "requires": ["embraced_ai"], "choices": [{"title": "Double down on the niche", "body": "Be the plumber who speaks binary. Charge accordingly.", "delta": {"money": 8000, "sanity": -10, "audience": 8, "ai_skill": 10, "friends": -10}, "min_money": null}, {"title": "Teach the crew what you learned", "body": "Rising tide. Lift all boats.", "delta": {"money": -1000, "sanity": 0, "audience": 6, "ai_skill": 2, "friends": 8}, "min_money": 1000, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Stay humble, keep it quiet", "body": "Don't advertise the edge. Just use it.", "delta": {"money": 1500, "sanity": 6, "audience": -6, "ai_skill": 2, "friends": 0}, "min_money": null}], "allow_freeform": true}
68
+ {"id": "plumber_59_rejected_ai_pushback", "phase": "Late", "title": "Clients Want Digital, You Use Paper", "body": "You refused every app and AI tool. Now clients are frustrated. One major commercial account says they need digital invoicing or they'll switch to a contractor who can. Your paper system works perfectly. Their accounts payable department disagrees.", "requires": ["rejected_ai"], "choices": [{"title": "Adopt digital invoicing, just invoicing", "body": "Bend on one thing. Hold the line on everything else.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 6, "friends": 1}}, {"title": "Lose the client, keep your principles", "body": "If they can't handle paper, they can't handle you.", "delta": {"money": -3000, "sanity": 8, "audience": -9, "ai_skill": 0, "friends": -3}, "min_money": 3000, "effects": [{"op": "set_flag", "flag": "burned_bridge"}]}, {"title": "Have your kid set up the digital stuff", "body": "Outsource the tech to the teenager. Classic.", "delta": {"money": 0, "sanity": 8, "audience": 0, "ai_skill": 2, "friends": 8}}], "allow_freeform": true}
69
+ {"id": "plumber_60_whistleblower_aftermath", "phase": "Late", "title": "Whistleblower Report Made Local News", "body": "That safety report you filed? It made the local news. OSHA investigated. Fines were issued. The GC is furious. Half the crew thanks you privately. The other half won't make eye contact. Your phone rings -- it's a labor attorney.", "requires": ["blew_the_whistle"], "once_per_run": true, "choices": [{"title": "Talk to the attorney, document everything", "body": "If they retaliate, you'll be ready.", "delta": {"money": -500, "sanity": 7, "audience": 8, "ai_skill": 0, "friends": -8}, "min_money": 500}, {"title": "Let it blow over, keep your head down", "body": "You did the right thing. Now survive the aftermath.", "delta": {"money": 0, "sanity": -6, "audience": -2, "ai_skill": 0, "friends": 0}}, {"title": "Go public, do an interview about safety", "body": "If they want a fight, give them a story. The public cares about safety.", "delta": {"money": 0, "sanity": -10, "audience": 11, "ai_skill": 0, "friends": 4}, "effects": [{"op": "set_flag", "flag": "went_viral"}]}], "allow_freeform": true}
70
+ {"id": "plumber_63_community_training_center", "phase": "Late", "title": "The Union Wants You to Run Training", "body": "Your community-building paid off. The IBEW local wants you to run their new apprentice training center. Part-time. Paid. You'd be teaching the next generation of plumbers instead of just running pipe. Your first apprentice class: twelve former McKinsey consultants and a retired orthodontist.", "requires": ["built_community"], "once_per_run": true, "choices": [{"title": "Take the role, shape the future", "body": "If you don't teach them right, who will?", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 0, "friends": 10}, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Decline, you're a plumber not a teacher", "body": "You work with pipe, not PowerPoint.", "delta": {"money": 0, "sanity": 8, "audience": -9, "ai_skill": 0, "friends": -2}}, {"title": "Do both, teach and work jobs", "body": "Teach two days, plumb three days. Best of both.", "delta": {"money": -1500, "sanity": -10, "audience": 7, "ai_skill": 6, "friends": 0}, "min_money": 1500}], "allow_freeform": true}
71
+ {"id": "plumber_65_teaching_panel_wired_wrong", "phase": "Late", "title": "Student Wires a Panel Wrong, Nearly Fries It", "body": "One of the apprentices you're teaching wired a panel backwards. Nobody got hurt, but the breaker tripped hard enough to kill power to half a floor. The GC is asking questions. You're the one who signed off on the work.", "requires": ["started_teaching"], "choices": [{"title": "Take responsibility, fix it, retrain", "body": "Your name, your apprentice, your problem. Fix it.", "delta": {"money": -2000, "sanity": -8, "audience": 3, "ai_skill": 8, "friends": 10}, "min_money": 2000}, {"title": "Throw the apprentice under the bus", "body": "They did the work wrong. That's the fact. Let them own it.", "delta": {"money": 0, "sanity": 2, "audience": -10, "ai_skill": 0, "friends": -12}, "effects": [{"op": "set_flag", "flag": "burned_bridge"}]}, {"title": "Redesign your training process", "body": "This was a system failure, not a person failure. Fix the system.", "delta": {"money": 0, "sanity": -7, "audience": 10, "ai_skill": 9, "friends": 2}}], "allow_freeform": true}
72
+ {"id": "plumber_66_viral_fallout", "phase": "Late", "title": "Going Viral Has Consequences", "body": "Two million views meant two million opinions. Someone doxxed your company address. A tech influencer called you anti-progress. But also: three new commercial clients found you through the clip and your phone won't stop ringing.", "requires": ["went_viral"], "once_per_run": true, "choices": [{"title": "Ignore the noise, take the clients", "body": "Haters don't pay invoices. Clients do.", "delta": {"money": 6000, "sanity": -10, "audience": 12, "ai_skill": 0, "friends": -1}, "min_money": null}, {"title": "Address the backlash publicly", "body": "Set the record straight. Be the adult in the room.", "delta": {"money": 0, "sanity": -8, "audience": 10, "ai_skill": 0, "friends": -8}, "effects": [{"op": "set_flag", "flag": "got_canceled"}]}, {"title": "Delete everything, go back to quiet", "body": "The internet is not your friend. Disappear.", "delta": {"money": 0, "sanity": 8, "audience": -9, "ai_skill": 0, "friends": 6}}], "allow_freeform": true}
73
+ {"id": "plumber_68_health_scare_recovery", "phase": "Late", "title": "PT Worked, but the Wake-Up Stuck", "body": "Physical therapy fixed the knee. But the scare changed something. You're thinking about longevity now. About what happens in ten years if you keep grinding at this pace. For the first time, you're planning instead of just working.", "requires": ["had_health_scare"], "choices": [{"title": "Shift to supervision and training", "body": "Use the brain, save the body. Transition now while you can choose.", "delta": {"money": -1500, "sanity": 10, "audience": 7, "ai_skill": 0, "friends": 3}, "min_money": 1500, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Set up retirement accounts properly", "body": "Talk to a financial advisor. Start acting like a grown-up.", "delta": {"money": -4000, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 2}, "min_money": 4000}, {"title": "Nothing changes, you feel fine now", "body": "The knee works. Back to work. Ignore the lesson.", "delta": {"money": 1500, "sanity": -8, "audience": 0, "ai_skill": 0, "friends": -1}, "min_money": null}], "allow_freeform": true}
74
+ {"id": "plumber_85_town_council_ai_permits", "phase": "Late", "title": "Town Council Asks You to Testify", "body": "Town council is considering streamlining the permit process with AI. They want testimony from working plumbers. You know the permit system's flaws. You also know that Ron's job might be at stake. And that every politician in the room suddenly cares what plumbers think.", "choices": [{"title": "Testify honestly about what works", "body": "Tell the truth about permits. Even the parts that make Ron nervous.", "delta": {"money": 0, "sanity": 6, "audience": 8, "ai_skill": 0, "friends": -7}}, {"title": "Defend the current system and Ron", "body": "The human system works. Don't fix what isn't broken.", "delta": {"money": 0, "sanity": 8, "audience": -7, "ai_skill": 0, "friends": 10}}, {"title": "Propose a hybrid approach", "body": "AI for paperwork, humans for judgment. Best of both.", "delta": {"money": 0, "sanity": 0, "audience": 8, "ai_skill": 6, "friends": 2}}], "allow_freeform": true}
75
+ {"id": "plumber_104_scammed_aftermath", "phase": "Late", "title": "Counterfeit Fittings Story Hits Trade Press", "body": "That counterfeit fitting scandal? A trade publication picked it up. Three other plumbers in the region got hit by the same supplier. Your name is in the article as the first one to sound the alarm. Supply house guys are calling to thank you.", "requires": ["got_scammed"], "once_per_run": true, "choices": [{"title": "Push for industry verification standards", "body": "Make sure nobody else gets burned. Lead the initiative.", "delta": {"money": 0, "sanity": 8, "audience": 8, "ai_skill": 0, "friends": 10}, "effects": [{"op": "set_flag", "flag": "built_community"}]}, {"title": "Use the press to grow your business", "body": "Being the honest plumber is good marketing. Lean into it.", "delta": {"money": 1200, "sanity": -5, "audience": 8, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Put it behind you, move on", "body": "The story is told. The lesson is learned. Back to work.", "delta": {"money": 0, "sanity": 6, "audience": -6, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
76
+ {"id": "plumber_105_sabbatical_return", "phase": "Late", "title": "Back from Vacation, Nothing Burned Down", "body": "You took the vacation. A real one. Beach. No phone. Your crew handled everything. Nothing caught fire. One client complained about a delay and your foreman handled it. You realize you might not be as indispensable as you thought. This is either terrifying or freeing.", "requires": ["took_sabbatical"], "once_per_run": true, "choices": [{"title": "Build a team that doesn't need you daily", "body": "A business that works without you is a real business.", "delta": {"money": 2000, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": null}, {"title": "Come back swinging, reassert yourself", "body": "They managed without you. Make sure they don't get used to it.", "delta": {"money": 2200, "sanity": -10, "audience": -1, "ai_skill": 6, "friends": -10}, "min_money": null}, {"title": "Plan the next vacation immediately", "body": "If the world didn't end, you can do this again.", "delta": {"money": -1000, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 6}, "min_money": 1000, "effects": [{"op": "set_flag", "flag": "found_balance"}]}], "allow_freeform": true}
77
+ {"id": "plumber_112_father_son_talk", "phase": "Late", "title": "Your Dad Calls About the Business", "body": "Your father, who plumbed for 40 years, calls. He's been reading about AI and data centers. He asks if the work has changed. You tell him about the liquid cooling systems, the AI scheduling, the tech bros learning to solder. He's quiet for a long time. Then he says: \"Pipes are still pipes.\"", "choices": [{"title": "Tell him he was right about everything", "body": "He pushed you into the trade. He was right. Tell him.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 10}}, {"title": "Ask him for advice on going independent", "body": "He ran his own shop for 25 years. Pick his brain.", "delta": {"money": 0, "sanity": 0, "audience": 0, "ai_skill": 6, "friends": 8}, "effects": [{"op": "set_flag", "flag": "has_mentor"}]}, {"title": "Invite him to see a data center job", "body": "Show him the future of his trade. Let him be proud.", "delta": {"money": -300, "sanity": 10, "audience": 2, "ai_skill": 1, "friends": 10}, "min_money": 300}], "allow_freeform": true}
78
+ {"id": "plumber_117_mentor_burned_recovery", "phase": "Late", "title": "Burned Apprentice Apologizes Two Years Later", "body": "That apprentice who quit on you via text? He's back. Tail between legs. Says the coding bootcamp was a disaster, the remote job was miserable, and he should have stuck with the trade. He's asking for a second chance.", "requires": ["mentor_burned"], "once_per_run": true, "choices": [{"title": "Take him back, people deserve seconds", "body": "He learned the hard way. That's the best way to learn.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 10}, "effects": [{"op": "set_flag", "flag": "recovered_from_crisis"}]}, {"title": "Tell him to apply through the hall properly", "body": "No shortcuts. If he's serious, do it right this time.", "delta": {"money": 0, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 2}}, {"title": "Wish him well but say no", "body": "Trust is earned, not returned. He broke it once.", "delta": {"money": 0, "sanity": 5, "audience": -5, "ai_skill": 0, "friends": -8}}], "allow_freeform": true}
79
+ {"id": "plumber_129_voltsy_floods_server_room", "phase": "Late", "title": "Voltsy Gig Plumber Floods a Server Room", "body": "An unlicensed gig plumber from Voltsy just flooded a data center server room. $2 million in damage. It's national news. The clip shows water pouring over server racks. Your union rep sends you the link with one word: \"vindicated.\"", "choices": [{"title": "Say nothing, let the work speak", "body": "The best revenge is competence. Stay quiet.", "delta": {"money": 0, "sanity": 8, "audience": -5, "ai_skill": 0, "friends": 8}}, {"title": "Write an op-ed about licensing", "body": "This is the moment to make the case for licensed professionals.", "delta": {"money": 0, "sanity": -8, "audience": 11, "ai_skill": 0, "friends": 0}, "effects": [{"op": "set_flag", "flag": "started_newsletter"}]}, {"title": "Call clients who switched to Voltsy", "body": "\"How's that 30% discount working out?\" Be professional about it. Mostly.", "delta": {"money": 500, "sanity": 6, "audience": 3, "ai_skill": 0, "friends": -7}, "min_money": null}], "allow_freeform": true}
80
+ {"id": "plumber_133_master_plumber_exam", "phase": "Late", "title": "Master Plumber Exam Is Next Month", "body": "You've been eligible for the master plumber exam for two years. You've been \"going to take it\" for two years. Next month's date is the last one this year. The pass rate is 60%. The study guide is 400 pages. Your wife bought you a highlighter.", "choices": [{"title": "Study hard, take the exam, level up", "body": "Master plumber title means master plumber money. Open the book.", "delta": {"money": -500, "sanity": -8, "audience": 6, "ai_skill": 8, "friends": 0}, "min_money": 500}, {"title": "Take a prep course for $500", "body": "Invest in structured learning. Don't wing the most important test.", "delta": {"money": -500, "sanity": -5, "audience": 3, "ai_skill": 7, "friends": 0}, "min_money": 500}, {"title": "Push it to next year, again", "body": "You're doing fine without it. There's always next year.", "delta": {"money": 0, "sanity": 6, "audience": -8, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
81
+ {"id": "plumber_35_status_inversion", "phase": "Endgame", "title": "Dinner Party Math", "body": "Dinner party. Lawyer. Accountant. UX designer — laid off in March. You're the highest earner in the room and everyone knows it. Not contempt in their eyes. Envy. Worse: relief that at least someone is doing okay. The host pours wine that costs less than your hourly rate.", "choices": [{"title": "Deflect, change the subject", "body": "Eat. Drink. Talk about literally anything else.", "delta": {"money": 0, "sanity": 7, "audience": -7, "ai_skill": 0, "friends": 8}, "min_money": null}, {"title": "Own it, tell the real story", "body": "They want to know. So tell them. All of it.", "delta": {"money": 0, "sanity": 8, "audience": 12, "ai_skill": 0, "friends": 2}, "min_money": null, "effects": [{"op": "set_flag", "flag": "built_following"}]}, {"title": "Feel the weight, say nothing", "body": "Some truths are heavier spoken. Yours stays in your chest.", "delta": {"money": 0, "sanity": -10, "audience": -2, "ai_skill": 0, "friends": 5}, "min_money": null}], "allow_freeform": true}
82
+ {"id": "plumber_36_new_aristocracy", "phase": "Endgame", "title": "The People Who Touch Real Things", "body": "Prestige class. That's what the magazine called you. Plumbers. Electricians. Carpenters. 'The people who touch real things.' Your daughter's college friends are asking about apprenticeships. The irony is load-bearing and nobody can automate it.", "choices": [{"title": "Accept it gracefully", "body": "Nod. Work. Let history sort itself out.", "delta": {"money": 0, "sanity": 10, "audience": 2, "ai_skill": 0, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Recruit for the trade", "body": "If they're coming anyway, shape what they become.", "delta": {"money": 0, "sanity": -5, "audience": 9, "ai_skill": 0, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "built_community"}]}, {"title": "Warn against romanticizing", "body": "Your knees have opinions about prestige. So does your back.", "delta": {"money": 0, "sanity": 8, "audience": 11, "ai_skill": 0, "friends": -6}, "min_money": null}], "allow_freeform": true}
83
+ {"id": "plumber_37_watching_neighbors_lose_purpose", "phase": "Endgame", "title": "Your Street Is Getting Quiet", "body": "Neighbor. Hasn't left the house in three weeks. Across the street: 'consulting,' no clients since June. Two doors down: day-drinking since his department got automated. You wave every morning. They wave back. You go to work. They go inside. Your monthly take-home is their annual. The distance between your driveways is ten feet. The distance between your lives is a civilization.", "choices": [{"title": "Check on them, be a neighbor", "body": "Knock. Bring beer. Don't mention money. Don't mention work.", "delta": {"money": -200, "sanity": -7, "audience": 0, "ai_skill": 0, "friends": 11}, "min_money": 200}, {"title": "Offer to teach them trades", "body": "They need something to do with their hands. You have something.", "delta": {"money": 0, "sanity": -8, "audience": 8, "ai_skill": 0, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}, {"title": "Focus on your own family", "body": "You can't fix everyone. Some leaks are structural.", "delta": {"money": 0, "sanity": 8, "audience": -10, "ai_skill": 0, "friends": -8}, "min_money": null}], "allow_freeform": true}
84
+ {"id": "plumber_38_asked_to_run_for_office", "phase": "Endgame", "title": "They Want You to Run for Office", "body": "The trades bloc is now a political force. A local party chair asks you to run for city council. Your slogan, she suggests: \"I fix real problems.\" You think about the paperwork. The meetings. The handshakes. Then you think about the infrastructure budget and what you could do with it.", "choices": [{"title": "Run for office, bring the trades voice", "body": "Somebody has to represent people who actually build things.", "delta": {"money": -4000, "sanity": -11, "audience": 11, "ai_skill": 0, "friends": 8}, "min_money": 4000, "effects": [{"op": "set_flag", "flag": "pivoted_career"}]}, {"title": "Decline, endorse someone you trust", "body": "You're a better plumber than politician. Find someone who's both.", "delta": {"money": 0, "sanity": 10, "audience": 8, "ai_skill": 0, "friends": 4}}, {"title": "Say you'll think about it, mean it", "body": "This deserves real thought. Not a gut reaction.", "delta": {"money": 0, "sanity": 3, "audience": 6, "ai_skill": 0, "friends": 8}}], "allow_freeform": true}
85
+ {"id": "plumber_39_ai_buildings_bizarre_plumbing", "phase": "Endgame", "title": "AI-Designed Building Has Alien Plumbing", "body": "New building was designed entirely by AI. The plumbing layout is mathematically optimal and physically insane. Pipes route through structural members. Cleanouts are behind permanent walls. The drain slope is technically correct but requires sixteen 22.5-degree fittings where two 90s would work. Your job is MORE complex now, not less.", "choices": [{"title": "Adapt, learn the new logic", "body": "AI thinks differently. Learn to read its mind. Bill accordingly.", "delta": {"money": 3000, "sanity": -8, "audience": 2, "ai_skill": 8, "friends": 0}, "effects": [{"op": "set_flag", "flag": "embraced_ai"}], "min_money": null}, {"title": "Red-line every impossible detail", "body": "Somebody has to tell the AI it's wrong. That somebody is you.", "delta": {"money": 0, "sanity": 6, "audience": 9, "ai_skill": 2, "friends": -7}}, {"title": "Bill triple for the complexity premium", "body": "If they want AI-designed buildings, they pay human-debugged prices.", "delta": {"money": 8000, "sanity": -10, "audience": 3, "ai_skill": 8, "friends": -4}, "min_money": null}], "allow_freeform": true}
86
+ {"id": "plumber_40_ai_essential_not_ai_proof", "phase": "Endgame", "title": "You're Not AI-Proof. You're AI-Essential.", "body": "It hits you during a routine data center call. Your AI-resistant job didn't resist AI -- it became AI-dependent. The data centers that power every AI model need your skills more than ever. You're not surviving despite AI. You're thriving because of it. The snake eating its tail needed a plumber to keep the water flowing.", "choices": [{"title": "Lean into the irony, specialize further", "body": "If AI needs you, make yourself indispensable to AI.", "delta": {"money": 7000, "sanity": 8, "audience": 2, "ai_skill": 10, "friends": 0}, "effects": [{"op": "set_flag", "flag": "embraced_ai"}], "min_money": null}, {"title": "Diversify away from data center dependence", "body": "Don't put all your pipes in one building. Stay broad.", "delta": {"money": 0, "sanity": 8, "audience": 0, "ai_skill": -2, "friends": 8}}, {"title": "Write about it, someone should document this", "body": "The plumber who keeps AI alive. That's a story worth telling.", "delta": {"money": 0, "sanity": -6, "audience": 10, "ai_skill": 2, "friends": 2}, "effects": [{"op": "set_flag", "flag": "started_newsletter"}]}], "allow_freeform": true}
87
+ {"id": "plumber_41_apprentice_costs_more_than_mba", "phase": "Endgame", "title": "Apprenticeship Now Costs More Than an MBA", "body": "Plumbing apprenticeship programs now cost more than MBA programs. The irony is thick enough to solder. Your newest apprentice is a former McKinsey consultant who took a pay cut to learn pipe fitting. He brings a leather notebook to the job site. He takes notes in a system he calls \"second brain.\" He is somehow good at this.", "choices": [{"title": "Train him hard, he can handle it", "body": "McKinsey taught him frameworks. You'll teach him copper.", "delta": {"money": 0, "sanity": -6, "audience": 2, "ai_skill": 6, "friends": 10}, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Charge a premium for your mentorship", "body": "If the apprenticeship is worth more than an MBA, your teaching is too.", "delta": {"money": 3000, "sanity": -6, "audience": 9, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Learn something from his management brain", "body": "He knows systems. You know pipes. Cross-pollinate.", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 8, "friends": 9}, "effects": [{"op": "set_flag", "flag": "collab_with_ai"}]}], "allow_freeform": true}
88
+ {"id": "plumber_42_union_contract_ai_clause", "phase": "Endgame", "title": "Union Contract Gets an \"AI Clause\"", "body": "New contracts include an AI clause. Management wants sensors, scheduling agents, productivity scoring. Union wants safety, dignity, and pay. Room is tense. Everyone polite. Everyone knows this sets precedent for the entire trade. Your union is now the most powerful negotiating body in the room.", "choices": [{"title": "Fight to ban workplace AI surveillance", "body": "No algorithms on the job site. Hard line. Hold it.", "delta": {"money": 0, "sanity": 8, "audience": -8, "ai_skill": 0, "friends": 10}, "effects": [{"op": "set_flag", "flag": "rejected_ai"}]}, {"title": "Accept AI for significantly higher wages", "body": "Let them watch if they pay for the privilege. Triple the premium.", "delta": {"money": 3500, "sanity": -10, "audience": 2, "ai_skill": 0, "friends": -11}, "effects": [{"op": "set_flag", "flag": "sold_out"}], "min_money": null}, {"title": "Compromise: AI allowed, worker-audited", "body": "Technology is fine. Unchecked surveillance is not. Workers audit the algorithm.", "delta": {"money": 0, "sanity": 6, "audience": 1, "ai_skill": 8, "friends": 4}, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}], "allow_freeform": true}
89
+ {"id": "plumber_43_safety_incident", "phase": "Endgame", "title": "Someone Gets Hurt on a Rush Job", "body": "Not fatal, but close. Foreman says bad luck. You see the root cause: speed. Everyone's been moving too fast. The world is moving too fast. The money is too good and the deadlines are too tight. You have to decide what kind of worker you are when it actually matters.", "choices": [{"title": "Slow the job, enforce safety", "body": "Nobody else gets hurt. Not today. Not on your watch.", "delta": {"money": -1500, "sanity": 9, "audience": -1, "ai_skill": 0, "friends": 10}, "min_money": 1500}, {"title": "Keep the pace, bills are bills", "body": "Sympathy doesn't pay the mortgage. Keep moving.", "delta": {"money": 1500, "sanity": -11, "audience": 0, "ai_skill": 0, "friends": -9}, "min_money": null}, {"title": "Report it, force investigation", "body": "File it formally. Let the system work. Burn the bridge if needed.", "delta": {"money": 0, "sanity": 8, "audience": 9, "ai_skill": 0, "friends": -10}, "effects": [{"op": "set_flag", "flag": "blew_the_whistle"}]}], "allow_freeform": true}
90
+ {"id": "plumber_44_government_grid_upgrades", "phase": "Endgame", "title": "Government Mandates Grid Upgrades", "body": "Federal grid upgrades to handle AI power demand. Contracts everywhere. Tech people arguing on the internet about whether this is good. You are getting paid in the real world. The discourse is irrelevant. The wiring is not. Your income tax this year will exceed what you made in total five years ago.", "choices": [{"title": "Jump on highest-paying contracts", "body": "Live at work. Stack cash. Worry about your life later.", "delta": {"money": 8000, "sanity": -10, "audience": 6, "ai_skill": 0, "friends": -9}, "min_money": null}, {"title": "Train apprentices to meet demand", "body": "You can't do it all alone. Build the next generation.", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 0, "friends": 11}, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Take fewer jobs, enjoy your life", "body": "The world is panicking. You are grilling.", "delta": {"money": -1500, "sanity": 11, "audience": -1, "ai_skill": 0, "friends": 4}, "min_money": 1500, "effects": [{"op": "set_flag", "flag": "found_balance"}]}], "allow_freeform": true}
91
+ {"id": "plumber_45_robots_show_up_get_stuck", "phase": "Endgame", "title": "The Robots Don't Get Stuck Anymore", "body": "Construction robots. Third generation. They carry. They drill. They measure. They don't complain, eat lunch, or need OSHA training. They also can't feel a pipe vibrate wrong or smell gas from two rooms away. Not yet. 'Not yet' used to be a punchline. Now it's a timeline. Last year you laughed. This year you're watching.", "choices": [{"title": "Learn to work alongside them", "body": "If the future has your name on it, learn its language.", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 10, "friends": -1}, "min_money": null, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Focus on what they can't do", "body": "Instinct. Judgment. The smell test. Your moat is your senses.", "delta": {"money": 0, "sanity": 10, "audience": -6, "ai_skill": 0, "friends": 7}, "min_money": null}, {"title": "Ask the robot tech real questions", "body": "How fast are they improving? Honest answer. Not the sales pitch.", "delta": {"money": 0, "sanity": -7, "audience": 6, "ai_skill": 8, "friends": 0}, "min_money": null, "effects": [{"op": "set_flag", "flag": "collab_with_ai"}]}], "allow_freeform": true}
92
+ {"id": "plumber_46_start_your_own_shop", "phase": "Endgame", "title": "Start Your Own Shop?", "body": "More leads than hours. People ask for you by name. You could go independent. More money, more risk, more nights thinking about payroll instead of sleeping. But in this economy, the risk feels different. The demand isn't going away. AI made sure of that.", "choices": [{"title": "Start LLC, hire apprentices, go indie", "body": "Your name on the truck. Your rules. Your risk.", "delta": {"money": -10000, "sanity": -11, "audience": 9, "ai_skill": 0, "friends": -9}, "effects": [{"op": "set_flag", "flag": "went_freelance"}], "min_money": 10000}, {"title": "Partner with a friend, split jobs", "body": "Two names on the truck. Half the stress.", "delta": {"money": 1500, "sanity": -4, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": null}, {"title": "Stay with union for stability", "body": "Benefits, pension, brotherhood. Some things are worth more than a logo.", "delta": {"money": 0, "sanity": 8, "audience": -5, "ai_skill": 0, "friends": 5}, "min_money": null}], "allow_freeform": true}
93
+ {"id": "plumber_101_retirement_math", "phase": "Endgame", "title": "The Calculator Says Stop", "body": "Calculator. Pension. 401k. Social Security. You could retire at 52. Your dad worked until 67 and his knees never forgave him. You're 44. The math says stop. But the contracts keep coming and the money is stupid and your body is a clock that doesn't show its time. The calculator doesn't know about the crawl spaces.", "choices": [{"title": "Lock in the plan, work toward 52", "body": "Set the date. Tell your wife. Mean it this time.", "delta": {"money": -2000, "sanity": 11, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Keep working, the money is insane", "body": "52 is for people who don't make $800 an hour. You'll stop when it stops.", "delta": {"money": 6000, "sanity": -11, "audience": 0, "ai_skill": 0, "friends": -7}, "min_money": null}, {"title": "Semi-retire: teach and consult", "body": "Your brain still works when your back doesn't. Monetize that.", "delta": {"money": 0, "sanity": 8, "audience": 8, "ai_skill": 0, "friends": 3}, "min_money": null, "effects": [{"op": "set_flag", "flag": "started_teaching"}]}], "allow_freeform": true}
94
+ {"id": "plumber_102_ai_scheduling_overbooks", "phase": "Endgame", "title": "AI Scheduling Tool Overbooks Your Week", "body": "The new AI dispatch system booked you for 14 jobs in a 5-day week. Each job is estimated at \"45 minutes\" by an algorithm that has never seen a corroded shutoff valve. The algorithm does not account for driving, lunch, or the laws of physics.", "choices": [{"title": "Override the schedule manually", "body": "You're the plumber, not the algorithm. Set realistic times.", "delta": {"money": 0, "sanity": 8, "audience": -5, "ai_skill": 7, "friends": 2}}, {"title": "Try to hit the AI schedule as a challenge", "body": "14 jobs? Speed run. Let's see what happens.", "delta": {"money": 4200, "sanity": -12, "audience": 2, "ai_skill": 0, "friends": -8}, "min_money": null}, {"title": "Complain to management with data", "body": "Print the schedule. Highlight the impossibilities. Present to humans.", "delta": {"money": 0, "sanity": 5, "audience": 8, "ai_skill": 3, "friends": 0}}], "allow_freeform": true}
95
+ {"id": "plumber_103_tech_apprentice_surpasses", "phase": "Endgame", "title": "The Tech Guy You Trained Is Now Faster", "body": "Marcus, the Carnegie Mellon guy, is now a journeyman. He's faster than you on certain installs. He combines tech knowledge with trade skills in ways you didn't expect. He still calls you \"boss\" even though you're not. You feel proud and something else you can't name.", "requires": ["became_mentor"], "forbids": ["mentor_burned"], "choices": [{"title": "Celebrate his growth, be proud", "body": "You built this. The best version of mentorship.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 10}}, {"title": "Challenge yourself to keep up", "body": "If the student passes the teacher, the teacher trains harder.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 8, "friends": 2}}, {"title": "Make him your business partner", "body": "His skills and yours together. Unstoppable.", "delta": {"money": 800, "sanity": -3, "audience": 8, "ai_skill": 1, "friends": 11}, "min_money": null}], "allow_freeform": true}
96
+ {"id": "plumber_121_ai_image_job_site", "phase": "Endgame", "title": "Someone AI-Generated Your Job Site for an Ad", "body": "A construction marketing company used AI to generate a stock photo of \"plumbers at work.\" It's clearly your job site -- same building, same crane, same angle. But the plumbers in the image have seven fingers and the pipe wrench is backwards. They're selling it commercially.", "choices": [{"title": "Lawyer up, your likeness isn't free", "body": "If they're making money from your site, you should be too.", "delta": {"money": 800, "sanity": -5, "audience": 6, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Post the comparison online, roast them", "body": "Seven-fingered plumber with a backwards wrench. The content writes itself.", "delta": {"money": 0, "sanity": 10, "audience": 12, "ai_skill": 0, "friends": 8}, "effects": [{"op": "set_flag", "flag": "plagiarized_by_ai"}]}, {"title": "Ignore it, you have real work to do", "body": "AI-generated nonsense isn't worth your time.", "delta": {"money": 0, "sanity": 6, "audience": -6, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
97
+ {"id": "plumber_125_pension_fund_strong", "phase": "Endgame", "title": "Pension Fund Posts Record Returns", "body": "IBEW pension fund. Best year ever. Infrastructure and energy bets paid off while tech portfolios cratered. Your projected benefit: up 22%. The Reddit finance bros are seething. Their index funds got disrupted by the same infrastructure your fund invested in building. You are living inside a Baumol's cost disease case study and it is extremely profitable.", "choices": [{"title": "Feel quietly vindicated", "body": "Don't post. Don't brag. Just smile at the statement.", "delta": {"money": 500, "sanity": 10, "audience": -1, "ai_skill": 0, "friends": 2}, "min_money": null}, {"title": "Volunteer for pension oversight", "body": "Somebody should understand where this money goes. Might as well be you.", "delta": {"money": 0, "sanity": -5, "audience": 10, "ai_skill": 0, "friends": 9}, "min_money": null}, {"title": "Max your 401k on top of it", "body": "Belt and suspenders. Your dad's voice saying 'save it' never shuts up.", "delta": {"money": -3000, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 3000}], "allow_freeform": true}
98
+ {"id": "plumber_126_community_saves_family", "phase": "Endgame", "title": "Your Network Saves a Plumber's Family", "body": "A plumber at the hall gets diagnosed with cancer. The community you helped build kicks in. GoFundMe. Meal train. Guys covering his jobs so his family doesn't lose income. The union's sick fund covers the rest. This is what organized labor actually looks like.", "requires": ["built_community"], "choices": [{"title": "Organize more, cover his shifts yourself", "body": "He'd do it for you. Don't even hesitate.", "delta": {"money": -800, "sanity": 8, "audience": 1, "ai_skill": 0, "friends": 11}, "min_money": 800}, {"title": "Donate money, coordinate from background", "body": "Not everyone leads from the front. Lead from the checkbook.", "delta": {"money": -2000, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 9}, "min_money": 2000}, {"title": "Make this a permanent mutual aid program", "body": "One-time help is charity. Permanent structure is power.", "delta": {"money": -1000, "sanity": -6, "audience": 10, "ai_skill": 0, "friends": 11}, "min_money": 1000}], "allow_freeform": true}
99
+ {"id": "plumber_127_plumbing_robot_demo", "phase": "Endgame", "title": "Plumbing Robot Demo at the Trade Show", "body": "Trade show has a booth demoing an \"autonomous plumbing robot.\" It can solder a straight joint in controlled conditions. The demo area is clean, level, and climate-controlled. You ask if it can work in a crawl space with standing water and live wires. The booth guy blinks. You ask if it can negotiate with Ron. He doesn't know who Ron is.", "choices": [{"title": "Laugh and walk away", "body": "Call me when it can sweat copper upside down in the rain.", "delta": {"money": 0, "sanity": 8, "audience": -6, "ai_skill": 0, "friends": 6}}, {"title": "Genuinely assess its capabilities", "body": "Don't dismiss it because it's early. Understand what it can do.", "delta": {"money": 0, "sanity": -4, "audience": 8, "ai_skill": 8, "friends": 0}, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Ask about investment opportunities", "body": "If it gets good, you want to own it, not compete with it.", "delta": {"money": -5000, "sanity": -6, "audience": 7, "ai_skill": 3, "friends": -1}, "min_money": 5000, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}], "allow_freeform": true}
100
+ {"id": "plumber_128_freelance_six_figure_contract", "phase": "Endgame", "title": "Your Shop Lands a Six-Figure Contract", "body": "The LLC you started just won a $250,000 commercial plumbing contract. You're sitting in your truck reading the signed agreement. Your name is on it. Your insurance. Your liability. Your crew. It feels like the first day of the rest of your life. It also feels like it might kill you.", "requires": ["went_freelance"], "once_per_run": true, "choices": [{"title": "Celebrate with crew, then get to work", "body": "Mark the moment. Then earn it.", "delta": {"money": 8000, "sanity": -7, "audience": 10, "ai_skill": 0, "friends": 11}, "min_money": null}, {"title": "Reinvest everything into the business", "body": "No celebration yet. Plow the money back. Grow.", "delta": {"money": 0, "sanity": -10, "audience": 1, "ai_skill": 10, "friends": -2}}, {"title": "Call your dad and tell him", "body": "He'll understand what this means better than anyone.", "delta": {"money": 0, "sanity": 11, "audience": 0, "ai_skill": 0, "friends": 10}}], "allow_freeform": true}
101
+ {"id": "plumber_134_data_center_vip_tour", "phase": "Endgame", "title": "They Gave You the Tour", "body": "Data center. VIP badge. Rows of servers humming on your pipe work. Coolant through walls you sweated over. A tech VP shakes your hand. 'None of this works without your team.' He means it. Behind him, ten thousand GPUs are training something that might replace his job. Not yours. His.", "choices": [{"title": "Feel proud, you built something real", "body": "Copper and flux. That's your signature on the future.", "delta": {"money": 0, "sanity": 11, "audience": 4, "ai_skill": 9, "friends": 9}, "min_money": null}, {"title": "Pitch a maintenance contract", "body": "Pride is free. Retainers are not. Get the contract.", "delta": {"money": 7000, "sanity": -8, "audience": 10, "ai_skill": 0, "friends": -1}, "min_money": null}, {"title": "Bring your kid to see it", "body": "She should see what her old man built. Even if she builds different things.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": null}], "allow_freeform": true}
102
+ {"id": "plumber_140_pipes_dont_need_a_prompt", "phase": "Endgame", "title": "Pipes Don't Need a Prompt", "body": "Last call. Tools cleaned. Truck locked. Hands smell like copper and flux — same as your dad's did, same as his did. Inside: family noise. Outside: the world arguing about superintelligence. Your phone has 14 missed calls from people who need things fixed. Tomorrow you'll fix them. The snake eating its tail needed a plumber to keep the water flowing. It still does. Walk to the door.", "choices": [{"title": "Go inside, be home", "body": "The door opens. The noise is yours. Everything else can wait.", "delta": {"money": 0, "sanity": 12, "audience": -1, "ai_skill": 0, "friends": 11}, "min_money": null, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Sit in the truck one more minute", "body": "Quiet. Engine ticking. Tomorrow is already booked. This minute is yours.", "delta": {"money": 0, "sanity": 10, "audience": -6, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Call your dad", "body": "He'll understand. He always understood.", "delta": {"money": 0, "sanity": 11, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": null}], "allow_freeform": true}
103
+ {"id": "plumber_44_ai_discount_request", "phase": "Any", "title": "Client Asks for an \"AI Discount\"", "body": "Client says: \"Since AI is doing everything now, can you do a discount?\" You are holding pipe wrenches. AI is not holding pipe wrenches. AI has never held pipe wrenches. The client smiles like they said something clever.", "choices": [{"title": "Explain why the price is the price", "body": "Calmly describe what licensed, insured, union labor costs and why.", "delta": {"money": 0, "sanity": 5, "audience": -3, "ai_skill": 0, "friends": 0}}, {"title": "Small discount, keep the relationship", "body": "Pick your battles. This client has three more properties.", "delta": {"money": -200, "sanity": 1, "audience": 0, "ai_skill": 0, "friends": 6}, "min_money": 200}, {"title": "Actually, charge more", "body": "\"You know what, you're right, let me recalculate.\" Add 10%.", "delta": {"money": 200, "sanity": 0, "audience": -5, "ai_skill": 0, "friends": -1}, "min_money": null}], "allow_freeform": true}
104
+ {"id": "plumber_45_scared_kid_wants_in", "phase": "Any", "title": "Scared Kid Wants Into the Trade", "body": "Kid on the job site asks how to get in. Eager. Scared. Says parents want him to learn to code instead. You feel something protective in your chest that you didn't plan on feeling today.", "choices": [{"title": "Mentor him, bring him to the hall", "body": "Take him under your wing. Show him the path is real.", "delta": {"money": -150, "sanity": 6, "audience": 1, "ai_skill": 0, "friends": 8}, "min_money": 150, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}, {"title": "Give him the hard truth and the path", "body": "Be honest about the work. If he still wants in, he's ready.", "delta": {"money": 0, "sanity": 5, "audience": 6, "ai_skill": 0, "friends": 0}}, {"title": "Tell him to stay in school", "body": "Don't push your life on a kid. Let him choose.", "delta": {"money": 0, "sanity": 4, "audience": 0, "ai_skill": 0, "friends": -3}}], "allow_freeform": true}
105
+ {"id": "plumber_46_tool_theft_scare", "phase": "Any", "title": "Tools Vanish for an Hour, Then Reappear", "body": "Your tools go missing. Then they're back. Nobody says anything. You realize your whole livelihood is a set of objects in a box. You lock everything up like you're guarding gold, because you are.", "choices": [{"title": "Better locks and insurance", "body": "Spend money to protect the things that make money.", "delta": {"money": -800, "sanity": 4, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 800}, {"title": "Confront the crew, make it awkward", "body": "Somebody knows something. Make eye contact until they talk.", "delta": {"money": 0, "sanity": -6, "audience": 4, "ai_skill": 0, "friends": -8}, "effects": [{"op": "set_flag", "flag": "burned_bridge"}]}, {"title": "Let it go, stay focused", "body": "Tools came back. Move on. Watch more carefully.", "delta": {"money": 0, "sanity": 4, "audience": -3, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
106
+ {"id": "plumber_47_overtime_temptation", "phase": "Any", "title": "Overtime Is Always Available Now", "body": "There's overtime. There's always overtime now. Checks are good. Hours are brutal. You can feel your body aging in exchange for money. You can also feel your bank account getting peaceful.", "choices": [{"title": "Take the hours, stack cash", "body": "Youth is a depreciating asset. Convert it to dollars.", "delta": {"money": 3500, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": -2}, "min_money": null}, {"title": "Skip overtime and recover", "body": "Your back has opinions about overtime. Listen to it.", "delta": {"money": -1500, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 1}, "min_money": 1500}, {"title": "Overtime with the crew only", "body": "If you're grinding, grind together.", "delta": {"money": 1500, "sanity": -4, "audience": 0, "ai_skill": 0, "friends": 7}, "min_money": null}], "allow_freeform": true}
107
+ {"id": "plumber_48_photo_op_politician", "phase": "Any", "title": "Politician Wants a Hard Hat Photo", "body": "Local politician wants a photo op at the site. Wants to stand next to you and say \"good jobs.\" Shakes your hand too long. Asks if you \"feel optimistic about the future.\" You could absolutely ruin their day.", "choices": [{"title": "Smile, nod, take the check", "body": "Photo ops pay. Take the money. Go home.", "delta": {"money": 600, "sanity": -5, "audience": 2, "ai_skill": 0, "friends": -2}, "effects": [{"op": "set_flag", "flag": "sold_out"}], "min_money": null}, {"title": "Tell the truth, politely, on camera", "body": "You're not a prop. Say what's real. Let the chips fall.", "delta": {"money": 0, "sanity": 6, "audience": 8, "ai_skill": 0, "friends": -4}}, {"title": "Decline to participate entirely", "body": "You're a plumber, not a backdrop.", "delta": {"money": 0, "sanity": 6, "audience": -4, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
108
+ {"id": "plumber_49_crew_bbq", "phase": "Any", "title": "Crew BBQ, No Personal Brands", "body": "After the job, crew does a BBQ. Someone brings beer. Someone brings their kid. People talk about real life. You remember what it feels like to be around humans without a content strategy.", "choices": [{"title": "Show up and be fully present", "body": "Be there. Eat the food. Listen to the stories.", "delta": {"money": -80, "sanity": 8, "audience": -1, "ai_skill": 0, "friends": 8}, "min_money": 80}, {"title": "Skip it, go home and recover", "body": "You need the couch more than the camaraderie tonight.", "delta": {"money": 0, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": -4}}, {"title": "Show up briefly, leave before drama", "body": "One beer. One handshake. Out before it gets complicated.", "delta": {"money": 0, "sanity": 4, "audience": -4, "ai_skill": 0, "friends": 2}}], "allow_freeform": true}
109
+ {"id": "plumber_50_quiet_morning", "phase": "Any", "title": "Coffee, Birds, No Slack Notifications", "body": "You wake up early. Coffee outside. Birds. Wind. No Slack. No email. No push notifications about synergy. You remember you're alive. Then you remember there's money available if you pick up one more shift.", "choices": [{"title": "Keep mornings sacred", "body": "This peace is non-negotiable. Protect it.", "delta": {"money": 0, "sanity": 8, "audience": -3, "ai_skill": 0, "friends": 0}, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Pick up the extra shift", "body": "Peace doesn't compound. Money does. Go to work.", "delta": {"money": 1800, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Study for next certification", "body": "Morning brain is learning brain. Invest in yourself.", "delta": {"money": 0, "sanity": -3, "audience": 4, "ai_skill": 6, "friends": 0}}], "allow_freeform": true}
110
+ {"id": "plumber_71_neighbor_diy_disaster", "phase": "Any", "title": "Neighbor's DIY Plumbing Is a Crime Scene", "body": "Your neighbor tried to install a garbage disposal using a YouTube tutorial from 2014. Water is coming through the ceiling. They are standing in the kitchen holding a wrench and a phone with a paused video. They see you getting the mail and their eyes light up like you're the fire department.", "choices": [{"title": "Fix it for free, earn a friend", "body": "Be the neighbor you'd want. Fix the pipe. Refuse the money.", "delta": {"money": -150, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 150}, {"title": "Fix it, charge full rate", "body": "Friendship doesn't pay for fittings. Quote them.", "delta": {"money": 500, "sanity": -4, "audience": 0, "ai_skill": 0, "friends": -6}, "min_money": null}, {"title": "Walk back inside, pretend you didn't see", "body": "Not your house. Not your problem. Not today.", "delta": {"money": 0, "sanity": 1, "audience": -4, "ai_skill": 0, "friends": -5}}], "allow_freeform": true}
111
+ {"id": "plumber_72_truck_breaks_down", "phase": "Any", "title": "Work Truck Dies on the Highway", "body": "Alternator went on I-95. You're on the shoulder with $30K of tools in the bed and a job starting in 45 minutes. Tow truck is 90 minutes out. The foreman calls. You can hear the stress in his voice before he speaks.", "choices": [{"title": "Call a crew member for a ride", "body": "Somebody owes you a favor. Cash it in.", "delta": {"money": 0, "sanity": -3, "audience": 0, "ai_skill": 0, "friends": 8}}, {"title": "Cancel the job, deal with the truck", "body": "You can't be in two places. Truck comes first.", "delta": {"money": -550, "sanity": 4, "audience": -5, "ai_skill": 0, "friends": 0}, "min_money": 550}, {"title": "Uber to the site, deal with truck tonight", "body": "The job can't wait. The truck can. Sleep can't, but does anyway.", "delta": {"money": -640, "sanity": -6, "audience": 6, "ai_skill": 0, "friends": 0}, "min_money": 640}], "allow_freeform": true}
112
+ {"id": "plumber_75_gc_wont_pay", "phase": "Any", "title": "General Contractor Ghosts on Payment", "body": "Job's done. Invoice sent. Thirty days pass. Sixty days. The GC's phone goes to voicemail. His email auto-replies say he's \"traveling.\" You are $8,000 in the hole and your anger is becoming a hobby.", "choices": [{"title": "File a mechanics lien", "body": "Paper beats ghosting. Lien the property and wait.", "delta": {"money": 2000, "sanity": 7, "audience": 0, "ai_skill": 0, "friends": -6}, "min_money": null}, {"title": "Show up at the next job site, talk", "body": "A face-to-face conversation about money due. Politely firm.", "delta": {"money": 1500, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Eat the loss, never work for them again", "body": "Some money isn't worth chasing. Blacklist them and move on.", "delta": {"money": -4000, "sanity": 4, "audience": -5, "ai_skill": 0, "friends": 0}, "min_money": 4000}], "allow_freeform": true}
113
+ {"id": "plumber_76_heat_wave_emergency", "phase": "Any", "title": "Heat Wave Breaks Every AC in Town", "body": "Record heat. Every HVAC call in the county is backed up. People are desperate. A nursing home calls your union hall begging for anyone who can help. This isn't your specialty, but you know enough to keep people alive.", "choices": [{"title": "Volunteer at the nursing home", "body": "People are dying from heat. Go help. Figure out the billing later.", "delta": {"money": -800, "sanity": -6, "audience": 10, "ai_skill": 0, "friends": 10}, "min_money": 800}, {"title": "Stay in your lane, refer HVAC guys", "body": "You're a plumber, not HVAC. Know your limits.", "delta": {"money": 0, "sanity": 5, "audience": -3, "ai_skill": 0, "friends": 0}}, {"title": "Help but charge emergency rates", "body": "Emergency work at emergency prices. That's the deal.", "delta": {"money": 3500, "sanity": -6, "audience": -2, "ai_skill": 4, "friends": 0}, "min_money": null}], "allow_freeform": true}
114
+ {"id": "plumber_77_daughter_school_project", "phase": "Any", "title": "Daughter's School Project About Your Job", "body": "Your daughter chose \"My Parent's Career\" for her school project. She interviewed you with a notebook. Drew a picture of you in a hard hat. Wrote: \"My dad fixes things that robots can't.\" The teacher gave it an A. You put it on the fridge.", "choices": [{"title": "Frame it, put it in the shop", "body": "That drawing is worth more than any invoice.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 10}}, {"title": "Help her add real technical detail", "body": "If she's going to present it, make it accurate.", "delta": {"money": 0, "sanity": -2, "audience": 6, "ai_skill": 6, "friends": 4}}, {"title": "Get emotional, try to hide it, fail", "body": "You're fine. You're totally fine. You're crying at a stick figure.", "delta": {"money": 0, "sanity": 10, "audience": -4, "ai_skill": 0, "friends": 9}}], "allow_freeform": true}
115
+ {"id": "plumber_86_tiktok_plumber_influencer", "phase": "Any", "title": "TikTok Plumber With 2M Followers in Town", "body": "A plumber-influencer with 2 million TikTok followers just moved into your service area. His content is flashy. His plumbing is acceptable. He charges influencer rates and clients pay because they saw him dance while soldering. This is the timeline.", "choices": [{"title": "Ignore him, do your work", "body": "You were here first. You'll be here last.", "delta": {"money": 0, "sanity": 5, "audience": -4, "ai_skill": 0, "friends": 0}}, {"title": "Challenge him to a plumbing-off", "body": "Pipe vs content. See who the real plumber is.", "delta": {"money": 0, "sanity": -5, "audience": 7, "ai_skill": 0, "friends": -4}}, {"title": "Collaborate, learn from his marketing", "body": "His content skills plus your real skills. Dangerous combination.", "delta": {"money": 0, "sanity": -4, "audience": 10, "ai_skill": 0, "friends": 7}}], "allow_freeform": true}
116
+ {"id": "plumber_87_flooded_basement_3am", "phase": "Any", "title": "3am Call: Flooded Basement, Screaming Client", "body": "Phone rings at 3am. Panicked homeowner. Basement flooding. They found your number on Google. They're offering double your rate to come now. Your bed is warm. Your tools are in the truck. The truck is cold.", "choices": [{"title": "Go, charge double, be a hero", "body": "This is what emergency rates are for. Get up.", "delta": {"money": 1800, "sanity": -7, "audience": 1, "ai_skill": 0, "friends": 1}, "min_money": null}, {"title": "Talk them through shutting the valve", "body": "Walk them through it on the phone. Save them the emergency fee.", "delta": {"money": 0, "sanity": 8, "audience": 6, "ai_skill": 0, "friends": 8}}, {"title": "Tell them to call a 24-hour service", "body": "You don't do 3am calls. That's what emergency services are for.", "delta": {"money": 0, "sanity": 5, "audience": -5, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
117
+ {"id": "plumber_92_garage_workshop", "phase": "Any", "title": "Your Garage Looks Like a Supply House", "body": "Your garage has more tools than some supply houses. Your wife wants to park inside. You look at the organized racks, the labeled bins, the workbench you built yourself. This is your second home. She is not wrong though. It's snowing.", "choices": [{"title": "Build proper shelving, compromise on space", "body": "Reorganize. Make room for the car AND the tools.", "delta": {"money": -600, "sanity": 6, "audience": 0, "ai_skill": 4, "friends": 2}, "min_money": 600}, {"title": "Rent a storage unit for overflow", "body": "Monthly cost, but happy wife, happy life.", "delta": {"money": -400, "sanity": 1, "audience": 0, "ai_skill": 0, "friends": 6}, "min_money": 400}, {"title": "The garage is a workshop, period", "body": "Stand your ground. These tools make the money.", "delta": {"money": 0, "sanity": 3, "audience": -4, "ai_skill": 0, "friends": -8}}], "allow_freeform": true}
118
+ {"id": "plumber_95_subcontractor_no_show", "phase": "Any", "title": "Sub No-Shows on a Critical Day", "body": "Your subcontractor, who was supposed to handle the septic tie-in, is not answering his phone. He's not at the site. His truck is not in the lot. The concrete pour is in four hours and the pipe needs to be in the ground.", "choices": [{"title": "Do it yourself, stay all night if needed", "body": "Your name is on the job. Get in the trench.", "delta": {"money": 1800, "sanity": -10, "audience": 1, "ai_skill": 7, "friends": 0}, "min_money": null}, {"title": "Call every plumber you know", "body": "Burn through your contacts. Somebody owes you.", "delta": {"money": -1200, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 1200}, {"title": "Push the concrete pour, eat the delay", "body": "Delay is expensive. Doing it wrong is more expensive.", "delta": {"money": -3000, "sanity": 6, "audience": -1, "ai_skill": 0, "friends": 0}, "min_money": 3000}], "allow_freeform": true}
119
+ {"id": "plumber_96_midnight_leak_own_house", "phase": "Any", "title": "Your Own House Springs a Leak", "body": "The plumber's house has a leak. Your wife looks at you. The irony is so thick you could spread it on toast. The leak is behind the shower wall, which means tile demolition, which means your Saturday is gone and you can't even bill for it.", "choices": [{"title": "Fix it properly, even at home", "body": "Do it right. Even when nobody's paying you.", "delta": {"money": -700, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 2}, "min_money": 700}, {"title": "Temporary patch, fix it later", "body": "Later could be next week. Later could be never.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": -2}}, {"title": "Call another plumber to see the look", "body": "Hire someone else. Watch them realize whose house it is.", "delta": {"money": -500, "sanity": 3, "audience": 6, "ai_skill": 0, "friends": 1}, "min_money": 500}], "allow_freeform": true}
120
+ {"id": "plumber_97_church_charity_job", "phase": "Any", "title": "Church Needs Plumbing, Can't Pay Full Rate", "body": "The church your mother goes to needs replumbing. They can pay materials but not labor. Your mother has called twice. She does not use the word \"guilt\" but it fills the silence.", "choices": [{"title": "Do it for free, earn the karma", "body": "Some jobs you do because you should, not because you're paid.", "delta": {"money": -1200, "sanity": 8, "audience": 1, "ai_skill": 0, "friends": 10}, "min_money": 1200}, {"title": "Half rate, split the difference", "body": "Charity has limits. So does your bank account.", "delta": {"money": -600, "sanity": 3, "audience": 4, "ai_skill": 0, "friends": 6}, "min_money": 600}, {"title": "Decline politely, you're booked", "body": "You love your mother. You also love paying your mortgage.", "delta": {"money": 0, "sanity": 2, "audience": -4, "ai_skill": 0, "friends": -8}}], "allow_freeform": true}
121
+ {"id": "plumber_100_frozen_pipe_season", "phase": "Any", "title": "Frozen Pipe Season, Everyone Panics", "body": "First hard freeze. Your phone rings 40 times before noon. Every call is the same: frozen pipes, panic, \"how soon can you come?\" You can hear heat tape selling out at every hardware store in the county through the phone.", "choices": [{"title": "Triage: elderly and families first", "body": "Some people are more vulnerable than others. Prioritize.", "delta": {"money": -500, "sanity": 6, "audience": 8, "ai_skill": 0, "friends": 8}, "min_money": 500}, {"title": "First come first served, full rate", "body": "Fair is fair. Whoever called first gets served first.", "delta": {"money": 3500, "sanity": -6, "audience": -3, "ai_skill": 0, "friends": -3}, "min_money": null}, {"title": "Delegate to crew, run dispatch", "body": "You can't be everywhere. Coordinate. Lead.", "delta": {"money": 1800, "sanity": -3, "audience": 0, "ai_skill": 8, "friends": 0}, "min_money": null}], "allow_freeform": true}
122
+ {"id": "plumber_109_water_heater_graveyard", "phase": "Any", "title": "Water Heater Graveyard Out Back", "body": "You have four dead water heaters behind your garage. You keep meaning to scrap them. Your wife keeps meaning to remind you. The scrap yard pays by weight and copper prices are up. But loading them requires your back, which is down.", "choices": [{"title": "Load them up, cash the scrap", "body": "Free money is sitting in your yard. Go get it.", "delta": {"money": 250, "sanity": -8, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Pay someone to haul them away", "body": "Your back is worth more than scrap value.", "delta": {"money": -350, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 350}, {"title": "Make your apprentice do it", "body": "Character building. Also free labor.", "delta": {"money": 0, "sanity": 4, "audience": 0, "ai_skill": 0, "friends": 0}}], "allow_freeform": true}
123
+ {"id": "plumber_113_charity_build_day", "phase": "Any", "title": "Habitat Build Day, Everyone Shows Up", "body": "Habitat for Humanity build day. Your whole crew volunteers. The ex-tech apprentices are there. The TikTok kid films it. For one day, nobody is competing. Everyone is just building a house for someone who needs one. Your hands know what to do.", "choices": [{"title": "Lead the plumbing crew, do it right", "body": "Charity work done wrong is just donated problems.", "delta": {"money": -1200, "sanity": 8, "audience": 6, "ai_skill": 1, "friends": 8}, "min_money": 1200}, {"title": "Let the apprentices lead, supervise", "body": "This is their chance to prove themselves. Step back.", "delta": {"money": 0, "sanity": 6, "audience": 0, "ai_skill": 2, "friends": 8}}, {"title": "Show up, do the work, skip the photos", "body": "You're not here for content. You're here for the house.", "delta": {"money": -600, "sanity": 7, "audience": -6, "ai_skill": 0, "friends": 6}, "min_money": 600}], "allow_freeform": true}
124
+ {"id": "plumber_114_license_renewal", "phase": "Any", "title": "License Renewal Requires CEU Hours", "body": "License renewal time. You need 24 hours of continuing education. The online courses are narrated by a robot voice reading a teleprompter about things you already know. The in-person classes are on Saturdays. Your Saturdays are booked through March.", "choices": [{"title": "Grind the online courses at night", "body": "Headphones in, modules up, clicking through competence at 11pm.", "delta": {"money": 0, "sanity": -6, "audience": 0, "ai_skill": 5, "friends": 0}}, {"title": "Attend in-person, sacrifice a Saturday", "body": "Real instruction beats robot narration. Give up the Saturday.", "delta": {"money": -200, "sanity": -2, "audience": 0, "ai_skill": 7, "friends": 5}, "min_money": 200}, {"title": "Let it slide until the deadline panic", "body": "Future you can handle it. Present you has pipes to install.", "delta": {"money": 0, "sanity": 3, "audience": -6, "ai_skill": -4, "friends": 0}}], "allow_freeform": true}
125
+ {"id": "plumber_115_thanksgiving_pipe_burst", "phase": "Any", "title": "Thanksgiving Pipe Burst, Turkey Still Raw", "body": "Thanksgiving dinner at your sister's. The kitchen sink pipe bursts. Everyone looks at you. You are holding a drumstick. You are wearing a nice shirt. Under the sink is a corroded galvanized fitting from 1978.", "choices": [{"title": "Fix it in your nice shirt, be a hero", "body": "This is what you are. Accept it. Save Thanksgiving.", "delta": {"money": 0, "sanity": -7, "audience": 0, "ai_skill": 7, "friends": 10}}, {"title": "Temporary fix, call a plumber Monday", "body": "Duct tape and a bucket. Proper repair on a non-holiday.", "delta": {"money": 0, "sanity": 4, "audience": 0, "ai_skill": 0, "friends": 0}}, {"title": "Charge your sister a family discount", "body": "Blood doesn't mean free. Family rate is half price.", "delta": {"money": 400, "sanity": 2, "audience": -8, "ai_skill": 0, "friends": -10}, "min_money": null}], "allow_freeform": true}
126
+ {"id": "plumber_118_food_truck_at_site", "phase": "Any", "title": "Food Truck Parks at Your Job Site", "body": "A food truck figured out that construction sites are full of hungry people with cash. They show up at 11:30 every day with tacos and cold drinks. Productivity drops for 30 minutes. Morale increases for the rest of the day. The foreman is conflicted.", "choices": [{"title": "Buy the crew lunch, build morale", "body": "$80 in tacos buys a lot of goodwill.", "delta": {"money": -80, "sanity": 6, "audience": 2, "ai_skill": 0, "friends": 8}, "min_money": 80}, {"title": "Brown bag it, save the money", "body": "You have a cooler and a sandwich. The taco truck is a trap.", "delta": {"money": 0, "sanity": 4, "audience": -4, "ai_skill": 0, "friends": -3}}, {"title": "Tell foreman to let people eat in peace", "body": "Thirty minutes of tacos makes the other seven hours better.", "delta": {"money": 0, "sanity": 1, "audience": 0, "ai_skill": 0, "friends": 6}}], "allow_freeform": true}
127
+ {"id": "plumber_124_work_life_boundary", "phase": "Any", "title": "You Missed the Turn Thinking About Drains", "body": "Driving home and you're still mentally rerouting that drain line from this morning. You miss the turn to your street. Your kid is at the door waiting. You realize you've been physically present and mentally absent for weeks.", "choices": [{"title": "Put the phone on DND after 6pm", "body": "Work ends when you get home. Enforce it.", "delta": {"money": 0, "sanity": 8, "audience": -4, "ai_skill": -1, "friends": 7}, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Accept it, this is the job", "body": "Plumbers think about plumbing. It's not a 9-to-5.", "delta": {"money": 0, "sanity": -8, "audience": 0, "ai_skill": 5, "friends": -3}}, {"title": "Plan dedicated family evenings", "body": "Tuesday and Thursday: no work talk. Phone off.", "delta": {"money": -600, "sanity": 6, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 600}], "allow_freeform": true}
128
+ {"id": "plumber_132_crew_drama", "phase": "Any", "title": "Two Crew Members Aren't Speaking", "body": "Mike and Tony had it out over who left the conduit bender in the rain. It's been three days. They communicate through you like divorced parents. Productivity is down. Tension is up. The conduit bender is fine.", "choices": [{"title": "Sit them down, mediate like an adult", "body": "You're not a therapist. But you are the boss.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 2, "friends": 8}}, {"title": "Separate them on different jobs", "body": "Out of sight, out of mind. Move on.", "delta": {"money": -300, "sanity": 5, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 300}, {"title": "Tell them to figure it out or go home", "body": "You don't have time for this. Neither does the client.", "delta": {"money": 0, "sanity": 4, "audience": -8, "ai_skill": 0, "friends": -10}}], "allow_freeform": true}
129
+ {"id": "plumber_135_new_truck_smell", "phase": "Any", "title": "New Truck Day, Finally", "body": "After 200,000 miles, you're picking up a new work truck. The seats are clean. The radio works. There's no mysterious rattle. You'll ruin it in a month. But right now, driving it off the lot, it smells like possibility and new vinyl.", "choices": [{"title": "Protect it, install proper tool racks", "body": "This truck stays organized. New rules. New truck.", "delta": {"money": -1200, "sanity": 6, "audience": 0, "ai_skill": 1, "friends": 0}, "min_money": 1200}, {"title": "Drive it to the site, get it dirty", "body": "Trucks are tools. Tools are for using.", "delta": {"money": 0, "sanity": 5, "audience": 0, "ai_skill": 0, "friends": 2}}, {"title": "Park next to the TikTok plumber's van", "body": "Let him see what a real work truck looks like.", "delta": {"money": 0, "sanity": 3, "audience": 8, "ai_skill": 0, "friends": -6}}], "allow_freeform": true}
130
+ {"id": "plumber_141_foreman_offer", "phase": "Mid", "title": "They Offer You Foreman", "body": "Your foreman blew out his knee on a ladder. Management pulls you aside near the gang box: \"You've got the respect of the crew. You can run jobs. We need a foreman by Monday.\" It's more money, more meetings, and less time on tools. You'd be managing the same guys you were joking with at lunch yesterday.", "choices": [{"title": "Take the role and own it", "body": "You take the clipboard and the radio. Everyone congratulates you, then immediately starts blaming you for schedules.", "delta": {"money": 2200, "sanity": -8, "audience": 8, "ai_skill": 6, "friends": -8}, "min_money": null, "effects": [{"op": "set_flag", "flag": "got_promoted"}]}, {"title": "Accept a 90-day trial first", "body": "You say yes, but on trial terms. If it's a bad fit, you walk back to the tools.", "delta": {"money": 1200, "sanity": -5, "audience": 6, "ai_skill": 5, "friends": -1}, "min_money": null, "effects": [{"op": "set_flag", "flag": "got_promoted"}]}, {"title": "Pass and stay on the tools", "body": "You'd rather install pipe than manage personalities. No shame in knowing your lane.", "delta": {"money": 0, "sanity": 8, "audience": -1, "ai_skill": 0, "friends": 8}, "min_money": null}], "once_per_run": true, "allow_freeform": true}
131
+ {"id": "plumber_142_nda_pipe_routing", "phase": "Mid", "title": "Pipe Routing Is Now Classified", "body": "Data center company slides you an NDA before you can see the building plans. Pipe routing is classified. The security guard checks your toolbox like you're entering a SCIF. You are a plumber. They are treating copper fittings like state secrets. You sign with the hand that was unclogging a toilet four hours ago.", "choices": [{"title": "Sign it, take the premium rate", "body": "Classified pipes pay better than declassified ones. Simple math.", "delta": {"money": 2500, "sanity": -6, "audience": -6, "ai_skill": 6, "friends": 0}, "min_money": null}, {"title": "Walk away from the paranoia", "body": "You install pipes. If that's a secret, the world has bigger problems.", "delta": {"money": 0, "sanity": 8, "audience": 1, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Sign NDA, double the rate", "body": "If it's secret enough for paperwork, it's secret enough for a premium.", "delta": {"money": 4000, "sanity": -8, "audience": -3, "ai_skill": 0, "friends": -6}, "min_money": null, "effects": [{"op": "set_flag", "flag": "sold_out"}]}], "allow_freeform": true}
132
+ {"id": "plumber_143_union_insurance_irony", "phase": "Mid", "title": "Former Google PM Asks About Your Dentist", "body": "Your union health insurance now covers better doctors than the tech startup PPOs. A former Google PM at your kid's soccer game asks which dentist you use. You tell him. He writes it down. His startup's dental plan covers cleanings and 'wellness consultations,' whatever those are. Yours covers everything. Neither of you says what both of you are thinking.", "choices": [{"title": "Enjoy the irony quietly", "body": "Some victories taste better unspoken. This one tastes like fluoride.", "delta": {"money": 0, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 5}, "min_money": null}, {"title": "Post about it online", "body": "Some things should be said. Loudly. With screenshots of your coverage.", "delta": {"money": 0, "sanity": -6, "audience": 10, "ai_skill": 0, "friends": -6}, "min_money": null, "effects": [{"op": "set_flag", "flag": "went_viral"}]}, {"title": "Refer him to the union apprenticeship", "body": "He's got good hands for a desk guy. Maybe.", "delta": {"money": 0, "sanity": 4, "audience": 5, "ai_skill": 1, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}], "allow_freeform": true}
133
+ {"id": "plumber_144_quote_obsolete_wednesday", "phase": "Mid", "title": "Your Monday Quote Died on Wednesday", "body": "Bid a commercial refit Monday. Full walkthrough. Measurements. Materials list. Three hours. By Wednesday the architect's AI redesigned the entire HVAC layout. Your quote references rooms that no longer exist. The architect's assistant emails: 'We'll need a revised bid.' She does not apologize for the three hours you spent measuring a building that is now a different building.", "choices": [{"title": "Rebid fast, don't show frustration", "body": "Swallow it. Measure again. Bill again. Welcome to the new pace.", "delta": {"money": -500, "sanity": -8, "audience": 0, "ai_skill": 6, "friends": 0}, "min_money": 500}, {"title": "Add a volatility surcharge", "body": "All quotes now include a 15% 'redesign insurance' fee. Non-negotiable.", "delta": {"money": 800, "sanity": 6, "audience": -6, "ai_skill": 0, "friends": 0}, "min_money": null}, {"title": "Fire the client", "body": "Your time has a price. Wasting it is not free.", "delta": {"money": 0, "sanity": 8, "audience": -7, "ai_skill": 0, "friends": -6}, "min_money": null, "effects": [{"op": "set_flag", "flag": "burned_bridge"}]}], "allow_freeform": true}
134
+ {"id": "plumber_145_main_street_hollowing", "phase": "Late", "title": "Main Street Is Emptying Out", "body": "Half the storefronts on Main Street are dark. The bookstore. The accountant's office. The travel agency — though that one died years ago. The diner survives on your crew's tabs and data center lunch orders. The barber survives because robots can't do small talk. You're having lunch in a town that's emptying from the inside and your pockets are full of the money that used to circulate here.", "choices": [{"title": "Buy someone lunch", "body": "Small gesture. Small cost. Large silence it doesn't fill.", "delta": {"money": -200, "sanity": 4, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 200}, {"title": "Invest in a struggling local business", "body": "Money goes in. Hope goes in. Math says it won't come back. Do it anyway.", "delta": {"money": -8000, "sanity": -8, "audience": 8, "ai_skill": 0, "friends": 10}, "min_money": 8000, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}, {"title": "Eat your sandwich, mind your business", "body": "You didn't hollow out Main Street. You just outlasted it.", "delta": {"money": 0, "sanity": -10, "audience": -5, "ai_skill": 0, "friends": -1}, "min_money": null}], "allow_freeform": true}
135
+ {"id": "plumber_146_ai_butler_client", "phase": "Late", "title": "The AI Called You Directly", "body": "Client's house is managed by an AI system now. It called you when it detected a pressure drop. Texted the exact location, probable cause, and a repair window that fit your calendar. The AI is more polite, more organized, and pays faster than any human client you've ever had. You fixed the pipe in twenty minutes. The homeowner wasn't home. Wasn't notified. Didn't need to be.", "choices": [{"title": "Take more AI-managed contracts", "body": "Best client you've ever had doesn't have a pulse. Adjust accordingly.", "delta": {"money": 3000, "sanity": -6, "audience": 0, "ai_skill": 10, "friends": -8}, "min_money": null, "effects": [{"op": "set_flag", "flag": "embraced_ai"}]}, {"title": "Insist on talking to the homeowner", "body": "Pipes belong to people. People should know what's happening to their pipes.", "delta": {"money": 0, "sanity": 6, "audience": 1, "ai_skill": 0, "friends": 6}, "min_money": null}, {"title": "Set boundaries — humans schedule calls", "body": "The machine can detect the leak. A person books the appointment.", "delta": {"money": -500, "sanity": 9, "audience": -4, "ai_skill": -2, "friends": 0}, "min_money": 500, "effects": [{"op": "set_flag", "flag": "rejected_ai"}]}], "allow_freeform": true}
136
+ {"id": "plumber_147_windfall_trades_tax", "phase": "Late", "title": "They Want to Tax Your Hands", "body": "Government proposes a 'critical infrastructure windfall tax' on workers earning over $200K from AI-adjacent industries. Your union is furious. You are doing math. At your current rate, the tax costs $28,000 a year. The op-eds say you're 'benefiting disproportionately from AI infrastructure spending.' You are literally underneath the infrastructure. With a wrench. Disproportionately.", "choices": [{"title": "Pay it, you can afford it", "body": "The number hurts. The check clears. Life continues on the right side.", "delta": {"money": -5000, "sanity": 4, "audience": -5, "ai_skill": 0, "friends": 8}, "min_money": 5000}, {"title": "Fight it through the union", "body": "If they want your money, they'll negotiate with 200,000 plumbers first.", "delta": {"money": -2000, "sanity": -7, "audience": 10, "ai_skill": 0, "friends": 3}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "joined_union"}]}, {"title": "Hire an accountant, restructure", "body": "The rich have accountants. You are, apparently, rich.", "delta": {"money": -1500, "sanity": -4, "audience": 0, "ai_skill": 8, "friends": 0}, "min_money": 1500}], "allow_freeform": true}
137
+ {"id": "plumber_148_data_center_goes_dark", "phase": "Late", "title": "Your Biggest Client Just Evaporated", "body": "The data center you plumbed for two years. Canceled. Company pivoted to something called 'distributed edge inference.' $180K in outstanding invoices frozen in a bankruptcy filing. Your accountant says 'get in line.' The line has 400 creditors. You are number 312. The boom is still booming everywhere else. But your boom just stopped mid-sentence.", "choices": [{"title": "Absorb the hit, diversify fast", "body": "One client was always too many eggs. Expensive lesson. Learned.", "delta": {"money": -15000, "sanity": -10, "audience": 0, "ai_skill": 1, "friends": -1}, "min_money": null, "effects": [{"op": "set_flag", "flag": "went_broke_once"}]}, {"title": "Lawyer up, fight for your money", "body": "They owe you for work that exists. Pipes don't un-install themselves.", "delta": {"money": -5000, "sanity": -8, "audience": 0, "ai_skill": 0, "friends": -8}, "min_money": null}, {"title": "Lean on the union safety net", "body": "This is what dues are for. The hall has your back. Feels different needing it.", "delta": {"money": -8000, "sanity": 5, "audience": -4, "ai_skill": 0, "friends": 10}, "min_money": null}], "allow_freeform": true, "once_per_run": true}
138
+ {"id": "plumber_149_class_guilt_bbq", "phase": "Late", "title": "The Barbecue Tastes Like Guilt", "body": "Neighborhood barbecue. Your neighbor Mike lost his accounting job eight months ago. His wife tutors online for $22 an hour. Their kid dropped out of travel soccer. You just bought a new truck. Cash. Mike asks how business is. You say 'good.' You do not say you made more last quarter than he'll make in two years. The burger is excellent. You can barely taste it.", "choices": [{"title": "Offer Mike work, even odd jobs", "body": "He can hold a flashlight. That's a start. Dignity has to start somewhere.", "delta": {"money": -500, "sanity": -6, "audience": 0, "ai_skill": 0, "friends": 10}, "min_money": 500}, {"title": "Keep quiet, guilt is private", "body": "What do you say? 'Sorry I'm doing well'? There's no good sentence here.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": -6}, "min_money": null}, {"title": "Pay for Mike's kid's soccer quietly", "body": "Anonymous. Through the league office. Mike doesn't need to know.", "delta": {"money": -2000, "sanity": 8, "audience": 0, "ai_skill": 0, "friends": 8}, "min_money": 2000}], "allow_freeform": true, "once_per_run": true}
139
+ {"id": "plumber_150_robot_v3", "phase": "Endgame", "title": "Plumbing Robot v3.0", "body": "Robot v3. Residential calls. Clean floors. Dry conditions. Good lighting. Handles sixty percent now. You get the rest — the dark, the wet, the old, the weird. Your waitlist is still there. But shorter. Not gone. Shorter. For the first time, the trend line points at you.", "choices": [{"title": "Specialize deeper into the hard 40%", "body": "Dark. Wet. Old. Weird. Your moat. Dig it deeper.", "delta": {"money": 2000, "sanity": 6, "audience": 0, "ai_skill": 10, "friends": 0}, "min_money": null, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Invest in the robot company", "body": "If they're eating your lunch, own the restaurant.", "delta": {"money": -8000, "sanity": -6, "audience": 8, "ai_skill": 8, "friends": 0}, "min_money": 8000, "effects": [{"op": "set_flag", "flag": "invested_in_ai"}]}, {"title": "Train apprentices for the hard jobs only", "body": "The easy work is gone. Make sure the hard workers are ready.", "delta": {"money": 0, "sanity": 4, "audience": 7, "ai_skill": 1, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "became_mentor"}]}], "allow_freeform": true}
140
+ {"id": "plumber_151_ubi_passes", "phase": "Endgame", "title": "UBI Passes", "body": "UBI. Two thousand a month. Your neighbors collect it. They seem fine. Not happy. Not desperate. Fine. You make two thousand before lunch on a Tuesday. The gap doesn't feel like 'hard work' anymore. Doesn't feel like 'lucky hands' either. Something broke. You ended up on the right side. Explaining why is getting harder.", "choices": [{"title": "Donate the equivalent monthly", "body": "Match it. Every month. Not guilt. Just... balance.", "delta": {"money": -2000, "sanity": 10, "audience": 1, "ai_skill": 0, "friends": 10}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Accept it, this is just how it is", "body": "You didn't design the system. You just live in it. Like everyone else.", "delta": {"money": 0, "sanity": -10, "audience": 0, "ai_skill": 0, "friends": -2}, "min_money": null}, {"title": "Push the union to advocate for higher UBI", "body": "Two thousand isn't enough. You know what things cost.", "delta": {"money": 0, "sanity": -5, "audience": 10, "ai_skill": 0, "friends": 8}, "min_money": null, "effects": [{"op": "set_flag", "flag": "joined_union"}]}], "allow_freeform": true}
141
+ {"id": "plumber_152_daughter_ai_researcher", "phase": "Endgame", "title": "She Doesn't Want to Fix Things", "body": "Daughter. Senior year. Wants to study AI. Not plumbing. Not trades. 'The future isn't fixing things, Dad. It's building the things that fix things.' You think she's wrong. You also think she might be right in a way you can't argue with. She has your hands and her mother's brain. She'll be fine. That's not what bothers you.", "choices": [{"title": "Support her, it's her life", "body": "Let go. She's not rejecting you. She's continuing you. Differently.", "delta": {"money": -3000, "sanity": 6, "audience": 0, "ai_skill": 1, "friends": 10}, "min_money": 3000}, {"title": "Make the case for trades one more time", "body": "Robots break. Code crashes. Pipes are forever. Say it. Once more.", "delta": {"money": 0, "sanity": -5, "audience": 0, "ai_skill": 0, "friends": 5}, "min_money": null}, {"title": "Tell her to do both, you'll pay", "body": "AI degree and a plumber's license. Belt and suspenders. Your dad's voice.", "delta": {"money": -8000, "sanity": -7, "audience": 0, "ai_skill": 8, "friends": 9}, "min_money": 8000}], "allow_freeform": true, "once_per_run": true}
142
+ {"id": "plumber_153_algorithm_inspector", "phase": "Endgame", "title": "Ron's Replacement Is an Algorithm", "body": "New building code. AI-generated. 400 pages. Dropped Tuesday. Enforcement Thursday. Ron retired last month. His replacement is an algorithm. It doesn't know your name. Doesn't wave you through. Doesn't have a rental property that needs weekend work. Checks every box. Every single one. Your last three permits took four hours each. Ron's took four minutes.", "choices": [{"title": "Study the code, comply by Thursday", "body": "400 pages. Two nights. Coffee. Compliance. No shortcuts left.", "delta": {"money": -500, "sanity": -10, "audience": 0, "ai_skill": 10, "friends": 0}, "min_money": 500}, {"title": "Ignore it, dare them to enforce", "body": "An algorithm can check boxes. It can't check pipe. Come find you.", "delta": {"money": 0, "sanity": 6, "audience": -10, "ai_skill": -2, "friends": -3}, "min_money": null}, {"title": "Rally the union for a timeline extension", "body": "400 pages in 48 hours is not regulation. It's hazing.", "delta": {"money": 0, "sanity": -6, "audience": 8, "ai_skill": 0, "friends": 10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "joined_union"}]}], "allow_freeform": true}
143
+ {"id": "plumber_154_diagnostic_ai_teen", "phase": "Endgame", "title": "A Fifteen-Year-Old Just Halved Your Calls", "body": "Teenager. Claude. Three weeks. Built a plumbing diagnostic app. Listens to pipes through a phone mic. Identifies problems from sound alone. Can't fix anything. But tells homeowners if they actually need you. Half the time they don't. Your call volume: down 30% in a month. The app is free. She's fifteen. Her operational cost is a laptop and curiosity.", "choices": [{"title": "Adapt — confirmed-need calls only", "body": "Fewer calls. Higher value. Every job actually needs you. Adjust.", "delta": {"money": -3000, "sanity": 5, "audience": 0, "ai_skill": 10, "friends": -1}, "min_money": null, "effects": [{"op": "set_flag", "flag": "found_balance"}]}, {"title": "Hire her", "body": "Can't beat them. Employ them. She could use a mentor.", "delta": {"money": -2000, "sanity": -4, "audience": 8, "ai_skill": 8, "friends": 4}, "min_money": 2000, "effects": [{"op": "set_flag", "flag": "collab_with_ai"}]}, {"title": "Your hands fix what sound can't diagnose", "body": "An app hears a rattle. You feel a vibration. Different.", "delta": {"money": 0, "sanity": 8, "audience": -6, "ai_skill": 0, "friends": 4}, "min_money": null}], "allow_freeform": true}
144
+ {"id": "plumber_155_three_data_centers_cancel", "phase": "Endgame", "title": "Three Data Centers. Same Week. Gone.", "body": "Three data centers canceled. Same week. 'Edge computing pivot.' No more centralized cooling. No more $800/hr. Tuesday you were booked through next year. Friday you're checking residential leads. The boom didn't end. It relocated. You didn't. Your truck still says 'Data Center Specialist.' The decal cost $400. The irony is free.", "choices": [{"title": "Pivot to residential, swallow pride", "body": "Toilets don't pivot. Faucets don't restructure. Back to basics.", "delta": {"money": -5000, "sanity": -6, "audience": -5, "ai_skill": -1, "friends": 6}, "min_money": null}, {"title": "Chase the next boom", "body": "Where the data centers go, you go. Pack the truck.", "delta": {"money": -8000, "sanity": -10, "audience": 0, "ai_skill": 8, "friends": -10}, "min_money": null, "effects": [{"op": "set_flag", "flag": "moved_abroad"}]}, {"title": "You have savings. Take a breath.", "body": "The panic is real. The savings are also real. Sit. Think. Then move.", "delta": {"money": 0, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": null, "effects": [{"op": "set_flag", "flag": "took_sabbatical"}]}], "allow_freeform": true, "once_per_run": true}
145
+ {"id": "plumber_156_income_tax_shock", "phase": "Endgame", "title": "Your Tax Bill Is a Misprint (It Isn't)", "body": "Tax bill. Your income tax this year exceeds your total income five years ago. Your accountant laughs. You do not laugh. The IRS does not laugh. You are in a bracket designed for surgeons and hedge fund managers. You are a plumber. Your W-2 looks like a typo. It is not a typo.", "choices": [{"title": "Pay it, every cent earned", "body": "The check hurts. The hurt is a privilege. Sign it.", "delta": {"money": -12000, "sanity": 5, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 12000}, {"title": "Max every deduction, buy the truck", "body": "Business expense. Depreciation. Mileage. The accountant earns her fee today.", "delta": {"money": -8000, "sanity": -5, "audience": -1, "ai_skill": 2, "friends": 0}, "min_money": 8000, "effects": [{"op": "set_flag", "flag": "lifestyle_crept"}]}, {"title": "Set up the retirement account finally", "body": "Tax shelter. Future you. Your dad's voice: 'Save it.' Listen this time.", "delta": {"money": -10000, "sanity": 10, "audience": 0, "ai_skill": 0, "friends": 0}, "min_money": 10000, "effects": [{"op": "set_flag", "flag": "found_balance"}]}], "allow_freeform": true}