testing-prpm-cli by pr-pm
Use when testing PRPM CLI commands locally - provides build, environment setup, execution workflow, contract testing to verify documented behavior matches implementation, and comprehensive cross-format conversion testing against local registry
Content & Writing
80 Stars
11 Forks
Updated Jan 16, 2026, 03:39 PM
Why Use This
This skill provides specialized capabilities for pr-pm's codebase.
Use Cases
- Developing new features in the pr-pm repository
- Refactoring existing code to follow pr-pm standards
- Understanding and working with pr-pm's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 351 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
--- name: testing-prpm-cli description: Use when testing PRPM CLI commands locally - provides build, environment setup, execution workflow, contract testing to verify documented behavior matches implementation, and comprehensive cross-format conversion testing against local registry --- # Testing PRPM CLI ## Overview Test PRPM CLI commands against a local registry by building the package, setting the registry URL, and invoking the CLI directly. Includes comprehensive cross-format conversion testing patterns and **contract testing** to verify documented behavior matches implementation. ## When to Use - Testing new CLI commands or features - Debugging CLI behavior - Verifying CLI changes before committing - Testing against local registry data - **Validating cross-format conversions** - **Testing new format converters** - **Contract testing: verifying documented behavior matches implementation** ## Quick Reference | Step | Command | |------|---------| | Build CLI | `npm run build --workspace=packages/cli` | | Start local registry | `npm run dev --workspace=packages/registry` | | Set local registry | `export PRPM_REGISTRY_URL=http://127.0.0.1:3111` | | Run CLI directly | `node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js <command>` | | Run via npm link | `prpm <command>` (after linking) | ## Workflow ### 1. Build the CLI (Required First Step) Always rebuild before testing to ensure you're testing current code: ```bash npm run build --workspace=packages/cli ``` ### 2. Start Local Registry Start the registry server in background: ```bash npm run dev --workspace=packages/registry & sleep 3 lsof -i :3111 # Verify it's running ``` ### 3. Configure Local Registry Point CLI to local registry instead of production: ```bash export PRPM_REGISTRY_URL=http://127.0.0.1:3111 ``` Verify it's set: ```bash echo $PRPM_REGISTRY_URL ``` ### 4. Run CLI Commands **Option A: Direct invocation (recommended for testing)** ```bash node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js search typescript node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js install some-package ``` **Option B: npm link (for interactive testing)** ```bash cd packages/cli npm link prpm search typescript ``` ## Comprehensive Conversion Testing ### Use Self-Improving Skill to Find Test Packages Before testing conversions, use the `self-improving` skill to download a diverse set of packages: ```bash # Search for packages of different types node $CLI search "claude" --limit 10 node $CLI search "cursor" --limit 10 node $CLI search "agent" --limit 10 node $CLI search "skill" --limit 10 ``` ### Create Test Directory and Install Diverse Packages ```bash mkdir -p /tmp/prpm-conversion-tests cd /tmp/prpm-conversion-tests export PRPM_REGISTRY_URL=http://127.0.0.1:3111 CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js" # Install packages of different subtypes node $CLI install @prpm/agent-builder-skill --as claude # Skill node $CLI install @prpm/creating-cursor-rules --as cursor # Cursor Rule node $CLI install @camoneart/context-engineering-agent --as claude # Agent ``` ### Supported Formats (CLI_SUPPORTED_FORMATS) Test conversions across ALL supported formats: | Format | Description | |--------|-------------| | cursor | Cursor IDE rules (.mdc) | | claude | Claude Code (skills, agents, commands) | | windsurf | Windsurf rules | | continue | Continue rules | | copilot | GitHub Copilot instructions | | kiro | Kiro steering files | | agents.md | Agents.md format | | gemini | Gemini CLI extensions | | ruler | Ruler format | | zed | Zed editor extensions | | opencode | OpenCode rules | | aider | Aider conventions | | trae | Trae rules | | replit | Replit agent rules | | zencoder | ZenCoder rules | | droid | Factory/Droid rules | ### Conversion Test Matrix Run comprehensive conversion tests: ```bash cd /tmp/prpm-conversion-tests mkdir -p /tmp/conversions CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js" # Claude Skill → All formats for format in cursor windsurf kiro gemini zed continue copilot opencode aider trae replit zencoder droid; do node $CLI convert .claude/skills/*/SKILL.md --to $format -o /tmp/conversions/skill-to-$format.md 2>&1 done # Cursor Rule → Multiple formats for format in claude windsurf gemini zed; do node $CLI convert .cursor/rules/*.mdc --to $format -o /tmp/conversions/cursor-to-$format.md 2>&1 done # Claude Agent → Multiple formats for format in cursor gemini windsurf; do node $CLI convert .claude/agents/*.md --to $format -o /tmp/conversions/agent-to-$format.md 2>&1 done ``` ### Round-Trip Testing Verify content preservation through round-trip conversions: ```bash # Claude → Cursor → Claude node $CLI convert .claude/skills/*/SKILL.md --to cursor -o /tmp/conversions/step1-cursor.mdc node $CLI convert /tmp/conversions/step1-cursor.mdc --to claude -o /tmp/conversions/step2-claude.md # Compare file sizes (expect some reduction but not dramatic) wc -c .claude/skills/*/SKILL.md /tmp/conversions/step1-cursor.mdc /tmp/conversions/step2-claude.md ``` ### Validation Checklist For each conversion, verify: - [ ] **Command succeeds** - Exit code 0, no errors - [ ] **Output file created** - File exists at specified path - [ ] **Content preserved** - Core markdown structure intact - [ ] **Format-specific frontmatter** - Correct fields for target format - [ ] **File size reasonable** - Not truncated (compare with source) ### Expected File Sizes | Conversion Type | Expected Size Ratio | |----------------|---------------------| | Claude → Cursor | ~95-100% | | Claude → Windsurf | ~95-100% | | Claude → Gemini | ~95-100% | | Claude → OpenCode | May be smaller (format limits) | | Claude → Droid | May be smaller (format limits) | | Round-trip | ~50-70% (metadata loss expected) | ### Test Report Template Document results in this format: ```markdown ## Conversion Test Report ### Test Setup - Registry: Local (port 3111) - Test packages: [list installed packages] ### Results | Source | Target | Status | Output Size | |--------|--------|--------|-------------| | Claude Skill | Gemini | Pass/Fail | X bytes | | ... | ... | ... | ... | ### Observations - [Note any issues, truncations, or unexpected behavior] ``` ## Contract Testing (CRITICAL) **Contract testing ensures documented behavior matches implementation.** This is the most important type of testing for features with configurable behavior. ### Why Contract Testing Matters The eager/lazy loading bug is a case study: documentation described a precedence chain (CLI > file > package > default), but implementation only handled CLI flags. Tests passed because they only tested the CLI flag path. **Contract testing would have caught this.** ### Contract Testing Principles 1. **Test EVERY documented behavior path, not just the happy path** 2. **Test precedence chains completely** - if docs say "A > B > C > default", test all 4 cases 3. **Test behavior WITHOUT flags** - verify defaults and configuration-driven behavior 4. **Test WITH and WITHOUT explicit settings** - don't assume flag presence ### Contract Testing Checklist For ANY feature with documented behavior: - [ ] **Read the documentation first** - what does it claim to do? - [ ] **List all behavior paths** - every if/else/default mentioned - [ ] **Create test for each path** - one test per documented behavior - [ ] **Test WITHOUT user flags** - verify package/config defaults work - [ ] **Test precedence** - verify higher-priority overrides lower - [ ] **Verify error messages match** - documented errors should occur ### Example: Eager/Lazy Loading Contract Tests Documentation states: "Precedence: CLI flag > package-level > default (lazy)" **Required tests:** ```bash # Setup test directory mkdir -p /tmp/prpm-contract-tests cd /tmp/prpm-contract-tests export PRPM_REGISTRY_URL=http://127.0.0.1:3111 CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js" # Test 1: CLI --eager flag (highest priority) rm -rf .openskills AGENTS.md node $CLI install @prpm/some-skill --as agents.md --eager # VERIFY: AGENTS.md contains activation="eager" or priority="0" grep -q 'activation="eager"\|priority="0"' AGENTS.md && echo "PASS: CLI --eager works" || echo "FAIL: CLI --eager" # Test 2: CLI --lazy flag overrides package eager rm -rf .openskills AGENTS.md # Install a package that has eager:true in prpm.json with --lazy flag node $CLI install @prpm/eager-package --as agents.md --lazy # VERIFY: Should be lazy despite package setting grep -q 'activation="lazy"\|priority="1"' AGENTS.md && echo "PASS: CLI --lazy overrides" || echo "FAIL: CLI --lazy" # Test 3: Package-level eager (NO CLI flag) - THIS IS THE BUG THAT WAS MISSED rm -rf .openskills AGENTS.md # Install a package that has eager:true in its prpm.json WITHOUT --eager flag node $CLI install @prpm/eager-package --as agents.md # VERIFY: Should be eager based on package setting grep -q 'activation="eager"\|priority="0"' AGENTS.md && echo "PASS: Package eager works" || echo "FAIL: Package eager" # Test 4: Default (lazy) when no flags and no package setting rm -rf .openskills AGENTS.md node $CLI install @prpm/normal-skill --as agents.md # VERIFY: Should be lazy by default grep -q 'activation="lazy"\|priority="1"' AGENTS.md && echo "PASS: Default lazy works" || echo "FAIL: Default" ``` ### Contract Test Template For any new feature, create tests in this format: ```markdown ## Contract Tests for [Feature Name] ### Documentation Claims: 1. [Claim 1 from docs] 2. [Claim 2 from docs] 3. [Precedence/default behavior from docs] ### Test Cases: | # | Documented Behavior | Test Setup | Expected Result | Pass/Fail | |---|--------------------|-----------| ----------------|-----------| | 1 | [Claim 1] | [How to test] | [What to verify] | | | 2 | [Claim 2] | [How to test] | [What to verify] | | | 3 | Default behavior | [No flags/config] | [Default result] | | ### Results: - All tests must pass before feature is considered complete - Document any deviations between docs and implementation ``` ### Anti-Patterns to Avoid | Anti-Pattern | Why It Fails | Correct Approach | |--------------|--------------|------------------| | Only testing with flags | Misses config/default paths | Test without flags first | | Assuming documentation is implementation | Docs may describe intent, not reality | Verify each claim with test | | Testing happy path only | Misses precedence bugs | Test all documented paths | | Skipping default behavior test | Defaults often broken | Always test "no config" case | | Not reading docs before testing | Miss documented behaviors | Read docs, list claims, test each | ## Common Mistakes | Mistake | Symptom | Fix | |---------|---------|-----| | Forgetting to build | Old behavior, changes not reflected | Run `npm run build --workspace=packages/cli` | | Missing registry env | Commands hit production registry | Set `PRPM_REGISTRY_URL` before running | | Stale npm link | Wrong version running | Re-run `npm link` after rebuilding | | Local registry not running | Connection refused errors | Start registry: `npm run dev --workspace=packages/registry` | | Testing single format only | Miss format-specific bugs | Test ALL formats in CLI_SUPPORTED_FORMATS | | No round-trip testing | Miss content loss bugs | Always verify round-trip preservation | | **No contract testing** | **Docs ≠ implementation** | **Test EVERY documented behavior** | | **Only testing with CLI flags** | **Miss config/default bugs** | **Test without flags to verify defaults** | ## One-Liner Setup ```bash npm run build --workspace=packages/cli && export PRPM_REGISTRY_URL=http://127.0.0.1:3111 ``` Then test commands: ```bash node packages/cli/dist/index.js --help ``` ## Unit Test Commands Run converter unit tests: ```bash # All converter tests npm run test --workspace=packages/converters # Specific test files npm run test --workspace=packages/converters -- --testPathPattern="file-references" npm run test --workspace=packages/converters -- --testPathPattern="security" npm run test --workspace=packages/converters -- --testPathPattern="cross-format" npm run test --workspace=packages/converters -- --testPathPattern="zed" ```
Name Size