affaan-m/ECC · error · ValueError
Local ingestion cannot claim provider execution
Error message
Local ingestion cannot claim provider execution
What it means
validate_assets requires the receipt field provider_execution to be exactly the boolean False (checked with 'is not False', which also rejects strings like "false" and truthy values). Since this module never executes providers, a receipt claiming provider execution is inconsistent with the local-only contract and is rejected.
Solutions
- Regenerate the receipt with ingest_assets, which writes provider_execution: false.
- If editing JSON, set the field to the JSON boolean false (not "false" or 0).
- Validate receipt shape before calling: receipt.get('provider_execution') is False.
- Separate provider-executing artifacts from this local-only validation flow entirely.
Example fix
# before
{"provider_execution": "false"}
# after
{"provider_execution": false} Defensive patterns
Strategy: type-guard
Validate before calling
r = json.load(open(p))
assert r.get('provider_execution') is False, 'provider_execution must be boolean false' Type guard
def no_provider_execution(obj) -> bool:
return obj.get('provider_execution') is False Prevention
- Serialize booleans as JSON booleans, never strings.
- Use ingest_assets output verbatim; do not re-serialize through string-typed templates.
- Keep provider-backed artifacts in a separate validation path.
When it happens
Trigger: Calling validate_assets on a receipt where provider_execution is missing, true, "false", null, or 0; hand-edited receipts; receipts produced by external tooling with a different convention (e.g. string flags).
Common situations: Custom pipelines serializing booleans as strings; hand-written receipts; combining records from a provider-backed system into a local receipt template.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Local ingestion must have zero provider calls
- application request must be a JSON object
- artifact path must be a non-empty relative path
- artifact byte size does not match receipt
- artifact has invalid modality binding
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/12fe4231c61330a8.
Report an issue: GitHub.
Appendix: source
Thrown at skills/taste-application/scripts/tasteforge/assets.py:227
try:
with output.open('x', encoding='utf-8') as stream:
json.dump(receipt, stream, indent=2, sort_keys=True)
stream.write('\n')
except OSError as exc:
raise ValueError(f'Cannot create exclusive receipt: {output}') from exc
return receipt
def validate_assets(receipt_path: str | Path) -> dict[str, Any]:
"""Re-hash every bound file and validate receipt semantics; no remote calls."""
path = _path(receipt_path, Path.cwd())
receipt = _load(path)
if receipt.get('schema') != SCHEMA:
raise ValueError('Unsupported asset receipt schema')
if type(receipt.get('provider_calls')) is not int or receipt['provider_calls'] != 0:
raise ValueError('Local ingestion must have zero provider calls')
if receipt.get('provider_execution') is not False:
raise ValueError('Local ingestion cannot claim provider execution')
_, requests = (_bundle(receipt['bundle_receipt'], path.parent, True)
if 'bundle_receipt' in receipt else (None, {}))
for asset in _assets(receipt.get('assets')):
_taste(asset, requests, True)
_verify_binding(asset, path.parent, asset['modality'])
provenance = _provenance(asset, path.parent, True)
if provenance is not None and provenance != asset['provider_provenance']:
raise ValueError('Invalid supplied provenance declaration')
inputs = receipt.get('input_artifacts')
if not isinstance(inputs, list):
raise ValueError('input_artifacts must be a list')
for artifact in inputs:
_verify_binding(artifact, path.parent)
if 'genre_spec' in receipt:
_verify_binding(receipt['genre_spec'], path.parent)
return receipt
View on GitHub (pinned to 8321021c54)