docs: comprehensive README accuracy pass — verified against every line of code#233
Open
tlongwell-block wants to merge 1 commit intomainfrom
Open
docs: comprehensive README accuracy pass — verified against every line of code#233tlongwell-block wants to merge 1 commit intomainfrom
tlongwell-block wants to merge 1 commit intomainfrom
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
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
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 of adversarial review (codex CLI + opus subagents) until both approved at 9–10/10.
What changed
+59 / −29 lines — README.md only, no code changes.
Critical fixes
RequestApprovalalways fails at runtime with "not yet implemented — see WF-08". Now marked(approval gates: planned).Supported NIPs table
Added 6 implemented NIPs that were missing from the table:
/.well-known/nostr.json)e/ptag resolution)POST /api/tokensbootstrap only)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 namesConfiguration 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)MCP Tools section
default(25 tools active out of the box),channel_admin,dms,canvas,workflow_admin,identity,forumsSPROUT_TOOLSETS=allguidanceDevelopment section
sprout-clito "Running a specific crate" examplesWhat's NOT in this PR