Skip to content

chore: release 0.1.57 - #234

Merged
pallaoro merged 7 commits into
mainfrom
taskwindow-was-here-locally-then-i
Sep 6, 2026
Merged

pallaoro merged 7 commits into
mainfrom
taskwindow-was-here-locally-then-i

Conversation

@pallaoro

@pallaoro pallaoro commented Sep 5, 2026

Copy link
Copy Markdown
Member

Bumps apps/desktop/package.json to 0.1.57 and records it in bun.lock. Cuts from main at 2bef2f2, whose CI is green.

Every PR merged since v0.1.56:

PR
#231 Loops: Auto mode (permission-free runs) and a composer-style create/edit form
#229 A terminal's size follows the viewer in use, not whoever fitted last
#228 Phone terminal: tap opens links, keyboard no longer toggles on tap
#222 Keep the mouse working in OpenCode panes after reattach, and let Option-drag select text
#220 Add a project to a box from GitHub, instead of git-initting an empty one
#219 Install an agent from the picker, on this Mac as well as on a box

Protocol goes 8 → 10 (v9 from #220, v10 from #231), which has a fleet-wide side effect worth stating up front: every box is on 8, so once a desktop updates to this release the auto-heal condition in host.ts (info.protocolVersion < PROTOCOL_VERSION) fires and each box is upgraded to this release on its next SSH connect. Boxes land on a dist carrying #218, #220 and #231 together, which is when the phone's GitHub repo picker becomes available on them.

Not included: #114, #86 and #20 remain open. #86 and #20 are CONFLICTING against main (135 and 218 commits behind), #114 is mergeable but has no CI run and is 109 behind. None can go into this release without being rehabilitated first.

Verified before cutting: CI green on 2bef2f2; 443 tests and typecheck pass locally on this tree; Developer ID cert X2VZX44YM2 and the ateam-notary profile both confirmed working.

The board merges a repo's copies across engines by (githubOwner, githubName),
but that identity was captured once at registration and never again. The
phone's "New project" git-inits an empty folder and registers it BEFORE
anything is cloned into it, so the row is born with no identity and never
regains one: the repo shows twice, and "Run on <box>" re-clones a copy the box
already has, into a second directory.

Read the identity from the repo's `origin` URL instead of `gh repo view`, and
re-derive it on every projects:list so a repo that gains a remote later repairs
itself. `gh repo view` needed gh installed, authed and online, so a box missing
any of the three silently lost its identity; with no argument it also resolves
through BaseRepo(), which reports a fork's PARENT, so two engines could derive
two different identities for the same clone. The repair writes through a new
repo.updateProject rather than upsertProject, which would have bumped
lastOpenedAt and reshuffled the sidebar on every board load.

The card key is now lowercased: two clones of one repo really do disagree on
casing (clawnify/taskwindow here against clawnify/TaskWindow on a box) and
GitHub treats those as the same repo.
The phone's only prominent action on "Add project" was "New", which creates a
folder, git-inits it and makes an initial commit. People pressed it meaning
"add", then grafted a real repo onto the empty one by hand. The box still shows
the seam: TaskWindow's reflog is an initial commit at 21:22:24 followed by a
`reset --hard origin/main` twenty minutes later. What that leaves behind is a
repo with no origin, which is the one state that can never be merged with its
copies on other engines and can never be provisioned onto a second box.

Ask the intent up front instead. "Bring one over from GitHub" clones a repo the
box's gh can see and registers it in one tap; "Use a repo already on the box"
is the old browser; "Start something new" names a folder, inits it, and offers
to create the GitHub repo for it at the same time, so a new project is portable
from birth rather than a dead end.

The repo list is read with `gh api user/repos?affiliation=owner,organization_member`
rather than `gh repo list`, which takes a single owner and defaults to the
authenticated user: it would have silently omitted every org repo, which for
most people is where the work is. Creating the remote is best-effort — if
GitHub refuses, the project is still registered and its null githubOwner is how
the client knows it has no remote yet.

Both halves are v9. Clone and the repo list stay off AteamApi, on the phone's
Connection alongside update(), because they address a box rather than an entity
on one: the desktop aggregate can't route them and would fall back to the local
Mac. A pre-v9 box has neither, and since v7 skew is advisory rather than a
refusal, FEATURE_MIN_VERSION.githubProjects is what hides them — an older
engine accepts `createRemote` and silently ignores it. Those boxes get the
paste-a-URL door instead, which works on anything from v2.
…ocally-then-i

# Conflicts:
#	packages/git-core/src/index.ts
#	packages/server/src/dispatcher.ts
@pallaoro
pallaoro merged commit a7819f8 into main Sep 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant