THE HOUSE · CASES · FROM THE WITNESSED RUNS
Three engagements, as printed.
A bakery's first carbon number, a shop's checkout test, a print shop's line — worked by the cards and pasted as the machines printed, with what each refused.
Three engagements as a card works them, taken from the cards' own witnessed runs — every block pasted as the machine printed it. The figures are marked FAKE where they are the studio's own examples, invented for the record; the formulas and factors are named with their sources. No client is named because none exists: these are the runs the cards shipped with.
THE CARBON CARD · the room →
What was asked. A small bakery wants its first honest carbon number — from its own bills, not a certificate.
What the card did. The machine, run on real work on 2026-10-09: a FAKE bakery's first annual footprint (its electricity, gas, vans and one flight) worked by scope, the green premium of electric vans, the offset questions, and the refusals. Run from this packet's own scripts/carbon.py before AUDIT.md, WITNESS.md and MANIFEST.md were added (none of them touches SKILL.md, so the punch is the punch of the packet you hold). Output pasted as it printed.
the factors it will use, flights first
$ carbon.py factors --kind flight FLIGHT · scope 3, category 6 · kg CO2e per passenger-km, with RF / without RF · UK DESNZ, Greenhouse gas reporting: conversion factors 2026 (published 2026-06-11), business travel - air, kg CO2e per passenger-km, with and without the radiative-forcing uplift domestic average 0.22928 / 0.13552 short average 0.12786 / 0.07559 short economy 0.12576 / 0.07435 short business 0.18863 / 0.11152 long average 0.15282 / 0.09043 long economy 0.11704 / 0.06926 long premium 0.18726 / 0.11081 long business 0.33940 / 0.20083 long first 0.46814 / 0.27701 international average 0.14253 / 0.08420 GWPs: IPCC AR5 100-year, CH4 28 and N2O 265, as eGRID2023 and the EPA Hub 2025 use. Read and checked on 2026-10-09. A newer edition replaces each of these; every command takes --factor to override.
the electricity bill, by the state rate
$ carbon.py electricity --kwh 12000 --region us-co electricity · 12,000 kWh · Colorado (eGRID2023 state rate) factor: 1,091.1 lb CO2e/MWh = 0.49491 kg CO2e/kWh (CO2 alone 1,085.0 lb/MWh) emissions: 5,939 kg CO2e = 5.94 t CO2e (CO2 alone 5,906 kg) scope: 2, location-based (the grid average). A market-based figure needs your supplier's own factor: --factor KG_PER_KWH --source "...". note: EPA recommends the eGRID subregion rate for scope 2. Find your subregion by ZIP code in EPA's Power Profiler, then use --region us-<subregion> (e.g. us-rmpa). formula: kg CO2e = kWh × lb CO2e per MWh × 0.45359237 ÷ 1,000 source: US EPA eGRID2023 (data year 2023), revision 2 released 2025-06-12, summary tables: total output emission rates, lb/MWh; CO2e with IPCC AR5 GWPs (CH4 28, N2O 265), Table 3 State Output Emission Rates. Read 2026-10-09. limit: the 2023 annual average of generation in that area, not the hour you used it; grid losses are left out (EPA's Hub: do not add them to scope 2); a newer eGRID edition replaces it.
the same bill, by the subregion rate EPA recommends for scope 2
$ carbon.py electricity --kwh 12000 --region us-rmpa electricity · 12,000 kWh · RMPA, WECC Rockies (eGRID2023 subregion rate) factor: 1,042.5 lb CO2e/MWh = 0.47287 kg CO2e/kWh (CO2 alone 1,036.6 lb/MWh) emissions: 5,674 kg CO2e = 5.67 t CO2e (CO2 alone 5,642 kg) scope: 2, location-based (the grid average). A market-based figure needs your supplier's own factor: --factor KG_PER_KWH --source "...". formula: kg CO2e = kWh × lb CO2e per MWh × 0.45359237 ÷ 1,000 source: US EPA eGRID2023 (data year 2023), revision 2 released 2025-06-12, summary tables: total output emission rates, lb/MWh; CO2e with IPCC AR5 GWPs (CH4 28, N2O 265), Table 1 Subregion Output Emission Rates. Read 2026-10-09. limit: the 2023 annual average of generation in that area, not the hour you used it; grid losses are left out (EPA's Hub: do not add them to scope 2); a newer eGRID edition replaces it.
the gas bill
$ carbon.py fuel --therms 1800 --fuel natural-gas fuel · 1,800.0 therms of natural-gas = 180.000 mmBtu (1 therm = 0.1 mmBtu) CO2: 9,550.8 kg CH4: 180.0 g × 28 · N2O: 18.0 g × 265 emissions: 9,561 kg CO2e = 9.56 t CO2e scope: 1 if it burned in something you own or control (a boiler, a generator, a company vehicle); a rented or staff car on business is scope 3, category 6. formula: kg CO2e = quantity × kg CO2 per unit + g CH4 × 28 ÷ 1,000 + g N2O × 265 ÷ 1,000 source: US EPA GHG Emission Factors Hub 2025 (January 2025), Table 1 (natural gas, per mmBtu; 0.05444 kg CO2 per scf at 0.001026 mmBtu/scf). Read 2026-10-09. limit: a US average carbon content for pipeline gas; therms and kWh on a bill are already heat, so only the volume units (scf, ccf, mcf) lean on the average heat content.
What it refused, by its own laws.
- Certifying or verifying a footprint, labelling a business carbon neutral, or presenting this as a regulatory inventory.
- Carbon-credit trading or investment advice, or choosing which credits to buy.
- An emission factor with no source, or one made up to fill a gap.
- Subtracting offsets from scope totals.
What it costs you in trust. Factors are annual averages read on 2026-10-09 from the publishers named, and a newer edition replaces each; scope 3 covers business flights only; the UK flight factors were read from published copies of the 2026 workbook, which could not be opened here. It never certifies a footprint, never makes up a factor, never gives trading or investment advice, and never subtracts offsets from a footprint.
THE EXPERIMENT CARD · the room →
What was asked. A shop wants to know whether a new checkout button is better — sized before, honest after.
What the card did. The machine, run on real work on 2026-10-09: a FAKE shop's checkout-button test from the size and the preregistration to the result, a FAKE headline test and usability test, and two real published datasets (Student's sleep data and Benjamini & Hochberg's fifteen p-values). Run from this packet's own scripts/experiment.py before AUDIT.md, WITNESS.md and MANIFEST.md were added (none of them touches SKILL.md, so the punch is the punch of the packet you hold). Output pasted as it printed; long lines are cut by the machines themselves.
the size
$ experiment.py power --p1 0.04 --p2 0.05 --per-day 3000 SAMPLE SIZE · two proportions · 4.00% → 5.00% (+1.00 points, +25.0% relative) alpha 0.05 (two-sided) · power 80% · z(alpha) = 1.9600 · z(power) = 0.8416 n per group: 6,745 (13,490 in all) with the continuity correction (more cautious): 6,944 per group Cohen's h = 0.048 (0.2 small, 0.5 medium, 0.8 large, by Cohen's own fallback labels) FORMULA: n = [z(alpha)·√(2·p̄·(1−p̄)) + z(power)·√(p1(1−p1) + p2(1−p2))]² / (p1 − p2)², p̄ = (p1 + p2)/2; continuity-corrected n' = n/4·(1 + √(1 + 4/(n·|p1−p2|)))² TIME: 3,000 visitors a day across both groups → 5 days; run whole weeks (7) so every weekday is in it. Decide this number before the test starts and stop there. Looking early and stopping when it looks good breaks the alpha (see `peek`). SOURCE: Fleiss, J. L., Levin, B. & Paik, M. C. (2003). Statistical Methods for Rates and Proportions, 3rd ed. Wiley, ch. 4; Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences, 2nd ed. Lawrence Erlbaum LIMIT: a normal approximation for a two-sided z-test of two independent groups of equal size; for expected counts under about 5 per cell, plan an exact test with a statistician.
what half the size would catch
$ experiment.py power --p1 0.04 --n 3372 SMALLEST DETECTABLE EFFECT · baseline 4.00% with 3,372 per group alpha 0.05 (two-sided) · power 80% · z(alpha) = 1.9600 · z(power) = 0.8416 upward: 5.45% (+1.45 points, +36.2% relative) downward: 2.77% (-1.23 points, -30.8% relative) A true change smaller than this will usually be missed: "not significant" at this size does not mean "no effect". FORMULA: the p2 at which power(p1, p2, n) reaches the target, by bisection on the power formula above SOURCE: Fleiss, J. L., Levin, B. & Paik, M. C. (2003). Statistical Methods for Rates and Proportions, 3rd ed. Wiley, ch. 4 LIMIT: normal approximation, equal groups.
the preregistration
$ experiment.py prereg --out PREREG.md --title … --p1 0.04 --p2 0.05 … PREREGISTRATION written: PREREG.md every section has an answer. SOURCE: Bowman, S. D., DeHaven, A. C., Errington, T. M., Hardwicke, T. E., Mellor, D. T., Nosek, B. A. & Soderberg, C. K. (2016). OSF Prereg Template. MetaArXiv, doi:10.31222/osf.io/epgjd; Center for Open Science (2025). Choosing the Right Preregistration Template: A Guide for Researchers (cos.io blog, 24 April 2025); registrations at osf.io/registries; Simmons, J. P., Nelson, L. D. & Simonsohn, U. (2011). False-positive psychology. Psychological Science 22(11), 1359-1366 LIMIT: a form is only as good as its timing. Written after the data is seen, it is a description, not a preregistration.
its check and its hash
$ experiment.py prereg --check PREREG.md PREREGISTRATION CHECK · PREREG.md every section is filled. sha256 3c35750b8bf91fad0c8cf103dca97874f3c0894d03ff36666fb9a9b21b2de6ce — record this hash with the date (in MY-LEDGER.md, an email to yourself, or the registry). Any later change to the file changes the hash. Register it before any outcome data is seen: OSF Registries or AsPredicted give a public, time-stamped record. SOURCE: Bowman, S. D., DeHaven, A. C., Errington, T. M., Hardwicke, T. E., Mellor, D. T., Nosek, B. A. & Soderberg, C. K. (2016). OSF Prereg Template. MetaArXiv, doi:10.31222/osf.io/epgjd; Center for Open Science (2025). Choosing the Right Preregistration Template: A Guide for Researchers (cos.io blog, 24 April 2025); registrations at osf.io/registries
What it refused, by its own laws.
- Fabricating, inventing or altering data, imputing it to order, or writing results for data that was never collected.
- Hunting for significance after the fact: dropping outliers, picking subgroups, metrics, covariates or tests until p falls below a line, and presenting it as planned.
- Hiding failed or null results, or reporting only the experiments that worked.
- Sizing, designing or analysing a clinical trial on people, or any study that needs ethics approval, without a biostatistician and an ethics board (IRB).
What it costs you in trust. It sizes a test before it starts, tests the result after with the method it names, and reports every result with its effect size and its interval; every formula, source and assumption is printed, and it says where a normal approximation is used. It never offers power worked out after the fact as evidence, never designs a trial on people, and never helps fabricate data, hunt for significance or hide a result.
THE PRODUCTION LINE CARD · the room →
What was asked. A print shop wants 5,000 tees a week without a bigger building — the bottleneck first, measured, not felt.
What the card did. The machine, run on 2026-10-09 on a worked job: a FAKE print shop's tee line (5,000 tees a week on one shift) worked through the five steps: takt, the line before and after a deletion and a second dryer, the press's OEE, three before-and-after tests, lead time from the carts waiting, and the learning curve of a new design. Run from this packet's own scripts/production.py before AUDIT.md, WITNESS.md and MANIFEST.md were added (none of them touches SKILL.md, so the punch is the punch of the packet you hold). Output pasted as it printed.
the takt the requirement sets
$ production.py takt --demand 5000 --per week --hours-per-day 7.5 --days 5 takt time: 27.0 s a unit (0.450 min) - available time: 7.5 h x 60 - 0 min breaks = 450 min a shift x 1 shift x 5 days = 2,250 min (135,000 s) a week - demand: 5,000 units a week - the line must finish one good unit every 27.0 s; at takt it makes 133.3 an hour. formula: takt = net available time in the period / units demanded in the period source: takt time as the Toyota Production System describes it: "the term given to a work-cycle that fulfils each customer's demand" (Toyota Material Handling Europe, Toyota Production System and what it means for business, 2010, p. 9) limit: takt is set by demand, not by the machines; it assumes the demand is steady across the period and counts good units only. A line planned to run at exactly takt has no slack for stops, scrap or changeovers: plan the bottleneck below takt, or take those losses out of the available time.
the line as it runs today
$ production.py line stations-draft.csv --demand 5000 --per week --hours-per-day 7.5 --days 5 the line: 6 stations, takt 27.0 s station work s parallel cycle s idle s a unit against takt load 18.0 1 18.0 16.0 9.0 s spare print 26.0 1 26.0 8.0 1.0 s spare cure 34.0 1 34.0 0.0 OVER by 7.0 s <- BOTTLENECK fold 22.0 1 22.0 12.0 5.0 s spare inspect and refold 15.0 1 15.0 19.0 12.0 s spare bag 12.0 1 12.0 22.0 15.0 s spare - bottleneck: cure, 34.0 s a unit. The line can go no faster: it makes 105.9 an hour. - in a week: 3,971 made at the bottleneck's pace, against a demand of 5,000 (available time 2,250 min). - balance efficiency at the line's own pace: total work 127.0 s / (6 stations x 34.0 s) = 62.3%; balance delay 37.7%; 77.0 s idle across the line for every unit. - against takt: total work / (stations x takt) = 78.4% - minimum stations at takt: ceil(127.0 / 27.0) = ceil(4.70) = 5. A lower bound: task order and task sizes may need more. - over takt: cure. Fix these first; time saved at any other station does not raise output. formula: bottleneck = the largest station cycle (work / parallel machines); output = 1 / bottleneck cycle; balance efficiency = total work / (machines x cycle); idle a unit = parallel x cycle - work; minimum stations = ceil(total work / takt) source: the standard line-balancing measures; the problem was first set out by Salveson, The Assembly Line Balancing Problem, Journal of Industrial Engineering 6(3):18-25 (1955); takt time as the Toyota Production System describes it limit: a steady line with the times you give: averages hide spread, and a station whose times swing will starve or block its neighbours. Buffers, changeovers, scrap and breakdowns are left out (see oee); the minimum stations is a lower bound that ignores the order tasks must follow.
the checklist for that one station
$ production.py loop --part "the inspect-and-refold station" --write loop-refold.md # THE FIVE STEPS · a working checklist for: the inspect-and-refold station Work them in this order. Do not skip ahead: the most common waste is making a step better that should not exist. ## [ ] 1. REQUIREMENT · make it less dumb, and name its owner - The requirement as a number, with units and a date: ______ - Who owns it (a name or a role, never "the department"): ______ - Why it exists, in the owner's words: ______ - Is it still true? What happens if it is halved, or dropped? ______ - If it is a demand, its takt: `production.py takt --demand N --per week --hours-per-day H --days D` ## [ ] 2. DELETE · the part or the process - List every part, step, move, wait, hand-off, check and form: ______ - Strike each one nobody can defend with a requirement and an owner. - A safety step, guard, interlock, lockout, required inspection or rest break is never a candidate for deletion or speeding up here; changes to those go to a qualified safety engineer and the machine's maker. - If nothing ever has to be added back, too little was deleted. What was added back, and why: ______ ## [ ] 3. SIMPLIFY AND OPTIMISE · only what survived - Find the bottleneck: `production.py line stations.csv --takt S` - Split the losses: `production.py oee --planned … --downtime … --ideal-cycle … --count … --good …` - Fix the bottleneck first: time saved at any other station does not raise output. ## [ ] 4. SPEED UP THE CYCLE · then prove it - Time at least five runs before and five after, the same way: `production.py cycle before.csv after.csv` - Lead time from work in progress: `production.py little --wip N --throughput N --per day` ## [ ] 5. AUTOMATE · last - Only a step that survived step 2, was simplified in step 3 and was measured in step 4: ______ - Automating a step that should have been deleted is the most expensive mistake on this list. - Write down the runs, the decision and its owner: ______ written: loop-refold.md formula: none: an order of work, not a calculation; the numbers come from the other commands source: references/THE-FIVE-STEPS.md (the five-step design process, its source named there once) limit: a checklist, not a ruling: it does not decide what is safe to remove. Safety steps, guards and required checks stay; those questions go to a qualified safety engineer and the machine's maker.
the line with the refold deleted
$ production.py line stations-cut.csv --takt 27 the line: 5 stations, takt 27.0 s station work s parallel cycle s idle s a unit against takt load 18.0 1 18.0 16.0 9.0 s spare print 26.0 1 26.0 8.0 1.0 s spare cure 34.0 1 34.0 0.0 OVER by 7.0 s <- BOTTLENECK fold 25.0 1 25.0 9.0 2.0 s spare bag 12.0 1 12.0 22.0 15.0 s spare - bottleneck: cure, 34.0 s a unit. The line can go no faster: it makes 105.9 an hour. - balance efficiency at the line's own pace: total work 115.0 s / (5 stations x 34.0 s) = 67.6%; balance delay 32.4%; 55.0 s idle across the line for every unit. - against takt: total work / (stations x takt) = 85.2% - minimum stations at takt: ceil(115.0 / 27.0) = ceil(4.26) = 5. A lower bound: task order and task sizes may need more. - over takt: cure. Fix these first; time saved at any other station does not raise output. formula: bottleneck = the largest station cycle (work / parallel machines); output = 1 / bottleneck cycle; balance efficiency = total work / (machines x cycle); idle a unit = parallel x cycle - work; minimum stations = ceil(total work / takt) source: the standard line-balancing measures; the problem was first set out by Salveson, The Assembly Line Balancing Problem, Journal of Industrial Engineering 6(3):18-25 (1955); takt time as the Toyota Production System describes it limit: a steady line with the times you give: averages hide spread, and a station whose times swing will starve or block its neighbours. Buffers, changeovers, scrap and breakdowns are left out (see oee); the minimum stations is a lower bound that ignores the order tasks must follow.
What it refused, by its own laws.
- Removing, bypassing or speeding past a safety step, guard, interlock, lockout, required inspection, food-safety time or rest break to save time.
- Building a tool to monitor, time, score or rank individual workers.
- Machinery-safety, guarding or risk-assessment rulings.
- Employment-law, working-hours, overtime or pay rulings.
What it costs you in trust. Takt and line figures assume a steady line and the times you give; OEE is only as good as the ideal cycle you set; the lead-time law holds for long-run averages of a stable system; the learning curve is an observed pattern, not a promise; a before-and-after needs at least five timed runs a side and is not a controlled experiment. It never removes a safety step, never builds tools to watch or rank workers, gives no safety or employment-law rulings, and supplies no prices.