v0.258.0: the last four Hungarian things an English household met
gates / gates (push) Successful in 24s
gates / gates (push) Successful in 24s
R-589 the update badge, R-590 the data-folder backup sentence, R-573 the two channel banners, R-572 two dead helpers. All four were built in Go, which is why neither the template parity fixtures nor TestI18nEnglishPages could see them; slice 5's LIVE proof is what found them. R-590 is the one that matters most: it is a promise about the customer's files. It said, in Hungarian and under an already-English folder label, that a drop-zone is temporary and unbacked. The test now asserts the CONSEQUENCE in both languages — and that the two languages do not produce the same string, which would mean the English fell back. R-572 is not what its row said. The row claimed a template renders "vasárnap" on an English page; measured, NO template and no Go file called pruneLabel or nextPruneLabel. They were dead func-map entries returning Hungarian, so they are deleted rather than translated — translating dead code would add machinery with no reader and a test pinning a fiction. Deletion is fail-loud and that was proven: a template naming the removed function panics loadTemplates at startup. Five red-proofs. One of them says something about the gate rather than the code: the Go-parity gate does not measure localeFuncs keys against the base capture, so the citation to TestLocaleFuncsHungarianBundleMatchesFuncMap is what carries them — the test was extended to make that citation true. MinAgent: 0.131.0 (unchanged). Hungarian byte-identical. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/appbackup"
|
||||
@@ -30,16 +29,20 @@ type DataPathCard struct {
|
||||
// can never drift from what the backup engines actually do. `excluded` means the tier filter drops it
|
||||
// at EVERY tier — so a drop-zone must say, in the customer's own language, that the folder is
|
||||
// temporary and unbacked. Saying anything softer would be a false promise about their files.
|
||||
func consequenceFor(class appbackup.BindClass, role stacks.DataPathRole) string {
|
||||
// R-589/R-590 (v0.258.0): `msg` renders the sentence in the HOUSEHOLD'S language. It is a
|
||||
// parameter rather than a package-level lookup because this sentence is a PROMISE ABOUT THE
|
||||
// CUSTOMER'S FILES — an English household reading „nem készül róla biztonsági mentés" as decoration
|
||||
// may leave originals in a drop-zone the backup filter discards at every tier. Found live on
|
||||
// 2026-09-20 with the folder's own label already English above it, so the line read half and half.
|
||||
func consequenceFor(class appbackup.BindClass, role stacks.DataPathRole, msg func(key string) string) string {
|
||||
switch class {
|
||||
case appbackup.ClassExcluded:
|
||||
if role == stacks.RoleImport {
|
||||
return "Ide másold a feldolgozandó fájlokat. Az alkalmazás beolvassa, majd törli innen — " +
|
||||
"ez a mappa átmeneti, és nem készül róla biztonsági mentés."
|
||||
return msg("datapath.consequence.import_excluded")
|
||||
}
|
||||
return "Ez a mappa átmeneti, és nem készül róla biztonsági mentés."
|
||||
return msg("datapath.consequence.excluded")
|
||||
case appbackup.ClassMandatory, appbackup.ClassOptional:
|
||||
return "Itt tárolódnak a fájljaid. Biztonsági mentés készül róla."
|
||||
return msg("datapath.consequence.kept")
|
||||
default:
|
||||
// No classification (legacy app, or a bind with no backup block). Say nothing rather than
|
||||
// guess — an unverified backup promise is worse than no sentence at all.
|
||||
@@ -51,7 +54,8 @@ func consequenceFor(class appbackup.BindClass, role stacks.DataPathRole) string
|
||||
//
|
||||
// classOf resolves a (root, relpath) to its backup class; missing ⇒ empty class ⇒ no consequence
|
||||
// line. A row whose deep link cannot be built (no domain) is dropped rather than rendered dead.
|
||||
func (s *Server) buildDataPathCards(st *stacks.Stack) []DataPathCard {
|
||||
func (s *Server) buildDataPathCards(st *stacks.Stack, lang string) []DataPathCard {
|
||||
msg := func(key string) string { return s.msgLang(lang, key) }
|
||||
if st == nil || !st.Deployed || len(st.Meta.DataPaths) == 0 {
|
||||
return nil
|
||||
}
|
||||
@@ -71,7 +75,7 @@ func (s *Server) buildDataPathCards(st *stacks.Stack) []DataPathCard {
|
||||
if s.stackMgr != nil {
|
||||
if root := s.stackMgr.GetImportRoot(); root != "" {
|
||||
if du := system.GetDiskUsage(root); du != nil {
|
||||
freeSpace = fmt.Sprintf("%.1f GB szabad", du.AvailGB)
|
||||
freeSpace = s.msgLang(lang, "datapath.free_space", du.AvailGB)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +104,7 @@ func (s *Server) buildDataPathCards(st *stacks.Stack) []DataPathCard {
|
||||
card := DataPathCard{
|
||||
Label: dp.Label,
|
||||
Link: link,
|
||||
Consequence: consequenceFor(classOf[string(dp.Root)+"\x00"+dp.Path], dp.Role),
|
||||
Consequence: consequenceFor(classOf[string(dp.Root)+"\x00"+dp.Path], dp.Role, msg),
|
||||
IsImport: isImport,
|
||||
}
|
||||
if isImport {
|
||||
|
||||
Reference in New Issue
Block a user