Skip to content

ci: make PR checks light and coalesce next integration runs - #748

Merged
roodboi merged 7 commits into
nextfrom
fix/ci-macos-throughput
Nov 13, 2026
Merged

roodboi merged 7 commits into
nextfrom
fix/ci-macos-throughput

Conversation

@roodboi

@roodboi roodboi commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Small PRs currently queue native builds ahead of other work. This makes PR CI light by default and moves platform/Docker qualification to the selected integration run on next. Superseded next pushes cancel themselves; main keeps its full, non-cancelling push behavior.

A contributor sees secret scan, typecheck, lint/privacy, relevant docs checks and selected Linux unit files on shards 4–8. A light run skips macOS, Docker E2E, state models and CLI/release build smoke. Candidate/compiler host qualification is skipped unless the Rust input rule below applies. Ready PRs changing protected CI inputs automatically run full ordinary PR tiers, as ci:full would. Ready PRs into main keep the full tier, including Intel. Missing/empty diffs or unavailable base policy also fall back to full tiers. Ready PRs touching non-Markdown runtime-core/config-compiler inputs (including pins, fixtures and generated data), or any relay-guest input, also keep Linux Candidate core and both Linux compiler hosts with Rust checks. Their macOS jobs stay deferred. Linux unit preflight still prepares its matching compiler. On a light run, shard 8 names selected macOS paths as “deferred to the integration run” before typecheck; deferred files run nowhere on that PR. test and docs site always report. The required test fan-in now also requires the active Linux process-lifetime job to succeed; only that job's planned out-of-scope skip passes. Branch rules are unchanged.

  • ci:mac: opt into selected macOS unit/native tiers under their usual input gates.
  • ci:e2e: opt into Docker/runtime-image/lifetime jobs under their usual gates. Labels combine.
  • ci:full: every unit file and ordinary native/Docker tier, state models and build smoke. PRs into next and ordinary next integration runs omit Intel; main PRs/pushes and explicit full dispatches retain it.

Drafts retain the light deferrals even when labeled, and both fan-ins fail with skipped: draft. They no longer move macOS-pool files onto Linux. The independent shell guard enables heavy tiers for protected inputs, including this PR's workflow/selector changes. An ordinary selector fallback widens files within the chosen tier. State models follow the same full-tier admission.

CI selection and release evidence

next selection uses trusted policy/dependencies from event.before against the new tree as data. Missing/zero/non-ancestor bases, protected inputs, old policy, failed/cancelled/running/missing predecessor CI or API errors force full integration selection. This keeps cancelled changes covered. next runs selected platform and Docker jobs after batch merges; failures are fixed forward. Only next pushes share the cancelling group; full manual runs and main pushes stay independent.

For a release, freeze next at the release head, run gh workflow run ci.yml --ref next -f full=true, wait for success, then dispatch the prerelease. Every prerelease now needs this explicit full run. The plan refuses subset-only evidence and prints that command. If a newer scoped push at the same SHA is running, failed or cancelled, it also names that run and says to wait for success or gh run rerun RUN_ID; older full evidence cannot override it, while a new full dispatch can supersede it once the dispatch succeeds. Plan and publish require executed full-selection/release-full markers, all four compiler hosts, every shard/job successful, and required CI checks from the selected suite and exact attempt jobs. Newer failed/cancelled/unfinished evidence cannot expose older green. Partial reruns missing current-attempt jobs refuse safely; use an entire workflow rerun. A moved head refuses. Stable release preparation remains main-push-only; cancelled runs cannot qualify.

The storage activation command file gets a temporary 20-minute per-file budget, runs first in its shard, and remains subject to the 30-minute shard deadline. Other files retain 12 minutes; explicit CLI limits override the exception. This addresses run 43313402845's 12-minute timeout with bounded headroom, not a speedup claim. Splitting/cutting the eight-case file and refreshing its planning weight remain the next cost follow-up.

Ten successful six-macOS-job runs on Nov 12 gave these median job minutes (queue excluded; sums of medians are descriptive):

Job Before minutes
Unit 1 / 2 / 3 17.93 / 17.67 / 14.00
Candidate ARM 19.25
Compiler ARM / Intel 5.97 / 12.22

The total is about 87 macOS runner-minutes. Ordinary light PRs schedule zero macOS jobs. Protected-input/full-tier PRs and ordinary full next runs use five instead of six, deferring Intel to main/release-full. This intentionally moves Intel-only regressions on next to release qualification. Bun install is only 5–6s on unit lanes, 19s on Intel; unit compiler prep 48–55s. Three candidate logs show 10.3–14.3min Cargo compilation and 3.3–4.1min Cargo test execution. Compiler ARM transport/bundle work alone is 169s median; folding it into the 19min candidate job saves under a minute of setup while extending that lane, so they stay parallel.

Bun downloads, Cargo registry/target trees and Zig data are cached by OS/arch, image OS, toolchain pins and locks, with separate compiler/candidate targets. PR native caches restore only; trusted push/dispatch caches save. Image updates do not create another multi-GB entry. Builds/tests still execute; Zig is checksum-verified and re-extracted. Structured step timings from the first full PR run show native-cache helper steps at 0–1s, Bun cache restore at 7–11s, unit installs at 1–2s and unit compiler preparation at 34–60s. Candidate Zig setup was 1s plus 12s post-step; compiler post-step was 16s. Warm hit/miss and native-save benefit remain unqualified; PR native caches do not save. This PR's protected-input guard now schedules its own full ordinary PR run, which the lead requires before merging this gating change.

Runner options, checked Nov 12: the account is Team; its published macOS cap is five, shared by standard/larger runners. The sample observed five concurrent Mac jobs; custom support overrides are not exposed by the limits API and remain unverified. Larger Intel: 12 CPU/30GB, $0.077/min. M2 Pro xlarge: 5 CPU (+8 GPU)/14GB, $0.102/min. Larger runners are paid even for public repos; current standard public jobs are free. Limits, specs, prices.

A spare Apple Silicon Mac buys queue capacity, not a lower current hosted bill. Use ephemeral isolated VM/JIT workers labeled self-hosted, macOS, ARM64, trusted-ci, admitted externally for trusted next/main pushes and manual runs only. Never fork PRs, other PR events or pull_request_target. Labels/editable workflow conditions are not access control: restrict runner-group/workflow routing and event/ref admission, discard each VM/checkout, and retain no host credentials. No registration, paid runner or account changes here.

Validation on the Batch A integrated tree: 289 focused CI/shard/release tests passed (1,734 assertions). The 65-file source-contract gate: passed 1,315 tests with 26 conditional skips and zero failures (13,731 assertions). No daemon before/after. Pinned typecheck, lint/privacy, explicit script/test lint, actionlint 1.7.12 and commit-range gitleaks 8.30.1 pass; existing complexity warnings remain. The persistent reviewer is clean on exact tree 98ab31ac29bfcb971058590d7cb750b906b0e69b.

After next.16 published and #747 landed, normal merge ae94e5fb602240ee381d4f112edeb4f76813fd30 brought next at e7a70393e1bae3d3e453ac82bf20fad6273277b3 into this PR. The model-coverage conflict retains this PR's CI-evidence row and #747's updated log-follow row verbatim. Batch A implementation is unchanged. The existing startup model README points to the three merged regression files. The source-only selector regression requires a proper subset from the real tree.

For comparison, the prior full PR run 43371306048 passed all 26 jobs at 56075e67. Its five Mac jobs took 15.28/15.52/14.28 minutes for unit shards, 20.00 for Candidate ARM and 6.38 for compiler ARM: 71.47 Mac runner-minutes, versus the earlier six-job baseline's sum of medians, 87.03. These are different trees and unmatched runs; they do not establish a cache speedup. Mac shard 1 waited 109.53 minutes after scope, so queue pressure remained. The latest revision still needs its own hosted result.

This protected-input PR must run its full ordinary PR tier at the new head. Ready follows green Linux jobs, clean reviews and handled bot threads, naming any pending heavy jobs. The lead requires this PR's full hosted run before merge. Manual dispatch/partial-rerun and warm-cache qualification remain post-merge work; this PR adds no native runtime implementation changes relative to next. After this PR merges, #688, #691, #750 and #751 will be retargeted to next; #750 must preserve #749's optimized identity engine and assertions. HACK-2111.

@vercel

vercel Bot commented Nov 12, 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 9:10am UTC

Request Review

@roodboi

roodboi commented Nov 12, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 12, 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-13T09:12:18.780254Z ae94e5f Manual request
🔒 Security Review ✅ Completed 2026-11-13T09:16:32.323279Z ae94e5f 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. Keep it up!

Reviewed commit: ecacb4565e

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

View security finding report

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

ℹ️ About Codex security reviews in GitHub

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

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

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

@roodboi

roodboi commented Nov 12, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: current-head Linux CI is green in run 43327117353: shards 4–8, typecheck, lint/privacy, secret scan, docs and the required test fan-in passed. Shard 8's deferred-macOS report passed; CLI/release build smoke was skipped. No macOS or Docker E2E job started. The earlier cancelled run 43327108000 is superseded.

Persistent reviewer clean at this head; Codex code review clean, no unresolved bot threads, and computer pr review-status CLEAR at ecacb45. Local source gate: 1,289 pass, 26 conditional skips, zero failures.

Pending hosted jobs: none in this PR run. macOS/Docker qualification is deferred to integration under the batch policy. Manual release-full dispatch and warm-cache after timings remain integration evidence after the release freeze. Lead-arranged second-family review still applies before merge.
Real-VM check: no native runtime implementation changed; use the lead's combined-tree qualification as planned. No merge requested during the prerelease freeze.

ecacb45

@roodboi

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Second-family review (Claude Opus; the author is a Codex session) at ecacb4565e9156203779b0a67e49ed9d83fe577e, report only: 1 blocker, 2 should-fix, 2 nits. Not mergeable as is; the design is sound.

Blocker: a pull request that changes the workflow, the selector or another protected input runs the full file list but not full CI. .github/workflows/ci.yml:109 sets full=true for protected paths, then the pull-request tier block at :171-187 still turns off the compiler hosts, Candidate core, the macOS shards, Docker e2e and the build smoke. This PR is the example: the cache steps it adds to the macOS jobs, the Zig cache, the gh api predecessor query and the next-push and manual-dispatch branches never ran on hosted CI, yet test is green. Releases stay safe because the gates fail closed, but a broken macOS job definition would turn every later next run red.

Should fix

  1. Pull requests into main also get the light tier (:171-187 has no base check). Not fail-open (main pushes stay full and release-prepare needs one), but stable-line regressions would show only after merge.
  2. scripts/prerelease-plan.ts:385: when a newer scoped push run at the same head is still running or failed, the refusal only says to dispatch a full run. It should also say to wait for or rerun the push run at that commit.

Nits: light pull requests no longer run bun run build or the release build smoke, and ordinary next runs drop the Intel compiler; both are fine but the docs should say so.

Checked and sound

  • No fail-open path on the required checks (test, docs site); labels can only add work and need triage access; drafts fail both fan-ins.
  • A next push widens to a full run unless the previous head's own push run completed green, so a change whose run was cancelled by the next push is still run on macOS and Docker by that next push. Tested with a real shell and a fake gh.
  • No reader treats a cancelled run as success. The prerelease plan requires a run marked selection_mode=full and ci_evidence=release-full at the exact head, with all four compiler hosts, and prints the dispatch command when only a subset run exists.
  • Tests pass (102 across four files); three mutations (accept a cancelled predecessor, let a scoped run qualify a prerelease, drop the macOS deferral) each fail tests.

Lead decisions (the owner can overrule), one push:

  1. When the protected-input guard fires on a ready pull request, the macOS, Docker e2e and build-smoke tiers run automatically (the same as ci:full). Test it.
  2. Pull requests into main keep the full tier.
  3. The refusal message gains the "wait for or rerun the push run at this commit" line.
  4. The contributor doc says what a light run skips (build smoke, macOS, Docker e2e, Intel compiler on ordinary next runs) and how to ask for more.
  5. This PR then gets a full run at its head (it will get one by rule 1) before it merges, plus a short second look at the delta.

🤖 Review relayed by Claude Code

@roodboi

roodboi commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor Author

Follow-up pushed after next.16 publication: 56075e67b01de0f13e6fa4f0288d5b1d8945d986, including a normal merge of next at c89f4fd7. The protected/main tier fixes, scoped-push recovery guidance, docs and regressions are reviewed clean. The merge applied without conflicts and preserves both-host daemon coverage.

Local integration checks pass: 1,298 source-contract tests across 65 files, 26 conditional skips, zero failures; 273 CI/shard/release tests plus the expanded 75-test selector file; typecheck, lint/privacy, actionlint and secret scanning. No daemon before/after.

Hosted run 43371306048 is pending; current-head Codex review is requested. This protected-input PR must schedule its own full ordinary tier. I will post Ready after Linux is green and bot threads are handled, naming pending heavy jobs. The lead still requires this full hosted run before merge. No merge performed here.

@roodboi

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: 56075e67b0

ℹ️ 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: 56075e67b0

View security finding report

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

ℹ️ About Codex security reviews in GitHub

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

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

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

@roodboi

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: run 43371306048 is entirely green at this head, with all 26 jobs successful. This includes Linux shards 4–8, macOS shards 1–3, all three ordinary compiler hosts, Candidate core on both hosts, all four Docker E2E shards, runtime images, lifetime checks, state models, CLI/release build smoke, docs, secret scan and both fan-ins. The protected-input guard automatically enabled the heavy tiers; Intel is correctly absent from this ordinary PR tier.

Persistent review is clean on the exact merged tree; current-head Codex code review is clean, all bot findings are handled, and computer pr review-status is CLEAR at 56075e6. The lead's requested fixes and the normal merge of next were delivered in one follow-up push after next.16 published. Newer next changes do not overlap this PR's touched paths, so no freshness-only push was made.

Pending hosted jobs: none. Local source-contract gate: 1,298 pass, 26 conditional skips, zero failures across 65 files; typecheck, lint/privacy, actionlint and secret scanning pass. This is full ordinary PR qualification, not a release-full dispatch certificate; explicit release dispatch still covers Intel. Mac timing/cache attribution follows separately, without claiming a warm-cache speedup from one run.

Real-VM check: no native runtime implementation changes in this CI unit; combined-tree qualification remains with the lead. No merge performed here.

56075e6

@roodboi

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

macOS timing follow-up for green run 43371306048, head 56075e67b01de0f13e6fa4f0288d5b1d8945d986. Minutes exclude runner queue:

Job Before: median of 10 runs After: this one run
Unit shard 1 17.93 15.28
Unit shard 2 17.67 15.52
Unit shard 3 14.00 14.28
Candidate ARM 19.25 20.00
Compiler ARM 5.97 6.38
Compiler Intel 12.22 Omitted on ordinary PR/next tiers
Total Mac runner-minutes 87.03 (sum of medians) 71.47

This is descriptive, not a matched speedup experiment: the baseline has ten samples, the after column one, and next includes new work and #749's fixture optimization. Dropping the ordinary Intel lane is a scheduling change; the table does not establish a cache speedup. Standard public runners remain free, so the benefit is queue capacity. The last Mac shard waited 109.53 minutes after scope completed before starting; queue impact needs integration observations after this policy merges.

The Jobs API exposes these phase costs:

  • Mac unit lanes: Bun setup 2s; Bun cache helper 7–11s; bun install 1–2s; Rust setup 7–11s; matching-compiler cache helper 0–1s; compiler build 34–60s; unit-test steps 793–853s. Native-cache post steps were 0s.
  • Compiler ARM: Rust setup 11s; dependency/native cache helpers 0–1s, with 16s of cache post-step time; install 3s; crate check/test 56s; compiler build 43s; transport/projection/bundle checks 180s. These checks still execute.
  • Candidate ARM: Rust setup 9s; Cargo cache helper 1s; Zig cache helper 1s plus 12s post-step; checked Zig extraction/install 10s. Its two Cargo contract steps took 308s and 363s, and candidate build/inspection 262s. Those step times include compilation; they are not pure test-execution timings. The earlier three-log baseline attributed 10.3–14.3min to Cargo compilation versus 3.3–4.1min test execution.

The structured shard-1 duration artifact records native-compose-storage-activation-command.test.ts completing in 378.9s (6.32min) on macOS, with the merged #749 optimization. The split in #750 still needs that optimization preserved during combined-tree integration, as noted there.

Native caches are restore-only on PRs by policy. Cache hit/miss status, warm native save/restore cost and the redesigned manual-dispatch/partial-rerun path remain unqualified. Raw job-log export was refused by the CLI's terminal-escape guard; no override was used. This report uses safe Jobs API step metadata and the JSON duration artifact. The requested full ordinary PR run itself is entirely green; no extra full rerun was started just to collect timings.

@roodboi

roodboi commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor Author

Published: the lead's #747 confirmation is incorporated. One follow-up push delivered ae94e5fb602240ee381d4f112edeb4f76813fd30, merging next at e7a70393e1bae3d3e453ac82bf20fad6273277b3. The model-coverage conflict retains the CI evidence row and #747's updated follower row verbatim; Batch A code is unchanged.

Ready Rust-input PRs retain Linux Candidate core and both Linux compiler hosts, including non-Markdown pins, fixtures and generated crate data; macOS stays in the heavy tier. Nested Rust toolchains are protected. The dispatch wording identifies the dispatch as the run that must succeed. The active linux-process-lifetime job gates test in this PR; branch rules are unchanged.

Validation on the exact merged tree: 289 focused tests (1,734 assertions); 65-file source gate: 1,315 pass, 26 conditional skips, zero failures (13,731 assertions). Typecheck, lint/privacy, actionlint and commit-range secret scan pass; no daemon before/after. Normal hooks made no changes. Persistent review is clean on tree 98ab31ac29bfcb971058590d7cb750b906b0e69b.

Current-head CI run 43399024547 and the requested Codex code review are pending. This supersedes the previous Ready note. I will post a new Ready note after Linux jobs and bot review are green, naming pending heavy jobs. The full hosted run remains required before this gating PR merges.

After #748 merges, #688, #691, #750 and #751 will be retargeted to next; #691 gets the Linux Rust/lifetime wording and #750 preserves #749's optimization and assertions.

ae94e5f

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

Current head: ae94e5f. Follow-up retains Linux Candidate core and both Linux compiler hosts for ready Rust-input PRs, protects nested Rust toolchains, clarifies successful full-dispatch evidence, and gates test on the active linux-process-lifetime job. It merges Batch A from next at e7a7039; the coverage map preserves both CI and updated log-follow rows.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit: ae94e5fb60

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

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 e2c73c6 into next Nov 13, 2026
29 checks passed
@roodboi
roodboi deleted the fix/ci-macos-throughput branch November 13, 2026 10:48

roodboi commented Nov 13, 2026

Copy link
Copy Markdown
Contributor Author

Post-merge CI audit for next at 021b16bcfd13c48b14bf2677eba2cffe62453ea2 (structured Run/Jobs API observations).

Push Run Observed outcome
e2c73c61 (#748 merge) 43411888075 Cancelled during Change scope; cancelled evidence fails the test and Docker fan-ins.
ebf794e6 (#760) 43411937350 Cancelled with zero jobs; the intermediate pending run was coalesced away.
021b16bc (#763) 43411992585 The only unfinished next CI run; full heavy tier admitted.

This matches the shared next-push cancellation group: superseded runs settle cancelled rather than accumulating. The API labels the latest workflow queued even while its Linux jobs execute; that aggregate label does not mean Linux is blocked. After scope completed at 10:49:38 UTC, Linux Candidate, compiler, unit and Docker jobs started at 10:49:40–42 while all five Mac jobs remained queued. All eight unit shards, both Candidate hosts, three compiler hosts (no ordinary Intel), four Docker shards, runtime images, models and lifetime checks are admitted. The earlier run was cancelled before it could expand its heavy matrix, so the live heavy-tier evidence comes from the latest run.

The latest diff includes protected scripts/bench-output-scanner.ts, so full admission is expected. These observations qualify cancellation/coalescing and full admission; they do not yet qualify successful-predecessor subset selection, warm native caches or release-full dispatch.

Scheduling findings and proposed follow-ups:

  • Linux is already independent of Mac allocation: each matrix needs only Change scope and has no max-parallel cap. The required test fan-in intentionally waits for every planned unit shard plus active lifetime checks. Splitting the matrix could provide an earlier Linux summary, but would not finish the full batch sooner. Making test green before planned Mac evidence arrives would weaken its contract and is not proposed.
  • Old merged PR runs still consume or queue Mac capacity. At the snapshot, fix(native): preserve followed-log output and restart sessions #747's 43386587835 still had one Mac shard running; ci: make PR checks light and coalesce next integration runs #748's 43399024547 had one running and three queued. Proposed follow-up: retire unfinished PR runs after merge once their replacement full integration is admitted, while keeping the full batch and release gates. This avoids spending slots on obsolete PR snapshots under the accepted batch policy. No run was cancelled by this audit.
  • Cancellation has a smaller workflow tail: the cancelled e2c73c61 scope ended at 10:48:26, but its always() docs job ran 10:48:28–10:49:23. The replacement's first jobs started at 10:49:25. A separately reviewed cancellation-aware docs condition could remove that roughly 55-second tail while preserving current-head reporting and fail-closed release evidence. This affects required-check execution, so it needs approval before implementation; no condition, required name or branch rule was changed. It would not solve the hours-long Mac queue by itself.

Older PR audit: #688, #691, #750 and #751 already target next. All retain unique, unmerged changes, so all remain open; each now has a specific audit comment. #691 needs the Linux Rust/lifetime wording kept current, and #750's combined tree must preserve #749's optimized engine and assertions. No freshness-only push or superseded closure was made.

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