feat(cli): iris pricing — the agent can tell a user where to sign up - #60
Open
mayoalexander wants to merge 1 commit into
Open
feat(cli): iris pricing — the agent can tell a user where to sign up#60mayoalexander wants to merge 1 commit into
mayoalexander wants to merge 1 commit into
Conversation
…sign up IRIS's conversion event is an install: someone runs the CLI or the desktop app and the agent is meant to hand them everything after that. It could not hand them the one thing that closes the loop. There is no pricing, plans, billing, account or subscribe verb; `packages` is operator tooling for EDITING the catalogue, not a way for a user to buy. A user who installed the CLI had no in-terminal path to a plan — they had to already know a URL nobody had told them. Two properties, both learned from live bugs rather than chosen: WORKS SIGNED OUT. The person who needs this most has just installed and has no account. Gating pricing behind auth fails exactly the user it exists for. The catalogue read is tolerant of any failure and still prints the pricing URL, because a URL with no table beats a table nobody can reach. NEVER PRINTS THE OTHER BRAND'S URL. heyiris.io/register and heyiris.io/pricing both shipped redirects to freelabel.net — an IRIS visitor handed another company's page. An agent repeating that in a terminal is trusted more than a web page is, and no analytics catches it. Filtering is on each package's own brand field. The brand mapping is not cosmetic. The catalogue's stored values are "iris" and "elon" — NOT "freelabel". The first version of this file filtered on "freelabel" and matched zero of the 24 live packages, rendering an empty list. Caught by running the filter against the real catalogue rather than against what the word ought to have been. BRAND_VALUES maps the user-facing word to the stored legacy one so the CLI's vocabulary stays honest without asking the catalogue to migrate. Verified against all 24 live packages: --brand iris returns 19, --brand freelabel returns 5, and neither leaks a plan or a URL belonging to the other. Not verified: yargs wiring, irisFetch at runtime, and rendered output — a full `bun install` needs ~2GB and fails on a native build script, so the assembled command could not be executed here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WcmgfXD81U3cgNv9L2ZzfL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
iris pricingso the on-machine agent can close the loop it currently cannot.IRIS's conversion event is an install — the agent is meant to hand over the dashboard, support and the plan once it is running. There was no
pricing,plans,billing,accountorsubscribeverb;packagesis operator tooling for editing the catalogue, not a way for a user to buy.Two design decisions, both from live bugs
Works signed out. The user who needs this has just installed and has no account. Gating it behind auth fails exactly that person. Any catalogue read failure still prints the pricing URL.
Never prints the other brand's URL.
heyiris.io/registerandheyiris.io/pricingboth shipped redirects tofreelabel.net. An agent repeating that in a terminal is trusted more than a web page, and no analytics catches it.The brand mapping is load-bearing
The catalogue stores
irisandelon— notfreelabel. The first version filtered on"freelabel", matched 0 of 24 live packages, and rendered an empty list. Caught by running the filter against the real catalogue instead of against what the word ought to have been.Verification
Ran the filtering logic against all 24 live packages:
Not verified: yargs wiring,
irisFetchat runtime, rendered output. A fullbun installneeds ~2GB and fails onnode-gyp-build/tree-sitter-bash, so the assembled command could not be executed. Worth a smoke test on a machine that can build — the signed-out path especially, since that is the user it exists for.Related: #183182
🤖 Generated with Claude Code
https://claude.ai/code/session_01WcmgfXD81U3cgNv9L2ZzfL