エピソード

  • Water Is a Cost Line
    2026/10/16
    Water is a cost line: about $290 a year from a full point of water-to-beer ratio, water and sewer only, and excluding the energy to heat the water, which is very likely the larger line. Mac and Wren argue over when water stopped being free — you pay for it four times: to buy it, to treat it, to heat it, and to send it down the drain. Wren prices the part she can, on stated assumptions throughout (a 5:1 ratio she explicitly does not assert as an industry average, a combined water-and-sewer rate of $0.012 a gallon, 52 batches a year — $27.90 a batch, about $1,451 a year at that ratio). Mac wins the round: the ratio is not a dial, it is CIP cycles, keg washing, and floor cleaning, cutting it means cleaning less or cleaning better, and a single reading is a snapshot of a number that moves seasonally. Wren concedes both. Tie-in (verified against code 2026-10-16): water treatment is a recognised ingredient category in FermentIQ (water treatment, mineral, salts, acid), the additions sit on the batch at the strike step, and the batch cost calculation sums every batch ingredient's quantity times its cost per unit into the batch's ingredient total — so a costed salt is inside the batch cost, not beside it. Recipes also carry source and target water profiles. Utility metering was killed in verification and is not claimed. Ask BrewBuddy (real question, real account, whatever it says is what you hear): "What was the ingredient cost for the most recent batch, and what went into it?" — captured 2026-10-16 on org 11 (Playground Brewery, is_test=true), site context "FermentIQ Brewery" single-site via the site switcher, browser task with the saved bot login, attempt 1 of 3. CONFIRMATION: BrewBuddy returned the most recent batch's full ingredient breakdown — every ingredient named with quantity, cost per unit from the inventory records, and a line total, summed to an ingredient total and a per-barrel figure — and under "Strike water" it listed Calcium Chloride with its own quantity, unit cost, and line total inside that sum. The answer also states its costing basis honestly (current cost per unit in the inventory records, not necessarily what was paid for the lots). No customer names in the answer (nothing to anonymize). The tie-in is strengthened by the capture: the Hot Side beat's claim (salts as costed recipe inputs inside the batch cost) is exactly what the live record shows, and the post-INSERT beat answers the record directly. Dry Hops: meter the hose to the keg washer before you meter anything else — one hose, one honest count, for one week. And put the salts on the recipe so they show up in the batch cost — the day the treatment has a line in the cost, it stops being a hobby and starts being an input. Last Call: find your last water and sewer bill and divide it by the barrels you packaged that month. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com. PRODUCTION NOTE (2026-10-16): Render initially blocked at the level gate — p10 (the Ask BrewBuddy question turn) at -1.69 dB and p11 (BrewBuddy turn, Amelia, 856 chars) at -2.62 dB vs the -16.60 reference, builder gain clamped at 6.0 dB. Delete + re-run performed; the raw takes are genuinely quiet and failed near-identically. Applied the manual ffmpeg gain repair Jacob approved for Ep10's p12 and Ep11's p10 (threshold unchanged): +1.69 dB on p10 and +2.62 dB on p11, peaks verified at -2.2 dB and -2.6 dB, no clipping. Rebuild: 14 chunks, level spread 0.53 dB (limit 1.50) — PASS. Final 12:06, 11.6 MB. Flagged in the run report for Jacob before publishing.
    続きを読む 一部表示
    12 分
  • Two Weeks, Not Two Months: Onboarding a Cellar Hand
    2026/10/09

    Two weeks, not two months: about $2,900 a hire lost in the gap between week three and week eight. Mac and Wren argue over why a new cellar person takes two months before they can be left alone with a transfer — what "trained" even means ("can do it unsupervised and will stop when something is off"), why the confident untrained person is the expensive one, and why the thing Mac calls judgment is mostly a list he never wrote down. Mac concedes it: thirty people's worth of the list, all in his head. Tie-in (verified against code 2026-10-09): the onboarding checklist with due dates, per-employee training records (forklift, hazmat, first aid, food safety) with due dates and completion status, and every batch stage change logged as a written, timestamped sequence on the batch. SOP storage killed in verification — no customer-facing SOP feature exists in the brewery product, so the script claims nothing about one. Ask BrewBuddy (real question, real account, whatever it says is what you hear): "Are there any training records or certifications on file for the team at FermentIQ Brewery?" — captured 2026-10-09 on org 11 (Playground Brewery, is_test=true), site context "FermentIQ Brewery" single-site via the site switcher, browser task with the saved bot login, ask #2 of 3 (ask #1, "What onboarding tasks are open for the team right now?", deflected — no tool lists onboarding checklist tasks). The answer is a truthful deflection: no training records or certifications confirmed on file, no safety standards tracked on the capture org. No customer names in the answer (nothing to anonymize). Per the runbook deflection rule, the tie-in is not strengthened by the capture: the Hot Side beat claims only the code-verified mechanism, and the post-INSERT beat answers the empty record honestly ("On this site it lives where it lives at most breweries. In people's heads."). Dry Hops: have the new person write the procedure as they learn it — the gaps in their draft are the gaps in your training. And let them make the safe mistakes early and on purpose — everybody remembers the mistake they made; nobody remembers the mistake they watched you make. Last Call: write down the CIP sequence for one tank, start to finish, and hand it to somebody who has never done it. If they can follow it without asking you a question, you wrote a procedure. If they can't, you wrote a reminder — to yourself. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com.

    続きを読む 一部表示
    11 分
  • Six Stops, One Truck: Building a Route That Holds
    2026/10/02
    Six stops, one truck: about $2,100 a year in recoverable driver hours, and only if the recovered time actually gets used. Mac and Wren argue over a real run sitting in the app — six accounts, $1,692 on the truck — on why a delivery day is built out of habit and the order the calls came in, why the truck costs an assumed $289 a day to roll (eight hours, $28 an hour fully loaded, $65 fuel), and why delivery is not a distance problem — it is a time-window problem. Mac wins the round: the paper-optimal route loses to the route that respects when accounts will actually take a delivery. First Runnings: the clipboard version of the real run. Dana at the Copper Mug called first Friday, so the Copper Mug is stop one — driver at eight-fifteen for a ten-to-noon window, forty-five minutes in the parking lot, engine off. Late everywhere downstream: Harbor and Rye at eleven-fifteen, after Priya — the only signer — left at eleven. Ferment and Fork at noon against an eight-to-ten window. Two stops missed, one redelivery later in the week. Two trucks for one week's beer, and the record says nothing. Hot Side: the arithmetic, assumptions throughout. Eight hours at an assumed $28/hr fully loaded plus an assumed $65 fuel: $289 a delivery day. Two days a week, fifty weeks: $28,900 a year to run the truck. Forty-five recovered minutes a day at $28/hr: about $2,100 a year in driver hours — and Wren says plainly what that number is not: not fuel, not truck wear, not revenue, unless the time gets used for another stop. Mac concedes the math outright, then wins: the optimizer's perfect loop puts the driver at Ferment and Fork at ten-thirty for a window that closed at ten, or at Harbor and Rye at one-thirty after Priya's gone. The route that ignores the windows is abandoned by stop three. Wren concedes fully. Then the real stop order, sequenced by the windows: Ferment and Fork first (eight-to-ten), Harbor and Rye for Priya before eleven, the Copper Mug ten-to-noon with Dana and the back door, the Hoppy Monk (side door after eleven, by two), Bottle Theory fifth (call twenty minutes ahead, Fifth Street dock), Cask and Craft last (flexible hours, hand-truck job down the stairs, truck at its lightest). Tie-in (verified against code 2026-10-02, corrected 2026-10-02): the route and the paperwork come off the same record — road-routed ETAs via OpenRouteService, driver signature capture, and vehicle inspection are live in the driver app. LLM stop-ordering (`POST /api/delivery/routes/optimize`) and BOL generation (`POST /api/driver/bills-of-lading/generate`) exist as backend endpoints only, with no UI calling them — not user-reachable, so not claimed as live features. Structured receiving-window modelling does not exist (free-text field only) — the windows stay a human process, and the script claims only that the software holds what you typed. Ask BrewBuddy (real question, real account, whatever it says is what you hear): "What's on the delivery run for tomorrow, and in what order?" — captured 2026-10-02 on org 11 (Playground Brewery, is_test=true), site context "FermentIQ Brewery" single-site via the site switcher, browser task with the saved bot login, attempt 3 of 3 (6 asks total, all consistent). The answer is a truthful deflection: no delivery routes created for tomorrow (2026-10-03), 0 pending deliveries on the capture org — not a technical failure. No customer names in the answer (nothing to anonymize). Per the runbook deflection rule, the tie-in is not strengthened by the capture: the Hot Side beat claims only the code-verified mechanism, and the post-INSERT beat answers the empty record honestly ("Empty is also an answer, as long as it's the true one"). Dry Hops: write the receiving window in the customer record the day you open the account — Dana's window, Priya's mornings, the back door, the side door — not the third time you get turned away. And hand the driver the windows and let him sequence the run once; buy him a beer and write down what he says. Last Call: take your biggest delivery day and write down the receiving window for every account on it. The gaps are your route problem. Every blank is forty-five minutes in a parking lot waiting to happen. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com. PRODUCTION NOTE (rewrite 2026-10-02 ~06:45 PDT): this episode was rewritten around a real delivery route built in the app the same day (org 11; 6 fictional test accounts IDs 545–550 with real receiving-window constraints, 6 invoices INV-869–874, route "Delivery 10/2/2026" PLANNED, $1,692 total; no email addresses on any record per Jacob's rule #0). The v1 script is backed up at FermentIQ_Podcast_Ep10_Script_v1.md. The rewrite's render passed the level gate ...
    続きを読む 一部表示
    11 分
  • The Recall You Handled Informally
    2026/09/25
    The recall you handled informally: about $2,700 for a bad date stamp, forty half-barrels, and an afternoon of phone calls. Mac and Wren on why the informal version usually works, the three reasons it worked that week (the beer was fine, fourteen accounts, caught it Thursday), and why "we handled it" is not a record. First Runnings: a call from a bar — "this keg tastes wrong." Mac drives forty minutes each way to find the beer is fine and the date stamp says February. The stamp had been guilty since Tuesday morning, when the date coder started printing half-dates and nobody stopped the line. Hot Side: the arithmetic, assumptions throughout. Assume 40 half-barrels in the run and 25 replaced at an assumed $95 a keg to produce: $2,375 of beer. Assume two people, six hours, $28 an hour fully loaded: $336 of apology-driving. About $2,700 — and the number is not the wholesale revenue, and it assumes every affected keg was found, which is the assumption that breaks. Mac's defense of the informal version (it worked; he showed up; two accounts ordered more), Wren's full concession — then her win: could he name, in one afternoon, every account that got that lot? He could not. That is not a record. That is a memory. Ask BrewBuddy (real question, real account, whatever it says is what you hear): "Which customers received lot 260824-0914?" — landed 2026-09-25 on deploy 510eca62 (PR #810), attempt 1 of 3: lot 260824-0914 (Alma De La Tierra), 16 real customers. Per Jacob's explicit order, 15 customer names are anonymized with fictional stand-ins on air (Playground Brewery Taproom kept real); verbatim record in capture.json/answer.txt. Dry Hops: the code date is only useful if it's on the paperwork as well as the keg — put the lot on the delivery paperwork, every stop. And call the account that didn't complain: the loud ones cost you an afternoon, the quiet ones cost you a customer. Last Call: take your last packaging run and try to list every account that got it. Time yourself. If you can't do it in an afternoon, the list doesn't exist yet. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com. --- 2026-09-25 diagnostic + fix (post-retry): - Jacob confirmed via pgAdmin: sales_invoice_item_lots has 807 rows for org 11 — migration 447's backfill worked. Data side is proven. - Root cause of the retry failure: PR #807 added the table to _QUERYABLE_TABLES and documented the join in docs, but BrewBuddy's SQL-generator prompt was never taught the join. The live schema path gives the model bare columns with no join semantics, and the prompt's RULES still described the pre-447 world. The canonical join only lived in the fallback schema-ref doc and the migration comment — neither reaches the model on the live path. - Second defect: the prompt told the model to JOIN product_variants for finished-goods product names, but product_variants wasn't in _QUERYABLE_TABLES, so the validator killed the query. This is exactly what broke the retry's "lots shipped in 90 days" attempt. - Fix: PR #809 (https://github.com/FermentIQ/FermentIQ/pull/809) — adds a LOT TRACEABILITY rule to the query prompt with the canonical join (junction → sales_invoices → crm_customers, lot via finished_goods_inventory.lot_code, org scoped on junction), and adds product_variants + products to _QUERYABLE_TABLES. Tests: 37/37 + 46/46 green; new assertions fail pre-fix. Awaiting Jacob's merge + deploy. - Note: lot 260807-EA shows 524 cans still on hand — it may genuinely have no junction rows (never shipped). After the fix, BrewBuddy will answer that definitively instead of deflecting; use "lots shipped in last 90 days" to pick the episode lot. - Process note: first publish attempt (PR #808) was polluted by a stale work copy (mass revert) — closed immediately, branch deleted, workdir synced to current main, republished clean as #809. Lesson recorded in ~/AGENTS.md. --- 2026-09-25 second diagnostic (post-#809 capture): - #809 deployed and live (deploy dep-dar89udg1s2s73e1ff30 on merge commit c6a1ac4c), but the capture still deflected on all 3 attempts. - Root cause: two steering layers, #809 only fixed the second. The query_org_data TOOL DESCRIPTION is what the BrewBuddy agent reads when framing the `question` parameter — it said nothing about lot traceability, so the agent framed every lot question around sales_invoice_items / packaging_runs, and the SQL generator inherited that framing. The agent's expanded question never mentioned sales_invoice_item_lots. - Fix: PR #810 (https://github.com/FermentIQ/FermentIQ/pull/810) — documents the junction-table framing in the tool description + question param (with tables_hint), and adds a worked SELECT example to the prompt rule (the failed attempt-3 join was ...
    続きを読む 一部表示
    12 分
  • Contracted: What You Owe the Hop Farm in a Flat Year
    2026/09/18

    Contracted hops in a flat year: $2,400 a year of hops you bought and did not brew. Mac and Wren on why the contract was the responsible thing to sign, the four ways out (priced honestly), and why the surplus market seizes up exactly when you need it. First Runnings: the contract was the responsible thing to do at the time — and that is what makes it hurt. The farm plants in spring off what you committed in winter. They can't plant on optimism. Hot Side: the arithmetic, assumptions throughout. Assume 800 lb a year of one variety at an assumed $12 a pound: $9,600 committed. Assume production comes in 25% under plan — you brew 600 pounds' worth and carry 200. Two hundred pounds at $12 is $2,400 a year of hops bought and not brewed. Over a three-year contract, that's $7,200 — and the number is not a write-off: you own the hops, sitting in a cooler, losing alpha while you decide. Ask BrewBuddy (real question, real account, whatever it says is what you hear): how much of each hop variety did we use in the last twelve months? [Capture pending — this note updates when the take lands.] Dry Hops: write the worst-year volume next to the contract volume, on the same page, before you sign — not the forecast, the worst year. And never sign a contract in the month you had your best sales week. Sign in February. Nobody's celebrating in February. Last Call: pull your hop contracts and write your actual last-twelve-months usage beside each committed volume. If the two columns don't match, you just found your two hundred pounds before you paid for it. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com.

    続きを読む 一部表示
    13 分
  • Monday Morning: What You Can Still Change
    2026/09/11
    Monday morning: the $2,400 you can price is the smallest part of the problem. Mac and Wren on what to look at, what you can still change — and the three tanks that have been sitting longest. First Runnings: $2,400 a year. Six rush ingredient orders at $400 expedited freight — an assumption, stated as one. But the freight line is only the freight line. It doesn't include the brew day you moved, the beer you made with substitute malt, or the four hours somebody spent on the phone instead of on the floor. Hot Side: the Monday walk. Twenty-two years of walking the floor, and the difference between knowing you're low on Citra because you can feel it in the cooler — and seeing it on a screen before it costs you. Ask BrewBuddy (real question, real account, whatever it says is what you hear): which three tanks have been sitting the longest, and how many days each? BT-1, Raven Stout: day 19. BT-2, Highland Heritage: day 17. FV-4, Alma De La Tierra: day 14. FV-5 close behind at day 13, five days into cold crash against its own three-day window — waiting on brite space. Dry Hops: put a due date on every recurring task, even if the date is wrong — a wrong date gets corrected the first time it goes red, a blank one never does anything at all. And keep the walk: whatever ends up on a screen, still go put your hand on the tank. Last Call: Monday, before you walk the floor, write down the three things that would hurt worst if they were already late. Then go find out whether any of them has a date on it anywhere. Cold Side is from FermentIQ — built by a brewer, fifteen years on the floor, no engineering background, who directed AI coding agents to build the ERP he couldn't buy. It runs the whole operation, grain to glass. The first thirty days are free and you can cancel anytime at ferment-iq.com.
    続きを読む 一部表示
    12 分
  • Six To One: The Taproom Math Nobody Says Out Loud
    2026/09/04
    Cold Side, Episode 6: Six To One: The Taproom Math Nobody Says Out Loud A pour in your taproom and a keg on a distributor's truck are the same beer, and they are not the same business. This episode works out what a barrel is worth in each room, then spends most of its time on the costlier question of what that ratio leaves out. Halfway through we stop arguing and ask FermentIQ's built-in assistant to split a real August straight off the invoice records, and you hear the answer it gives. The number: 6.7 to 1, taproom revenue per barrel against wholesale, on a $7 pour and a $120 half-barrel keg. Both are stated on air as assumptions. Push both hard the other way and it is still about four and a half to one. The action: Take last month. Barrels through the taproom, barrels wholesale, and the revenue from each. Divide. Then look at your brew schedule and ask whether it matches the answer. Segments: 00:00 First Runnings 01:16 Hot Side: what a barrel actually earns in each room, and why the ratio is not margin 07:59 Ask BrewBuddy: "How much did I invoice my taproom in August, and how much did I invoice everybody else?" 09:02 Dry Hops 10:04 Last Call Mac and Wren are AI voices. Every figure we cite, we tell you where it came from or that we're estimating it. FermentIQ is an all-in-one management platform for breweries and other craft beverage producers. First 30 days free, cancel anytime. ferment-iq.com
    続きを読む 一部表示
    11 分
  • Six Hundred Kegs: The Asset You Never Counted
    2026/08/28
    Cold Side, Episode 5: Six Hundred Kegs: The Asset You Never Counted Most brewers can tell you what one keg costs and almost none can tell you what the whole fleet is worth, where it is today, or how much of it is never coming home. This episode puts a number on the capital a keg fleet ties up, a separate number on what it quietly loses every year, and is careful about which of the two ever reaches your bank account. The number: $19,375 of steel you would not have had to buy. Assume 600 half-barrels at $125 each and 2,000 fills a year, and that fleet turns 3.3 times; at 4.5 turns those same 2,000 fills need only 445 kegs, leaving 155 surplus. Nobody sends you that money, though, because the steel is already bought: growing, it is kegs you don't buy next spring, and flat, it is surplus you would have to sell at a loss to realize. The figure that does leave your bank account is the other one, 8% attrition on 600 kegs, which is 48 kegs and $6,000 a year, every year. The action: Count the kegs in your building today. Empty, full, dirty, all of it. Then write down what you think you own. The difference is out in the world, and some of it isn't coming home. Segments: 0:00 First Runnings 1:16 Hot Side: what a keg fleet is worth, what it loses every year, and the difference between surplus steel and money 8:50 Ask BrewBuddy: "How many kegs did I deliver to accounts in June, and how many different accounts took them?" 9:38 Dry Hops 10:44 Last Call Mac and Wren are AI voices. Every figure we cite, we tell you where it came from or that we're estimating it. This episode carries no industry statistics at all: the $125 keg price, the 8% attrition rate and the 4.5-turn target are assumptions, and each one is labeled out loud on air in the same breath it is introduced. The Ask BrewBuddy segment is a live query run against a real account, played back unedited. FermentIQ is an all-in-one management platform for breweries and other craft beverage producers. First 30 days free, cancel anytime. ferment-iq.com
    続きを読む 一部表示
    12 分