Skip to content

fix(native): infer readiness probes for standard Caddy routes - #770

Merged
roodboi merged 8 commits into
nextfrom
fix/native-inferred-route-probes
Nov 13, 2026
Merged

roodboi merged 8 commits into
nextfrom
fix/native-inferred-route-probes

Conversation

@roodboi

@roodboi roodboi commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

A standard Compose project with complete Caddy labels and no authored healthcheck currently refuses native startup with route_probe_required. Native now generates a reviewed route-port HTTP probe without editing the Compose file. It requires TCP plus complete HTTP 200–499 headers: a root 404 qualifies; 5xx, EOF, non-HTTP, partial headers and timeouts do not. Redirects are not followed.

The inferred probe sends GET / with a 1 s deadline, three failed samples and a 240 s initial grace. It checks every second until first success, then every 30 s for the rest of that probe generation, including after becoming unhealthy. The grace accommodates slow first-page compilation; the lead measured a real Compose project needing about 90 s. Conservatively, 240 + 3 × (1 + 1) = about 246 s of probe time, leaving about 54 s of the usual 300 s graph budget for earlier work.

An unhealthy inferred probe names its service and route port and points to hack logs <service> in the same project/branch. The remedy is to fix the port or declare healthcheck.x-hack-http with a longer start_period_ms and a readiness path, within the graph budget. A validated structured port diagnostic lets the frontend render this guidance without trusting dynamic runtime error text.

Graph deadline limit: the 300 s budget covers the whole graph and is not renewed per service. A route behind a service_healthy dependency taking 240 s or more can still reach the generic, unnamed graph_timeout before its own probe finishes. A longer explicit healthcheck grace does not extend that deadline. Naming the service applies when the inferred probe is observed unhealthy.

Explicit healthchecks keep their timing and stricter 2xx semantics. Inferred probes do not satisfy depends_on: condition: service_healthy; an explicit enabled healthcheck is still required. Command-only and disabled routed checks retain their admission refusal. Preflight gives separate cause/remedy text for disabled checks, command checks, dependency-cache routes and malformed/mismatched probes. Replace the old check with an HTTP-only declaration rather than mixing forms.

After first readiness, three steady failures remove the ready endpoint from status and block new publication or rebind until healthy evidence returns. Existing containers, publications and relays continue running; traffic still reaches the application and can return its errors. The bridge regression verifies retained relay assignments, not live traffic.

Final HTTPS verification requires a fresh challenge stamped only by Caddy's upstream response handler and stripped before authority/application delivery. This distinguishes application 404 from authority denial, SNI mismatch and missing upstream. Authenticated peer, exec generation, freshness, retirement and restart checks remain intact; interim responses share one bounded header/time budget.

Based on next through 8564ec486336e7a8077163edc3c2f29521f4adce, including #761/#765. This clears inferred readiness for complete reviewed Caddy routes without authored healthchecks. Source-share consent, grouped diagnostics and other Compose-feature work remain separate. Rust and TypeScript defaults change together before this PR has shipped; prototype receipts with earlier defaults still fail the exact-config check.

Validation at 1457c63723e180e9fe6c6cfee211e8b8c249a864:

  • The same persistent reviewer cleared the exact committed tree 26300ac069373b45ac4dafd6277907e1622a344d.
  • 245 TypeScript cases across five files passed, including the final 40 runtime-client cases. A real subprocess verifies safe route guidance; schema negatives and the maximum service-name length preserve private-text and IPC bounds.
  • A compiled production-transition fake-clock test drives sample validation and graph readiness at exactly 120 s. The former 60 s grace is a negative control that fails early. Request outcomes are injected; real network scheduling is not qualified by this test.
  • Compiled-helper regressions pass for no listener, boot-time 500, initial/steady cadence, recovery and HTTP parsing.
  • Default Rust: 1006 library tests passed (38 ignored), plus integration contracts including 71 project tests. All-feature library: 1198 passed (47 ignored). Both all-target Clippy configurations passed; the final default route-diagnostic rerun passed after wording changes.
  • Typecheck, lint/privacy, changed-test lint, normal commit hook, CLI/compiler builds and all eight compiled plan checks passed. Hosted results are reported separately at the new head.

Lead Mac/Caddy acceptance remains: init-generated web+database starts with source-share consent and no adaptation; application 404 publishes; authority denial/unknown host, SNI 421 and missing upstream 502 fail verification; normal traffic has no non-empty proof header; existing traffic continues after a post-ready probe failure; and a real slow first-page compile survives startup. No actual Caddy/VM qualification is claimed.

Release intent: fix native startup for standard routed Compose projects. Tracks HACK-2164.

@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 13, 2026 3:28pm UTC

Request Review

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

HACK-2164 follow-up to #761. Persistent reviewer is clean at the exact committed tree. Local checks and the lead's remaining Caddy/VM acceptance cases are in the PR description. Explicit command-only and disabled route healthchecks are deliberately preserved as refusals in this increment; no authored check is overridden.

@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-13T15:31:59.637502Z 1457c63 Manual request
🔒 Security Review ✅ Completed 2026-11-13T15:52:36.040250Z 1457c63 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

Copy link
Copy Markdown

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

Reviewed commit: 1f38c6ad93

ℹ️ 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: 1f38c6ad93

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.

Base automatically changed from fix/native-hack-compose-conventions to next November 13, 2026 09:14

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: the persistent reviewer and Codex code review are clean at this head, with zero unresolved bot findings.

The Linux batch gate is green: typecheck, lint/privacy, all five Linux unit shards (4–8), Candidate core, config compiler, process lifetime, models and secret scan. All four Docker e2e shards passed too. Hosted macOS Candidate core and macOS unit shards 1–3 were cancelled; the test fan-in is red because of those cancellations. No macOS pass is claimed.

Integration remains for the lead's combined tree: GitHub reports conflicts with next following #761's merge. computer pr review-status reports BLOCKED at 1f38c6ad93 for base freshness only, with 0 unaddressed bot findings. Per the batch instruction, no freshness-only merge/push or macOS rerun is being made here.

Census effect beyond #761/#765: this PR removes route_probe_required for complete reviewed Caddy routes with no authored healthcheck. It requires TCP plus complete HTTP 200–499 headers, including a root 404; 5xx, EOF and timeouts do not qualify. Explicit command-only/disabled route checks still refuse. Shared-source consent and the other feature blockers listed in #765's census note remain.

Lead Caddy/VM acceptance still needs: application / 404 publishes; authority denial/unknown hostname, SNI 421 and missing-upstream 502 fail verification; ordinary responses have no non-empty upstream-proof header. No actual Caddy/VM qualification claimed here.

1f38c6a

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

Merged requested next head c96c4441aad1660e7cb946f1f12ad696ac5716a0 into this branch without rewriting history. New head: 35e6ca36939a5a14a9be64d91a9d24dd25e1455e.

The persistent reviewer cleared the resolved tree with no findings: the contribution relative to incoming next is the same reviewed 19-file patch, retaining the inferred-probe import and the incoming child-environment containment. Local focused tests, default/HTTP-feature Rust suites and Clippy, typecheck, lint/privacy/leak checks, builds and all eight compiled plan checks passed; counts are in the updated description. New-head hosted Linux checks are pending, so the replacement Ready for lead note will follow after that gate. Real Caddy/VM acceptance remains lead-owned.

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: 35e6ca3693

ℹ️ 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: 35e6ca3693

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

Ready for lead: 35e6ca36939a5a14a9be64d91a9d24dd25e1455e

Merged requested next revision c96c4441aad1660e7cb946f1f12ad696ac5716a0 normally. The persistent reviewer cleared exact merged tree 70097b3a424a5225ab99229b852b4e62047ae334 with no findings. Codex code review is clean at this head; all bot comments were read and there are zero unresolved bot findings.

The Linux gate is green in CI run 43412837615: all selected Linux unit shards 4–8, typecheck, quality/lint and privacy (shard 8), test focus, Candidate core, both config-compiler architectures, secret scan and docs site passed. Both required checks passed. Hosted jobs still pending: none. macOS jobs were not selected; Docker shards, process-lifetime, runtime models and runtime images were skipped by selection, so the successful Docker aggregate is not Docker execution evidence. The earlier cancelled run is superseded.

Local verification on the merged tree also passed: 292 TypeScript tests (one skipped), default and HTTP-feature all-target Clippy, 1003 default library tests (38 ignored) plus integration contracts, 1013 HTTP-feature library tests (40 ignored), CLI/compiler builds and all eight compiled native-plan checks. No Mac, VM or real-Caddy qualification is claimed.

computer pr review-status result: BLOCKED at 35e6ca3693: 0 unaddressed bot finding(s), 1 overlapping base file(s). That is freshness only: newer next revision 021b16bcfd changes docs/reference/v5-model-coverage.md. Per the batch rule, I am retaining this tested head for your combined-tree integration instead of pushing another freshness merge.

Census expectation: #761 clears the exact Hack networks and generated metadata. This PR clears route_probe_required for complete reviewed Caddy routes with no authored healthcheck, accepting complete HTTP 200–499 responses after TCP, including / 404. Explicit command-only or disabled route healthchecks still refuse; shared-source consent and the remaining Compose-feature blockers are unchanged by #770. Lead acceptance remains app 404 publication; authority denial/unknown host, SNI 421 and missing upstream 502 rejection; and no non-empty proof header on ordinary traffic.

roodboi added a commit that referenced this pull request Nov 13, 2026
Compose projects with an automatic restart policy and managed or
forwarded shell environment could pass native preflight and then be
refused at start. Preflight now supplies service names without resolving
values, and both paths use one file-local admission collector. Start
reports its first refusal; preflight lists collected findings, including
the shared UDP publication reason. This can change which reason start
reports first when a file has several problems.

Detached startup preserves a validated failure when the owner exits
before buffered IPC arrives. A 1.5-second exit grace bounds the wait if
a descendant retains the channel. Values and arbitrary child text never
cross that boundary. Null/comment-only service environment declarations
are treated as empty, while managed keys still become private
references.

Readiness parity uses committed fixtures shared by independent Rust and
Bun tests. The refusal inventory requires exact coverage of file-local
producers and explicit entries for acquisition-time boundaries.
Adapter-only credentials and project-level finding deduplication remain
documented limits.

This head merges next through
`2afb5c4330863d5b38450554e445f8505e1e4828`, preserving #761's exact
Hack-network mapping and inert generated labels, plus
#747/#754/#755/#758. It does not infer route probes or remove
shared-source consent; the expected census comparison is in the PR
conversation, and inferred probes are in #770.

Validation at `e4cde44a585ef906797aabdbd518f381af36a26c`: persistent
reviewer clean at exact tree `a431a84baea77f8592cd19573adaea6b9c46405f`;
148 focused TypeScript cases; typecheck, lint/privacy and staged leak
checks; default Rust Clippy and full default suite (1004 library passes,
38 ignored, plus all integration contracts, including 20 node passes
with one helper ignored and 68 project passes); CLI/compiler builds and
all eight compiled planning/import CLI checks passed. Hosted checks at
this head are pending. No real Docker/VM/Mac or installed-release
qualification is claimed for this merge.

Suggested installed Mac checks: UDP publication preflight and detached
up must report the same TCP-only refusal before boot; restart policies
on managed/shell-environment services must be reported before boot
without requiring a decryption key.

Release intent: fix truthful native preflight and detached-start failure
reporting.

---------

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

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

At the lead's request, merged next revision 8564ec486336e7a8077163edc3c2f29521f4adce (including #765). New head: 158a86d3187e0182fbf1c88917608bc625bbf1eb. The merge was automatic, with no conflicts or history rewrite.

The same persistent reviewer cleared exact tree 2f52d185d50d981a2705f978c87821dbcda0c1c8: #770 remains the same 19-file patch relative to incoming next, while #765's shared admission checks and tests are retained. All local checks passed: 332 focused TypeScript cases, default/HTTP-feature all-target Clippy, full default Rust tests (1005 library passed, 38 ignored, plus integration contracts), HTTP-feature library tests (1015 passed, 40 ignored), typecheck, lint/privacy/leak checks, builds and all eight compiled plan checks. New-head hosted Linux results are pending; a replacement Ready for lead note follows when that gate passes. Real Caddy/VM checks remain lead-owned.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 158a86d318

ℹ️ 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: 158a86d318

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

Addressed all four independent review findings in 7886d08589968ae78c0597034fe41793d4159d89:

  1. Inferred grace is 60 s, with 1 s startup checks and three counted failures, rather than matching the 300 s graph deadline. Compiled-helper regressions drive production graph execution for both a missing TCP listener and HTTP 500 at boot, asserting graph_service_failed and the service name.
  2. depends_on: service_healthy still reports missing_healthcheck for an inferred route probe. Real planner tests retain service_started and explicit HTTP checks as positive controls.
  3. After first success, cadence becomes 30 s and stays there even while unhealthy. Explicit probes retain their timing. A compiled-helper test covers that switch, failure counting and recovery. Unhealthy status removes the ready endpoint and blocks new publication/rebind; it does not stop/restart the container or withdraw the existing publication/relay, so existing traffic keeps reaching the app. The running-relay regression checks registry preservation; real traffic is still a Mac/Caddy gate.
  4. Disabled, command-only, dependency-cache and malformed/mismatched probe refusals now have separate fixed messages and remedies shared by admission/preflight. Advice replaces the old check rather than combining incompatible forms.

The persistent reviewer is clean at this exact committed head/tree. Final local checks passed: 333 TypeScript cases plus the wording regression, both Rust Clippy configurations, 1005 default library tests plus integration contracts (including 71 project tests), 1017 HTTP-feature library tests, typecheck, lint/privacy/leak scans, builds and all eight compiled plan scripts. Updated guide and model coverage state the timing and evidence limits. New-head hosted Linux CI is pending; the next Ready for lead note waits for that gate.

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: 7886d08589

ℹ️ 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: 7886d08589

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

Ready for lead: 7886d08589968ae78c0597034fe41793d4159d89

All four independent review findings are fixed. The persistent reviewer cleared this exact committed head/tree, Codex code review is clean at the head, all bot comments have been read, and there are zero unresolved bot findings.

CI run 43422390448 passed the Linux gate: all selected unit shards 4–8, typecheck/lint/privacy on shard 8, test focus, Candidate core, both config-compiler architectures, secret scan and docs site. Both required checks passed. Hosted jobs still pending: none. macOS jobs were not selected; Docker shards, models, process-lifetime and runtime images were skipped by selection. No Docker execution or Mac qualification is claimed.

The fixes:

  • Inferred startup uses a 60 s grace and 1 s checks before first success; three failures can now produce graph_service_failed with the service name before the usual 300 s graph deadline. Compiled-helper regressions cover both no listener and HTTP 500 at boot. The guide points to logs, correcting the route port, or an explicit HTTP readiness check/budget.
  • Inferred probes cannot satisfy depends_on: service_healthy; missing_healthcheck is retained. Planner tests cover that refusal and positive controls.
  • After first success, GET / runs every 30 s with a 1 s deadline, including while unhealthy. Three failed steady samples mark it unhealthy; new publication/rebind cannot proceed until health returns. Existing publication/relay traffic continues to the application; the container is not stopped or restarted. The regression proves running relay assignments are preserved, not live traffic.
  • Preflight has separate fixed causes/remedies for disabled, command-only, dependency-cache and malformed/mismatched probes. Command/disabled advice replaces the old check with an HTTP-only form instead of combining incompatible forms.

Local verification passed: 333 TypeScript cases plus the final wording regression, typecheck/lint/privacy/leak scans, default and HTTP-feature all-target Clippy, 1005 default Rust library tests plus integration contracts (71 project tests), 1017 HTTP-feature library tests, builds and all eight compiled plan checks. review-status: CLEAR at 7886d08589.

Remaining lead checks: real Caddy/VM application 404 readiness; rejection of authority denial/unknown host, SNI 421 and missing upstream 502; no non-empty proof header on ordinary traffic; and existing route traffic during later unhealthy status. Explicit probes keep their semantics. Source-share consent and the other Compose-feature blockers remain. HACK-2175 is next; #774 stays after it.

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Blocked: the public-repository leak scan rejects inherited whole-file contents before publication. It reported 130 matches at 81 unique locations; every matched line is byte-identical to a line already present at 7886d08, and none is a changed line. I have stopped publication for owner triage rather than bypass the guard.

The requested 240 s grace, safe service/port guidance, 120 s fake-clock regression with the old grace as a negative control, and the documented graph-wide timeout limit are complete locally at 1457c63. The persistent reviewer cleared that exact commit; portable tests, Clippy, typecheck/lint/privacy, builds and plan CLI checks passed. This supersedes the earlier ready note; the new commit has not been pushed, so exact-head hosted CI and a new Ready for lead note remain pending.

@roodboi

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Lead triage of the pre-publication scan that paused this branch: I read all 130 findings (81 distinct lines) against the blobs at the unpushed commit. Every one is existing public text on next (loopback addresses, the product's documented hostnames, this repository's own URL, a standard address range, example hostnames in tests, and an ordinary English word). None is private, and the new commit changes none of those lines. The scan was applying generic rules to whole files; its configuration is unchanged. The commit may be pushed with a plain git push; if anything refuses the push, stop again.

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

The publication blocker is resolved. Pushed 1457c63 with the 240 s inferred grace, service/port/log/healthcheck guidance, the passing 120 s fake-clock regression and old-grace negative control, and the documented whole-graph timeout limit. The same persistent reviewer cleared this exact committed head; portable validation is in the updated PR body. Waiting for Linux CI and bot review before the new Ready for lead note.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: 1457c63723

ℹ️ 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: 1457c63723

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 merged commit 31339c7 into next Nov 13, 2026
31 of 40 checks passed
@roodboi
roodboi deleted the fix/native-inferred-route-probes branch November 13, 2026 15:56
roodboi added a commit that referenced this pull request Nov 13, 2026
Add next.17 “what changed and what to do” notes to the release summary,
both upgrade guides and the env guide. Users get concrete script
migrations for hidden env values and native followed logs, the next.16
key-backup warning, and recovery guidance for partial cleanup.

These describe merged source changes intended for next.17; they do not
claim a release is published. The docs site remains pinned to next.16.
#764 and #779 remain explicitly pending, and the recorded next.16 trials
keep their original limits.

| Subject | Merged contract checked at base `0a0bfdb8` |
| --- | --- |
| #747: native plain followed logs, streams, timestamps and structured
session results |
[native-log-follow.ts](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/backends/native-log-follow.ts),
[followed-service-log
contract](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/docs/reference/native-authored-commands.md#followed-service-logs)
|
| #767: metadata/`has_value`, scoped plaintext reads, terminal-only
reveal, stdin secret writes, `env protect`, global-only lifecycle
hooks/processes and YAML daemon API | [canonical prerelease
wording](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/scripts/prerelease-plan.ts#L158),
[env
command](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/commands/env.ts),
[env
routes](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/daemon/routes/env.ts),
[env
contract](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/docs/env.md)
|
| #769 / HACK-2172 and #768/#783: protect live keys/config/YAML
including filesystem aliases; cleanup receipts, partial removal and
config-pointer reconciliation |
[project-env-config.ts](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/lib/project-env-config.ts),
[Doctor
cleanup](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/commands/doctor.ts),
[canonical cleanup
note](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/scripts/prerelease-plan.ts#L164)
|
| #766: Doctor refuses unusable env layers |
[doctor-secret-integrity.ts](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/lib/doctor-secret-integrity.ts)
|
| #773: loopback proxy ports, diagnosis without automatic repair |
[proxy-loopback.ts](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/lib/proxy-loopback.ts),
[Doctor](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/commands/doctor.ts)
|
| #770: inferred route readiness, 240-second grace, HTTP 200–499 limits
and `service_healthy` exclusion |
[http_probe.rs](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/packages/runtime-core/src/provider/http_probe.rs),
[probe
contract](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/docs/guides/native-candidate.md#native-http-readiness-probe)
|
| #778: bridge connection readiness after pool restart |
[bridge.rs](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/packages/runtime-core/src/provider/bridge.rs)
|
| #758 and #776: merged startup fix and newer optional-daemon behavior,
kept separate from next.16 | [project
command](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/commands/project.ts),
[Doctor](https://github.com/hack-dance/hack/blob/0a0bfdb8d1ee818d89bb49a2109bd88b0a9fea1b/src/commands/doctor.ts)
|

Validation at `f1d0d72fede5db6ce46f56039ba22a47911aa308`:
- Persistent reviewer: clean after round 2.
- Pinned Bun 1.4.4: docs prepare/check/typecheck and production site
build pass.
- Production-mode HTTP smoke: 95 docs, isolated searches/exports,
redirects/refusals, 37 diagram blocks / 74 SVGs and 183 recipe
links/anchors pass. The rendered upgrade guide returns 200 and contains
the new guidance.
- Privacy check, diff check and full-history Gitleaks pass (1,295
commits, no leaks).
- Source citations and documented command forms checked against the
merged base.

Documentation only: no runtime, workflow, site pin, snapshot or global
client changes. No live migration, keys, daemon, Docker or native VM
tests were run. Lead owns batch integration and deployment.

<!-- codesmith:footer -->
---
<a
href="https://backend.blacksmith.sh/track/run-proof?expires=1797183263&installation_model_id=17053&pr_number=785&ref=codesmith_pr_footer&repository=hack-dance%2Fhack&return_to=https%3A%2F%2Fgithub.com%2Fhack-dance%2Fhack%2Fpull%2F785&variant=run_proof_on_this_pr&signature=b04dd421a08341f70e804e671fd68678f102d1c4152146bdea18adf6de909981"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-on-this-pr-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-on-this-pr-light.svg"><img
alt="Run Proof on this PR"
src="https://pr-comments-assets.blacksmith.sh/codesmith/proof-run-proof-on-this-pr-dark-3x.png"
width="168" height="28"></picture></a>
<sup><a
href="https://app.blacksmith.sh/hack-dance/codesmith/hack/pr/785?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