CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

paddle-subscription-update

Change a Paddle subscription's plan from a Next.js Server Action — auth, ownership check, `prorationBillingMode`, items-array replace semantics, preview-before-commit, and `on_payment_failure` handling.

75

1.14x
Quality

79%

Does it follow best practices?

Impact

100%

1.14x

2 of 3 eval scenarios. Add 1 more for a full score.

SecuritybySnyk

Medium

Suggest reviewing before use

Fix and improve this skill with Tessl

tessl review fix ./providers/cursor/plugin/skills/subscription-update/SKILL.md

The canonical home for this skill is paddle-subscription-update in PaddleHQ/paddle-agent-skills

SKILL.md
Quality
Evals
Security

Quality

Content

73%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

Highly actionable, well-sequenced content with strong verification and error-recovery guidance — the Server Action, preview flow, and 9-step verification checklist are exemplary. The weakest spots are repetition of key rules across sections and inlined boilerplate that belongs in reference files.

Suggestions

Move the Supabase client helpers and the PADDLE error-code table into a references/ file (both are shared with the paired subscription-cancel skill) and keep SKILL.md focused on the update flow.

State the trialing→do_not_bill and downgrade-credit rules once in their canonical tables and reference them from the pitfalls section instead of restating each rule three to four times.

Define or link the `getPaddleInstance` helper so the full Server Action is genuinely copy-paste ready.

DimensionReasoningScore

Conciseness

Most content is genuinely non-obvious domain knowledge (error codes like "subscription_locked_renewal" and "subscription_trialing_items_update_invalid_options", the credit-not-refund rule, mixed-interval constraints), but the trialing→`do_not_bill` rule is restated in at least four places (proration table, flow table, status table, pitfalls) and ~45 lines of standard Supabase client boilerplate Claude already knows are inlined. Fits anchor 3 — mostly efficient but could be tightened — rather than 2 because the padding is limited to specific spots, and rather than 4 because the duplication and boilerplate exceed 'minor instances'.

3 / 5

Actionability

The full Server Action is near copy-paste ready (auth, ownership check, ApiError mapping, revalidatePath, slim DTO) with complete Supabase helpers, an executable preview snippet, an apply_change override example, and a 9-step verification checklist. One minor gap keeps it from anchor 5: `getPaddleInstance` is imported but never defined anywhere in the skill, so the code is not fully self-contained.

4 / 5

Workflow Clarity

Clear sequence — choose `prorationBillingMode` → check subscription status → preview before commit → run the update — with explicit validation checkpoints: preview numbers rendered on a confirm screen, auth/ownership checks before any SDK call, and a "Verify the integration" checklist with expected outcomes (e.g. a declined card keeps the old plan under `prevent_change`). Error-recovery feedback (retry after renewal lock, back off on 429, update payment method) is present. Matches anchor 5.

5 / 5

Progressive Disclosure

Well-organized single file with clear section headers and a related-docs list; the core domain tables (proration modes, status rules) are appropriately inline for immediate use. Minor gaps: the shared Supabase helper boilerplate and the Paddle error-code catalog would fit better in a references/ file (they're shared with the paired subscription-cancel skill), and no bundle files exist at all. Fits anchor 4 rather than 3 because structure and navigation are good, and rather than 5 because ~330 lines of reference-worthy material is inlined with no one-level-deep reference split.

4 / 5

Total

16

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, concrete description of a well-defined niche, listing six named capabilities. Its weaknesses are the complete absence of an explicit "Use when..." trigger clause and of natural synonyms like "upgrade plan" or "switch tier" that users would actually say.

Suggestions

Add an explicit trigger clause, e.g. "Use when building 'Upgrade plan,' 'Switch tier,' or 'Change subscription' actions in a Paddle-powered billing UI."

Include natural user synonyms such as "upgrade," "downgrade," and "switch plan/tier" alongside the formal API parameter names to broaden trigger-term coverage.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions — "auth, ownership check, `prorationBillingMode`, items-array replace semantics, preview-before-commit, and `on_payment_failure` handling" — alongside the core action "Change a Paddle subscription's plan from a Next.js Server Action". Coverage is comprehensive for this skill's scope, matching anchor 5 rather than 4 because no meaningful capability is left out.

5 / 5

Completeness

The "what" is explicit and concrete, but there is no "Use when..." clause or equivalent explicit trigger guidance — the "when" is only weakly implied by the opening action phrase. Per the rubric's cap, a missing 'Use when...' clause caps completeness at 3; it fits anchor 3 rather than 4 because the when is implied, not stated.

3 / 5

Trigger Term Quality

"Change a Paddle subscription's plan" is a natural user phrase, and API terms like "prorationBillingMode" and "on_payment_failure" match what a developer integrating Paddle would say or search. However, common natural synonyms such as "upgrade," "downgrade," or "switch tier" are absent, fitting anchor 4 (good coverage, a few natural terms missing) rather than 5.

4 / 5

Distinctiveness Conflict Risk

The phrases "Paddle subscription's plan" and "Next.js Server Action" carve a clear niche with distinct triggers, and the plan-change flow is distinct from adjacent skills (cancel, sync). Minimal conflict risk — matches anchor 5.

5 / 5

Total

17

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

PaddleHQ/paddle-agent-skills

Path

providers/cursor/plugin/skills/subscription-update/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.