From 3c05823f1997433ed67887579fc5715f7a26fc95 Mon Sep 17 00:00:00 2001 From: Dai Ha Date: Thu, 16 Jul 2026 06:43:05 +0200 Subject: [PATCH] CB-114: resolveCwd never returns null (honor the 'daemon cwd, never $HOME' contract) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Final review-sweep finding: firstNonBlank(requestedCwd, cfg.cwd(), callerCwd, user.dir) returns null if all are blank (pathological env with user.dir unset), after which AgentControl drops the cwd and herdr defaults the pane to $HOME — violating CB-112's documented contract. Append "." (the daemon's own cwd) as a guaranteed non-blank last resort. Near-impossible trigger; makes the code honor its own javadoc. 105 tests green. --- .../main/java/dev/ltms/bridged/worker/WorkerService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bridged/src/main/java/dev/ltms/bridged/worker/WorkerService.java b/bridged/src/main/java/dev/ltms/bridged/worker/WorkerService.java index 6535a4f..2003523 100644 --- a/bridged/src/main/java/dev/ltms/bridged/worker/WorkerService.java +++ b/bridged/src/main/java/dev/ltms/bridged/worker/WorkerService.java @@ -134,9 +134,14 @@ public final class WorkerService { : spawnAsPane(cfg, workerEnv, argv, cwd); } - /** CB-112 cwd resolution: spawn arg → profile config → the primary's cwd → the daemon's cwd. */ + /** + * CB-112 cwd resolution: spawn arg → profile config → the primary's cwd → the daemon's cwd. + * Never returns {@code null}/blank: {@code "."} (the daemon's own working directory) is the + * guaranteed last resort so a pathological environment with an unset {@code user.dir} still + * honours the "never assume {@code $HOME}" contract rather than letting herdr default the pane. + */ private static String resolveCwd(String requestedCwd, BridgedConfig.Worker cfg, String callerCwd) { - return firstNonBlank(requestedCwd, cfg.cwd(), callerCwd, System.getProperty("user.dir")); + return firstNonBlank(requestedCwd, cfg.cwd(), callerCwd, System.getProperty("user.dir"), "."); } private static String firstNonBlank(String... values) {