Central store-scope guard for the OC Chat registry.
Purpose
-------
Enforce the V0.22 §5.3.1 / AC §8.57 contract: every live runtime command
(queue, round, auth) must refuse an ``authored_projection`` store with a
clear diagnostic, and the authored-projection rebuild must stamp the store
before any live open can succeed.
Responsibilities
----------------
- Expose ``assert_live_store(conn)`` — raises ``StoreScopeError`` when
``registry_meta.store_scope = 'authored_projection'``.
- Expose ``stamp_authored_projection(conn)`` — writes the scope stamp
before the rebuild path returns a store handle.
- Tolerate pre-v0.3.2 databases (missing ``store_scope`` column) by
treating them as ``live_store`` (lenient mode, dormant in v1).
Diagnostics
-----------
Domain: OC_CHAT.MAIN
Levels:
L2 - store-scope lifecycle
L3 - scope check details
L4 - column presence probes
Contracts
---------
- Callers own connection and transaction lifecycle.
- ``assert_live_store`` is idempotent and read-only; safe to call in any
transaction mode.
- ``stamp_authored_projection`` must be called before the temp store is
returned to callers; the stamp is permanent for that DB file.
Dependencies
------------
- sqlite3 (the caller's connection and its OperationalError)
- oc_diagnostics (structured debug logging via _dbg)