"""Host-free core shared by every Three Blocks DCC hub.

Stdlib only, no DCC imports, Python 3.11 floor (Blender 4.2 LTS · Cinema 4D
2024.0). Each host vendors a copy as `<package>/_core/` — regenerate with
`bun run sync:dcc-core`; scripts/release/dcc-core-drift.test.mjs fails on drift.
See docs/plans/three-blocks-cinema4d-addon.md §3.

Everything host-shaped arrives through a *host adapter*: a plain module the host
package supplies (blender/three_blocks/host.py, c4d/.../host.py) exposing

    HOST_KEY      "blender" | "c4d" — the ~/.three-blocks/<HOST_KEY>/ install root
    CLIENT_ID     device-flow client, e.g. "blender-addon" | "c4d-addon"
    VALIDATE_TOOL /api/tools/validate `tool` (telemetry-only): "blender-hub" | "c4d-hub"
    CATALOG_PATH  "/api/blender/catalog" | "/api/c4d/catalog"
    EVENT_PATH    authenticated outcome route for this host
    EVENT_SOURCE  idempotency-key namespace ("blender" | "c4d")
    site_url()    effective API base (env → host prefs → default)
    label()       "Blender 5.2" | "Cinema 4D 2026.3"
    hub_version() installed hub version, read from the host's own manifest

The core never imports a host adapter; hosts inject one. That is what keeps this
package importable — and testable — with no DCC present.
"""
