Skip to content

chore: bring dev's token list onto main, making main the single trunk - #48

Merged
enot3615 merged 3 commits into
mainfrom
feat/tokenlist-onto-main
Aug 28, 2026
Merged

chore: bring dev's token list onto main, making main the single trunk#48
enot3615 merged 3 commits into
mainfrom
feat/tokenlist-onto-main

Conversation

@enot3615

@enot3615 enot3615 commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Replaces #47, which could not merge: main's protection is strict, so the head
must be up to date with the base, and dev is 3 commits behind. This is the same
content on a branch cut from main, so it satisfies that without pushing to a
shared branch.

What it brings

dev's only unique content — the chain-verified internal token list (AIFINP-78,
merged to dev as #24):

12 files changed, 1665 insertions(+), 0 deletions(-)

A new node/internal-tokenlist package. Zero deletions, so it cannot alter
anything already on main.

Why main is the trunk

The decisive fact is not a preference:

origin/main: occurrences of the old royalty code = 0   ← #42 fix present
origin/dev:  occurrences of the old royalty code = 1   ← fix ABSENT

_splitter_treasury(pm[ is still in python/aifinpay/unified_agent.py on dev.
Anything built on dev inherits taking the merchant's royalty — disqualifying
for the branch about to carry v1.3 settlement execution.

dev has never produced a release no tags unique to it; one feature since 2026-08-15
CI does not distinguish them ci.yml triggers on bare push: / pull_request:, no branch filter
No publish automation releases are manual, so neither branch is mechanically special
Protection favours main 4 required checks vs 3
So does practice 7 of 11 open PRs already target main

Two 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

  1. Retarget feat(sdk): generate SPLITTER_ROUTES from the canonical registry, and fail closed on the policy window #40 to main — verified it applies cleanly.
  2. Build the v1.3 execution PR on main. That is the answer to the question
    that was blocking it.
  3. Delete dev, or reset it to main and agree a promotion rule first.
    Recreating it without one recreates this PR in a month.

syedhassan-aifinpay and others added 3 commits August 25, 2026 21:16
…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
@enot3615
enot3615 merged commit 098e37d into main Aug 28, 2026
16 checks passed
@enot3615
enot3615 deleted the feat/tokenlist-onto-main branch August 28, 2026 22:07
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.

2 participants