fix(billing): sync Pro tier Usage-panel caps with plans.yaml #171
ci.yml
on: pull_request
build-and-test
45s
playwright
58s
Annotations
6 errors
|
build-and-test
Process completed with exit code 1.
|
|
src/pages/PricingPage.test.tsx > PricingPage — five tier cards present (M11 regression guard) > paid-tier CTAs are clickable links (not disabled spans) for hobby / hobby_plus / pro:
src/pages/PricingPage.test.tsx#L143
TestingLibraryElementError: Unable to find an element by: [data-testid="pricing-cta-hobby_plus"]
Ignored nodes: comments, script, style
<body>
<div>
<div
class="public-shell"
>
<header
class="public-nav"
role="banner"
>
<div
class="public-nav-inner"
>
<a
aria-label="instanode.dev — home"
class="public-nav-brand"
href="/"
>
<span
class="brand"
>
<img
alt=""
aria-hidden="true"
class="brand-mark"
height="24"
src="/apple-touch-icon.png"
width="24"
/>
<span
class="brand-name"
>
instanode
<span
class="dot"
>
.
</span>
dev
</span>
</span>
</a>
<nav
aria-label="Primary"
class="public-nav-links"
>
<a
class="public-nav-link"
href="/pricing"
>
Pricing
</a>
<a
class="public-nav-link"
href="/use-cases"
>
Use cases
</a>
<a
class="public-nav-link"
href="/for-agents"
>
For agents
</a>
<a
class="public-nav-link"
href="/docs"
>
Docs
</a>
<a
class="public-nav-link"
href="/blog"
>
Blog
</a>
<a
class="public-nav-link"
href="/status"
>
Status
</a>
</nav>
<div
class="public-nav-cta"
>
<a
class="public-nav-link public-nav-link--muted"
href="/login"
>
Sign in
</a>
<a
class="public-cta-pill"
href="/get-token"
>
Get token
<span
aria-hidden="true"
>
→
</span>
</a>
</div>
</div>
</header>
<main
class="public-main"
>
<section
class="pricing-header"
>
<span
class="public-eyebrow"
>
Pricing · transparent · per-team
</span>
<h1
class="public-h1"
>
Pricing
<span
class="dot"
>
.
</span>
</h1>
<p
class="public-sub"
>
Free for the first agent call. Pay when your agent grows up.
</p>
</section>
<section
aria-labelledby="compare-h"
class="public-section"
>
<h2
class="public-section-h"
id="compare-h"
>
Compare tiers
</h2>
<p
class="public-section-sub"
>
All prices in USD. Limits enforced per team. Numbers come from
<code
class="pr-inline"
>
plans.yaml
</code>
.
</p>
<div
data-testid="pricing-frequency-toggle"
style="display: flex; align-items: center; gap: 12px; margin: 0px 0px 18px; flex-wrap: wrap;"
>
<div
aria-label="Billing cycle"
role="radiogroup"
style="display: inline-flex; border: 1px solid var(--border-hi, var(--border)); border-radius: 999px; padding: 2px; background: var(--elevated, var(--surface));"
>
<button
aria-checked="true"
|
|
src/pages/PricingPage.test.tsx > PricingPage — five tier cards present (M11 regression guard) > renders one card per tier (anonymous / hobby / hobby_plus / pro / team):
src/pages/PricingPage.test.tsx#L136
AssertionError: expected 0 to be greater than 0
❯ src/pages/PricingPage.test.tsx:136:34
|
|
src/pages/PricingPage.test.tsx > PricingPage — CTAs point at /app/checkout (W12 C1) > Hobby Plus yearly CTA points at /app/checkout?plan=hobby_plus&frequency=yearly:
src/pages/PricingPage.test.tsx#L80
TestingLibraryElementError: Unable to find an element by: [data-testid="pricing-cta-hobby_plus"]
Ignored nodes: comments, script, style
<body>
<div>
<div
class="public-shell"
>
<header
class="public-nav"
role="banner"
>
<div
class="public-nav-inner"
>
<a
aria-label="instanode.dev — home"
class="public-nav-brand"
href="/"
>
<span
class="brand"
>
<img
alt=""
aria-hidden="true"
class="brand-mark"
height="24"
src="/apple-touch-icon.png"
width="24"
/>
<span
class="brand-name"
>
instanode
<span
class="dot"
>
.
</span>
dev
</span>
</span>
</a>
<nav
aria-label="Primary"
class="public-nav-links"
>
<a
class="public-nav-link"
href="/pricing"
>
Pricing
</a>
<a
class="public-nav-link"
href="/use-cases"
>
Use cases
</a>
<a
class="public-nav-link"
href="/for-agents"
>
For agents
</a>
<a
class="public-nav-link"
href="/docs"
>
Docs
</a>
<a
class="public-nav-link"
href="/blog"
>
Blog
</a>
<a
class="public-nav-link"
href="/status"
>
Status
</a>
</nav>
<div
class="public-nav-cta"
>
<a
class="public-nav-link public-nav-link--muted"
href="/login"
>
Sign in
</a>
<a
class="public-cta-pill"
href="/get-token"
>
Get token
<span
aria-hidden="true"
>
→
</span>
</a>
</div>
</div>
</header>
<main
class="public-main"
>
<section
class="pricing-header"
>
<span
class="public-eyebrow"
>
Pricing · transparent · per-team
</span>
<h1
class="public-h1"
>
Pricing
<span
class="dot"
>
.
</span>
</h1>
<p
class="public-sub"
>
Free for the first agent call. Pay when your agent grows up.
</p>
</section>
<section
aria-labelledby="compare-h"
class="public-section"
>
<h2
class="public-section-h"
id="compare-h"
>
Compare tiers
</h2>
<p
class="public-section-sub"
>
All prices in USD. Limits enforced per team. Numbers come from
<code
class="pr-inline"
>
plans.yaml
</code>
.
</p>
<div
data-testid="pricing-frequency-toggle"
style="display: flex; align-items: center; gap: 12px; margin: 0px 0px 18px; flex-wrap: wrap;"
>
<div
aria-label="Billing cycle"
role="radiogroup"
style="display: inline-flex; border: 1px solid var(--border-hi, var(--border)); border-radius: 999px; padding: 2px; background: var(--elevated, var(--surface));"
>
<button
aria-checked="false"
|
|
src/pages/PricingPage.test.tsx > PricingPage — CTAs point at /app/checkout (W12 C1) > Hobby Plus monthly CTA points at /app/checkout?plan=hobby_plus&frequency=monthly:
src/pages/PricingPage.test.tsx#L59
TestingLibraryElementError: Unable to find an element by: [data-testid="pricing-cta-hobby_plus"]
Ignored nodes: comments, script, style
<body>
<div>
<div
class="public-shell"
>
<header
class="public-nav"
role="banner"
>
<div
class="public-nav-inner"
>
<a
aria-label="instanode.dev — home"
class="public-nav-brand"
href="/"
>
<span
class="brand"
>
<img
alt=""
aria-hidden="true"
class="brand-mark"
height="24"
src="/apple-touch-icon.png"
width="24"
/>
<span
class="brand-name"
>
instanode
<span
class="dot"
>
.
</span>
dev
</span>
</span>
</a>
<nav
aria-label="Primary"
class="public-nav-links"
>
<a
class="public-nav-link"
href="/pricing"
>
Pricing
</a>
<a
class="public-nav-link"
href="/use-cases"
>
Use cases
</a>
<a
class="public-nav-link"
href="/for-agents"
>
For agents
</a>
<a
class="public-nav-link"
href="/docs"
>
Docs
</a>
<a
class="public-nav-link"
href="/blog"
>
Blog
</a>
<a
class="public-nav-link"
href="/status"
>
Status
</a>
</nav>
<div
class="public-nav-cta"
>
<a
class="public-nav-link public-nav-link--muted"
href="/login"
>
Sign in
</a>
<a
class="public-cta-pill"
href="/get-token"
>
Get token
<span
aria-hidden="true"
>
→
</span>
</a>
</div>
</div>
</header>
<main
class="public-main"
>
<section
class="pricing-header"
>
<span
class="public-eyebrow"
>
Pricing · transparent · per-team
</span>
<h1
class="public-h1"
>
Pricing
<span
class="dot"
>
.
</span>
</h1>
<p
class="public-sub"
>
Free for the first agent call. Pay when your agent grows up.
</p>
</section>
<section
aria-labelledby="compare-h"
class="public-section"
>
<h2
class="public-section-h"
id="compare-h"
>
Compare tiers
</h2>
<p
class="public-section-sub"
>
All prices in USD. Limits enforced per team. Numbers come from
<code
class="pr-inline"
>
plans.yaml
</code>
.
</p>
<div
data-testid="pricing-frequency-toggle"
style="display: flex; align-items: center; gap: 12px; margin: 0px 0px 18px; flex-wrap: wrap;"
>
<div
aria-label="Billing cycle"
role="radiogroup"
style="display: inline-flex; border: 1px solid var(--border-hi, var(--border)); border-radius: 999px; padding: 2px; background: var(--elevated, var(--surface));"
>
<button
aria-checked="true"
|
|
src/pages/BillingPage.test.tsx > BillingPage — promo codes flow through Razorpay (no in-product input) > mentions that promo codes apply at Razorpay checkout (so users know where they go):
src/pages/BillingPage.test.tsx#L921
AssertionError: expected 'choose a planyou\'re on hobby today.c…' to contain 'promo codes apply at checkout'
- Expected
+ Received
- promo codes apply at checkout
+ choose a planyou're on hobby today.change plan
+ .pricing-grid-cards {
+ display: grid;
+ grid-template-columns: repeat(5, minmax(0, 1fr));
+ gap: 12px;
+ }
+ @media (max-width: 1280px) {
+ .pricing-grid-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
+ }
+ @media (max-width: 880px) {
+ .pricing-grid-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ }
+ @media (max-width: 540px) {
+ .pricing-grid-cards { grid-template-columns: 1fr; }
+ }
+ billing cyclemonthlyannual— 2 months freefree$0forever10 mb postgres · 24h ttl5 mb redis · 24h ttl5 mb mongodb · 24h ttl100 stored webhooksagent-only accessstay on freehobby$7.50/mo, billed yearly$90/yr · save $18 (17%)1 gb postgres · 8 conn50 mb redis100 mb mongodb · 5 conn1 small deployment20 vault entries · production env1,000 stored webhooksyour planmost popularhobby plus$16.58/mo, billed yearly$199/yr · save $291 gb postgres · 8 conn50 mb redis1 gb mongodb · 5 conn · 5 gb object storage2 deployments · custom domain50 vault entries · production env14-day backups · 1-click restoreget hobby plus — $16.58/mopro$40.83/mo, billed yearly$490/yr · save $9810 gb postgres · 20 conn512 mb redis5 gb mongodb · 20 conn50 gb object storage · 10 medium deployments200 vault entries · multi-envcustom domain · 10k stored webhooksget pro — $40.83/moteamcoming sooncontact salescancel? contact supporthave a promo code? contact support@instanode.dev to apply it.payment methodvisa · 4242auto-renews 5/24/2026updateusage · this periodpostgres0 / 1 gbredis0 / 50mongo0 / 100deployments0 / 1webhooks0 / 1000team seats1 / 1as of 5s ago · cached 30sinvoicesvia razorpayidperiodplanstatusamountinv_qzn8bd4/22/2026 → 5/22/2026propaid$49.00inv_pp7k2c3/22/2026 → 4/22/2026propaid$49.00inv_lm4f9a2/20/2026 → 3/22/2026hobbypaid$9.00
❯ src/pages/BillingPage.test.tsx:921:50
|