Issues and PRs welcome.
deno task lint:strict # deno lint + arch + invariants + paths + types
deno task test:unit # 217 unit tests
deno task test:packages # 71 per-package tests, each in isolation
deno task test:protocol # protocol invariants (trustless / attacks / quorum)
deno task test:frost # FROST threshold signing
deno task test:regtest # full Cashu + Lightning E2E (Docker)
deno task test:pentest # penetration tests
deno task test:example # all example apps
./scripts/test-all.sh --local # what CI runs in Phase 1CI gates ./scripts/test-all.sh --local plus test:all:docker for the
relay + regtest phases. Run the local script before pushing.
Enforced by lint and CI; full detail in CLAUDE.md.
- Full TypeScript strict; no
--no-checkanywhere in test tasks. - No
ascasts oranyinsrc/orpackages/.unknownonly at HTTP / JSON boundaries with a// type-lint-allow:reason. - Architecture lint enforces a single shared root (
core-runtime); no other inter-package dependencies (deno task lint:arch). - Every threat-model invariant must have a test
(
deno task lint:invariants). console.*in non-UI code routes through logTape via@anchr/core-runtime/logger.
The full E2E suite needs Bitcoin regtest, a Cashu mint, a Nostr relay, and Blossom storage:
docker compose up -d && sleep 25 && ./scripts/init-regtest.sh
deno task test:regtestThe /test-regtest and
/test-tlsn runbooks document the
deep flow.