agentleFS
gear-foundationgear-foundation/vara-skills/skills/sails-ethexe-architecture/SKILL.md

sails-ethexe-architecture

Skill17 starsChanged 7 months agoMITView on GitHub

Use when a builder needs to design or review architecture for a Sails ethexe app with dual-transport, payable methods, Solidity interface generation, or Ethereum-style events. Do not use for standard Gear/Vara Sails apps without ethexe.

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If the app does NOT need ethexe, use ../sails-architecture/SKILL.md instead.

    line 12
  2. Very specific:

    Write the result to docs/plans/YYYY-MM-DD-<topic>-architecture.md.

    line 24
  3. Distinctive:

    Document the transport choice per method in the architecture artifact.

    line 39
  4. Distinctive:

    Do method names, parameter types, and return types map cleanly to Solidity types?

    line 64
  5. Distinctive:

    If the design depends on signals or system gas reservation, it cannot run under ethexe.

    line 74
  6. Distinctive:

    If the spec is missing, stop and create it first.

    line 97
  7. Distinctive:

    Do not design around signals or system gas reservation — they are gated out.

    line 98
  8. Distinctive:

    Do not assume all methods need dual transport — name the strategy per method.

    line 99
  9. Very specific:

    Do not exceed 3 #[indexed] fields per event variant.

    line 100
  10. Distinctive:

    Do not use reserved event variant names.

    line 101
  11. Distinctive:

    Keep implementation detail out of the architecture note unless it changes the public contract.

    line 102

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Sails Ethexe Architecture

Goal

Turn an approved spec into an ethexe-specific architecture artifact before implementation, covering transport strategy, payable design, event model, Solidity interface generation, and the constraints the ethexe feature imposes.

If the app does NOT need ethexe, use ../sails-architecture/SKILL.md instead.

Inputs

  • ../../references/sails-ethexe-patterns.md — ethexe diff table, transport rules, type requirements, gated syscalls
  • ../../references/sails-header-wire-format.md — interface ID stability, entry ID derivation
  • ../../references/sails-idl-v2-syntax.md — IDL v2 annotations
  • ../../assets/architecture-template.md
  • ../../references/vara-domain-overview.md
  • ../../references/sails-program-and-service-architecture.md
  • ../../references/gear-messaging-and-replies.md

Write the result to docs/plans/YYYY-MM-DD-<topic>-architecture.md.

Architecture Decisions Specific to Ethexe

Transport Strategy

The architecture must name the transport per service and per method:

PatternWhen to use
Dual transport (default #[export])Methods callable from both Gear programs and EVM
Scale-only (#[export(scale)])Internal program-to-program calls, no EVM exposure needed
Ethabi-only (#[export(ethabi)])Methods only meaningful from EVM side
Payable (#[export(ethabi, payable)])Methods that accept value — requires ethabi

Document the transport choice per method in the architecture artifact. Dual transport is the default but not always desirable — scale-only methods reduce the ABI surface.

Payable Design

  • Which methods accept value? Name each one.
  • What happens to received value? (stored in program, forwarded, refunded on error?)
  • Non-payable methods panic if value > 0 — is this acceptable for all non-payable paths?
  • Constructors can also be payable — document if the program requires initial funding.

Event Model

Decide between:

  • emit_event() — standard Gear event (visible to Gear tooling, explorers)
  • emit_eth_event() — Ethereum-style event (visible to EVM tooling, indexed topics)
  • Both — if the same event must be visible to both ecosystems (requires two separate emissions)

For emit_eth_event():

  • Which fields are #[indexed]? (max 3 per variant, these become topics)
  • Are any reserved variant names used? (forbidden list in reference)
  • Is the event inventory aligned with what sails-sol-gen will produce in the Solidity interface?

Solidity Interface

sails-sol-gen generates Solidity contract interfaces from the IDL. Architecture must consider:

  • Will EVM consumers use the generated Solidity interface directly?
  • Do method names, parameter types, and return types map cleanly to Solidity types?
  • Are payable and indexed annotations in the IDL correct for the generated interface?

Gated Syscalls

Three syscalls are unavailable under ethexe:

  • Syscall::signal_from() — no signal handling
  • Syscall::signal_code() — no signal handling
  • Syscall::system_reserve_gas() — no system gas reservation

If the design depends on signals or system gas reservation, it cannot run under ethexe.

Workspace Structure

Ethexe apps use a separate workspace (rs/ethexe/ in the Sails repo). The architecture must name:

  • Whether this is a new ethexe workspace or an addition to an existing one
  • The dependency pattern: sails-rs = { ..., features = ["ethexe"] } for deps, build-deps, and dev-deps
  • Whether the build script needs features = ["ethexe", "wasm-builder"]

Review Checklist

  • Is the transport strategy (scale/ethabi/dual) explicit per method?
  • Are payable methods named, and is value handling documented?
  • Is the event model clear (Gear events vs eth events vs both)?
  • Are #[indexed] fields chosen and within the 3-field limit?
  • Are there any signal or system_reserve_gas dependencies? (incompatible)
  • Are service names PascalCase and free of Solidity reserved keywords?
  • Is interface ID stability considered for contract evolution?
  • Does the Solidity interface generation produce the expected ABI?
  • Are type requirements met? (types in ethabi methods must be ABI-encodable)

Guardrails

  • If the spec is missing, stop and create it first.
  • Do not design around signals or system gas reservation — they are gated out.
  • Do not assume all methods need dual transport — name the strategy per method.
  • Do not exceed 3 #[indexed] fields per event variant.
  • Do not use reserved event variant names.
  • Keep implementation detail out of the architecture note unless it changes the public contract.
  • Route implementation to ../sails-ethexe-implementer/SKILL.md after architecture approval.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.