git clone --recurse-submodules https://github.com/LSUDOKO/Wraith.git
cd Wraithcontracts/lib/forge-std is a submodule — if you already cloned without it, run git submodule update --init.
Requirements: Foundry, Go ≥ 1.25, Node ≥ 22.
CI runs all four. Run them locally first:
cd contracts && forge test -vv
cd extension && go vet ./... && go test ./... -race
cd keeper && npm ci && npm test
cd frontend && npm ci && npx tsc --noEmit && npm run buildConventional Commits are load-bearing: semantic-release derives the version, changelog, and GitHub release from them on every merge to main. Get the type wrong and the release is wrong.
feat(contracts): add order expiry sweep
fix(keeper): stop re-ticking a cancelled order
docs: clarify the FDC trust boundary
chore(deps): bump viem
Scopes: contracts, extension, keeper, frontend, or omit for repo-wide changes.
feat→ minor versionfix→ patch versionfeat!or aBREAKING CHANGE:footer → major versiondocs,chore,test,ci,refactor→ no release
These exist because breaking them breaks the product. AGENTS.md carries the same list for AI agents.
-
An order's plaintext terms must never exist outside the user's browser or the enclave. Never log them, never return them in a result, never put them on-chain in the clear.
extension/internal/enclave/enclave_test.goasserts the settlement payload contains no trace of the threshold — keep that true. -
OPTypeandOPCommandstrings must match byte-for-byte betweencontracts/src/WraithOrders.solandextension/internal/config/config.go. A mismatch producesunsupported op typeat runtime, not at compile time. Never rename one side alone. -
extension/internal/triggerstays dependency-free. It is the logic that decides whether to move someone's money, and it must be testable without a TEE, a chain, or a network. -
Do not weaken
execute()verification. The registry-backed signer check,actionIdreplay guard,contractAddrbinding,status == 1check, and order-liveness checks each stop a specific attack.docs/TRUST.mdexplains which. -
Money-path changes need a failing-case test, not just a happy-path one.
-
Do not touch
setExtensionId()/_getExtensionId(). The FCC registry wiring is prescribed by Flare's scaffold and marked DO NOT MODIFY.
Do not open a public issue for a vulnerability. See SECURITY.md.