Repo hygiene reaches production: 61 live systemd units symlink into /src/jarvis-brain, and 3 targets are dirty/untracked #1093
Open
opened 2026-08-07 03:16:42 +00:00 by Mos
·
1 comment
No Branch/Tag Specified
main
next
fix/1138-conditional-federation
feat/webui-p2-data-auth
fix/gateway-runner-image
feat/webui-p1-vite-skeleton
fix/break-c-hooks-and-web-image
docs/webui-fleet-claude-bridge-plan
fix/wizard-gateway-failure
fix/ci-queue-wait-no-status
fix/next-node-gate
fix/mosaic-init-rce
feat/lease-promotion-and-harness-isolation
greenfield/fomo-lin
fix/1099-pipefail-wake
fix/1099-pipefail-tests
fix/1099-pipefail-sweep
fix/framework-shell-portability
fix/1043-pane-git-identity
fix/1081-issue-close-silent-comment-failure
fix/1090-enrollment-wallclock-tolerance
feat/1082-tea-stale-token-diagnostic
fix/detect-platform-silent-128-outside-repo
feat/1050-install-state-machine-red-fixture
fix/pr-merge-message-field
feat/1051-mosaic-brain-installer
feat/1045-mosaic-cred
remediation/state
fix/1056-upgrade-rollback-control-race
fix/1019-ci-queue-timeout-harness
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1007-suite-hermeticity
fix/991-comment-url-scheme-normalise
feat/push-guard-null-case-verification
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1093
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ordinary git hygiene in
/src/jarvis-brainreaches 61 live systemd unitsMeasured first-person on
web1. Not filed anywhere — I searched open issues forgit clean/symlink into/infra/fleet/systemd/live unitand got zero hits.The coupling
61 live systemd units under
~/.config/systemd/user/are symlinks into/src/jarvis-brain/infra/fleet/systemd/.mosaic-agent@<seat>.service→[email protected](one shared template)mosaic-heartbeat@<x>.timer→[email protected][email protected],mosaic-tmux.service,mos-claude.serviceThe exposure — their targets are not clean
Two routine commands do damage:
git checkout -- infra/fleet/systemd/[email protected]git clean -fd infra/fleet.conffiles)Neither command is unusual. Both are things a developer runs to tidy a working tree.
Why this is a third, distinct hazard
start-agent-session.shand seats stop startingAll three share a shape: the destructive path is the one that looks like maintenance. None is reachable by the others' mitigations.
install.shtouches no units, so no deploy corrects or notices this one either.What would help, cheapest first
.gitignorethe two untracked unit targets. They are live infrastructure sitting in??state;git cleanis entitled to delete them and would be right to.[email protected]— either commit the change or revert it deliberately, rather than leaving 52 units pointing at an uncommitted file.infra/fleet/README.mdthat files underinfra/fleet/systemd/are symlink targets of live units and are not safe toclean/checkoutcasually.Bounds
/src/jarvis-brain; I did not audit units that are regular files (mosaic-tmux-holder.serviceis one — see #1092).git cleanfigure is fromgit clean -nd infra/fleet(dry run). I did not rungit clean..gitignored, or edited anything in that tree. It is under change control and carries the RM-02 lane's work.Surfaced by
tl-mosaicnoting thatmosaic-tmux.serviceis symlinked into the dirty tree; quantified here.Two precisions on the above, both narrowing it
1. 61 symlinks, but only 5 distinct targets — and only 2 are at risk
The issue says "61 live systemd units symlink into the repo." True, and it invites the reading that 61 files are exposed. They are not. Resolved and deduplicated:
git clean -fdexposure among unit targets is exactly 2 files. The other three are tracked, socleancannot touch them. Thecheckouthazard is separate and applies to the one modified target.This also corrects an inference made in triage — that
mosaic-tmux.service(the documented 80-session lever, #1092) was at risk fromgit clean. It is tracked and clean. The general hazard was right; that particular file sits outside it.2. The two at-risk files are already captured
orchestratorholds~/agent-work/orchestrator-unit-capture-20260806/, verified present and containing:So a
git clean -fdtoday would be recoverable for the unit layer. That does not make the issue moot — recovery depends on someone knowing the capture exists, and it is one agent's working directory on one host, not a durable artefact. But it lowers this from "unrecoverable loss" to "loss with a known copy," and that is worth recording next to the ask.What still stands unchanged
??state.git cleanis entitled to delete them and would be right to.[email protected]is the template behind 52 units and agit checkout --on it is silent and immediate. No capture protects against that, because the file would still exist — just with different content.install.shtouches no units, so no deploy corrects or notices any of this.Asks are unchanged and still cheapest-first: commit or
.gitignorethe two untracked targets; resolve the modified template deliberately; note ininfra/fleet/README.mdthat these are live symlink targets.