Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 1.69 KB

File metadata and controls

48 lines (37 loc) · 1.69 KB

Contributing

Issues and PRs welcome.

Running the test suite

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 1

CI gates ./scripts/test-all.sh --local plus test:all:docker for the relay + regtest phases. Run the local script before pushing.

Quality bar

Enforced by lint and CI; full detail in CLAUDE.md.

  • Full TypeScript strict; no --no-check anywhere in test tasks.
  • No as casts or any in src/ or packages/. unknown only 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.

Local infrastructure

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:regtest

The /test-regtest and /test-tlsn runbooks document the deep flow.