Stop asking the bot which iPad case is this? Hand it a fixed list of cases you have already sold, and let the person holding the box point at the right row.
Pulled live from Amazon, parent B0H2W6GLK4, variation theme SIZE_NAME / COLOR_NAME. Four generations, six or seven colours each. Every one of these is titled “ESR for iPad Pro … Case, Rebound Series”. The difference is not in the text. It is in your hand.
Left is the photo Nellis shot at intake. Right is the Amazon listing the resolver picked. These are real rows off your Queue tab today.
| 1087249761$8.72 | ESR iPad Pro 13 Inch (M5/M4) Case, Rebound Series, Black | → | B0CRHKJYVXOK link matches the box | ||
| 1080380497$1.25 | ESR Case for iPad Pro 13 Inch (M5/M4) 2025/2024, Powerful Magnetic Attachment | → | B0CRHKJYVXOK link matches the box | ||
| 1072460481$1.25 | ESR for iPad Pro 13 Inch Case (M5/M4) 2025/2024, Powerful Magnetic Attachment | → | B0CRHKJYVXOK link matches the box | ||
| 1078075562$19.94 | ESR for iPad Pro 13 Inch Case with Keyboard M5/M4, Multi-Mode Magnetic Stand | → | B0CTGWZ3DLOK link matches the box | ||
| 1081270471$39.88 | ESR Keyboard Case for iPad Pro 13" M5/M4 | → | B0CTGWZ3DLOK link matches the box | ||
| 1083388609$21.19 | ESR for iPad Pro 13 Inch Case with Keyboard M5/M4, Multi-Mode Magnetic Stand | → | B0CTGWZ3DLOK link matches the box |
Rows 1 to 3 are three different Nellis descriptions landing on one ASIN. One says Rebound Series, two say Powerful Magnetic Attachment. Across the whole tab as it stands today: 100 rows, 99 ASINs, only 39 of them distinct. Fifteen ASINs carry more than one Nellis title, covering 71 of the 100 lots. One ASIN alone holds 15. Link Check says OK on 95 of 100.
The human backstop is not running either. CONDITION is filled on 11 rows of 100. COLOUR on 34. SERIES on 17. STAND on 0. Four columns per row across 100 rows is not a job anyone does at a shelf. The warehouse photo column is the exception: it is machine-filled and sits at 100 of 100.
One row per ASIN. Photo and title come straight from Amazon, so they are right by definition. The short name is what you Ctrl-F. Case in hand, find the row, type the sticker digits into Lots. That is the whole job.
| Photo | Short name | Amazon title | ASIN | Lots you found | Qty | Cost in |
|---|---|---|---|---|---|---|
| Pro 13 M5/M4 Keyboard | ESR for iPad Pro 13 Inch Case with Keyboard M5/M4, Multi-Mode Magnetic Stand | B0CTGWZ3DL | 075562, 270471, 388609 | 3 | $81.01 | |
| Pro 13 M5/M4 Rebound Black | ESR for iPad Pro 13 Inch (M5/M4) Case, Rebound Series, Black | B0CRHKJYVX | 249761 | 1 | $8.72 | |
| Air 13 M4/M3/M2 Flip Pink | ESR for iPad Air 13 Inch M4/M3/M2 Case, Flip Series, Pink | B0DS542XT6 | 0 | – | ||
| Air 11 M4/M3/M2 Keyboard | ESR for iPad Air 11 Inch Case with Keyboard M4/M3/M2, Ultra-Light | B0F9P7G16Y | 778912 | 1 | $9.97 |
Real ASINs, real lot numbers, real photos. Rows 1 and 2 are the split the bot could not make. Row 3 is deliberate: a case with nothing typed in sits at zero and is ignored. No SKU column, you do not need it at the shelf; the store SKU stays on the generated To List tab where the upload needs it.
This tab is the money, and it works the way it already does. Receipt email in, landed cost out, allocated to the cent. None of that code changes. The only column you touch is RETURN, on the rare case going back.
| Lot # | Landed cost | Nellis title | Picked up | Yard | Return by | Return? | Assigned? |
|---|---|---|---|---|---|---|---|
| 1078075562 | $19.94 | ESR for iPad Pro 13 Inch Case with Keyboard M5/M4 | 22 Aug | Phoenix | 29 Aug | yes | |
| 1087249761 | $8.72 | ESR iPad Pro 13 Inch (M5/M4) Case, Rebound Series, Black | 27 Aug | Mesa | 3 Sep | yes | |
| 1080380497 | $1.25 | ESR Case for iPad Pro 13 Inch (M5/M4), Powerful Magnetic Attachment | 22 Aug | North Las Vegas | 29 Aug | yes | |
| 1072460481 | $1.25 | ESR for iPad Pro 13 Inch Case (M5/M4), Powerful Magnetic Attachment | 27 Aug | Mesa | 3 Sep | RETURN | – |
The last column is the safety net. It turns green the moment that lot number appears anywhere in the Legend, so an unassigned case is visible without anybody counting.
Live at the top of the sheet. Zero in the red box is the promise you cannot over-list. Zero in the amber box is the promise no case you paid for went missing. These two numbers replace the whole Link Check and confidence apparatus, and unlike that apparatus they cannot say OK when they are wrong, because they count rather than judge.
An ASIN and a number. Nothing else can go wrong because nothing else is being decided. The rest is there so you can eyeball it before pulling the trigger.
| Short name | ASIN | Store SKU | Live now | Adding | New total | Action | Cost in |
|---|---|---|---|---|---|---|---|
| Pro 13 M5/M4 Keyboard | B0CTGWZ3DL | SW-CEN7-UUK2 | 16 | +3 | 19 | update qty | $81.01 |
| Pro 13 M5/M4 Rebound Black | B0CRHKJYVX | 2Q-8B90-TDWV | 1 | +1 | 2 | update qty | $8.72 |
| Air 11 M4/M3/M2 Keyboard | B0F9P7G16Y | 0M-1M09-6H3Q | 1 | +1 | 2 | update qty | $9.97 |
Live quantities are real: B0CTGWZ3DL is sitting at 16 Active, B0CRHKJYVX at 1. This is the one tab where the store SKU appears, because the upload addresses a listing by SKU. It is generated, never typed.
That lists the same case twice and eats account health, the exact thing you are trying to stop. The red counter watches duplicates across the whole Legend and the lister refuses to run while it is above zero. A stop, not a warning.
A model you have never sold has nowhere to go. A NEW block at the bottom of the Legend takes an Amazon link plus the lot number, and the next refresh fills in the ASIN, photo and title and promotes it to a normal row. Without this you jam on the first unfamiliar box.
An unassigned lot is money nobody is looking for. The amber counter names them, and Return By is already on the row, so a lot drifting toward its deadline unassigned is visible now rather than discovered later.
A typo puts one case's cost on another. Any lot number in the Legend that does not exist on the LOTS tab turns red in place, and it can never become a listing, because the lister only reads lot numbers present on both tabs.
One row per iPad-case ASIN you have ever listed. ASIN, title and live quantity straight from Amazon's own listings report. Nothing invented.
The naming rule parses roughly two thirds of the titles cleanly. The rest break it, mostly the A16 and 11th-gen models. The machine fills what it can, you fill the rest once. Auto-generating a wrong name puts you straight back where you started.
The thumbnail script already resolves Amazon catalog photos and cached 73 of 73 with zero failures. Widen it and write the URL into the sheet as =IMAGE(), so nobody uploads anything by hand and nothing goes stale.
The Queue already carries almost everything this tab needs: lot number, landed cost, CONDITION, Nellis title, yard, dates, and the warehouse photo, which is already machine-filled at 100 of 100. It needs one new column, In Legend, a count of how many Legend rows claim this lot. 0 means nobody assigned it, 1 is good, 2 or more blocks the lister. Eight identity columns stop being read.
Assigned, unassigned, duplicate, unknown. This is what makes the sheet trustworthy rather than just tidy.
The real work. sp_list_run.py stops reading the identity gate and reads an ASIN plus a count. The colour gate, the re-home step and the identity scorer all stop being gates.
The whole point of this design is that it cannot quietly list the wrong case. That claim needs someone trying to break it who did not build it. Grok gets the Legend rules, the three checks and the lister diff, and is asked one question: find a sequence of sheet edits that puts the wrong ASIN live, or puts a quantity live twice.
Runs through council.py. Anything it finds becomes a test before S8 starts. The Codex gate still runs on the code itself; this one attacks the design.
Every time you assign a lot, record what the resolver would have picked, in a column nothing reads. After a few weeks you have a real hit rate per model line. Where it is high enough it starts pre-filling a grey guess and you confirm instead of type. That is how the bidder earned trust, and it is one column.
Yes, and it is an addition, not a rebuild. The receipt pull, the landed-cost maths, the lot ledger, return tracking and the SP-API write all stay exactly as they are. One decision moves from the machine to you: which case this is.
No new step. One step swaps. You already open every box. Today you are meant to check the bot's guess, which means reading a whole row and filling four columns, and the sheet shows that happening on 11 rows out of 100. Instead you type six digits into a row you found by name. Faster, and it is the only place a human touches the pipeline.
Yes. One spreadsheet, three tabs, cross-referenced by lot number. No second file to keep in sync, nothing to copy between them. The Archive tab you already have stays untouched.
This is what you Ctrl-F, so it has to be your words. My default reads device, size, generation, series, colour: Pro 13 M5/M4 Rebound Black. Jordan said “Pro 11 trifold green”, and Amazon does not use the word trifold anywhere, so your vocabulary and theirs already differ.
What I need: five case names typed the way you would actually type them. I fit the rule to that.
Nellis lot numbers run ten digits (1087249761). Jordan said last six off the sticker. I checked all 1,483 lots in the ledger: no two collide on their last six today. It could collide eventually.
My call: type six, store ten. The sheet expands 249761 to the full number itself, and refuses if six digits ever match more than one lot.
The colour agreement check, the re-home step and the resolver scoring were built over the last two weeks. Under this design none of them is a gate any more.
My call: demote, do not delete. They keep running and keep recording, feeding S7. Nothing they say can block or change a listing. That keeps the work and gives it a route back in.
Zazu said probably not, Jordan wanted it. The cost side is free either way, it falls out of the lot numbers. The sale side needs Amazon settlement data, which is a separate pull.
My call: cost only for now. Landed cost per ASIN on the Legend. Sale side later, once listing is proven and boring.