Implement qbit remove with lockfile update #29

Open
opened 2026-01-03 23:40:22 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-01-03 23:40:22 +00:00 (Migrated from github.com)

Part of #11

User Story

As a developer, I want to remove qbit packages from my project so I can clean up unused dependencies.

Design

Command Interface

qctl qbit remove <package>

# Examples:
qctl qbit remove @qrun/auth-sso
qctl qbit remove @qrun/reports --force  # Skip dependency check

Workflow

  1. Check if package exists in lockfile
  2. Check if other packages depend on it (unless --force)
  3. Remove from qbits.lock
  4. Delete from vendor/qbits/ directory
  5. Print summary

Files to Create/Modify

File Action Description
qctl-qbit/src/main/java/io/qrun/qctl/qbit/RemoveCommand.java Create Picocli command for qbit remove
qctl-qbit/src/main/java/io/qrun/qctl/qbit/lock/LockfileIO.java Modify Add remove entry method
qctl-qbit/src/main/java/io/qrun/qctl/qbit/QbitCommand.java Modify Register RemoveCommand

Error Cases

Scenario Exit Code Message
Package not installed 5 (NOT_FOUND) Package @qrun/foo is not installed
Has dependents 8 (CONFLICT) Cannot remove: @qrun/bar depends on @qrun/foo
Vendor dir missing 0 (success) Warn but continue

Implementation Tasks

  • Create RemoveCommand with Picocli annotations
  • Add --force flag to skip dependency check
  • Implement reverse dependency lookup in lockfile
  • Add LockfileIO.removePackage(name) method
  • Implement vendor directory cleanup
  • Handle missing vendor files gracefully (warn, don't fail)
  • Register RemoveCommand in QbitCommand.subcommands
  • Add unit tests for dependency check logic
  • Add integration test for remove workflow

Acceptance Criteria

  • qbit remove @qrun/auth-sso removes package
  • Lockfile entry is removed
  • Vendor directory is cleaned up
  • Error if package has dependents (without --force)
  • --force bypasses dependency check
  • Graceful handling of missing vendor files
Part of #11 ## User Story As a developer, I want to remove qbit packages from my project so I can clean up unused dependencies. ## Design ### Command Interface ```bash qctl qbit remove <package> # Examples: qctl qbit remove @qrun/auth-sso qctl qbit remove @qrun/reports --force # Skip dependency check ``` ### Workflow 1. Check if package exists in lockfile 2. Check if other packages depend on it (unless `--force`) 3. Remove from `qbits.lock` 4. Delete from `vendor/qbits/` directory 5. Print summary ### Files to Create/Modify | File | Action | Description | |------|--------|-------------| | `qctl-qbit/src/main/java/io/qrun/qctl/qbit/RemoveCommand.java` | Create | Picocli command for `qbit remove` | | `qctl-qbit/src/main/java/io/qrun/qctl/qbit/lock/LockfileIO.java` | Modify | Add remove entry method | | `qctl-qbit/src/main/java/io/qrun/qctl/qbit/QbitCommand.java` | Modify | Register `RemoveCommand` | ### Error Cases | Scenario | Exit Code | Message | |----------|-----------|---------| | Package not installed | 5 (NOT_FOUND) | `Package @qrun/foo is not installed` | | Has dependents | 8 (CONFLICT) | `Cannot remove: @qrun/bar depends on @qrun/foo` | | Vendor dir missing | 0 (success) | Warn but continue | ## Implementation Tasks - [ ] Create `RemoveCommand` with Picocli annotations - [ ] Add `--force` flag to skip dependency check - [ ] Implement reverse dependency lookup in lockfile - [ ] Add `LockfileIO.removePackage(name)` method - [ ] Implement vendor directory cleanup - [ ] Handle missing vendor files gracefully (warn, don't fail) - [ ] Register `RemoveCommand` in `QbitCommand.subcommands` - [ ] Add unit tests for dependency check logic - [ ] Add integration test for remove workflow ## Acceptance Criteria - [ ] `qbit remove @qrun/auth-sso` removes package - [ ] Lockfile entry is removed - [ ] Vendor directory is cleaned up - [ ] Error if package has dependents (without --force) - [ ] `--force` bypasses dependency check - [ ] Graceful handling of missing vendor files
Sign in to join this conversation.