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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

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

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

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

Conversation

@willwashburn

@willwashburnwillwashburn 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

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3265746b-18a7-4562-be1d-c56aaeee54a3

📥 Commits

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

📒 Files selected for processing (9)
  • CHANGELOG.md
  • README.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
  • crates/relayburn-sdk/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (5)
  • crates/relayburn-sdk/src/lib.rs
  • README.md
  • crates/relayburn-cli/src/commands/search.rs
  • CHANGELOG.md
  • crates/relayburn-cli/tests/search.rs

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 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, camelCase SearchHit fields, and checked SQLite limit conversion.
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, crates/relayburn-cli/src/render/ux.rs
Adds JSON and table output, result counts, session messages, empty-result handling, terminal-aware output, and snippet formatting.
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

Merge Risk:⚪ Minimal · up to bdca4

This change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

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 | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Linked Issues check⚠️ WarningThe CLI requirements are covered, but the changes do not show the required FTS5 schema migration, rebuild support, or SDK verb implementation [#406].Add or provide evidence for the FTS5 schema migration and content-only rebuild, and verify the SDK search verb against the CLI-golden fixture [#406].
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the main change: adding FTS5 content search to the CLI.
Description check✅ PassedThe description directly covers the search command, supported options, error handling, tests, documentation, and verification.
Out of Scope Changes check✅ PassedThe code, tests, documentation, and hardening changes support the search feature or its acceptance coverage.
✨ Finishing Touches 💡 1
📝 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-integrationdevin-ai-integrationBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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 threadcrates/relayburn-sdk/src/ledger/content.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs Outdated

@cubic-dev-aicubic-dev-aiBot 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 threadcrates/relayburn-cli/src/commands/search.rs Outdated

@coderabbitaicoderabbitaiBot 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 threadcrates/relayburn-cli/src/cli.rs
Comment threadcrates/relayburn-cli/src/commands/search.rs
Sign up for freeto 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

@willwashburn