docs: comprehensive README accuracy pass — verified against every line of code#233
Merged
Conversation
Verified every claim against source code via 13 parallel code-reading delegates (one per crate, ~72k lines total) + 4 rounds of crossfire review (codex CLI + opus subagents). Supported NIPs table: - Add NIP-05, NIP-09, NIP-10, NIP-17, NIP-50, NIP-98 (all implemented) - Fix NIP-29 status: 9021-9022 are implemented, only 9009 deferred Why Sprout table: - Fix 'approval gates' claim: not implemented (WF-08), marked planned Architecture diagram: - Add S3/MinIO as fourth backend dependency - Fix relay label: channel/DM/media/workflow REST (not 'admin API') - Expand Postgres/Redis labels to reflect actual data Crate Map: - Add sprout-sdk, sprout-media, sprout-cli (existed but undocumented) - Fix all 12 crate descriptions against actual code - sprout-workflow: list all 5 trigger types, remove 'approval gates' - sprout-relay: add Blossom media upload - sprout-pubsub: add presence, typing, rate limiting - sprout-core: add zero-I/O, Schnorr verification, channel types - sprout-auth: add NIP-98, rate limiting - sprout-db: list actual data domains (not just 3 of 13) - sprout-mcp: drop hard tool count (code has 43/44 discrepancy) - sprout-test-client: list 8 E2E suite names Configuration table: - Add 17 missing env vars with verified defaults from config.rs - Add SPROUT_TOOLSETS (critical for MCP operators) - Add SPROUT_RELAY_PUBKEY (required by proxy + workflow fallback) - Fix SPROUT_PUBKEY_ALLOWLIST description (NIP-42 pubkey-only scope) MCP Tools section: - Document toolset system (default/channel_admin/dms/canvas/etc.) - Note 25 tools active by default, SPROUT_TOOLSETS=all for full suite Development section: - Add sprout-cli to 'Running a specific crate' examples
Verified by codex CLI, Claude Opus, Gemini 3.1 Pro, and a 12-reviewer flock that checked every line of the README against source code. Fixes: - 'single binary' → 'Pure Rust backend' (7 distinct binaries exist) - NIP-29 'kinds 9000-9008' → '9000-9002, 9005, 9007-9008' (9003/9004/9006 don't exist) - sprout-sdk dep list: add sprout-acp (was missing) - 'relay applies schema on startup' → 'just migrate; just setup runs migrations' - 'Waits for all services' → 'Waits for core services (Postgres, Redis, Typesense)' - E2E test list: add 'media extended' (8 files, 7 were listed) - Add missing SPROUT_MINT_RATE_LIMIT env var (default 50)
This was referenced Apr 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The README had accumulated inaccuracies as the codebase grew. Features were claimed that aren't implemented, crates existed that weren't documented, env vars were missing from the config table, and descriptions had drifted from reality.
How this was verified
Two rounds of adversarial review:
Round 1: 13 AI delegates each read every single line of their assigned crate(s) (~72,000 lines total across all 17 crates) and compared against the README. Findings were synthesized, applied, then crossfire-reviewed through 4 rounds (codex CLI + opus subagents) until both approved at 9–10/10.
Round 2: A 12-reviewer flock (each assigned specific README sections) + codex CLI + Claude Opus + Gemini 3.1 Pro independently verified every line of the updated README against source code. This caught 7 remaining inaccuracies that Round 1 missed — including a false "single binary" claim, an overstated NIP-29 kind range, and a missing crate dependency. All fixes were verified by codex CLI (final rating: 8/10, APPROVE).
What changed
README.md only, no code changes.
Round 1 — Critical fixes
RequestApprovalalways fails at runtime with "not yet implemented — see WF-08". Now marked(approval gates: planned).Round 1 — Supported NIPs table
Added 6 implemented NIPs that were missing from the table:
/.well-known/nostr.json)e/ptag resolution)POST /api/tokensbootstrap only)Round 1 — Crate Map
sprout-sdk,sprout-media,sprout-cliwith new "Shared libraries" sectionsprout-relay: "admin routes" → "channel/DM/media/workflow REST, Blossom media upload"sprout-core: added zero-I/O constraint, Schnorr verification, channel/presence typessprout-db: "events, channels, API tokens" → lists all 9 data domainssprout-auth: added NIP-98, rate limitingsprout-pubsub: added presence tracking, typing indicators, rate limitingsprout-workflow: lists all 5 trigger types, removes false "approval gates" claimsprout-mcp: dropped hard tool count (code has 43/44 discrepancy), lists actual tool categoriessprout-huddle: added webhook verification, in-memory session trackingsprout-audit: "hash chain" → "SHA-256 hash chain"sprout-test-client: lists 8 E2E suite namesRound 1 — Configuration table
config.rs: CORS, health port, metrics, connection limits, media/S3, pubkey allowlist, send buffer, UDS, JWKS URISPROUT_TOOLSETS— critical for MCP operators (controls which of the 7 toolsets are active)SPROUT_RELAY_PUBKEY— required bysprout-proxy, also used as fallback auth bysprout-workflowSPROUT_PUBKEY_ALLOWLISTdescription — narrowed to NIP-42 pubkey-only scope (API token and Okta JWT bypass)Round 1 — MCP Tools section
default(25 tools active out of the box),channel_admin,dms,canvas,workflow_admin,identity,forumsSPROUT_TOOLSETS=allguidanceRound 1 — Development section
sprout-clito "Running a specific crate" examplesRound 2 — Fixes from crossfire review
7 additional inaccuracies caught by the 12-reviewer flock and crossfire:
sprout-sdkdep list — addedsprout-acp(was missing; confirmed incrates/sprout-acp/Cargo.toml)just migrate;just setupruns migrations automatically" — relay only auto-applies audit schema, notschema/schema.sqldev-setup.shonly waits for 3 of 7 servicesmedia extended(e2e_media_extended.rswas missing from the 8-file list)SPROUT_MINT_RATE_LIMITenv var (default50) — was intokens.rsbut missing from config tableWhat's NOT in this PR