You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Mutate issue lifecycle from GitHub without a local mirror #457
Make issue close, reopen, and sync operate from live GitHub issue state even when no local epic/task mirror exists. Local progress files may supply explicit new evidence when present but cannot be authoritative or block a valid GitHub operation.
Acceptance criteria
Close reads the live issue and comment history, requires an explicit supplied completion record, and never treats issue-body planning text alone as completion evidence.
Completion fields are anchored; bold, backticked, empty, placeholder, chained-field, failed, and negative terminal results are rejected.
Runtime and tracking closure remains fail-closed until their distinct acceptance and controller evidence is present.
Reopen restores GitHub state without requiring local frontmatter and reports any optional local mirror as stale rather than authoritative.
Sync posts only explicit new evidence and treats absent local progress files as an optional no-op, not a fatal state mismatch.
A missing .claude/epics directory does not prevent valid close, reopen, or sync behavior.
One focused mutation check covers body-only rejection, placeholder/chained/failed evidence, runtime/tracking refusal, close, reopen, sync, and missing local mirrors.
Bash syntax, ShellCheck for executable shell snippets, and git diff --check pass.
Blocked by
#456 defines the lifecycle contract and terminology.
Historical metadata reconciliation, branch protection, runtime deployment, or trading behavior.
Broad removal of unrelated legacy PM commands.
Split note
The earlier combined lifecycle/publication candidate was split into #457 and #468. Final code review then proved #457 still crossed an independently rollbackable read/mutation boundary and exceeded the 750-line changed-line guardrail. #457 now owns only close/reopen/sync; #471 owns show/status/help/dashboard.
Activity
[-]Make issue lifecycle commands GitHub-first[/-][+]Mutate issue lifecycle from GitHub without a local mirror[/+]