Seed the live root product CHANGELOG.md into kind=product source records (Plan 142).
Purpose
-------
The live repo-root product ``CHANGELOG.md`` is not registry-managed (0 ``kind=product``
records → a 296-byte stub render). Tile it **content-faithfully** into
``source/changelog/product/<id>.md`` records: one ``kind=product`` record per
separator-delimited segment, body = the verbatim slice (canonicalised at
``format_record_text`` time), so the verbatim-seq render reproduces
``canonicalize(backup)`` byte-for-byte. The raw original survives as the Phase-0
backup receipt; this writes ONLY ``source/changelog/product/**`` (the roadmap seed
is never touched), and never the live ``CHANGELOG.md``.
Deliberately NOT the roadmap reseed: no destructive ``changelog/`` ``rglob`` cleanup,
no ``_BUMP_RE`` arrow classifier. Keys are **independent synthetic** versions in a
``v0.0.x`` band proven disjoint from every version in the source tree (all kinds) +
the store, fail-closed (mirroring a roadmap bump arrow would mint ``v3.03–v3.10`` and
hard-fail at ``SRC_VERSION_METADATA_CONFLICT`` or silently dedup-merge).
Responsibilities
----------------
- ``backfill`` (the migration), ``synthetic_versions`` (disjoint band, fail-closed),
``_roadmap_snapshot`` (the untouched guard), reported ``SeedReport`` for the audit.
Diagnostics
-----------
Domain: OC_CHAT.MAIN
Levels:
L2 - seed lifecycle
L3 - per-segment record emission
L4 - version/date assignment
Contracts
---------
- Writes ONLY ``source/changelog/product/**``; a pre/post hash+filelist guard over
``source/changelog/roadmap/**`` fails closed on any change. Idempotent: a non-empty
product dir must match this run's expected record set or it fails closed.
Dependencies
------------
- oc_diagnostics (structured debug logging via _dbg)
- option_c_registry_contracts (the Version model and SCHEMA_VERSION for each product record)
- oc_chat.registry.regenerate (imported for the contracts bootstrap it runs)
- oc_chat.registry.regenerate.pipeline (regenerate - rebuilds a temporary store for the fidelity proof)
- oc_chat.registry.render.roadmap (render_living_set - renders the root changelog for the fidelity proof)
- oc_chat.registry.source.canonical (format_record_text and load_record - writes each product record and reads existing versions)
- oc_chat.registry.source.canonical_product (split_segments, segment_line_ranges and product_changelog_canonicalize - tiles and canonicalises the changelog)
- oc_chat.registry.source.scanner (scan_source_tree - finds the version records whose versions the synthetic band avoids)