6 Commits (04b659ee7c69a283f7889201895858dd93eb9d21)

Author SHA1 Message Date
Elijah Voigt 05beff7752 feat(nbd): split archive/closed — archive=archived, closed=cancelled [feb901]
`nbd archive` now sets status to `archived` (completed, soft-deleted)
instead of `closed`. The `closed` status is reserved for tickets that
will not be completed (cancelled, superseded, won't-fix).

Both statuses count as resolved for dependency purposes and are excluded
from `nbd list`, `nbd ready`, and `nbd next` by default.

Changes:
- Add `Status::Archived` variant (serialises as "archived")
- `cmd_archive`: sets `Status::Archived` instead of `Status::Closed`
- `parse_status`: add "archived" arm
- `cmd_list`, `cmd_ready`, `cmd_next`: exclude/resolve `Archived`
- `display`, `graph`, `filter`: add `Archived` arm to `status_str`
- Tests: rename/update archive tests, add archived/closed test variants
- Docs: update README.md and CLAUDE.md status tables and descriptions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
Elijah Voigt 7e311d6b47 feat(nbd): add backlog status to tickets [c12091]
Adds a new `backlog` Status variant for tickets that are created but
intentionally deferred. Backlog tickets are excluded from `nbd list`,
`nbd ready`, and `nbd next` by default, but unlike `done` and `closed`
they do not count as resolved for dependency purposes — a ticket whose
dependency is `backlog` remains blocked.

Visible via `--all` or `--filter status=backlog`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
Elijah Voigt deecdba592 feat(nbd): add archive command and Closed status [1939a7]
Add Status::Closed variant serialised as "closed", providing a
soft-delete for tickets that should be hidden from normal listings.

- nbd archive <id>: sets status to closed (sugar for update --status closed)
- nbd list: excludes closed tickets by default (same as done)
- nbd list --all: bypasses default status exclusion, shows everything
- nbd list --filter status=closed: shows only closed tickets
- Closed tickets count as resolved for dependency purposes (unblock dependents)
- nbd ready / nbd next: closed tickets excluded from actionable set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
Elijah Voigt d6d2cd91d5 feat(nbd): exclude done tickets from nbd list by default [92e45b]
nbd list now hides done tickets unless the caller explicitly provides a
status filter. Pass --filter status=* to see all tickets or
--filter status=done to see only completed ones.

- Add matches_status and matches_except_status to TicketFilter
- Update cmd_list to apply implicit done-exclusion when no status filter given
- Update List command help text
- Add unit tests for new filter methods
- Add integration tests for the new default behaviour
- Update README usage section
3 months ago
Elijah Voigt dbab0f466c feat(nbd): wire --filter flag into list, ready, and migrate commands [887344]
Add repeatable --filter KEY=VALUE option to nbd list, nbd ready, and
nbd migrate. Filters are parsed into a TicketFilter and applied in each
command handler. Different keys are ANDed; same key with multiple values
is ORed; values support glob wildcards.

- store: add skipped field to MigrateReport; migrate_tickets accepts
  a &TicketFilter and skips non-matching tickets
- display: format_migrate_report shows optional Skipped line;
  format_migrate_report_json includes skipped key
- filter: suppress dead_code on is_empty/has_status_filter (public API
  reserved for future done-exclusion feature)
- tests: update MigrateReport literals and migrate_tickets call sites;
  add unit tests for skipped formatting; add 14 integration tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
Elijah Voigt e5cb1fb8e2 feat(nbd): implement TicketFilter module with glob matching [c2a024]
Add src/filter.rs with TicketFilter struct, parse_filters(), and a
hand-rolled glob_matches() function supporting * wildcards. Different
keys are ANDed; same key, multiple values are ORed. Status and type
matching is case-insensitive; priority and title are case-sensitive.

Adds 21 unit tests covering glob edge cases, AND/OR semantics,
is_empty(), and has_status_filter().
3 months ago