From fed1efeca7ae542a74f9e7eb7429f44cd7a5f95a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 21 Oct 2026 06:56:45 +0000
Subject: [PATCH 1/9] chore(deps): update dependency lucide-react to v1.61.0
---
pnpm-lock.yaml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b8cf9feb9e..de60f2ab45 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -210,7 +210,7 @@ importers:
version: 0.10.1(graphology-types@0.24.8)
lucide-react:
specifier: ^1.0.0
- version: 1.60.0(@types/react@19.3.0)(react@19.3.1)
+ version: 1.61.0(@types/react@19.3.0)(react@19.3.1)
react:
specifier: ^19.0.0
version: 19.3.1
@@ -2258,8 +2258,8 @@ packages:
resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==}
engines: {node: 20 || >=22}
- lucide-react@1.60.0:
- resolution: {integrity: sha512-UqxOW0FgAfDyb9VmjKb6/BkOzW6yfhf/QNboKtS2NDsscnNRW2CDzlyhbMKBQ1ontmcxuIDqHJ2AVgFR3NI+GA==}
+ lucide-react@1.61.0:
+ resolution: {integrity: sha512-v2SQPPPNjnr+BlhL9Spuzmo5yR+hLkftfuE4E3jaxdNPgSH0hJKPcLJBP7yAta87jQNPsSERS59PJjCJ/CorBA==}
peerDependencies:
'@types/react': '*'
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -4518,7 +4518,7 @@ snapshots:
lru-cache@11.5.3: {}
- lucide-react@1.60.0(@types/react@19.3.0)(react@19.3.1):
+ lucide-react@1.61.0(@types/react@19.3.0)(react@19.3.1):
dependencies:
react: 19.3.1
optionalDependencies:
From e4486f199a670defa011950af46e4574a2917691 Mon Sep 17 00:00:00 2001
From: Zack Jackson <25274700+ScriptedAlchemy@users.noreply.github.com>
Date: Wed, 21 Oct 2026 04:54:30 -0700
Subject: [PATCH 2/9] test(fixtures): synchronize reads and daemon store
ownership
---
crates/tracedecay/tests/common/mod.rs | 52 +++++----
.../affected_tests_behavior_test.rs | 102 ++++++++++++++++--
.../daemon_fault_harness_test.rs | 47 +++++++-
.../typed_terminal_restart_acceptance.rs | 1 +
4 files changed, 167 insertions(+), 35 deletions(-)
diff --git a/crates/tracedecay/tests/common/mod.rs b/crates/tracedecay/tests/common/mod.rs
index 827b125218..51fe23fcd5 100644
--- a/crates/tracedecay/tests/common/mod.rs
+++ b/crates/tracedecay/tests/common/mod.rs
@@ -1201,6 +1201,29 @@ fn daemon_authority_lock_held(profile_root: &Path) -> bool {
}
}
+/// Waits for a stopped daemon's inherited endpoint and authority handles to
+/// close before a fixture starts a replacement or opens the store itself.
+/// Reaping the leader does not reap descendants that still hold these handles.
+pub fn wait_for_stopped_daemon(home: &Path) {
+ let profile_root = canonical_existing_path(home).join(".tracedecay");
+ poll_until(
+ Instant::now() + PREDECESSOR_DAEMON_VACATE_TIMEOUT,
+ Duration::from_millis(25),
+ || {
+ let live = daemon_is_connectable(home);
+ #[cfg(unix)]
+ let live = live || daemon_authority_lock_held(&profile_root);
+ (!live).then_some(())
+ },
+ || {
+ format!(
+ "a stopped test daemon still owns an endpoint or authority lock in {}",
+ profile_root.display()
+ )
+ },
+ );
+}
+
fn spawn_tracedecay_daemon_process(
home: &Path,
binary: &Path,
@@ -1237,34 +1260,7 @@ fn spawn_tracedecay_daemon_process(
// endpoint go quiet; this wait only covers the kernel's leftover. The
// authority lock has the same tail, and `stop_managed_daemon` unlinks the
// socket, so only the lock shows such a predecessor's child is still alive.
- poll_until(
- Instant::now() + PREDECESSOR_DAEMON_VACATE_TIMEOUT,
- Duration::from_millis(25),
- || {
- #[cfg(unix)]
- let live = std::os::unix::net::UnixStream::connect(&socket_path).is_ok()
- || daemon_authority_lock_held(&profile_root);
- #[cfg(not(unix))]
- let live = portable_daemon_connectable();
- (!live).then_some(())
- },
- || {
- #[cfg(unix)]
- {
- format!(
- "refusing to replace a live test daemon at {} or its authority lock",
- socket_path.display()
- )
- }
- #[cfg(not(unix))]
- {
- format!(
- "refusing to replace a live test daemon recorded at {}",
- authority_path.display()
- )
- }
- },
- );
+ wait_for_stopped_daemon(home);
let mut command = Command::new(binary);
apply_tracedecay_home_env(&mut command, home);
diff --git a/crates/tracedecay/tests/mcp_suite/mcp_handler_test/affected_tests_behavior_test.rs b/crates/tracedecay/tests/mcp_suite/mcp_handler_test/affected_tests_behavior_test.rs
index 8101c21542..196d2f43f3 100644
--- a/crates/tracedecay/tests/mcp_suite/mcp_handler_test/affected_tests_behavior_test.rs
+++ b/crates/tracedecay/tests/mcp_suite/mcp_handler_test/affected_tests_behavior_test.rs
@@ -6,6 +6,8 @@
use std::fs;
use std::path::Path;
+use std::sync::{Arc, Mutex, mpsc};
+use std::time::Duration;
use serde_json::{Value, json};
use tracedecay_application::operation_stream::operation_event_authority;
@@ -13,6 +15,8 @@ use tracedecay_contracts::request_identity::{GlobalRequestSurface, mint_global_r
use tracedecay_contracts::{Deadline, OperationBudgetUsage, OperationReceipt};
use tracedecay_domain::UtcMicros;
use tracedecay_mcp::ToolResult;
+use tracing_subscriber::layer::{Context, Layer, SubscriberExt};
+use tracing_subscriber::registry::LookupSpan;
use url::Url;
use crate::support::{
@@ -24,6 +28,60 @@ const GREETING_TEST: &str = "tests::greeting_is_hello_world";
const FAILING_TEST: &str = "greeting_is_goodbye";
const KEPT_TEST: &str = "alpha_kept";
+#[derive(Default)]
+struct ReadFlightOverlap {
+ pause: Mutex