kept data: the choice at reinstall, the list, the read-only view, the load (09 decision 36); R-690 fixed
gates / gates (push) Successful in 26s
gates / gates (push) Successful in 26s
An install over an app's kept drive folder (appdata/<app> non-empty) asks the household: "use my kept data" (a load from the newest copy of THIS drive's install, own unit or second-drive mirror, then the template's after_load) or "start fresh" (the folder is renamed into <drive>/kept/<app>/<date>/ with the removed app's unit; nothing deleted). The install API answers 409 kept_data_choice until one is chosen; DeployStack refuses too. New page Megorzott adatok / Kept data (/kept-data): Load / Look / Delete (typed confirmation, the only deletion of kept data). FileBrowser gets a read-only source. The drive-full warning names the kept folders. <drive>/kept is protected and outside every backup leg. R-690: the removed-app restore (R-487) never found a unit on a DATA drive — it asked GetStackComposePath (true for every catalog app) and restored nextcloud with no env. Now isStackDeployed; pinned with a production-shaped provider. Red-proofs: audits/night-2026-09-26/E/redproofs/. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -3682,3 +3682,25 @@ html::-webkit-scrollbar-track { background: var(--bg-0); }
|
||||
the shared .lang-globe-menu rule, so this block adds no positioning of its own. It floated in the
|
||||
top-left of the viewport before, outside the card, which read as a stray browser control. */
|
||||
.shell-lang { display: flex; justify-content: center; margin-top: 1.5rem; }
|
||||
|
||||
/* ── Kept data (`09` §3 decision 36): the install-time choice and the „Megőrzött adatok" list ── */
|
||||
.kept-choice { margin-bottom: 1rem; }
|
||||
.kept-choice-title { margin: 0 0 .5rem; }
|
||||
.kept-choice-body { color: var(--text-1); margin: 0 0 1rem; }
|
||||
.kept-choice-option { border-top: 1px solid var(--line-soft); padding: .75rem 0; }
|
||||
.kept-choice-desc, .kept-choice-note { color: var(--text-2); margin: .4rem 0 0; font-size: .9rem; }
|
||||
.kept-choice-note { color: var(--text-3); }
|
||||
.kept-header { display: flex; align-items: center; gap: .5rem; }
|
||||
.kept-list { display: flex; flex-direction: column; gap: .75rem; margin-top: .75rem; }
|
||||
.kept-item { border: 1px solid var(--line); border-radius: var(--radius); padding: .75rem; background: var(--bg-1); }
|
||||
.kept-item-head { display: flex; justify-content: space-between; gap: .75rem; flex-wrap: wrap; }
|
||||
.kept-item-name { font-weight: 600; color: var(--text-1); }
|
||||
.kept-item-meta { color: var(--text-2); }
|
||||
.kept-item-backup { color: var(--text-2); margin: .35rem 0 .5rem; font-size: .9rem; }
|
||||
.kept-item-actions { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; }
|
||||
.kept-inline-form { display: inline; margin: 0; }
|
||||
.kept-delete { margin-top: .5rem; }
|
||||
.kept-delete summary { list-style: none; display: inline-block; cursor: pointer; }
|
||||
.kept-delete-form { display: flex; flex-direction: column; gap: .4rem; margin-top: .5rem; max-width: 32rem; }
|
||||
.kept-delete-text { color: var(--warn); margin: 0; }
|
||||
.storage-kept-link { margin-top: .75rem; }
|
||||
|
||||
Reference in New Issue
Block a user