Skip to content

fix: IBC is closed in both directions, not exit-only - #10

Open
alexander-sei wants to merge 2 commits into
mainfrom
fix/ibc-closed-both-directions
Open

fix: IBC is closed in both directions, not exit-only#10
alexander-sei wants to merge 2 commits into
mainfrom
fix/ibc-closed-both-directions

Conversation

@alexander-sei

Copy link
Copy Markdown
Contributor

Closes PLT-898. Part of PLT-894 (removing IBC/Wormhole/airdrop remnants across all repos).

Why this one is urgent

Proposal 121 passed 2026-07-31 and set the ibc module's OutboundEnabled to false. With Props 116/120 for inbound, IBC is now closed on Sei in both directions.

This skill was written to the premise "inbound is disabled, but exiting legacy ibc/… assets still works." Prop 121 made that false everywhere it appears. And because this is an agent skill, the stale version did not just read wrong:

# ibc-bridging.md presented this as the documented exit path
seid tx ibc-transfer transfer transfer channel-0 <RECIPIENT> 1000000usei ...

An LLM reads that and emits it. The transaction fails. The file also cited only Props 115/116 and testnet #246/#247 — it had no knowledge of 120 or 121.

Approach

I rewrote ibc-bridging.md as a closed-state reference rather than deleting it — the option discussed on PLT-898. Deleting would have meant repointing four inbound links (SKILL.md, SKILL-ECOSYSTEM.md, participation-roles.md ×2), and keeping the file matches what sei-docs #51 chose with its #ibc-is-disabled section. It also keeps IBC discoverable, which matters — see the test note below.

The file's most important addition is the part users actually need: legacy ibc/… balances are neither gone nor frozen. They stay in the bank module, still transfer between Sei accounts, still work through their ERC-20 pointers, and can still be swapped on a DEX. Only the route off the chain is closed. It also now gives queries an agent can run to re-verify the parameter state rather than trusting a proposal page.

Changes

File What
ecosystem/ibc-bridging.md Rewritten. Exit command and exit-only framing gone; parameter state, what-is-no-longer-possible, and balance-status added.
ecosystem/bridges.md Inbound-only callout and decision-matrix row now cover both directions. Removes "must bridge out before activation", including for the Wormhole CosmWasm side — its Portal Bridge exit depended on outbound IBC.
ecosystem/participation-roles.md Retires the IBC relayer role: table row, the hermes/rly setup section, and the description. No packets left to relay.
precompiles/cosmwasm-bridge.md IBC precompile marked do not use; transfer reverts. Points to Bank + pointers for cross-VM access that still works.
precompiles/overview.md Corrects the claim that the legacy precompiles "remain functional" — true for Bank and pointers, not for IBC.
contracts/common-errors.md The packet-timeout entry recommended retrying with timeout-packet. Replaced with the real cause and the fact that retrying cannot succeed.
pointers/token-factory.md Removes "TokenFactory tokens can be sent via IBC immediately" — they cannot leave the chain at all.
resources.md IBC precompile row flagged, mirroring the existing ❌ retired style used for the Oracle precompile. Drops the IBC-channels link.
SKILL.md, SKILL-ECOSYSTEM.md, SKILL-CONTRACTS.md, README.md, apps-directory.md, tokens.md Router lines, precompile lists, bridge tables.

Two things I deliberately did not change

hermes.pyth.network in oracles.md and integration-defi.md. That is Pyth's Hermes price service — unrelated to the IBC relayer of the same name. A naive hermes sweep would have broken oracle integration examples.

SKILL.md's frontmatter description. tests/run.ts:181 asserts { prompt: "How do I use the IBC precompile on Sei?", expected: true }. That is a trigger test — it checks the skill gets selected, using the frontmatter description only, and it is still the correct expectation: the skill should be selected for IBC questions precisely so it can explain IBC is closed. I left the description untouched, so trigger behaviour is unchanged and the case still passes for the same reason it did before. Stripping IBC keywords out of the skill would have been the wrong fix here — silence would send the user elsewhere for an answer that is now a footgun.

Verification

  • grep -riE 'exit-only|bridge out|migrate before|before activation' across skill/ and README.mdzero hits
  • No runnable seid tx ibc-transfer command anywhere; the two remaining mentions are prose stating that it fails
  • All 196 relative markdown links resolve (the only checker hits were my regex matching ...args spread syntax inside code fences — pre-existing, not links)
  • Frontmatter still parses on all seven files with changed frontmatter, including via the same regex tests/run.ts uses
  • participation-roles.md role table and section flow verified after the row and section removal

I did not run tests/run.ts — it calls the Anthropic API with a live key and costs tokens per case. Worth running in CI or locally before merge if you want the trigger suite confirmed empirically rather than by the reasoning above.

🤖 Generated with Claude Code

Prop 121 ("Disable IBC Outbound") passed 2026-07-31 and set the ibc
module's OutboundEnabled to false. Combined with Props 116/120 for
inbound, IBC is now closed on Sei in both directions.

This skill was written to the premise "inbound is disabled, exiting
legacy ibc/... assets still works". That premise is now false everywhere
it appears. Because this is an agent skill, the stale version did not
just read wrong — ibc-bridging.md handed an agent a runnable
`seid tx ibc-transfer transfer` command as the documented exit path, and
that transaction now fails.

ecosystem/ibc-bridging.md
  Rewritten as a closed-state reference rather than deleted, so the four
  inbound links keep working. Drops the exit command and the exit-only
  framing. Adds the current parameter state with queries an agent can run
  to re-verify, an explicit "what is no longer possible" list, and the
  point that matters most for users: legacy ibc/... balances are neither
  gone nor frozen — they stay in the bank module and still move within
  Sei, including through their ERC-20 pointers. Only the route off the
  chain is closed.

ecosystem/bridges.md
  Inbound-only callout and decision-matrix row now cover both directions.
  Removes the "must bridge out before activation" claims, including for
  the Wormhole CosmWasm side, whose Portal Bridge exit depended on
  outbound IBC.

ecosystem/participation-roles.md
  Retires the IBC relayer role — table row, the hermes/rly setup section,
  and the description. There are no packets left to relay.

precompiles/cosmwasm-bridge.md, precompiles/overview.md, resources.md
  The IBC precompile (0x...1009) is marked do-not-use rather than
  "legacy": its transfer reverts. Corrects overview.md's claim that the
  legacy precompiles "remain functional", which is still true for Bank
  and the pointers but not for IBC.

contracts/common-errors.md
  Replaces the IBC packet-timeout recovery flow, which recommended
  retrying with `timeout-packet`, with the actual cause and the fact that
  retrying cannot succeed.

pointers/token-factory.md
  Removes the claim that TokenFactory denoms "can be sent via IBC
  immediately" — they cannot leave the chain at all now.

Also swept: SKILL.md, SKILL-ECOSYSTEM.md, SKILL-CONTRACTS.md, README.md,
apps-directory.md, tokens.md.

Deliberately untouched: hermes.pyth.network in oracles.md and
integration-defi.md — that is Pyth's Hermes price service, unrelated to
the IBC relayer of the same name. SKILL.md's frontmatter description is
also unchanged, so trigger selection (including the "How do I use the IBC
precompile on Sei?" case in tests/run.ts) behaves exactly as before — the
skill should still be selected for IBC questions so it can explain that
IBC is closed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Aug 2, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Documentation-only changes to an AI skill repo; no runtime code, but incorrect guidance here could mislead agents into failed IBC transactions before this fix.

Overview
Aligns the sei-skill knowledge base with Proposal 121 outbound IBC shutdown so AI assistants stop suggesting exit paths that no longer work.

ibc-bridging.md is reframed from legacy / exit-only to a closed-state reference: inbound (Props 116/120) and outbound (Prop 121) are both off, with seid queries to verify InboundEnabled / OutboundEnabled. It removes runnable seid tx ibc-transfer exit examples and adds explicit guidance that legacy ibc/... balances remain usable on Sei (bank transfers, ERC-20 pointers, DEX swaps) but cannot leave the chain.

Bridging and roles: bridges.md and skill routers (SKILL.md, SKILL-ECOSYSTEM.md, README.md) now state IBC is closed in both directions; the bridge decision matrix drops inbound-only wording and notes there is no EVM route to Cosmos via IBC. participation-roles.md drops the IBC relayer role and setup section.

Contracts / precompiles: cosmwasm-bridge.md and precompiles/overview.md mark the IBC precompile (0x1009) as do not use (transfer reverts). common-errors.md replaces packet-timeout retry advice with the real failure mode. token-factory.md, tokens.md, and apps-directory.md remove claims that IBC is still a transfer path. resources.md flags the IBC precompile like the retired Oracle precompile and drops the IBC channels link.

Reviewed by Cursor Bugbot for commit 9396ede. Bugbot is set up for automated code reviews on this repo. Configure here.

…rypoints

Two corrections from an adversarial review of the previous commit.

bridges.md — the Wormhole CosmWasm bullet claimed the legacy Portal
Bridge exit route "depended on outbound IBC and no longer works". That
causal claim is wrong. Wormhole-bridged Cosmos-side assets (USDCso, WETH,
USDCet) are not IBC vouchers and were not affected by Props 116/120/121
at all — sei-docs states this explicitly. Portal Bridge is unavailable as
a route off Sei for its own reasons, not because of the IBC parameters.
Reworded to say both facts without inventing a dependency between them,
and restored the legacy.portalbridge.com link dropped in the rewrite.

cosmwasm-bridge.md — the IBC precompile has two transfer entrypoints,
`transfer` and `transferWithDefaultTimeout`. The note named only the
first. Both call transferKeeper.Transfer (precompiles/ibc/ibc.go:169,255)
and so both revert; says so now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@alexander-sei
alexander-sei requested a review from monty-sei August 2, 2026 12:02
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