+++ title = "nbd ready command" priority = 7 status = "done" ticket_type = "feature" dependencies = [] +++ Add `nbd ready` subcommand that lists tickets which are actionable right now: not yet done and with all dependencies completed. ## Motivation Agent workflows need to know which tickets are unblocked. `nbd list` shows everything; `nbd ready` narrows to what can actually be started immediately. ## Approach 1. Add `Ready` variant to `Commands` enum in `main.rs`. 2. Implement `cmd_ready(json: bool)`: a. `list_tickets(root)` to fetch all tickets. b. Build a set of IDs for tickets with `status == Status::Done`. c. Filter to tickets where: - `ticket.status != Status::Done` (not already finished) - All IDs in `ticket.dependencies` are in the done-set (or the dep doesn't exist — treat missing deps as unresolved, not ready). d. Print the filtered slice using existing `display::print_list` / `print_list_json`. 3. No new store or display functions needed — reuse existing. ## Edge cases - A ticket with no dependencies and status `todo` → ready. - A ticket whose dep is `in_progress` → NOT ready. - Missing dep ID → NOT ready (treat conservatively). - Empty store → returns empty list (not an error). ## Tests Unit-style integration tests: - Three tickets: A (no deps, todo), B (dep A, todo), C (no deps, done). `nbd ready` should return only A. - After marking A done, `nbd ready` should return B. - `nbd ready --json` returns a JSON array of the ready tickets. ## Files touched - `src/main.rs` — new `Ready` variant and `cmd_ready` handler - `tests/integration.rs` — new integration tests