mirror of
https://github.com/Joulenap/joulenap.git
synced 2026-08-11 13:21:43 +02:00
Step details were stored as English sentences, so the run timeline stayed English whatever the UI language was. `run_steps` now carries a `detail_key`/`detail_params` pair alongside the text, the same seam `runs.error_key` already had: the English rendering stays on the row for pre-1.0 rows and for foreign strings (a task UPID, another product's error text), while the API rebuilds Joulenap's own copy in the user's language on read. `set_detail()` writes both halves in one call so they cannot drift. Fixes carried in the same files: - a run whose PBS never came up recorded a history row and nothing else. The unreachable handler re-raised, unwinding past both the lease release and the notification, so the one failure this product exists to have an opinion about sent no Telegram, no ntfy, no email — a regression against 0.9, which did notify. On a sync route it also left an already-woken box burning power with no POWEROFF step. It now falls through the same release-and-notify path a completed run uses. - the notification's duration breakdown dropped the backup phase on every real backup route: the lookup matched bare step names, but a route labels its backup step per source (`backup:pve-alpha`). Matched with `_step_is` now, and summed per phase. - a PBS sync remote outlived the route that created it, parking the peer's full API token in the executing box's `remote.cfg`. Remote and sync job are both removed once the sync is over. - a step that set a detail and then failed rendered the detail instead of the error, because a resolvable key wins over the raw string.