Compare commits
base: mosaicstack:main
mosaicstack:main
mosaicstack:release/mosaic-cli-0.0.36
mosaicstack:feat/fleet-heartbeat-sidecar
mosaicstack:feat/fleet-phase3-enablement
mosaicstack:feat/p4-upgrade-safe-migration
mosaicstack:release/mosaic-cli-0.0.35
mosaicstack:feat/fleet-launch-path
mosaicstack:feat/fleet-observability
mosaicstack:feat/p3-1-governance-gate-hardening
mosaicstack:feat/p3-constitution-extraction
mosaicstack:feat/p1p2-sanitization-gate
mosaicstack:feat/framework-constitution-alpha
mosaicstack:feat/p0-license-leak-sanitize
mosaicstack:docs/framework-agency-patterns
mosaicstack:fix/fleet-install-script-perms
mosaicstack:fix/fleet-preserve-agent-env
mosaicstack:release/mosaic-cli-0.0.32
mosaicstack:fix/fleet-release-hardening
mosaicstack:feat/fleet-cli-local-canary
mosaicstack:plan/tmux-fleet-durable-install
mosaicstack:fix/pi-skill-args-all-discover
mosaicstack:feat/pi-mosaic-tools-skill
mosaicstack:feat/tools-cheatsheet-salience
mosaicstack:fix/tooling-eval-injection-jq-json
mosaicstack:feat/agent-send-class
mosaicstack:feat/us007-agent-registration
mosaicstack:docs/merge-authority-rule
mosaicstack:feat/mosaic-as-provisioning
mosaicstack:fix/pr-ci-wait-stdin-collision
mosaicstack:fix/t_301e4e3b-pr-merge-gitea-empty-uid
mosaicstack:ci/publish-appservice-image
mosaicstack:feat/mosaic-as-daemon
mosaicstack:feat/mosaic-as-m4a
mosaicstack:fix/pi-token-lean-skills
mosaicstack:fix/git-wrapper-rollup-20260526
mosaicstack:fix/git-wrapper-repo-detection
mosaicstack:fix/woodpecker-wrapper-legacy-mosaic
mosaicstack:fix/t-a292e96f-gitea-pr-metadata
mosaicstack:fix/gitea-pr-metadata-login-t-a292e96f
mosaicstack:fix/t_a292e96f-pr-metadata-gitea
mosaicstack:fix/t_3a368a52-gitea-usc-login
mosaicstack:fix/bootstrap-hotfix
mosaicstack:fix/populate-known-packages-list
mosaicstack:fix/idempotent-init
mosaicstack:mosaic-v0.0.31
mosaicstack:fed-v0.2.0-m2
mosaicstack:fed-v0.1.0-m1
mosaicstack:mosaic-v0.0.29
mosaicstack:mosaic-v0.0.28
mosaicstack:mosaic-v0.0.27
mosaicstack:mosaic-v0.0.26
mosaicstack:mosaic-v0.0.25
mosaicstack:mosaic-v0.0.24
mosaicstack:v0.2.0
mosaicstack:v0.1.0
mosaicstack:v0.0.8
mosaicstack:v0.0.7
mosaicstack:v0.0.6
mosaicstack:v0.0.5
mosaicstack:v0.0.4
..
compare: mosaicstack:feat/fleet-heartbeat-sidecar
mosaicstack:release/mosaic-cli-0.0.36
mosaicstack:main
mosaicstack:feat/fleet-heartbeat-sidecar
mosaicstack:feat/fleet-phase3-enablement
mosaicstack:feat/p4-upgrade-safe-migration
mosaicstack:release/mosaic-cli-0.0.35
mosaicstack:feat/fleet-launch-path
mosaicstack:feat/fleet-observability
mosaicstack:feat/p3-1-governance-gate-hardening
mosaicstack:feat/p3-constitution-extraction
mosaicstack:feat/p1p2-sanitization-gate
mosaicstack:feat/framework-constitution-alpha
mosaicstack:feat/p0-license-leak-sanitize
mosaicstack:docs/framework-agency-patterns
mosaicstack:fix/fleet-install-script-perms
mosaicstack:fix/fleet-preserve-agent-env
mosaicstack:release/mosaic-cli-0.0.32
mosaicstack:fix/fleet-release-hardening
mosaicstack:feat/fleet-cli-local-canary
mosaicstack:plan/tmux-fleet-durable-install
mosaicstack:fix/pi-skill-args-all-discover
mosaicstack:feat/pi-mosaic-tools-skill
mosaicstack:feat/tools-cheatsheet-salience
mosaicstack:fix/tooling-eval-injection-jq-json
mosaicstack:feat/agent-send-class
mosaicstack:feat/us007-agent-registration
mosaicstack:docs/merge-authority-rule
mosaicstack:feat/mosaic-as-provisioning
mosaicstack:fix/pr-ci-wait-stdin-collision
mosaicstack:fix/t_301e4e3b-pr-merge-gitea-empty-uid
mosaicstack:ci/publish-appservice-image
mosaicstack:feat/mosaic-as-daemon
mosaicstack:feat/mosaic-as-m4a
mosaicstack:fix/pi-token-lean-skills
mosaicstack:fix/git-wrapper-rollup-20260526
mosaicstack:fix/git-wrapper-repo-detection
mosaicstack:fix/woodpecker-wrapper-legacy-mosaic
mosaicstack:fix/t-a292e96f-gitea-pr-metadata
mosaicstack:fix/gitea-pr-metadata-login-t-a292e96f
mosaicstack:fix/t_a292e96f-pr-metadata-gitea
mosaicstack:fix/t_3a368a52-gitea-usc-login
mosaicstack:fix/bootstrap-hotfix
mosaicstack:fix/populate-known-packages-list
mosaicstack:fix/idempotent-init
mosaicstack:mosaic-v0.0.31
mosaicstack:fed-v0.2.0-m2
mosaicstack:fed-v0.1.0-m1
mosaicstack:mosaic-v0.0.29
mosaicstack:mosaic-v0.0.28
mosaicstack:mosaic-v0.0.27
mosaicstack:mosaic-v0.0.26
mosaicstack:mosaic-v0.0.25
mosaicstack:mosaic-v0.0.24
mosaicstack:v0.2.0
mosaicstack:v0.1.0
mosaicstack:v0.0.8
mosaicstack:v0.0.7
mosaicstack:v0.0.6
mosaicstack:v0.0.5
mosaicstack:v0.0.4
2 Commits
main
...
feat/fleet
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6dbd3d691c |
test(fleet): hermetic heartbeat tests — temp run-dir + no leaked sidecars
Tests 3, 4, 5 previously returned synthetic pane PIDs (99999/99998/99997) from their fake list-panes shims but did not set MOSAIC_HEARTBEAT_RUN_DIR, causing the launcher to fall back to the real ~/.config/mosaic/fleet/run and potentially spawn a background sidecar against an arbitrary host PID. Fix: - list-panes in tests 3/4/5 now returns empty string → PANE_PID stays unset → no sidecar is spawned for tests where heartbeat is not under test. - MOSAIC_HEARTBEAT_RUN_DIR is exported to a per-test mktemp dir in each fake-tmux test (3, 4, 5) as defence-in-depth so even if the sidecar code path changes, it can never write to the real fleet run dir. - New temp dirs are registered in CLEANUP_DIRS so they are removed by the existing EXIT trap. - Tests 6 and 7 (the dedicated heartbeat tests) are unchanged: test 6 uses a real tmux pane PID + its own HB_RUN_DIR, test 7 intercepts via a fake setsid shim that captures args and exits immediately. - All 7 tests pass; verify-sanitized.sh passes; no stray sidecar processes or unexpected .hb files are written to ~/.config/mosaic/fleet/run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMoEx7hfdFGjUiCHuN1RRi |
||
|
|
b50a062021 |
feat(fleet): launcher heartbeat sidecar — HB for all runtimes (pi/claude/codex)
Replace the terminal `exec tmux` with a plain `tmux new-session -d` so the
launcher continues running after creating the pane. The script then resolves
the pane PID via `tmux list-panes -F '#{pane_pid}'` (with a brief retry loop)
and spawns a detached, runtime-agnostic heartbeat sidecar via `setsid bash -c
... &` + `disown`. The sidecar loops while `kill -0 <pane_pid>` succeeds,
writing ~/.config/mosaic/fleet/run/<AGENT>.hb atomically (tmp + mv) every
MOSAIC_HEARTBEAT_INTERVAL seconds (default 15), then exits naturally when the
runtime process dies — making `mosaic fleet ps` show stale then dead.
HB_RUN_DIR and interval are configurable via env; sidecar startup is
best-effort (failures warn but do not abort the launch). Two new shell tests
cover pane-PID resolution (test 6, real tmux) and sidecar invocation
correctness (test 7, fake-tmux + fake-setsid shims).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMoEx7hfdFGjUiCHuN1RRi
|