repo create: suggest a name the server would accept
Commit

The parenthetical was the typed string minus four bytes, which is only
advice by coincidence. "WEB.git" was answered with (use "WEB"), and the
server then refused "WEB" for carrying uppercase -- a second refusal,
naming a rule the first message had not mentioned. A raw ULID, a name with
consecutive dots, a 65-character name and an underscored one were all
proposed the same way.
Lowercase the remainder and check its shape before offering it. Create is the one path where the server does not fold case: resolution folds, which is why nativeRepoRe accepts uppercase, but normalizeName rejects it outright at create time. So the answer to "WEB.git" is "web".
The shape checks reuse what is already here -- nativeRepoRe, which mirrors entiredb core/resource/project_name.go, plus the two rules a regexp cannot carry. No second mirror of the server's charset was needed.
This gates whether the CLI speaks, never whether it refuses, and that is
what makes a local check safe here. nativeRepoRe drifts one way: if the
server loosens, a local check refuses names that would work. A ref
survives that -- a ULID or a full entire:// URL gets past it -- but a
refused create has no escape hatch, so the name itself stays the
server's to judge. Going quiet costs a hint; guessing wrong costs a name
the user cannot create.
Refs COR-1892
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Entire-Checkpoint: 01M3SGMDMG7B38CRJCBGK51918