Entity, Security Identifier, and Provider Foundation¶
P2 introduces read-only entity resolution and provider metadata. It does not
include ETF data, screeners, metric DAGs, recommendations, trading intent, or
orders. Every public call continues through CoreServiceBoundary.
Permanent identity and effective intervals¶
security_id is permanent. CIK, FIGI, ISIN, CUSIP, ticker, MIC, share class,
and ADR relationships are mappings with inclusive valid_from and exclusive
valid_to. Resolution applies the requested as_of to these intervals. A
current ticker is never used to fill an earlier interval.
The fixture covers ticker changes, delisting, identical tickers on different MICs, multiple share classes, and an ADR linked to its underlying registered share. Ambiguous ticker results remain separate securities unless a MIC or another identifier disambiguates them.
Field lineage¶
Every normalized fact includes provider_id, original source_field,
mapping_version, observed_at, known_at, license_id,
availability_restrictions, and a coded quality_code. The same data is
preserved in source evidence and fact metadata.
Tools and failure semantics¶
The Registry is authoritative for entity_search, entity_resolve,
entity_validate, provider_catalog, field_catalog, provider_coverage,
and source_validate. All have generated CLI + Skill, MCP, and REST bindings.
Provider failures use complete, partial, or unavailable plus stable codes
such as provider_partial and provider_unavailable. Missing providers do not
cause another provider's data or a current identifier to be presented as a
fallback fact.
Configured products and measured coverage¶
In the prepared production implementation, provider_catalog reads the mounted
connector Registry, including disabled products. Its availability, entitlement,
markets, historical range and delay are configuration declarations, not verified
subscription or runtime coverage. Credential values and provider request defaults
are excluded.
provider_coverage measures a repeatable, read-only database snapshot at the
requested as_of. Each source measurement reports raw captures, normalized facts,
facts with matching retained raw evidence, material metadata, distinct subjects and
fields, and actual captured/known/data timestamp bounds. Field enumeration is
bounded to 256 per source; the distinct count remains exact and truncation is
explicit. Future captures and broken source references do not count as visible
data. Archived records from disabled sources remain clearly labelled disabled.
These measurements currently cover the three explicitly named connector/external
stores. They exclude other typed stores, do not prove the target universe complete,
and do not establish update frequency or upstream subscription rights. Markets and
identifier types are not copied from declared geographic scope as measured data.
The measured response remains partial until those separate checks are complete.
source_validate distinguishes mapping_configuration from
persisted_source_field. The latter requires a visible stored field with the
requested mapping version, current source/parser identity, and matching retained
raw reference. Both modes report connectivity_verified=false: this tool does not
issue a live upstream request. Obtain the exact stored field from measured coverage;
do not infer a successful provider connection from configuration validation.