Skip to content

feat(market-data): resolve exchanges with ISO MIC catalog - #1828

Merged
afadil merged 6 commits into
mainfrom
codex/exchange-catalog-main
Sep 28, 2026
Merged

afadil merged 6 commits into
mainfrom
codex/exchange-catalog-main

Conversation

@afadil

@afadil afadil commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

Valid ISO 10383 exchanges were unavailable whenever Wealthfolio lacked a curated provider rule. Unknown or ambiguous dotted tickers could also be rewritten before their venue was verified.

This adds one pinned, complete ISO MIC snapshot for exchange identity and keeps exchanges.json focused on provider symbol conventions and display metadata. The curated catalog covers 74 exchanges and can grow as provider rules are verified. Active ISO exchanges remain selectable without a curated entry; exact provider symbols can be supplied per asset. A MIC-less ABC.ZZ retains EQUITY:ABC.ZZ, and ambiguous suffixes such as .AE require an explicit MIC or an exact provider result before automatic quotes are trusted.

One guarded migration corrects known legacy MIC aliases while preserving asset IDs and skipping identity collisions. It never merges financial histories. Its rollback is a no-op because converted rows cannot be distinguished from pre-existing canonical rows. Unrelated profile edits preserve stored identities. Explicit identity corrections either save successfully or show a localized duplicate-identity error without modifying either asset.

This covers #1647's three confirmed non-ISO MICs and maps legacy XAQE to AQSE, supported by Yahoo's exchange list. .IL remains a legacy provider suffix without inferring an ISO MIC from the suffix alone.

Validation includes focused core asset and frontend tests, the AI suite with test-utils (including updated draft-output snapshots), provider/import regressions, the migration conversion/collision and embedded-chain tests, pnpm check, translation parity, both frontend builds, Rust format and strict Clippy checks, and desktop/server compilation. The focused exchange-edit browser regression exercises the real web API and SQLite: unrelated saves, duplicate-identity rejection, and selecting an ISO-only venue. Currency-casing regressions cover FX/crypto in both manual and market modes. Live provider coverage is not exhaustive.

Supersedes #1647, including its MIC corrections and collision-safe migration.

@afadil
afadil force-pushed the codex/exchange-catalog-main branch from d5749be to e4b4df3 Compare September 27, 2026 20:33
@afadil
afadil marked this pull request as ready for review September 28, 2026 13:13
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-28T13:20:56.257827Z 5c85705 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@afadil
afadil merged commit 0ddd167 into main Sep 28, 2026
17 checks passed
@afadil
afadil deleted the codex/exchange-catalog-main branch September 28, 2026 15:10
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