add: ALIGN (2026-08-17) - #2554
Open
claude[bot] wants to merge 8 commits into
Open
claude[bot] wants to merge 8 commits into
claude[bot] wants to merge 8 commits into
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
5 tasks
Resolve both-added tail conflict in src/tokens/base.json by keeping both entries as separate objects: CP (from main, #2556) and ALIGN (CONS-3105). Git had merged the shared "chainId" line, so naive marker removal would have fused the two tokens into one malformed entry. Re-bump version to 22.13.0: main consumed 22.12.0 in #2556, which this branch had also claimed off 22.11.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
This was referenced Aug 24, 2026
Merged
Resolve tail conflicts in src/tokens/mainnet.json and src/tokens/base.json against #2557 by keeping both sides as separate token objects. The conflicts sat below a shared, auto-merged "chainId" line, so deleting the markers would have fused each pair into one object -- valid JSON that silently drops a token. Both sides are written out with their own chainId. Re-bump 22.13.0 -> 22.14.0: #2557 consumed 22.13.0 on main, and git auto-merged the identical version with no conflict. Verified: all 24 files under src/tokens/ parse; merged tree holds exactly main's 1030 entries plus the 2 ALIGN entries (1032); collision set for chainId+address, chainId+symbol and chainId+name is unchanged from main (only the pre-existing B3 duplicate and three known same-symbol groups); both ALIGN addresses pass EIP-55 and appear exactly once. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
Third conflict resolution. Reconstructed the ALIGN and FOLD (#2558) mainnet entries as two separate complete objects rather than deleting conflict markers, which would have fused them into one last-key-wins object and silently dropped ALIGN. Version re-read from the default branch after merging (22.14.0, auto-merged with no conflict) and re-bumped to 22.15.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
This was referenced Aug 27, 2026
Closed
Fourth conflict resolution, against #2564 (add: U, cbHYPE, cbZEC, etc). Only src/tokens/base.json conflicted: #2564 appended cbHYPE and cbZEC at the tail of the same array our ALIGN entry appends to, so git auto-merged the shared "{" and "chainId": 8453 lines ABOVE the <<<<<<< marker. Deleting the markers there would have fused ALIGN and cbHYPE into a single last-key-wins object, silently dropping ALIGN. Resolved by reconstructing all three entries as separate complete objects (cbHYPE, cbZEC, then ALIGN), splicing the ALIGN object verbatim onto main's base.json rather than editing around the markers. src/tokens/mainnet.json auto-merged cleanly (our ALIGN entry is not at the array tail there); bnb.json and robinhood.json took main's changes verbatim. Version re-read from the default branch after merging: main had itself reached 22.15.0 in #2564, the same value this branch had bumped to, so git auto-merged the bump away with no conflict and the branch briefly carried no bump at all. Re-bumped to 22.16.0 via npm version --no-git-tag-version. Validated: all 24 files under src/tokens/ parse; both ALIGN addresses pass EIP-55 (scripts/checksum.js); entry count 1038 (main) -> 1040 (+2 exactly); multiset of (file, chainId, address, symbol, name) tuples equals main plus the two ALIGN entries with an empty "on main but missing here" set; each ALIGN address appears exactly once; collision scan on chainId+address, chainId+symbol and chainId+name is byte-identical before and after, showing only the pre-existing B3 duplicate and the LIT/AVA/WBTC symbol collisions. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
This was referenced Sep 8, 2026
Merged
Merged
Fifth conflict resolution. Resolved version-only conflicts in package.json and package-lock.json by taking main's 22.18.0, then re-bumped to 22.19.0 via npm version --no-git-tag-version. Token files auto-merged cleanly this round; verified structurally by chainId+lowercased address rather than diff position: entry count 1041 -> 1043, and a multiset comparison of (file, chainId, address, symbol, name) shows merged == main plus exactly the two ALIGN entries, with nothing on main missing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp
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.
Requested by Josh Salinas · Slack thread
Summary
Add 2 token entries to the default list — Aligned (
ALIGN) on Ethereum and Base.0x50614CC8e44F7814549c223aA31db9296e58057c0x53f39e5C53EE40bbc3Da97C3B47BD2968d110a8DBoth entries use the metadata from CONS-3105 verbatim (name, symbol, decimals,
logoURI), per the repo convention inCLAUDE.mdto use the ticket's metadata. Appended to the end ofsrc/tokens/mainnet.jsonandsrc/tokens/base.json. Version is now22.19.0. (Originally22.11.0→22.12.0;mainhas since published22.12.0in #2556,22.13.0in #2557,22.14.0in #2558,22.15.0in #2564,22.16.0in #2568 and22.18.0in #2571, so this has been re-bumped five times to stay on the next free minor — see "Merged with main" below.)Verification
node scripts/checksum.js 0x50614CC8e44F7814549c223aA31db9296e58057c 0x53f39e5C53EE40bbc3Da97C3B47BD2968d110a8DreportsOKfor both, exit 0. The address strings are committed byte-for-byte as verified.src/tokens/before this change, and no entry used the symbolALGIN/ALIGNor the nameAlignedon any chain.yarn testwas not run, because it cannot run in this environment.buildList()callsbridgeUtils.chainify(), which fetcheshttps://api-polygon-tokens.polygon.technology— a host this environment's egress blocks. That fails the mochabefore allhook, so all tests error out before any assertion executes. It fails identically on a clean checkout ofmainwith zero changes, so it is a sandbox limitation and says nothing about this diff. I did not check a "yarn testpasses" box rather than claim a green run I could not observe.Substitute checks run locally instead:
scripts/checksum.json both new addresses (above).src/tokens/— all parse cleanly.src/tokens/*.json(1043 entries, post-merge; reads the chain files directly, skipschainify) for case-insensitivechainId+address,chainId+symbol, andchainId+namecollisions — the same three invariants the test suite asserts.origin/main— see "Merged with main".GitHub Actions
Testsis the authoritative signal on this PR — it runs the realyarn testwith working network egress. Please treat its result, not my local run, as the gate.Reviewer notes
1. Symbol is
ALIGN— ticket and chain agree, nothing to settle. CONS-3105 specifiesALIGN, and both contracts reportsymbol()=ALIGNon-chain, on Ethereum and Base alike. The ticket and the on-chain metadata match, so there is no symbol divergence here. This PR originally carriedALGIN; the requester confirmedALIGNin the originating Slack thread, and both entries have been corrected toALIGNinsrc/tokens/mainnet.jsonandsrc/tokens/base.jsonbefore merge. Because the correction lands inside this still-unmerged PR rather than editing an entry already published in the list, it is not an "update" for versioning purposes — the version stays a single minor bump and no major bump is required.2. Field-by-field divergence between ticket and chain:
symbolALIGNALIGNALIGN(ticket)nameAlignedAligned TokenAligned(ticket)Tokensuffix, which is normal for display names in this listdecimalsOn-chain values came from
eth_callforsymbol()/name()/decimals()through the entry-gateway RPC passthrough for chainIds 1 and 8453 (all HTTP 200, no BigQuery fallback needed), and were independently corroborated against BigQueryuniswap-allium.{ethereum,base}.erc20_tokens.3. This is a Coinbase roadmap addition, not a live listing. It is being added ahead of / independent of a live Coinbase listing, so please weigh it on that basis rather than assuming listed status.
4. Cross-chain identity is well established. The Base contract is a canonical OP-Stack
OptimismMintableERC20whoseremoteToken()/l1Token()both point at the Ethereum address in this PR, and whosebridge()is Base'sL2StandardBridgepredeploy0x4200000000000000000000000000000000000010. The L1 bridge escrow balance on mainnet (326,555,038 ALIGN held by0x3154Cf16ccdb4C6d922629664174b904d80F2C35) equals Base'stotalSupply()exactly, to the wei. The mainnet contract is an EIP-1967 proxy with a singleUpgradedevent at its deploy block — never upgraded since.Merged with main
mainhas moved seven times while this PR sat unreviewed, and it has now gone un-mergeable five times. Each timeorigin/mainwas merged into this branch (a merge commit, per this repo's convention): #2556 (e63761b), #2557 (742ad30), #2558 (a6fd393), #2564 (2f7d74d) and now5e32e2c— day 24 of this PR being open, still with zero reviews.Two commits have landed on
mainsince the last resolution (2f7d74d,22.15.0), both authored byclaude[bot]:af570f1add: ONE (2026-09-08)22.16.05e32e2cadd: SOFID (2026-09-10)22.18.0The token has not been shipped by hand, and no other open PR carries it. Two checks, both against the current
origin/mainrev (5e32e2c), fetched explicitly rather than read from a stale local ref:main. Neither ALIGN address, nor the symbolALIGN, nor the nameAligned, appears anywhere undersrc/tokens/— verified case-insensitively, with a control pattern (USDC, which matches in 5 files) confirming the greps do match known-present entries, so the negative is trustworthy.ALIGNand the nameAligned. add: ALIGN (2026-08-17) #2554 is the only open PR that carries them. No diff came back empty, so the negative covers the whole set rather than silently skipping PRs.So this remains a genuine addition, not a supersede.
This round the conflict was in
package.json/package-lock.json, not in the token files. Becausemainhad moved to22.18.0while this branch still claimed22.16.0, the two sides wrote different version strings and git raised a real conflict for once — the opposite of the silent auto-merge that bit the previous four rounds. Both conflict hunks were version-only; they were resolved to main's22.18.0and the branch was then re-bumped withnpm version --no-git-tag-version, sopackage-lock.jsonwas regenerated rather than hand-edited.The token files auto-merged cleanly this round. #2568 touched only
bnb.jsonand #2571 touchedmainnet.jsonandsolana.json; of those, onlymainnet.jsonis also touched by this PR, and the ALIGN entry there sits mid-array rather than at the tail where #2571 appended, so the two edits never met.bnb.jsonandsolana.jsontook main's changes verbatim. That auto-merge was not taken on trust — a clean merge can still fuse or drop an entry — so the result was checked structurally bychainId+ lowercasedaddressrather than by diff position:main(#2568)ONE),bnb.json0x6bf62ca91e397B5A7d1D6bCe97D9092065d7A510main(#2571)SOFID),mainnet.json0x0CB6d03B0aC88A463F67B7Ad99f9f3ec4678092Emain(#2571)SOFID),solana.jsonAPhcqtzE73es3KAGiVksZFMLGwJDiAey5qZKUrQHEHfSALIGN)0x50614CC8e44F7814549c223aA31db9296e58057cALIGN)0x53f39e5C53EE40bbc3Da97C3B47BD2968d110a8DNo overlap on
chainId+address,chainId+symbolorchainId+name, so keeping both sides is correct.Three details worth a reviewer's eye:
mainand this branch write an identical version string, git auto-mergespackage.jsonwith no conflict, and twice that left this branch carrying no effective bump at all. The guard is to re-readversionfrompackage.jsonon the default branch explicitly after every merge rather than inferring anything from the absence of a conflict. Measured this round:mainis at22.18.0(not the22.16.0this branch claimed, and not the22.16.0that add: ONE (2026-09-08) #2568 left behind — add: SOFID (2026-09-10) #2571 moved it again). Re-bumped to22.19.0, the next free minor above the measured value, and confirmed no existing git tag holds it.mergeTokenListsgroups entries by${chainId}-${address.toLowerCase()}and collapses each group withlodash.mergebefore the duplicate assertions run, so a duplicated entry passes the suite silently. Verified offline instead:src/tokens/parses.chainId+addresscollision (the pre-existing, known-harmless byte-identical B3 duplicate at0xB3B32F9f8827D4634fE7d973Fa1034Ec9fdDB3B3, untouched), 4chainId+symbol(LITon chain 1,AVAandWBTCon chain 501000101,B3on 8453), 1chainId+name— all pre-existing onmain. The resolution introduces none.(file, chainId, address, symbol, name)tuple againstorigin/mainshows the merged tree holds exactly main's 1041 entries plus the 2 ALIGN entries. The "present onmainbut missing in the merge" set is empty — in particular add: ONE (2026-09-08) #2568's and add: SOFID (2026-09-10) #2571's entries survived intact.scripts/checksum.js.origin/mainis the two ALIGN entries plus the version bump, nothing else (4 files).{and"chainId":lines above the<<<<<<<marker, so stripping markers would have fused two token objects into one; deleting only the marker lines produced a parse error at the seam, and "fixing" that by adding the missing comma produced valid JSON that silently dropped an entry (last-key-wins, no duplicate, no failing assertion). No token-file conflict arose this round, so there were no markers to mis-resolve — the entry-count and multiset checks above are what confirm nothing was fused or lost regardless.Linear tickets
🤖 Generated with Claude Code
https://claude.ai/code/session_01TgCpMmmtJZDzGuRawLF4Sp