Inventory and attachments
Inventory is authoritative local state. python main.py inventory --help shows add, list, show,
update, and lifecycle commands. Records retain source, acquisition date, exact integer USD cents,
quantity, notes, optional marketplace linkage, and timestamps. A missing-local eBay import may have
unknown historical source, acquisition date, or cost; these remain visibly unknown and are never
treated as zero. Notes can be edited or cleared from inventory detail. Generic updates cannot bypass
lifecycle rules.
Attachments
Attachment metadata lives in SQLite and bytes live in an ignored sibling attachments/ directory.
JPEG, PNG, WebP, and PDF files up to 25 MiB are accepted only when extension and signature agree.
Original names are display metadata; controlled UUID-based names prevent path collisions.
python main.py inventory attachment-add Q0001 receipt.jpg --category receipt
python main.py inventory attachment-list Q0001
python main.py inventory attachment-remove Q0001 ATTACHMENT_ID
The web detail page previews or downloads only files owned by the requested Q-number. Browser upload and deletion are intentionally unavailable. Sold and archived items retain their attachments. Back up the database and attachment directory together; see Backup boundary.