Symptoms
A scheduled dividend import finishes without a transport error, yet a record added by the upstream feed later is still absent locally. The reviewed application has a seven-day _DIV_TTL for dividend caches and a compatibility bulk reader. This is a local integration case, not proof that an HTTP 200 certifies a complete dividend schedule. The reviewed dependency lock pins httpx==0.28.1; it does not establish the SDK installed on a live server.
Cause
The first response and the most complete response need not arrive at the same time. A cache keyed by exchange and observation day can preserve an early empty result after a later upstream revision. In the pinned implementation, skip_cache gates reads and writes, and get_bulk_dividends_result provides an uncached scheduled observation with explicit rejected-row counts. The official bulk reference documents a day-scoped dividend dataset selected with type=dividends; it does not make the application’s seven-day TTL a vendor guarantee.
Safe resolution
The reduced example makes observation policy explicit. It uses injected transport and a synthetic cache, without API keys. Bypassing both cache reads and writes protects the scheduled observation from a stale compatibility cache.
def observe_dividends(cache, fetch, exchange, day, *, now_s,
skip_cache=False, ttl_s=7 * 24 * 60 * 60):
key = (exchange, day)
cached = cache.get(key)
if not skip_cache and cached is not None:
expires_at, rows = cached
if expires_at > now_s:
return list(rows)
rows = fetch(exchange, day)
if not isinstance(rows, list):
raise ValueError("Expected dividend rows")
if not skip_cache:
cache[key] = (now_s + ttl_s, list(rows))
return list(rows)
Verification
Synthetic Python examples were checked on 2026-10-16; the original application tests and live provider APIs were not run.
The deterministic fixture first returns an empty list, then exposes a newly added dividend. A normal cached read must still return the first observation, while skip_cache=True must call the transport and return the new row. Assert that bypassing did not read or overwrite the old cache; then expire the cache and verify a normal read refreshes it. Also reject a non-list response instead of labelling malformed data complete.
The checked-in tests extract this published Python block and exercise the same synthetic boundary cases. Re-run with npm test.
Limitations
Cache bypass cannot create a dividend that the provider has not published. Revisit a defined lookback window, preserve observation time and source dates, and separately reconcile revisions older than that window. A bypass does not invalidate stale entries used by other readers. The example does not normalize monetary precision, prove financial completeness, or measure live publication delay. The original application’s tests were read as evidence, not rerun here. See the EODHD profile and retry guide.
Implementation evidence was reviewed at pinned GetBeta revision 890c2531b76c. Source-repository links may require access; the public code above is a reduced adaptation without credentials or customer data. Search expressions are candidates, with no search-volume, indexing or ranking claim.
Editorial update (2026-10-20): this historical cache case does not describe the current KR dividend source policy. See the EODHD and SEIBRO market-routing case for the Korean date-field coverage limit and the reviewed source selection.
Sources and verification scope
Synthetic Python examples were checked on 2026-10-16; the original application tests and live provider APIs were not run.
- getbeta-eodhd-cache (code) · checked:
- official-eodhd-bulk (documentation) · checked:
- getbeta-sdk-pins (documentation) · checked:
- getbeta-five-examples-execution (execution) · checked: