# /etc/systemd/system/shire-academy-ui.service [Unit] Description=SHiRE Academy Local UI After=network-online.target Wants=network-online.target [Service] Type=simple User=ray Group=ray WorkingDirectory=/home/shire3d/ARMOR/apps/shire-academy ExecStart=/usr/bin/python3 /home/shire3d/ARMOR/apps/shire-academy/server/shire_academy_server.py --root /home/shire3d/ARMOR/apps/shire-academy/dist --host 127.0.0.1 --port 8790 Restart=on-failure RestartSec=3 Environment=PYTHONUNBUFFERED=1 NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=read-only ReadOnlyPaths=/home/shire3d/ARMOR/apps/shire-academy RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 LockPersonality=true MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target # /etc/systemd/system/shire-academy-ui.service.d/30-stage3a-canary-write-boundary.conf [Service] # Stage 3A.2: preserve ProtectSystem=strict; carve out only the canary status directory # and the network-backed SHiRE Academy evidence tree. No backup-root or practice-state writes. ReadWritePaths=/home/shire3d/ARMOR/apps/shire-academy/runtime ReadWritePaths=/mnt/shirevault-network/SHiREVault/SHiREAcademy