Skip to content

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.