Internal data collection block: SSRF-safe fetcher (h11), bounded company-site crawler (internal_web), email/phone/social extraction, JSON-LD parsing, run-level cache with
in-flight sharing, provider health telemetry, validator and merger, execution loop with re-planning, external Actor adapter (mocked only), pipeline and main.py wiring,
read-only source dataset. h11 added as a dependency. internal_web enabled in the default registry. Phase 2 YouTube normalizer now accepts legacy youtube.com/<name> URLs
(found on real sites). No prices, no publication.
Core engine block (planning mode): gap detector, provider registry, deterministic router, budget manager, billing abstraction, stop and decision
engines. Field-level capabilities added to Capability (legacy members kept); dataset schema attempts.capability enum updated to match.
ProviderDescriptor gained state, cost_known, metadata, Decimal cost, priority and pinned-build validation. No new dependencies.
Phase 3 contract engine (src/core/contract_engine.py): per-field satisfaction with stable reason codes, record-level contract result,
completeness over requested fields. Internal only; no provider routing, no schema change.
Phase 2 normalization: domain, URL, email, phone, social, company name and record normalizers, dedup keys; tldextract and
phonenumbers (plus idna, imported directly) added; defaultMemoryMbytes set to 256 in actor.json; dataset recordId
description now says row-N for records without an id.
Phase 1 foundation: Actor configuration and schemas (input, output, dataset), canonical model and provider-result types,
status and verification enums, error hierarchy, provider contract, input validation, tests.
Memory: actor.json now sets the default to 256 MB (a new Actor otherwise defaults to 4096 MB and the start event is charged per GB).