Skip to content

cli: add FTS5 content search (#406) - #517

Open
willwashburn wants to merge 6 commits into
mainfrom
issue-406-search-cli
Open

cli: add FTS5 content search (#406)#517
willwashburn wants to merge 6 commits into
mainfrom
issue-406-search-cli

Conversation

@willwashburn

@willwashburn willwashburn commented Aug 3, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds burn search <query> as a thin CLI presenter over the existing SDK FTS5 search verb.
  • Supports session scoping, positive result limits, optional human snippets, global ledger overrides, and stable JSON metadata.
  • Handles empty stores, invalid FTS syntax, invalid sessions, and unavailable content stores without panics.
  • Adds seeded CLI coverage plus deterministic human and JSON golden cases.
  • Documents the command and its JSON/truncation semantics; literal HTML-like snippet markers are tracked separately in sdk: make FTS snippet highlighting unambiguous for literal HTML #516.

Verification

  • cargo fmt --all -- --check
  • cargo test --workspace
  • cargo test -p relayburn-cli --test search
  • The gated search golden cases pass. The overall gated golden run retains a pre-existing unrelated mismatch: state-status snapshots expect archive schema version 5 while the runtime emits 6.

Fixes #406

🤖 Generated with Claude Code.

Review in cubic

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@willwashburn, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b3bb3347-4b9f-46af-837c-b7d24be762c8

📥 Commits

Reviewing files that changed from the base of the PR and between 98d5271 and 8e91ae2.

📒 Files selected for processing (7)
  • CHANGELOG.md
  • crates/relayburn-cli/src/cli.rs
  • crates/relayburn-cli/src/commands/search.rs
  • crates/relayburn-cli/src/render/ux.rs
  • crates/relayburn-cli/tests/search.rs
  • crates/relayburn-sdk/src/export_verbs.rs
  • crates/relayburn-sdk/src/ledger/content.rs
📝 Walkthrough

Walkthrough

The PR adds the burn search command with FTS5 queries, session and limit filters, snippets, JSON output, SDK serialization compatibility, documentation, and CLI integration tests.

Changes

FTS5 Search Feature

Layer / File(s) Summary
SDK search contract
crates/relayburn-sdk/src/ledger/content.rs, crates/relayburn-sdk/src/ledger.rs, crates/relayburn-sdk/src/lib.rs, crates/relayburn-sdk/src/export_verbs.rs
Adds the shared default search limit, public re-exports, and backward-compatible SearchHit identifier serialization.
CLI command wiring and execution
crates/relayburn-cli/src/cli.rs, crates/relayburn-cli/src/commands/mod.rs, crates/relayburn-cli/src/commands/search.rs, crates/relayburn-cli/src/main.rs
Registers burn search, validates arguments, invokes SDK search, and dispatches the command.
Result presentation
crates/relayburn-cli/src/commands/search.rs
Adds JSON and table output, result counts, session messages, empty-result handling, and colored or uncolored snippets.
Integration validation and documentation
crates/relayburn-cli/tests/search.rs, crates/relayburn-cli/tests/smoke.rs, tests/fixtures/cli-golden/*, README.md, CHANGELOG.md
Tests matching, filtering, limits, serialization, invalid input, and ledger errors. Documents search syntax and output behavior.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant CLI
  participant SDK
  participant ContentStore
  User->>CLI: Run burn search query
  CLI->>SDK: Submit query, session, and limit
  SDK->>ContentStore: Execute FTS5 search
  ContentStore-->>SDK: Return ranked hits
  SDK-->>CLI: Return search results
  CLI-->>User: Render table or JSON output
Loading

Poem

I’m a rabbit with queries tucked under my ear,
FTS5 finds the carrots that burrow near.
JSON hops neatly, snippets shine bright,
Session filters keep the trail in sight.
Thump, thump—search is ready tonight!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive The PR covers the CLI requirements, options, output, filtering, snippets, limits, and golden tests, but the provided changes do not verify the SDK and schema acceptance items. Provide evidence that the existing SDK FTS5 verb, content schema migration, and content-only rebuild satisfy issue #406, or include those changes and tests.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the CLI addition and its FTS5 content-search implementation.
Description check ✅ Passed The description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check ✅ Passed All listed code, documentation, compatibility, and test changes support the FTS5 search command and issue #406.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-406-search-cli

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread crates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fff3ebade3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/relayburn-sdk/src/ledger/content.rs
Comment thread crates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread crates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/relayburn-cli/src/cli.rs`:
- Around line 146-148: Update the CLI limit argument in the `limit` field to
reject values above `i64::MAX` while preserving the nonzero requirement. In the
SDK query construction around `opts.limit.max(1)` in `content.rs`, replace the
unchecked `usize`-to-`i64` cast with a checked conversion and propagate or
return the conversion failure before binding SQLite’s `LIMIT` parameter.

In `@crates/relayburn-cli/src/commands/search.rs`:
- Around line 77-84: Update the search flow feeding emit_json so it fetches
limit + 1 hits while retaining the user-requested limit value. Set truncated
based on whether the extra hit exists, then remove that extra hit before
constructing the payload in emit_json; preserve all other output fields and
behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7cd904f9-8891-4e6f-bc23-743ea63b36c1

📥 Commits

Reviewing files that changed from the base of the PR and between 962b2b7 and 98d5271.

📒 Files selected for processing (15)
  • CHANGELOG.md
  • README.md
  • crates/relayburn-cli/src/cli.rs
  • crates/relayburn-cli/src/commands/mod.rs
  • crates/relayburn-cli/src/commands/search.rs
  • crates/relayburn-cli/src/main.rs
  • crates/relayburn-cli/tests/search.rs
  • crates/relayburn-cli/tests/smoke.rs
  • crates/relayburn-sdk/src/export_verbs.rs
  • crates/relayburn-sdk/src/ledger.rs
  • crates/relayburn-sdk/src/ledger/content.rs
  • crates/relayburn-sdk/src/lib.rs
  • tests/fixtures/cli-golden/invocations.json
  • tests/fixtures/cli-golden/snapshots/search-json.stdout.txt
  • tests/fixtures/cli-golden/snapshots/search.stdout.txt

Comment thread crates/relayburn-cli/src/cli.rs
Comment thread crates/relayburn-cli/src/commands/search.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cli/sdk: burn search <query> over FTS5 content

1 participant