Skip to content

Conversation

@jottakka
Copy link
Contributor

@jottakka jottakka commented Jan 23, 2026

Note

Medium Risk
Moderate risk: introduces a large new UI surface and new server routes that load data/markdown from disk, which could affect routing, performance, and content correctness across docs pages.

Overview
Introduces a new toolkit-docs component suite that renders toolkit integration pages from generated data/toolkits/*.json, including a searchable/paginated tools table, per-tool sections (params/auth/secrets/output), dynamic code examples, and page-level actions (copy generated markdown, edit JSON on GitHub).

Upgrades the scope calculator (ScopePicker) to support controlled selection, secret requirements, pagination, and copy/export (names, scopes, secrets, JSON) and wires selection into the new toolkit page UI.

Adds backend support and automation: a GET /api/toolkit-data/[toolkitId] endpoint + filesystem loader/helpers for toolkit JSON/index/static params, extends /api/markdown/* to serve generated toolkit markdown from public/toolkit-markdown/<category>/<toolkit>.md with MDX fallback, and adds a GitHub Action to regenerate toolkit docs after Porter deploys (opening a PR when outputs change). Also adjusts dashboard URL handling, quiets PostHog when disabled, and updates ignores/editor watcher settings for repo size.

Written by Cursor Bugbot for commit 95f5529. This will update automatically on new commits. Configure here.

@vercel
Copy link

vercel bot commented Jan 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Jan 30, 2026 3:59am

Request Review

@jottakka jottakka self-assigned this Jan 27, 2026
}: ToolkitHeaderProps): React.ReactElement {
// Icon comes from the JSON metadata - the source of truth
const iconUrl = metadata.iconUrl;
const packageName = getPackageName(id);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent package name generation across components

Medium Severity

Two different functions generate package names with different logic: getPackageName (used in toolkit-header.tsx for PyPI badges) has special handling for "Api" suffixes, while buildPipPackageName (used in toolkit-page.tsx for footer) just normalizes non-alphanumeric characters. For a toolkit like "SlackApi", getPackageName produces "arcade_slack_api" but buildPipPackageName produces "arcade_slackapi" — causing the header badges to link to a different package than the footer references.

Additional Locations (2)

Fix in Cursor Fix in Web

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 9
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Workflow pnpm setup order prevents cache from working

Medium Severity

The actions/setup-node action with cache: pnpm is called before pnpm/action-setup. According to the pnpm/action-setup documentation, pnpm must be installed first for the Node.js setup action to properly configure caching. With the current order, actions/setup-node attempts to determine the pnpm store path for caching before pnpm is available, which could cause caching to silently fail or produce incorrect cache paths.

Fix in Cursor Fix in Web

Changed build script to run toolkit-markdown BEFORE next build instead
of using postbuild hook. This ensures markdown files exist before static
page generation and makes the build process more reliable in Vercel.

Build order:
1. toolkit-markdown - generate MD files
2. next build - build app (uses MD files)
3. custompagefind - index content
4. next-sitemap - generate sitemap
): void {
event.stopPropagation();
onToggleSelection?.(toolName);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exported function not used in component

Low Severity

The handleSelectionButtonClick function is exported and tested but not used within the component. The SelectionCell component at lines 314-320 uses inline handlers (onChange={() => onToggleSelection?.(toolName)} and onClick={(event) => event.stopPropagation()}) instead of this function. This creates duplicate logic between the exported utility and the actual implementation.

Fix in Cursor Fix in Web

isSelected = false,
showSelection = false,
onToggleSelection,
}: ToolSectionProps) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required prop toolkitId is never used

Low Severity

toolkitId is defined as a required property in ToolSectionProps and is passed by callers (line 732 in toolkit-page.tsx), but the ToolSection component never destructures or uses it. The prop is silently ignored, adding unnecessary API surface.

Additional Locations (1)

Fix in Cursor Fix in Web


return <PostHogProvider client={posthog}>{children}</PostHogProvider>;
return (
<PostHogProvider client={isEnabled ? posthog : createNoopPosthogClient()}>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No-op PostHog client recreated on every render

Low Severity

The createNoopPosthogClient() function is called on every render when isEnabled is false, creating a new object each time. This new client reference is passed to PostHogProvider, which may cause unnecessary re-renders in all child components that consume the PostHog context via usePostHog(). The no-op client could be defined as a module-level constant or memoized with useMemo.

Additional Locations (1)

Fix in Cursor Fix in Web

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

? `${id.slice(0, -3)}_api`
: id;
return `${GITHUB_ORG_URL}/${GITHUB_REPO_PREFIX}${repoId}`;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused exported function adds dead code

Low Severity

The getGitHubRepoUrl function is exported but never imported or called anywhere in the codebase. It's only referenced in its own definition and re-exported via index.ts. This is dead code that adds maintenance burden without providing value. Similarly, ARCADE_DASHBOARD constant on line 41 is exported but never used.

Fix in Cursor Fix in Web

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