You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
3.2 KiB
Markdown
68 lines
3.2 KiB
Markdown
+++
|
|
title = "nbd claude-md command"
|
|
priority = 6
|
|
status = "done"
|
|
ticket_type = "feature"
|
|
dependencies = []
|
|
+++
|
|
Add `nbd claude-md` subcommand that prints a ready-to-paste CLAUDE.md snippet for adopting `nbd` in any project. The snippet content is maintained as a source file and baked into the binary at compile time via `include_str!`.
|
|
|
|
## Motivation
|
|
|
|
Every project that wants to use `nbd` needs the same boilerplate in its CLAUDE.md: what `nbd` is, how to invoke it, the create/update/done workflow, and the key guidelines. Without this command, that block has to be written by hand and tends to drift out of date as `nbd` evolves. By owning the canonical snippet in the `nbd` source tree and embedding it into the binary, the snippet stays in sync with the tool automatically — projects just run `nbd claude-md >> CLAUDE.md` when they adopt or upgrade `nbd`.
|
|
|
|
## Snippet file
|
|
|
|
Create `src/claude_md_snippet.md`. This is a plain markdown file, checked into the repository, that contains the CLAUDE.md section any adopting project should paste in. It should cover:
|
|
|
|
- One-sentence description of `nbd`.
|
|
- Initialisation (`nbd init`).
|
|
- The four core commands with examples (`create`, `list`, `read`, `update`).
|
|
- The `nbd ready` command for finding unblocked tickets.
|
|
- The workflow (create before starting → set in_progress → set done).
|
|
- Guidelines: always `--json`, priority scale, type choices, dep usage.
|
|
|
|
The file is written for a project where `nbd` is installed in PATH (i.e. not via `cargo run`). It should be self-contained — no references to the `nbd` crate internals.
|
|
|
|
## Binary embedding
|
|
|
|
In `main.rs`, embed the snippet at compile time:
|
|
|
|
```rust
|
|
const CLAUDE_MD_SNIPPET: &str = include_str!("claude_md_snippet.md");
|
|
```
|
|
|
|
`include_str!` resolves paths relative to the source file (`src/`), so this looks for `src/claude_md_snippet.md`. Cargo rebuilds the binary automatically when the file changes.
|
|
|
|
## Command implementation
|
|
|
|
Add `ClaudeMd` variant to `Commands` in `main.rs`:
|
|
|
|
```rust
|
|
/// Print a CLAUDE.md snippet for adopting nbd in a project.
|
|
ClaudeMd,
|
|
```
|
|
|
|
The `--json` global flag applies:
|
|
- Without `--json`: `print!("{CLAUDE_MD_SNIPPET}")` — raw markdown, suitable for redirect (`nbd claude-md >> CLAUDE.md`).
|
|
- With `--json`: output `{"snippet": "<escaped content>"}` — for programmatic consumption.
|
|
|
|
No store access needed — this command is pure output from the embedded constant. It does not call `find_nbd_root()`.
|
|
|
|
## No display.rs changes needed
|
|
|
|
The output is a single `print!` call in the command handler. No tabular formatting.
|
|
|
|
## Tests
|
|
|
|
Integration tests (`tests/integration.rs`):
|
|
- `nbd claude-md` exits zero and stdout is non-empty.
|
|
- stdout contains key strings (`"nbd"`, `"CLAUDE.md"` or similar section header, `"--json"`).
|
|
- `nbd claude-md --json` exits zero and stdout is valid JSON with a `"snippet"` key whose value is a non-empty string.
|
|
- `nbd claude-md` works even when run from a directory with no `.nbd/` (no `find_nbd_root` call).
|
|
|
|
## Files touched
|
|
- `src/claude_md_snippet.md` — new file; the canonical snippet content
|
|
- `src/main.rs` — `include_str!` constant, `ClaudeMd` command variant and handler
|
|
- `tests/integration.rs` — integration tests
|
|
- `README.md` — mention `nbd claude-md` in the Usage section |