Skip to content

[gnhf#191] fix(cli): preserve worktrees across Linux sleep re-exec #2323

Description

@github-actions

Decision needed - gnhf#191

PR review by jasonqlwilliams-alt · merge-ready

fix(cli): preserve worktrees across Linux sleep re-exec

Situation

  • Compliance: pass
  • Tests: green
  • Merge state: mergeable (informational)
  • Configured checks: PR must be raised via no-mistakes (compliance: pass), Generated files must not be hand-edited (informational: pass), build-and-test (macos-latest) (test: pass), build-and-test (ubuntu-latest) (test: pass), build-and-test (windows-latest) (test: pass)
  • Freshness: complete target observation as of 2026-08-12T23:55:49Z
  • Notes: compliance=pass tests=green

Related work

Note

Related-work context is truncated (comparison_incomplete): comparison across open pull requests is incomplete, so a relation may be missed; this says nothing about the target itself. The candidate list, shared paths, and references are advisory display only and never an overlap or action gate.

  • kunchenguid/gnhf#164 - fix(agents): recover pi JSON output that follows prose - exact shared path: AGENTS.md
  • kunchenguid/gnhf#168 - fix: preserve worktree with commits on force-shutdown - exact shared path: src/cli.ts
  • kunchenguid/gnhf#169 - feat: add --sign-commits flag for optional git commit signing - exact shared path: src/cli.ts
  • kunchenguid/gnhf#170 - fix: preserve worktree on force-shutdown timeout - exact shared path: src/cli.ts
  • kunchenguid/gnhf#173 - feat: add gemini-cli support - exact shared paths: AGENTS.md, README.md
  • kunchenguid/gnhf#179 - feat(agents): wait for the usage window to reset instead of aborting on rate limits - exact shared paths: AGENTS.md, README.md
  • kunchenguid/gnhf#186 - feat: add --score-command metric gate with keep/discard and non-improving stop - exact shared path: src/cli.ts
  • kunchenguid/gnhf#188 - feat(agents): add Antigravity (agy) support - exact shared path: README.md
  • kunchenguid/gnhf#189 - fix(cli): preserve committed worktrees on forced shutdown - exact shared paths: AGENTS.md, src/cli.ts

Advisory context only. Shared paths and references are not an auto-merge overlap gate.

Auto-merge criteria

Note

Read-only preflight from the authoritative auto-merge evaluator. A displayed MET result never authorizes a merge: Wheelhouse re-evaluates every gate and performs G7 immediately before acting.

Scope

  • MET Scope - merge-ready PR review - kind=pr-review bucket=merge-ready

Safety

  • MET Safety - complete healthy scan - repo scan is ok and complete
  • MET Safety - target PR is open - target PR is open and unmerged
  • UNAVAILABLE Safety - no per-PR auto-merge opt-out - target labels could not be read
  • MET Safety - head SHA unchanged - scan and live head 2966d008

G0 (repo)

  • MET G0 - repository auto-merge enabled - enabled by effective repository policy
  • MET G0 - default-branch VISION.md present - default-branch VISION.md 72826290

G1 (card)

G2 (files)

  • MET G2 - complete immutable file list - 4 immutable changed path entries read
  • MET G2 - workflow and security exclusions clear - no unconditional workflow/security/governance exclusions

G3 (author)

  • MET G3 - non-maintainer human contributor - jasonqlwilliams-alt is a non-maintainer human
  • MET G3 - prior merged contribution in this repo - jasonqlwilliams-alt has at least one prior merged PR in gnhf

G4 (checks)

  • MET G4 - configured checks green - comp=pass tests=green (merge-ready)
  • MET G4 - PR mergeable - live mergeable is MERGEABLE
  • UNMET G4 - merge state clean - live merge state is 'blocked'

G5 (size)

  • MET G5 - changed-file limit - 4 changed files <= 20
  • MET G5 - changed-line limit - 94 changed lines <= 1000

G6 (triage + behavior)

  • MET G6 - automatic triage credential configured - model credential is configured; card triage eligibility is evaluated separately
  • MET G6 - successful triage for current head - successful triage for head 2966d008
  • MET G6 - top-level recommendation is merge - explicit merge recommendation
  • MET G6 - eligible behavior class - class B with bounded corrected-defect and restored-behavior evidence
  • MET G6 - existing/default behavior unchanged - no existing/default behavior change
  • MET G6 - class C is opt-in and default-off - not applicable to class B
  • VISION.md-dependent checks
    • UNAVAILABLE G6 - behavior aligns with VISION.md - not evaluated because a trusted default-branch VISION.md is required
    • UNAVAILABLE G6 - behavior verdict recommends merge - not evaluated because a trusted default-branch VISION.md is required
    • UNAVAILABLE G6 - verdict uses current VISION.md revision - not evaluated because no vision-bound behavior verdict exists
    • UNAVAILABLE G6 - verdict uses current base revision - not evaluated because no vision-bound behavior verdict exists

G7 (final gate)

  • UNAVAILABLE G7 - immediate live recheck and manual merge gate - runs only immediately before merge: card claim, VISION, head/base, mergeability, checks, opt-out label, and unchanged manual workflow gate

Triage

  • Summary: Fixes Linux data-loss defect where the wrapper process deleted a committed worktree after re-execing gnhf under systemd-inhibit; adds a process-boundary e2e regression and documents the zero-commit re-exec leak as a known limitation.
  • Product implications: Routine merge: this is a narrow, high-confidence fix for a live data-loss defect on Linux with the default preventSleep setting. The single-line fix (worktreeCleanup = null) correctly surrenders worktree lifecycle ownership from the wrapper to the re-execed child before the wrapper exits. The explicitly accepted zero-commit leak (gnhf-reexec-worktree-leak-l1) is documented but not fixed. All three platform CI jobs and compliance checks pass.

Recommended action

  • Agent recommendation: merge
  • Reason: Class B cleanly restores the documented committed-worktree preservation contract on the Linux re-exec path. Single-line fix is correct and well-scoped. New e2e test exercises the real process boundary and gates the invariant. All configured checks green.

From the current admitted automatic triage assessment for this exact revision. Tick Accept recommendation to apply it - it is advisory and never an auto-merge authorization.

Your decision

Tick one box for a quick call, or reply with a slash-command (/merge, /close, /decline <reason>, /hold, /comment <text>, /request-changes <text>):

  • Accept recommendation
  • Merge it
  • Close / decline
  • Investigate - deep code-grounded review (leaves this card open)
  • Hold - I'll handle this manually

Only the repository owner can drive this decision - everyone else's edits and comments are ignored.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions