Issue-side close/reopen convergence is fixed but untested #61

Closed
opened 2026-08-11 10:47:06 +00:00 by a73x · 0 comments
a73x commented 2026-08-11 10:47:06 +00:00 (Migrated from git.a73x.sh)

64194908 fixed a real divergence: close moves a ref between the active and archive namespaces while the id stays the same, and reconcile_refs only globbed the active sync prefix — so one clone's archived close and another clone's active reopen were adopted as two divergent DAGs for one object, which no later sync could reunite.

Confirmed by reverting the fix: a_concurrent_close_and_reopen_converge fails.

The same code path fixes issues as well as patches, but only the patch side has a convergence test. Issues are the more common object and issue reopen has existed longer than patch reopen, so the untested side is the one more likely to have been hit in practice.

Also uncovered from the same patch: release publish --json and release delete --json are wired but have no test, because they need the SSH server harness.

Wanted: the issue-side twin of a_concurrent_close_and_reopen_converge, and release --json coverage under the SSH harness.

One caveat recorded about the existing test: it asserts the two clones agree, not which side wins — that is decided by (clock, oid) and varies per run. Both branches were exercised across repeat runs but neither is pinned deterministically. A test that pins the winner would be stronger.


Migrated from git-collab issue f1913b56c7d9bbea083b5fc58649cc5543c05218.

Original author: a73x dev@a73x.sh.

Close reason: merged in patch 7a39e6a8

`64194908` fixed a real divergence: `close` moves a ref between the active and archive namespaces while the id stays the same, and `reconcile_refs` only globbed the active sync prefix — so one clone's archived close and another clone's active reopen were adopted as **two divergent DAGs for one object**, which no later sync could reunite. Confirmed by reverting the fix: `a_concurrent_close_and_reopen_converge` fails. The same code path fixes issues as well as patches, but only the patch side has a convergence test. Issues are the more common object and `issue reopen` has existed longer than `patch reopen`, so the untested side is the one more likely to have been hit in practice. Also uncovered from the same patch: `release publish --json` and `release delete --json` are wired but have no test, because they need the SSH server harness. Wanted: the issue-side twin of `a_concurrent_close_and_reopen_converge`, and release `--json` coverage under the SSH harness. One caveat recorded about the existing test: it asserts the two clones **agree**, not which side wins — that is decided by `(clock, oid)` and varies per run. Both branches were exercised across repeat runs but neither is pinned deterministically. A test that pins the winner would be stronger. --- Migrated from git-collab issue `f1913b56c7d9bbea083b5fc58649cc5543c05218`. Original author: a73x <dev@a73x.sh>. Close reason: merged in patch 7a39e6a8
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#61
No description provided.