DEV Community

Devanshu Biswas
Devanshu Biswas

Posted on

A Scheduler That Passes 24 of 24 of Its Own Checks Is Wrong About 39 of 72 Dates, and All 18 Wrong Obligations Are Silent

Agent Lab Vol 3 opens here - life-first, local, and yours - on a problem the first two volumes did not have. Vol 1 and Vol 2 shipped real fixtures: repositories, feeds, session logs. A person's renewals and letters cannot be published or borrowed, and no public corpus of household admin exists. So this fixture is invented: 24 obligations, 72 occurrences, 14 letters, a holiday calendar and a table of what each miss costs, written by hand.

The page says so in its first card, above every number, with what that costs as evidence and which way a real inbox moves each figure: extraction gets harder under duplicate notices, and the span check gets more valuable, because OCR slips are exactly what it catches. Every point estimate is a property of this fixture; the shapes transfer, because they are arithmetic rather than data.

A scheduler's self-check is not a weak correctness check. It is a different check.

business-day   every date is a business day, when the rule demands one
monotone       each term is after the last
interval       each gap is within 7 days of the nominal period
in-horizon     nothing lands outside the planning window
parses         everything round-trips as ISO
Enter fullscreen mode Exit fullscreen mode

That suite has zero false alarms on all four engines. Its problem is entirely recall, and the reason is one word in the third line: interval compares each term to the engine's own previous term, the only one available. A consistently wrong engine is consistently self-consistent.

engine dates right self-check wrong obligations silent
rules 72/72 24/24 0 0 of 0
calendar 48/72 19/24 8 3
naive 32/72 16/24 16 8
plausible (control) 33/72 24/24 18 18 of 18

plausible is naive plus a roll onto the next business day. That one change takes the self-check from 16/24 to 24/24 without making a single date less wrong. It passes every check an engine can run without the answer while being wrong about 39 of 72 dates - and the honest engine one row above it, 46% more accurate, gets flagged on five.

The span verifier splits the same way. It rejects 126 of 126 corruptions and 0 of 18 wrong-field choices, because every wrong value really is in the letter: the letter date, or last year's premium. A span says where a value came from, not what it means.

Repo: https://github.com/dev48v/life-admin-brain - PUBLIC, MIT, standard library only, 45 pytest, no key and no network. The page fetches nothing off itself: https://dev48.infy.uk/agentlab/vol3-01-life-admin-brain.html

Three nulls, and the one I was building towards

I set out to show that a correct recurrence engine buys a better outcome. It does not reproduce. naive is wrong about 40 of 72 dates and costs 0 harm; calendar, half again as accurate, is wrong about 24 and costs 1120. Date accuracy is uncorrelated with harm. The sign is what costs: naive drifts early and a longer lead inside a wide window is free, while calendar runs late and a late date is a miss.

Consequence-weighting the lead time buys nothing once the windows are respected: they already encode it, because expensive things take a long time and cannot be started late. And the two pipeline fixes are perfect substitutes: fixing extraction alone saves 8705, fixing the engine alone saves 8705.

"Remind me a week before" catches 15 of 24 tasks and leaves 70.2% of the harm.

11 of 15 projects now have a page: https://dev48.infy.uk/agentlab.php

Top comments (0)