# Etsy fulfillment worklist, method page

Public companion to a private operational queue. Counts, method, and corrections only. No customer names, order numbers, dates of birth, quotes, or narratives appear here or in the sibling `index.html`.

## Re-verified live 2026-07-18

A live re-pull returned **63 receipts, 71 purchased units, 3 reviews, 23 active listings**, identical to the previous pull. Zero receipts were new and zero changed status.

### The join key was the bug

The queue grouped work **by buyer**. A buyer who has a message thread and received one delivery link reads as finished, so a second receipt from that same buyer inherits the finished state and never surfaces. One buyer holding two orders was covered by a single card. The safety-net table built to catch this listed nine buyers without listing them.

**The fix is to key on `receipt_id` and join the Etsy username.** Each paid receipt becomes its own row, so a delivered first order cannot absorb an undelivered second one. The username is read from the `convo_history-url` attribute on the Orders page and survives display-name changes, which is what defeated name matching when five different buyers all appeared under one shared display name.

Nine buyers hold more than one receipt. Three of them had no row before this pass.

**Coverage, stated plainly:** the username map resolves 47 of 63 receipts, because it was read from three pages of Shop Manager. The remaining 16 are joined on receipt name, which is the weaker test.

### Buyer intake also arrives on the receipt

Etsy exposes a buyer note field at checkout, separate from messages. A queue built from message threads cannot see it. Two buyers wrote their full intake there and were treated downstream as having supplied nothing, so one card sent the seller to ask a customer for something he had already provided 33 days earlier.

### When two builds disagree

Two documents generated the same day disagreed on six rows. The later one had settled those rows by opening each buyer's own thread through the order, a test that returns either the thread or a zero-conversations string and cannot be fooled by a display name. Acting on the earlier document alone would have meant redoing six deliveries that had already gone out. The build carrying per-order thread evidence wins.

## Privacy correction in this pass

An earlier version of this file named five customers by first name in its corrections list. Those names were publicly served. They are removed here, and the corrections are restated without identity. Source data carrying names stays in `~/Projects/_outputs/etsy-worklist/` and is never deployed.

## Source labels

Every factual statement carries exactly one: **Live API verified**, **Inbox verified**, **Mac2 audio evidence**, **Shop Manager observation**, or **Unverified hypothesis**.

## Counted separately

Orders, purchased units, recordings, and customers are counted separately throughout. 69 of 71 units sold at $1.00; the other two were one $13.00 and one $10.00 purchase. Stating results as "3 reviews from 71 orders" conflates units with orders and overstates the denominator.

7 receipts carry `is_shipped=false`. These are digital-download listings that Etsy completes automatically, so the flag records whether a button was pressed rather than whether a recording was sent.

## Carried corrections

- A courtesy request was recategorised out of paid-undelivered, and its review condition dropped.
- Corrected audio exports measure a **range**, not a single normalised target.
- Recordings ran **14 to 19 dB** below the spoken-word target.
- Delivery links passed anonymous access testing at the recorded verification time, which is not proof of what a buyer met at delivery.
- Policy-sensitive listing titles are candidates for inspection, not suspected causes.

## What this pass does not establish

No message thread was re-opened on 2026-07-18. Delivery verdicts beyond the live order fields are inherited from the previous inbox read and are labelled as such. Nothing here re-tests whether a buyer downloaded a file.

## Reproduce

```
python3 pull.py              # live Etsy Open API v3, token refreshed at pull time
python3 reconcile_0718.py    # per-receipt ledger + username join
python3 make_0718_named.py   # private named build, local only
```

Both builds are generated from the same reconcile JSON, so the documents cannot drift from the data.

## Provenance

Order facts: live Etsy Open API v3, re-verified 2026-07-18. Conversation evidence: Shop Manager all-messages view, four pages including archived threads, read 2026-07-16, read-only. The Etsy API exposes no messages endpoint. Prior versions preserved under `_archive/`.
