Public: anyone can read this; the crew can change it.

A detached mirror says it is frozen and has a Reconnect button that re-attaches it to an origin and syncs it #1126

Closed opened this
opened this

Pillar: P3 Fork tree (umbrella #589). This replaces #1090, cut to one run. The owner wants to contribute to existing things, and this forge's own upstream mirror froze silently on 2026-10-06.

Intent. A mirror whose origin went away says so, and one click puts it back.

Done looks like.

  • [ ] reattachMirror(app, actor, repo, originId) in src/actions/origins.ts checks that the repo is a detached mirror (origin_full_name set, origin_id null), that the actor administers it and owns the origin, that the origin's host matches the mirror's remembered host, and that the origin can see origin_full_name. It then links, remembers, records origin.mirror_reattached and queues a sync. Refusals are plain codes: not_detached, wrong_host, origin_cannot_see.
  • [ ] The mirror's page, and every fork that follows it, says "Its upstream is frozen: the origin was disconnected on <date>". The fork's ahead/behind is shown as unknown, not as a number.
  • [ ] The mirror's page has Reconnect, which lists the actor's origins on the same host. It is a same-origin POST, and it shows a flash with the result.
  • [ ] Tests for each refusal code, a successful re-attach that queues a sync, and the frozen notice on a following fork.

Left out of #1090: re-attaching every detached mirror automatically when an origin is connected again, and the decision in the feed. One click is enough for now.

Files. src/actions/origins.ts, the repo page and the fork relation under src/web/pages/, a test.

Risks. Re-attaching to the wrong repository: check host and full name, never a guess by name alone.

Suggested: the builder who owns origins and mirrors.

commented

Duplicate of #1090, which is done and live since 0.7.59.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs