Cross-model re-review of Commit A Section 6 (startup reconciler) Round 3. Read-only shell commands only. No writes, no tests.

Round 2 verdict was NEEDS_FIXES with 1 BUG + 1 WARN. This round verifies both fixes.

ROUND-2 FIX MATRIX:

[FIX BUG Q3] rebuild_from_manifests() now has a keyword-only `replay_only: bool = False` parameter.
  - When True, the active/no-manifest branch at bg_tasks_db.py:~446 skips orphan-mint entirely (logs debug, continues).
  - reconcile() step 4 (healthy boot, live DB) passes `replay_only=True` — so a wrapper that's still alive writing its manifest is NOT mis-marked as orphan.
  - Quarantine recovery (step 1) calls with default False — synthesizes orphan rows for wrapper-and-child-both-died tasks as before.
  - New test tests/unit/test_bg_tasks_db.py::test_rebuild_from_manifests_replay_only_suppresses_orphan_minting asserts replay_only=True leaves bg_tasks empty for no-manifest active dirs.
  - Existing test_rebuild_from_manifests_active_without_manifest_marks_orphan still passes (default path).

[FIX WARN] _decode_tail() now:
  - Uses base64.b64decode(..., validate=True) — strict, rejects non-base64 chars.
  - Catches ValueError/TypeError/binascii.Error and logs manifest path + field name before returning None.
  - Logs WARN on unexpected types (not str/bytes/None).
  - Added `import binascii` at top of bg_tasks_db.py.

[NEW TEST] tests/unit/test_bg_tasks_db.py::test_rebuild_from_manifests_preserves_null_finished_at_ms
  asserts that a completed manifest with started_at_ms but no finished_at_ms stores NULL in bg_runs.finished_at (covers the gap Codex flagged in Q2 Round 2).

KEY QUESTIONS:

Q1: Is `replay_only=True` on healthy boot sufficient to prevent Commit A from introducing the bg_tasks-without-bg_runs case in steady-state operation?
    Specifically: on a healthy boot, can reconcile still produce a bg_tasks row whose corresponding bg_runs row is missing?

Q2: Does the `replay_only` split correctly preserve the original quarantine-recovery semantics?
    I.e. post-quarantine: orphan rows still get minted for wrapper-and-child-both-died active dirs.

Q3: Is the `_decode_tail` observability adequate? Specifically: does strict-mode b64decode + logging surface corrupt manifests to operators instead of silently dropping tails?

Q4: Any new concerns?

PRODUCE:
- Numbered findings list, each [BUG] / [WARN] / [STYLE]
- Explicit PASS per area (Q1/Q2/Q3/Q4) if clean
- End with EXACTLY one line: VERDICT: APPROVED | NEEDS_FIXES | BLOCK
