THE INTRO CARD is free — what an AI skill card is and how to use one Download →Lost Lauren, contact us

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.

← THE DECK · THE FLOOR →

PAY BYAmerican Express Apple Pay Diners ClubDiscoverGoogle Pay Mastercard PayPalShop Pay Visa
CART · 0