Skip to content

fix(billing): sync Pro tier Usage-panel caps with plans.yaml #171

fix(billing): sync Pro tier Usage-panel caps with plans.yaml

fix(billing): sync Pro tier Usage-panel caps with plans.yaml #171

Triggered via pull request May 15, 2026 21:14
Status Failure
Total duration 1m 2s
Artifacts

ci.yml

on: pull_request
build-and-test
45s
build-and-test
playwright
58s
playwright
Fit to window
Zoom out
Zoom in

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 — 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