[Bug]: t3 update / service install moves launchd log paths into T3CODE_HOME; service exits 78 when T3CODE_HOME is on an external volume#24910

opened17d agobyFFelixGraeber

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. On macOS, put the T3 home on an external APFS volume, for example ~/.t3 → /Volumes/<external>/…/T3Code. Install the background service. It runs fine while the unit logs to ~/Library/Logs/T3Code/boot-service.log.
  2. Run t3 update --yes (here: 0.1.2-nightly.20261021.3457 → 0.1.2). t3 service install --base-dir ~/.t3 shows the same result.
  3. Check launchctl list | grep t3code.

Expected behavior

The service restarts on the new version. The launchd unit keeps a log path that launchd can open, either the existing custom path or one under ~/Library/Logs/T3Code.

Actual behavior

The installer rewrites StandardOutPath/StandardErrorPath to $T3CODE_HOME/userdata/logs/boot-service.log. That file is on the external volume, and launchd is not allowed to open it (TCC). The job exits with 78 (EX_CONFIG) before t3 runs. The server stays down and writes nothing to any T3 log. service install reports success (Updated T3 Code service with t3@0.1.2.).

The t3 executable on the same external volume starts fine. Only the log path fails. Setting both paths back to ~/Library/Logs/T3Code/boot-service.log and running launchctl bootout/bootstrap fixes it immediately.

Impact

Blocks work completely

Version or commit

0.1.2 (updated from 0.1.2-nightly.20261021.3457)

Environment

macOS 27.2, Apple silicon (Mac mini), headless background service, T3CODE_HOME on an external APFS SSD

Logs or stack traces

shell
1$ launchctl list | grep t3code
2- 78 com.t3tools.t3code.service
3
4$ plutil -p ~/Library/LaunchAgents/com.t3tools.t3code.service.plist | grep Path
5 "StandardErrorPath" => "/Users/<user>/.t3/userdata/logs/boot-service.log"
6 "StandardOutPath" => "/Users/<user>/.t3/userdata/logs/boot-service.log"

Workaround

After every t3 update / t3 service install, set the unit's log paths back to ~/Library/Logs/T3Code/boot-service.log, then run launchctl bootout gui/$UID/com.t3tools.t3code.service and launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.t3tools.t3code.service.plist.

Suggested fix: write launchd log paths under ~/Library/Logs/T3Code, or keep the paths of an existing unit on reinstall. Also check after bootstrap that the job has a PID or exit code 0, so service install does not report success while the service is down.