chore: bring dev's token list onto main, making main the single trunk - #48
Merged
Conversation
…ge (AIFINP-78) New private workspace package @aifinpay/internal-tokenlist. Per the review on the ticket, the token list is GENERATED from live chain reads, never hand-typed: scripts/gen-tokenlist.mjs carries only addresses and provenance, reads name/symbol/decimals from each chain, and fails on a codeless address or any disagreement with the pinned expectations. --check is a drift gate against live chain state. Seeded with the verified entries from the ticket review: Polygon native-Circle USDC + USDT (self-reports USDT0 — keyed by address), BSC USDT/USDC at their real 18 decimals (the AIFINP-120 trap, pinned by an offline regression test), Avalanche USDC, and the canonical Solana USDC/USDT mints (decimals read from the mint account). The fabricated/bridged addresses from the original plan are excluded and the USDC.e exclusion is test-enforced. Not yet included, recorded in the README: Tron (needs a TronGrid read path so it can be verified rather than trusted) and the AIFP contract ABIs (to be lifted from backend/polygon.js, not rewritten). 7/7 tests, tsc clean, runtime smoke-tested. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ge (AIFINP-78) (#24) feat(tokenlist): chain-verified internal token list package (AIFINP-78)
dev's only unique content is the chain-verified internal token list (AIFINP-78, merged to dev as #24): 12 files, +1665 lines, zero deletions — a new node/internal-tokenlist package that cannot alter anything already here. Opened from a branch off main rather than merging dev directly, because main's protection requires the head to be up to date and dev is 3 commits behind it. Same result, no push to a shared branch. Why main is the trunk, and why this direction: dev does NOT have the #42 royalty fix — _splitter_treasury(pm[ is still in python/aifinpay/unified_agent.py there and absent here — so anything built on dev takes the merchant's royalty. dev has also never produced a release (no unique tags), CI triggers on bare push/pull_request with no branch filter so dev buys no extra safety, main requires 4 status checks to dev's 3, and 7 of 11 open PRs already target main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01We1vVZLdj2vYtYaj7fjahX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces #47, which could not merge:
main's protection isstrict, so the headmust be up to date with the base, and
devis 3 commits behind. This is the samecontent on a branch cut from
main, so it satisfies that without pushing to ashared branch.
What it brings
dev's only unique content — the chain-verified internal token list (AIFINP-78,merged to dev as #24):
A new
node/internal-tokenlistpackage. Zero deletions, so it cannot alteranything already on
main.Why main is the trunk
The decisive fact is not a preference:
_splitter_treasury(pm[is still inpython/aifinpay/unified_agent.pyondev.Anything built on
devinherits taking the merchant's royalty — disqualifyingfor the branch about to carry v1.3 settlement execution.
devhas never produced a releaseci.ymltriggers on barepush:/pull_request:, no branch filtermainTwo long-lived branches with no mechanical difference and no promotion rule was
the actual defect. They diverged twice, and a money-path fix sat on one side of
the split.
After this lands
main— verified it applies cleanly.main. That is the answer to the questionthat was blocking it.
dev, or reset it tomainand agree a promotion rule first.Recreating it without one recreates this PR in a month.