{"record":{"id":"b75afe1986ed0e8b","repo":"affaan-m/ECC","slug":"live-distillation-requires-explicit-separately-authorized","errorCode":null,"errorMessage":"live distillation requires explicit separately authorized execution; this package ships no provider adapters and performs no network calls. Use distill_local() (offline, deterministic, dry-run) instead.","messagePattern":"live distillation requires explicit separately authorized execution; this package ships no provider adapters and performs no network calls\\. Use distill_local\\(\\) \\(offline, deterministic, dry-run\\) instead\\.","errorType":"exception","errorClass":"ProviderDisabledError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/tasteforge/distill.py","lineNumber":113,"sourceCode":"    if sp is not None:\n        grade = sp.read_json(sp.grade_path)\n        cadence = sp.read_json(sp.cadence_path)\n        grounding_text = grounding_from_grade(grade, cadence)\n        grounding_used = bool(grounding_text)\n\n    spec = build_spec(\n        look,\n        pack_name=sp.name if sp is not None else profile.get(\"genre\"),\n        grounding_used=grounding_used,\n    )\n    if grounding_text:\n        spec[\"grounding\"] = grounding_text\n    return spec\n\n\ndef distill_live(profile: dict[str, Any]) -> dict[str, Any]:\n    \"\"\"Refuse live provider distillation. Fails closed, always.\"\"\"\n    raise ProviderDisabledError(_FAIL_CLOSED)\n\n\ndef grounding_from_grade(grade: dict[str, Any], cadence: dict[str, Any]) -> str:\n    \"\"\"Measured ground truth as a factual preamble (canonicalized port).\n\n    Numeric facts belong here, not in the model's judgment: the first\n    ungrounded run of the recovered pipeline produced a spec asserting \"no\n    apparent color grading\" for a reference measuring a*+24.9 in the\n    midtones. Stating measurements as facts inverts the dependency.\n    \"\"\"\n    if not grade:\n        return \"\"\n\n    lines = [\n        \"MEASURED GROUND TRUTH for this reference set, from numeric analysis \"\n        \"of the sampled frames. These are FACTS. Do not contradict them. Do \"\n        \"not describe this footage as neutral, ungraded, or clinical:\",\n    ]","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/tasteforge/distill.py#L95-L131","documentation":"distill_live exists solely to fail closed: this package ships no provider adapters and performs no network calls, so any attempt at live (provider-backed) distillation raises ProviderDisabledError immediately. The message directs you to distill_local(), the offline deterministic dry-run path.","triggerScenarios":"Directly invoking tasteforge.distill.distill_live(profile) — always, unconditionally, by design. There is no flag, env var, or config that enables it.","commonSituations":"Migrating code from a different package that had a working live path, assuming an API key or provider flag would enable live mode, or copy-pasting a call chain from another tool.","solutions":["Replace distill_live(profile) with distill_local(profile) — offline, deterministic, dry-run","Remove any code paths/config expecting live provider execution from this package","If live distillation is truly required, use a different package that ships provider adapters; do not monkey-patch this one"],"exampleFix":"// before\nfrom tasteforge.distill import distill_live\nspec = distill_live(profile)\n// after\nfrom tasteforge.distill import distill_local\nspec = distill_local(profile)","handlingStrategy":"try-catch","validationCode":"from tasteforge.distill import distill_live\ndef live_supported() -> bool:\n    return False  # this package never supports live distillation","typeGuard":null,"tryCatchPattern":"from tasteforge.distill import ProviderDisabledError, distill_local\ntry:\n    spec = distill_live(profile)\nexcept ProviderDisabledError:\n    spec = distill_local(profile)  # offline, deterministic fallback","preventionTips":["Call distill_local directly; treat distill_live as a permanent guard","Never assume an API key or env var enables live mode in this package","Document in calling code that this package is dry-run only"],"tags":["fail-closed","offline","provider-disabled","no-network"],"backgroundTag":"unsupported-operation","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}