v0.317.0: a second copy counts only on a proven different disk; the no-drive install speaks in words (felhom.eu architecture/16, build A)
gates / gates (push) Successful in 46s
gates / gates (push) Successful in 46s
Tier-2 and the one-copy notice ask the host agent (POST /disks/same-disk, agent 0.157.0): different + proven -> made and counted; same disk -> not made (D1); unknown (VM, hidden USB serial) -> made, not counted, the row says why (D2); a NAS never counts and no longer hides the notice (R-1075). An older agent keeps the st_dev rule, logged once. D4: a data-folder or media app on a box with no drive is refused in words with a link to the drives page (R-1068's raw-error half). MinAgent 0.157.0. Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
This commit is contained in:
@@ -1422,6 +1422,9 @@ type AppBackupRow struct {
|
||||
// Tier2UnitStaleNotice (R-403) — non-empty when the newest run PRESERVED this copy's package
|
||||
// instead of refreshing it, so the card cannot render a preserved package as a fresh one.
|
||||
Tier2UnitStaleNotice string
|
||||
// Tier2UnprovenNotice (v0.317.0, `16` D2) — non-empty when the copy sits on a drive the host agent cannot
|
||||
// prove is another physical disk: the copy exists, it does not count as a second copy.
|
||||
Tier2UnprovenNotice string
|
||||
|
||||
// Drive disconnected — app's home drive is currently disconnected
|
||||
DriveDisconnected bool
|
||||
@@ -1663,6 +1666,9 @@ func (s *Server) buildAppBackupRows(status *backup.FullBackupStatus, lang string
|
||||
row.Tier2LastStatus = cd.LastStatus
|
||||
row.Tier2LastSuccess = cd.LastSuccess
|
||||
row.Tier2SuccessTracked = cd.SuccessTracked
|
||||
if cd.Unproven {
|
||||
row.Tier2UnprovenNotice = s.msgLang(lang, "backup.tier2.unproven")
|
||||
}
|
||||
// Disclose, do not hide: an older good copy AND the fact that the newest attempt failed.
|
||||
// Suppressing the failure to keep the surface calm is a quieter version of the same lie.
|
||||
row.Tier2StaleCopy = cd.SuccessTracked && cd.LastSuccess != "" && cd.LastStatus == "error"
|
||||
|
||||
@@ -283,6 +283,7 @@
|
||||
not render as a plain fresh copy. The status line above is about the RUN;
|
||||
this one is about the PACKAGE, and after a preserved leg they differ. */}}
|
||||
{{if .Tier2UnitStaleNotice}}<span class="layer-reason" style="color:var(--warn);opacity:.9">{{.Tier2UnitStaleNotice}}</span>{{end}}
|
||||
{{if .Tier2UnprovenNotice}}<span class="layer-reason" style="color:var(--warn);opacity:.9">{{.Tier2UnprovenNotice}}</span>{{end}}
|
||||
<span class="tier-contents">{{.Tier23Contents}}</span>
|
||||
<span class="tier-browsable" title="{{T "backups_apps.a_mentes_bongeszheto_fajlrendszerben"}}"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -431,6 +431,24 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
// D4 (`16` §5): no drive on the box — the sentence, and a way to the drives page.
|
||||
if (!data.ok && data.data && data.data.code === 'needs_drive') {
|
||||
var nd = window.needsDriveNote;
|
||||
if (!nd) {
|
||||
nd = document.createElement('div');
|
||||
nd.className = 'alert alert-warning';
|
||||
btn.parentNode.insertBefore(nd, btn);
|
||||
window.needsDriveNote = nd;
|
||||
}
|
||||
nd.textContent = data.error + ' ';
|
||||
var a = document.createElement('a');
|
||||
a.href = data.data.link || '/storage';
|
||||
a.textContent = '{{T "deploy.meghajtok_megnyitasa"}}';
|
||||
nd.appendChild(a);
|
||||
btn.textContent = '{{T "deploy.telepites_inditasa"}}';
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
if (!data.ok) {
|
||||
showAlert('{{T "common.hiba_kettospont"}} ' + data.error);
|
||||
btn.textContent = '{{T "deploy.telepites_inditasa"}}';
|
||||
|
||||
@@ -819,6 +819,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -902,6 +903,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -978,6 +980,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1047,6 +1050,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
+4
@@ -850,6 +850,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -933,6 +934,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1009,6 +1011,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1078,6 +1081,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -854,6 +854,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -937,6 +938,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1013,6 +1015,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1082,6 +1085,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -848,6 +848,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -931,6 +932,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1007,6 +1009,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1076,6 +1079,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -762,6 +762,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -845,6 +846,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -921,6 +923,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -990,6 +993,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -762,6 +762,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -845,6 +846,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -921,6 +923,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -990,6 +993,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -848,6 +848,7 @@
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">Egy figyelmeztetés a másolatról</span>
|
||||
|
||||
<span class="layer-reason" style="color:var(--warn);opacity:.9">A másolat régebbi a mentésnél</span>
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -931,6 +932,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1007,6 +1009,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
@@ -1076,6 +1079,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="tier-contents">Teljes helyreállítási egység</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
|
||||
@@ -814,6 +814,24 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.ok && data.data && data.data.code === 'needs_drive') {
|
||||
var nd = window.needsDriveNote;
|
||||
if (!nd) {
|
||||
nd = document.createElement('div');
|
||||
nd.className = 'alert alert-warning';
|
||||
btn.parentNode.insertBefore(nd, btn);
|
||||
window.needsDriveNote = nd;
|
||||
}
|
||||
nd.textContent = data.error + ' ';
|
||||
var a = document.createElement('a');
|
||||
a.href = data.data.link || '/storage';
|
||||
a.textContent = 'Meghajtók megnyitása';
|
||||
nd.appendChild(a);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
if (!data.ok) {
|
||||
showAlert('Hiba: ' + data.error);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
|
||||
@@ -768,6 +768,24 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.ok && data.data && data.data.code === 'needs_drive') {
|
||||
var nd = window.needsDriveNote;
|
||||
if (!nd) {
|
||||
nd = document.createElement('div');
|
||||
nd.className = 'alert alert-warning';
|
||||
btn.parentNode.insertBefore(nd, btn);
|
||||
window.needsDriveNote = nd;
|
||||
}
|
||||
nd.textContent = data.error + ' ';
|
||||
var a = document.createElement('a');
|
||||
a.href = data.data.link || '/storage';
|
||||
a.textContent = 'Meghajtók megnyitása';
|
||||
nd.appendChild(a);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
if (!data.ok) {
|
||||
showAlert('Hiba: ' + data.error);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
|
||||
@@ -793,6 +793,24 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.ok && data.data && data.data.code === 'needs_drive') {
|
||||
var nd = window.needsDriveNote;
|
||||
if (!nd) {
|
||||
nd = document.createElement('div');
|
||||
nd.className = 'alert alert-warning';
|
||||
btn.parentNode.insertBefore(nd, btn);
|
||||
window.needsDriveNote = nd;
|
||||
}
|
||||
nd.textContent = data.error + ' ';
|
||||
var a = document.createElement('a');
|
||||
a.href = data.data.link || '/storage';
|
||||
a.textContent = 'Meghajtók megnyitása';
|
||||
nd.appendChild(a);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
btn.disabled = false;
|
||||
return;
|
||||
}
|
||||
if (!data.ok) {
|
||||
showAlert('Hiba: ' + data.error);
|
||||
btn.textContent = 'Telepítés indítása';
|
||||
|
||||
Reference in New Issue
Block a user