feat(app): Quick Sync connects to GitHub or Gitea, sends a token only when asked, and the app opens where it was left #210

Merged
james.maes merged 3 commits from feat/209-gitea-quick-sync into main 2026-11-11 22:25:03 +00:00
3 Commits
Author SHA1 Message Date
james.maesandClaude Fable 5.2 1dce803d63 fix(app): Quick Sync uses no address that is being edited or cannot be used, and forgets what was typed before a place was chosen
From the review of #210.

- An address that was edited but not taken yet (the box was not left: a
  keyboard shortcut moves no focus) was still the place of a load started
  with Ctrl+R. The card now names no usable place while its address box holds
  another text than the address that was taken.
- An address made unusable after a load left the old place's table syncable,
  and a token typed next went to the old server's clone addresses. Sync,
  Retry failed and path recovery need a usable place, as Load and Find do; the
  commands check for themselves, whatever started them; no account is offered
  from a card that names no place.
- A token or organization put on the card before a place was chosen is not
  kept for the place that is: the view model no longer relies on the shell's
  disabled token box.
- The form follows its view model only while it is in the tree, and its own
  changes of the token box are not taken for typing.
- The workspace that was open is written when the window closes, not on every
  switch, and what the app remembers by itself is not written over a settings
  file that could not be read.
- The offer to save the connection is made once; a failure to remember the
  connection does not fail the load.
- README, ADR 0010, T13.

Refs #209

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-11 16:24:54 -06:00
james.maesandClaude Fable 5.2 05f1bd290f fix(app): no place is chosen by keyboard focus, and the pane's button closes and opens the pane
- Quick Sync's choice of place was a RadioButtons group. That control selects
  its first option as soon as keyboard focus lands on it, and the window opens
  with the focus there: GitHub was chosen before the user did anything, and a
  token typed next was for a place nobody chose. The choice is now two radio
  buttons of their own, which are checked by an act (a click, Space, an arrow
  key, UI automation) and never by focus.
- The navigation pane was set to stay open, so its button did nothing. The
  pane now closes to its icons and opens again, and has a title beside the
  button.
- UI suite: a launched app of its own for the first run (no place chosen,
  focus chooses none, choosing is an act), and a test for the pane's button.

Refs #209
Closes #213

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-11 16:24:54 -06:00
james.maesandClaude Fable 5.2 74d7590c58 feat(app): Quick Sync connects to GitHub or Gitea, sends a token only when asked, and the app opens where it was left
Step 4 of Gitea support (#201). GitHub and Gitea are equal options on the
card the app opens on, with the same two labels as the wizard.

- Quick Sync's card asks where the repositories are: GitHub or Gitea, and for
  Gitea the server's address. On a first run nothing is chosen, and the token
  box takes a token only once a place is. The title, the token box and the
  "How to create a token" link follow the place.
- Nothing is sent until the user asks. A token that is typed, pasted or filled
  in from a saved default goes nowhere by itself: the organization list is
  fetched when Find is pressed, and the repositories when Load is. Both go to
  the listers of the place on the card. An account's page lists and loads on
  open as before: its token was saved for its place.
- A server address is taken when its box is left, not while it is typed.
- Choosing another place empties the token, the organization and the table:
  the table's clone addresses are on the other host.
- The card opens the way the last connection that worked left it (place,
  address, organization, target folder, in settings.json). Never a token.
- Once a connection loaded its repositories, a bar offers to save it as an
  account; the account is saved on the place the connection was on.
- The app opens on the workspace that was open last; with nothing recorded,
  on the first account; with no account, on Quick Sync.
- The connection chip names the place, and the hint about a token that sees
  no organization is in the words of the forge.
- README, ADR 0010, threat model T16, CLAUDE.md.

Closes #209

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-11 16:24:53 -06:00