The catalogue is the spine. Each entry accrues domain objects — purchase, warranty, insurance, service, subscription — and each is a state machine over its scraped documents, advanced only by actions.
The single registry of everything owned or subscribed to. Every domain object hangs off a
catalogue entry by product_id — one query assembles the whole dossier.
Every domain shares one status vocabulary; what differs is its action set and the minimum documents it must archive. The store row is the AI-scraped metadata index over those files.
One shared status vocabulary. Every edge is an action — automatic (agent) or user-assisted. An OPEN action means the item needs attention whatever its status; the tracker advances anything live and skips COMPLETED.
expiry by warranty-sweep (agent), which auto-opens a renew-or-extend action for you.store.py attention regardless of lifecycle status — this is the agent's worklist.One physical catalogue entry, four domain objects, each with its own state and actions. This is the shape a real asset takes in the store.
renew-registration (you)DUEstore.py — set-status · action-add/resolve · doc-add · attention · warranty-sweepsubscriptions / insurance stores + memory→store migration