CB-634: one shared "fleet" workspace + rename bridged -> fleetd cutover
Two changes ship together here.
1. One shared herdr workspace. The lead and every worker now live in one
workspace called "fleet", so the operator sees one "session" with many
windows, not two. Before, the lead sat in a "leads" workspace and workers
in "bridged-workers", which read as two sessions. The lead is still told
apart from workers by its exact tab label ("lead: <name>"), so putting them
in one space is safe. LeadTabScanner keeps the exclude-by-label mechanism
for split layouts; Fleetd now passes an empty exclude set.
2. Rename the daemon from "bridged" to "fleetd" (the binary, config, scripts,
launchd/systemd units, module dir, and MCP mount).
- Module dir bridged/ -> fleetd/; jar finalName -> fleetd.jar.
- Log line, comments, docs, and CLAUDE.md updated to say fleetd.
- Scripts renamed: redeploy-bridged.sh -> redeploy-fleetd.sh,
bridged-launchd-wrapper.sh -> fleetd-launchd-wrapper.sh.
- Deploy units renamed: dev.ltms.bridged.plist -> dev.ltms.fleetd.plist,
bridged.service -> fleetd.service; launchd Label -> dev.ltms.fleetd.
- Config default bridged.yaml -> fleetd.yaml; the legacy bridged.yaml is
still read as a fallback, and still gitignored.
- MCP: drop the deprecated bridge_* tool twins; only fleet_* remain. The
server name is "fleet". The mount name in the local .mcp.json becomes
"fleet" (gitignored, not in this commit).
- Env var defaults BRIDGED_API_TOKEN -> FLEETD_API_TOKEN, fixture
BRIDGED_WORKER_TOKEN -> FLEETD_WORKER_TOKEN.
Kept on purpose: the BRIDGED_MEMBER marker. Renaming it is a coupled change to
the credential-scrub security control (an operator secrets.sh may guard on it),
so it stays until that migration is done on its own.
Metrics were already fleet_* (CB-632); MetricNamesTest still guards that no
name says bridged_.
The canonical CLAUDE.md block and the wiki template stay byte-identical
(wiki working tree edited, committed to the wiki repo separately).
949 tests pass (mvn clean install). 4 fewer than before = the 4 removed
bridge_* alias tests.
This commit is contained in:
@@ -8,8 +8,8 @@
|
||||
# A daemon started that way boots fine and looks healthy; the failure is invisible until a worker
|
||||
# tries to open a PR (WORKER_GITEA_TOKEN empty) or a gateway profile gets a 401 (AI_GATEWAY_TOKEN
|
||||
# empty) — hours later, with nothing tying the two together (CB-591, CLAUDE.md "Redeploying the
|
||||
# daemon"). Bridged now also logs which required secret names resolved at startup (see
|
||||
# Bridged.reportRequiredSecrets), but that log line can only tell the truth if the tokens had a
|
||||
# daemon"). Fleetd now also logs which required secret names resolved at startup (see
|
||||
# Fleetd.reportRequiredSecrets), but that log line can only tell the truth if the tokens had a
|
||||
# chance to be sourced in the first place — which is this script's entire job.
|
||||
#
|
||||
# So: launchd execs THIS script instead of java directly. This script execs a login shell
|
||||
@@ -18,14 +18,14 @@
|
||||
# StandardOut/ErrorPath all still see the one process they expect.
|
||||
#
|
||||
# The plist passes the full command as THIS script's own arguments, e.g.:
|
||||
# ProgramArguments = [ .../bridged-launchd-wrapper.sh, /path/to/java, -jar, /path/to/bridged.jar,
|
||||
# bridged.yaml ]
|
||||
# ProgramArguments = [ .../fleetd-launchd-wrapper.sh, /path/to/java, -jar, /path/to/fleetd.jar,
|
||||
# fleetd.yaml ]
|
||||
# so the wrapper stays generic and the actual command lives in exactly one place (the plist), not
|
||||
# duplicated here.
|
||||
set -euo pipefail
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
echo "bridged-launchd-wrapper.sh: no command given — check the plist's ProgramArguments" >&2
|
||||
echo "fleetd-launchd-wrapper.sh: no command given — check the plist's ProgramArguments" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
@@ -127,7 +127,7 @@ How to read this:
|
||||
* GITEA_ACCESS_TOKEN is the control. CB-592 replaces it with a blocked sentinel, so its hash
|
||||
should DIFFER between the two readings. If it matches, CB-592 is not working and that is the
|
||||
most urgent thing on this page.
|
||||
* AI_GATEWAY_TOKEN matching is expected and correct, not a leak: bridged.yaml names it in
|
||||
* AI_GATEWAY_TOKEN matching is expected and correct, not a leak: fleetd.yaml names it in
|
||||
`tokenEnv:` for the local and gx profiles, so a member reaching the gateway is by design.
|
||||
* A name that is set here but is NOT in the list above will not appear at all. The list was
|
||||
recorded on 2026-08-16 and does not update itself. Anything added to secrets.sh since then is
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Rebuild and restart the bridged daemon.
|
||||
# Rebuild and restart the fleetd daemon.
|
||||
#
|
||||
# A merge is not a deployment: the running daemon holds the jar it was started with, so code merged
|
||||
# to main does nothing until this runs. See CLAUDE.md -> "Redeploying the daemon".
|
||||
@@ -12,7 +12,7 @@
|
||||
# WORKER_GITEA_TOKEN (workers cannot open a PR) and AI_GATEWAY_TOKEN (401 at llm.ltms.dev).
|
||||
# Both are read from the DAEMON's own environment at spawn time, so a value added to
|
||||
# secrets.sh after startup is absent. Nothing logs this here, so the script checks and says
|
||||
# so — and since CB-594, bridged's own startup log says so too, by env var name.
|
||||
# so — and since CB-594, fleetd's own startup log says so too, by env var name.
|
||||
# 3. An old daemon that never actually died looks identical from the outside, so the script waits
|
||||
# for the process to exit and for the port to free before it starts a new one.
|
||||
# 4. "It started" is not "it works": the script polls /healthz until it answers, and reports the
|
||||
@@ -20,7 +20,7 @@
|
||||
# mismatch.
|
||||
# 5. Restarting under live members drops their tickets, so the script refuses unless you confirm
|
||||
# the fleet is drained.
|
||||
# 6. CB-594 — the launchd agent (deploy/dev.ltms.bridged.plist), if installed and loaded, is a
|
||||
# 6. CB-594 — the launchd agent (deploy/dev.ltms.fleetd.plist), if installed and loaded, is a
|
||||
# SECOND supervisor: its KeepAlive.SuccessfulExit=false restarts the daemon on any nonzero
|
||||
# exit, and a bare SIGTERM makes this JVM exit 143 even with its shutdown hook running to
|
||||
# completion (measured — see the CB-594 report). A plain `kill` here would race launchd's own
|
||||
@@ -29,30 +29,30 @@
|
||||
# at any moment is whichever one you asked to act, never both.
|
||||
#
|
||||
# Usage:
|
||||
# scripts/redeploy-bridged.sh # build, confirm, restart, verify
|
||||
# scripts/redeploy-bridged.sh --yes # skip the drain confirmation (fleet already checked)
|
||||
# scripts/redeploy-bridged.sh --no-build # restart the jar already on disk
|
||||
# scripts/redeploy-bridged.sh --check # report state and exit; changes nothing
|
||||
# scripts/redeploy-fleetd.sh # build, confirm, restart, verify
|
||||
# scripts/redeploy-fleetd.sh --yes # skip the drain confirmation (fleet already checked)
|
||||
# scripts/redeploy-fleetd.sh --no-build # restart the jar already on disk
|
||||
# scripts/redeploy-fleetd.sh --check # report state and exit; changes nothing
|
||||
#
|
||||
# Exits non-zero on any failure. A failed build never stops the running daemon.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
BRIDGED="$REPO/bridged"
|
||||
JAR="$BRIDGED/target/bridged.jar"
|
||||
OUT="$BRIDGED/bridged.out"
|
||||
# Matches BOTH the absolute form and the relative `java -jar target/bridged.jar` a hand-start
|
||||
# produces from inside bridged/. Anchoring on the absolute path alone was a real bug: the daemon
|
||||
MODULE="$REPO/fleetd"
|
||||
JAR="$MODULE/target/fleetd.jar"
|
||||
OUT="$MODULE/fleetd.out"
|
||||
# Matches BOTH the absolute form and the relative `java -jar target/fleetd.jar` a hand-start
|
||||
# produces from inside fleetd/. Anchoring on the absolute path alone was a real bug: the daemon
|
||||
# restarted correctly and the script still reported "no process appeared", because it launched with
|
||||
# a relative path and then looked for an absolute one.
|
||||
PATTERN='target/bridged.jar'
|
||||
PATTERN='target/fleetd.jar'
|
||||
HEALTH='http://127.0.0.1:8765/healthz'
|
||||
STOP_WAIT=30 # seconds to wait for a clean exit before reporting failure
|
||||
HEALTH_WAIT=60 # seconds to wait for /healthz to answer after start
|
||||
|
||||
# CB-594: the launchd agent this script must not fight with (see trap 6 above).
|
||||
LAUNCHD_LABEL='dev.ltms.bridged'
|
||||
LAUNCHD_LABEL='dev.ltms.fleetd'
|
||||
LAUNCHD_PLIST="$HOME/Library/LaunchAgents/$LAUNCHD_LABEL.plist"
|
||||
|
||||
DO_BUILD=1; ASSUME_YES=0; CHECK_ONLY=0
|
||||
@@ -82,7 +82,7 @@ launchd_loaded() { launchctl list "$LAUNCHD_LABEL" >/dev/null 2>&1; }
|
||||
# CB-600: the script computes its own log path from where it sits on disk (REPO, above); the
|
||||
# plist hard-codes an absolute StandardOutPath. Nothing forced the two to agree — if this script
|
||||
# were ever run from a checkout other than the one the loaded plist names, launchd would start and
|
||||
# log the daemon correctly, while every check below (the fresh "bridged listening" line, the
|
||||
# log the daemon correctly, while every check below (the fresh "fleetd listening" line, the
|
||||
# ERROR-count scan) would read a different, empty or stale file and the script would report a
|
||||
# clean restart while the daemon crash-loops. Pure and side-effect-free besides `die`/`ok` — reads
|
||||
# the two paths, resolves them, compares — so it never touches launchd or the daemon and can be
|
||||
@@ -108,7 +108,7 @@ check_log_path_matches_plist() {
|
||||
but the loaded plist's StandardOutPath is
|
||||
$plist_out (resolved: ${resolved_plist_out:-<directory does not exist>})
|
||||
Under supervision the daemon writes to the PLIST's path, not necessarily this script's — every
|
||||
post-restart check below (the fresh 'bridged listening' line, the ERROR-count scan) would read
|
||||
post-restart check below (the fresh 'fleetd listening' line, the ERROR-count scan) would read
|
||||
the wrong file and could report a clean restart while the daemon crash-loops. Fix the mismatch
|
||||
(move this checkout to match the plist, or edit the plist's StandardOutPath/StandardErrorPath)
|
||||
before redeploying supervised."
|
||||
@@ -119,7 +119,7 @@ check_log_path_matches_plist() {
|
||||
# CB-600: sourceable for testing. When this file is SOURCED (not executed) it stops here — nothing
|
||||
# below runs — so a test harness can `source` it to call check_log_path_matches_plist (or the
|
||||
# other pure helpers above) against a throwaway plist fixture without ever reaching the mutating
|
||||
# flow (build/stop/start) or touching the real daemon or launchd. On a normal `./redeploy-bridged.sh`
|
||||
# flow (build/stop/start) or touching the real daemon or launchd. On a normal `./redeploy-fleetd.sh`
|
||||
# invocation `(return 0 2>/dev/null)` fails (return is illegal at top level of an executed script),
|
||||
# so this whole block is a no-op and every line below still runs exactly as before.
|
||||
if (return 0 2>/dev/null); then
|
||||
@@ -180,11 +180,11 @@ else
|
||||
fi
|
||||
|
||||
# Third variable, same trap (CB-635). broker.uriEnv names the env var holding the AMQP URI, so the
|
||||
# password stays out of bridged.yaml — but that moves the failure into the environment. If the
|
||||
# password stays out of fleetd.yaml — but that moves the failure into the environment. If the
|
||||
# variable is empty the daemon still starts: since #152 it warns and falls back to the in-memory
|
||||
# reply inbox, so nothing crashes and replies simply stop surviving a restart. Only this check says
|
||||
# so before the fact. Read the name out of the config so a renamed key cannot make the check lie.
|
||||
BROKER_URI_ENV=$(sed -n 's/^[[:space:]]*uriEnv:[[:space:]]*\([A-Za-z_][A-Za-z0-9_]*\).*/\1/p' "$BRIDGED/bridged.yaml" | head -1)
|
||||
BROKER_URI_ENV=$(sed -n 's/^[[:space:]]*uriEnv:[[:space:]]*\([A-Za-z_][A-Za-z0-9_]*\).*/\1/p' "$MODULE/fleetd.yaml" | head -1)
|
||||
if [ -z "$BROKER_URI_ENV" ]; then
|
||||
ok "no broker.uriEnv configured — reply inbox is in-memory by design"
|
||||
elif zsh -lc "[ -n \"\${$BROKER_URI_ENV:-}\" ]" 2>/dev/null; then
|
||||
@@ -205,9 +205,9 @@ fi
|
||||
|
||||
if [ "$DO_BUILD" = 1 ]; then
|
||||
say "build"
|
||||
BUILD_LOG="$(mktemp -t bridged-build)"
|
||||
BUILD_LOG="$(mktemp -t fleetd-build)"
|
||||
echo " log: $BUILD_LOG"
|
||||
if ! mvn -f "$BRIDGED/pom.xml" clean install > "$BUILD_LOG" 2>&1; then
|
||||
if ! mvn -f "$MODULE/pom.xml" clean install > "$BUILD_LOG" 2>&1; then
|
||||
grep -E 'ERROR|BUILD FAILURE|Tests run:.*Failures: [1-9]|Tests run:.*Errors: [1-9]' "$BUILD_LOG" \
|
||||
| head -20 || true
|
||||
die "build failed — the running daemon was NOT touched. Full log: $BUILD_LOG"
|
||||
@@ -279,10 +279,10 @@ fi
|
||||
|
||||
# ------------------------------------------------------------------ start
|
||||
# Unsupervised: login shell (zsh -l) is what puts the secrets on the daemon's environment, and cwd
|
||||
# must be bridged/ because the daemon resolves bridged.yaml, logs/ and target/ relative to it.
|
||||
# Supervised: launchd does both — deploy/dev.ltms.bridged.plist points ProgramArguments at
|
||||
# scripts/bridged-launchd-wrapper.sh (CB-594), which is what execs the login shell in launchd's
|
||||
# place, and WorkingDirectory in the plist already pins bridged/.
|
||||
# must be fleetd/ because the daemon resolves fleetd.yaml, logs/ and target/ relative to it.
|
||||
# Supervised: launchd does both — deploy/dev.ltms.fleetd.plist points ProgramArguments at
|
||||
# scripts/fleetd-launchd-wrapper.sh (CB-594), which is what execs the login shell in launchd's
|
||||
# place, and WorkingDirectory in the plist already pins fleetd/.
|
||||
|
||||
say "start"
|
||||
if [ "$SUPERVISED" = 1 ]; then
|
||||
@@ -306,7 +306,7 @@ if [ "$SUPERVISED" = 1 ]; then
|
||||
fi
|
||||
else
|
||||
# Absolute jar path so `ps` names which checkout is running.
|
||||
( cd "$BRIDGED" && zsh -lc "nohup java -jar '$JAR' >> bridged.out 2>&1 &" )
|
||||
( cd "$MODULE" && zsh -lc "nohup java -jar '$JAR' >> fleetd.out 2>&1 &" )
|
||||
fi
|
||||
|
||||
for _ in $(seq 10); do
|
||||
@@ -349,10 +349,10 @@ fi
|
||||
|
||||
# A fresh listening line, strictly after the restart mark. An old daemon that never died would
|
||||
# otherwise let an old line pass for a new one.
|
||||
if tail -n "+$((RESTART_MARK + 1))" "$OUT" 2>/dev/null | grep -q 'bridged listening'; then
|
||||
ok "$(tail -n "+$((RESTART_MARK + 1))" "$OUT" | grep 'bridged listening' | tail -1)"
|
||||
if tail -n "+$((RESTART_MARK + 1))" "$OUT" 2>/dev/null | grep -q 'fleetd listening'; then
|
||||
ok "$(tail -n "+$((RESTART_MARK + 1))" "$OUT" | grep 'fleetd listening' | tail -1)"
|
||||
else
|
||||
warn "no fresh 'bridged listening' line after the restart — check $OUT yourself"
|
||||
warn "no fresh 'fleetd listening' line after the restart — check $OUT yourself"
|
||||
fi
|
||||
|
||||
# Config keys the daemon accepted or deferred at boot. This is usually WHY you restarted.
|
||||
+17
-17
@@ -6,7 +6,7 @@
|
||||
# name. Renaming it by hand misses surfaces, because the absolute path is written down in more
|
||||
# places than the directory itself:
|
||||
#
|
||||
# 1. The launchd agent (~/Library/LaunchAgents/dev.ltms.bridged.plist) hard-codes absolute paths
|
||||
# 1. The launchd agent (~/Library/LaunchAgents/dev.ltms.fleetd.plist) hard-codes absolute paths
|
||||
# to the wrapper script and the jar. Move the checkout without fixing it and the daemon never
|
||||
# starts again after a reboot.
|
||||
# 2. Every git worktree carries a `.git` FILE with an ABSOLUTE pointer into the main checkout
|
||||
@@ -15,13 +15,13 @@
|
||||
# 3. Claude Code keys saved sessions and memory by a slug derived from the working directory,
|
||||
# with `/` and `.` replaced by `-`. Move the checkout and it computes a NEW slug, finds
|
||||
# nothing, and silently starts empty — every saved session is still on disk, just unreachable.
|
||||
# 4. bridged/bridged.yaml is gitignored, so it survives only in the live checkout and holds
|
||||
# 4. fleetd/fleetd.yaml is gitignored, so it survives only in the live checkout and holds
|
||||
# `fleet.leaders.*.cwd` and `configDir` — both absolute, both old.
|
||||
# 5. A running daemon holds the old paths open. Moving underneath it corrupts its state, so the
|
||||
# daemon stops FIRST, and the script waits for the process to actually exit rather than
|
||||
# assuming (same trap as redeploy-bridged.sh).
|
||||
# assuming (same trap as redeploy-fleetd.sh).
|
||||
# 6. An old daemon that never died looks identical from the outside, so verification polls
|
||||
# /healthz AND demands a FRESH "bridged listening" log line dated after the restart, anchored
|
||||
# /healthz AND demands a FRESH "fleetd listening" log line dated after the restart, anchored
|
||||
# to a line-count marker taken before anything moved.
|
||||
#
|
||||
# Three more surfaces hold the old path but this script REPORTS them and never rewrites them.
|
||||
@@ -54,9 +54,9 @@ set -euo pipefail
|
||||
|
||||
OLD_PATH="/Users/dai.ha/LTMS/claude-bridge"
|
||||
NEW_PATH="/Users/dai.ha/LTMS/fleetd"
|
||||
BRIDGED_SUB="bridged" # daemon lives at <checkout>/bridged/
|
||||
JAR_NAME="bridged.jar"
|
||||
OUT_NAME="bridged.out"
|
||||
MODULE_SUB="fleetd" # daemon lives at <checkout>/fleetd/
|
||||
JAR_NAME="fleetd.jar"
|
||||
OUT_NAME="fleetd.out"
|
||||
|
||||
CC_INSTANCE="ltms"
|
||||
CC_PROJECTS="$HOME/.ccs/instances/$CC_INSTANCE/projects"
|
||||
@@ -67,7 +67,7 @@ HERDR_SESSION="$HOME/.config/herdr/session.json"
|
||||
JETBRAINS_ROOT="$HOME/Library/Application Support/JetBrains"
|
||||
JETBRAINS_FILES=(recentProjects.xml trusted-paths.xml)
|
||||
|
||||
LAUNCHD_LABEL='dev.ltms.bridged'
|
||||
LAUNCHD_LABEL='dev.ltms.fleetd'
|
||||
LAUNCHD_PLIST="$HOME/Library/LaunchAgents/$LAUNCHD_LABEL.plist"
|
||||
|
||||
HEALTH='http://127.0.0.1:8765/healthz'
|
||||
@@ -99,8 +99,8 @@ launchd_loaded() { launchctl list "$LAUNCHD_LABEL" >/dev/null 2>&1; }
|
||||
# endpoint path ever changes again.
|
||||
cc_slug() { printf '%s' "$1" | tr '/.' '-'; }
|
||||
|
||||
OLD_OUT="$OLD_PATH/$BRIDGED_SUB/$OUT_NAME"
|
||||
NEW_OUT="$NEW_PATH/$BRIDGED_SUB/$OUT_NAME"
|
||||
OLD_OUT="$OLD_PATH/$MODULE_SUB/$OUT_NAME"
|
||||
NEW_OUT="$NEW_PATH/$MODULE_SUB/$OUT_NAME"
|
||||
|
||||
# Files under a directory that contain the literal old path, with a hit count each. Read-only.
|
||||
# Skips .git internals, build output and node_modules: they are generated, huge, and repaired by
|
||||
@@ -391,7 +391,7 @@ else
|
||||
fi
|
||||
|
||||
# ------------------------------------- rewrite gitignored config, if it survived
|
||||
YAML="$NEW_PATH/$BRIDGED_SUB/bridged.yaml"
|
||||
YAML="$NEW_PATH/$MODULE_SUB/fleetd.yaml"
|
||||
if [ -f "$YAML" ]; then
|
||||
if grep -qF "$OLD_PATH" "$YAML"; then
|
||||
cp "$YAML" "$YAML.pre-rename.bak"
|
||||
@@ -425,9 +425,9 @@ say "start"
|
||||
if [ "$SUPERVISED" = 1 ]; then
|
||||
launchctl load -w "$LAUNCHD_PLIST" || die "launchctl load failed — recover with: launchctl load -w \"$LAUNCHD_PLIST\""
|
||||
else
|
||||
JAR="$NEW_PATH/$BRIDGED_SUB/target/$JAR_NAME"
|
||||
JAR="$NEW_PATH/$MODULE_SUB/target/$JAR_NAME"
|
||||
[ -f "$JAR" ] || die "no jar at $JAR — build in the new location, then rerun"
|
||||
( cd "$NEW_PATH/$BRIDGED_SUB" && zsh -lc "nohup java -jar '$JAR' >> $OUT_NAME 2>&1 &" )
|
||||
( cd "$NEW_PATH/$MODULE_SUB" && zsh -lc "nohup java -jar '$JAR' >> $OUT_NAME 2>&1 &" )
|
||||
fi
|
||||
|
||||
for _ in $(seq 10); do
|
||||
@@ -451,10 +451,10 @@ for _ in $(seq "$HEALTH_WAIT"); do
|
||||
done
|
||||
[ "$HEALTH_OK" = 1 ] || die "/healthz never answered within ${HEALTH_WAIT}s (last code: ${CODE:-000})"
|
||||
|
||||
if tail -n "+$((RESTART_MARK + 1))" "$NEW_OUT" 2>/dev/null | grep -q 'bridged listening'; then
|
||||
ok "$(tail -n "+$((RESTART_MARK + 1))" "$NEW_OUT" | grep 'bridged listening' | tail -1)"
|
||||
if tail -n "+$((RESTART_MARK + 1))" "$NEW_OUT" 2>/dev/null | grep -q 'fleetd listening'; then
|
||||
ok "$(tail -n "+$((RESTART_MARK + 1))" "$NEW_OUT" | grep 'fleetd listening' | tail -1)"
|
||||
else
|
||||
warn "no fresh 'bridged listening' line after the restart — check $NEW_OUT yourself"
|
||||
warn "no fresh 'fleetd listening' line after the restart — check $NEW_OUT yourself"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------- summary
|
||||
@@ -462,7 +462,7 @@ say "changed"
|
||||
echo " checkout: $OLD_PATH -> $NEW_PATH"
|
||||
echo " claude code state: $CC_PROJECTS/$OLD_SLUG -> $CC_PROJECTS/$NEW_SLUG (when present)"
|
||||
echo " worktree .git ptr: rewritten where they named the old path"
|
||||
[ -f "$YAML" ] && echo " bridged.yaml: rewritten (backup kept)"
|
||||
[ -f "$YAML" ] && echo " fleetd.yaml: rewritten (backup kept)"
|
||||
launchd_installed && echo " launchd plist: rewritten (backup kept)"
|
||||
|
||||
say "still referencing the old path (left alone on purpose)"
|
||||
|
||||
Reference in New Issue
Block a user