docs: rebrand QURL → qURL across user-facing surfaces#40
Conversation
Updates the brand spelling to qURL (case-sensitive) in user-visible strings, documentation, code comments, docstrings, and LangChain tool descriptions/responses. Scope: - README.md, CLAUDE.md, pyproject.toml description - Module/class/function docstrings (sync + async clients, types, errors, langchain) - LangChain tool descriptions, response strings (e.g. "qURL r_… has been revoked.", "No qURLs found.") - CI status header in Slack notify step - Test docstring + assertion updated in lockstep Identifiers, paths, and config keys are intentionally untouched: - Class names: QURL, QURLClient, AsyncQURLClient, QURLError, QURLNetworkError, QURLTimeoutError, QURLToolkit, CreateQURLTool, … - Type aliases: QURLStatus, TokenStatus - Field names: qurl_id, qurl_link, qurl_site, qurl_count, active_qurls, qurls_created, max_active_qurls, … - pip package name (layerv-qurl), module name (layerv_qurl) - Tool names (create_qurl, resolve_qurl, list_qurls, delete_qurl) - OpenAPI schema references (CreateQurlRequest, UpdateQurlRequest, QurlData.status, QurlSummary.status) - Repo URLs and slugs A few test fixtures keep "QURL" (mock error `detail` strings that mirror upstream API responses) — these will be updated alongside the upstream qurl-service rebrand to keep mocks accurate. Verified: ruff, mypy, and 158 pytest tests all pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
/simplify result: clean3-agent review (reuse, quality, efficiency) all returned clean.
Waiting on |
Review — docs: rebrand QURL → qURLNice, tightly scoped PR. The "What was intentionally not changed" section is the standout — explicitly listing the public-API identifiers ( Code quality
Potential bugs / issues
PerformanceN/A — strings only. SecurityN/A — no auth, validation, or network paths touched. Test coverage
Nits (optional, non-blocking)
VerdictLGTM. Low-risk, well-bounded, and the boundary between "user-facing prose" and "stable identifier" is drawn carefully. |
|
Thanks — /cr is LGTM. Walking through the notes:
PR is merge-ready: builds green, /simplify clean, /cr approved. |
…ject Adds ™ on first prominent mention (README opener, pyproject.toml description shown on PyPI) and the portal positioning tagline as a README blockquote. Body prose, docstrings, error messages stay plain. 158 tests still pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ReviewTight, surgical rebrand — strings only, identifiers preserved, tests updated in lockstep with the one source-string change. PR body's "what was intentionally not changed" section is exactly the right level of detail. ✅ Strengths
Things worth a second look1. -description = "Python SDK for the QURL API - secure, time-limited access links"
+description = "Python SDK for the qURL™ API — secure, time-limited access links. Quantum URL is how you enter the hidden layer of the internet."This is the package summary surfaced on PyPI search results,
2. Stale-cased mock fixtures
3. Minor inconsistency In LangChain tool responses:
PR description references Bugs / perf / securityNothing. Pure string change, no behavioral surface touched, no injection vectors, no hot paths affected. Test coverageAdequate for the scope. The one user-facing string with an assertion ( Bottom lineLGTM modulo a sanity check on the new PyPI |
|
Extended scope: added qURL™ at the README opener (first prominent mention) and the portal tagline |
Summary
Updates the brand spelling to qURL (case-sensitive) across user-visible strings, documentation, docstrings, and LangChain tool descriptions/response messages.
Why
The product brand is
qURL. README, thepyproject.tomldescription shown on PyPI, public docstrings (which AI agents and IDEs surface viahelp()/ hover), and the LangChain tool descriptions/responses were inconsistently spelledQURL/Qurl. This PR brings them in line.What changed
README.md,CLAUDE.md,pyproject.tomldescriptiondescription:strings and human-readable responses (e.g.qURL r_… has been revoked.,No qURLs found.)What was intentionally not changed
Identifier-style references kept as-is (changing them would break the public Python API):
QURL,QURLClient,AsyncQURLClient,QURLError,QURLNetworkError,QURLTimeoutError,QURLValidationError,QURLAuthError,QURLAuthorizationError,QURLRateLimitError,QURLNotFoundError,QURLConflictError,QURLAPIError,QURLToolkit,CreateQURLTool,ResolveQURLTool,ListQURLsTool,DeleteQURLToolQURLStatus,TokenStatusqurl_id,qurl_link,qurl_site,qurl_count,active_qurls,qurls_created,max_active_qurls,max_tokens_per_qurllayerv-qurl), Python module name (layerv_qurl)create_qurl,resolve_qurl,list_qurls,delete_qurlCreateQurlRequest,UpdateQurlRequest,QurlData.status,QurlSummary.statusA few test fixtures keep the old casing in mock
detailstrings ("QURL not found") that mirror upstream API responses — these will be updated alongside the upstream API rebrand to keep mocks accurate.Test plan
ruff check src/cleanmypy src/clean (no new issues)pytest tests/— 158/158 passQURL/Qurlleft in prose contexts (only identifiers andqurl_*attribute names remain)