Etsy Action Plan v2

OnethingNeededShop (50156638). Supersedes the 2026-06-20 plan, which was written before the July delivery audits.

Rebuilt 2026-08-14 from 17 Etsy chat sessions + the live worklist render. Plan only, no live Etsy writes have been made.

The one-line state

Pulling live The daily audit is fixed and pulling live again as of 2026-08-14. Its first real pull found five orders worth $68.78 that the frozen snapshot never recorded, the newest placed today. All five were then recheck-verified: three delivered, two owed, and one mis-send where two buyers hold the same file. The owed queue stands at sixteen units across thirteen buyers, worth $51.72.
Owed buyers15
Owed units18
Owed revenue$81.50
Blocked2
Delivered46
Newest orderAug 14

1. The Etsy chats

Seventeen sessions where Brandon actually asked an Etsy question, oldest at the bottom. Sessions that only mention Etsy through the loaded memory file are excluded, which is most of them.

DateSessionWhat it was for
2026-07-25174ee271Cassie's three readings, card-pull instructions, confirm the Etsy API, and the complaint that Mother's Day images were still live
2026-07-259b9686e3Fork of the same prompt
2026-07-2256c10bb4"finish etsy chats here"
2026-07-20b1bbcfa9Per-lane open chat applied to the audio pipeline reading map
2026-07-20569eac43SESSION_HANDOFF_etsy-readings-audio_2026-07-20
2026-07-207ae4b467Add a listing thumbnail and a wait time to each worklist row
2026-07-2079e378c5Check the shop for what can be updated, do the covers
2026-07-20b6cfc02cOrder the owed list by who was promised a reading, subsort by cost
2026-07-192ae0f691ChatGPT image descriptions to add more listing photos
2026-07-19c3479a1fSeven-recent-sessions efficiency audit
2026-07-18c3169d5fVerify the 31-day-waiting buyers against the API
2026-07-18ed2c6a7cWorklist rebuild from FINISH_THESE.pdf, where name search in Etsy messages proved worthless
2026-07-178952badeUpdate the worklist site, not the chats
2026-07-1741be6bbcCEO evaluation v4
2026-07-178988a871The arithmetic critique that broke the worklist's investigation
2026-07-1660f2dbf6Worklist rebuilt to 13 named rows with order, cost and correspondence
2026-07-169f843b44etsy_restructure.py as the source breadcrumb

2. What the chats already settled

RuleA Drive or WeTransfer link inside the buyer's own thread is the only delivery proof. A five-star review is not proof, and neither is Etsy's Delivered flag.
RuleSearch the thread, never the buyer's name. Name search in Etsy messages returned nothing usable, and display-name aliasing produced wrong verdicts.
RuleForce-scroll every thread before judging it. Etsy truncates at roughly six messages, and an un-scrolled read produced three wrong rows on 2026-07-20.
RuleA question-required listing with no question is blocked, not owed. Ask the buyer for her question, or cancel the order. Do not invent the question.

All four are already encoded in ~/.claude/skills/etsy-delivery-audit/, so this plan does not restate them as work.

Mis-send One recording went to two buyers, and the correction went wrong too. New Recording 923 (1xWNH548KpFnTeCLymHXyQNYXGwBhFeA6) was sent to Jessica (ordered Jul 31, "The Message They Cannot Say") and again to Regina E (ordered Aug 12, "When The No Becomes A Yes"). Its audio speaks of reconciliation timing and reversal, which is Regina's listing, so Jessica holds a reading that is not hers. On Aug 14 at 15:07 EDT Regina was sent a follow-up Drive folder link that turned out to be a music folder. New Recording 925 is hers and has never reached her. Both buyers are owed.

3. The blockers

Fixed 2026-08-14 The daily audit had not read Etsy since 2026-07-18. com.drwu.etsy-delivery-audit fired every day and ran build_worklist.py, which only re-renders reconcile_full.json, last written Jul 18 14:11. Twenty-seven days of identical output read as a working audit. The job now runs a pull stage first and refuses to render a stale source. See Track B.
Broken The Etsy v3 read endpoints return 403. The OAuth refresh still succeeds, so the tokens are fine, but /shops/{id}, /listings and /users/me all answer "Shared secret is required in x-api-key header" with either stored key. Until that is fixed, no listing-side claim in this plan can be re-verified live.

4. The plan

Track A · Clear the owed queue

First Sixteen units, thirteen buyers, $51.72. Five rows read NO THREAD, which means the buyer paid and no conversation exists in any folder, and those are the reputational risk. The five receipts from the 2026-08-14 pull were rechecked the same day, so every row below carries a verdict. Work them oldest first.
OrderedBuyerUnitsPaidVerdictConfidence
Jun 29Cassie Saldana3$3.00OWED 3high
Jul 02JoAnne Nikitas1$10.00NO THREADcertain
Jul 06Linda Holmes1$1.20OWED 1certain
Jul 10melanie lopez1$1.08NO THREADcertain
Jul 12georges finoulst1$1.21NO THREADcertain
Jul 12Ellen Hughes1$2.14OWED 1high
Jul 12melanie lopez1$1.08NO THREADcertain
Jul 15Maryanne Gewargis1$1.10OWED 1provisional
Jul 15Heather Phillips2$3.00OWED 2high
Jul 15Sheryl Koehler1$1.00NO THREADcertain
Jul 15Fatima Ait-Ouafa1$0.91OWED 1provisional
Jul 25Lisa Wilson1$13.00OWED 1certain
Jul 31Jessica1$13.78OWED 1certain
Aug 12Regina E1$16.00OWED 1certain
Aug 14Erin Hennessy1$13.00OWED 1certain

Read that buyer's full thread before any message. No template across several buyers, and no timeline Brandon has not given. All five new receipts were rechecked on 2026-08-14 with recheck.py, which returned zero UNVERIFIED rows.

Track B · Make the daily audit read Etsy again

Done 2026-08-14 The job had no pull stage at all. Three changes shipped into ~/.claude/skills/etsy-delivery-audit/:
python3 ~/.claude/skills/etsy-delivery-audit/daily_audit.py
Verified by running it exactly as launchd does. The stale source was refused with exit 3, the full job then exited 0, and the pull added five receipts.
Watch The browser handoff expires after 24 hours by design. While the API stays down, the job will fail loudly each morning until either Track C clears or a fresh signed-in pass rewrites live_receipts.json. A loud failure is the intended behaviour, since the alternative is the silent staleness this replaced.

Track C · Restore the API read path

Fix The 403 names a header problem, so the likeliest cause is an app-credential change on Etsy's side rather than an expired token. Re-check the app's keystring and shared secret in the developer console, then re-run a single /users/me call as the gate before trusting any listing claim.

Track D · The listing work, held until Track C clears

Held Covers on the finished drafts. The 2026-06-20 plan named five real-priced drafts blocked only on missing images, and 2026-07-20 asked for the covers again. Nothing here can be re-counted while the API is down.
Held The 29 twenty-cent sample SKUs. The old plan proposed retiring them and keeping one free sample per lane. That decision is still unmade.
Held Seasonal images are stale. On 2026-07-25 Mother's Day photos were still on live listings, and image counts were still short of the target.

5. Order of operations

  1. Track B is closed out and verified. The queue stopped lying on 2026-08-14 and immediately surfaced $68.78 of unrecorded orders.
  2. Track C, because every listing claim depends on it, it is one credential check, and it is what keeps Track B running without a manual browser pass.
  3. Track A, oldest buyer first, one thread read in full per message, with recheck.py on the five unverified rows.
  4. Track D, once a live listing pull actually returns.