Skip to content

Accuracy pass: undocumented limits, stale install path, dead index entries - #36

Open
tpavlu wants to merge 1 commit into
mainfrom
docs/accuracy-pass
Open

Accuracy pass: undocumented limits, stale install path, dead index entries#36
tpavlu wants to merge 1 commit into
mainfrom
docs/accuracy-pass

Conversation

@tpavlu

@tpavlu tpavlu commented Aug 12, 2026

Copy link
Copy Markdown

What changed and why

Three unrelated accuracy fixes. The pricing table was missing two tier limits users can actually hit — file uploads and media storage — and the media cap is the one that bites, because it is finite on Free while Rich Content actively encourages images and diagrams. The Claude Code hook page still curls the legacy installer path. And the docs index advertised two entries that are not real destinations, while a real page was missing from navigation entirely.

Verified

All verification against ref-tools/ref.

Limits — shared-common/tierConfig.ts (TIER_CONFIGS)

  • maxFileUploads: Free 1,000 · Pro 50,000 · Max 500,000.
  • maxMediaStorageBytes: Free 1073741824 · Pro 'unlimited' · Max 'unlimited'. 1073741824 is named ONE_GB in plan-app/server/src/services/mediaStore.unit.test.ts and plan-app/server/src/utils/mcpToolHandlersMediaUpload.testkit.ts, so the table says "1 GB". Values are presented with the same comma grouping the existing rows use.
  • Both limits are real, enforced caps, not display-only fields:
    • File uploads: functions/src/pdfUploadUnifiedEndpoint.ts checks checkLimitWithAddition(tier, 'fileUploads', …) and returns 403 limit_exceeded; the count comes from countFileUploads in functions/src/middleware/checkTierLimits.ts (sum of totalFiles across the user's or team's upload sets).
    • Media storage: plan-app/server/src/services/mediaLimits.ts (checkMediaStorageLimit) short-circuits on 'unlimited' and otherwise sums sizeBytes over mediaRefs for the owning user or team. Enforced on both upload paths — plan-app/server/src/routes/media.ts ("Media storage limit reached — upgrade to upload more images", 403) and plan-app/server/src/utils/mcpMediaUploadToolHandlers.ts. That covers editor uploads and MCP upload_media, which is why the Rich Content sentence names both.
  • "Media storage" as the customer-facing label is the product's own wording, taken from the 403 copy above.

Install path — plan-app/server/src/routes/plugins.ts

  • PLUGIN_NAME is ref-plan. Both /install/ref-plan and /install/ref-plan-hook are registered to the same handler, and the source comment states the ref-plan-hook path is kept as an alias because the installed plugin is now ref-plan. The router mounts at /plugins (plan-app/server/src/index.ts). So the current path is https://api.plan.ref.tools/plugins/install/ref-plan.
  • Corroborating: the generated installer deletes enabledPlugins["ref-plan-hook@ref-tools-marketplace"] from ~/.claude/settings.json and registers ref-plan@ref-tools-marketplace.
  • In-app copy still uses the legacy URL. plan-app/client/src/components/settings/ClaudeCodeSettingsPage.tsx:43 builds installCommand from .../plugins/install/ref-plan-hook. Not fixed here (product repo is out of scope for this PR) — flagging for whoever owns that page.

Index entries — docs.json

  • plans/beta.mdx deleted. docs.json already redirects /plans/beta/plans/getting-started/intro, so the page never resolves; it is in no navigation group and nothing in the repo links to it. Its content is superseded by the four plans/workflows/role-* pages, plans/workflows/claude-code-hook, and usage/pricing, and it had gone stale in its own right — it still carried the legacy ref-plan-hook install command and pre-launch pricing copy. The redirect is left in place so old links keep working.
  • usage/rbac.mdx was not in navigation. It is now, in the Usage group of both the Plans and Context tabs, next to usage/teams. Its content checks out: TeamRole is 'admin' | 'writer' | 'reader' (functions/src/procedures/teamTypes.ts:7, allowlisted again in functions/src/routes/teamsJoinLinkRoutes.ts:15).

Unverified / omitted

  • getting-started/dashboard.mdx — left in place, deliberately not added to navigation. The brief suggested promoting it, but its content does not match the app. In client/pages/Dashboard.tsx the cards are "Plan", "Install ref-plan MCP", "Add Resources", "Usage & Credits", and a team/invite card. The page describes a Quick Install card and a Search Documentation card that does not exist, and claims a "snackbar toast log" of recent system messages and a CSV export path I could not find. Adding it to navigation would surface those errors to customers. It is a judgement call whether the page should be rewritten or deleted, so it is untouched — someone should decide. Nothing links to it and it is in no nav group today.
  • Enterprise cell for "Media storage" says "Custom". TIER_CONFIGS.Enterprise.maxMediaStorageBytes is 1073741824 — the same as Free — and unlike fileUploads and pdfPages there is no override path for it: LimitType in shared-common/limitErrors.ts omits mediaStorageBytes, the enterprise-limit CLI (command/cli_teams_enterprise.ts, command/cli_teams_overrides.ts) exposes no flag for it, and checkMediaStorageLimit passes no override. "Custom" matches the rest of the Enterprise column and the tier's own generated feature line ("Custom limits (negotiable)"), but the code as written would cap an Enterprise account at 1 GB. This looks like a product gap rather than a docs gap — worth a look. If the answer is "Enterprise really is 1 GB", the cell should change.
  • Tier-details bullets not touched. The ### Tier details list still mentions only credits and repos. Adding upload and storage numbers there would duplicate the table without adding anything.
  • comparison/building-doc-search.mdx is another root-level page absent from navigation, noticed while auditing. Out of scope for this PR; mentioning it so it is not lost.

Conflicts

Yes — this PR edits docs.json (two added "usage/rbac" lines, one per tab). Sibling PRs in this batch also edit docs.json; conflicts are expected and should be trivial to resolve.


Generated by Claude Code

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.

2 participants