Skip to content

fix(pricing): remove the phantom "XLSX exports" claim from API Business (#4974)#4975

Merged
koala73 merged 2 commits into
mainfrom
fix/remove-xlsx-claim-4974
Jul 6, 2026
Merged

fix(pricing): remove the phantom "XLSX exports" claim from API Business (#4974)#4975
koala73 merged 2 commits into
mainfrom
fix/remove-xlsx-claim-4974

Conversation

@koala73

@koala73 koala73 commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Elie's catch post-#4946: no XLSX export functionality exists anywhere in the product — the only xlsx mentions are the marketing string itself (shipped with the original hidden catalog in #4563) and the unconsumed exportFormats metadata. Same defect class as the 50,000-req/day overpromise.

Removed from every surface: catalog bullet, both live-catalog mirrors (edge endpoint + Railway seeder), apiSection.businessWebhooks in all 25 locales (→ "Priority support"), pricing.md (prose + machine-readable JSON), pricing.mdx, /pro JSON-LD offer, and the generated tiers.json + en/fa placeholders via regen. exportFormats metadata left as-is (entitlement-row shape, nothing consumes it). Verified zero remaining XLSX references on pricing surfaces; the two remaining repo hits are unrelated data-pipeline docs (EU fuel-price XLSX source files).

54/54 across freshness/parity + drift + locale-registry + billing-mode + funnel-policy; public/pro rebuilt.

Post-merge: purge DELETE /api/product-catalog again — the currently-cached payload still carries the XLSX string until then.

Closes #4974

https://claude.ai/code/session_0161Cso3K8pbtf276Q9WPM3s

…ss (#4974)

Elie's catch: the tier advertises XLSX exports, but no XLSX exporter,
endpoint, or library exists anywhere in the product — the only xlsx
mentions are the marketing string itself and the unconsumed
exportFormats metadata. The bullet shipped with the original hidden
catalog entry (#4563) and #4946 propagated it to every public surface.

Removed from: catalog marketingFeatures, both live-catalog mirrors
(api/product-catalog.js + ais-relay.cjs), apiSection.businessWebhooks
copy (25 locales -> "Priority support"), pricing.md prose + JSON
summary, pricing.mdx table + bullets, /pro JSON-LD offer description;
tiers.json + en/fa placeholders via generator regen. exportFormats
metadata left untouched (entitlement-row shape, no consumer). The
tier's true differentiators stand: 300 req/min, 10,000 req/day,
priority support.

public/pro rebuilt; 54/54 across freshness/parity + drift +
locale-registry + billing-mode + funnel-policy suites.

Closes #4974

Claude-Session: https://claude.ai/code/session_0161Cso3K8pbtf276Q9WPM3s
@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
worldmonitor Ready Ready Preview, Comment Jul 6, 2026 12:33pm

Request Review

@greptile-apps

greptile-apps Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR removes the phantom "XLSX exports" marketing claim from the API Business tier across every pricing surface — a false feature that never had any implementation behind it. All 25 locale files, the Convex catalog source of truth, the edge product-catalog endpoint, the Railway relay seeder, documentation, JSON-LD structured data, and the generated bundles are updated consistently.

  • Marketing claim removed from all surfaces: api/product-catalog.js, convex/config/productCatalog.ts, scripts/ais-relay.cjs, public/pricing.md, docs/pricing.mdx, public/pro/index.html, pro-test/index.html JSON-LD offers, and all 25 locale businessWebhooks strings now omit "XLSX exports."
  • exportFormats metadata intentionally left intact: API_BUSINESS_FEATURES.exportFormats in convex/config/productCatalog.ts still contains \"xlsx\" as an entitlement-schema placeholder, but no application code reads that field to gate UI or API behavior — confirmed by absence of any .exportFormats usage in src/ or server/.
  • Post-merge cache flush still required: the live /api/product-catalog Redis cache will continue serving the stale XLSX string until DELETE /api/product-catalog is manually issued (documented in PR description).

Confidence Score: 4/5

Safe to merge — the false XLSX marketing claim is removed consistently from every identified pricing surface, and no application logic is broken by the change.

The XLSX string is gone from all live-facing surfaces. The one wrinkle is that API_BUSINESS_FEATURES.exportFormats in the Convex catalog still lists "xlsx" as an entitlement-schema value for a feature that doesn't exist. No code currently reads that array to gate behaviour, so it's inert today — but it's stale data that will mislead the next developer who adds export-gating logic. The Railway relay script also maintains its own hard-coded copy of the tier config, which required a separate manual edit and will need to be kept in sync for future pricing changes.

convex/config/productCatalog.ts (API_BUSINESS_FEATURES.exportFormats still contains "xlsx"); scripts/ais-relay.cjs (duplicated DODO_TIER_CONFIG).

Important Files Changed

Filename Overview
api/product-catalog.js Removes "XLSX exports" from the API Business features array; clean one-line change to the edge function's TIER_CONFIG.
convex/config/productCatalog.ts Marketing feature string removed from PRODUCT_CATALOG apiBusiness entry; however API_BUSINESS_FEATURES.exportFormats still contains "xlsx" as an entitlement-schema entry with no current consumer.
scripts/ais-relay.cjs Updates DODO_TIER_CONFIG (Railway seeder's own copy of tier data) to remove XLSX; correctly mirrors the api/product-catalog.js change, though the duplication across two files is an existing drift risk.
public/pricing.md Removes XLSX from both the prose description and the machine-readable JSON block for API Business.
docs/pricing.mdx Removes XLSX from the Mintlify docs pricing table row and the prose tier description for API Business.
pro-test/src/locales/en.json Removes XLSX from both the marketingFeatures array and the businessWebhooks UI string; fa.json is identical (intentional English placeholder per PR description).
pro-test/src/generated/tiers.json Generated file correctly regenerated without XLSX in the API Business features array.
public/pro/index.html JSON-LD offer description for API Business updated; asset hashes rotated to reflect rebuilt bundles.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["convex/config/productCatalog.ts\n(source of truth)"] -->|"drives"| B["api/product-catalog.js\n(Vercel edge endpoint)"]
    A -->|"mirrors"| C["public/pricing.md\n(prose + machine-readable JSON)"]
    A -->|"mirrors"| D["docs/pricing.mdx\n(Mintlify docs table)"]
    B -->|"seeded by"| E["scripts/ais-relay.cjs\n(Railway DODO_TIER_CONFIG — own copy)"]
    B -->|"cached in Redis"| F["/api/product-catalog\n(live JSON endpoint — needs cache purge)"]
    A -->|"regen"| G["pro-test/src/generated/tiers.json"]
    G -->|"compiled into"| H["public/pro/assets/*.js bundles"]
    A -->|"drives"| I["pro-test/src/locales/*.json\n(25 locale businessWebhooks strings)"]
    I -->|"compiled into"| H
    H -->|"referenced by"| J["public/pro/index.html\n(JSON-LD + module preload)"]
    H -->|"referenced by"| K["public/pro/welcome.html"]

    style F fill:#ff9,stroke:#cc0,color:#000
    style E fill:#fdd,stroke:#c00,color:#000
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["convex/config/productCatalog.ts\n(source of truth)"] -->|"drives"| B["api/product-catalog.js\n(Vercel edge endpoint)"]
    A -->|"mirrors"| C["public/pricing.md\n(prose + machine-readable JSON)"]
    A -->|"mirrors"| D["docs/pricing.mdx\n(Mintlify docs table)"]
    B -->|"seeded by"| E["scripts/ais-relay.cjs\n(Railway DODO_TIER_CONFIG — own copy)"]
    B -->|"cached in Redis"| F["/api/product-catalog\n(live JSON endpoint — needs cache purge)"]
    A -->|"regen"| G["pro-test/src/generated/tiers.json"]
    G -->|"compiled into"| H["public/pro/assets/*.js bundles"]
    A -->|"drives"| I["pro-test/src/locales/*.json\n(25 locale businessWebhooks strings)"]
    I -->|"compiled into"| H
    H -->|"referenced by"| J["public/pro/index.html\n(JSON-LD + module preload)"]
    H -->|"referenced by"| K["public/pro/welcome.html"]

    style F fill:#ff9,stroke:#cc0,color:#000
    style E fill:#fdd,stroke:#c00,color:#000
Loading

Comments Outside Diff (1)

  1. convex/config/productCatalog.ts, line 111 (link)

    P2 exportFormats entitlement still claims "xlsx" for a non-existent feature

    API_BUSINESS_FEATURES.exportFormats retains "xlsx" while the product has no XLSX export implementation. Nothing currently reads this array to gate UI or API behaviour (confirmed: no .exportFormats access in src/ or server/), so there's no live defect today. However, the field is typed, schema-validated in Convex, and included in the EntitlementState interface — the moment any code starts checking exportFormats.includes('xlsx'), Business-tier users would be incorrectly granted access to a feature that doesn't exist. Removing "xlsx" from this array now keeps the entitlement data honest and removes the future footgun.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Reviews (1): Last reviewed commit: "fix(pricing): remove the phantom "XLSX e..." | Re-trigger Greptile

Comment thread scripts/ais-relay.cjs
…-links + feature-array parity (PR #4975 review)

Greptile's two findings on the removal PR, both addressed:

- exportFormats metadata still listed "xlsx" for api_business — inert
  today (nothing consumes the array) but primed to mislead the next
  developer who adds export-gating. Removed, and the PlanFeatures field
  now carries an explicit do-not-gate-on-this warning citing #4974.
  Enterprise's array left as-is (sales-led; the field-level warning
  covers it).
- The seeder's DODO_TIER_CONFIG is a hand-maintained copy of the
  edge's TIER_CONFIG with nothing linking them. Both now carry
  cross-reference comments naming all three copies and the parity
  test — and the parity test itself now compares the FEATURE ARRAYS
  (mirror-to-mirror, and against generated tiers.json), which is
  exactly the check whose absence let the XLSX string survive in copy.
  Mutation-verified: re-adding the phantom to either mirror fails 4
  assertions.

619/619 convex suite, 14/14 freshness/parity, typecheck:api clean,
generator regen no-op.

Claude-Session: https://claude.ai/code/session_0161Cso3K8pbtf276Q9WPM3s
@koala73
koala73 merged commit c531104 into main Jul 6, 2026
25 checks passed
@koala73
koala73 deleted the fix/remove-xlsx-claim-4974 branch July 6, 2026 12:37
@mintlify

mintlify Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
WorldMonitor 🔴 Failed Jul 6, 2026, 12:44 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@abdullahra634-dotcom abdullahra634-dotcom left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

fix(pricing): 'XLSX exports' is advertised on API Business but no XLSX export exists anywhere in the product

2 participants