Tie-Out Press
Workbook 1.0.2 Run 30 September 2026 Constants: ty2026.json
Qualified Overtime Kit, TY2026 edition
The sales page makes claims. This page is the working behind them: what is compared against what, what the comparison can and cannot establish, and where the kit and a published source do not land on the same number.
The arithmetic is written three times. engine/qot_engine.py is Python, works in
Decimal, and has no third-party dependencies. The workbook's Excel formulas are
the second. The offline spot check is the third, in JavaScript. Three implementations are
worth nothing on their own, so one script drives all three from the same inputs and compares
them to the same answers.
What that establishes is agreement. Not independence. The next section is about the difference, because it is the whole of the difference between a check and a reassurance.
The test suite holds 90 cases. An internal verification build of the workbook loads every one
of them as data, and build/verify_with_libreoffice.py reads that file twice.
First with no recalculation at all: the cached results the file carries, which is what a
webmail preview or a phone viewer puts on the screen. Then again with every formula
recomputed from scratch, which is what Excel does on open. Both readings have to land on the
engine's own Decimal, and the build fails if either does not.
The recalculation is the part that needs saying plainly, because it is easy to fake by
accident. LibreOffice opens an .xlsx and, left alone, reports whatever results
the file already claims its formulas come to. It does not recompute them. So the tool writes
a throwaway user profile with OOXMLRecalcMode forced to always and
converts the file inside that profile. Without that setting the run would be the workbook
agreeing with itself, and it would pass.
| Comparison | Cases | Mismatches |
|---|---|---|
| Qualified amount, workbook formulas against the engine | 85 | 0 |
| Blocked or eligible verdict | 85 | 0 |
| Analogue invariants, where Excel cannot express the case | 3 | 0 |
| Cases compared | 88 | 0 |
| No Excel expression; named, and not compared | 2 | — |
Every exception rule the workbook implements fires on exactly the cases the engine fires it on. The Checks summary cell recalculates to zero. Three Checks rows are not zero and are not supposed to be: CK-11 reads 2, CK-20 reads 1 and CK-24 reads 1, all three advisory and all three counting zero toward the summary. The verification file carries those cases because they contain the errors those rules describe, and a check the self-test cannot satisfy is a check somebody eventually switches off. On the shipped sample only CK-20 is non-zero; on the empty customer file none of them is.
“The workbook implements” is doing work in that sentence, so here is the
size of it. The Exception Log lists 53 rules. 44 are live in the workbook and are
the ones the parity run proves. Eight are engine only: the engine raises them
and this file does not. One more, E-405, is raised by neither half, and it is below. Every
one of the eight is marked engine only on the sheet,
carries a Guards column saying whether it protects a number or is advisory, and
prints a plain statement of what its absence costs you. But its In scope and
Self-test counts read n/a, because nothing here fires it. Four of the
eight still show severity E and blocks output, which is the severity the
rule carries in the engine; read the statement, not the severity.
That paragraph used to be something we counted by hand, which is how it came to be wrong. Since 11 September 2026 every code either half of the kit can raise (95 of them) is accounted for in the builder's own source, as a rule here, a row on the Checks sheet, or a deliberate engine-only declaration carrying its reason. The build fails if one is not. Engine-only is a decision somebody made and signed, never an absence a check happened to tolerate.
Three rules have come off that list in the last three builds rather than staying disclosed on it: E-505 on 9 September 2026, E-102 on 10 September and E-205 on 11 September. The rule that decided each, and that we will keep applying, is this: the workbook must never silently substitute a value you did not provide. A substitution you cannot see is a wrong number. Validating a figure you typed is a lower bar, because it is on the screen in front of you.
We then ran that test deliberately against all twelve, rather than waiting to find a fourth after launch. The method was not reading the code: each condition was typed into the shipped workbook the way a licensee would type it, recalculated through LibreOffice, and the Box 12 cell read. Two of the twelve were built. One was not, and it is the one this page owes you. The rest substitute nothing: they validate a figure you typed, are impossible here by construction, or are already intercepted by a live blocking rule, and in two cases the workbook is stricter than the engine and refuses where the engine quietly defaults.
E-205 failed that test and was published here as open on 10 September, before it had a fix. It was built on 11 September. The engine refuses to report for an employee whose status row is missing a field it needs, and the offline spot check has done the same since it was written; the workbook was the only half without it. A blank Pay basis produced a figure with no rule firing at all. That is the plainest version of this defect anywhere in the product, plainer than the one below, which at least said something while saying the wrong thing.
E-502 is the only one of them whose absence can still cost you a number, and it stays engine-only for this edition on the rule above: it bounds a section 207(j) or 207(k) premium you entered and can read, rather than one this file made up. Where that cell is left blank, both halves fall back to the same figure: the premium on your own pay lines.
And the sweep is now a gate rather than an afternoon. Three defects of one kind were found here one at a time, each by a reader. The method that missed all three for a month was reading formulas; the method that found them was typing the condition into the built workbook and recalculating it. That is now the fifteenth thing every build has to pass: every input where the engine refuses to report because something is missing is typed into the shipped file, recalculated, and required to come back blocked and with no figure — blocked as well as empty, because a number that quietly does not appear is its own kind of wrong. A control employee with nothing missing has to come back with a figure, so a workbook that refused everything could not pass. Add a blocking rule to the engine and the gate fails until somebody says what this file does about it.
It found two more things the moment it first ran, neither of which anyone had reported. E-202, a qualified amount with no pay date, which the engine blocks, could not fire at all, because it tested the pay year against zero and the year of an empty date is 1900. The week produced no figure and said nothing about why. And E-405, a rule listed on the Exception Log as engine-only, turned out to be raised by neither half: it is impossible by construction in both, which is a fine answer, but not the one the sheet was giving. Both are fixed, and both are here because a gate that only ever confirms what you already believed is not a gate.
Three of the twelve rows are shown; the run prints all twelve. The other thirteen engine blocking rules are declared in the same file as not a missing input, each carrying the reason it is not one: a duplicate, a value out of range, a scope refusal. The gate fails if a blocking rule is neither probed nor declared, and that is the part meant to outlast us: the next blocking rule somebody adds to the engine breaks the build until somebody has said what this file does about it.
The verification build carries 118,305 formula cells. 111,201 ship carrying their real
computed result; the remaining 7,104 are formulas whose result is an empty string, a row that
does not apply or a column that stays blank until you fill it, so there is nothing to cache.
Of the cached results, 4,589 are checked against the engine: every cell it holds a
Decimal for.
The spot check is driven the same way, through its own page in headless Chromium. It is a single-employee, single-workweek tool, so it cannot express every case. It matches on the 65 it can, to the cent, including the severity codes raised and the eligibility verdict. The 25 it cannot are each printed with the reason: a deferred bonus spanning a quarter, a second employee on the same file, a pay date in the following tax year. None is quietly dropped. That run also counts the page's network requests after load. There are none.
Implementations that share a misreading of the specification agree with each other and are still wrong. Comparing them cannot find it. The thing each is being measured against is the others, and they are all reading the same sentence the same wrong way.
That is not a hypothetical, and the example is ours. Section 4.2 of the calculation spec said the includable straight-time figure includes TIPC lines, meaning the tip-credit memo lines. All three implementations read it that way, so all three agreed. The reading is wrong: 29 CFR 531.59(b) allows the credit only for hours worked in an occupation in which the employee qualifies as a tipped employee, so a tipped employee whose whole week was worked in the non-tipped job correctly has no such line at all. The check built on that sentence fired at error severity on weeks that were computed correctly, and stayed silent on the dual-job week where the premium really had been taken on the cash wage alone. Every parity run was green the entire time. It was found by someone reading the regulation.
So the published examples do work the parity run cannot do. They are arithmetic we did not write, published by the agencies whose rules the kit implements, with the answer printed beside the facts.
| Source | Facts | Code TT | Status |
|---|---|---|---|
| FS-2026-13, Q16 | $20.00/hr, 50 hours, employer pays double time | $100.00 | Published example, reproduced |
| 29 CFR 778.110 | $12.00/hr, 46 hours, $46.00 nondiscretionary bonus | $39.00 | Published example, reproduced |
| 29 CFR 778.111(a) | 50 hours: $491.00 at piece rates for 46, $8.00/hr for 4 hours' waiting time | $52.30 | Published example, reproduced |
| 29 CFR 778.220(b) | $12.00/hr, 42 hours worked, 2 hours of show-up pay not worked | $12.00 | Published example, reproduced |
| 29 CFR 531.60 | $2.13 cash wage, $5.12 tip credit, 10 overtime hours | $36.25 | Derived from the rule; see below |
The last row is not a published example and this page will not call it one. 29 CFR 531.60
publishes no worked example. It states a rule: a tipped employee's regular rate
includes the tip credit the employer takes, capped at the section 6(a)(1) minimum wage less
the cash wage paid. The $2.13 cash wage is printed verbatim in 531.59 and 531.60. The $5.12
credit is printed in no statute or regulation. It is that formula's own product, given the
$7.25 minimum wage at 29 USC 206(a)(1)(C). Apply the rule and the regular rate is $7.25, not $2.13, and ten
overtime hours carry $36.25 of qualified premium. Computing that
premium on the cash wage instead is the most common error in this category. The derivation is
recorded as assumption A12 in params/ty2026.json, and the rules PDF labels the
figure derived rather than published.
29 CFR 778.114(b)(1) illustrates the fluctuating workweek: a $600 salary, and a second week of 44 hours. The regulation's own arithmetic rounds that week's regular rate to $13.64 before halving it, and prints a premium of $27.28. At full precision the rate is 600 divided by 44, which is $13.636363…, and the premium is $27.27.
The engine never rounds the regular rate. On those facts it computes $27.27 and reports $27.28, because the $27.28 the employer paid falls inside the $0.05 operational tolerance the kit ships with, and a premium inside the band is the figure taken. Set the tolerance to zero and the reported figure is $27.27. So the kit arrives at the regulation's number at the shipped setting without computing it, the two readings are a penny apart underneath, and this page will not say the kit reproduces 778.114(b)(1) to the penny — nor will any other page we publish, because that is a claim a careful reader would take apart with a calculator in about a minute. It is accurate for FS-2026-13 Q16 and for 29 CFR 778.110, which reproduce exactly. It is not accurate here.
What changed on 8 September 2026 is not the number. It is what the kit says about the employer who paid $27.28.
Until then, the two figures were reconciled through the operational tolerance: $0.05 per component, so the paid figure fell inside the band and governed. A review pass went looking for where that stops working, and found it. The regular rate is never rounded is the kit's rule, not the regulation's. 29 CFR 778.109 defines the rate as a division and says nothing about precision. Its neighbors round: 778.113(a) prints a $375 salary for a 40-hour week as $9.38 an hour, not $9.375, and all three of the 778.114(b) illustrations compute the premium on a rate rounded to the cent. In the third of them the rate rounds down — $700 over 48 hours is $14.583…, printed as $14.58 — and the premium the regulation prints, $58.32, is a cent below the exact half-time amount of $58.33.
An employer whose payroll rounds the rate to the cent is therefore doing what DOL's own published illustrations do, and its premium is lawful. The kit was calling that an exception. At a $0.00 tolerance, which is a permitted setting, it flagged all three 778.114(b) illustrations — and the third one, where the regulation's premium is a cent short of full precision, as a possible FLSA underpayment. Above that, the tolerance held only because the gap is small: it grows with overtime hours, and from a 59-hour week up it clears $0.05 and the flags come back. On a grid of weekly salaries from $290 to $2,000 and weeks of 41 to 80 hours there are 9,353 combinations where a payroll following the regulation lands outside the band.
All 9,353 are now clean. The engine carries a second figure beside the requirement:
the same premium computed on the rate rounded half-up to the cent. Where the
premium paid matches it, the week is recognized as compliant on its own row (I-705 in the
engine, check C-48, rule I-C48 in the workbook) instead of drawing a shortfall warning or a
non-FLSA excess. The tolerance was not widened; the same band is applied to a second lawful
requirement, and the tolerance goes back to doing only the job it was documented for.
Assumption A14 in params/ty2026.json records the whole of it, with the
regulation's four illustrations and their arithmetic in both directions.
The reported figure did not move. That was the constraint the fix was written under, and it is asserted rather than promised. On the rows this path touches (the ones outside the operational tolerance, where the flag used to be raised), the kit reports min(required, paid) measured on the unrounded requirement, which is the smaller of the two lawful readings and the amount FS-2026-13 Q16 calls minimally necessary. Inside the tolerance nothing about the reported figure changed either: there the premium paid is the figure taken, which is why the 778.114(b)(1) week above reports $27.28 and not $27.27. Every weekly figure across a quarter of a million salary-and-hours-and-premium combinations, at three tolerance settings, is identical to what the engine reported before the change. Only the flag is different. A reader who follows the regulation is no longer told they overpaid.
Status History has a column headed Workweek starts, and under it the words “overrides the employer default”. Until 10 September 2026 nothing in the workbook read that column. Its only appearance in the whole builder was its own definition. Every workweek was built on the employer-wide value from Client Setup, and what a licensee typed on the status row was discarded without a word. The employer-level Workweek start time beside it had no name to be read by at all.
It does not take an unusual payroll to bite. One status row saying WED against a
Client Setup default of SUN is enough, and which way it breaks depends only on
which day the weeks you entered happen to start. If they start Wednesday, as they would, the
engine computes the figure and the workbook raised an error against a perfectly valid
week and blocked. If they start Sunday, the engine blocks and the workbook reports.
Neither is a number worth having. The start day decides which hours fall in which workweek,
and therefore how much overtime is in each.
It is honored now, with a start-time column beside it so this file can express exactly what the engine can. And with the definition finally visible, E-102 can do its job: where an employee's workweek definition changes during the year, 29 CFR 778.301-.302 requires the overlap week to be computed on both definitions and the employee paid whichever is more. Neither half of the kit performs that computation, so the employee is blocked rather than reported on whichever definition happened to win. Two live self-test cases hold it: T50a, a genuine Wednesday workweek, which the workbook wrongly blocked before this release, and T50b, the mid-year change, which it now blocks correctly.
The build refused to produce a file the moment T50a was added, before a line of the fix was written. That is the parity run earning its keep: a case that pins the engine's answer turns a silent disagreement into a failed build.
E-505 is the rule for a tipped employee with no applicable minimum wage on file. A tipped employee's credit is normally sized to bring the regular rate to exactly the governing minimum, so a rate sitting on the federal $7.25 while the employer computed its own overtime premium on a higher rate is evidence that a higher state minimum governs and was never entered. It is not proof — the other reading is a voluntary premium, which FS-2026-13 Q16 says does not qualify at all — and 29 CFR 778.109 makes the regular rate remuneration divided by hours worked, so the missing input cannot be recovered from what was paid. The engine withholds the week rather than guess.
Until 9 September 2026 the workbook did the opposite, and this page did not say so. It substituted the federal minimum for the blank cell and reported a figure computed on it. On DOL's own Field Operations Handbook scenario 4 — 45 hours, cash wage $3.35, credit $3.90, premium paid $25.00 — it reported $18.13 where the answer with the $10.00 state minimum on file is $25.00, and logged the $6.88 difference under I-703.
It was disclosed. The Exception Log carried an E-505 row saying, in as many words, that leaving the cell blank would understate the premium. That was judged enough, and it was not. We typed the scenario into the shipped file and recalculated it: every Checks row came back zero, the summary cell zero, the employee not blocked, Box 12 reading $18.13. Exactly one rule fired on the data: I-703, severity information. Its message said the excess was “state, CBA, double-time or voluntary pay”. That is not a missing signal. It is a confident statement of the wrong cause, on a row a reader has every reason to believe. A disclosure that lives only in a static row nobody has a reason to open is not a disclosure, and the file's own standard (an error row that is not an error teaches you to ignore error rows) cuts the same way in the other direction.
So the rule is built. The workbook now blocks that employee, reports no Box 12 figure, and shows the rate the premium implies as a hint for filling the cell in. Nothing is computed on that hint, in either half of the kit. Two live self-test cases hold it: T49a is DOL's scenario with the cell blank and must be withheld, T49b is the same week with $10.00 on file and must produce DOL's $25.00. The parity run proves E-505 fires on the first and on nothing else. A blocking rule with no sibling proving it stays quiet is a rule nobody can tell is too wide, and a rule that suppresses a figure for an employee who should have had one is a worse failure than the one it fixes.
I-703 is reworded in the same release, everywhere it appears. It now states what the figures show — the premium paid exceeds what section 7 required on the regular rate computed here — and names the inputs that could produce that, including a regular rate that came out too low. It no longer tells you the employer chose to overpay. It could not know that.
Every constant in params/ty2026.json carries a citation, and
params/SOURCES.md logs the documents behind those citations with the host each
came from and the date. It is a retrieval log, not a complete index: the Department of
Labor's Field Operations Handbook is cited in the constants file and has no row in it at all.
A list like that is worth very little on its own, so each URL in it has to
carry a capture row in params/source-evidence.tsv: the SHA-256 of the bytes the
server returned, how many bytes there were, the status, the UTC timestamp, and a literal span
from the document that had to be present in those bytes for the fetch to count.
tools/verify_sources.py fails the build if a cited URL has no such row. It needs
no network and runs in under a second, so it can sit in front of every release.
| Field | Value |
|---|---|
| key | 26 USC 225 |
| url | uscode.house.gov/view.xhtml?hl=false&edition=prelim&req=granuleid%3AUSC-prelim-title26-section225&f=treesort&num=0 |
| sha256 | 73e3dd4c6c51d88424669bbc4a7bb9c6469cba08d465fdbcd388ace25a3a37fe |
| bytes | 153,781 |
| http | 200 |
| retrieved_utc | 2026-09-07T17:55:02Z |
| probe | shall not exceed $12,500 ($25,000 in the case of a joint return) |
| probe_found | yes |
Because of that row, and the day it nearly did not exist.
26 USC 225 is the section this entire product rests on. It was originally fetched from the
URL form used for every one of its sibling sections, the one ending
&num=0&edition=prelim. On 7 September 2026 that form returned HTTP 200
for section 225 and served the site's edition-picker furniture with no statutory text in it
at all: 73 KB of page, and not one word of the law. Eight sibling sections fetched through
the identical pattern returned their full text. curl exited 0. The status was
200. The response was long. Every check that asks whether the fetch worked passed,
and the source line for the most important section in the kit was resting on a page that did
not contain it.
It was caught by reading the fetched bytes. The fix is in the manifest above: a status code
is not evidence, and a probe is. A row whose probe span is absent from the bytes is a failed
fetch whatever the server said. The f=treesort form of the URL does return the
section, that is the form the manifest records, and the span it must carry is 225(b)'s own
dollar limit.
One thing to be straight about, since a reader may go and check. Re-fetched while this page was being written, the old sibling-pattern URL does return section 225: three requests, 153,451 to 153,551 bytes each, the probe span present in all three. The empty response is not reproducible on demand. That is the case for the probe rather than against it. A gate that only catches failures you can summon back on request is a gate that catches nothing, and the next one of these will not be a page of the wrong kind. It will be the right kind of page carrying the wrong edition.
Re-run the online check and most of the 59 fetched rows come back byte-identical, hash and all. Some do not, and the count moves every time it is run: on 9 September 2026, when the log held 39 fetched rows, it was 27 identical and 12 changed; on 12 September, from the same captures, 24 and 15; and on 20 September, against the 59, 41 and 18. None of those rows has changed. uscode.house.gov and dol.gov build a page per request, so the byte count drifts by a few dozen and the hash goes with it, and the longer ago a row was captured the more likely it has drifted. The number below is one dated run, not a figure you should expect to reproduce. What holds on all 59, on every run, is the probe.
So a reader can re-fetch any of the 59 and confirm it still says what we quoted from it. A reader should not expect every hash to match, and the only column worth reading as a pass or a failure is probe gone, which is zero. We would rather print the drift than let a matching hash be assumed. It is a check on the documents. It is not a claim that any individual constant was read off a retained copy of that particular fetch, and it is not a claim about editions: a probe can tell you a document of the right kind was at that URL, and it cannot tell a revised fact sheet from the one we read. That limit is finding F7 below and it is still open.
Ohio's 2026 minimum wage is $11.00, and $5.50 for tipped employees, for businesses with
annual gross receipts over $405,000. Those figures drive sample SMP-03, an Ohio server, so
they steer a worked example a buyer reads and they owe the same evidence as any constant. The
build machine cannot fetch them. Its network policy refuses com.ohio.gov
outright, answering the connection with a 403 before any bytes exist to hash.
The row is written anyway, and it says on its face what it is. Its sha256 is a
dash. Its http field reads attested and so does
probe_found, and a note records who read the document, when, what it said, and
why no fetch was possible from here. Every run of the gate prints the attested rows in a
block of their own, by name, so the weaker grade cannot be counted in with the stronger one.
The difference matters and it is not a formality. A capture row is bytes somebody else can pull down and hash for themselves. An attested row is a person's word, with the reason attached. Two Department of Labor tables that this machine can reach carry the same Ohio figures and are captured in the normal way, which corroborates everything except the 1 January 2026 effective date. That date rests on the state's own release and on nothing else, and now you know it.
Before the edition was cut, the kit went through an adversarial review. The reviewer read the
specification and the primary sources, rebuilt every artifact from a bare container, and then
tried to break it. The engagement was report-only: nothing in engine/,
params/ or the build was changed by the review itself, and the six tests that
captured its findings were merged into the repository failing, on purpose, so that
no fix could be waved through without them going green on their own terms.
Its verdict, in its own words: the build holds; the law does not, in two places. Both were found by reading 29 CFR 778.5, the Department of Labor's Field Operations Handbook and FS-2026-13 Q18. Neither could have been found by comparing implementations, which is the argument of the second section of this page arriving with a bill attached.
The first: a tipped employee in any state whose minimum wage exceeds $7.25 was understated or refused a figure altogether. 778.5 says the FLSA regular rate cannot be lower than a higher applicable minimum, and the kit computed on $7.25. At a $10.00 state minimum that is a 27.5% understatement of code TT, and it reached a sample the kit ships: SMP-03 is an Ohio server citing 778.5 as its governing rule and then computing as though Ohio were a federal-minimum state. The second: comp time. FS-2026-13 Q18 states the qualified amount as the hours times the applicable rate divided by three, and the kit divided by the accrual rate, which is a 25% difference at a 2.0 accrual for a state or local government client with such an agreement.
The first is fixed. The second is half fixed, and the half that is not is the more useful thing to publish. Q18's own worked example fixes the accrual at one and one-half hours and names no other rate, and at 1.5 the FAQ's divisor and the kit's are the same arithmetic, so the FAQ is not authority for the case where they differ. The kit kept its reading. What it did not have, and now does, is assumption A13 recording the divergence in writing, with FS-2026-13's own reliance language, and I-905 printing the FAQ's figure beside the kit's on the exception log. A buyer following the IRS's published formula gets both numbers and can decide.
| # | Finding | Disposition |
|---|---|---|
| F1 | Tipped employee in a state above $7.25 is understated or blocked | Fixed, and one of the review's own tests changed its expectation |
| F2 | Engine and workbook disagree at the exact tolerance boundary | Fixed. At the tolerance, paid governs; T46a and T46b sit on it from both sides |
| F3 | C-14 infers the wrong thing in three shapes | Fixed. The shared misreading of spec 4.2, replaced by an arithmetic test |
| F4 | Comp time: the FAQ divides by three, the kit divides by the accrual | Half fixed, half not, and the reasons are recorded. Assumption A13; I-905 prints both figures |
| F5 | Workweek paid on two dates: workbook blocks, engine splits, page silent | Fixed. E-W02 narrowed to the year crossing; W-704 whenever the engine splits |
| F6 | Sales page claims wrong, inconsistent or unverifiable | Fixed. Worked examples stated rather than counted; the re-fetch claim measured |
| F7 | The evidence gate proves a document's kind, not its edition | Confirmed weakness; partly addressed. The underlying limit is still open |
| F8 | "The regular rate is never rounded" is the kit's rule, not 778.109's | Fixed 8 September 2026. A premium on the rate rounded to the cent is accepted as compliant on its own row (I-705 / C-48 / I-C48); assumption A14; the reported figure did not move. Section 3 of this page |
| F9 | The tolerance absorbs a real underpayment when overtime is small | Confirmed as a bounded design choice, unchanged. The bound is the tolerance itself: $0.05 per component at the shipped setting, and the engine permits up to $0.25 |
| F10 | Smaller items | C-22 is withdrawn 8 September 2026, its id retired, and state daily overtime is now stated as out of scope rather than half-handled; assumption A15. SMP-03's Ohio arithmetic is fixed under F1 |
Two of the review's six tests no longer assert what the review asserted, and that is the sentence in this section most worth reading skeptically, so here is what changed and why. Where no applicable minimum wage is on file, the review asked the engine to infer the governing rate from the premium the employer chose to pay. It does not, because 29 CFR 778.109 makes the regular rate remuneration divided by hours worked — a computed fact, with the governing minimum wage an input to that division and never an output of it — and FS-2026-13 Q16 settles what an over-payment means: an employer who pays double time on a $20.00 rate has still had only $100.00 required of it. The engine now withholds that week under E-505 and names the implied rate as a hint, instead of reporting a figure that rests on a fact the file does not carry. The other changed test is the comp-time divisor above. Both arguments are written into the test docstrings, so they are read by anyone who runs the suite.
One finding is open and printed above as open: F7, the limit of what a capture hash can prove about a document's edition. F9 is not a defect but a bounded design choice, printed as one. Publishing them costs us something. It is still the cheapest way to tell you what kind of document this is.
F8 and F10 were open when this page was first published, and were closed on 8 September 2026 by a second review pass that read the sections behind them in full. Both are worth reading as a pair, because they went opposite ways. F8 found the kit being stricter than the regulation and flagging lawful payrolls: fixed, by accepting the regulation's own arithmetic as a second lawful requirement, with the reported figure held fixed and asserted so. F10's C-22 found the kit asserting a state rule it could not source: it warned about daily overtime above eight hours in a week, and the two halves of the kit did not even test the same condition. Eight hours is the daily threshold in some of the four states the check was written for and not in others, and each of the four attaches conditions to its daily rule that a payroll register does not carry. Nothing was narrowed or re-derived from second-hand text: every Colorado and Nevada primary source is unreachable from the build container, so the check was removed, its id retired, and state daily overtime recorded as out of scope for this edition. A check that cannot be sourced is worse than no check.
The spot check is live and free, at tieoutpress.com/spot-check.html. One employee, one workweek, about two minutes, nothing to fill in first and no form anywhere on it. It is the third implementation described at the top of this page, so the 65 cases in the parity run are 65 cases of it agreeing with the engine you would be buying. Put FS-2026-13 Q16's facts into it and see whether $100.00 comes back.
If you build or configure payroll software. Everything the kit computes can be compared with from the free files, and an implementer is welcome to do that. Four of the five published examples are in the table under "Why agreement is not enough," each with its source in the first column. The fifth, 29 CFR 778.114(b)(1), is worked through under "One penny of disagreement." The twelve worked answers and their key are on the kit's page, downloadable with no email wall. The spot check takes one employee and one workweek at a time. Where your figure differs from ours, write to support@tieoutpress.com with FIGURE CHECK at the start of the subject line, the workweek's inputs with invented names and amounts, and both figures; those messages are read first. A difference is a finding about a reading of the rule, and it is answered by pointing at the source. This page records what the kit computes and how that was checked. It says nothing about what any vendor's software does: no vendor's output has been compared here, and nothing on this site tests or ranks a payroll product.
What the kit is, what it costs and what its license permits are set out on
the kit's own page. The TY2026
edition has been released, the workbook is at 1.0.2 under the tag
ty2026-v1.0.2, and the store is open: any of the three licenses can be bought
from the price table on that page. Version 1.0.2 changes no figure. It packs the license and
a README into every download and moves the paid download's constants file to
params/ty2026.json. It also rewrites the About sheet's sentence on the parity
run to the counts the parity run above reports, where it said all 90 cases were compared to
the cent. The workbook's Version sheet records each. This page exists so that you can
decide whether the method is any good before you buy.
This list sends two things: a figure in a released edition turned out to be wrong, and a new tax-year edition is out. Nothing else. A confirmation email comes first and nothing follows until you click the link in it. The link at the foot of any message ends it.
This form is the only request either page makes after it has loaded, and it makes it only when you press the button. It carries the address you typed and no other field: there is no second field on this form, hidden or otherwise, and no script on the page to add one. Pressing the button is a request to Kit, which hosts the list and receives it the way any site receives a request, and it leaves this site. Kit takes it from there, and your subscription is not active until you click the link in the email it sends. Nothing else here sits behind an address.
Current as of 4 October 2026.
Not a substitute for professional advice. The Qualified Overtime Kit is a calculation and documentation tool. It is not tax advice, not legal advice, not accounting advice and not payroll advice, and it is not a substitute for a qualified professional who has reviewed your client's particular facts.
Overtime, regular-rate and tip-credit rules vary by state and by the terms of an individual's employment, including collective bargaining agreements and written pay arrangements. You are responsible for confirming which rules apply to each client and for reviewing all output before you rely on it or file it.
Tie-Out Press is not affiliated with, endorsed by, or approved by the Internal Revenue Service, the Department of the Treasury, the Department of Labor or any other government agency. No agency has reviewed or approved this product.
No outcome is promised. Every figure on this page describes what the kit computes and how that was checked. None of it is a statement about how any authority will treat a figure the kit produces, and nothing here promises that a penalty, an audit or an assessment will be avoided.
The Qualified Overtime Spot Check is free without condition: no account, no card, no expiry, and nothing held back from it.
What this site records about you. There is no analytics script, no pixel
and no beacon on this page or on the spot check, and the spot check makes no network
request at all once it has loaded. The one request this page can make is the email form
above, and only if you fill it in and press the button. It carries the address you typed
and no other field, and pressing the button is a request to Kit, which receives it the way
any site receives a request. Requests to these pages are counted at Cloudflare's edge, on
the request that was already being served, and what is written down is the path, the host
of the referring site (never the referring address itself), the two-letter country the
edge already attaches, and a channel tag if the link you followed carried one.
Your IP address is not in that record, in
any form — not hashed, not shortened, not under another name — and neither is
your browser's user agent. The counter is
worker/index.js; tools/verify_edge_instrumentation.py
runs it and fails the build if a row ever carries an address.
Qualified Overtime Kit, TY2026 edition. Published by Tie-Out Press.
Workbook 1.0.2 and spot check 1.0.0, both built 30 September 2026 against
params/ty2026.json, generated 2026-09-06 and last amended 2026-09-20.
Every figure on this page came from a run, and each run is named where its figures appear:
build/build_workbook.py and build/verify_with_libreoffice.py for
the parity table and the cell counts, build/parity_calculator.py for the spot
check, tools/verify_worked_examples.py for the published examples, and
tools/verify_sources.py for the evidence manifest and its re-fetch tally. The
review is docs/13-adversarial-review-2026-09-07.md, reproduced there as it was
written. This page is itself run through tools/verify_sales_page.py, which
applies the prohibitions in build/pdf_common.py and checks that the
clear-and-conspicuous statement above is still present and intact. A page that fails either
does not ship.
And since 11 September 2026 that gate runs the arithmetic too. Every figure on either page that is attributed to the engine is bound in the gate to a case and a tolerance; the gate builds the case, runs the engine, and requires the page's number to be the engine's. Both directions fail: a figure the page stops carrying, and a figure nothing binds. It was written because the check that did not exist was the one that mattered. Prohibitions and required elements cannot catch a wrong number, and both of these pages carried one about 778.114(b)(1) for months with every gate green. The gate also perturbs each bound figure by a cent on every run and requires itself to reject the page, because a check that has never failed on a defect is not a check.
Publisher postal address:
Tie-Out Press, an imprint of Aeon Aurora LLC 377 Valley Rd, Unit 3131 Clifton, NJ 07013Publisher email, for refund requests with the order number, upgrade requests, and FIGURE CHECK reports: support@tieoutpress.com. Company page: https://www.linkedin.com/company/tie-out-press.
Built to the 2026 Form W-2 instructions.