claude skill tweaks, bugs triaged, projects updated

quotesdb
Elijah Voigt 3 months ago
parent 7e311d6b47
commit 347580e5df

@ -13,6 +13,7 @@
- [ ] Local-first app development - [ ] Local-first app development
## Interactive Learning and Education ## Interactive Learning and Education
- [ ] Git worktrees, how do use please
- [ ] How to structure a co-op profit sharing worker owned business - [ ] How to structure a co-op profit sharing worker owned business
- [ ] Hands-on: Markov Chains - [ ] Hands-on: Markov Chains
- [ ] Hands-on: Vector Databases - [ ] Hands-on: Vector Databases

@ -3,7 +3,8 @@ name: work
description: work on the highest priority thing description: work on the highest priority thing
--- ---
* Use nbd to choose the highest priority issue with no outstanding dependencies. * If a ticket ID or description of a ticket is provided, look for that ticket.
* If no ticket/description is provided, use nbd next to choose the ticket to work on.
* Thoroughly investigate the relevant parts of the codebase to ensure you understand the problem and how to implement the solution as describe in the ticket. * Thoroughly investigate the relevant parts of the codebase to ensure you understand the problem and how to implement the solution as describe in the ticket.
* Implement the plan in the selected ticket. * Implement the plan in the selected ticket.
* Once complete validate changes with cargo fmt, cargo check, cargo clippy, and cargo test. * Once complete validate changes with cargo fmt, cargo check, cargo clippy, and cargo test.

@ -0,0 +1,97 @@
+++
title = "Print tickets in markdown format instead of key-value table"
priority = 5
status = "todo"
ticket_type = "feature"
dependencies = []
+++
## Goal
When a ticket is printed to stdout (e.g. by `nbd read`, `nbd create`, `nbd archive`, `nbd next`, `nbd update` without `--json`), it should be rendered as markdown with TOML frontmatter — the same format used by `--ftype md` files on disk — rather than the current key-value table.
`--json` output is unaffected.
## Current output (`nbd read <id>`)
```
ID: a3f9c2
Title: Fix login bug
Body: Users cannot log in with email +
Priority: 8
Status: in_progress
Type: bug
Dependencies: b7d41e, c9e823
```
## Target output
```
+++
title = "Fix login bug"
priority = 8
status = "in_progress"
ticket_type = "bug"
dependencies = ["b7d41e", "c9e823"]
+++
Users cannot log in with email +
```
The `id` field is not in the frontmatter on disk (filename is the source of truth), but for display purposes it should appear as a comment or additional line. Recommended approach: add `id = "a3f9c2"` as the **first key** in the frontmatter so it's immediately visible:
```
+++
id = "a3f9c2"
title = "Fix login bug"
priority = 8
status = "in_progress"
ticket_type = "bug"
dependencies = ["b7d41e", "c9e823"]
+++
Users cannot log in with email +
```
## Files to change
### `src/display.rs`
Replace `format_ticket` with a markdown-rendering implementation. The simplest approach reuses `serialize_markdown` from `src/store.rs`, adding `id` to the frontmatter output.
Option A (preferred): expose `serialize_markdown` from `store.rs` as `pub(crate)` and call it from `display.rs`, prepending the `id` line to the TOML frontmatter block.
Option B: duplicate the logic in `display.rs` as a display-specific formatter that includes `id`.
The `print_ticket` function should call the new formatter.
### `src/tests.rs`
Update any unit tests for `format_ticket` that check the old key-value table format. They should now expect TOML frontmatter.
### `tests/integration.rs`
Update any integration tests that check the plain-text output of `nbd read`, `nbd create`, etc.
## Commands affected
Any command that calls `display::print_ticket`:
- `nbd create` (non-JSON path)
- `nbd read` (non-JSON path)
- `nbd archive` (non-JSON path)
- `nbd next` (non-JSON path, single ticket)
- `nbd update` currently calls `print_diff`, so it is **not** affected
## Validation
```sh
cargo fmt && cargo check && cargo clippy && cargo test
cargo run -- create --title "Test ticket" --body "Some body text" --priority 7 --type bug
# Output should be:
# +++
# id = "<id>"
# title = "Test ticket"
# priority = 7
# status = "todo"
# ticket_type = "bug"
# dependencies = []
# +++
# Some body text
```

@ -0,0 +1,58 @@
+++
title = "Change graph cycle marker from [cycle] to *"
priority = 3
status = "todo"
ticket_type = "task"
dependencies = []
+++
## Goal
When `nbd graph` renders a node that has already been visited (a node appearing in multiple branches of the tree), it currently labels the repeat occurrence as `[cycle]`. This label is misleading — the node isn't truly in a cycle, it's simply appearing twice in the tree because it's depended on from multiple places. Change the marker to `*` to indicate "this ticket appears elsewhere in the tree".
## Current output
```
a3f9c2 [todo] Fix login bug
├── b7d41e [in_progress] Add rate limiting
│ └── c9e823 [todo] Write tests
└── c9e823 [cycle]
```
## Target output
```
a3f9c2 [todo] Fix login bug
├── b7d41e [in_progress] Add rate limiting
│ └── c9e823 [todo] Write tests
└── c9e823 *
```
## Files to change
### `src/display.rs`
In the `render_node` function (around line 409), change the cycle rendering line from:
```rust
append_line(out, &format!("{prefix}{connector}{id} [cycle]"));
```
to:
```rust
append_line(out, &format!("{prefix}{connector}{id} *"));
```
### README.md
Update the `nbd graph` section example to replace `[cycle]` with `*` in the documentation.
## Validation
```sh
cargo fmt && cargo check && cargo clippy && cargo test
# Create two tickets that share a dependency, then graph them
cargo run -- graph
```
Any test that checks for `[cycle]` in graph output needs updating to expect `*` instead.

@ -0,0 +1,51 @@
+++
title = "Update claude-md snippet to show --json on all commands"
priority = 4
status = "todo"
ticket_type = "task"
dependencies = []
+++
## Goal
The `nbd claude-md` command emits `src/claude_md_snippet.md` verbatim. The current snippet shows core commands without `--json`, contradicting the guideline at the bottom that says to always pass it.
## What to change
In `src/claude_md_snippet.md`, update the **Core commands** section so every example includes `--json`:
```sh
# Create a new ticket (use --ftype md for a human-readable body)
nbd create --title "Add OAuth login" --type feature --priority 7 --ftype md --json
# List all open tickets (sorted by priority)
nbd list --json
# Read a specific ticket
nbd read <id> --json
# Update a ticket
nbd update <id> --status in_progress --json
nbd update <id> --status done --json
```
Also update the **Workflow** numbered list to use `--json` in every command:
```
1. **Before starting** — create a ticket: `nbd create --title "..." --ftype md --json`
2. **When starting** — mark it in progress: `nbd update <id> --status in_progress --json`
3. **When done** — mark it complete: `nbd update <id> --status done --json`
```
The `nbd ready` and `nbd next` sections should also include `--json`.
## Files
- `src/claude_md_snippet.md` — the only file that needs changing
## Validation
```sh
cargo run -- claude-md | grep -c '\-\-json'
```
The count should go up after the change. All existing tests should still pass.

@ -0,0 +1,88 @@
+++
title = "Split archive/closed: archive=done, closed=cancelled"
priority = 6
status = "todo"
ticket_type = "bug"
dependencies = []
+++
## Problem
Currently `nbd archive` sets a ticket's status to `closed`. This conflates two distinct intents:
- A ticket that **was completed** and is being retired from the active list
- A ticket that **will not be completed** (e.g. cancelled, superseded, won't-fix)
## Desired semantics
| Status | Meaning | Resolved (unblocks deps)? | Visible in `nbd list` by default? |
|---|---|---|---|
| `archived` | Completed and soft-deleted from view | Yes | No |
| `closed` | Won't be completed (cancelled/won't-fix) | Yes (avoids deadlock) | No |
Both statuses resolve dependencies, so a ticket depending on an `archived` or `closed` ticket becomes unblocked. This matches current behaviour for `closed`.
## Changes required
### `src/ticket.rs`
Add `Archived` variant to `Status`:
```rust
pub enum Status {
#[default]
Todo,
InProgress,
Done,
Closed,
Archived, // new
}
```
Serialises as `"archived"`.
### `src/main.rs`
- `parse_status`: add `"archived" => Ok(Status::Archived)` arm and update error message
- `cmd_archive`: change `ticket.status = Status::Closed``ticket.status = Status::Archived`
- `cmd_list`: exclude `Status::Archived` alongside `Done` and `Closed` in the default filter path
- `cmd_ready` / `cmd_next`: treat `Status::Archived` as resolved (count it in `done_ids`)
- Update the `Archive` command docstring to say it sets status to `archived` not `closed`
### `src/display.rs`
- `status_str`: add `Status::Archived => "archived"` arm
### `src/graph.rs`
- `status_str` (internal helper): add `Status::Archived => "archived"` arm
### README.md
- Update the Status table to show `archived` as a valid status
- Update `nbd archive` description to say it sets status to `archived`
- Update the note about `archived` vs `closed` semantics
### CLAUDE.md
- Update CLI Interface block to include `archived` in valid status values
- Update `nbd archive` description
### `src/tests.rs` / `tests/integration.rs`
- Update any test that checks `status == "closed"` after `nbd archive` → expect `"archived"` instead
- Add test: `nbd archive <id>` produces `"archived"` status
- Add test: a ticket with `status=closed` (manually set) is also excluded from list by default and treated as resolved
## Migration concern
Existing tickets on disk that have `status: "closed"` set by previous `nbd archive` calls will retain `closed` status. This is acceptable — `closed` remains a valid status. Users who want to distinguish can `nbd update <id> --status archived` on historical tickets, or run `nbd migrate` once the schema is updated.
## Validation
```sh
cargo fmt && cargo check && cargo clippy && cargo test
cargo run -- create --title "Test archive" --json | jq -r '.id' | xargs -I{} cargo run -- archive {} --json
# → status should be "archived"
cargo run -- create --title "Cancelled ticket" --json | jq -r '.id' | xargs -I{} cargo run -- update {} --status closed --json
# → status should be "closed"
```

@ -2,6 +2,10 @@
--- ---
`nbd claude-md` should advise using `--json` for all commands.
---
Add a new `backlog` state to tickets. Add a new `backlog` state to tickets.
The goal of this is tickets which are created but should not be worked on yet. The goal of this is tickets which are created but should not be worked on yet.
Tickets with this status do not show up by default in `nbd list`, `nbd ready`, and `nbd next`. Tickets with this status do not show up by default in `nbd list`, `nbd ready`, and `nbd next`.

@ -0,0 +1,48 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771816254,
"narHash": "sha256-vkp3iTF6QmHMvL+34DI93IiMPjS2lqcMlA1fl7nXVsQ=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "085bdbf5dde5477538e4c87d1684b6c6df56c0ad",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
Loading…
Cancel
Save