Measured Behaviour
Published
Replacing a timing chain requires the front cover off, and the published time for the cover is already inside the published time for the chain. Pay both and the claim uses every published figure exactly once, accounts for every operation the technician performed, and is too large.
A claim total is a union, not a sum
We built twenty warranty claims against a published labour time guide of ten operations, an inclusion table saying which times are already inside which, a warranty reimbursement rate of 118.00 dollars an hour against a retail counter rate of 176.00, a forty per cent parts markup, and a one-hour cap on diagnostic time. Six of the twenty claims carry an overlap.
The correct run pays 122.50 hours: 14,455.00 of labour, 13,117.72 of parts, 27,572.72 in total. Twenty-seven operations were considered, twenty were paid and seven were absorbed into the operations that already include them.
Protection on its own changed nothing. All five profiles - the ES5 target, the modern target, both emit-gate configurations and the string-encoding profile - produced identical behaviour.
The six overlapping claims are the entire point of the fixture. If every claim listed only disjoint operations, the union and the sum would be the same number and this whole class would be invisible to the suite by construction. We ran exactly that batch as a control and every arm below is inert in it.
The failing arm produces the better-looking review line
Renaming the inclusion table leaves nothing included in anything, so every operation on every claim is paid separately.
Measured: hours paid went from 122.50 to 139.10, labour from 14,455.00 to 16,413.80, and the claim total from 27,572.72 to 29,531.52. The extra 16.60 hours are seven front covers, crank seals, intake manifolds and axle seals whose time was already inside the operations beside them on the same claims.
Every one of those operations is real. The technician did remove the front cover. It is published in the guide with a time of 3.10 hours. The claim uses each published figure exactly once and accounts for every operation performed. Nothing about it is internally inconsistent.
And the review line reads better than it does on the correct run. The programme's rule prints 27 of 27 operation(s) paid where the correct run prints 20 of 27. Twenty-seven of twenty-seven scans as a complete, fully reconciled claim; twenty of twenty-seven scans as though something was disallowed and might need explaining. A reviewer looking for anomalies stops on the true line and skims the false one.
The wider pattern was the safe one
Warranty work is reimbursed at an agreed rate that is lower than the retail counter rate, and the library's fallback when it cannot read the warranty rate is the retail one.
Renaming the warranty rate alone moved the rate from 118.00 to 176.00 an hour. Labour went from 14,455.00 to 21,560.00 and the claim total to 34,677.72 - 7,105.00 dollars of additional labour on twenty claims, in the dealer's favour and the manufacturer's disfavour. The hours did not move at all.
Renaming the retail rate alone changed nothing, exactly as predicted: the warranty rate is present and finite, so the fallback is never consulted.
Renaming both sent the rate to zero. Labour 0.00, claim total 13,117.72, parts only. Nothing was paid for any work at all, which is an outage the dealer reports the same morning. The narrow careful pattern overpaid quietly for as long as you let it; the broad sloppy one broke loudly and got fixed. That inversion has now appeared in seven separate areas we have measured.
Which side of the boundary the loss lands on
The published times, the inclusion table, the two rates and the diagnostic cap all sit on the policy object. The operation codes, the parts cost and the diagnostic hours sit on the claim records. Both are reachable by a member pattern and they fail differently.
Renaming the diagnostic cap removed the one-hour limit and paid the diagnostic time as submitted: 129.40 hours and 28,386.92 in total, with the trimmed counter falling from eight to zero. Renaming the published times paid no operation at all - 14.50 hours of pure diagnosis, twenty operations reported unpriced, and the review line reading 0 of 27 operation(s) paid.
Renaming the operation codes on the claims is the quiet one. Every claim still prices, at 14.50 hours and 14,828.72 in total, and the review line reads 0 of 0 operation(s) paid and passes. An empty list of obligations is indistinguishable from a set of obligations all met.
The numbers themselves fail closed as always: renaming the diagnostic hours or the parts cost refuses before pricing anything at all.
What a reconciliation can and cannot tell you
The check we modelled is the one a warranty programme really writes: no claim may be paid for more operations than it claimed, and no batch may exceed a ceiling. It passed in every arm above.
It cannot do otherwise. It tests for an answer larger than what was claimed, and a sum is never larger than the sum it is compared against. Switching it off entirely produced byte-identical money on the inclusion arm - the rule was contributing nothing to remove.
What would have caught it is an assertion about the operation rather than the population: the hours paid must equal the distinct span of work, and an operation absorbed by another must be named as absorbed. The correct run reports seven absorbed operations. A test pinning that seven fails on the inclusion arm immediately.
For teams whose claims cross an organisational boundary the same way this one does, the surrounding considerations are in Protecting Marketplace Add-in JavaScript.
What to do about it
None of this is an argument against protecting the code. The engine's default profiles moved nothing in this file. Every difference came from a member-renaming pattern reaching a policy object or a claim record, and that pattern is something you choose - the mechanics are in Protect Members.
Assert the operation, not the population. Pin the absorbed count and the hours paid, not just the operation count and the total. Seven absorbed and 122.50 hours fails on the inclusion arm; twenty-seven operations considered passes on it.
Put an overlap in the fixture. This is the second time this series has had to say it, and it is the single decision that makes the difference between a suite that can see a union engine and one that certifies it without ever running it.
And pin the rate that was actually applied, including which rate it was. The run prints rate=118.00/hr(warranty). The overpaying arm prints 176.00/hr(retail) in the same field, so the information is there - it simply is not on any line anybody reconciles.
Frequently asked questions
Did obfuscation change what a claim paid on its own?
No. On all five profiles we tried - the ES5 target, the modern target, both emit-gate configurations and the string-encoding profile - the protected bundle produced identical behaviour to the original. Every difference came from member renaming reaching a configuration object or a claim record.
How much did losing the inclusion table cost?
16.60 extra hours across twenty claims: hours paid went from 122.50 to 139.10, labour from 14,455.00 to 16,413.80, and the claim total from 27,572.72 to 29,531.52. Seven operations whose time was already inside another operation were paid a second time.
Why is the failing claim harder to spot than the correct one?
Because the review line reads better. The failing arm reports 27 of 27 operations paid; the correct run reports 20 of 27. A complete-looking ratio attracts no attention, while a partial-looking one invites a question that has a good answer.
What happened when the warranty labour rate was renamed?
It fell back to the retail counter rate of 176.00 an hour. Labour went from 14,455.00 to 21,560.00 and the total to 34,677.72, with the hours unchanged. Renaming both rates sent the rate to zero and paid no labour at all, which is a loud outage.
Was the broader rename worse?
No, it was safer. Losing the warranty rate alone overpaid 7,105.00 dollars quietly; losing both rates paid nothing and would be reported by the dealer the same morning. This inversion has now appeared in seven separate areas in this series.
Would our claim check have caught it?
No. It tests that no claim is paid for more operations than it claimed, and a sum is never larger than the sum it is compared against. It passed in every arm, and switching it off produced byte-identical money on the inclusion arm.
What should we pin in a test?
The count of absorbed operations - seven in the correct run - and the hours paid, together with which rate was applied. And put at least one overlapping claim in the fixture: with only disjoint operations the union and the sum are the same number and the whole class is invisible. Scoping the pattern is covered in Protect Members.
Related reading