# Weevil Template & Package System - Complete Specification **Version:** 1.0 **Date:** February 2, 2026 **Status:** Ready for implementation --- ## Executive Summary This document specifies two complementary features for Weevil: 1. **`weevil create` (v1.1.0)** - Project scaffolding with templates 2. **`weevil add` (v1.2.0)** - Package management system Together, these enable teams to start with professional code and extend projects with community-shared components. --- ## Part 1: `weevil create` Command ### Overview **Purpose:** Generate complete FTC robot projects from templates **Version:** v1.1.0-beta.3 **Priority:** HIGH ### Command Syntax ```bash weevil create [OPTIONS] OPTIONS: --template Template to use (default: "basic") --path Where to create project (default: current dir) --force Overwrite existing directory --no-init Don't initialize git repository --dry-run Show what would be created ``` ### Templates (v1.1.0) #### Template 1: `basic` (Default) **Purpose:** Minimal starting point **Structure:** ``` my-robot/ ├── src/ │ ├── main/java/robot/ │ │ └── opmodes/ │ │ └── BasicOpMode.java │ └── test/java/robot/ │ └── .gitkeep ├── build.gradle ├── settings.gradle ├── .weevil.toml ├── .gitignore ├── README.md └── build.bat / build.sh ``` **Files:** ~10 **Code:** ~50 lines #### Template 2: `testing` (Showcase) **Purpose:** Professional testing demonstration **Includes:** - 3 subsystems (MotorCycler, WallApproach, TurnController) - 6 hardware interfaces + FTC implementations - 6 test mocks - 45 passing tests - Complete documentation (6 files) **Files:** ~30 **Code:** ~2,500 lines **Tests:** 45 (< 2 sec runtime) **Documentation:** - README.md - DESIGN_AND_TEST_PLAN.md - TESTING_GUIDE.md - TESTING_SHOWCASE.md - SOLUTION.md - ARCHITECTURE.md ### Usage Examples ```bash # Create minimal project weevil create my-robot # Create with testing template weevil create my-robot --template testing # Create in specific location weevil create my-robot --template testing --path ~/ftc-projects # Preview without creating weevil create my-robot --template testing --dry-run ``` ### Variable Substitution Templates support variables: | Variable | Description | Example | |----------|-------------|---------| | `{{PROJECT_NAME}}` | Project directory name | `my-robot` | | `{{PACKAGE_NAME}}` | Java package name | `myrobot` | | `{{CREATION_DATE}}` | ISO 8601 timestamp | `2026-02-02T10:30:00Z` | | `{{WEEVIL_VERSION}}` | Weevil version | `1.1.0` | | `{{TEMPLATE_NAME}}` | Template used | `testing` | **Example:** ```java // File: src/main/java/robot/subsystems/Example.java // Generated by Weevil {{WEEVIL_VERSION}} on {{CREATION_DATE}} package robot.{{PACKAGE_NAME}}; ``` Becomes: ```java // Generated by Weevil 1.1.0 on 2026-02-02T10:30:00Z package robot.myrobot; ``` ### Success Output ``` ✓ Created FTC project 'my-robot' using template 'testing' Next steps: cd my-robot weevil test # Run 45 tests (< 2 seconds) weevil build # Build APK weevil deploy # Deploy to robot Documentation: README.md - Project overview DESIGN_AND_TEST_PLAN.md - System architecture TESTING_GUIDE.md - Testing patterns ``` ### Implementation Notes **Storage Location:** ``` ~/.weevil/templates/ ├── basic/ │ ├── template.toml │ └── files/ └── testing/ ├── template.toml └── files/ ``` **Effort Estimate:** 2-3 days **Complexity:** MEDIUM --- ## Part 2: `weevil add` Command ### Overview **Purpose:** Add components to existing projects **Version:** v1.2.0 **Priority:** MEDIUM-HIGH ### Command Syntax ```bash weevil add [OPTIONS] OPTIONS: --force Overwrite conflicting files --merge Attempt to merge conflicts (experimental) --interactive Prompt for each conflict --dry-run Preview without adding --no-deps Don't install dependencies --dev Add as dev dependency ``` ### Package Naming Hierarchical structure: `scope/category/name/variant` **Examples:** ``` nexus/hardware/dc-motor/core nexus/hardware/dc-motor/mock nexus/hardware/dc-motor/example nexus/hardware/dc-motor/complete nexus/subsystems/wall-approach/complete nexus/examples/autonomous/simple-auto team1234/sensors/custom-lidar/core ``` **Components:** - **scope**: Publisher (nexus, team1234, etc.) - **category**: Type (hardware, subsystems, examples, testing) - **name**: Component name (dc-motor, wall-approach) - **variant**: Implementation (core, mock, example, complete) ### Standard Variants | Variant | Contents | Dependencies | |---------|----------|--------------| | `core` | Interface + FTC wrapper | None | | `mock` | Test double | Requires core | | `example` | Example OpMode | Requires core | | `complete` | All of above | Includes all variants | ### Usage Examples ```bash # Add complete package weevil add nexus/hardware/dc-motor # Add specific variant weevil add nexus/hardware/dc-motor/core weevil add nexus/hardware/dc-motor/mock # Add subsystem (auto-installs dependencies) weevil add nexus/subsystems/wall-approach/complete # Preview weevil add nexus/hardware/servo/core --dry-run # Force overwrite weevil add nexus/hardware/gyro/complete --force # Interactive resolution weevil add nexus/subsystems/turn-controller/core --interactive ``` ### Dependency Resolution Packages declare dependencies in manifest: ```toml [dependencies] "nexus/hardware/distance/core" = "^2.0.0" "nexus/hardware/dc-motor/core" = "^1.0.0" [dev-dependencies] "nexus/testing/mock-base" = "^1.0.0" ``` **Automatic Resolution:** ```bash weevil add nexus/subsystems/wall-approach/complete Installing: 1. nexus/hardware/distance/core (v2.1.0) - dependency 2. nexus/hardware/dc-motor/core (v1.2.0) - dependency 3. nexus/subsystems/wall-approach/complete (v1.0.0) ✓ Added 3 packages (15 files) ``` ### Conflict Handling #### Default (Skip) ``` ⚠ File conflicts detected: src/main/java/robot/hardware/MotorController.java (exists) Resolution: Skipping conflicting files Added: ✓ src/main/java/robot/hardware/FtcMotorController.java Skipped: ⊗ MotorController.java (already exists) ``` #### Force Mode ```bash weevil add nexus/hardware/dc-motor/core --force ⚠ Warning: --force will overwrite 2 files Continue? [y/N]: y ✓ Overwrote 2 files, added 3 files ``` #### Interactive Mode ```bash weevil add nexus/hardware/dc-motor/core --interactive Conflict: MotorController.java Options: [s] Skip (keep your file) [o] Overwrite (use package file) [d] Show diff [a] Abort Choice [s]: d Diff: --- Existing +++ Package @@ -5,3 +5,5 @@ public interface MotorController { void setPower(double power); double getPower(); + void setMode(RunMode mode); + RunMode getMode(); } Choice [s]: ``` ### Package Categories #### `hardware/*` Physical hardware abstractions **Subcategories:** - `hardware/motors/*` - Motor controllers - `hardware/sensors/*` - Sensor interfaces - `hardware/servos/*` - Servo controllers - `hardware/vision/*` - Camera systems - `hardware/imu/*` - Gyroscopes **Standard Variants:** core, mock, example, complete #### `subsystems/*` Robot subsystems built on hardware **Examples:** - `subsystems/drivetrain/*` - `subsystems/arm/*` - `subsystems/intake/*` **Standard Variants:** core, mock, example, complete #### `examples/*` Complete working examples **Subcategories:** - `examples/autonomous/*` - `examples/teleop/*` - `examples/vision/*` **Variants:** Usually standalone (no variants) #### `testing/*` Testing utilities and patterns **Examples:** - `testing/mock-hardware` - Mock collection - `testing/test-patterns` - Reusable patterns - `testing/assertions` - Custom assertions #### `utilities/*` Helper utilities **Examples:** - `utilities/math/*` - `utilities/telemetry/*` - `utilities/logging/*` ### Package Manifest **Example (`package.toml`):** ```toml [package] name = "dc-motor" scope = "nexus" category = "hardware" version = "1.2.0" description = "DC motor controller interface and FTC implementation" license = "MIT" authors = ["Nexus Workshops "] [variants] available = ["core", "mock", "example", "complete"] default = "complete" [dependencies] # Empty for base hardware [files.core] include = [ "src/main/java/robot/hardware/MotorController.java", "src/main/java/robot/hardware/FtcMotorController.java" ] [files.mock] include = ["src/test/java/robot/hardware/MockMotorController.java"] dependencies = ["core"] [files.example] include = ["src/main/java/robot/opmodes/examples/MotorExample.java"] dependencies = ["core"] [files.complete] dependencies = ["core", "mock", "example"] ``` ### Package Repository **Location:** https://packages.nxgit.dev **Structure:** ``` packages.nxgit.dev/ ├── index.json ├── nexus/ │ ├── hardware/ │ │ ├── dc-motor/ │ │ │ ├── package.toml │ │ │ ├── core.tar.gz │ │ │ ├── mock.tar.gz │ │ │ └── complete.tar.gz │ │ └── distance/... │ └── subsystems/... └── team1234/... ``` ### Implementation Notes **Effort Estimate:** 2-3 weeks **Complexity:** HIGH **Key Components:** 1. Package registry (hosted) 2. Dependency resolver 3. Conflict detector 4. File installer 5. Supporting commands (remove, search, list) --- ## Supporting Commands ### `weevil remove` Remove installed package ```bash weevil remove [--prune] [--force] ``` ### `weevil search` Search package registry ```bash weevil search Output: nexus/hardware/mecanum-drive/complete Mecanum drive system with holonomic control ★★★★★ (342 downloads) ``` ### `weevil list` List packages ```bash weevil list --installed # Show installed weevil list --available # Show all available ``` ### `weevil info` Show package details ```bash weevil info nexus/hardware/dc-motor/complete Package: nexus/hardware/dc-motor/complete Version: 1.2.0 Downloads: 1,523 License: MIT Description: DC motor controller with interface, FTC implementation, test mocks, and examples. ``` ### `weevil update` Update packages to latest versions ```bash weevil update # Update all weevil update # Update specific ``` --- ## Strategic Benefits ### For Teams - **Faster start** - Working code immediately - **Best practices** - Learn from examples - **Code reuse** - Don't reinvent wheels - **Community** - Share solutions ### For Nexus Workshops - **Authority** - Set FTC code standards - **Network effects** - More packages = more value - **Revenue** - Workshops teach patterns - **Differentiation** - Unique offering ### For FTC Community - **Quality** - Raised bar across teams - **Collaboration** - Build on each other - **Education** - Professional patterns - **Innovation** - Focus on unique solutions --- ## Success Metrics ### v1.1.0 (create) - [ ] 50+ teams use testing template in first month - [ ] Positive feedback on quality - [ ] Used in Nexus Workshops curriculum - [ ] Documentation complete ### v1.2.0 (add) - [ ] 20+ quality packages at launch - [ ] 100+ downloads first month - [ ] 5+ community packages - [ ] Active ecosystem --- ## Implementation Roadmap ### Phase 1: v1.1.0 (2-3 days) **`weevil create` command:** - [ ] Template storage system - [ ] Variable substitution - [ ] Basic template - [ ] Testing template - [ ] Git initialization - [ ] Success/error messages - [ ] Documentation - [ ] Tests ### Phase 2: v1.2.0 (2-3 weeks) **`weevil add` command:** - [ ] Package registry setup - [ ] Package manifest format - [ ] Dependency resolver - [ ] Conflict detection - [ ] File installation - [ ] Remove command - [ ] Search command - [ ] List command - [ ] 10+ launch packages - [ ] Documentation - [ ] Tests --- ## Initial Package Set (v1.2.0 Launch) **Must Have (10 packages):** 1. nexus/hardware/dc-motor/complete 2. nexus/hardware/servo/complete 3. nexus/hardware/distance/complete 4. nexus/hardware/imu/complete 5. nexus/hardware/color-sensor/complete 6. nexus/subsystems/wall-approach/complete 7. nexus/subsystems/turn-controller/complete 8. nexus/testing/mock-hardware 9. nexus/examples/autonomous/simple-auto 10. nexus/examples/teleop/basic-drive **Nice to Have (+5):** 11. nexus/hardware/mecanum-drive/complete 12. nexus/subsystems/april-tag/complete 13. nexus/examples/autonomous/complex-auto 14. nexus/utilities/telemetry/dashboard 15. nexus/testing/test-patterns --- ## Package Quality Standards **Required (All Packages):** - ✅ Valid package.toml - ✅ License specified - ✅ README included - ✅ Compiles without errors **Recommended (Verified Badge):** - ✅ Tests included - ✅ Comprehensive docs - ✅ Interface-based design - ✅ No hardcoded values - ✅ Follows naming conventions **Nexus Verified:** - All required + recommended - Professional code quality - Full test coverage - Maintained and supported --- ## Future Enhancements ### v1.3.0+ - Package signing (GPG) - Private registries - `weevil publish` command - Package mirrors - Offline mode ### v2.0.0+ - Binary packages - Pre-built libraries - Cloud builds - Team collaboration features --- ## Open Questions 1. **Versioning:** How handle breaking changes? 2. **Testing:** Require tests in packages? 3. **Licensing:** Enforce compliance? 4. **Moderation:** Who approves packages? 5. **Private packages:** Support team-private? 6. **Namespaces:** Use team numbers? 7. **Binary support:** Allow compiled code? 8. **Update notifications:** Alert on updates? 9. **Code signing:** Security/trust model? 10. **Monorepo:** Where store templates/packages? --- ## References - **npm** - Node package manager (scopes, registry) - **Cargo** - Rust package manager (semver, crates.io) - **FreeBSD Ports** - Package system inspiration - **Maven Central** - Java repository patterns - **Homebrew** - macOS package management --- ## Appendix: Complete Examples ### Example 1: Creating Project ```bash $ weevil create my-robot --template testing Creating FTC project 'my-robot'... ✓ Created directory structure ✓ Generated source files (17 files) ✓ Generated test files (4 files) ✓ Created build configuration ✓ Generated documentation (6 files) ✓ Initialized Git repository Project created successfully! Next steps: cd my-robot weevil test # 45 tests pass in < 2 sec weevil build # Build APK weevil deploy --auto # Deploy to robot Documentation: README.md - Overview DESIGN_AND_TEST_PLAN.md - Architecture TESTING_GUIDE.md - How to test ``` ### Example 2: Adding Package ```bash $ cd my-robot $ weevil add nexus/subsystems/mecanum-drive/complete Resolving dependencies... Package nexus/subsystems/mecanum-drive/complete requires: - nexus/hardware/dc-motor/core (v1.2.0) - nexus/hardware/imu/core (v2.0.0) Installing 3 packages: 1. nexus/hardware/dc-motor/core (v1.2.0) 2. nexus/hardware/imu/core (v2.0.0) 3. nexus/subsystems/mecanum-drive/complete (v2.1.0) ✓ Added 12 source files ✓ Added 8 test files ✓ Updated build.gradle Package installed successfully! Next steps: See docs/subsystems/MECANUM_DRIVE.md for usage Run weevil test to verify integration ``` ### Example 3: Handling Conflicts ```bash $ weevil add nexus/hardware/dc-motor/core ⚠ File conflict detected: src/main/java/robot/hardware/MotorController.java (exists) Options: 1. Skip conflicting files (safe, default) 2. Overwrite conflicting files (--force) 3. Interactive resolution (--interactive) 4. Abort Choice [1]: 1 Added: ✓ src/main/java/robot/hardware/FtcMotorController.java ✓ docs/hardware/DC_MOTOR.md Skipped: ⊗ src/main/java/robot/hardware/MotorController.java Package partially installed (1 file skipped) Note: Package may not work correctly if required files skipped Consider using --force or --interactive for complete installation ``` --- *End of Specification* **Status:** Ready for Implementation **Next Steps:** 1. Implement `weevil create` for v1.1.0-beta.3 2. Use testing showcase as `testing` template 3. Plan v1.2.0 package system **Contact:** eric@intrepidfusion.com **Organization:** Nexus Workshops LLC