| name | leanspec-development |
| description | Development workflows, commands, publishing, CI/CD, changelog management, and contribution guidelines for LeanSpec. Use when contributing code, fixing bugs, setting up dev environment, running tests or linting, working with the monorepo structure, looking up build/dev/test/publish/format/lint commands, preparing releases, publishing to npm, bumping versions, syncing package versions, testing dev builds, troubleshooting npm distribution, updating changelogs, triggering CI/CD workflows, monitoring build status, debugging failed runs, managing artifacts, checking CI before releases, or researching AI agent runners. Triggers include any development, scripting, publishing, CI/CD, changelog, or runner research task in this project. |
| metadata | {"internal":true} |
LeanSpec Development Skill
Unified guide for all LeanSpec development: coding, commands, publishing, CI/CD, and runner research.
Quick Navigation
Core Principles
- Use pnpm — Never npm or yarn
- DRY — Extract shared logic, avoid duplication
- Test What Matters — Business logic and data integrity, not presentation
- Leverage Turborepo — Smart caching (19s → 126ms builds)
- i18n is MANDATORY — Every user-facing string needs both en AND zh-CN (see I18N.md)
- Follow Rust Quality — All code must pass
cargo clippy -- -D warnings
Commands
Daily Development
pnpm install
pnpm dev
pnpm dev:watch
pnpm dev:web
pnpm dev:desktop
pnpm build
pnpm build:rust
pnpm build:rust:release
pnpm typecheck
pnpm test
pnpm test:watch
pnpm test:coverage
pnpm test:rust
pnpm format
pnpm cli
Validation
pnpm pre-push
pnpm pre-release
⚠️ Always run pnpm typecheck before marking work complete.
Rust
pnpm build:rust
pnpm build:rust:release
pnpm check:rust
pnpm lint:rust
pnpm format:rust
pnpm format:rust:check
cargo build --manifest-path rust/Cargo.toml
node scripts/copy-rust-binaries.mjs --debug
Documentation
pnpm docs:dev
pnpm docs:build
Desktop
pnpm dev:desktop
cd packages/desktop
pnpm bundle:linux
pnpm bundle:macos
pnpm bundle:windows
Critical Rules
Rules enforced by hooks or CI:
- Light/Dark Theme — ALL UI must support both themes
- i18n — Update BOTH en and zh-CN → I18N.md ⚠️ commonly forgotten
- Regression Tests — Bug fixes MUST include failing-then-passing tests
- Rust Quality — Must pass
cargo clippy -- -D warnings
- Rust Params Structs — Functions with >7 args must use a params struct (enforced by
clippy.toml)
- Use shadcn/ui — No native HTML form elements
- cursor-pointer — All clickable items must use
cursor-pointer
See RULES.md for complete requirements.
Publishing & Releases
Production Release (Recommended)
npm version patch
pnpm sync-versions
pnpm pre-release
git add .
git commit -m "chore: release vX.X.X"
git push --follow-tags
gh release create vX.X.X --title "vX.X.X" --notes "Release notes here"
Development Release
gh workflow run publish.yml --field dev=true
gh workflow run publish.yml --field dev=true --field dry_run=true
npm install -g lean-spec@dev
lean-spec --version
Version Management
- Root
package.json is the single source of truth for versions
pnpm sync-versions propagates to all packages (including Rust crates)
- CI automatically validates version alignment
- Never manually edit package versions — use
npm version + pnpm sync-versions
Distribution Architecture
LeanSpec uses optional dependencies for platform-specific Rust binaries:
| Type | Packages |
|---|
| Main (published) | lean-spec, @leanspec/mcp, @leanspec/ui |
| Platform (published) | @leanspec/cli-{platform}, @leanspec/mcp-{platform} (5 platforms each) |
| Internal (not published) | @leanspec/desktop, @leanspec/ui-components |
⚠️ Platform packages MUST be published before main packages. The CI workflow handles this automatically.
See PUBLISHING.md and NPM-DISTRIBUTION.md for details.
Changelog
Update CHANGELOG.md following Keep a Changelog format and Semantic Versioning.
Discovering Changes
git log $(git describe --tags --abbrev=0)..HEAD --oneline
git diff $(git describe --tags --abbrev=0)..HEAD --stat
Entry Format
Only include shipped/implemented changes — not planned specs, drafts, or WIP.
Add under ## [Unreleased] using these categories: Added, Changed, Fixed, Deprecated, Removed, Security, Technical.
- **Feature Name** ([spec 123](https://web.lean-spec.dev/specs/123)) - Brief description
- Sub-bullet with implementation details
Writing Style
- Bold feature name followed by description
- Link related specs when applicable
- Present tense — "Adds support for..." not "Added"
- Be specific — include command names, flag names, component names
- Group related changes under single bullet with sub-bullets
- Include breaking changes with Breaking: prefix
Creating a Release
- Move entries from
[Unreleased] to new version: ## [X.Y.Z] - YYYY-MM-DD
- Add release link at bottom:
[X.Y.Z]: https://github.com/codervisor/lean-spec/releases/tag/vX.Y.Z
CI/CD (GitHub Actions)
All workflow interactions use the gh CLI. Check status before triggering new runs; minimum 30s between polls.
Available Workflows
| Workflow | File | Triggers | Purpose |
|---|
| CI | ci.yml | push, PR to main | Build, test, lint (Node.js + Rust) |
| Publish | publish.yml | release, manual | Publish to npm (all platforms) |
| Desktop Build | desktop-build.yml | push, PR, manual | Build Tauri desktop apps |
| Copilot Setup | copilot-setup-steps.yml | push, PR, manual | Setup environment for Copilot agent |
Quick Reference
gh run list --limit 10
gh run list --workflow ci.yml --limit 5
gh run view <run-id>
gh run watch <run-id>
gh workflow run ci.yml
gh workflow run publish.yml --field dev=true
gh run view <run-id> --log-failed
gh run rerun <run-id> --failed
gh run download <run-id>
gh run download <run-id> --name ui-dist
See CI-WORKFLOWS.md, CI-COMMANDS.md, and CI-TROUBLESHOOTING.md for details.
Runner Research
Research AI agent runners to keep LeanSpec's runner registry current as the ecosystem evolves.
Workflow
- Read current state:
rust/leanspec-core/src/sessions/runner.rs (RunnerRegistry::builtins())
- Read catalog: runners-catalog.md
- Research via
web_search: Config format changes, CLI changes, new env vars, new capabilities, deprecations, new runners
- Compare & identify gaps: Cross-reference findings against registry
- Report: Minor updates → update catalog directly; major changes → create a spec
Runner Tiers
- Tier 1 (high priority): Claude Code, Copilot, Cursor, Windsurf, Codex, Gemini
- Tier 2 (medium): Kiro, Amp, Aider, Goose, Continue, Roo Code
- Tier 3 (monitor): Droid, Kimi, Qodo, Trae, Qwen Code, OpenHands, Crush, CodeBuddy, Kilo, Augment
Key Source Files
| File | Purpose |
|---|
rust/leanspec-core/src/sessions/runner.rs | Runner registry with detection config |
schemas/runners.json | JSON schema for custom runner config |
packages/cli/templates/_shared/agents-components/ | AGENTS.md template components |