Repository navigation
Post-0.64 batch 3 - #1433
Merged
Merged
Post-0.64 batch 3#1433
Conversation
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 41dd7ac91bb4b88fa40fb4d6adec5e121065a0cd) (cherry picked from commit 3f127c1948a1324ad8d3cc0968359686eb43174f)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 6d10766403ffcd4a96128876af0883e5f0193bfc) (cherry picked from commit 9ea44d9c86a6f90676e8200377ae133b35dd50da)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit fb0df3e0cec63693685c0900ced4cb6479f37904) (cherry picked from commit e81e75a602c28b83dfc7159a41a91e21c2641db0)
Admit each dependency pass before doing its invalidated work, counting the union since publication. Above max(1024, ceil(parsed/4)), drop the incremental engine before rebuilding from stored content. Reserve cold builds while queued and running; retain later watcher changes for post-publication catch-up. The existing concurrent-build test intentionally changes contract: refresh now coalesces with a cold build instead of resolving over the publication that the build will replace. It still asserts that late changes stay pending and resolve correctly after publication. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 8d752ed597fb2dc83773b6007f803f90bad9d870) (cherry picked from commit 3e8f2a640219578fc98eb6a8b15c3cfa34a3a247)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit ad8f7b617fbf3511e3ac139d7f5b6bf50aff911d) (cherry picked from commit 6f10ca84de8e88384cd2c7702e0605c6cac27115)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 3ac93a8b47cd1af7fd42db9ac4242344c076bc6f) (cherry picked from commit 80f2b4090677ee26702deb384b51045429cbde79)
Reuse initialized encoded parse records by their content/extractor key without forcing untouched changes to extract. The cumulative-switch test now asserts every target record is reused, including the two unpublished extracts. Add allocation-counter-free stage timings and a test-hooks control for attributing the old repeated work. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 33c693f7ffcb0ee35a092c9d2257c5743d93c72f) (cherry picked from commit 32c2c1ad45f27fd5d5bc3c6cca30092450a8501e)
Reserved builds wait out and release any in-flight incremental engine before scanning. Cold fallbacks also schedule meaning fill after publication, as the existing full-build path does. Clarify probe timing controls and initialized-record reuse. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 8a1071417a3860edaf19cac00b6fa6524363491a) (cherry picked from commit 334e16b009e1648a5f07b308b4ae3c568bf655db)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 0e24df2bee14b21b027dd4f0268422b233530dcf) (cherry picked from commit 9855b96be8a754973cf70ee827f2247cb8b4278d)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit ac29aaa726c41cf7fc9ef0cd9c40a302ff3dcaa1) (cherry picked from commit 0f0f5c74beba96968c504b5f87ea3f5010b69188)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 545adb87acde462e497cd6b37dd8465b3c5b28c4) (cherry picked from commit 3aff3d7f00357b32aaa7e8d472502a2c2f7bb260)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 0aee1a46ac6f2bd0da50a562c2d0d2a3622f7722) (cherry picked from commit fedaf6ec7775e2321f1b29b6581de9f9d93f6a2e)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 07c7cd0b092dafdf71e245aa1800446c1e228f6d) (cherry picked from commit 72241a06d6f0ebe80e42d478932b66d4d8d74d8d)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 363ba9027a6f13e64de9da923e656654f06e83cf) (cherry picked from commit 423fce74ed7ed6cc216ac8414e4e9723d0581ac7)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit b4a8eada0f9c68abd1d996ba1e0c4852dcd934f4) (cherry picked from commit cfaeeee11cf5a4dee2fe10de8189eba39775d281)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 10bba5ac007d61177ffa7955c22ec2a012c3e9b4) (cherry picked from commit 3265bdbc897f4a5320d3d8861bb304b25f224ab8)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit d45a4ae8924f9caa6eddf03b23c2f0ad84b20703) (cherry picked from commit f6d02160b240090c80e1a4881bcfe38a364c4cee)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit abf04aec2ad1de94013f4f5de85b19bb0f6a55c1) (cherry picked from commit afb4b4c1d49dcdda6ecbbf84a9d879c12122a099)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 764468d9efa179879d7c680c6d09d4427c6de818) (cherry picked from commit b44c619377370513f943d0c117cfc291f610409f)
…#1428) Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 06f24c282b61b1280f10da4525135b60d71d02d7) (cherry picked from commit 5df97ab8197f29c1fc3e2e39cf657066ce2dae90)
…1428) Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 74239d6e9d88d5e00fab914ca2dffc6e7e7af2b8) (cherry picked from commit 1a5429a24804f4352d8268ba53f5bab81a4b4248)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit b3358efd10fac4c8ab5bb7b0f019a775d6f14dbc) (cherry picked from commit 291b6c6dce10dcd2389ca18e12375971fadcca17)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit aa2bae50840971b50493a20a9e33e1368bb1504c) (cherry picked from commit 2c62e235dbb8b1a8b3e239a3c0f2b494c20f3414)
Keep STATE_FORMAT at 3 and put skipped folders behind fragment-section flag 3, reusing the unknown-section rebuild behavior. Gap-free states keep the exact 0.64 encoding. A gap-bearing state must now be rejected by the old decoder rather than encoded as a gap-free format-3 state; the persistence test's legacy assertion changes accordingly. Add an independent frozen 0.64 writer oracle and sibling/family rollback checks. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 0034bf9360224fbcb5fa552146977e46883b6aa5) (cherry picked from commit 33f1ef50bb115cd701c0413af3ba368699f52181)
Keep per-root data deadlines and existing work pools, while cancelling pending registrations on eviction. A shared two-worker release pool keeps cache destruction off the timer. Preserve per-lock heartbeat threads and transient-unbind watcher retention by parent decision. Native FSEvents streams share one serial delivery queue without changing per-root backend/filter queues. The stopped quiet-timer test now checks deadline cancellation and weak ownership rather than requiring a private waiting thread; its no-fire-after-stop assertion is retained. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 3161f0f06c464c4a38791a0e2421c9a0f4fa8f37) (cherry picked from commit 5f1f4509dc362176845e80fd34a2781f37ed5e4b)
Add per-stream test-only release_context counters and native eventful/eventless drop probes with a five-second bound. Keep the original immediate-disconnection assertion unchanged until the probes identify which sender remains owned. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit f3e34cfb0f9b0a3816751b3748265638c4addfc4) (cherry picked from commit 13d18c39848e867a212fffce26297f1d62a52416)
Native per-stream counters show an eventful stream can leave release_context pending when Drop returns, then release it exactly once as queue work drains. An eventless stream releases once as well. Keep independent-stream delivery assertions, but bound the deferred disconnection by five seconds and check both context release counters. No stream lifecycle or timing constants change. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit cc0752b0538a511fead97cf45541f44b3774d523) (cherry picked from commit 7346ef1f907bed24350db9e8deb7ea81c039a528)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 380b952905c26a1b0868d84da1993bfb5a78053f) (cherry picked from commit 9467eebc672c3831e0e1f9e0e0a982af8b37a50a)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 2e5145b2f09d42b31d0dbb79aaeb33d478e28bd3) (cherry picked from commit 9a9954aafb46ed8cb8b2522bbc672b8ba5d05e32)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 1a34a6ded1caab8774af79bb60474823b711dca8) (cherry picked from commit be14228dc74dcbd96591de4c919c5750da04fa99)
The routing fake returns no reviewThreads connection. Its exact canonical PR assertion must now include the required fail-closed warning; the issue output and routing contract remain unchanged. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit dee24d0c3d1bdafb3604cd425a7288f2d6f01dc3)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit c3697ed024655766233e09641b0bf21759d62ad2)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 08fab7678447f03953238761e0d9a0a4aa50eb33)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 6a33ca85a7ed9a0c522912ffc02b53d1b85c699a)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit fbba95887b67c761bf080f5b32845462552d2ec5)
The real-daemon CI filter matched only tests named tool_provider_subc_e2e_*, so the two ignored runner_notice_real_daemon_* tests added to crates/aft/tests/tool_provider_subc_e2e.rs never ran in CI. Filter on the module instead (still with --run-ignored only) and update the workflow gate's exact-string assertion to match. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The inline-password and secret-assignment redaction (#1432) was written before replace_in gained its RangeMapping parameter on this branch. Two of its calls (INLINE_ASSIGNMENT in redact_command and SHORT_PASSWORD_ASSIGNMENT in the range-aware redactor) passed four arguments and did not compile. Pass the mapping each caller already holds: Watch in redact_command, and the caller's own mapping in the range-aware redactor. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The #1432 redaction masks PW=/PASS= assignments in general log text, but the shell output prefilter (shells_may_need_format_context) only lists triggers for the shapes that existed before. Output carrying only a PW=/PASS= assignment would skip the format scan, and the shared corpus test (shells_v1_format_context_prefilter_covers_real_redaction_corpus) fails on the new fixture cases. Add pw= and pass= as case-insensitive triggers. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Batch 3 touches ranking-fenced files (rerank line prefilter, cross-repository search on the index store, status cost probes) without intending any ranking change, so it declares the engine_unwired class with batch 2's inherited reference pattern counts. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Issue #1004 intentionally exposes the seven read-only AFT tools through Code Mode. Assert that exact inventory is enabled, and every other registered tool is explicitly disabled, on both Locations and after reload instead of requiring aft_outline to be disabled. The scripted session-move model only issues directly offered tools. With read now in Code Mode the host offers execute instead of read, so the old script returned Done without any read call; its direct-read result lookup consequently found nothing. Invoke tools.read through execute and correlate that exact code's call ID with its result while retaining both repositories' positive and negative content assertions. Assert the real host no longer offers read directly. Leave the operator-state canary unchanged: the CI log fails only its complete-label assertion after the two preceding rows abort, not its database/log equality checks. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 5c5d41ff866a5fb9a53fb074bb3085772203926b)
This reverts commit 2a6e8c2. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
On OpenCode 2.1.0 a tool registered with codemode: true is offered only inside Code Mode's execute tool, never directly, while the built-in read, grep and glob stay direct (codemode: false). Code Mode is on by default, and a user who denies the execute permission loses codemode tools entirely. So this change would make AFT's read-only tools harder to reach than the built-ins they replace, and remove them for anyone with Code Mode off. The tools go back to direct-only until a design that registers them both ways is approved. The load-matrix expectation reverts with it. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The protected-storage wording approved in 9007aa9f7f5c (pick fd2c9ab) intentionally replaces the generic floor refusal; retain the background-artifact ownership and code assertions while pinning that exact wording too.\n\nUse the runtime test manifest helper for the secret approval corpus added by d33a0a87bb86 (pick ebc9744). The #1425 include fixtures are only generated source, not evaluated macros; construct their unchanged bytes without making the checkout-path guard mistake them for this crate's compile-time environment accesses. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The default-enabled gh shim now opens a manifest vault route at startup (4fd4244c7fcf, pick d9a4c41). Refuse that unrelated route in the fake daemon before accepting the fleet catalog exchange; retain the precise catalog, status and reader assertions. The concat include certified by #1425 (ac29aaa726c4, pick 06e8210) can no longer serve as a negative cache fixture. Use valid computed-expression forwarding through a local macro instead, preserving provisional diagnostics and saved-check assertions. The backup writer already canonicalized paths at batch 2; only the new test's expected metadata path spelling changes. Add deterministic regressions for empty watcher-drain activity fencing and long failed-root health replies before repairing their product paths. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Deferred grep (c3697ed02465, pick a6db805) lets queries overlap the standalone loop's idle maintenance. An empty watcher pass formerly advanced the in-flight/activity fence, marking fully fresh responses incomplete even with the watcher disabled. Probe for channel/continuation work before fencing the drain; preserve idle cleanup, the quiet scheduler tick, and an explicit fence around actual deleted-root cleanup. Cover both empty receivers and a gated real event. The health budget stopped trimming once its last root was abbreviated, leaving failed-store error paths and the separate failure-name list unbounded by the remaining budget. Recent health counters exposed that escape on long macOS paths. Abbreviate nested error text, then shorten only the named-failure prefix as needed, retaining reasons, aggregate counts and the existing data_store_failed_omitted field. Preserve five names when they fit. The existing budget test now accepts only an exact prefix and exact omission accounting rather than demanding five names even when that exceeds the unchanged 12 KiB cap. Register the added list cut. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The saved-record fixture raced the detached cache writer introduced by a457f2e. Reuse the existing event-based persistence observer before restarting the manager, as the neighboring gated-persistence regression does. Keep the exact single-Cargo-run assertion; an in-memory inspection response does not promise the asynchronous disk write has finished. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
A first background TODO count can append an AFT status bar to an otherwise unchanged outline footer or read/edit result. Reuse the existing trailing-bar pattern through test-only helpers in both plugin suites; normalize footer and exact content assertions without suppressing status publication in the product. Preserve each renderer's expected trailing newline and leave internal status-shaped content untouched. Sweep both e2e directories and cover the helper boundaries explicitly. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
A fresh 409 MB Mach-O probe took 2.995 seconds after spawn on macOS, versus 0.006 seconds warm. The private shim used the generic executable cache and skipped the daemon fixture's warmup, so the product's two-second identity probe could refuse it and leave shims/gh absent. Reuse the warmed real-image publisher in a separate private cache namespace, preserving an inode distinct from the daemon for write-denial probes. Test final-path warmup, one-time reuse and inode isolation. Preserve the governed-child completion requirement and include daemon stderr and the symlink target on failure. Product validation behavior and its deadline are unchanged. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 6a6f8ad821095185586386deef5532d97fc94dac)
The real-module cache removes owner write permission. Reusing it for the private shim could make the sandbox write-denial assertion pass due to chmod instead of sandbox policy. Keep the byte-verified 0755 executable cache and add one-time final-path warmup under its publication lock in a separate warmed-only namespace. Replace the prior read-only private-image regression with tests for owner-writable final-path warmup, inode isolation, one-time reuse and removal of failed warmups without retry. Remove the now-unused private_shim_binary helper, which was dead code in standalone test targets. Expose only the existing macOS warmup routine, preserving its existing callers and deadline. Product behavior and governed-child assertions remain unchanged. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com> (cherry picked from commit 488095350a56aa309fa0668fcea26b1424185e46)
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The empty-drain fast path added in d156e6e used a real clock to decide whether an ignore refresh was due, while arming and executing it used the injected refresh clock. Use the same clock at all three sites; the rebind regression now remains deterministic on Windows and slow runners. The cleanup probe added in 935da83 held deleted_root_cleanup across root metadata I/O even for a healthy project. Since a contended probe counts as watcher work, asynchronous standalone grep (a6db805, #1432) could report pending changes without a watcher or any event. Keep metadata outside that mutex but inside the current-generation lifecycle gate; preserve guarded deletion cleanup and retry demand. A synchronous metadata hook reproduces the false pending flag without sleeps, load, or relaxed completeness checks. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Temporarily identify the exact pending predicate in the remaining macOS patch/delete failure without changing query ordering or completeness assertions. Trace output is opt-in under test-hooks. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
Native macOS reproduced the post-delete completeness failure on attempt 47: the query saw only slice_lock_busy, not FSEvents or queued files. Deferred grep exposes a scheduler probe's conservative try-lock result as an incorrect watcher_pending gap. Keep frame-loop scheduling nonblocking, but read the in-memory continuation metadata when capturing query gaps and before admitting a guarded drain. Confirming drain admission too prevents an idle metadata reader from creating a new empty in-flight/activity fence. Receiver and cleanup probes retain their conservative behavior because those locks can cover I/O. Remove the temporary diagnostics. Use channel-gated regressions for missing/empty/pending continuations and empty drain admission; preserve genuine pending paths, in-flight fencing, and the original complete=true integration assertion without sleeps. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
WatcherDrainSliceState retains pending paths in a VecDeque; use push_back to seed the real-work arm of the contention regression. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
The requested native retry on 0bc5260 failed on attempt 43 after 42 passes, this time with cleanup_lock_busy. Fix the entire class rather than another individual lock: cleanup state, receiver identity, continuation state, and intake-counter publication now yield their actual metadata to query capture. Scheduling remains nonblocking and may conservatively enqueue a turn, but drain admission confirms metadata before starting its in-flight/activity fence. Limit the cleanup mutex to state transitions under the existing lifecycle gate; retain Pending for deferred teardown and the real cleanup fence. Clone receiver identity before applying events, and resolve root counters before taking their Arc-publication write lock. No metadata lock now spans filesystem checks, event application, or teardown. Channel-gated regressions cover idle and genuinely pending values behind every queried metadata lock, including cleanup Pending/Inconclusive/Complete and obsolete-generation states. Retain the exact integration completeness assertion and real-event fences without sleeps. Co-authored-by: alfonso-aft <289616620+alfonso-aft@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Post-0.64 batch 3: the 17 deliveries assembled as batch 3, replayed onto batch 2's final tip (398e554, the same tree as main 9b505ee), plus 12 later deliveries.
Highlights:
read(pr://N)shows each review thread's id and state.Issues are referenced as (#N) only, and get closed by hand after release.
Summary by cubic
Lands the post-0.64 batch 3 deliveries: performance and cost reductions across search, status, and shell execution, plus security and correctness fixes.
Performance & memory
git configandgit worktree liston warm cache hits; unchanged background metadata skips repeated writes and fsyncs; shared idle timers and native FSEvents delivery replace ~650 per-root threads; per-root LSP applicability walks coalesce with a settle window and one follow-up.Security & correctness
{{ck-secret:<label>}}placeholders resolve through the live vault per request: real host/path checks, one shared 10-minute phone-approval deadline, last-waiter cancellation, per-hop fetch authorization, and fail-closed standalone use.PW/PASSand secret-shaped assignments; Linux agent shells raise their OOM kill priority to protect AFT (bash: a memory limit for shell commands (the linux_scope systemd scope sets no MemoryMax), with the kill reason in the result #750)./tmpgets a recursive watch when/tmpis a bind mount, but AFT classes the home folder as too broad #1428); durable writes use the strongest sync a mount supports, so macOS mounts without full-sync fall back to fsync and count that in health.concat!includes and local fixture macros (AFT issue: Since 0.64, aft_inspect Rust diagnostics are permanently PARTIAL ('cargo #1425);read(pr://N)shows review-thread IDs and states; PTY tasks with lost exit status report unknown instead of a kill reason.Written for commit 1a2fa6f. Summary will update on new commits.