AI for Spreadsheets & Reporting — Atlas

AI for Spreadsheets & Reporting: The Monday Report Map
THE MONDAY REPORTRaw export in. A checked, signed, one-page report out. Every period.AI for Spreadsheets & Reporting · a one-day class in the AI at Work series · the water works↖ AI AT WORK: THE OTHER FIVE MACHINESFrom Meetings to Action ↗Build Your AI Research Department ↗Build an AI Outreach & Follow-Up System ↗Turn Documents into Working Systems ↗Build Your Personal Life System ↗the same file, through every station →1 INTAKEthe metercount with code, match the sourcethe practice pack:sep.csv: 9,337 rows = the portal's 9,337 ✓2 FILTRATIONthe recipenumbered rules, every change loggedthe practice pack:166 touched, 156 changed, 0 dropped3 TESTING LABthe spikeplanted errors, three explanationsthe practice pack:second carts 149 → 210 → 579: error, event, or definition?4 THE GAUGEcharts + forecastone question per chart, a bandthe practice pack:Nov: 8,802 naive, band ≈7,300–10,6005 THE REPORTrun twice + memofresh chat, one page, signedthe practice pack:October run: STOP on 3 new values → recipe v26 SECOND PLANTmake anothernew card, same seven slotsthe practice pack:Chicago permits, weekly: a new spec cardthe second run breaks the recipe → v2: that's the pointEVERY MACHINE IS THE SAME SEVEN SLOTS (the spec card)INTAKEblock B1STRUCTUREblock B2CHECKblock B1·3GATEblock B5ACTblock B4·5LEDGERblock B2·3RHYTHMblock B6 HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary HOW TO READ THE COLOURSyour raw materialunverified model outputa checka human decisionplumbing / connectorsverified, donetrust boundary BLOCK 1 · THE INTAKEMachine roomThe model never sees your rows, so it never counts in its head. It writes code, the code counts, and the counthas to match the source exactly.the river: this period's raw exportintakepumphouse9,337the meterthe water works: the intake 1It never sees your rowsText becomes tokens. A count from tokensis a guess, so make it compute.Type "strawberry" into a tokenizer and the model sees threechunks: st, raw, berry. Zero R's. A pasted spreadsheetarrives the same way, as a few thousand chunks, and "how manyrows say Trash/Recycling?" gets answered by what answersusually look like. Sometimes that's right, and you can't tellwhen. So the first rule in every machine is: compute everynumber with code, and show the line that did it. Newer modelsoften get strawberry itself right, because they've seen thatquestion a lot. The 60-row test on your own file is the onethat shows it.1 of 3YOU ARE HERE · Monday Report › Intake › Tokens strawberryst302raw1618berry19772zero R's in any token2026-1314801, Trash/Recycling, Return Recycling Cart, 2026-09-01…"about 30"a count read from tokens = a guesslen(rows) → exactcode counts; you can check it ▸ Worked example: the 60-row test on sep.csvzoom inSTEP 1 · plain chat, no Project, no toolsPaste the header + first 60 data rows of sep.csv after: "Don't use code or any tools. Justread these rows and answer: how many have request_type Trash/Recycling? One number."STEP 2 · same chat"Now load exactly those rows with code and count them. Show the line of code. Did yourfirst answer match?"WHAT TO NOTICERight or wrong, the first answer came with the same confidence. You had no way to tellwhich until code ran.SO THE INSTRUCTIONS SAY1. Compute every number with code. Never estimate, round in your head or count by reading.3. For every number you report, show the line of code that produced it. 2Read the plan, not the codeThe tool writes its plan in Englishfirst. You check the plan, then say go.You don't need to read Python to check an analysis. You needthe plan: numbered English sentences the tool writes beforeit runs anything. "Count data rows excluding the header, witha parser that respects quoted fields" is right. "Count thelines in the file" is wrong the moment an address contains aline break, and you can see that from the sentence. Until yousay go, the plan is unverified model output. That's why it'sred here, and why the gate before the code is amber: it'syour decision, not the tool's.2 of 3YOU ARE HERE · Monday Report › Intake › Plan you askthe planEnglish, unverified"go"your gatetrust boundary: nothing runs until you've read itcode runsa number+ the line that made itcheckvs the source✓ done ▸ Plans that pass, plans that don'tzoom inPASSES (illustrative wording, real counts)1. Read sep.csv with a CSV parser that respects quoted fields.2. Count data rows, excluding the header. → 9,3373. Count rows where request_type equals "Trash/Recycling" exactly. → 5,140STOP AND ASK"Count the lines in the file." Lines aren't rows when a field holds a line break."Tidy the column names first." Next month's file won't line up."Drop incomplete rows." Which ones, how many, and are they real requests?"Approximately 9,300 rows." A machine that can count doesn't say approximately. 3The intake meterTwo independent counts, one comparison.Exact, or it isn't checked.The check for Block 1 is two numbers: the row count and onetotal. Each has to match a figure the machine didn't make:the source system's own record count, a footer row, lastperiod's report, or your own filter in the spreadsheet. TheNew Orleans portal will count for you: its API says September2026 has 9,337 requests and 5,140 of them areTrash/Recycling. The machine's code says the same. Two pipesthat never touched each other agree, and that's what checkedmeans. "Close" isn't checked.3 of 3YOU ARE HERE · Monday Report › Intake › Meter portal's own countdata.nola.gov count APImachine's code countlen(rows) in the Project=?rows 9,337 = 9,337trash 5,140 = 5,140 ▸ When the meter disagrees: what the gap usually iszoom inOFF BY 1the header counted as a row, or one quoted field with a line break in itEXACTLY 1,000 ROWSthe NOLA portal's default page size: you forgot $limit=50000A ROUND NUMBER SHORTan export cap in your own system (5,000 / 10,000 / 50,000)TOTAL MATCHES, ROWS DON'Tdon't pick the one you like; both must matchMODEL FIT, FOR THE SPEC CARDruns code on the file (non-negotiable) · a reasoning model writes better plans · can youupload this data at all? · lives where the report lives (Claude for Excel, GA May 2026,paid plans; as of Nov 2026, re-check) BENCH · TRY IT ON YOUR DATAThe machine says 9,336 rows

The machine says 9,336 rows

Your Project read sep.csv and reports 9,336 data rows. The portal's own count for September is 9,337. What do you do first?

Pick one. Every answer explains itself, and the wrong ones teach the most.
▶ Now yours: what's your source's own count, and where on the screen does it live? Write it in your Check slot.
YOU ARE HERE · Monday Report › Intake › Bench BLOCK 2 · THE RECIPEFiltrationNumbered rules, the same every period, and a log that accounts for every changed row. Flag odd rows, never dropthem.R1 trimR2 spellingsR3–R7 flagsR9 STOPrawcleanthe water works: filtration 1Numbered stages"Clean this data" makes a new file everytime. A recipe makes the same one.Ask an AI to clean a file on Monday and it drops blank rows;ask next month and it fills them with "Unknown". Both aredefensible, and together they make your two monthsincomparable. A recipe is numbered rules written once andstored in the Project's instructions: trim spaces, mapspellings with a readable table, mark blanks, flag odd rows.The last rule is STOP: if a category column has a value therecipe has never seen, the machine lists it and asks. Get therecipe proposed first, with how many rows each rule WOULDtouch, and strike anything that drops rows or guesses.1 of 3YOU ARE HERE · Monday Report › Filtration › Recipe R1 trim spaces10R2 status spellings → one80R3 blank status → (blank)63R4 blank district → (no district)13R5–R7 flag, keep the row536 · 213 · 631R9 STOP on an unseen value0 in Sep ▸ CLEANING RECIPE v1 (practice pack, excerpt)zoom inR1Trim leading/trailing spaces in every text column. ("Sanitation Dept. " → "SanitationDept.")R2 status mapping tableNot Enough Information- Resubmittal Required → Not Enough Information - ResubmittalRequiredCanceled By Citizen → Cancelled by Requester · Question Answered. → Question AnsweredR3–R4Blank status → (blank). Blank council district → (no district). Keep every row.R5–R7Add flags: close_before_create · closed_no_date · is_duplicate. Change no value.R8Record download time + the source's own row count.R9 STOPAny request_type or status not in the known list → list it and ask. Never map to "Other". 2In = out + what was removedRows in = rows out + rows dropped. Everychanged row is in the log.A plant weighs what each filter takes out, and if thearithmetic doesn't close, something happened that nobodywrote down. Same here, twice. Rows: 9,337 in, 9,337 out, 0dropped. Changes: rules R1 to R4 touched 10 + 80 + 63 + 13 =166 rows, but comparing raw and clean cell by cell finds 156distinct rows changed. Ten rows went missing from thearithmetic. They weren't lost: ten rows had a misspelledstatus AND a blank district, so two rules touched them. Thelog has to say so, or the check fails.2 of 3YOU ARE HERE · Monday Report › Filtration › Balance 9,337rows in=9,337rows out+0droppedR110 rowsR280 rowsR363 rowsR413 rows10 rows in both166 touched− 10 twice= 156 ✓raw vs clean, cell by cell, with code: 156 distinct rows changed ▸ The same check on October (second run)zoom inSEPTEMBERR1 10 · R2 80 · R3 63 · R4 13 → 166 touched · 156 distinct · 10 overlap (R2 + R4)OCTOBER, SAME RECIPER1 3 · R2 68 · R3 93 · R4 11 → 175 touched · 171 distinct · 4 touched more than onceRULES ROWS: IN = OUT + DROPPEDSep 9,337 = 9,337 + 0 · Oct 8,802 = 8,802 + 0WHEN DISTINCT > TOUCHEDSomething changed that no rule declared, like dates reformatted on save or ZIP codeslosing leading zeros. Ask for five of those rows.WHEN DISTINCT < TOUCHEDOverlaps the log didn't name, or a rule that "touched" rows without changing them. 3Flag, don't dropAn odd row is still a real request. Flagit, keep it, let the report decide.The commonest cleaning step an AI proposes is "remove rowswith missing values". On the practice pack that's 63 rowswith a blank status, and 57 of them are traffic-signalrequests. Drop them and the report says traffic signals gotquieter. So the recipe never drops: it adds a flag column,and the report states what it excludes and why. Rows closedbefore they were created (536) stay in the closed count andout of time-to-close. Duplicate requests (631) stay involume, flagged, so you can report requests and distinctproblems separately.3 of 3YOU ARE HERE · Monday Report › Filtration › Flags 63 rows with a blank status (57 are Traffic Signals)DROPremoved, unloggedFLAGstatus = (blank), row keptreport: "traffic-signalrequests fell"report: "63 requests had nostatus; shown separately" ▸ The practice pack's flags (September)zoom inclose_before_create 536 rowscounted as closed; left out of time-to-close until Block 3 explains themclosed_no_date 213 rowsrequest_status = Closed but case_close_date is blankis_duplicate 631 rowsstatus = Duplicate Request: in volume, out of "distinct problems"(blank) status 63 rows57 Traffic Signals · kept(no district) 13 rowsaddresses in a different format: probably a geocoding miss (unverified)THE REPORT, NOT THE RECIPE, DECIDESand it says so in a line: "Time to close excludes 536 rows whose close time precedes theiropen time." BENCH · TRY IT ON YOUR DATADoes your log close?

Does your log close?

Put in your own run's numbers. The bench checks both balances and tells you what a gap usually means.

Type your own numbers, or load the practice pack, then check.
▶ Now yours: run Prompt Card 7 on your file, then type its numbers in here.
YOU ARE HERE · Monday Report › Filtration › Bench BLOCK 3 · THE ANOMALIESTesting labA check that has never caught a planted error has never been tested. And a strange number gets threeexplanations and evidence before anyone smooths it.samplethe spike:a known erroryou put theredata error?real event?definition?the water works: the testing lab 1Spike the sampleYour partner plants one error in a copy.Does your check sheet find it?The check sheet is a list of tests every run must pass, eacha number with PASS or FAIL: row count vs the source, uniqueids, every date inside the period, every category on theknown list, blanks vs last period, daily volume vs a typicalday. To test the tests, your partner makes a copy of yourfile with ONE planted error, in a separate chat your Projectcan't see, and checks the copy still has the same columns anddate format (or the machine catches the wrong thing). You runthe check sheet blind. Then you ask what they planted.1 of 3YOU ARE HERE · Monday Report › Lab › Spike rowsvs sourceidsuniquedatesin periodknownvaluesdailyvolumeA · 25 duplicate rows✓✓···B · 40 rows moved to Oct··✓··C · 150 fake dumping rows✓···✓D · 60 lowercase 'pending'···✓· ▸ Which test catches which plant (and why C is hard)zoom inA · 25 exact duplicatesunique-id test FAILs (25 repeats) · rows 9,362 vs the source's 9,337B · 40 dates moved into Octoberperiod test FAILs (40 rows outside Sept) · row count still 9,337, so the meter alonemisses itC · 150 invented "Illegal Dumping" rows on one Tuesdayrows 9,487 vs 9,337 · that Tuesday is far above a typical weekday (Sept weekdays averaged318–440). It LOOKS like a real event. A machine that explains it has invented a cause.D · 60 lowercase "pending"known-values test FAILs: "pending" isn't on the listCHECKS COMPARE AGAINST THE SOURCE, THE LIST, OR LAST PERIODnever against this file's own average: a planted spike becomes part of "typical". 2Three explanationsData error, real event, or a change inwhat's counted. Find evidence that tellsthem apart.Faced with a strange number, a model's default is a fluentstory. Make it do the slower thing: list three explanations,name the evidence in this file that would support or rule outeach one, compute that evidence with code, and only then saywhich survive. A data error leaves fingerprints: duplicateids, one address, a clock pattern. A real event spreadsacross places and lines up with a date. A definition changeshows up as a category appearing, vanishing, or a neighbourdropping by the same amount. If more than one survives, itgoes to the owner as a question.2 of 3YOU ARE HERE · Monday Report › Lab › Three 536 rows closebefore they were createddata errorreal eventdefinitionall < 5 h early; close+5 h = modifiedsurvivesreal fast closes endAFTER they openruled outsame in Aug, Sep, Oct:no change dateruled out ▸ Worked example: closed before created (real)zoom inWHAT WE SEE536 Sept rows (557 Aug, 531 Oct) have case_close_date < date_created.EVIDENCE, COMPUTEDevery one is less than 5 hours early · on 6,573 of the 6,869 Sept rows with a close date,date_modified is almost exactly 5 hours after case_close_date · 5 h = the gap betweenCentral Daylight Time and UTCVERDICTa timezone mismatch between two fields. Explained. Flag the rows, keep them closed, leavethem out of time-to-close, and say so in the memo's caveat.STILL WORTH ONE EMAILto the publisher ([email protected] is listed on the dataset). 3Investigate, then askSecond-cart requests nearly quadrupled.The data says when, not why.Order Second Trash Cart: 149 in August, 210 in September, 579in October. Data error? The October rows come from 567different addresses in all five council districts, and only14 are marked duplicates. Definition change? Ordinary cartorders didn't fall to compensate. Real event? It's a step,not a blip: about 40 a week through September, 136 in theweek of Sept 28, 75 on October 1 alone. The city's trash pagesays a second cart is free through 311, and a fee change wasreported for Oct 1. Timing isn't cause. It goes to the owneras a question. If it goes out unexplained, ask who getsblamed for it.3 of 3YOU ARE HERE · Monday Report › Lab › Second carts Order Second Trash Cart, by month created, 202693Jan70Feb227Mar134Apr117May134Jun131Jul149Aug210Sep579Octsource: data.nola.gov 2jgv-pqrq, counted 2026-11-10 ▸ The evidence, and the question to the ownerzoom inDATA ERROR? ruled out579 rows · 567 distinct addresses · max 3 at one address · 14 marked Duplicate RequestDEFINITION CHANGE? unlikelyOrder Trash Cart: 261 (Sep) → 315 (Oct). No category split.REAL EVENT? survives~40/week in Sept → 136 the week of Sept 28 → 75 on Oct 1 alone · all 5 districtsCONTEXT, NOT CAUSEnola.gov/trash: a free second cart via 311 · a fee change reported for Oct 1, 2026DRAFT TO SANITATION (you send it, not the machine)"Second-cart requests went from about 40 a week to 136 the week of Sept 28, across allfive districts, not duplicates. Did something change on Oct 1 that explains it? We'd liketo plan November deliveries." BENCH · TRY IT ON YOUR DATAWhich evidence tells them apart?

Which evidence tells them apart?

Second-cart requests: 149 (Aug) → 210 (Sep) → 579 (Oct). Which single piece of evidence best separates "data error" from "real event"?

Pick one. Every answer explains itself, and the wrong ones teach the most.
▶ Now yours: take your strangest number this period. Write one piece of evidence that would rule out each explanation.
YOU ARE HERE · Monday Report › Lab › Bench BLOCK 4 · CHARTS + FORECASTThe gaugeOne chart per question, its question as its title. A forecast is checked against "same as last month" on monthsit hasn't seen, and it's a band, not a line.the bandtoday's levelreservoirthe distribution mapthe water works: the reservoir gauge 1One chart, one questionWrite the reader's question first. Thechart's title is its answer.Ask for "some charts" and you get a dashboard: eight panels,a pie, nobody sure what it shows. Write the question thereader actually asks ("Did large-item pickups fall inOctober?"), then make the one chart that answers it, titledwith the answer and its number. Same chart, same place, everyperiod, because people read a recurring report against lastmonth's. And show what's unfinished: the newest period isincomplete in some way, so label it. If a question can't beanswered honestly from this file, say so instead of drawingit. Data Activism's Infographic Design handout goes deeper.1 of 3YOU ARE HERE · Monday Report › Gauge › One chart "some charts"Large-item pickups fell 13% in October2,309Sep2,018Octrequest_reason = Request a Large Item Pick Up ▸ Three questions, three answers (practice pack)zoom inDid large-item pickups fall in October?Two bars: 2,309 → 2,018. Title: "Large-item pickups fell 13% in October."When did second-cart requests jump?Weekly line Aug–Oct, the week of Sept 28 marked (~40/week → 136).Are we closing requests faster?NO CHART YET. Median time to close: 4.72 days (Sep) vs 3.51 (Oct), but 32.1% of October isstill open against 26.4% of September. The slow cases haven't closed, so they're not inthe median. The honest chart compares months at the same age ("closed within 14 days ofopening").RULEThe newest period always looks fastest. Ask whether it's finished before you chart it. 2Same as last monthThe naive forecast is embarrassingly hardto beat. Test against it on months ithadn't seen.The dumbest forecast for next month is "same as this month".On New Orleans 311, from January 2025 to October 2026, itmissed by 803 requests a month on average. "Same month lastyear" sounds smarter and missed by 952, which is worse. Aseasonal ratio (last year's same month, scaled by how thisyear compares) missed by 633 over February 2025 to October2026, against naive's 803 over the same months. So it'sbetter, a little, on average. Any method you show has toclear this bar on months it wasn't fitted to, and if itdoesn't, you report naive. Everybody can check naive.2 of 3YOU ARE HERE · Monday Report › Gauge › Naive 6k8k10kJan 24Jan 25Jan 26Oct 26actualnaive = last monthavg miss: naive 803 · same-month-last-year 952 · seasonal ratio 633 ▸ Held back: August, September, October 2026zoom inMONTH ACTUAL NAIVE miss SEASONAL RATIO missAug 2026 8,967 9,860 893 9,176 209Sep 2026 9,337 8,967 370 8,060 1,277Oct 2026 8,802 9,337 535 8,679 123AVERAGE MISSnaive 599 · seasonal ratio 536WHAT YOU WRITE UNDER THE CHART"The seasonal method beat 'same as last month' in two of the last three months and missedby 1,277 in the third. Over 21 months it's a little better on average (633 vs 803)."THREE HELD-BACK MONTHS IS THIN. SAY SO. 3A band, not a lineNext month could be like any month you'veseen. The range comes from how much ithas moved before.Nobody knows next month to the unit, so a forecast that says8,947 is lying about what it knows. The simple, honest range:take every month-to-month change in your history and seewhere most of them fell. For New Orleans, 26 of the last 33changes fell between −16.8% and +20.0%. Applied to October's8,802, that's about 7,300 to 10,600 for November. Theseasonal ratio says 7,274, because November fell in bothearlier years. That's the whole forecast, and on December 1it's right or wrong in public. A forecast can become atarget, too. If this band becomes 'the number to stay under',ask who absorbs a bad month.3 of 3YOU ARE HERE · Monday Report › Gauge › Band 6,0007,0008,0009,00010,00011,000naive 8,802 (same as October)seasonal ratio 7,274≈10,600 (+20.0%)≈7,300 (−16.8%)band: 26 of the last 33 monthly changesNovember 2026 ▸ The November forecast, written properlyzoom inTHE FORECAST"Naive: 8,802 (same as October). 26 of the last 33 month-to-month changes fell between−16.8% and +20.0%, so the range is about 7,300 to 10,600. The seasonal ratio says 7,274,because November fell in both earlier years (−23.4% in 2024, −17.4% in 2025). We'll knowon December 1."SO FAR (portal, 2026-11-10)2,517 November requests, a third of the month in. Too early to say.WHAT IT DOESN'T SAYNo single number to the unit. No model nobody can explain. No trend from three points. BENCH · TRY IT ON YOUR DATADoes your forecast beat "same as last month"?

Does your forecast beat "same as last month"?

Paste your history (oldest first) and your method's forecasts for the last 3 periods. The bench holds those 3 back and compares.

Type your own numbers, or load the practice pack, then check.
▶ Now yours: paste your own report's last 12+ periods. If your method doesn't win, your forecast is naive.
YOU ARE HERE · Monday Report › Gauge › Bench BLOCK 5 · RUN IT TWICE + MEMOThe reportA machine that worked once is a demo. Next period's file, a fresh chat, nothing explained, and a one-page memo astranger can act on after 30 seconds.councilone pagesigned bya personthe water works: the report to council 1Run it twiceFresh chat, same Project, next period'sfile. If you have to explain anything, itbelongs in the instructions.October's file, 8,802 rows, into a new chat with one line:run the machine. The row count matches the source. Then STOPfires: October has a request type September never had (Taxand Revenue, 4 rows), a status called Reopen (1), and aspelling of "Not Enough Information-Resubmittal Required"with no space before the dash (1). A recipe without a STOPrule lumps them into Other and the report is quietly wrong.With one, you answer three questions, write CLEANING RECIPEv2 with a dated change-log line, and re-run. Reconcile rowcounts by creation date, never status counts: statuses keepchanging after the month ends.1 of 3YOU ARE HERE · Monday Report › Council › Twice sep.csv9,337 rowsoct.csv8,802 rowsrecipe v1same instructionsSTOP3 values never seenyou answer→ recipe v2, datedre-runfrom the startrows: Sep 9,337 = source ✓ Oct 8,802 = source ✓ dropped: 0 ▸ CLEANING RECIPE v1 → v2 (the diff)zoom inR2 mapping table+ Not Enough Information-Resubmittal Required → Not Enough Information - ResubmittalRequiredknown request_type values+ Tax and Revenueknown status values+ ReopenCHANGE LOG2026-11-10 · v2 · October export introduced 3 values unseen in September (1 + 4 + 1 rows).Added to the lists; no rule changed. Asked by STOP, answered by <you>.WHAT WOULD CHANGE ON A RE-DOWNLOADPending / Resolved counts, time to close, date_modified. Not: rows by date_created. 2One page, five linesFOR · DECISION · NUMBER · CAVEAT · ASK. Apartner reads it for 30 seconds and saysthe decision.The memo is the only part most people read. Five lines, inthis order: who it's for, by role and name; the one decisionthey need to make; the one number that bears on it, with itscomparison; the one thing that would change your mind aboutthat number; what you need from them, and by when. Charts,forecast and anomaly log come after, for anyone who checks.Before you sign, check three numbers outside the machine: aspreadsheet filter, the source's count, the portal's countURL. Then the test: your partner gets 30 seconds, hands itback, and says the decision out loud.2 of 3YOU ARE HERE · Monday Report › Council › Memo FORDECISIONNUMBERCAVEATASKSIGNED:30 sthen they saythe decision ▸ The practice-pack memo (reader is a stand-in role)zoom inFORCart delivery scheduling, Department of Sanitation (a role invented for the exercise)DECISIONPlan November cart deliveries for October's level of second-cart requests, or thesummer's?NUMBER579 in October vs 149 in August and 210 in September; from the week of Sept 28 (136 thatweek vs ~40); 567 different addresses, all five districts.CAVEATWe know when it rose, not why. 443 of the 579 are still "Assigned to Contractor".ASKCan you confirm whether the Oct 1 change explains it, by Friday?HAND-CHECKED579 (CSV filter) · 567 addresses (pivot table) · 149 (portal count URL). All hold. 3Whose work does it hide?Every number makes some work visible andsome invisible. Ask before you sign.Count "requests closed" and you make the closers visible. Youalso hide 631 September requests that somebody read, matchedto an existing case and closed as Duplicate Request: work,done, invisible. And 311 counts who called, not where theproblems are. District E logged the most requests in August,September and October (2,220 in September), and that can'ttell you whether District E has more broken things or morepeople who call. If the headline becomes "District E is theproblem", someone gets blamed for a phone habit. One line inthe memo usually fixes it. The memo prompt asks for thatline.3 of 3YOU ARE HERE · Monday Report › Council › Invisible September 2026: 9,337 requestscounted as "requests"631 duplicates: read, matched, closed ↑requests by council district, Sept: calls, not problems1,840A1,713B1,735C1,816D2,220E ▸ The power line, and three numbers checked by handzoom inTHE LAST LINE OF THE MEMO PROMPT"Then add one line: whose work does this report's headline number leave out?"AN ANSWER THAT FIXES IT"Volume includes 631 requests staff identified as duplicates and closed; the headlinecounts requests, not distinct problems."AN ANSWER THAT NEEDS A SECOND LINE"District E has the most requests." → add: "311 counts calls, not conditions."BEFORE YOU SIGN: THREE NUMBERS, OUTSIDE THE MACHINEthe headline · one from a chart · the one you'd be most embarrassed to get wrong BENCH · TRY IT ON YOUR DATAWhich first line survives 30 seconds?

Which first line survives 30 seconds?

Same memo, four opening lines. Your reader gets 30 seconds. Which one lets them say the decision?

Pick one. Every answer explains itself, and the wrong ones teach the most.
▶ Now yours: read your memo's first line to your partner, then ask what you want them to decide.
YOU ARE HERE · Monday Report › Council › Bench BLOCK 6 · MAKE ANOTHER ONESecond plantYou didn't learn the Monday Report. You learned seven slots. The second machine is a new spec card, built solo,and the rhythm is the slot that dies first.infilterlabmemo311, monthlyinfilterlabmemopermits, weekly=the water works: a second plant 1Seven slots, new riverChange the file shape, the reader, or thecadence. The slots stay the same.Intake, structure, check, gate, act, ledger, rhythm. A goodsecond machine differs from the first in a way that matters:a different file shape (a sign-up sheet, a bank export), adifferent reader (the board, volunteers), or a differentcadence (weekly, not monthly). The demo here is New Orleans311 monthly next to Chicago building permits weekly, from thecity's open data portal (3,179 permits issued in September2026). It's an outline for the demo, not a run we've done.Build yours from the Prompt Cards alone, in a new Project,with no help.1 of 3YOU ARE HERE · Monday Report › Second plant › Slots Monday Reportsecond machineIntake311 export, monthlypermits issued last weekStructure19 fixed columns + flagsid, type, date, area, cost, feeCheckrows = portal countrows + total fees = portalGateI sign the memothe coordinator approvesActthe monthly report docthe newsletter's sheetLedgerchange + anomaly logschange + anomaly logsRhythm1st of month · meMonday 9am · me ▸ Second machines with the right shapezoom inDIFFERENT FILE SHAPEvolunteer hours from a sign-up sheet · a bank export · inventory against reorder pointsDIFFERENT READERthe board instead of your manager · volunteers instead of financeDIFFERENT CADENCEweekly ticket volumes by queue · monthly grant spend against budgetNOT DIFFERENT ENOUGHthe same export for the same reader, renamed. It proves nothing new.THE PERMITS DEMO (outline, not a run)data.cityofchicago.org dataset ydr8-5enu · filter issue_date to last week · check totalfees against the portal's sum. Expect odd reported costs ($0 or $1?). That's a guess totest in the profile step, not a finding. 2Rhythm is the slot that diesBe honest about what can run itself.Usually it's a reminder plus you.Machines die in week three because nobody wrote down whatstarts them. As of Nov 2026, ChatGPT has scheduled tasks andClaude has scheduled tasks in Cowork on paid plans. But ascheduled task can't log in to the system your export livesin, and reports conflict on whether ChatGPT's tasks can reada Project's files. So the honest rhythm for most people is areminder that fires on Monday at 9, and you: download,upload, say run it, read the check sheet, sign. Ninetyseconds, and it's also your gate. Write the next run's datein the Rhythm slot.2 of 3YOU ARE HERE · Monday Report › Second plant › Rhythm 9:00 reminderscheduled taskyou downloadfrom the systemupload + "run"into the Projectcheck sheetPASS / FAILyou signthe gate✓ sentwhere it livesa task can't log into your system ▸ Setting it, as of Nov 2026 (re-check)zoom inCHATGPTin the first Project: "Create a scheduled task: every Monday at 9am, remind me to download<the export> from <the system> and upload it here, then list the check sheet's tests."CLAUDECowork → Scheduled → New task, same prompt (paid plans). Or a recurring calendar eventwith the Project's link in it.THE RHYTHM SLOT, FILLEDRhythm: 1st of the month, 9am · reminder → me · next run 2026-12-01NOT FILLEDRhythm: "automatically". Ask what fetches the export. If the answer is you, write you. 3One link, five boxesSubmission is one shared link to themachine. The facilitator ticks five boxesagainst it.Share the machine itself: the custom GPT link, or the sharedClaude Project, plus the sheet or doc it writes to. Thefacilitator looks for five things: the spec card at the topof the instructions; two real runs with row countsreconciled; one failure the check caught (the planted error,the STOP on the second run, or a real one); the human gatenamed, by name; and a second machine for a different case.Five boxes, one URL. If your data can't leave work, share apractice-pack version and screenshot your own run with thenumbers blurred.3 of 3YOU ARE HERE · Monday Report › Second plant › Portfolio one link✓spec card in the instructions✓two real runs, reconciled✓one failure the check caught✓the human gate, by name✓a second machine ▸ What counts for each boxzoom inSPEC CARDevery slot filled; Check names a number; Gate names a personTWO REAL RUNStwo periods through the same recipe; row counts reconciled to the sourceONE FAILURE CAUGHTplanted error found by a named test · the STOP on run two · an off-by-one at the meterHUMAN GATE"Dana Ruiz signs" counts. "Someone reviews it" doesn't. (Dana is an example name.)SECOND MACHINEits own Project and spec card; one real run; different shape, reader or cadenceNO QUIZ, NO REFLECTION ESSAYThe machine working is the assessment. BENCH · TRY IT ON YOUR DATAWhich slot fails in week three?

Which slot fails in week three?

Your partner's second machine. Intake: the volunteer sign-up sheet, weekly. Structure: name, shift date, site, hours. Check: total hours = the sheet's SUM row. Gate: Dana, the volunteer coordinator. Act: the board's weekly update. Ledger: change log. Rhythm: "runs automatically every Monday".

Pick one. Every answer explains itself, and the wrong ones teach the most.
▶ Now yours: read your second machine's Rhythm slot aloud. What, exactly, starts it?
YOU ARE HERE · Monday Report › Second plant › Bench Machine roomTHE INTAKEFiltrationFILTRATIONTesting labTHE TESTING LABThe gaugeTHE RESERVOIR GAUGEThe reportTHE REPORT TO COUNCILSecond plantA SECOND PLANT
Course ↗
0 / 0

Explore

Click anything to zoom into it · scroll to zoom · drag to pan
Esc zoom out one level · Home whole atlas
1–4 jump to a quadrant · / search

Tour

→ / space next stop · ← previous
The tour visits every district and framework in teaching order.

Teach

N presenter notes for whatever you're looking at · F fullscreen
Every view has its own link — copy the URL to send someone straight to it.

Explore

Tap anything to zoom into it · pinch to zoom · drag to move around. On a phone the map is stacked into one column: drag up to see the next part.
⤺ zooms out one level · ☰ Map lists and searches every stop.

Read

The bar along the bottom names where you are. Tap it to read this part: what it is, the sources it cites (tap one to open it) and the teaching notes.

Tour

‹ and › walk the guided tour in teaching order.

Course

Back to the course ↗

Reading the map

The whole atlas is one safety case. The top goal is “this agent is fit to deploy”; each quadrant is one leg of the argument; each district is a family of tools for that leg. Small text appears as you zoom in. Some tiles have controls you can click.
Click anything to zoom in · scroll to zoom · Esc to back out · → for the guided tour