Skip to content

fix(lifecycle): retry retirement reads and honor second Ctrl-C (HACK-2184) - #809

Merged
roodboi merged 13 commits into
nextfrom
codex/hack-2184-retirement-followup
Nov 14, 2026
Merged

roodboi merged 13 commits into
nextfrom
codex/hack-2184-retirement-followup

Conversation

@roodboi

@roodboi roodboi commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Lifecycle retirement now retries transient process-census failures within its deadline, lets a second Ctrl-C request the single command-group SIGKILL, preserves the wrapper reap window, and refreshes a missing pane start time through the owned mux. Unknown observations never become absence; identity and ownership checks still precede effects.

On macOS, probe EPERM can mean a zombie-only group. Both shared retirement and the native post-stop proof now consult the zombie-aware census. TERM/KILL EPERM is benign only after retirement is proved; a live member still refuses. The five-second grace and existing finite budgets remain.

The latest native cancellation fix separates failed-launch cleanup freshness from canceled startup inputs. The frontend still checks native admission and hook ownership; the factory still checks directory pins and the saved owner record; mux-token and process-identity checks remain. Normal startup and ordinary stop retain full input freshness. The extended portable regression cancels both the startup budget and input authority while a launch census misses the pane birth: the old code refuses before the mux stop, while the fix removes the owned mux/state before teardown inputs are refreshed. The macOS recovery test and expectation are unchanged.

Lifecycle retirement

Diagram source.

Validation at 9aa27cf9:

  • Normal merge includes next at 5965b234. The same persistent Opus reviewer is clean on the fix and merge.
  • Linux: 75 tests / 422 assertions across seven focused files pass after the merge, including real FIFO/zombie retirement, cleanup signals, native ownership and the strengthened cancellation regression. CLI typecheck, quality, changed-file lint, privacy, docs and compiled build pass.
  • The extended regression fails at the old head before token-checked mux stop; value-free before/after traces show the differing branch. Earlier EPERM and force/birth-refresh mutation evidence remains recorded in comments.
  • The lead's Mac FIFO loop passed 20/20 at c2ceffe1. That is earlier-head platform evidence. The native recovery file still failed at diagnostic head 4ba1ee77; its full Mac rerun at this candidate is pending. No Mac fix acceptance is claimed from Linux tests.
  • Current-head hosted CI and Codex review are pending. ci:mac and ci:e2e remain requested; FIFO and held-zombie files run in both OS pools, and native recovery is in the macOS pool. See comments for exact-head acceptance updates.

The docs distinguish polling budgets from wall-clock bounds and describe canceled-launch cleanup. Optional HACK_LIFECYCLE_RETIREMENT_TRACE=1 writes only fixed branch labels, numeric IDs/counts and boolean outcomes, excluding values, tokens, paths and raw errors.

Native adapter context: #789's e9825ccd made the native host adapter await the shared zombie-aware proof and bounded settlement by wall clock. This follow-up keeps those checks and narrows only failed-launch cleanup's canceled-input dependency. Hook scheduling and native admission are unchanged.

HACK-2184

@roodboi roodboi added the ci:e2e Run the Docker e2e tier for this pull request label Nov 14, 2026
@vercel

vercel Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hack-docs Ready Ready Preview Nov 14, 2026 9:11am UTC

Request Review

@linear-code

linear-code Bot commented Nov 14, 2026

Copy link
Copy Markdown

HACK-2184

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-14T09:14:35.744878Z 9aa27cf Manual request
🔒 Security Review ✅ Completed 2026-11-14T09:15:55.003852Z 9aa27cf Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 42004bf7e6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/project-lifecycle-controller.ts Resolved
@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 42004bf7e6

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: 3afa3be03e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 3afa3be03e

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Qualification checkpoint at 3afa3be03e911dec2c8c57c9b09de266726a0998, including a normal merge of next at a262d42762ae7b395921564203192b75169733d0.

All requested HACK-2184 follow-up items are implemented. Failed censuses retry inside finite initial/grace/confirmation budgets, never becoming absence. A second Ctrl-C skips grace to the single identity-checked KILL; confirmation remains mandatory. Missing launch births refresh only from the same current owned pane, with ownership checked before and after. A failed pane query still reaches the token-checked mux stop and retains unknown descendant state. The timing table includes process-read overshoot, identity retries, mux work and optional birth refresh. The absent-Python test skips, the Compose log-prefix assumption is documented, and the PR description explains the native adapter change at e9825ccd.

Persistent Opus and Codex code reviews are clean at this exact head. Codex receipt: #809 (comment). The failed-pane-refresh finding is fixed, replied to and resolved.

The rebuilt executable passed 10/10 consecutive Docker scenarios, each exercising plain, graceful and forced shutdown: 30 foreground invocations, ten graceful one-second TERM handlers and ten forced cases. Zero failures, skips or fixture-network leaks. SHA-256 3d229b991e2e8095997e6bd73d3ffbd7b6d120f65d045a5f9d7963f84debc050 matched after every run.

125 focused tests / 668 assertions across 12 files passed before the recovery fix; 54 recovery tests / 272 assertions passed after it. CLI typecheck, quality, changed-file lint, privacy, docs checks and build pass. The old polling/force engine fails four discriminating regressions; bypassing refreshed birth metadata fails its controller regression. With Python absent, the zombie file reports one skip and zero failure. All eight shards cover the 768-file set once.

Hosted Linux test shards, process-lifetime, docs and Docker jobs remain pending. No macOS shards were dispatched; the PR uses ci:e2e, without ci:mac or ci:full. Mac signal/kernel behavior and the installed artifact remain separate qualification. The lead's Ready for lead note follows green Linux gates and the final bot check.

Task runtimes and all new scratch are cleaned. Older protected scratch is retained after the previously reported safe-rm refusals. HACK-2215 and HACK-2196 remain separate work.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: ad52ba034c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: ad52ba034c820f7705bdbb5581edb68faf03e2ae. All three requested nits are pushed, and persistent Opus review is clean at this exact head.

  1. Cold-child readiness is now 10 seconds, with a 15-second watchdog and 20-second test timeout.
  2. Kept and documented the existing counting behavior: the foreground guard counts interrupts before Compose starts. Two Ctrl-Cs while Compose stops containers also skip the later lifecycle command grace.
  3. The wrapper phase keeps its full five-second reap window. Force applies only to command retirement, so the wrapper can reap the command/reader and remove its private FIFO directory. Identity/ownership checks, the single escalation and post-KILL confirmation remain intact.

The new real forced-FIFO regression adds a deliberate 300 ms wrapper cleanup delay, proves its private directory exists before retirement, and requires it gone afterward. Restoring the previous forced-wrapper behavior fails specifically on the leftover-directory assertion. The negative-control teardown ESRCH race was corrected so it no longer masks that result.

At this head: 32 focused tests / 152 assertions, CLI typecheck, quality check, changed-file lint, docs checks, privacy and build pass. The compiled Docker scenario passes all three modes (plain, graceful, forced): three foreground invocations, zero skips and no fixture-network leaks. The earlier 3afa3be0 executable passed 10/10 scenarios / 30 invocations; no new-head ten-run loop is claimed.

Normal merge of next at a262d42762ae7b395921564203192b75169733d0 is included. Review status was CLEAR with zero unresolved bot threads at this head; Codex re-review and hosted Linux/Docker CI restarted after the push and remain pending. This note follows the lead's explicit request to push the nits and post readiness now; it does not claim those pending checks are green. No macOS shards were dispatched (ci:e2e only). The lead's Mac batch remains separate evidence.

All new task scratch and runtimes are cleaned. The next queue is HACK-2218 doctor R7a/R7b/R7c, then HACK-2196 and HACK-2210. HACK-2215's Rust supervisor remains a separate unit.

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: ad52ba034c

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi roodboi added the ci:mac Run macOS checks for this pull request label Nov 14, 2026
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: PR #809 at fb40dd3aa7f2c50d93cdd9e9f394d72d9b84af47.

Probe EPERM now falls through to the zombie-aware census, including the native post-stop proof. TERM/KILL EPERM is benign only after retirement is proved; a live member still refuses. Failed reads use the existing polling deadlines, with no new signal or wait budget. next was merged normally at 6b161bae and is still current at the last fetch.

  • Same persistent Opus reviewer: clean delta at this exact head.
  • Linux: 105 tests / 549 assertions across ten focused files pass, including all four FIFO cases and a real child held unreaped. The fixture now supports macOS/Linux without waitid. Two mutation controls detect fatal probe EPERM and ignored delivery denial. Typecheck, quality, changed-file lint, privacy, docs and build pass.
  • computer pr review-status: CLEAR at fb40dd3, no unresolved bot threads. Current-head hosted CI and Codex review are pending. Earlier-head CI/reviews are not claimed for this head.
  • macOS shards explicitly requested (ci:mac) because this is Mac-sensitive; Docker CI remains requested (ci:e2e). No 20-run FIFO loop has run on macOS from this session: only Linux environments are linked, and the existing workflow has no focused-repeat input. The lead's offered Mac loop remains the outstanding platform qualification.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: fb40dd3aa7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: fb40dd3aa7

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Update on the Mac cancellation regression: head c2ceffe1ff54e0005dbd08fdbe4fe515a6b05cad is pushed, with a normal merge of next at fa3f03d3 (#790 and #799 included).

I reproduced a separate #809 fault through the real portable native adapter: a failed launch census leaves its pane birth missing; cancellation then makes the new cleanup refresh call the already-aborted startup budget, which vetoes the owned mux stop. Abandonment now excludes that budget while still checking ownership and artifacts. The regression passes; restoring the old check fails specifically because the owned mux remains.

The recovery fixture itself also threw on probe EPERM. It now keeps waiting for ESRCH within its existing bound, never treating EPERM as retirement. The earlier shared zombie-aware product fix remains in place. The shard classifier showed the FIFO file was Linux-only, so FIFO and held-zombie tests now run in both OS pools; the native recovery file was already in the Mac pool.

Same persistent Opus reviewer: clean at this exact head. Linux: 50 tests / 253 assertions across lifecycle/native files, then 179 tests / 950 assertions across adapter/controller/cleanup/fixture/CI selection files (overlapping runs, not summed). Typecheck, quality, changed-file lint, privacy, docs, build and shard coverage checks pass.

macOS qualification is still pending: tests/native-authored-project-start-recovery.test.ts must pass there, and the FIFO file still needs the requested 20-run Mac loop. Portable reproduction establishes the additional fault but does not prove the reported Mac failure is resolved. Current-head ci:mac, ci:e2e and Codex checks/review are pending; I will follow actionable results before another ready note.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: c2ceffe1ff

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: c2ceffe1ff

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: 9aa27cf9943272bb2cabcc4950f27bde38ae1878 (Mac native-recovery acceptance pending).

The extended portable regression reproduces a remaining pre-stop refusal: when the launch census misses its pane birth, abort refresh calls the frontend's canceled startup-input freshness check before reaching the token-checked mux stop. The earlier test only checked admission, so it missed this. The value-free before trace stops at that check; the after trace reaches mux stop and owned state removal.

Failed-launch cleanup now uses a separate frontend guard for native admission and hook ownership. The factory still checks its active owner, directory pins and saved owner record, and the controller still checks the exact mux token and process identities. Normal startup and ordinary stop keep full input freshness. The macOS recovery test and its expectation remain unchanged.

  • Same persistent Opus reviewer: clean at this head. The design is limited to the live owner's failed launch; later host stop still refreshes teardown inputs.
  • Normal merge includes next at 5965b234, including the lead's 07192f76 base. PR code paths preserved; unrelated upstream changes are unmodified.
  • Post-merge Linux: 75 tests / 422 assertions pass, including the strengthened canceled-input regression, native ownership, controller ownership, real FIFO and held zombies. CLI typecheck, quality, changed-file lint, privacy, docs and compiled build pass.
  • The lead's earlier FIFO 20/20 at c2ceffe1 remains earlier-head Mac evidence. The full tests/native-authored-project-start-recovery.test.ts needs the offered Mac rerun at this head. This Linux result does not qualify that Mac case.
  • ci:mac and ci:e2e remain requested. Current-head hosted CI and Codex review are pending.

For diagnostics on the Mac rerun, set HACK_LIFECYCLE_RETIREMENT_TRACE=1. The new native-freshness-check-passed event includes startupInputsRequired; successful failed-launch cleanup should show it false before abort-mux-stop-end with stopped:true.

@codex review

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Lead Mac result at 9aa27cf994 (merged with next 5965b23): tests/native-authored-project-start-recovery.test.ts, "HACK-1458: cancellation during the host process launch ends the launched group" passes 3 of 3 (it failed 3 of 3 at 4ba1ee7). With HACK_LIFECYCLE_RETIREMENT_TRACE=1 the abort path now reads abort-refreshed missingBirths:1 → abort-mux-stop-end stopped:true → abort-retired stopped:true → native-abandon-controller retained:false. One observation for the reviewer: the last native-freshness-check-passed event in that run shows startupInputsRequired:true, not false as the ready note predicted; it appears after the retirement, so it may be a later ordinary check. Please confirm which check emits it.

The full Mac batch (typecheck, selected test files, real-VM smoke/webdb/up-twice/Ctrl-C) is running on the combined tree now; merge follows if it is clean and the exact-head Codex review and review-status are clear.

🤖 Generated with Claude Code

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: 9aa27cf994

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 9aa27cf994

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Confirmed at 9aa27cf994, including a second pass by the same persistent Opus reviewer: the final native-freshness-check-passed with startupInputsRequired:true is the ordinary close() check, after teardown inputs have been refreshed.

The path is hostProcesses.start() → failed-launch abandonLaunch() → controller.abort() (cleanup guard, false) → native-abandon-controller retained:false → frontend catch → stopUnstartedHostProcesses(). That helper first re-acquires inputs under the hard signal, checking the same selection and semantic hash; stop() then sees the proven abandonment and sets stopped, and close() calls the default full freshness check at native-authored-host-processes.ts:936. The refresh/stop/close sequence is at native-authored-project-start.ts:883. Abort emits no freshness checks after native-abandon-controller. My ready-note expectation referred to the checks before mux stop, not the final event.

Current-head Codex code review is clean (#issuecomment-6875052949). computer pr review-status reports CLEAR at 9aa27cf994, with zero unresolved bot threads or change requests. Lead Mac recovery 3/3 is recorded above; full Mac batch remains pending. No new push.

Separate hosted CI blocker: Linux Config compiler run 43579300056 fails at scripts/check-native-env-plan-cli.ts:279 (no registry or generated runtime state); macOS compiler was cancelled. That unchanged base assertion rejects the intentional activity journal from refused lifecycle attempts. Existing fixes are already carried by #803 (38b0f250), #794 (49cd363e) and #797 (af78804f), but none is on next yet. I have not duplicated those changes in this lifecycle PR; compiler CI is still failed, not qualified by the green required test gate.

@roodboi
roodboi merged commit 5002cf8 into next Nov 14, 2026
25 of 29 checks passed
@roodboi
roodboi deleted the codex/hack-2184-retirement-followup branch November 14, 2026 09:57
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Lead merge note. Merged at 9aa27cf994 with one red hosted check, "Config compiler (ubuntu-latest)": scripts/check-native-env-plan-cli.ts failed with "no registry or generated runtime state". That failure is not from this PR: the script on next still asserted an empty HOME after a refused lifecycle command, and the activity log merged in #810 now writes .hack/activity.jsonl there (#810's own run skipped this job by change scope). The same failure appears on the unrelated #832. #820 at 679c2e04 updates the six relocated acceptance checks and has this job green on all three hosts; it merged immediately before this PR. The combined tree (next + #809 + #820 + #830) passed the Mac batch: typecheck, 529 selected test files, real-VM smoke, webdb, up-twice and the full Ctrl-C scenario, and the four native-authored files in sequence; merged next (5002cf8) is byte-identical to that tree. The hosted run on that head is the confirmation for the compiler job.

🤖 Generated with Claude Code

roodboi added a commit that referenced this pull request Nov 14, 2026
The next.17 section omitted the tmux breaking-change warning that
already existed at the page tail. Move it into the release section and
put its v4 stop procedure before the v5 trial. The env breaking entry
was already correct; keep its scoped single-key/terminal/stdin migration
guidance.

Audit all **71 commits** from `v5.0.0-next.16` (`b21c3b1898`) through
candidate **`5002cf87bb50686b17ceae8a4c835f524ee1b3a5`** against merged
code and PR text. Add missing upgrade-assistant, activity,
observe/plan/version, interactive exec, recovery, background-command and
host/secret-custody notes. Preserve the complete native env-file
behavior table and mark the four new JSON contracts **shape may change
before 5.0.0**, with the planned HACK-2238 envelope migration.

Correct stale native interactive-exec/network/metadata/Ctrl-C claims and
the short upgrade assistant wording. Credit the publisher-shutdown fix
to #719, already in next.16; keep next.17 lifecycle-command retirement
separate. Retake a private stopped-state backup after v4 stops zellij,
keeping the first copy too. Keep next.16 warnings scoped to that bundle.
Keep original-key backups before older Doctor migrations and distinguish
file rollback from runtime/data recovery.

Only eight Markdown files change. Runtime, tests, workflows, generated
CLI reference, diagrams, immutable snapshots and the site pin are
unchanged. No diagram changed, so a new visual would add nothing. The
site re-pin remains a separate release follow-up.

Merge timing: respect the lead's candidate freeze; intended for the
batch immediately after next.17 publication and the site re-pin. The
moved tmux breaking-change notice is called out for the lead's pre-cut
decision. This PR does not merge or publish anything.

Validation at **`d95cfc554fabc4a0d70e3ba6caeb6746f63a198c`**:
- Bun 1.4.4, frozen dependencies. Docs prepare/check/typecheck/build and
site tests (2 passed, 25 assertions) pass. Production-mode HTTP smoke:
97 docs, 82 SVGs, 217 local links/anchors; task server stopped.
- All 50 Hack commands named anywhere in the notes exist in the current
generated CLI reference; 19 option contracts checked. CLI-reference
regeneration has no diff.
- All 71 commits have one row below, including the test commit and merge
for #786. All 70 source evidence paths exist at the fixed candidate.
Source release-note local links/anchors pass.
- Privacy and complete reachable-history Gitleaks pass (1,330 commits,
no findings). Persistent Claude Opus second-family review is CLEAN at
this exact head. Hosted run 43585059152 passed docs site, secret scan
and every planned Linux unit shard (4–8), plus the required test fan-in.
Typecheck/privacy/quality ran on shard 8. Focus had no selected tests.
Compiler, native core, runtime images/models, process-lifetime and
Docker execution were out of scope; a green Docker fan-in is not Docker
execution evidence. All bot comments were read; CLEAR at d95cfc5,
zero unresolved threads/change requests. Codex code/security reviews
found no issues.
- No real install, migration, daemon/DNS/trust change, Docker or native
VM run was performed for this documentation audit. Native acceptance and
the candidate's hosted release qualification remain separate.

## Candidate commit coverage

`entry present` means the behavior already had an entry within the
next.17 section (some now have fuller detail). `added` means missing
behavior or migration guidance was added there; #824 moves the existing
warning into that section. `not user-visible` means no shipped
CLI/runtime change: documentation, test/CI/repository housekeeping or
the internal desktop preview. Source links pin the candidate, rather
than a moving branch.

| Commit / PR | Coverage | Entry or reason | Audited source |
| --- | --- | --- | --- |
|
[70d328e](70d328e)
[#743](#743) | added | Host
setup: privileged/NSS safeguards |
[src/lib/linux-trust-setup.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/linux-trust-setup.ts)
|
|
[51f15c8](51f15c8)
[#746](#746) | not user-visible |
Docs-only upgrade checklist and site generation; no installed behavior |
[scripts/docs/prepare.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/docs/prepare.ts)
|
|
[c14f3f5](c14f3f5)
[#744](#744) | added | Native
setup JSON accounting |
[packages/runtime-core/src/provider/setup.rs](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/packages/runtime-core/src/provider/setup.rs)
|
|
[b0c6bcd](b0c6bcd)
[#705](#705) | added | Retained
background exec/run and cursor tools |
[src/commands/background-command-start.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/background-command-start.ts)
|
|
[c89f4fd](c89f4fd)
[#745](#745) | added | Linux
daemon query/home refusals |
[src/commands/daemon-systemd.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/daemon-systemd.ts)
|
|
[cce4b59](cce4b59)
[#752](#752) | not user-visible |
Site pin/snapshots and editorial pages only |
[scripts/docs/versions.json](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/docs/versions.json)
|
|
[56676fc](56676fc)
[#754](#754) | added | Setup
reuse/offline accounting; pin-watch changes are internal |
[packages/runtime-core/src/provider/setup.rs](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/packages/runtime-core/src/provider/setup.rs)
|
|
[7a496f1](7a496f1)
[#755](#755) | added | MCP
registered selectors and background tool guidance |
[src/mcp/server.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/mcp/server.ts)
|
|
[e7a7039](e7a7039)
[#747](#747) | entry present |
Native follow text shape; added session ends/restart recovery |
[src/backends/native-log-follow.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/backends/native-log-follow.ts)
|
|
[87a6df5](87a6df5)
[#758](#758) | added | Compose
short one-shot startup |
[src/lib/compose-startup-state.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/compose-startup-state.ts)
|
|
[2afb5c4](2afb5c4)
[#761](#761) | added | Native
Hack networks and inert generated labels |
[src/lib/native-hack-compose-conventions.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/native-hack-compose-conventions.ts)
|
|
[342a585](342a585)
[#771](#771) | not user-visible |
Docs-only next.16 trial record |
[docs/versions/v5/guides/upgrade-from-v4.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/versions/v5/guides/upgrade-from-v4.md)
|
|
[6f0acf1](6f0acf1)
[#769](#769) | entry present |
Migration live-key/alias preservation |
[src/lib/project-env-config.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/project-env-config.ts)
|
|
[c96c444](c96c444)
[#756](#756) | added | Child key
filtering, fixed diagnostics, legacy ignore/YAML API refusals |
[src/lib/child-environment.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/child-environment.ts)
|
|
[e2c73c6](e2c73c6)
[#748](#748) | not user-visible |
Contributor CI selection/coalescing, outside product release notes |
[scripts/ci-change-scope.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/ci-change-scope.ts)
|
|
[ebf794e](ebf794e)
[#760](#760) | added |
Agent/output custody warning; runtime unchanged |
[src/agents/instruction-source.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/agents/instruction-source.ts)
|
|
[021b16b](021b16b)
[#763](#763) | added | One-pass
background redaction scan; no public benchmark claim |
[src/lib/background-command/output-scanner.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/background-command/output-scanner.ts)
|
|
[8564ec4](8564ec4)
[#765](#765) | added | Shared
preflight/start admission and detached failure reporting |
[src/backends/native-project-review.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/backends/native-project-review.ts)
|
|
[0c0fba2](0c0fba2)
[#767](#767) | entry present |
Breaking env exposure/protect/stdin/scope/API guidance |
[src/commands/env.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/env.ts)
|
|
[9435da9](9435da9)
[#762](#762) | added | Local
Git/link refusals and no-follow dotenv |
[src/lib/project-env-config.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/project-env-config.ts)
|
|
[edf23ae](edf23ae)
[#753](#753) | added | Daemon
stop proves the live Hack home |
[src/commands/daemon-systemd.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/daemon-systemd.ts)
|
|
[573ceec](573ceec)
[#766](#766) | entry present |
Doctor layer/integrity error; added store/key write refusals |
[src/lib/secret-store.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/secret-store.ts)
|
|
[a0e9760](a0e9760)
[#757](#757) | added | Orphan
output truncation and final-sync evidence |
[src/lib/background-command/recovery.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/background-command/recovery.ts)
|
|
[10e1958](10e1958)
[#759](#759) | added | Private
lifecycle logs/FIFO and expiring mux payloads |
[src/lib/private-file.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/private-file.ts)
|
|
[bd899ee](bd899ee)
[#775](#775) | not user-visible |
Portable test fixtures only |
[tests/single-file-tar.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/single-file-tar.test.ts)
|
|
[80dae3d](80dae3d)
[#776](#776) | added | Candidate
missing-daemon diagnosis is optional/healthy |
[src/commands/doctor.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/doctor.ts)
|
|
[5b2a2d0](5b2a2d0)
[#772](#772) | added | Bounded
attaching-network retry; strict saved reads remain |
[src/lib/native-compose-ownership.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/native-compose-ownership.ts)
|
|
[ab29d49](ab29d49)
[#777](#777) | not user-visible |
CI scheduling only |
[docs/reference/ci-test-selection.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/reference/ci-test-selection.md)
|
|
[31339c7](31339c7)
[#770](#770) | entry present |
Native inferred readiness, 240 s, HTTP/service_healthy limits |
[packages/runtime-core/src/project/compose/service.rs](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/packages/runtime-core/src/project/compose/service.rs)
|
|
[156ee7f](156ee7f)
[#773](#773) | entry present |
Loopback proxy port/Doctor/open checks |
[src/lib/proxy-loopback.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/proxy-loopback.ts)
|
|
[a7ec3c7](a7ec3c7)
[#768](#768) | entry present |
Cleanup receipts/partial outcomes and tracked-file wording |
[src/lib/project-env-config.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/project-env-config.ts)
|
|
[ceb3e23](ceb3e23)
[#778](#778) | entry present |
Native bridge socket readiness |
[packages/runtime-core/src/provider/bridge.rs](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/packages/runtime-core/src/provider/bridge.rs)
|
|
[af91049](af91049)
[#783](#783) | entry present |
Pointer reconciliation after partial cleanup |
[src/commands/doctor.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/doctor.ts)
|
|
[0a0bfdb](0a0bfdb)
[#780](#780) | not user-visible |
Site-only Linux guide publication; no CLI behavior |
[scripts/docs/versions.json](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/docs/versions.json)
|
|
[d0cf767](d0cf767)
[#786](#786) | not user-visible |
Consent test wording only (both commits) |
[tests/env-migration-tracked-consent.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/env-migration-tracked-consent.test.ts)
|
|
[7e2e630](7e2e630)
[#786](#786) | not user-visible |
Consent test wording only (both commits) |
[tests/env-migration-tracked-consent.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/env-migration-tracked-consent.test.ts)
|
|
[91c311e](91c311e)
[#779](#779) | entry present |
Restore or reversible retire; missing store keys scoped to readers |
[src/lib/secret-store-retire.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/secret-store-retire.ts)
|
|
[6ab1ace](6ab1ace)
[#785](#785) | not user-visible |
Docs-only release/upgrade/env notes |
[docs/guides/v5-release-notes.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/guides/v5-release-notes.md)
|
|
[25bd63c](25bd63c)
[#764](#764) | entry present |
Doctor hygiene, local modes, ignored staging and live-input protection |
[src/lib/secrets-hygiene.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/secrets-hygiene.ts)
|
|
[d9df57c](d9df57c)
[#784](#784) | not user-visible |
Resolver/proxy and consent test corrections only |
[tests/project-open-loopback.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/project-open-loopback.test.ts)
|
|
[2c1f665](2c1f665)
[#791](#791) | added | Detached
failure names, open DNS hint, init placeholder; prune guidance |
[src/commands/project.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/project.ts)
|
|
[f6fe55f](f6fe55f)
[#787](#787) | not user-visible |
Docs-only retirement/hygiene follow-up |
[docs/guides/v5-release-notes.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/guides/v5-release-notes.md)
|
|
[7f9548c](7f9548c)
[#792](#792) | not user-visible |
Start-here docs, navigation and contributor rule only |
[docs/versions/v5/install.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/versions/v5/install.md)
|
|
[a0cfc73](a0cfc73)
[#793](#793) | added | Verified
updater publication, backups and reversible candidate removal |
[src/lib/self-update.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/self-update.ts)
|
|
[292d312](292d312)
[#782](#782) | added | Lock-free
native ps and proved failed-start down |
[src/backends/native-project-observe.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/backends/native-project-observe.ts)
|
|
[b1e123b](b1e123b)
[#796](#796) | added | Doctor
reader count/worktree grouping in store recovery |
[src/lib/doctor-secret-integrity.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/doctor-secret-integrity.ts)
|
|
[286d00f](286d00f)
[#789](#789) | added | Foreground
command-before-wrapper retirement |
[src/lib/project-lifecycle-processes.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/project-lifecycle-processes.ts)
|
|
[bb6a7d1](bb6a7d1)
[#788](#788) | not user-visible |
Linux qualification runbook only |
[docs/guides/linux-host-qualification.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/docs/guides/linux-host-qualification.md)
|
|
[a262d42](a262d42)
[#800](#800) | not user-visible |
Internal desktop design; outside supported CLI release scope |
[apps/desktop/DESIGN.md](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/apps/desktop/DESIGN.md)
|
|
[6b161ba](6b161ba)
[#774](#774) | added | Native
interactive exec, finite fallback and receipt recovery |
[src/backends/native-project-exec.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/backends/native-project-exec.ts)
|
|
[1249272](1249272)
[#799](#799) | not user-visible |
Portable output-contract CI selection only |
[scripts/test-shard-plan.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/test-shard-plan.ts)
|
|
[fa3f03d](fa3f03d)
[#790](#790) | added | Read-only
upgrade check, snapshot and rollback |
[src/commands/upgrade.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/upgrade.ts)
|
|
[c3b79bc](c3b79bc)
[#807](#807) | added |
Observe-only global status and unknown evidence |
[src/commands/global-status-observe.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/global-status-observe.ts)
|
|
[29be043](29be043)
[#812](#812) | added | Read-only
local CA trust diagnosis |
[src/lib/ca-trust-status.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/ca-trust-status.ts)
|
|
[f0102fd](f0102fd)
[#814](#814) | not user-visible |
Prepared-base verifier test fixture only |
[tests/qualify-provider-pin.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/qualify-provider-pin.test.ts)
|
|
[b4ebfec](b4ebfec)
[#815](#815) | added | Compact
upgrade plan, snapshot-backed apply/resume |
[src/lib/upgrade-apply.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/upgrade-apply.ts)
|
|
[c44b266](c44b266)
[#801](#801) | not user-visible |
Internal optional desktop preview; not shipped CLI behavior |
[apps/desktop/Cargo.toml](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/apps/desktop/Cargo.toml)
|
|
[56d1d0f](56d1d0f)
[#804](#804) | added | Automatic
mux sweep preserves live/retired config inputs |
[src/lib/live-inputs.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/live-inputs.ts)
|
|
[1958363](1958363)
[#805](#805) | added | MCP
timedOut result and Codex installer timeout |
[src/mcp/server.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/mcp/server.ts)
|
|
[e6207e8](e6207e8)
[#810](#810) | added | Lifecycle
activity writes including handler refusals; activity JSON |
[src/commands/lifecycle-activity.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/lifecycle-activity.ts)
|
|
[23fe08f](23fe08f)
[#825](#825) | added | Read-only
batch review and permission-only key repair |
[src/lib/upgrade-review.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/upgrade-review.ts)
|
|
[cab596c](cab596c)
[#781](#781) | entry present |
Full native env-file behavior table; added support/precedence summary |
[src/backends/native-compose-environment.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/backends/native-compose-environment.ts)
|
|
[1e84684](1e84684)
[#798](#798) | not user-visible |
Rust test process isolation/nextest; internal qualification only |
[scripts/test-runtime-core.sh](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/scripts/test-runtime-core.sh)
|
|
[518af29](518af29)
[#817](#817) | not user-visible |
Remove accidental empty checkout files; no installed CLI change |
[.gitignore](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/.gitignore)
|
|
[07192f7](07192f7)
[#824](#824) | added | BREAKING
warning moved from page tail into next.17; v4 stop procedure retained |
[src/mux/mux-config.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/mux/mux-config.ts)
|
|
[fe09a5b](fe09a5b)
[#816](#816) | added | Read-only
install/trust admin plans and exits |
[src/commands/global.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/global.ts)
|
|
[8977676](8977676)
[#827](#827) | added |
Registry-preserving project observe, runtime opt-in |
[src/commands/projects.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/commands/projects.ts)
|
|
[5965b23](5965b23)
[#828](#828) | added | Running
CLI version identity JSON |
[src/lib/version-report.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/version-report.ts)
|
|
[2922210](2922210)
[#830](#830) | added | Upgrade
safe/admin/manual action kinds |
[src/lib/upgrade-action-kind.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/upgrade-action-kind.ts)
|
|
[51b55c0](51b55c0)
[#820](#820) | not user-visible |
Archive/plan/shared-helper verification fixtures only |
[tests/python-free-download.test.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/tests/python-free-download.test.ts)
|
|
[5002cf8](5002cf8)
[#809](#809) | added | Retirement
read retry, second Ctrl-C and native cancellation cleanup |
[src/lib/project-lifecycle-processes.ts](https://github.com/hack-dance/hack/blob/5002cf87bb50686b17ceae8a4c835f524ee1b3a5/src/lib/project-lifecycle-processes.ts)
|

---------

Co-authored-by: Kit <344842+roodboi@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:e2e Run the Docker e2e tier for this pull request ci:mac Run macOS checks for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant