Part of the Simple Agility stack. Canonical copy:
~/source/stockroom/docs/superpowers/specs/2026-10-08-stockroom-channels-and-sales-design.md. This page mirrors it for retrieval. Status: approved 2026-10-08; built as phases 5 (plan) and 6 (plan), reviewed 2026-10-09; not yet deployed or connected to eBay. Earlier design: StockroomIntakeInventoryPricingDesign.
Stockroom (phases 1–4) takes items in, prices and routes them, prepares channel-neutral listing content, and tracks where every item physically is (crates, labels, picks, counts). It knew nothing about what happens after an item is ready. This is sub-project 2, channels and sales: where each item is listed, recording a sale, removing a sold item from the other channels within minutes, and getting sold items out the door.
ready ──record a post──► listed ──sale──┬─► to_ship ──shipped──► sold (eBay, or any sale marked "needs shipping")
▲ ◄──every post taken down──┘ └─► sold (handed over: Craigslist, Facebook, in person)
├── sale with no post (e.g. at a market) ──► sold / to_ship
├── FBA pick list closed as "Sent to Amazon" ──► at_fba
├── buyback batch sold ──► sold
└── cancel sale ◄── (back to listed if a post is still up, else to the status before the sale)
listed or beyond, only this subsystem changes its status; triage preferring FBA flags look closer instead.sold and at_fba clear the location, so counts and Find stop expecting the item.channel_listing — one post: channel (ebay, craigslist, facebook), eBay item number or link, price, status (active, delist_pending, ended), end reason, source (manual, ebay_sync). One open post per item and channel.sale — channel (ebay, craigslist, facebook, in_person, buyback), status (active, cancelled, oversold), price, shipping charged, fees and postage (each marked estimated or entered), net, the predicted net, shipping state, the status before the sale, eBay order and line numbers. One active sale per item.sale_batch — a buyback sale split evenly across its items; correctable later.app_setting — the packing location and eBay sync bookmarks. ebay_unmatched (phase 6) — eBay sales or listings with no matching SKU.to_ship. New statuses listed, to_ship, sold, at_fba.EBAY_REFRESH_TOKEN, about 18 months) from signing in once; kept in the environment, never the database.EbaySellerAccount port: active listings (Trading GetMyeBaySelling), orders changed since a time (Fulfillment getOrders), end a listing (Trading EndFixedPriceItem, by item number — the only way to end a listing created on the website).Notifier port with a Telegram adapter; durable messages; reminders every 30 minutes while posts await deletion. Every eBay sale is messaged, with the posts left to delete or "No other posts to take down" (the operator's choice, 2026-10-09; the spec first messaged only a sale with posts to delete).Counters for posts, sales, cancellations, delistings (by API or by hand), oversold items, sync runs and notifications; gauges stockroom_delists_pending and stockroom_ebay_sync_age_seconds; the timer stockroom_delist_seconds{channel} — the measure of "within minutes". Per the telemetry contract.
Posting through eBay's API, crosslisters, browser automation; Poshmark; returns and refunds after shipping, buying postage; FBA sales import (the SP-API plan); exact eBay fees; channel scheduling; multi-quantity listings.
oversold), not prevented.Cluster Hub: Stockroom Hub (stockroom)