Skip to content

refactor(stocks)!: rename ticker to stocks - #324

Merged
ralyodio merged 1 commit into
mainfrom
rename-ticker-to-stocks
Aug 8, 2026
Merged

refactor(stocks)!: rename ticker to stocks#324
ralyodio merged 1 commit into
mainfrom
rename-ticker-to-stocks

Conversation

@ralyodio

@ralyodio ralyodio commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

BREAKING CHANGE: moshcode ticker and /ticker are gone. The verb is moshcode stocks / /stocks. advisor remains an alias, unchanged.

ticker named the argument, not the subject. That was fine while it was the only market verb — it stopped being fine the moment /crypto landed beside it, because "ticker" describes a symbol both surfaces use and a market only one of them covers. stocks sits opposite crypto and says which is which.

Hard rename rather than an alias: two names for one verb is exactly the confusion this rename exists to remove, and the window since v0.26.0 is two days.

The old name is not silently dead

src/help.mjs gains a RENAMED_COMMANDS table — deliberately not an alias table, since the verb stays gone — so both the CLI and the pit say where it went:

$ moshcode ticker NVDA
✗ unknown command "ticker" — did you mean stocks?

mosh ▸ /ticker NVDA
✗ unknown command "/ticker NVDA" — /ticker is now /stocks.

Edit distance could never have produced that suggestion; ticker is six edits from stocks. A test asserts every entry in the table names a command that exists and an old name that no longer dispatches, so the table can't rot.

What deliberately did not change

The word "ticker" stays wherever it means a symbol rather than the command:

  • is not a ticker symbol, the tickers verb, --sort ticker
  • advis0r's own /api/ticker and /ticker/<SYMBOL> routes, and the ticker response field
  • moshcode trade ticker AAPL — Alpaca's asset lookup, a different command entirely. The rename scripts asserted it survived rather than trusting a global find-and-replace.

The plugin keeps its id. ticker@moshcode still installs, and its command is now /stocks. Renaming the plugin would force everyone who already installed it to uninstall and reinstall, which an id is not worth — existing installs pick /stocks up on the next plugin update. The plugin README states this so the mismatch reads as a decision, not an oversight.

prd/0008 is left as written — it records what was proposed at the time.

Verification

  • Full suite: 1386 tests, 0 failures (one new test for the rename table).
  • Ran live: moshcode stocks NVDA, moshcode advisor NVDA, moshcode ticker NVDA (now the hint), and /stocks + /ticker inside the pit.
  • README command table regenerated by its own generator, not by hand.

🤖 Generated with Claude Code

BREAKING CHANGE: `moshcode ticker` and `/ticker` are gone. The verb is
`moshcode stocks` / `/stocks`; `advisor` remains an alias, unchanged.

`ticker` named the argument, not the subject. That was fine while it was the
only market verb — it stopped being fine the moment `/crypto` landed beside it,
because "ticker" describes a symbol both surfaces use and a market only one of
them covers. `stocks` sits opposite `crypto` and says which is which.

A hard rename rather than an alias: two names for one verb is the confusion
this rename exists to remove, and the window since v0.26.0 is two days.

The old name is not silently dead. src/help.mjs gains a RENAMED_COMMANDS table
— deliberately not an alias table, since the verb stays gone — so both the CLI
and the pit answer with where it went:

  $ moshcode ticker NVDA
  ✗ unknown command "ticker" — did you mean stocks?

  mosh ▸ /ticker NVDA
  ✗ unknown command "/ticker NVDA" — /ticker is now /stocks.

Edit distance could never have produced that suggestion; `ticker` is six edits
from `stocks`. A test asserts every entry in the table names a command that
exists and an old name that no longer dispatches.

The word "ticker" stays wherever it means a symbol rather than the command:
`is not a ticker symbol`, the `tickers` verb, `--sort ticker`, advis0r's own
`/api/ticker` and `/ticker/<SYMBOL>` routes, and the `ticker` response field.
`moshcode trade ticker AAPL` is Alpaca's asset lookup and is untouched — the
rename script asserted it survived rather than trusting a global replace.

The plugin keeps its id. `ticker@moshcode` still installs, and its command is
now `/stocks`; renaming the plugin would force every existing install to
uninstall and reinstall, which an id is not worth. Its README says so, so the
mismatch reads as a decision rather than an oversight.

prd/0008 is left as written — it records what was proposed at the time.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

91 finding(s)

HIGH/CRITICAL: 2 | MEDIUM: 41 | LOW: 48

Severity Rule Location
HIGH manifest-typosquat apps/pwa/package.json:19
HIGH js-ssrf-outbound-request apps/pwa/public/sw.js:45
MEDIUM tls-verification-disabled apps/pwa/src/lib/moshpit-gateway.mjs:299
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:61
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:75
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:101
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:265
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:269
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:314
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:499
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:675
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:677
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:736
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:782
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:852
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:955
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:1063
MEDIUM sql-template-interpolation apps/pwa/src/moshpit.mjs:1199
MEDIUM js-unescaped-html-sink apps/pwa/src/routes/moshpit.mjs:1419
MEDIUM js-dynamic-code-execution apps/pwa/test/apikey-mask.test.mjs:129
MEDIUM sql-template-interpolation apps/pwa/test/credits-webhook-event-match.test.mjs:111
MEDIUM sql-template-interpolation apps/pwa/test/credits-webhook-event-match.test.mjs:131
MEDIUM sql-template-interpolation apps/pwa/test/moshpit-terms.test.mjs:192
MEDIUM sql-template-interpolation src/dns.mjs:2439
MEDIUM sql-template-interpolation src/selfupdate.mjs:166
MEDIUM sql-template-interpolation src/selfupdate.mjs:170
MEDIUM sql-template-interpolation src/selfupdate.mjs:208
MEDIUM sql-template-interpolation src/selfupdate.mjs:209
MEDIUM insecure-temp-file test/dns-disable-restore.test.mjs:93
MEDIUM insecure-temp-file test/dns-disable-restore.test.mjs:310
MEDIUM insecure-temp-file test/plugins.test.mjs:92
MEDIUM insecure-temp-file test/pty.test.mjs:28
MEDIUM insecure-temp-file test/pty.test.mjs:31
MEDIUM insecure-temp-file test/pty.test.mjs:40
MEDIUM insecure-temp-file test/pty.test.mjs:42
MEDIUM insecure-temp-file test/pty.test.mjs:47
MEDIUM insecure-temp-file test/pty.test.mjs:48
MEDIUM insecure-temp-file test/pty.test.mjs:49
MEDIUM insecure-temp-file test/tabs.test.mjs:8
MEDIUM insecure-temp-file test/tabs.test.mjs:13
MEDIUM insecure-temp-file test/tabs.test.mjs:14
MEDIUM insecure-temp-file test/tabs.test.mjs:22
MEDIUM insecure-temp-file test/trust.test.mjs:240
LOW secret-generic-credential apps/pwa/test/apikey-bearer-scheme.test.mjs:30
LOW secret-generic-credential apps/pwa/test/apikey-mask.test.mjs:38
LOW secret-generic-credential apps/pwa/test/apikey-reveal.test.mjs:35
LOW secret-generic-credential apps/pwa/test/approvals-context.test.mjs:28
LOW secret-generic-credential apps/pwa/test/approvals-credits.test.mjs:28
LOW secret-generic-credential apps/pwa/test/approvals-notify.test.mjs:26
LOW secret-generic-credential apps/pwa/test/approvals-resolve-race.test.mjs:20

…and 41 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit d7073f4 into main Aug 8, 2026
4 checks passed
@ralyodio ralyodio mentioned this pull request Aug 8, 2026
ralyodio added a commit that referenced this pull request Aug 8, 2026
Bump to v0.28.0, releasing the rename of `ticker` to `stocks` (#324).

Breaking, and the first release in this series that is: `moshcode ticker` and
`/ticker` no longer dispatch. The verb is `moshcode stocks` / `/stocks`, and
`advisor` remains an alias. Minor rather than major because the project is
pre-1.0, where a minor is the conventional place for a breaking change — and
because the break is one verb, one release old, that answers with where it went
rather than a bare "unknown command".

`ticker@moshcode` keeps its plugin id and installs unchanged; its command is
now `/stocks`, which existing installs pick up on the next plugin update.

The rename is what makes the release necessary rather than optional: install.sh
serves the latest release tarball, so until a release carries it every installed
binary still answers to `ticker` and not to `stocks`.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio deleted the rename-ticker-to-stocks branch August 8, 2026 17:01
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