Take a repository's name, and nothing that merely finds one
Commit

repo view accepted a repo ULID and a bare name with --project. Neither
is a repository's name: a ULID identifies a row, and a name is unique
only inside a project, which is why the flag had to exist to scope it.
The verb takes /et/<project>/<repo>, /gh/<owner>/<repo> and an entire://
URL — forms that name their forge — so --project has nothing left to
scope and leaves with them.
The ULID also let repo view <mirror ULID> reach the native path, which
called /native-mirrors for a GitHub repo, labelled the row primary, and
accepted --authoritative for a repo Entire holds no provisioning state
for. Refusing the spelling settles that without a provider branch.
Three hints told users to run repo view <ULID>, which would now error
at the moment they were already stuck. They print the server's path.
repoViewRef falls back to the bare name when no path exists yet — not a
working ref, but the only name there is in that window, and the ID is on
the line above for support.
--authoritative now keeps its word. It promises to fail if the server
cannot confirm provisioning state, and a 200 whose body omits state is
exactly that: the read succeeded and still cannot say whether the repo is
usable. state is optional on the wire, and awaitRepoActive already
refuses the same answer when repo create waits.
Whether the command was interrupted is the context's answer, not an inference from the read's error: that relied on every wrapper preserving the chain, and missed the read SUCCEEDING as the cancellation lands, printing a table for work already stopped.
And the .git sentence was true of one forge. It is dropped from a /gh/
URL, where GitHub's naming makes it decoration, and kept on an /et/ one,
where a repo may be named web.git and trimming would address another.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Entire-Checkpoint: 01M3PTPZXXAQ5721DWM2X28X9C