repo create: suggest a name the server would accept

Commit

hiddeco6d ago

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

Checkpoints

Multi-Root Config Path Agent Support

Claude CodeOpus 5.[1m]
View session
Checkpoint 1

Standardize Repository Name Validation Logic

Claude CodeOpus 5.[1m]
View session
Checkpoint 1