6.9 KiB
AGENTS Instructions
Package Management
Package Manager: Yarn
Commands to use: yarn install, yarn add, yarn remove
Note: Do not use npm or pnpm.
This repository is a Yarn v4 monorepo with several workspaces:
app– mobile app (@selfxyz/mobile-app)circuits– zk-SNARK circuits (@selfxyz/circuits)common– shared utilities (@selfxyz/common)contracts– solidity contracts (@selfxyz/contracts)sdk/core– core TypeScript SDK (@selfxyz/core)sdk/qrcode– qrcode SDK (@selfxyz/qrcode)packages/mobile-sdk-alpha– alpha version of the SDK (@selfxyz/mobile-sdk-alpha)noir– noir circuits
Workflow
Setup
- Ensure Node.js 22.x is installed (see
.nvmrcfor exact version), then:nvm usecorepack enable && corepack prepare yarn@stable --activate- Verify:
node -v && yarn -v
- Run
yarn installonce before running any other commands. This installs root dependencies and sets up husky hooks.
Pre-PR Checklist
Before creating a PR, ensure:
Code Quality
yarn nice(or equivalent) passes in affected workspacesyarn typespasses across the repoyarn testpasses in affected packagesyarn buildsucceeds for all workspaces
AI Review Preparation
- Clear commit messages following conventional format
- PR description includes context for AI reviewers
- Complex changes have inline comments explaining intent
- Security-sensitive changes flagged for special review
Follow-up Planning
- Identify any known issues that need separate PRs
- Note any performance implications
- Document any breaking changes
Post-PR Validation
After PR creation:
Automated Checks
- CI pipeline passes all stages
- No new linting/formatting issues introduced
- Type checking passes in all affected workspaces
- Build artifacts generated successfully
Review Integration
- Address CodeRabbitAI feedback (or document why not)
- Resolve any security warnings
- Verify performance benchmarks still pass
- Confirm no sensitive data exposed in logs/comments
Commit Checks
Before committing, run the following commands:
# Fix linting and formatting issues automatically (for packages that support it)
yarn workspaces foreach -A -p -v --topological-dev --since=HEAD run nice --if-present
# Lint all packages in parallel
yarn lint
# Build all workspaces except `contracts`
yarn build
# Compile Solidity contracts (may occasionally throw a Hardhat config error)
yarn workspace @selfxyz/contracts build
# Run type-checking across the repo
yarn types
Workflow Commands
Pre-PR Validation
# Run all checks before PR - only on changed workspaces since main
# Format and lint changed workspaces (workspace-specific scripts first, then fallback to root)
yarn workspaces foreach -A -p -v --topological-dev --since=origin/main run nice --if-present
# Run global checks across all workspaces
yarn lint && yarn types && yarn build && yarn test
# Alternative: Run workspace-specific checks for changed workspaces only
# yarn workspaces foreach -A -p -v --topological-dev --since=origin/main run lint --if-present
# yarn workspaces foreach -A -p -v --topological-dev --since=origin/main run types --if-present
# yarn workspaces foreach -A -p -v --topological-dev --since=origin/main run build --if-present
# yarn workspaces foreach -A -p -v --topological-dev --since=origin/main run test --if-present
Post-PR Cleanup
# After addressing review feedback
yarn nice # Fix any formatting issues in affected workspaces
yarn test # Ensure tests still pass
yarn types # Verify type checking
Tests
-
Run unit tests where available:
yarn workspace @selfxyz/common testyarn workspace @selfxyz/circuits test# may fail if OpenSSL algorithms are missingyarn workspace @selfxyz/mobile-app testyarn workspace @selfxyz/mobile-sdk-alpha test- For Noir circuits, run
nargo test -p <crate>in eachnoir/crates/*directory. - Tests for
@selfxyz/contractsare currently disabled in CI and may be skipped.
-
E2E tests (mobile app) - Run automatically in CI/CD, not required locally:
- E2E tests execute automatically in GitHub Actions on PRs and main branch
- Local E2E testing is optional (see
app/AGENTS.mdfor local setup if needed) - Commands available:
yarn workspace @selfxyz/mobile-app test:e2e:ios/test:e2e:android
Test Memory Optimization
CRITICAL: Never create nested require('react-native') calls in tests. This causes out-of-memory (OOM) errors in CI/CD pipelines.
- Use ES6
importstatements instead ofrequire()when possible - Avoid dynamic
require()calls inbeforeEach/afterEachhooks - Prefer top-level imports over nested requires
- See
.cursor/rules/test-memory-optimization.mdcfor detailed guidelines
CI Caching
Use the shared composite actions in .github/actions when caching dependencies in GitHub workflows. They provide consistent cache paths and keys:
cache-yarnfor Yarn dependenciescache-bundlerfor Ruby gemscache-gradlefor Gradle wrappers and cachescache-podsfor CocoaPods
Each action accepts an optional cache-version input (often combined with GH_CACHE_VERSION and a tool-specific version). Avoid calling actions/cache directly so future workflows follow the same strategy.
Formatting
- Use Prettier configuration from
.prettierrcfiles. - Follow
.editorconfigfor line endings and indentation.
Commit Guidelines
- Write short, imperative commit messages (e.g.
Fix address validation). - The pull request body should summarize the changes and mention test results.
Workspace-Specific Instructions
Some workspaces have additional instructions in their own AGENTS.md files:
app/AGENTS.md- Mobile app development, E2E testing, deploymentpackages/mobile-sdk-alpha/AGENTS.md- SDK development, testing guidelines, package validationnoir/AGENTS.md- Noir circuit development
These workspace-specific files override or extend the root instructions for their respective areas.
Troubleshooting
Common Issues
Yarn Install Fails
- Ensure Node.js 22.x is installed:
nvm use - Clear Yarn cache:
yarn cache clean - Remove
node_modulesand reinstall:rm -rf node_modules && yarn install
Build Failures
- Run
yarn build:depsin affected workspace first - Check workspace-specific
AGENTS.mdfor platform requirements - For mobile app: ensure iOS/Android prerequisites are met (see
app/AGENTS.md)
Test Failures
- Check workspace-specific test setup requirements
- For mobile app tests: ensure native modules are properly mocked
- See
.cursor/rules/test-memory-optimization.mdcfor test memory issues
Type Errors
- Run
yarn typesto see all type errors across workspaces - Some packages may need to be built first:
yarn build:deps
Scope
These instructions apply to the entire repository unless overridden by a nested AGENTS.md.