···155155tang repo clone onev.cat/tang-playground ./playground
156156```
157157158158+`repo clone` uses the SSH clone URL shown by the Tangled web UI, for example
159159+`git@tangled.org:onev.cat/tang-playground`. Make sure the matching public key is
160160+registered in Tangled before cloning private or writable repositories.
161161+158162Create a repository:
159163160164```sh
···201205Issue arguments may be a displayed number such as `1` or `#1`, a record rkey, or
202206a full AT URI.
203207208208+New records may need a short time before they appear in `issue list`, because
209209+Tangled discovers cross-record links through Constellation indexing. After
210210+creating an issue, keep the returned AT URI or rkey and use it directly for
211211+follow-up commands:
212212+213213+```sh
214214+tang issue view 3mkuteffbxa2b
215215+tang issue comment 3mkuteffbxa2b --body "More detail."
216216+```
217217+204218### Work With Pull Requests
205219206220List and inspect pull requests:
···241255tang pr merge 1 --subject "Merge pull request #1"
242256```
243257244244-`pr merge` applies the pull request patch locally, commits it, and records the
245245-pull request as merged on Tangled. Review the worktree before and after merging,
246246-especially when the pull request contains a large patch.
258258+`pr merge` sends the pull request patch to the repository's knot through
259259+Tangled's `sh.tangled.repo.merge` endpoint, then records the pull request as
260260+merged. It follows the same remote merge mechanism used by the Tangled web UI,
261261+with a narrower CLI surface: one pull request patch is merged at a time, and
262262+GitHub-style `--squash` / `--rebase` strategies are not part of the current
263263+Tangled endpoint.
247264248265Pull request arguments may be a displayed number such as `1` or `#1`, a record
249266rkey, or a full AT URI.
···272289```sh
273290tang config list
274291tang config get knot.hosts
275275-tang config set knot.hosts tangled.org,knot1.tangled.sh
292292+tang config set knot.hosts knot1.tangled.sh,tangled.org
276293tang config set appview.url https://tangled.org
277294tang config set constellation.url https://constellation.microcosm.blue
278295tang config set remote origin
···339356 writes.
340357- Some older pull request records do not contain patch rounds, so `pr diff` and
341358 `pr checkout` cannot operate on them.
359359+- SSH clone depends on Tangled's SSH key authorization index. If a freshly added
360360+ key is rejected, retry after the key appears in `tang ssh-key list`.
342361- `repo create` requires a create-capable knot. Pass `--knot` when the default
343362 service route is not sufficient.
344344-- `pr merge` is intentionally local-git based. It applies the patch and creates
345345- a commit in the current worktree, so the caller remains responsible for
346346- reviewing and pushing the result.
363363+- `pr merge` depends on the repository knot's `sh.tangled.repo.merge` endpoint.
364364+ It is a remote patch merge, not a local worktree merge.
+1
ai-docs/2026-05-02-PHASE_1_auth_basics.md
···46464747- The original plan expected `onev.cat` to resolve to `https://tngl.sh`; live DID resolution on 2026-05-02 returned `https://discina.us-west.host.bsky.network`. The implementation does not hardcode either value and uses the DID document result, which is the required behavior for migrated or custom-PDS accounts.
4848- The SSH-key E2E initially exposed that this PDS rejects unknown lexicons when `validate=true`. `PDSClient.CreateRecord` now sets `validate=false` for Tangled records, which keeps the CLI usable across PDS implementations that do not know Tangled schemas locally.
4949+- Follow-up on 2026-05-03: default `knot.hosts` now puts the create-capable `knot1.tangled.sh` first while keeping `tangled.org` as a recognized host for existing remotes.
49505051## Completion
5152
+2
ai-docs/2026-05-02-PHASE_3_repo_pr.md
···5454- `repo create` without `--knot` currently tries the configured default `tangled.org`; live validation returned a 404 HTML response for `sh.tangled.repo.create`. The real hosted create-capable knot for this account was `knot1.tangled.sh`, so the successful validation used `--knot knot1.tangled.sh`. This is a real deployment/config distinction, not a PDS hardcoding issue.
5555- Some old `tangled.org/core` PR records do not contain `rounds[]`; `tang pr diff` correctly reports `pull has no rounds` for those patchless/legacy records.
5656- `pr merge` does not expose `--squash`, `--rebase`, or `--merge`, matching the current Tangled merge endpoint.
5757+- Follow-up on 2026-05-03: `knot1.tangled.sh` is now the first default knot host, so `repo create` uses the create-capable knot by default. `tangled.org` remains in the default host list for AppView-style and existing remote URLs.
5858+- Follow-up on 2026-05-03: Tangled web maps repos whose record knot is `knot1.tangled.sh` to hosted clone URLs on `tangled.org`. After refreshing the account SSH key, `git clone git@tangled.org:onev.cat/tang-playground` succeeded, so `repo clone` now uses the web-equivalent SSH clone URL.
57595860## Completion
5961
···1212 if err != nil {
1313 t.Fatalf("LoadAt returned error: %v", err)
1414 }
1515- if !reflect.DeepEqual(cfg.Knot.Hosts, []string{"tangled.org"}) {
1515+ if !reflect.DeepEqual(cfg.Knot.Hosts, []string{"knot1.tangled.sh", "tangled.org"}) {
1616 t.Fatalf("default knot hosts = %#v", cfg.Knot.Hosts)
1717 }
1818 if cfg.Constellation.URL != DefaultConstellationURL {
+1-1
internal/tangled/pulls.go
···2222 "tangled.org/onev.cat/tang/internal/constellation"
2323)
24242525-var ErrPatchOnlyCheckout = errors.New("patch-only pull requests cannot be checked out")
2525+var ErrPatchOnlyCheckout = errors.New("pull request has no source branch; checkout only works for branch-based pull requests")
26262727type Pull struct {
2828 Number int `json:"number,omitempty"`