]> /usr/local/emhttp/plugins/&slug;/images/&slug;.png ### 1.0.0 FIRST STABLE RELEASE of CannonadeCommand - every pre-release folded in. Start-plan orchestration: - Dependencies with PARALLEL start stages; a stage is released only when the previous one is READY, not merely running. - Readiness probes per container: running (grace), tcp, http, log match, exec. - Failure policies per node (abort dependents / continue / degrade). - Deps on containers OUTSIDE the plan resolve implicitly at stage build - nothing is persisted, disabling a referenced container sticks. - Watchdog (crash/unhealthy auto-restart, hourly rate cap, pause-grace) and per-weekday time schedules; one-click apply; per-container start delay. Live resource limits: - CPU limit, topology-aware CPU pinning (Intel P/E split), RAM limit via docker update, no restart - CI-proven against a real dockerd. - Editors read applied values BACK and show a verified line or the exact refusal; diagnostics card with recent limit operations; template dual-write. Bandwidth (kernel-safe): - Upload = tbf shaper, download = pure netfilter policing in the container's own netns - NEVER a tc ingress qdisc (a unit test enforces the download path cannot emit tc at all). Works for bridge, ipvlan and macvlan alike. - Legacy-iptables quirks compensated (byte rates applied as bits: x8; minimum burst; explicit byte units); CI measures REAL throughput through the rule. - Immediate apply on save; the editor shows the LIVE rule + the monitor's last attempt - a silent no-op is impossible. Interface auto-detected from the container's default route; host-network containers are skipped. Docker tab: - Actions column (WebUI, log, edit, restart, pause, stop/start + "..." link expander), harvested from Unraid's own page data. - Badges: state with transition feedback, network, copyable IPs, ports, volumes with hover marquee, update status; live CPU/RAM/BW values with filled accent gears; card view with the same controls; instant paint from a local state cache. Plugins tab: - Unraid's Plugins tab gets the same treatment (toggleable in the settings): author/version badges, a green/amber status pill, tinted icons, pill buttons for check/update/remove - accent or rainbow, in place. Theming and settings: - One accent colour everywhere or rainbow mode (editable palette, rotation); automatic black/white text by luminance. - Cross-origin settings sync via the engine config (per-key merge) - settings survive cleared browser data and apply on IP, hostname and domain alike. - Settings page: logo hero with claim, three sections (Docker tab / Plugin tab / VM tab) with style-takeover toggles, embedded colour picker, notifications, diagnostics. Engine and safety: - Go daemon on a local unix socket; same-origin PHP proxy with a strict allowlist; csrf token in the form body; only read + lifecycle verbs. - Plan/config persist on the flash; the installer migrates configs from the old plugin name automatically. - CI: build, lint, and three hardware-truth proofs on every push. # one-time migration from the old plugin name (pre-1.1.0: cannonadecommander) if [ -d /boot/config/plugins/cannonadecommander ] && [ ! -d /boot/config/plugins/cannonadecommand ]; then cp -a /boot/config/plugins/cannonadecommander /boot/config/plugins/cannonadecommand rm -f /boot/config/plugins/cannonadecommand/*.txz /boot/config/plugins/cannonadecommand/*.plg 2>/dev/null fi /usr/local/emhttp/plugins/cannonadecommander/scripts/rc.cannonadecommander stop 2>/dev/null &emhttp;/scripts/rc.&slug; stop 2>/dev/null rm -rf &emhttp; rm -f &plgPath;/*.txz &pkgURL;/&txz; a0deafd9d0a4467d3c1bb4881535a885fc412b98f9518da1b566e221f011471a chmod +x &emhttp;/bin/&slug; &emhttp;/scripts/rc.&slug; &emhttp;/event/* 2>/dev/null &emhttp;/scripts/rc.&slug; restart echo "" &emhttp;/bin/&slug; banner 2>/dev/null echo "" echo "CannonadeCommand ist ready!" # the goodbye ceremony runs FIRST, while the binary still exists &emhttp;/bin/&slug; banner 2>/dev/null echo "" echo "Bye!" echo "" &emhttp;/scripts/rc.&slug; stop 2>/dev/null for p in $(pgrep -f '&emhttp;/bin/&slug;' 2>/dev/null); do kill -9 "$p" 2>/dev/null; done pkg=$(ls /var/log/packages/ 2>/dev/null | grep -E "^&slug;(-[^-]+-[^-]+-[^-]+)?$" | head -n1) if [ -n "$pkg" ]; then removepkg "$pkg" 2>/dev/null; fi rm -rf &emhttp; rm -f &plgPath;/*.txz &plgPath;/*.txz.md5 /var/run/&slug;.pid /var/run/&slug;.sock exit 0