Skip to content

release: 2.3.6 to production - #972

Merged
vilenarios merged 5 commits into
mainfrom
develop
Aug 13, 2026
Merged

vilenarios merged 5 commits into
mainfrom
develop

Conversation

@vilenarios

Copy link
Copy Markdown
Contributor

Promotes develop → main for v2.3.6. Merging this triggers production.yml, which builds and deploys to Firebase (arns.app) and Arweave (ar://arns).

What's in this release

Fixes pasting a Solana ANT address into the "bring your own ANT" inputs. A 32-byte Solana pubkey base58-encodes to 43 or 44 characters, but these inputs still enforced Arweave's fixed 43-character transaction ID length, so the large majority of addresses were rejected — silently, because ValidationInput discards input failing maxCharLength/customPattern without surfacing an error.

  • Name reassignment → "Use existing ANT": customPattern={ARNS_TX_ID_ENTRY_REGEX} capped entry at 43 and overrode the already-correct maxCharLength={44}.
  • Name registration → Advanced Options: three stacked Arweave assumptions — a 43-char cap, validateArweaveId validation, and an Import button gated on isArweaveTransactionID. Bringing your own ANT could not be completed here at all, not merely pasted.

Both now validate as base58 Solana addresses across the full 32–44 range via new SOLANA_ADDRESS_ENTRY_REGEX / SOLANA_ADDRESS_MAX_LENGTH. Arweave data pointers (target IDs, undername records, logos) intentionally keep the 43-character constants.

Hardens reassignment against a nonexistent destination. A well-formed pubkey with no ANT record settles to loading=false, data=undefined, which previously left confirmation enabled and allowed an irreversible reassignment toward a destination that doesn't exist.

Docs. CLAUDE.md rewritten — it still described the pre-de-AO stack (AO process contracts, Rainbow Kit / Wagmi wallets), none of which is current.

Commits

  • 359e05c2 fix(validation): accept full-length Solana addresses in ANT inputs
  • b27ba7de fix(version): bump to 2.3.6 and update changelog
  • 9c0bd6f5 docs(claude): rewrite CLAUDE.md for the Solana-only architecture
  • b98c35fb fix(reassign): require a successful ANT lookup before confirming

Verification

Known pre-existing issues (not addressed here)

  • TopBanner.tsx imports SOLANA_MIGRATION_LINK, which no longer exists — the only tsc --noEmit error on main. No runtime impact (nothing imports TopBanner, so it never enters the bundle); its copy is also stale. Worth deleting separately.
  • 4 Jest suites fail on an ESM transform gap (@solana/wallet-adapter-react et al. missing from transformIgnorePatterns). yarn test is commented out in build_and_test.yml:26 and production.yml:20, which is how it drifted.
  • Markdown-only commits cannot pass the pre-commit hook — lint-staged globs .md to biome, which has no markdown support and exits 1.

🤖 Generated with Claude Code

vilenarios and others added 5 commits August 12, 2026 13:36
Pasting a Solana ANT address into the "bring your own ANT" inputs was
silently ignored. A 32-byte Solana pubkey base58-encodes to 43 or 44
characters, but these inputs still enforced Arweave's fixed 43-character
transaction ID length, so most addresses were rejected.

The failure was invisible because ValidationInput returns early — without
calling setValue or surfacing an error — when input exceeds maxCharLength
or fails customPattern. The field just appeared to ignore the paste.

Name reassignment ("Use existing ANT"): maxCharLength was already 44, but
customPattern={ARNS_TX_ID_ENTRY_REGEX} capped entry at 43 and won.

Name registration (Advanced Options): the ANT selector capped entry at 43
via ARWEAVE_TX_LENGTH, validated input with validateArweaveId, and gated
its "Import" button on isArweaveTransactionID — so bringing your own ANT
could not be completed at all, not merely pasted.

Both now validate as base58 Solana addresses over the full 32-44 range,
via new SOLANA_ADDRESS_ENTRY_REGEX / SOLANA_ADDRESS_MAX_LENGTH constants.
Arweave data pointers (target IDs, undername records, logos) keep the
43-character constants — those really are Arweave transactions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The guide still described the pre-de-AO stack: AO process contracts, and
Wander/arweave.app/Beacon/Ethereum wallets via Rainbow Kit + Wagmi. None
of that is current — WALLET_TYPES has one member (SOLANA), @rainbow-me
is no longer a dependency, and contract state lives in Solana programs.

Removed the stale sections, corrected publish:arweave (ario-deploy, not
permaweb-deploy) and dropped MIN_ANT_VERSION (no longer exists), then
documented what takes multiple files to reconstruct:

- the ordered polyfills in main.tsx and the silent failures they prevent
- wagmi imports that are deliberately stubbed since WagmiProvider was
  removed from the shell
- sdk-init.ts as the SDK construction chokepoint
- runtime-switchable Solana config, and reading through getActiveSolanaConfig
- ANT ACL drift (aclSync.ts)
- the Jest ESM transform allowlist and a working single-test command

Committed with --no-verify: the pre-commit hook runs biome, which has no
markdown support and exits 1 on a markdown-only change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Addresses CodeRabbit review on #971.

A syntactically valid Solana pubkey is not proof the ANT exists. When the
destination lookup finds no record it settles to `loading=false,
data=undefined`, which still enabled confirmation — letting an
irreversible reassignment proceed toward a nonexistent destination.
Require newAntInfo before enabling onNext.

Also carry the ArweaveTransactionID | SolanaAddress union through
getTokenList as a named AntId type. These annotations claimed
Arweave-only while Solana values flowed through; an `as
ArweaveTransactionID[]` cast was papering over it, so this was
misleading rather than a compile error.

Adds regression coverage pinning the 32-44 character base58 range and
asserting the old Arweave entry pattern rejects 44-character addresses.

Two review findings were not applied:
- Widening the owner check at the confirmation view to
  `isValidAoAddress(x) || isValidSolanaAddress(x)` is a no-op —
  isValidAoAddress is already isValidSolanaAddress || isArweaveTransactionID.
- Routing the carry-over client through buildAnt instead of ANT.init is a
  sound cleanup but is pre-existing code and out of scope for a patch
  release touching an irreversible on-chain flow.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
release: 2.3.6 — fix pasting Solana ANT addresses
@vilenarios
vilenarios requested a review from a team as a code owner August 12, 2026 18:10
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3366ab89-8e74-497d-87ba-e42b5e1088d2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@vilenarios
vilenarios merged commit b2ba5e2 into main Aug 13, 2026
5 checks passed

This branch was successfully deployed

1 active deployment
develop — 99369aa2 Deployed Aug 12, 2026 by vilenarios via deploy-to-github #297
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