CLI entry for the §20 stand-in: ``python -m oc_chat.testing`` (Plan 184).
Purpose
-------
Thin process shell over :func:`oc_chat.testing.runner.run_standin`:
emit the report (JSON to stdout under ``--json``; captured pytest
output plus a compact summary otherwise) and exit with the §4 code.
Responsibilities
----------------
- ``main`` — run, emit, return the exit code.
- The §12.4 minimal fatal envelope: when the report itself cannot be
serialised, emit the fixed-shape substitute and exit 3.
Diagnostics
-----------
Domain: OC_TESTING
Levels:
L2 — lifecycle events
L3 — semantic details
L4 — deep tracing
Contracts
---------
- Under ``--json`` stdout carries the report document; human notes for
fatal configuration errors go to stderr (§4).
- The process exit code always equals ``report["exit_code"]``.
Dependencies
------------
- oc_diagnostics (structured debug logging via _dbg)
- oc_chat.testing.runner (the orchestrator)