US equity, ETF, and read-only option domain¶
P3 adds five registry-backed read tools: equity_etf_master,
us_market_session, etf_data, equity_market_data, and option_chain.
CLI + Skill, MCP, and REST use the same registry definitions and governed core
operations.
Prepared security master reader¶
The prepared ETF database writer requires existing security master records. It does not insert hardcoded SPY issuer, exchange, industry or security rows while saving ETF observations. A missing parent fails the transaction; a failed batch commits no prefix. Test parent records are explicitly synthetic fixtures. Existing legacy master records still need source-evidence reconciliation, and this change does not establish current or historical ETF master coverage.
The prepared production etf_data package also verifies each typed record
against one intact latest normalized source capture, including the raw checksum
link and captured license terms. It rejects mismatched values, missing fields,
late captures and unresolved same-time revisions. Its typed payload retains the
four ETF record variants and replaces storage-only evidence labels with public
source locators. Legacy missing license snapshots remain unknown. Typed rows
alone cannot establish authorization, complete holdings or a verified permanent
security identity; these gaps remain explicit partial results. Formal deployment
and ordinary-user acceptance are still required.
The prepared production equity_etf_master implementation reads captured
OpenFIGI mapping facts for an exact permanent identifier such as
figi:BBG000B9XRY4. It returns original FIGI, composite/share-class identifiers,
ticker, name, provider exchange code and security classifications, with source
checksums, license scopes and evidence locators. The latest eligible capture is
selected as one snapshot; missing fields are not taken from older responses.
Both capture and public-known times must precede as_of.
The prepared website request uses the actual AAPL FIGI and omits optional
as_of to use the server's current query time. For historical queries, supply
an explicit cutoff with verified captured coverage.
A mapping response alone does not establish listing status, the listing validity
interval, trading currency or an issuer/company association. These remain
explicit security_master_*_unavailable coverage gaps and the result is
partial. An exchange code such as US is retained as the provider code; it is
not reported as an ISO MIC. Unresolved identifiers and records without verified
raw-capture links yield an empty result, with no fixture fallback.
This source change still requires release, deployment and verification of the promised universe and history. The existing public 1.1.7 service does not yet run this reader. The prepared reader is an implementation step toward the full security master contract; its partial records do not satisfy that contract's production completion criteria.
Point-in-time rules¶
ETF holdings are snapshots, not reconstructed estimates. Every holding has an
effective_date, published_at, and known_at. A query includes a snapshot only
when both its effective date is within the requested cutoff and its known_at is
no later than as_of. It returns the latest eligible snapshot; it never relabels
the current portfolio as an older snapshot. NAV and distributions use the same
visibility rule. NAV premium/discount is validated against market price and NAV.
Corporate actions are visible only after known_at. Each adjustment factor names
an adjustment_policy_id, policy version, and one or more corporate action IDs.
An adjustment is returned only if all referenced actions are themselves visible.
Symbol mapping events retain the permanent security ID and source action.
US sessions use America/New_York and return timezone-aware pre-market, regular,
and post-market timestamps. Closed sessions contain no trading timestamps; early
close sessions are explicitly typed.
The deterministic contract fixture currently carries the complete 2024 US market
calendar under us-market-calendar-2024.1. Requests for another calendar year,
or requests whose as_of predates publication of that calendar version, return
an empty session set with structured provider_status.coverage_status=unavailable
instead of extrapolating or fabricating a session.
The prepared production us_market_session reader uses persisted official
calendar facts, with an exact MIC and session date. It shares the existing
permission, output-policy, audit and source-evidence boundary. The 2024 fixture
is confined to contract tests. A schedule may describe a future trading day
already published by the exchange; its public-known and actual capture times
must still precede as_of. Missing dates remain empty, and records lacking
verified historical raw-capture links report partial coverage. They are not
reconstructed from the fixture.
The production DataPackage exposes original normalized fields such as
market_calendar.value.session_type, regular_open, regular_close, and
calendar_version, with source licenses and evidence locators. Existing
normalization represents a source JSON null as the string "null"; a closed
session has no usable trading timestamp. This source change requires deployment
and coverage verification before it describes the public production service.
Provider, quality, latency, and license status¶
The prepared market_session_fact_package implementation assembles actual
captured market observations and the cited XNYS reference calendar for the
requested US date. It does not turn the supplied symbols, session or date into
vendor facts. Supply up to 100 distinct US symbols; SPY and SPY.US select the
same explicitly US-qualified symbol, without inferring another market or a
historical ticker mapping.
us_pre_market_close selects source pre-market open up to regular open,
us_midday selects regular open up to noon in America/New_York, and
us_regular_close includes the actual exchange close. Source half-days and DST
times govern these boundaries. Daily bars are eligible only for regular close;
they cannot prove an intraday result. Observations and their capture, known and
license times must all be visible at as_of. Request parameters never replace
missing calendar hours or source observations.
Returned market_observation.value.* fields retain provider timestamps,
currency, interval, adjustment policy, source evidence, and captured license
terms. Prices and quantities preserve decimal lexical values; missing quantity
units are not inferred. Missing symbols have individual coverage gaps. A finite
capture without a complete-session manifest remains partial, even when every
requested symbol has observations. This prepared reader still requires formal
deployment, ordinary-user verification and full range/provider coverage; an
UNKNOWN EODHD license is not an entitlement.
The prepared equity_market_data, market_bars, market_quote, and
market_trades wrapper keeps the existing payload JSON fact. Each returned
observation must match an intact eligible raw-linked normalization capture for
the actual permanent security ID, observation ID, provider, license, source
values and extraction/mapping versions. It uses the latest capture, rejects
conflicting captures, and preserves decimal strings. A later correction cannot
be bypassed by matching an older capture. Receive/known and license capture
times are taken from the selected capture rather than the query timestamp.
The package also returns its contributing market_observation.value.* facts,
their actual source checksums and license scopes. These fields let the shared
boundary enforce source field restrictions on the nested JSON result. Its
observation evidence IDs are replaced with the exact source locators so evidence
lookup closes against the raw capture. Captured UNKNOWN or missing license terms
remain UNKNOWN, including in nested provider metadata; a successful query does
not establish subscription or redistribution rights. Typed records without a
matching source capture are omitted with an explicit coverage gap. Corporate
actions, adjustments and mapping events without their own verified captures are
also omitted with a gap. A finite capture remains partial until coverage is
verified. These changes are prepared source and are not deployed on the existing
public 1.1.7 service. Existing market record filters still require source policy
eligibility; an administrative gate being disabled does not verify EODHD rights.
Every ETF, market, and option payload has a structured provider_status array.
Each entry reports coverage, delay class and seconds, missing fields, license ID
and status, redistribution, and availability restrictions. Missing or delayed
fields are never hidden by a prose fallback.
Option boundary¶
Option output is limited to contract master, chain membership, quote values, open interest, volume, and provider-supplied greeks. Greek metadata includes provider, model name and version, input version and observation time, underlying price, and available rate, yield, and volatility inputs.
All option models are closed schemas. Strategy, signal, recommendation, position, portfolio, trade, account, order, ranking, or explanatory fields are invalid. Argus does not calculate trading meaning from option data.
P3 does not add screeners, sorting/ranking, dataset export, derived indicators, strategy execution, or any write-side market capability.