carlos / platform Public

carlos apps create shows the account sqid where a human wants the name ("in account bab") Issue open

Migrated from github.com/carlosframework/platform issue #81, opened 2026-08-07. GitHub issues are closed for this repo; see AGENTS.md, "Work is tracked on amadan, not GitHub".

Still outstanding: apps create prints the account sqid where a human wants the account name.

---

Summary

carlos apps create reports success using the account's sqid where a human wants its name, and then teaches the sqid as the normal way to pass -account. A first-time user is shown an opaque three-letter token they never typed, with no stated relationship to anything they have seen.

Observed on a fresh self-hosted deployment, from a user who had just run their first ever apps create:

$ carlos apps create -app echo
using https://carlos.exciting.io as james@keymail.dev
created app echo in account bab — it's yours
  open: https://carlos.exciting.io/a/bab/apps/echo
  ship: carlos ship -account bab -app echo ...

Their reaction, verbatim: "wtf is 'bab'? that's very confusing for a first-time user". That is the correct reaction. Nothing in the command mentioned bab; the account they were placed in is called ops.

The line

apps.go:373

fmt.Fprintf(stdout, "created app %s in account %s — it's yours\n", res.App, res.Account)

res.Account is the sqid. The CLI has the name available — carlos accounts list prints SQID NAME APPS ID — so this is a formatting choice, not missing information.

Why it matters more than it looks

  • The sqid is structural, not conversational. It exists so app names can be unique per account while still fitting in a hostname (echo.bab.carlos.exciting.io) and a bucket key (apps/bab/echo/). Those are the places it belongs. A success message is not one of them.
  • The hint actively teaches the wrong habit. carlos ship -account bab -app echo suggests the sqid is how you address an account. -account accepts a name, and defaults to ops — so in the common case the flag is not merely unfriendly, it is redundant.
  • It compounds a real confusion. ops is created by migration on every deployment and is the default -account, so a new user's first app lands in an account they did not create, addressed by a label they cannot decode. Two unexplained pieces of vocabulary in one line of output.
  • bab is Sqid(1) on every deployment forever, so this exact string is the first thing essentially every new CARLOS user will meet.

Suggested fix

Name for humans; sqid only where it is structural.

created app echo in account ops — it's yours
  open: https://carlos.exciting.io/a/bab/apps/echo
  ship: carlos ship -app echo ...
  • Print the account name in the prose. If disambiguation is wanted, account ops (bab) — name first.
  • Drop -account from the suggested ship line when the account is the default ops; otherwise emit -account <name>, not the sqid.
  • The URL keeps the sqid, correctly — it is the addressing scheme.

internal/console/server.go:1449 has the same message for the browser form ("Created app "+name+" — it's yours.") and does not name the account at all; worth keeping the two consistent.

Related

Same first-run surface as #79. This one is likelier to be hit: #79 requires shipping in direct-bucket mode before claiming, whereas this greets everyone who ever runs apps create.