Archiving on close is a local side effect, so two clones disagree about what issue list -a shows #107

Open
opened 2026-08-15 12:54:31 +00:00 by a73x · 0 comments
a73x commented 2026-08-15 12:54:31 +00:00 (Migrated from git.a73x.sh)

[claude 2026-08-15] issue close moves the ref into refs/collab/archive/issues/, but that move is never replicated. A peer that receives the same close event through sync keeps the ref in the active namespace. The two clones then answer the same question differently.

Reproduced with two clones of one bare origin, alice closing and bob syncing:

alice$ git-collab issue close 656a46f4 --reason done && git-collab sync
alice$ git-collab issue list -a
No issues found.
alice$ git-collab refs | grep issues
issue, archived  refs/collab/archive/issues/656a46f4...

bob$ git-collab sync
bob$ git-collab issue list -a
656a46f4  closed  peer close test  (by alice)
bob$ git-collab refs | grep issues
issue  refs/collab/issues/656a46f4...

Two consequences:

  1. issue list -a is dead on the closing clone. Its help says "Show closed issues too", but list reads the active namespace unless --archived is passed (src/issue.rs:32-42), and close has just moved every locally-closed issue out of it (src/issue.rs:360-363). On that clone no -a invocation can ever surface a closed issue; you need -a --archived. Patches do not behave this way — patch list -a shows merged and closed patches.
  2. Archive state is not a property of the issue. It is a property of which clone ran the close, so it cannot round-trip. state::archive_issue_ref has exactly two callers, close and reopen (grep: nothing in sync/reconcile), so nothing converges it.

This also makes the closed set easy to mistake for empty and re-open duplicates of. git-collab search does cover archived issues, which is the only reason the state is reachable at all.

Worth deciding which is intended before fixing: either archiving converges as an event like any other status, or closing stops moving the ref and --archived becomes a genuine age/volume sweep rather than a synonym for closed.


Migrated from git-collab issue 531ba45d582622132941bc54e727270b637a50f9.

Original author: a73x dev@a73x.sh.

[claude 2026-08-15] `issue close` moves the ref into `refs/collab/archive/issues/`, but that move is never replicated. A peer that receives the same close event through `sync` keeps the ref in the active namespace. The two clones then answer the same question differently. Reproduced with two clones of one bare origin, alice closing and bob syncing: ``` alice$ git-collab issue close 656a46f4 --reason done && git-collab sync alice$ git-collab issue list -a No issues found. alice$ git-collab refs | grep issues issue, archived refs/collab/archive/issues/656a46f4... bob$ git-collab sync bob$ git-collab issue list -a 656a46f4 closed peer close test (by alice) bob$ git-collab refs | grep issues issue refs/collab/issues/656a46f4... ``` Two consequences: 1. **`issue list -a` is dead on the closing clone.** Its help says "Show closed issues too", but `list` reads the active namespace unless `--archived` is passed (src/issue.rs:32-42), and `close` has just moved every locally-closed issue out of it (src/issue.rs:360-363). On that clone no `-a` invocation can ever surface a closed issue; you need `-a --archived`. Patches do not behave this way — `patch list -a` shows merged and closed patches. 2. **Archive state is not a property of the issue.** It is a property of which clone ran the close, so it cannot round-trip. `state::archive_issue_ref` has exactly two callers, `close` and `reopen` (grep: nothing in sync/reconcile), so nothing converges it. This also makes the closed set easy to mistake for empty and re-open duplicates of. `git-collab search` does cover archived issues, which is the only reason the state is reachable at all. Worth deciding which is intended before fixing: either archiving converges as an event like any other status, or closing stops moving the ref and `--archived` becomes a genuine age/volume sweep rather than a synonym for closed. --- Migrated from git-collab issue `531ba45d582622132941bc54e727270b637a50f9`. Original author: a73x <dev@a73x.sh>.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
a73x/git-collab#107
No description provided.