Skip to content

feat(updater): shared calendar dates, ticker and new-fund checks, u.s.-listing tickers - #99

Merged
daggerok merged 1 commit into
mainfrom
feat/shared-updater-blocks
Oct 26, 2026
Merged

daggerok merged 1 commit into
mainfrom
feat/shared-updater-blocks

Conversation

@daggerok

Copy link
Copy Markdown
Owner

What changed

iShares gets the shared updater blocks of the ETF template (.claude/tools/etfs/etf-std/*.block.ts, applied with apply-block.ts, byte-identical in every brand), wired as in Schwab #75. iShares has no N-PORT code and no Yahoo history window, so nport-reader and windowed-chart are left out; pages keep the array-row format:

  • holdings-guard (Q24): an all-non-numeric weight sheet never replaces a published sheet with numeric weights, even with numeric and sum relaxed (previousWeights from the published holdings pages)
  • calendar-dates: isoDate and the Performance and Distributions date parsing read calendar text (was Date.parse(text + ' UTC')); withoutYoungMetrics nulls the 1y, 3y, 5y, 10y and annualized since-inception returns of a fund younger than the horizon (calendar anniversary of the catalog inception date); the 12-contiguous-month rule for since-inception stays
  • fund-selection (Q27, Q28): a TICKERS entry outside the live catalog and the published funds stops the run before any fund request (closed published funds stay valid); a catalog-only row the live catalog no longer lists is always dropped, also when the vanished-funds safety keeps the other rows; NEW FUNDS: names a fund on its first successful publish, NEW FUNDS (not published yet): a new fund whose first read failed (before: every catalog ticker missing from the previous index)
  • Brand ticker hygiene (PS-1 rule, 2330 in Taiwan and Saudi funds): a holdings Ticker is kept only for a security on a U.S. exchange (the sheet's own Exchange column); foreign local codes, futures, options, swaps, FX and cash lines become -. iShares sheets carry no CUSIP or ISIN, so the Watchlist then keys those rows by name

Values that change on the next run: international and global funds publish - instead of local codes for every non-U.S. listing (EFA: 670 of 680 rows), U.S. funds only for futures, cash and unlisted lines (IVV: 5 rows, among them ESZ6, USD and the delisted HOLX); NEW FUNDS lines change as above

How it was checked

  • bun test: 42 pass, 0 fail (exit 0), also with the control variables of update-data.config.json exported; the new Q24, Q27, Q28, young-fund and dates tests fail without their wiring (checked by removing each piece)
  • bun build --target=bun scripts/update-data.ts --outfile=/dev/null, bun build --target=bun src/main.tsx --outfile=/dev/null, git diff --check, hub check-readme.ts, check-scripts.ts, apply-block.ts --check holdings-guard,calendar-dates,fund-selection
  • .claude/tools/etfs/tc/check.sh: no new errors (53 -> 53 pre-existing lines)
  • live run (data discarded): TICKERS="IVV EFA AGG IAU" -> 3 updated, 1 unchanged, only the ticker change above plus fresh upstream values

@daggerok
daggerok merged commit 1a2ed64 into main Oct 26, 2026
1 check passed
@daggerok
daggerok deleted the feat/shared-updater-blocks branch October 26, 2026 06:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant