Three things a first-time user hits, found by being one - #211
Conversation
Not from the suite. I installed the published wheel into an empty venv, built a real LangGraph agent and a real MCP server, and used them the way the READMEs say to. **1. The gateway told MCP clients to call a Python API.** `_awaiting` relayed `str(ApprovalRequired)` verbatim, and that exception carries the decorator's wording: *"run `ctrlrun approve …`, then retry inside `ctrlrun.with_approval(…)`"*. `with_approval` is a context manager. On the one path where the caller may be in any language, and is often a model reading the error as text, we were pointing at something it cannot reach. `gateway-in-5-minutes.mdx` already documents the real next step, and the gateway now says it: a human approves and **this same call runs**, because the approval is bound to the action's hash. Verified against a live gateway, not only in a test. The test asserts `with_approval` is ABSENT, because a message merely mentioning the retry would pass a positive-only check while still sending a Go client looking for Python. **2. Both adapter READMEs fail on copy-paste.** Their examples show `identity=...` as an ellipsis, which is easy to drop, and then the first call dies with `no principal is available`. The error names both fixes, which is why this is a documentation defect and not a code one. Both READMEs now say a principal is required, show the error, and say why it is fail-closed: who is acting is an authorization input, and guessing it would invent the one field a grant is matched against. **3. The README promised a browser demo that does not exist.** Three places: *"Run it in your browser with nothing installed"*, *"a browser demo that runs with no install"*, and a "Try it in your browser" link. `/try-it` redirects to the marketing page; there is no pyodide, no editor, nothing to run. It was the first link in the opening section. Removed, and the local one-liner put in its place, which is true and about as fast. The `/try-it` redirect stays so existing bookmarks do not 404. What was wrong was the promise, not the route. Signed-off-by: arpan <contact@arpanghoshal.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe documentation now describes local demo execution and principal requirements. Gateway approval errors now give MCP clients explicit approval and retry instructions. A gateway test verifies the revised message and approval request identifier. ChangesClient Guidance
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to The client guidance and MCP approval flow match the supported repository behavior, so no merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
None of these came from the suite. I installed the published wheel into an empty venv, built a real LangGraph agent and a real MCP server, and used them the way the READMEs say to.
1. The gateway told MCP clients to call a Python API
_awaitingrelayedstr(ApprovalRequired)verbatim, and that exception carries the decorator's wording:with_approvalis a Python context manager. This is the one path where the caller may be in any language, and is frequently a model reading the error as text. We were pointing it at something it cannot reach.docs/mcp/gateway-in-5-minutes.mdxalready documents the real next step, so the gateway now says it:Verified against a live gateway in front of a real MCP server, not only in a test. The test asserts
with_approvalis absent, because a message merely mentioning the retry would pass a positive-only check while still sending a Go client looking for a Python API. Run againstmainit fails with the old string.2. Both adapter READMEs fail on copy-paste
Their examples show
identity=...as an ellipsis placeholder. Drop it, as anyone adapting the snippet does, and the first call dies:The error names both fixes, which is exactly why this is a documentation defect and not a code one. Both READMEs now state the requirement, show that error, and say why it is fail-closed: who is acting is an authorization input, and a library that guessed it would be inventing the one field a grant is matched against.
3. The README promised a browser demo that does not exist
Three places: "Run it in your browser with nothing installed", "a browser demo that runs with no install", and a "Try it in your browser" link.
/try-itredirects to the marketing page. I checked it for pyodide, an editor, anything runnable: there is none. It was the first link in the opening section, so on a Show HN it is among the first things clicked.Removed, with the local one-liner in its place, which is true and about as fast. The
/try-itredirect stays so existing bookmarks do not 404 — what was wrong was the promise, not the route.What else I exercised, which was all correct
DuplicateEffectkill -9mid-flight → lease expires, blind retry refused withAmbiguousEffectnaming the exactctrlrun resolvecommand; resolve then permits the retryApprovalMismatch, nothing ranGate
Pairing
Docs are
fix/gateway-approval-message: the documented-41002example was stale in the same way.🤖 Generated with Claude Code
Summary by CodeRabbit
Documentation
ctrlrun demolocally instead of the browser demo.Bug Fixes
ctrlrun approve <request_id>and retry the same call.