ProxMenux modifies the host: it rewrites configuration files, installs packages, enables services. Until now nobody could say afterwards what had changed, and showing the script does not answer that question — a four-hundred-line function may alter two values, and the reader has no way to know which two. This adds the two halves of an answer.
The change journal records what ProxMenux does as it does it. Eleven bash primitives capture the previous state, apply the change and record it in the same step, writing to a spool that the Monitor reads back. One hundred and thirteen functions across twenty-five scripts are instrumented, covering post-install, shared storage, security tooling, container conversions, disk operations and the PVE 8 to 9 upgrade path. The page shows the difference — rotate 7 becoming rotate 14 — and never the script. Restore and backup scripts are deliberately left out: a restore puts the host back to a state some other script already recorded.
The Audit and reports page answers the other half: what state is this host in, regardless of who put it there. Forty-three checks across seven areas read the host and classify each result as critical, warning, observation, conformant, unverified or not applicable, with the evidence they read attached to each one. A declared policy lets the reader say what this particular host is expected to do — which guests must have a backup, which storages are essential — so the report judges the host against its own intent rather than a generic template. An inventory records the hardware, network and guest topology behind those readings, a comparison shows what moved between two runs, and six report profiles produce a printable document scoped to what the reader needs. Everything is available in the eight supported languages.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- safely migrate historical Bashrc and Log2RAM installations
- align post-install function versions across both flows
- bundle gevent runtimes for CPython 3.11 and 3.13
- select the correct Python ABI at runtime
- validate both supported Proxmox VE Python versions in AppImage workflows
- fix#327, #328 and #331
Resolves the conflict on AppImage/config/verified_ai_models.json in favour
of develop's curated version with _exclude — main had the bot's first
naive refresh which surfaced allam-2-7b as the Groq recommended model.
develop also absorbs the bot-maintained files main had accumulated since
1.2.5 (helpers_cache, app_tracking_hints, project-growth, FUNDING).
- rewrite the 15 post-install pages and the 3 hardware GPU pages so they reflect the current scripts (reversibility, tracked-tool counts, kernel parameters, per-tool commands, Alpine LXC propagation flow)
- migrate the legacy step-badge helper on post-install/optional and create-vm/synology to the canonical pill component, with the stepLabel key added in each locale
- fix rich-text i18n calls missing helpers across network, automated, optional, security, customization and the post-install landing pages, and escape the `<iface>` placeholder in automated so intl no longer parses it as a tag
- remove the mouse-follow blue overlay from the docs landing layout
- reposition the App-tab Edit button and stack the Search and Register controls vertically on mobile
- move the Bulk update Configure/Edit control into the section header so it behaves the same on desktop and mobile
- show a spinner during the final autoremove/autoclean pass of update-pve-safe so the cleanup step reads as active instead of silent
- restyle the shell spinner and msg_info in a distinctive purple and drop the unused msg_lang duplicate
- add a web-docs i18n build script and its CI workflow, plus tests for the pushover notification channel
- Generate and ship a verified 389-app tracking catalog with 23 runtime overrides, fallback detectors, ports, logos, and Docker Hub tag previews.
- Support modern Proxmox VE Helper-Scripts markers, historical installations, and official or manual app deployments.
- Rework the LXC App and Updates tabs with cached suggestions, explicit discovery, version tracking, web links, custom updaters, and complete i18n.
- Add independent OS, app, Docker Engine, Docker image, bulk, and scheduled update targets.
- Add digest-based Docker inventory, Compose dependency grouping, safe standalone-container recreation with rollback, and package-scoped Docker Engine updates.
- Refresh per-LXC caches after lifecycle and update tasks, then emit idempotent notifications based on the verified final state.
- Harden Coral USB recovery by removing orphaned gasket DKMS registrations and validating that dpkg is healthy before reporting success.
Two related changes to the translation infrastructure:
1. Add Swedish (sv) as a supported locale in both the CLI and Monitor
translation systems. Inspired by PR #121, which arrived before the
current auto-generated cache layout existed.
2. Include Slovak (sk) in the default auto-fill target set. Guardrail #1
in build_i18n_messages.py never overwrites a key whose target value
differs from EN, so Vaso73's curated Slovak strings stay intact —
auto-translation only fills keys that are still on the English
fallback. Trade-off accepted: sk users see decent machine translation
for new keys immediately instead of raw English while human curation
catches up, and Vaso73 keeps full ownership of the wording via
follow-up PRs.
Changes:
- AppImage/lib/i18n/languages.ts: add "sv" to LanguageCode + register
in SUPPORTED_LANGUAGES.
- AppImage/messages/sv/common.json: stub — will be filled by the i18n
workflow on the local bootstrap.
- .github/scripts/build_translation_cache.py: add "sv" to
DEFAULT_LANGUAGES.
- .github/scripts/build_i18n_messages.py: add "sk" and "sv" to
DEFAULT_LANGUAGES; update comments to explain the sk decision.
- .github/workflows/build-i18n-messages.yml: default input includes
sk + sv; comments updated to match.
Adds .github/scripts/build_i18n_messages.py and its companion workflow
build-i18n-messages.yml, so keys added to AppImage/messages/en/common.json
propagate automatically to es/de/fr/it/pt on push.
Guardrails:
- Never overwrites a key whose target value differs from EN, protecting
human-curated locales (Vaso73's sk is excluded from the default set
entirely).
- {placeholder} tokens are extracted to opaque tokens before the
translator sees the text and restored afterwards, so interpolation
keys stay intact regardless of provider behavior.
Mirrors the pattern of build-translation-cache.yml (CLI translations)
and reuses its providers (googletrans / google-web / appimage), so the
CI environment stays uniform between the two workflows.
First run will bootstrap ~3800 keys × 5 locales; subsequent runs only
process new keys added to en/common.json.
Updates tab
- Unified OS + Application update card with per-section Apply buttons
and a combined "Apply OS + <app>" footer button
- Helper-scripts install detection: uses helper_slug from managed_installs
cache (hostname fuzzy-match against helpers_cache) so the button
surfaces even when /usr/bin/update was removed
- Runs the community-scripts helper INSIDE the CT via pct exec so
build.func picks the silent update path (PHS_SILENT=1) instead of the
install menu — works with and without /usr/bin/update
- HELPER_SLUG env passthrough from backend to apply_updates.sh: falls
back to constructing the ct/<slug>.sh URL when the CT no longer
carries the marker file
- Post-apply state refresh via managed_installs.check_for_updates(force)
in the /applied hook so the badge updates without a manual reload
Options card
- Rewrote as view / edit mode split with a single Edit button
- Unified apply defaults (snapshot + storage + restart) shared by
manual and scheduled runs
- Scheduled updates (M5): cron picker + preset dropdown + What-to-update
target + Delete schedule button, wired to a background scheduler thread
that fires apply_updates.sh headless with the schedule's env vars
- External host cron detection with variant + scope reporting
(tteck-legacy / community-scripts / custom, OS-only), shown as an
informational chip only in edit mode
App tab editor
- Multi-app registration with per-app upstream tracking method
(github / http_json / docker_hub)
- Card-contrast pattern in edit mode (bg-card + bg-background inputs)
- Auto-heal for missing installed_version via alt_detectors +
file_fallbacks
Curated tracking hints (M6)
- Add http_json upstream for Plex (plex.tv API)
- Add binary+github hints for Emby (MediaBrowser/Emby.Releases) and
PhotoPrism (photoprism/photoprism)
- Extend CI merge whitelist with upstream_type / upstream_url /
upstream_json_path / docker_image
Tab reorder
- LXC modal tabs: Status | App | Updates | Mounts | Backups | Firewall
apply_updates.sh
- New helper execution path: parse ct/<slug>.sh URL, run inside CT
with PHS_SILENT=1, respecting HELPER_SLUG fallback when
/usr/bin/update is missing