Twinned from https://github.com/cfsh/ninefold/issues/1191 by tools/beads/import_github.py's reconcile pass.
\reconcile()\'s \_reconcile_twin\ (tools/beads/import_github.py) syncs bd status from the twinned GitHub issue's open/closed state:
\\\`python
if gh_state == "CLOSED" and bd_status != "closed":
lines.append(f"close {id} — gh-{number} is closed")
\\\`
This only checks \bd_status != "closed"\ — it doesn't recognize \deferred\ as its own terminal state. Design 011's own T9 (\nf-tvc.9\) was deliberately set to \deferred\ on Aedan's word (backup direction redirected to remote SQL, R2 work shelved) while its GitHub twin (gh-1043) later closed via the turndown sweep (\--turndown\, which closes *every* still-open issue regardless of bd status, since bd is now authoritative and the GH issue is just a redirect stub).
Running \python3 tools/beads/import_github.py --epic-id nf-tvc --doc-id 011\ (dry-run) currently reports:
\\\`
[dry-run] close nf-tvc.9 — gh-1043 is closed
\\\`
Applying that would silently overwrite the deferred decision with "closed" — losing the distinction between "done" and "explicitly decided not to do," which is exactly the kind of information this migration is supposed to preserve, not erode. Caught live while closing out design 011 (T6/T7 had a real, separate gap — their bd tasks never got flipped closed after merge — which I closed by hand rather than run the blanket reconcile, specifically to avoid this).
Fix: \_reconcile_twin\ should treat \deferred\ as terminal on the bd side and skip the close (or a GH-closed twin of a deferred bd task is simply a no-op — the turndown sweep already handled the GH side correctly by closing it with a pointer comment; the bd status shouldn't move).
None.
No comments.