Skip to content

Rewrite README (evidence-first template, Tier 1) - #47

Merged
cole-hackman merged 1 commit into
mainfrom
docs/readme-rewrite
Aug 9, 2026
Merged

cole-hackman merged 1 commit into
mainfrom
docs/readme-rewrite

Conversation

@cole-hackman

@cole-hackman cole-hackman commented Aug 9, 2026 •

Copy link
Copy Markdown
Owner

Rewrites the README against the Tier 1 template, per the promotion decision. No traction line — the honest status line (MVP, pre-v0.1.0, real-library validation outstanding) sits where traction would.

Tradeoffs are lifted from your own ADR log, which made this the easiest repo of the seven to write honestly: the staged-changes/XML-default vs WriteGuard Sync story (ADR-0010) and Tauri-over-Electron with its real numbers (ADR-0001). The ADR-0009 agent-shipped-broken-code incident is stated plainly as a failure-mode bullet — it's the most distinctive engineering-judgment content in the repo; say the word if you'd rather not air it.

Verified while writing: CI runs the Rust suite on macOS + Windows plus frontend checks; Playwright e2e and the real-library smoke are local-only and Linux is not in the matrix (stated as a limitation and next-step). Old README's structure and claims were current and accurate — this is a restructure, not a correction pass.

Needs Cole: README-QUESTIONS.md — problem provenance line, and whether any surface still shows the ADR-0008 synthetic waveform so the README doesn't overclaim.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added questions requesting clarification on project provenance and waveform-state documentation.
    • Reworked the README to provide a concise overview of the project, setup, scope, limitations, roadmap, and technology stack.
    • Clarified the project’s local-first approach, Rekordbox parity goals, MVP status, and real-library validation requirements.

…failure modes

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 9, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The README now presents the project’s MVP status, operating model, setup, scope, tradeoffs, limitations, roadmap, and technology stack. A new question document requests clarification about project provenance and waveform documentation.

Changes

Project documentation restructure

Layer / File(s) Summary
Project positioning and operating model
README.md
The README describes the project’s Rekordbox maintenance focus, Lexicon parity goals, Tauri/Rust architecture, data access, staged mutations, tooling, and privacy controls.
Setup and project boundaries
README.md
The README adds shorter run and test instructions and defines supported scope, deferred targets, cloud exclusions, and silent-fix restrictions.
Tradeoffs, limitations, and documentation follow-up
README.md, README-QUESTIONS.md
The README documents synchronization and framework tradeoffs, limitations, failure modes, roadmap items, stack, and license. The questions document requests clarification about provenance and waveform states.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the README rewrite and identifies the evidence-first Tier 1 template.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-rewrite

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
README.md (1)

96-102: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Source or qualify the Tauri resource figures.

The ~5–10 MB binary and 30–80 MB memory figures depend on build flags, operating system, and workload. Add measurement conditions or replace them with qualitative wording. An evidence-first README should not present unqualified ranges as stable project facts.

🤖 Prompt for 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.

In `@README.md` around lines 96 - 102, Update the Tauri comparison paragraph to
remove or qualify the unsubstantiated “~5–10 MB” binary and “30–80 MB” memory
figures. If retaining them, add their measurement conditions and source;
otherwise replace them with qualitative wording while preserving the surrounding
resource-usage comparison.
🤖 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 `@README.md`:
- Around line 61-67: Update the README testing documentation to keep cargo,
pnpm, and Playwright fixture tests under the “no real library needed” section,
then move ./scripts/real-library-smoke.sh to a separate optional real-library
smoke section. Document that the script requires an explicit master.db input
path or a user-created copy, rather than implying the default path is
automatically safe or fixture-based.
- Around line 44-50: Update the README description of the MCP server and local
execution around the Rust tool service to name Claude Code as the authenticated
subscription boundary, explain that external MCP hosts route tool results
through Claude Code, and state that in-app chat sends conversation history and
tool results to Anthropic via the configured API key. Clarify that MCP library
tool output leaves the machine while distinguishing this traffic from telemetry,
and remove the ambiguous “your existing subscription” wording.

---

Nitpick comments:
In `@README.md`:
- Around line 96-102: Update the Tauri comparison paragraph to remove or qualify
the unsubstantiated “~5–10 MB” binary and “30–80 MB” memory figures. If
retaining them, add their measurement conditions and source; otherwise replace
them with qualitative wording while preserving the surrounding resource-usage
comparison.
🪄 Autofix

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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 389c9489-b0e8-412e-893f-6639106a9a7b

📥 Commits

Reviewing files that changed from the base of the PR and between 8ee0110 and 9a9fc5e.

📒 Files selected for processing (2)
  • README-QUESTIONS.md
  • README.md

Comment thread README.md
Comment on lines +44 to +50
- The same Rust tool service backs three surfaces at once: the in-app
Claude chat panel, an MCP server (`decks mcp` / `decks mcp-http`) usable
from any MCP host on your existing subscription, and a `decks tools call`
CLI.
- Everything runs on your machine. No telemetry; enrichment APIs
(MusicBrainz, opt-in Discogs) only fire if enabled, through a local
cache. The Anthropic key lives in the OS keychain.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Repo files (top-level):\n'
git ls-files | sed -n '1,120p'

printf '\nREADME around lines 1-90:\n'
if [ -f README.md ]; then
  cat -n README.md | sed -n '1,90p'
else
  fd -a '^README\.md$' . | while read -r f; do echo "===== $f ====="; cat -n "$f" | sed -n '1,90p'; done
fi

printf '\nSearch for Claude/MCP/Anthropic/network/telemetry terms:\n'
rg -n -i 'Claude|anthropic|telemetry|network|subscription|MCP|mcp|MusicBrainz|Discogs|keychain|api' README.md . --glob '!node_modules' --glob '!dist' --glob '!build' | sed -n '1,240p'

Repository: cole-hackman/decks

Length of output: 42575


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Relevant source excerpts:\n'
for f in \
  apps/desktop/src-tauri/src/claude_agent.rs \
  apps/desktop/src-tauri/src/lib.rs \
  crates/agent-tools/src/mcp.rs \
  apps/desktop/src/agent/useAgent.ts \
  apps/desktop/src-tauri/capabilities/default.json
do
  if [ -f "$f" ]; then
    echo "===== $f ====="
    wc -l "$f"
    if [ "$f" = "README.md" ]; then
      cat -n "$f" | sed -n '40,54p;116,125p'
    elif [ "$f" = "apps/desktop/src-tauri/capabilities/default.json" ]; then
      cat -n "$f" | sed -n '1,220p'
    else
      rg -n -C 4 'claude|Claude|anthropic|ClaudeCode|get_claude_code_status|mcp|http|MCP|library|staged|tool' "$f" | sed -n '1,260p'
    fi
  fi
done

Repository: cole-hackman/decks

Length of output: 37798


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Antropics SDK usage:\n'
rg -n -C 3 'Anthropic|`@anthropic`|apiKey|client|messages\.stream|stream_claude_code_chat|getApiKey' apps/desktop/src apps/desktop/src-tauri/src crates/agent-tools/src/mcp.rs README.md docs/MCP.md 2>/dev/null | sed -n '1,260p'

printf '\nRelevant docs around Claude keys/subscription/network:\n'
for f in README.md docs/MCP.md docs/STATUS.md docs/UI_AUDIT.md CLAUDE.md
do
  if [ -f "$f" ]; then
    echo "===== $f ====="
    rg -n -C 4 'Claude|Anthropic|api key|subscription|network|API traffic|MCP|telemetry|local|keychain' "$f" | sed -n '1,220p'
  fi
done

printf '\nWeb search for Claude Code MCP network behavior and Anthropic API billing:\n'
web_search "Claude Code MCP server sends tool output to Anthropic API billing Anthropic key Claude code external host"

Repository: cole-hackman/decks

Length of output: 40396


🌐 Web query:

Claude Code MCP tool results sent to Anthropic API billing Anthropic API key Claude Code MCP server tool_output

💡 Result:

When using Claude Code with Model Context Protocol (MCP) servers, tool usage is integrated into your standard Anthropic API billing [1][2]. There is no separate "MCP billing" category; instead, the interaction consumes tokens as part of the normal request-response lifecycle [1][3]. How billing works for Claude Code MCP usage: 1. Token Consumption: You are billed for the tokens consumed by your API requests, which include the tool definitions, tool calls (tool_use blocks), and tool results (tool_result blocks) sent to and from the model [1][4]. 2. Context Window Impact: Because MCP tool definitions (names, descriptions, and schemas) are included in the prompt's tools parameter, they consume context window tokens [1][4]. Loading a large number of MCP tools can increase your token usage significantly [5][6]. 3. Automated Reasoning: Invoking an MCP tool as part of an automated reasoning chain initiated by your prompt counts toward your total token usage for that request, but it does not count as a separate, new prompt or turn against rate limits [3]. 4. Cost Tracking Caveats: - Built-in reporting tools (like /context in Claude Code) may report inflated token usage estimates [7][6]. This often occurs because the tool calculates costs by summing individual tool definitions separately, which incorrectly accounts for shared system instructions multiple times [7][6]. - Client-side estimates (e.g., total_cost_usd or /cost) are approximations for budgeting [2][8]. For authoritative billing, always refer to the Usage page in the Claude Console or your cloud provider's billing dashboard [2][8]. 5. Efficiency Tips: - To reduce costs, use --strict-mcp-config or pin your MCP server configurations to keep the tool surface constant across turns [4]. Changing the tool definitions mid-session can break the cache and trigger expensive "cold" rebuilds [4]. - Large toolsets can be managed by only loading the tools necessary for the current task [5]. In summary, MCP tool results are sent back to the Anthropic API as part of the ongoing conversation history, and you are billed based on the total token usage—input and output—of these interactions [1][9].

Citations:


🌐 Web query:

site:docs.anthropic.com Claude Code MCP tool results sent to Anthropic API billing

💡 Result:

Claude Code and other MCP-enabled applications do not have a separate billing category specifically for "MCP tool results." Instead, usage related to MCP tools is billed through standard Anthropic API token consumption and, where applicable, specific server-side tool costs [1]. How MCP tool usage impacts your billing: 1. Token Consumption: Using MCP tools increases the number of tokens in your API requests and responses [1]. This includes: - Tool Definitions: The tool names, descriptions, and schemas in your tools parameter consume tokens [1]. - Tool Interaction: The tool_use and tool_result content blocks sent to and from the API are counted as input and output tokens [1]. 2. Standard API Pricing: These tokens are billed at the standard rate for the Claude model you are using, just like any other API request [1]. 3. Server-Side Tool Costs: While MCP tools (which are generally client-side integrations) are billed via token volume [1], certain built-in server-side tools (like specific web search or code execution tools when used outside of free tiers) may incur additional usage-based charges that appear on your bill [2][3][1]. 4. Claude Code Specifics: If you are using Claude Code, the session usage reported in the tool is an estimate based on list prices and does not necessarily match your official bill in the Claude Console [4]. For authoritative billing information, you should always consult the Usage page in the Claude Console [4]. In summary, MCP tool results themselves do not have a unique, extra charge; they are simply part of the overall token usage generated by the conversation context [1].

Citations:


Document the MCP network and billing boundary.

decks mcp runs locally, but external MCP hosts call tool results through Claude Code under the authenticated Claude subscription, while the in-app chat sends conversation history and tool results via the Anthropic API to the configured API key. Clarify that MCP library tool output leaves the machine, distinguish this traffic from telemetry, and avoid saying Claude access comes from “your existing subscription” without naming Claude Code.

🤖 Prompt for 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.

In `@README.md` around lines 44 - 50, Update the README description of the MCP
server and local execution around the Rust tool service to name Claude Code as
the authenticated subscription boundary, explain that external MCP hosts route
tool results through Claude Code, and state that in-app chat sends conversation
history and tool results to Anthropic via the configured API key. Clarify that
MCP library tool output leaves the machine while distinguishing this traffic
from telemetry, and remove the ambiguous “your existing subscription” wording.

Comment thread README.md
Comment on lines +61 to +67
Tests run against synthetic fixture libraries in `fixtures/` — no real
library needed:

cargo test --workspace
pnpm test && pnpm typecheck && pnpm lint
pnpm e2e # Playwright
./scripts/real-library-smoke.sh # data-layer smoke vs a real master.db copy

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Separate fixture tests from the real-library smoke test.

The heading says no real library is needed, but line 67 invokes a real master.db. scripts/real-library-smoke.sh also defaults to ~/Library/Pioneer/rekordbox/master.db and does not create a copy. Move the smoke command to an optional real-library section and document the explicit input path or copy.

🤖 Prompt for 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.

In `@README.md` around lines 61 - 67, Update the README testing documentation to
keep cargo, pnpm, and Playwright fixture tests under the “no real library
needed” section, then move ./scripts/real-library-smoke.sh to a separate
optional real-library smoke section. Document that the script requires an
explicit master.db input path or a user-created copy, rather than implying the
default path is automatically safe or fixture-based.

@cole-hackman
cole-hackman merged commit e8543c1 into main Aug 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant