Skip to content

genclass 0.3.7: the command comes with Pro; Pro per developer for up to 3 apps (plans v5) - #230

Merged
MeharPro merged 5 commits into
mainfrom
fix/plan-after-connect
Nov 13, 2026
Merged

MeharPro merged 5 commits into
mainfrom
fix/plan-after-connect

Conversation

@MeharPro

@MeharPro MeharPro commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

The owner's calls of 2026-11-13: "let's make the entire CLI paid", Pro per developer with up to 3 apps on the account (more is Enterprise, by email), Free one app on the website.

genclass (0.3.7)

  • Pro is the step right after the sign-in (src/paywall.mjs): Pro's card, then Enter opens the account's checkout (/account/billing?plan=team&start=1, the 3-day trial, card on Stripe) and waits for the payment. No Free in the terminal.
  • Every command but login, logout, whoami, plan, upgrade, profile, status, remove, help, version asks first (cli.mjs FREE_COMMANDS); signed out, the sign-in comes first. Without a terminal (--yes, --json, agents): one line with the checkout, exit code 1. A 402 needs_pro from the server prints the same line in every command.
  • Every new app opens its plan page once (Continue with Pro); an app past Pro's 3 points to Enterprise.

Collector

  • /api/cli/* but the overview and the account: 402 needs_pro for a CLI session of an account with no plan (paid, trialing, grant) and no active place in a paying team (cliPaid). Overview and account carry cli. Never locked: browser sessions, no Stripe key or an unlisted test-key account, PLAN_GATES open.
  • plans.json v5: Pro per_seat, limits.apps 3; Free's lines in the owner's words. An app past Pro's 3: "Email us about Enterprise". An app with its own version-4 subscription is never locked. Lock messages name the app's plan page.
  • Stripe product "GenClass Pro" was already updated by the owner's other session (description = Pro's summary, unit_label "developer").

Website

  • A new account's first screen (/account with no app, on Free, where Pro is sold) is Pro's trial: "Start your 3-day free trial" large (the account's Checkout) and a tiny "Skip" on to its first app. On an app's plan page, "Try for free (limited)" is now a tiny "Skip" (the reason popup still comes first).

Tests: collector 842, CLI 188, runtime install 157, strict typecheck clean. Reviewed by the owner's other session (no blockers; its point about dashboard on a 402 is fixed in 5e1d6cb).

Not in this PR: the reused-Checkout return URL (stripe.ts), dead code from versions 4 and 5. Deploying the collector and publishing genclass 0.3.7 wait on the owner's OK; genclass-site needs its lib/ bump after this merges.

🤖 Generated with Claude Code

MeharPro and others added 2 commits November 12, 2026 23:28
…ogin, connect, init, apps new, and its views); the header shows the app's plan; the dashboard note says Free shows the totals

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ly the setup

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@genclass-dev

genclass-dev Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

GenClass runtime review

2 findings in this pull request's tests at 5e1d6cb · 2 reproducible · 5 tests read

# Status Finding Test Seen
1 Still flagged Witness, overwrote-newer · GET /api/search [chromium] search.spec.ts > search > buggy page: results of the last query 2 of 2 seeds, reproducible
2 Still flagged Witness, overwrote-newer · GET /api/search search.spec.ts > search > buggy page: results of the last query 5 of 5 seeds, reproducible

Reply @genclass-dev replay 1 for the steps to reproduce a finding, or @genclass-dev fix 1 for a brief a coding agent can work from.

The race report, test by test

Race report

2 signatures in 2 tests, 2 reproducible (flagged in 2 or more seeds of the same test) · 19 files read · mode observe

signatures reproducible
Duplicate submits 0 0
Stale responses 0 0
Failing endpoints 0 0
Other detections 0 0
Witnesses (facts measured without the model) 2 2
[chromium] search.spec.ts > search > buggy page: results of the last query

2 seeds (1, 2) · 1 signature · chaos: latency 0–600 ms, reorder

Witnesses (facts measured without the model)

  • Reproducible: 2 of 2 seeds (1, 2) · GET /api/search · witness:overwrote-newer

    The response of GET /api/search#​1 wrote search.results over what newer GET /api/search#​2, started 0.09s after GET /api/search#​1, had written (2 items ["re one", "re two"] → 2 items ["r one", "r two"]).

search.spec.ts > search > buggy page: results of the last query

5 seeds (1, 2, 3, 4, 5) · 1 signature · chaos: latency 0–600 ms, reorder

Witnesses (facts measured without the model)

  • Reproducible: 5 of 5 seeds (1, 2, 3, 4, 5) · GET /api/search · witness:overwrote-newer

    The response of GET /api/search#​1 wrote search.results over what newer GET /api/search#​4, started 0.25s after GET /api/search#​1, had written (2 items ["reac one", "reac two"] → 2 items ["r one", "r two"]).

3 tests with nothing flagged
  • [chromium] search.spec.ts > search > fixed page: results of the last query (2 seeds: 1, 2)
  • search.spec.ts > search > fixed page: results of the last query (5 seeds: 1, 2, 3, 4, 5)
  • search.spec.ts > search > latency only > buggy page, latency only: results of the last query (5 seeds: 1, 2, 3, 4, 5)

Lines under "Witnesses (facts measured without the model)" are happens-before facts the runtime measured in the page without the model, one per signature (witness kind, operation): overwrote-newer, a response wrote a field over what a newer request or the user had written since the request started; identical-in-flight, two identical requests in flight together from separate user actions. They carry no confidence: a fact is listed when it happened. Reproducible: seen in 2 or more seeds of the same test. Whether a fact is a bug is for you to decide (some overwrites are intended; many are repaired a moment later).


genclass-dev[bot] read 19 race files from the artifacts genclass-races-unmodified, genclass-races of this pull request's workflow run, never your source code. What the lines mean · Setup and settings · reply @genclass-dev help

MeharPro and others added 2 commits November 12, 2026 23:45
…ree one app; every new app sees its plan page, a paying account continues with its plan, an app past the plan's apps adds more

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ps (plans.json v5)

The owner's calls of 2026-11-13: "let's make the entire CLI paid", Pro per developer with up to 3 apps on the
account (more is Enterprise), Free one app on the website.

- genclass: Pro is the step right after the sign-in (paywall.mjs): the card, Enter opens the account's checkout
  with its 3-day trial and waits for the payment. Every command but login, logout, whoami, plan, upgrade, profile,
  status, remove, help and version asks first; signed out, the sign-in comes first. No terminal: one line with the
  checkout, exit code 1. A 402 needs_pro from the server says the same line everywhere.
- Collector: /api/cli routes but the overview and the account answer 402 needs_pro to a CLI session of an account
  with no plan and no paying team (cliPaid); overview and account carry `cli`. Browser sessions, servers that sell
  nothing and PLAN_GATES open are never locked.
- plans.json v5: Pro per_seat, limits.apps 3, no apps_per_unit; Free's lines in the owner's words (one app, totals,
  open-source basics, public GitHub App, page check, 100 live fixes). An app past Pro's 3 gets "Email us about
  Enterprise"; an app with its own version-4 subscription is never locked; lock messages name the app's plan page.
- Tests: collector 840, CLI 187, runtime install 157.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MeharPro MeharPro changed the title genclass 0.3.7: a new or connected app opens its plan page at once genclass 0.3.7: the command comes with Pro; Pro per developer for up to 3 apps (plans v5) Nov 13, 2026
…ree on a plan page is a tiny Skip

The owner, 2026-11-13: "when someone clicks free and gets started, we still give them the 3-day free trial and show
it on their screen and then have them click a tiny button that says skip ... our entire goal is for them to put
their credit cards in."

- /account for an account with no app, on Free, where Pro is sold: "Start your 3-day free trial" large (the
  account's Checkout with the trial) and a tiny Skip on to its first app. Phone width checked.
- An app's plan page: "Try for free (limited)" is now "Skip"; the reason popup still comes first.
- genclass dashboard and its views: a 402 needs_pro prints the paywall's line (and needs_pro in --json), as every
  other command does (review of #230).
- Tests: collector 842, CLI 188.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant