Skip to content

fix(ci): isolate Rust tests to prevent macOS descriptor leaks (HACK-2203) - #798

Merged
roodboi merged 6 commits into
nextfrom
fix/macos-rust-test-isolation
Nov 14, 2026
Merged

roodboi merged 6 commits into
nextfrom
fix/macos-rust-test-isolation

Conversation

@roodboi

@roodboi roodboi commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

macOS Rust libtest threads can spawn a child while another test's socket is briefly inheritable, retaining descriptors across exec and delaying EOF. Candidate core runs each runtime-core test in its own process with cargo-nextest 0.9.151 on Linux and macOS. CI downloads exact official release archives and checks their pinned SHA-256 before extraction. There are zero retries; the first failure stops qualification.

Contributors keep bun run test:local. It probes cargo nextest --version, matching Cargo's execution lookup. An absent or different version prints one fallback line and uses stock Cargo, leaving the installed version alone; the Mac fallback has one libtest thread. CI, report generation and repeated qualification require the exact pin and cannot fall back. Full suites retain separate doctests; focused Cargo targets preserve their own scope. The admission-pool host-disk probes stay serialized across processes.

Current integration

Head 7fee2a406770a4c07e3ffaf83d64443f93d71259 normally merges next at 6b161bae (#774). The sole conflict was adjacent package scripts: retain the nextest-backed test:local and the incoming check:native-guest. Both new guest verification/PTY workflow steps are preserved. Persistent review is clean on exact tree 099d658c5e83ddd6a3c157dc451c12b19cecdd50. The net PR diff remains eight intended paths; incoming product code is unchanged.

Local merged checks pass: 77 tests / 772 assertions, root typecheck/check, privacy and actionlint 1.7.12. Regression coverage includes missing/foreign local nextest versions on both hosts, both Cargo-versus-PATH mismatch directions, strict qualification refusal, zero retries, doctests/target selection, first-failure stop, 20 iterations, report paths, stale-result refusal and checksum refusal before extraction.

Qualification: distinguish the tested trees

  • Historical normal run 43521017225, before feat(native): add interactive exec with scoped session recovery #774, passed both Candidate hosts. Mac default library: 1,564 run / 113 ignored; all binaries: 1,757 / 118. All features: library 1,835 / 153; all binaries: 2,142 / 159. Both full and ignored name multisets exactly matched stock Cargo. Whole Mac job: 8m12s; nextest test times: 48.256s / 77.608s. The supplied 1,557 / 113 baseline is the older default library summary.
  • Existing 20-pass dispatch 43525512993 tests d20be2ba9ecc08fd70005049af0f3c85f1109ec5. It is still running all-features suites and will be retained as older-tree evidence only.
  • feat(native): add interactive exec with scoped session recovery #774 changes Rust sources, guest code and the Candidate workflow. The old unchanged-inputs argument is no longer valid. git diff d20be2ba 7fee2a406770a4c07e3ffaf83d64443f93d71259 -- packages/runtime-core/src .config .github/workflows/ci.yml scripts/test-runtime-core.sh scripts/install-cargo-nextest.sh shows these differences. The whole wrapper also differs by the requested version-probe/local-fallback block.
  • Before Ready, obtain a normal current-head Mac Candidate pass, compare its exact discovery/ignored inventory with stock Cargo and the historical baseline, and measure the new guest steps and suite times. feat(native): add interactive exec with scoped session recovery #774 adds tests and one ignored child fixture, so count changes must be explained by names rather than forced to the old count.
  • Then dispatch a new bounded 20-pass qualification at the new Rust head under the lead's existing HACK-2203 Mac authorisation. No new dispatch has been started yet. Keep the old soak intact; do not retry or reset failing streaks.

Not Ready: current-head hosted checks/review, Mac Candidate and the new-tree 20-pass evidence remain required. The final note will cite each tested SHA/run and the exact input diff. Any waiver must come explicitly from the lead.

The qualification runs 20 default and 20 all-feature Mac suites, each with separate doctests, and Linux once. Per-pass JUnit counts/timings, discovery, ignored stock lists and serial-group mapping are retained. Normal jobs retain 45 minutes; the repeated Mac job allows 300 minutes, with a 600-second per-test hang bound. The full dispatch uses existing heavy tiers and is branch qualification, not release evidence for next. Required-check names and branch rules are unchanged.

The lead explicitly requested Mac qualification for this unit. The production close/liveness audit is separate. HACK-2203 part 1.

@vercel

vercel Bot commented Nov 13, 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 1:28am UTC

Request Review

@linear-code

linear-code Bot commented Nov 13, 2026

Copy link
Copy Markdown

HACK-2203

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

Please review current head d7f0c99de0120d2f2a047132008be3f2bb6508f4. This tests-only unit isolates runtime-core tests with pinned nextest on both CI hosts, preserves doctests and the host-disk-probe serialization, and adds a zero-retry 20-pass macOS qualification mode. Local verification is complete; hosted macOS counts, timing and the 20-pass qualification remain pending.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 13, 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-14T01:29:59.072652Z 7fee2a4 Manual request
🔒 Security Review ✅ Completed 2026-11-14T01:33:02.662313Z 7fee2a4 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: d7f0c99de0

ℹ️ 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 scripts/test-runtime-core.sh 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: d7f0c99de0

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 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

Current head: 8234fc40bc5c2e0475cfd2216bdff257025ba9c6. Fixed the focused-target/doctest finding and resolved its thread with the implementation and regression evidence. The persistent second-family review is clean on tree b131cda7486d96f8857766fffc681eb39c445357; 75 focused checks pass. Full-suite qualification still runs nextest plus separate doctests with zero retries. Hosted macOS inventory/timing and the 20-pass qualification remain pending; this is not a Ready note.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 8234fc40bc

ℹ️ 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: 8234fc40bc

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 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

Current head d20be2ba9ecc08fd70005049af0f3c85f1109ec5 is a clean normal merge of next at b1e123bb. No runner/config/pin/workflow changes since the clean review at 8234fc40. Both hosted Candidate jobs passed, with Mac exact inventory/ignored parity against stock Cargo. The 20-pass zero-retry qualification is queued in run 43525512993. Counts/timings and remaining gates are in the updated description; no Ready claim.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: d20be2ba9e

ℹ️ 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: d20be2ba9e

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

@codex review

Current head c232034809e315b31e5bec13eab9c25eda93e30a normally merges next at a262d427, including #789 and #788 as requested by lead. Persistent exact-tree review is clean on 6fe88e386631c3988ba7310bd73f18a028254c08; no runner/policy changes. Local merged checks: 75 tests / 740 assertions and root typecheck/check pass.

The explicitly requested 20-pass Mac qualification remains active as run 43525512993 at tested SHA d20be2ba. Rust sources/dependencies, runner, pin, config, workflow and toolchain inputs match this new head byte for byte, which the persistent reviewer verified. Its separate concurrency group preserves the run across this PR push; no duplicate dispatch was started. No Ready claim until the artifacts and current-head CI/review are accepted.

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: c232034809

ℹ️ 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: c232034809

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

@codex review

Current head f230fc98112be43c4b5afb894b448009f01b4bd1 implements the lead's local-runner requests: probe cargo nextest --version using Cargo's own resolution; missing/different versions fall back to stock Cargo with one note in ordinary local mode (Mac threads=1), without replacing any installed nextest. CI/qualification modes still require the exact pin and cannot fall back. Regressions cover both Cargo-versus-PATH resolution directions, foreign-version fallbacks on both hosts and strict qualification refusal.

Persistent review is clean on exact tree 2724620e209a2b600d7a67942691904d8406f75e. Local checks: 77 tests / 772 assertions, root typecheck/check, lint and shell syntax pass. The existing Mac soak is retained; no duplicate dispatch. Ready awaits its 20-pass artifacts and the final-head Mac Candidate job. The description discloses that only the wrapper preflight changed; Rust sources/config/workflow and actual CI test invocations are unchanged.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

Reviewed commit: f230fc9811

ℹ️ 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: f230fc9811

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

@codex review

Conflict resolved by normal merge at 7fee2a406770a4c07e3ffaf83d64443f93d71259, incorporating next 6b161bae (#774). Retained both test:local (nextest wrapper) and check:native-guest; automatic workflow merge preserves #774's guest build/verification and Linux PTY steps. Persistent review is clean on exact tree 099d658c5e83ddd6a3c157dc451c12b19cecdd50. Local 77 tests / 772 assertions, root typecheck/check, privacy and actionlint pass.

Evidence correction: #774 changes Rust sources and the Candidate workflow, so the old soak at d20be2ba no longer qualifies this merged tree. It is preserved as older-tree evidence. After a passing normal current-head Mac Candidate job and a measured budget, a new 20-pass qualification is required under the lead's HACK-2203 authorisation. No new dispatch yet, no retries and no Ready claim. The updated description makes the separate heads and evidence limits explicit.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: 7fee2a4067

ℹ️ 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: 7fee2a4067

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 added a commit that referenced this pull request Nov 14, 2026
…799)

A CLI output change could pass light PR CI while
`tests/local-network-hint.test.ts` was deferred to macOS. This file's
`open --json` subprocess contract is portable; only its hint
expectations vary by platform. Add it to `BOTH_POOL_FILES`, so selected
light PRs run it once across the existing five Linux shards and retain
its current macOS coverage.

**Cost: zero additional macOS minutes per PR**, with about four Linux
seconds budgeted when the file is selected. No workflow, required-check
or branch-rule change. The final net diff changes five
planner/runner/test/doc paths and contains no product-code or
output-contract test change.

The deferral report distinguishes files already run on Linux from files
awaiting execution. Both still await macOS qualification. Real-source
regressions cover `src/commands/project.ts` (the actual `open` handler),
`src/ui/logger.ts` and `src/lib/local-network-hint.ts`: each source must
exist, selection mode must be `selected`, the file must enter both
pools, and the ordinary PR matrix remains `[4,5,6,7,8]`. Other
platform-sensitive files retain their existing tiers and label opt-ins.

### Verification

Normal merge of `next` at `bb6a7d17` includes #789 and #788. Incoming
#789 strengthens the source-CLI fixture with deterministic DNS and exact
`{ url }` assertions; it is preserved unchanged. The hosted negatives
below predate that strengthening, which makes the gate stricter. No
manual macOS dispatch was added for this PR; protected script changes
receive the existing automatic full tier.

- Final tree `809fcec4cefba390d8b94dd895e47593a9745f58` has clean
persistent second-family review. Product code and
`tests/local-network-hint.test.ts` match `next` at `bb6a7d17` byte for
byte.
- Final local checks: 150 tests / 834 assertions across selector, shard,
network-hint and loopback contracts; root typecheck/check and staged
privacy check pass.
- **Requested historical negative:** at `a28c5705`, revert only #796's
test change. [Run 43526479675, Linux shard
5](https://github.com/hack-dance/hack/actions/runs/43526479675/job/132234494941)
fails in `tests/local-network-hint.test.ts:154`; structured annotations
show the old `{ url }` equality rejecting the documented `dns:
unresolved` and `hint` fields. This proves Linux wiring and reproduces
the original miss on that runner.
- **Deterministic product negative:** restore #796's test and
temporarily emit an unknown JSON key at `64cff6c1`. [Run 43529281444,
Linux shard
5](https://github.com/hack-dance/hack/actions/runs/43529281444/job/132242889700)
fails at `expectOpenPayload` (`local-network-hint.test.ts:167`) in both
resolver branches. [Shard
7](https://github.com/hack-dance/hack/actions/runs/43529281444/job/132242889605)
independently rejects the key in `project-open-loopback.test.ts:43`,
`:66` and `:109`.
- Both checkpoints finished before advancing. Evidence comes from
structured annotations; draft fan-in failures and expected installer
fixture-interruption annotations are not counted. The unknown key is
fully removed by a normal forward restore commit. The temporary negative
commits remain in history; squash merge preserves only the final
five-path diff.

This policy PR changes protected planner scripts, so its own ready CI
gets the full tier. The unit regressions prove ordinary light-PR
selection; the hosted negatives prove Linux wiring and contract
enforcement. Current-head bot review and positive hosted checks remain
required before the `Ready for lead:` note.

HACK-2203 addition / HACK-2206. Rust process isolation is separate PR
#798.

---------

Co-authored-by: Kit <344842+roodboi@users.noreply.github.com>

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Qualification update for exact head 7fee2a406770a4c07e3ffaf83d64443f93d71259:

  • Normal Mac Candidate passed in run 43540725097, job 132280577520. It uses the updated strict Cargo version probe and preserves feat(native): add interactive exec with scoped session recovery #774's guest checks. Guest build/verify took 60s; the entire job took 16m21s.
  • Current Mac inventory: default 1,796 executed / 119 ignored across all binaries (1,603 / 114 in the library); all features 2,183 / 160 across all binaries (1,876 / 154 in the library). Exact full and ignored-name multisets match stock Cargo, and the serial test group is present.
  • Relative to the older d20be2ba inventory, feat(native): add interactive exec with scoped session recovery #774 adds 39 executed default tests and 41 all-feature tests, plus one ignored fixture in both modes: provider::interactive_handoff::tests::truncated_rights_child. No names were removed and no existing ignore flag changed. This explains the baseline count increase.
  • Old-tree dispatch 43525512993 completed successfully. All 20 default + 20 all-feature JUnit files were checked against their non-ignored inventory, with zero failures/errors/skips. It remains older-tree evidence only.
  • New-tree 20-pass dispatch 43550062792 is now queued at this same 7fee2a40 head, with full=true and rust_repetitions=20. This fulfills the plan written in the description before dispatch. The normal Mac test times (113.199s / 126.187s) imply about 80 minutes of test execution plus setup/build/doctests, within the 300-minute job budget. No retries; stop at the first failure.

This Mac qualification is explicitly part of the lead's HACK-2203 request. No Ready note until the new-tree pass artifacts are accepted. The current PR run's Linux jobs, all eight unit shards, Docker shards and required fan-ins are green; its macOS Config compiler is still queued.

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Review handoff update: the lead requested a replacement second-family reviewer. That reviewer could not be started, so the lead will supply this review under the stated fallback. Earlier review reports and exact-head Codex review are retained; no alternate model was substituted.

second-family review: pending, lead

This is not a Ready note. Current-head 20-pass Mac qualification run 43550062792 is still queued; its artifacts remain required before readiness.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Second-family review (Claude, lead-supplied): CLEAN at 7fee2a4

Scope: whole PR against next, and the delta since the first review at c232034 (one wrapper fix, f230fc9, plus the merge of next).

No blockers.

First-review findings:

Finding Status Evidence
auto with a different installed nextest version exited 2 Fixed scripts/test-runtime-core.sh:15-26 falls back unless nextest, 20 repetitions or a report directory is requested; covered by "another contributor nextest version falls back…"
Version probe used PATH while the run used Cargo's subcommand lookup Fixed line 14 probes cargo nextest --version, the command the run uses; "version check follows Cargo subcommand resolution" covers both mismatch directions
20-pass macOS qualification pending Met run 43550062792 completed with success at this head

Checked and found sound: both CI test steps and test:local go through the wrapper; the Linux toolchain task keeps stock Cargo with a stated reason; no doctests exist in runtime-core; a crash or hang names the test and is bounded (600 s); retries are 0; a zero-status run without JUnit output is refused; failing output is kept and uploaded with if: always(); no continue-on-error, skipped job, wider ignore list or changed required-check name; nothing private in the diff.

Follow-ups, not blocking this PR (tracked on HACK-2203):

  1. test:config-compiler still runs threaded cargo test on macOS (ci.yml:259), and packages/config-compiler/tests/protocol.rs spawns children with piped stdin and waits for exit, which is the same race. Route it through the isolating runner or state why it is out of scope.
  2. The fallback message at scripts/test-runtime-core.sh:22 no longer prints the install command.
  3. Question: with the pinned nextest, does a name filter that matches nothing now exit nonzero where stock Cargo exits 0? If so, say it in the script help.

Not checked by this review: the suites were not run and the 20-pass artifacts were not opened. The Mac batch run covers the first.

🤖 Generated with Claude Code

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: 7fee2a4

Normal CI run 43540725097, including Mac Candidate core, passed at this exact head. Mac qualification run 43550062792 also completed successfully at this exact head, with zero retries.

I opened and checked the Mac qualification artifact, including every per-pass JUnit file:

Configuration Consecutive successful passes Executed per pass, all binaries Ignored inventory JUnit test-time range
Default 20 / 20 1,796 119 88.311–119.971 s
All features 20 / 20 2,183 160 126.761–181.189 s

All 40 JUnit files have zero failures, errors and skips, and their executed test names/counts exactly equal the non-ignored discovery inventory. Full and ignored-name multisets match stock Cargo in both configurations. The serial host-disk-probe group is present; separate doctests ran after each successful pass. Library counts are 1,603 run / 114 ignored by default and 1,876 / 154 with all features. Compared with the older tree, #774 adds 39 default executed tests, 41 all-feature tests and one ignored truncated_rights_child fixture; no names were removed and no existing ignore flag changed.

Both qualifying runs and the final PR head are the same SHA. Verified empty:

git diff --exit-code 7fee2a406770a4c07e3ffaf83d64443f93d71259 HEAD -- packages/runtime-core packages/config-compiler packages/relay-guest .config .github/workflows/ci.yml scripts/test-runtime-core.sh scripts/install-cargo-nextest.sh

The older soak at d20be2ba is separate historical evidence and is not used to qualify #774. This current-head Mac qualification was explicitly requested by the lead for HACK-2203; there are no pending heavy jobs in either completed run.

second-family review: CLEAN, lead-supplied at this head. Current-head Codex review is clean.

CLEAR at 7fee2a4: no unresolved bot threads, bot change requests, or overlapping base changes.

No further push or merge from this session. The lead's Mac batch run and merge remain with the lead. The config-compiler runner, fallback install hint and unmatched-name-filter follow-ups stay on HACK-2203 for a separate small PR after this merges.

@roodboi
roodboi merged commit 1e84684 into next Nov 14, 2026
57 checks passed
@roodboi
roodboi deleted the fix/macos-rust-test-isolation branch November 14, 2026 08:10
roodboi added a commit that referenced this pull request Nov 14, 2026
The compiler's protocol tests spawn children with piped stdin. Threaded
libtest on macOS can inherit another test's transient descriptor and
delay EOF, the race addressed for runtime-core in #798.
`test:config-compiler` now shares that process-per-test runner, with
pinned nextest 0.9.151, zero retries and separate doctests. CI requires
the pin and uploads discovery, stock full/ignored inventories and JUnit
per compiler host. The runtime command remains compatible.

The local fallback again prints the optional pinned install command
without replacing a contributor's installation. An actual tiny-crate
probe confirms that an unmatched name filter exits 4 with pinned
nextest, versus Cargo's zero-test exit 0; both crate guides document the
difference.

Validation: compiler Linux run passed 127 tests across 14 discovered
binaries, 0 ignored, plus doctests; full/ignored name multisets equal
stock Cargo and JUnit executed names equal the non-ignored inventory.
Runner tests: 18/238 assertions; scope/wiring: 12; trusted-policy: 47.
Root typecheck, check, privacy and actionlint passed. Persistent Claude
review: CLEAN, rounds 50–51. Hosted CI pending. No manual macOS
dispatch; protected CI inputs enable automatic full tiers on this PR. No
compiler Mac soak requested.

Linux ARM64 archive SHA256
`3e35e8f6913af92558ba09d7155f74e35dd1f0024ef3cd891637433ae4eacbdd`
verified against the published digest for [cargo-nextest
0.9.151](https://github.com/nextest-rs/nextest/releases/tag/cargo-nextest-0.9.151).
No Rust production changes.

HACK-2203 follow-up. Lead owns merge.

<!-- codesmith:footer -->
---
<a
href="https://backend.blacksmith.sh/track/run-proof?expires=1797240208&installation_model_id=17053&pr_number=832&ref=codesmith_pr_footer&repository=hack-dance%2Fhack&return_to=https%3A%2F%2Fgithub.com%2Fhack-dance%2Fhack%2Fpull%2F832&variant=run_proof&signature=2042c1ef97e311ea90407d593308c1a9ec28aa1217c7314acf04a934fbd53d4a"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-light.svg"><img
alt="Run Proof"
src="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-dark-3x.png"
width="102" height="28"></picture></a>
<sup><a
href="https://app.blacksmith.sh/hack-dance/codesmith/hack/pr/832?autoLogin=true&ref=codesmith_pr_footer">Open
in [code]smith</a> · Need help on this PR? Tag
<code>@codesmith-bot</code> with what you need.</sup>

<!-- codesmith:autofix:disabled -->
<!-- /codesmith:footer -->

Co-authored-by: Kit <344842+roodboi@users.noreply.github.com>
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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant