THE PRODUCTION LINE CARD · the line · faster by measure, cheaper by design
WAKES WHEN a demand to meet and a takt time to set · station times, a line to balance or a bottleneck to find · OEE, downtime, scrap, lead time or work in progress in numbers · unit cost down a learning curve, or a before-and-after of cycle time to check
THE LOOP
NAME
REQUIREMENT
DELETE
SIMPLIFY
SPEED UP
AUTOMATE
LEDGER
NEVER
A safety step, guard or check removed to save time
A tool that watches or ranks individual workers
A change called real on fewer than five timed runs a side
A number without its formula, its source and its limit
IT MAKES takt — takt time: the pace demand sets; with --cycle, whether a bottleneck keeps it; line — the bottleneck, line output, balance efficiency, idle time per station and the minimum stations (CSV: station,seconds[,parallel]; rows of one station are summed); oee — availability x performance x quality, each shown, and the minutes lost to each; little — two of --wip N --throughput N --lead-time T [--per hour|day|week|...] Little's law: lead time from work in progress, or solve for any one of the three; wright — target cost; or the rate fitted from your own (unit, cost) history; cycle — a measured before-and-after of cycle time: medians, ranges, the share of runs faster, and a plain verdict (never called on fewer than five runs a side); loop — the checklist for that one station.
THE STANDARD every number shows its formula; measured, not felt; the bottleneck first; question each requirement and name its owner,; safety is never a deletion; it measures stations and processes, never people; cost comes only from the user's own.
IN THE BOX SKILL.md · CARD.md · the machine · production.py · 35/35 · references · THE-METHOD by hand · START-HERE · TIN · MY-LEDGER · THE-CLAUSES · LICENSE-NOTE · the doors · HOSTS · system prompts · ten tests · faces · audit · witness.
THE SEAL 98 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 5 · Proof 5
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. THE-CLAUSES.md rides in the packet and is part of the licence.
THE PUNCH · SHA-256 OF SKILL.MD · EC64093C002D35A2EE9C8B92
CITE THIS CARDTHE PRODUCTION LINE CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=production-line-card. Punch EC64093C002D35A2EE9C8B92. Retrieved 2026-10-10.
What it is.
A seat that works the arithmetic of making things faster and cheaper, for a workshop, a factory line, a print shop, a kitchen or any repeated process: every answer with its formula, its source and its limit, and every requirement questioned before it is computed.
Works out the takt time for a demand; the bottleneck, line output, balance efficiency, idle time per station and the minimum stations a line needs; OEE as availability × performance × quality, with the minutes lost to each; lead time from work in progress and throughput, or any one of the three from the other two; unit, total and average cost down a learning curve, the units to reach a target cost, and a learning rate fitted from your own history; a measured before-and-after of cycle time with a plain verdict; and the five-step loop as a working checklist.
It carries a machine that shows its working: takt — takt time: the pace demand sets; with --cycle, whether a bottleneck keeps it; line — the bottleneck, line output, balance efficiency, idle time per station and the minimum stations (CSV: station,seconds[,parallel]; rows of one station are summed); oee — availability x performance x quality, each shown, and the minutes lost to each; little — two of --wip N --throughput N --lead-time T [--per hour|day|week|...] Little's law: lead time from work in progress, or solve for any one of the three; wright — target cost; or the rate fitted from your own (unit, cost) history; cycle — a measured before-and-after of cycle time: medians, ranges, the share of runs faster, and a plain verdict (never called on fewer than five runs a side); loop — the checklist for that one station — 35 checks in its selftest, 7 of its 7 commands on the record. It will never a safety step, guard or check removed to save time; never a tool that watches or ranks individual workers; never a change called real on fewer than five timed runs a side; never a number without its formula, its source and its limit.
Seven laws, written into the card.
They are in the card itself, so the AI follows them.
EVERY NUMBER SHOWS ITS FORMULAEvery number shows its formula, its source and its limit. An approximation says what it leaves out.
MEASURED, NOT FELTMeasured, not felt: a change is real only when timed runs show it, at least five a side, timed the same way. Under five, the verdict is not called.
THE BOTTLENECK FIRSTThe bottleneck first: time saved at a station that is not the bottleneck does not raise the line's output.
QUESTION EACH REQUIREMENT AND NAME ITS OWNER,Question each requirement and name its owner, delete before simplifying, and automate last (references/THE-FIVE-STEPS.md).
SAFETY IS NEVER A DELETIONSafety is never a deletion: a guard, interlock, lockout, safety step, required inspection, food-safety time or rest break is never cut or sped past to save time. Those questions go to a qualified safety engineer and the machine's maker.
IT MEASURES STATIONS AND PROCESSES, NEVER PEOPLEIt measures stations and processes, never people: no tool to monitor, time, score or rank individual workers.
COST COMES ONLY FROM THE USER'S OWNCost comes only from the user's own inputs, in their own currency. The card supplies no prices, and a published benchmark is an assumption, never a target until its owner says so.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDESreferences/THE-FIVE-STEPS.md · THE-LINE.md · THE-METHOD.md · THE-SOURCES.md · WHERE-IT-STOPS.md
THE MACHINEproduction.py · seven commandstakt — takt time: the pace demand sets; with --cycle, whether a bottleneck keeps it; line — the bottleneck, line output, balance efficiency, idle time per station and the minimum stations (CSV: station,seconds[,parallel]; rows of one station are summed); oee — availability x performance x quality, each shown, and the minutes lost to each; little — two of --wip N --throughput N --lead-time T [--per hour|day|week|...] Little's law: lead time from work in progress, or solve for any one of the three; wright — target cost; or the rate fitted from your own (unit, cost) history; cycle — a measured before-and-after of cycle time: medians, ranges, the share of runs faster, and a plain verdict (never called on fewer than five runs a side); loop — the checklist for that one station. Every command prints its working and refuses a bad input; 35 checks in its selftest, 7 of 7 commands on the record.
What it does once your AI has it.
takt Takt time: the pace demand sets; with --cycle, whether a bottleneck keeps it
line The bottleneck, line output, balance efficiency, idle time per station and the minimum stations (CSV: station,seconds[,parallel]; rows of one station are summed)
oee Availability x performance x quality, each shown, and the minutes lost to each
little Two of --wip N --throughput N --lead-time T [--per hour|day|week|...] Little's law: lead time from work in progress, or solve for any one of the three
wright Target cost; or the rate fitted from your own (unit, cost) history
cycle A measured before-and-after of cycle time: medians, ranges, the share of runs faster, and a plain verdict (never called on fewer than five runs a side)
loop The checklist for that one station
On the record 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.
What it will never do.
It will never a safety step, guard or check removed to save time; never a tool that watches or ranks individual workers; never a change called real on fewer than five timed runs a side; never a number without its formula, its source and its limit.
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. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
Not for personal productivity or to-do lists, AI or GPU compute costs, financial forecasts or budgets, A/B tests of web pages or ads, machinery-safety rulings (a qualified safety engineer), employment law, hours or pay (the labour authority or an employment lawyer), or tools that watch or rank workers.
What’s in the buy.
CARD.md — the whole card: who it is, its laws, when it says no, what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
THE-FIVE-STEPS.md + THE-LINE.md + THE-METHOD.md + THE-SOURCES.md + WHERE-IT-STOPS.md — the guides in references/, in the card's own voice
scripts/production.py — the machine: takt · line · oee · little · wright · cycle · loop, standard library only, selftest 35/35
WITNESS.md — the self-test and the runs on the record, as they printed · MANIFEST.md, every file hashed · AUDIT.md, the twelve checks · tests/, ten tests with their evals
MY-LEDGER.md — the card's memory, on your own machine · TIN.md · LICENSE-NOTE.md · THE-CLAUSES.md
card.svg + card-machine.svg + card.json · card.html, the card as one offline file · HOSTS.md, the door for each host (Claude, Claude Code, ChatGPT, Gemini, Any other AI) · system/, the prompts for any other AI
Also sold as a bot: the same card as instructions and knowledge files for a ChatGPT Project or GPT, a Gemini Gem or a Claude Project (THE BOTS, beside the packet)
PROOF · SELFTEST 35/35 · 7 OF 7 COMMANDS ON THE RECORD · WITNESSED 2026-10-09 · EDITION 1 · PUNCH EC64093C002D35A2EE9C8B92
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 957 PROPOSED — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-09
production.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
takt
takt time: the pace demand sets; with --cycle, whether a bottleneck keeps it
line
the bottleneck, line output, balance efficiency, idle time per station and the minimum stations (CSV: station,seconds[,parallel]; rows of one station are summed)
oee
availability x performance x quality, each shown, and the minutes lost to each
little
two of --wip N --throughput N --lead-time T [--per hour|day|week|...] Little's law: lead time from work in progress, or solve for any one of the three
wright
target cost; or the rate fitted from your own (unit, cost) history
cycle
a measured before-and-after of cycle time: medians, ranges, the share of runs faster, and a plain verdict (never called on fewer than five runs a side)
loop
the checklist for that one station
selftest
35 checks that prove the machine; it must print 35/35
takt · TAKT TIME: THE PACE DEMAND SETS; WITH --CYCLE, WHETHER A BOTTLENECK KEEPS IT
$ 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.
line · THE BOTTLENECK, LINE OUTPUT, BALANCE EFFICIENCY, IDLE TIME PER STATION AND THE MINIMUM S
$ 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.
loop · 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.
line · THE BOTTLENECK, LINE OUTPUT, BALANCE EFFICIENCY, IDLE TIME PER STATION AND THE MINIMUM S
$ 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.
line · THE BOTTLENECK, LINE OUTPUT, BALANCE EFFICIENCY, IDLE TIME PER STATION AND THE MINIMUM S
$ production.py line stations-two-dryers.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 8.0 9.0 s spare
print 26.0 1 26.0 0.0 1.0 s spare <- BOTTLENECK
cure 34.0 2 17.0 18.0 10.0 s spare
fold 25.0 1 25.0 1.0 2.0 s spare
bag 12.0 1 12.0 14.0 15.0 s spare
- bottleneck: print, 26.0 s a unit. The line can go no faster: it makes 138.5 an hour.
- balance efficiency at the line's own pace: total work 115.0 s / (6 machines x 26.0 s) = 73.7%; balance delay 26.3%; 41.0 s idle across the line for every unit.
- against takt: total work / (machines x takt) = 71.0%
- minimum stations at takt: ceil(115.0 / 27.0) = ceil(4.26) = 5. A lower bound: task order and task sizes may need more.
- every station keeps takt; the bottleneck has 1.00 s of slack.
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.
oee · AVAILABILITY X PERFORMANCE X QUALITY, EACH SHOWN, AND THE MINUTES LOST TO EACH
$ production.py oee --planned 450 --downtime 52 --ideal-cycle-seconds 22 --count 900 --good 873
OEE 71.1% = availability 88.4% x performance 82.9% x quality 97.0%
- availability: run time 398.0 of 450.0 planned minutes (52.0 down)
- performance: 900 units x 0.367 min ideal = 330.0 min of ideal work in 398.0 min of run time
- quality: 873 good of 900 made (27 not good)
- where the 450.0 planned minutes went: 320.1 fully productive · 52.0 down (breakdowns, changeovers, waiting) · 68.0 slow running and small stops · 9.9 making units that were not good
- the largest loss: slow running and small stops, 68.0 min. Start there.
- check: good x ideal cycle / planned time = 873 x 0.367 / 450.0 = 71.1%
- a benchmark, not a target: the figures commonly quoted from Nakajima as world-class minimums for discrete manufacturing are availability 90%, performance 95%, quality 99%, OEE about 85% (Japan, 1970s). Many plants measure far lower; compare a machine with itself over time.
formula: OEE = A x P x Q; A = (planned - downtime) / planned; P = ideal cycle x count / run time; Q = good / count; the same as good x ideal cycle / planned time
source: Nakajima, Introduction to TPM: Total Productive Maintenance (Productivity Press, 1988; Japanese edition 1984)
limit: only as good as the ideal cycle time: set it to the machine's best rated or demonstrated speed, not the average, or performance hides the speed loss. Planned time leaves out time not scheduled. One machine or line, one period; it does not rank plants or people.
cycle · A MEASURED BEFORE-AND-AFTER OF CYCLE TIME: MEDIANS, RANGES, THE SHARE OF RUNS FASTER, AN
$ production.py cycle print-before.csv print-jig.csv
a column naming people (operator) was ignored: this machine measures stations and processes, never times or ranks individual workers.
before: 8 runs, median 26.35, range 25.8 to 27.2
after: 8 runs, median 24.1, range 23.5 to 24.8
(times in the file's own unit: seconds)
- median change: -2.25 (-8.5%)
- after runs faster than the before median: 8 of 8 (100%)
- a random after run beats a random before run in 100% of the 64 pairs (ties count half)
- Mann-Whitney U = 64, two-sided p = 0.0002 (exact)
VERDICT: FASTER. The drop is real by this test: median 26.35 to 24.1, 8.5% less. Check it against takt before calling it enough.
formula: medians and ranges of each set; U = pairs (before, after) where the after run is faster, ties half; share = U / (before runs x after runs); p from the exact distribution of U when there are no ties, else the normal approximation with tie correction
source: Mann and Whitney, On a Test of Whether One of Two Random Variables is Stochastically Larger than the Other, Annals of Mathematical Statistics 18(1):50-60 (1947)
limit: the runs must be timed the same way: the same start and stop points, the same product, the same conditions. Before and after also differ in time, so a warm machine, a new batch or a practised hand can move the times: this is not a randomised experiment. Five a side is the floor, not a good sample, and a real drop can still be too small to matter.
cycle · A MEASURED BEFORE-AND-AFTER OF CYCLE TIME: MEDIANS, RANGES, THE SHARE OF RUNS FASTER, AN
$ production.py cycle print-before.csv print-squeegee.csv
a column naming people (operator) was ignored: this machine measures stations and processes, never times or ranks individual workers.
before: 8 runs, median 26.35, range 25.8 to 27.2
after: 6 runs, median 26.3, range 25.7 to 26.8
(times in the file's own unit: seconds)
- median change: -0.05 (-0.2%)
- after runs faster than the before median: 3 of 6 (50%)
- a random after run beats a random before run in 57% of the 48 pairs (ties count half)
- Mann-Whitney U = 27.5, two-sided p = 0.6982 (normal approximation with tie correction)
VERDICT: NOT SHOWN. The difference sits inside the run-to-run spread. Treat it as no change yet: time more runs or make a bigger change.
formula: medians and ranges of each set; U = pairs (before, after) where the after run is faster, ties half; share = U / (before runs x after runs); p from the exact distribution of U when there are no ties, else the normal approximation with tie correction
source: Mann and Whitney, On a Test of Whether One of Two Random Variables is Stochastically Larger than the Other, Annals of Mathematical Statistics 18(1):50-60 (1947)
limit: the runs must be timed the same way: the same start and stop points, the same product, the same conditions. Before and after also differ in time, so a warm machine, a new batch or a practised hand can move the times: this is not a randomised experiment. Five a side is the floor, not a good sample, and a real drop can still be too small to matter.
cycle · A MEASURED BEFORE-AND-AFTER OF CYCLE TIME: MEDIANS, RANGES, THE SHARE OF RUNS FASTER, AN
$ production.py cycle print-before.csv print-ink.csv
a column naming people (operator) was ignored: this machine measures stations and processes, never times or ranks individual workers.
before: 8 runs, median 26.35, range 25.8 to 27.2
after: 3 runs, median 24.9, range 24.7 to 25.1
(times in the file's own unit: seconds)
- median change: -1.45 (-5.5%)
- after runs faster than the before median: 3 of 3 (100%)
VERDICT: NOT CALLED. Fewer than five runs a side (before 8, after 3). Time at least five each way, the same way, before calling any change real; ten a side is better.
formula: medians and ranges of each set; U = pairs (before, after) where the after run is faster, ties half; share = U / (before runs x after runs); p from the exact distribution of U when there are no ties, else the normal approximation with tie correction
source: Mann and Whitney, On a Test of Whether One of Two Random Variables is Stochastically Larger than the Other, Annals of Mathematical Statistics 18(1):50-60 (1947)
limit: the runs must be timed the same way: the same start and stop points, the same product, the same conditions. Before and after also differ in time, so a warm machine, a new batch or a practised hand can move the times: this is not a randomised experiment. Five a side is the floor, not a good sample, and a real drop can still be too small to matter.
line · THE BOTTLENECK, LINE OUTPUT, BALANCE EFFICIENCY, IDLE TIME PER STATION AND THE MINIMUM S
$ production.py line stations-jig.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 7.0 9.0 s spare
print 24.1 1 24.1 0.9 2.9 s spare
cure 34.0 2 17.0 16.0 10.0 s spare
fold 25.0 1 25.0 0.0 2.0 s spare <- BOTTLENECK
bag 12.0 1 12.0 13.0 15.0 s spare
- bottleneck: fold, 25.0 s a unit. The line can go no faster: it makes 144.0 an hour.
- balance efficiency at the line's own pace: total work 113.1 s / (6 machines x 25.0 s) = 75.4%; balance delay 24.6%; 36.9 s idle across the line for every unit.
- against takt: total work / (machines x takt) = 69.8%
- minimum stations at takt: ceil(113.1 / 27.0) = ceil(4.19) = 5. A lower bound: task order and task sizes may need more.
- every station keeps takt; the bottleneck has 2.00 s of slack.
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.
little · TWO OF --WIP N --THROUGHPUT N --LEAD-TIME T [--PER HOUR|DAY|WEEK|...] LITTLE'S LAW: LEAD
$ production.py little --wip 1200 --throughput 1000 --per day
lead time 1.20 days = work in progress 1,200 / throughput 1,000 a day
- a unit that starts now waits behind about 1,200 others; at 1,000 finished a day, it comes out in about 1.20 days on average.
- to halve the lead time to 0.60 days at the same throughput, hold work in progress at 600.
formula: L = lambda W: work in progress = throughput x lead time, so lead time = work in progress / throughput
source: Little, A Proof for the Queuing Formula: L = lambda W, Operations Research 9(3):383-387 (1961), doi 10.1287/opre.9.3.383
limit: long-run averages of a stable system, all three measured over the same period and the same boundary (where a unit enters and leaves), in the same units. Throughput is the exit rate. It gives the average, not one job's lead time, and it says nothing about the spread.
little · TWO OF --WIP N --THROUGHPUT N --LEAD-TIME T [--PER HOUR|DAY|WEEK|...] LITTLE'S LAW: LEAD
$ production.py little --throughput 1000 --lead-time 0.25 --per day
work in progress 250.0 = throughput 1,000 a day x lead time 0.25 days
- that is the average number of units inside the boundary at any moment.
formula: L = lambda W: work in progress = throughput x lead time, so lead time = work in progress / throughput
source: Little, A Proof for the Queuing Formula: L = lambda W, Operations Research 9(3):383-387 (1961), doi 10.1287/opre.9.3.383
limit: long-run averages of a stable system, all three measured over the same period and the same boundary (where a unit enters and leaves), in the same units. Throughput is the exit rate. It gives the average, not one job's lead time, and it says nothing about the spread.
wright · TARGET COST; OR THE RATE FITTED FROM YOUR OWN (UNIT, COST) HISTORY
$ production.py wright --fit design-history.csv
fitted learning rate 87.8% (b = -0.1881): each doubling of cumulative units takes unit cost to 87.8% of what it was
- fitted cost of unit 1: 6.31 (in the units of your data)
- fit: 8 points, R squared 0.996 on the log-log line
formula: ln cost = ln first + b ln unit, least squares on the logs; rate = 2^b
source: Wright, Factors Affecting the Cost of Airplanes, Journal of the Aeronautical Sciences 3(4):122-128 (1936), doi 10.2514/8.155
limit: a straight line on log-log axes is assumed; a few early points move the fit a lot; batch averages fit the average form, not the unit form. Your history, your rate: it is not a promise about the next units.
wright · TARGET COST; OR THE RATE FITTED FROM YOUR OWN (UNIT, COST) HISTORY
$ production.py wright --first-cost 6.2 --rate 0.88 --units 5000 --target 2
learning rate 88.0%, b = log2(0.880) = -0.1844; the unit model: unit cost falls to 88.0% with each doubling of cumulative units
- unit 5,000 costs 1.29; the first 5,000 cost 7,897.86 in total, 1.58 each on average (in the units of --first-cost: money in your currency, or hours or minutes)
unit unit cost cumulative average
1 6.20 6.20
2 5.46 5.83
4 4.80 5.38
8 4.23 4.89
16 3.72 4.40
32 3.27 3.93
64 2.88 3.48
128 2.53 3.08
256 2.23 2.72
512 1.96 2.40
1,024 1.73 2.11
2,048 1.52 1.86
4,096 1.34 1.64
5,000 1.29 1.58
- unit cost first reaches 2.00 at unit 462 (that unit costs 2.000; the one before, 2.001).
formula: unit model: cost of unit n = first x n^b, b = log2(rate); total = first x sum of k^b; average = total / n
source: Wright, Factors Affecting the Cost of Airplanes, Journal of the Aeronautical Sciences 3(4):122-128 (1936), doi 10.2514/8.155; Wright fitted the cumulative average; the unit form is the later one most planners use
limit: an observed pattern, not a law: cost falls only while people keep making and improving, and the rate is yours (Wright reported about 80% for airframe labour in his day). It applies to the labour and conversion cost that learning moves, not to bought-in materials; a pause in production loses some of it. No currency is assumed.
THE RUNS ARE PASTED FROM THE CARD’S OWN WITNESS.MD AS PRINTED. FIGURES MARKED FAKE ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; PUBLISHED FIGURES ARE NAMED WITH THEIR SOURCES. NO PRIVATE PERSON IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
Name. Ask what the work is and what it must agree with.
Does it send anything anywhere?
No. The machine is a standard-library Python program that runs on your own computer and sends nothing anywhere; the words run wherever an AI reads Markdown. No server, no account, no key.
What is on the record?
The self-test (35/35) and 7 of its 7 commands run on real inputs, pasted into WITNESS.md as they printed; the punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. 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.
What will it never do?
It will never a safety step, guard or check removed to save time; never a tool that watches or ranks individual workers; never a change called real on fewer than five timed runs a side; never a number without its formula, its source and its limit.