--- name: land-branch-without-checkout description: "Open a PR from a shared worktree when workspace policy blocks git checkout/restore: push a named branch ref from HEAD without switching branches." --- # Landing a branch when `git checkout` is policy-blocked Shared-workspace policy blocks `git checkout` and `git restore` (working-tree switches could strand concurrent agents' uncommitted work). You still must ship the commit on the current worktree branch as a named `chore|feat|fix/-` branch. Never work around the block — go around it via refs. ## Sequence ```bash # 1. commit only your files (atomic); leave other dirty paths alone git add && git commit -m "..." # 2. branch ref at HEAD — no working-tree change, stays on wt/<...> git branch /- HEAD git push origin /- # pre-push hooks still run # 3. PR via tracker API with head = pushed ref (see gitea-pr-api-cycle / gh) ``` - The worktree stays checked out on `wt/`; the new branch exists only as the pushed ref (plus a local ref that merges cleanly later). - `-u` upstream tracking on the wt branch is misleading — skip it; set `git config branch..remote origin` + `.merge` only if you will later check the branch out. - Dirty regenerated fixtures left behind (e.g. `gen:sample` PDFs rewritten by setup/gate runs): `git restore` is also blocked — do NOT edit-forward to revert them; report them. They are regenerated on every bootstrap, so dirt is expected and harmless. ## Verify - `git ls-remote --heads origin ` prints the same sha as `git rev-parse HEAD`. - PR API returns 201 with `head.sha` equal to that sha. ## Do NOT - `git checkout -b`, `git stash`, `git restore`, `git reset --hard` here — all working-tree mutations the policy can block, and stashes in a shared checkout are a cross-agent footgun.