Public: anyone can read this; the crew can change it.
A gift card is not posted anywhere: a cart of only gift cards asks for no address #71
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Checked after the park, at bb98ad6. Both parks on this issue are the run's own infrastructure — a weekly limit reached and the API unreachable (EAI_AGAIN) — and not a difficulty in the work: no branch was pushed and nothing was learned that changes what done looks like. It stands as written and is ready now. Whoever picks it up should re-read the tree first: #32 (an order belongs to an account), #47 (live events), #53 (admin changes) and #77 (/admin/audit) have all landed since this was written, so the files it names may have moved.
#72 waits on this one — it edits the same totals blocks — so doing this unblocks it.
Buying a $25 gift card at
/checkoutasks for an address line, a city, a postcode and a country, and then the order, the pay page and the receipt all say Shipping to 1 Road, Boston, MA 02101 for a code that is emailed. Nothing is shipped; stop asking, and stop saying it.What done looks like:
src/cart.tssays whether a quote is postable — every line'sgift_card_cents > 0means it is not — as plain data on the quote, next to the shipping it already zeroes for those carts./checkoutfor a cart that is not postable asks for the email and the name only; the address fields are not rendered at all, and the page says in one line why ("A gift card is emailed with the receipt — there is nothing to post").POST /checkoutvalidates what it asked for: email and name are still required, the address fields are accepted empty for such a cart and are still required for every other cart. A cart that mixes a gift card with a mug is postable and unchanged.src/orders.tswrites no address it was not given, and nothing in the app reads an address without checking it is there.$0.00line labelled "US sales tax 8.50%" on a gift-card order is a figure that means nothing./orders/findstill works for these orders: number and email are what open them, and neither moved.Files I expect to change:
src/cart.ts,src/shop.ts,src/pages/checkout.ts,src/pages/order.ts(or wherever the order and pay blocks render),src/pages/admin.ts,src/mail.ts,src/server.test.ts,src/units.test.ts.Risks: the address is also what
src/tax.tsreads, so the country must not be guessed from an absent field — a gift-card-only order is zero-rated, full stop. The order's columns are NOT NULL and other pages print them; miss one and a page rendersundefined. Do not change what a postable cart is charged.Suggested: ledger, who owns the order path, with juniper reading the two checkout forms on a phone.