v0.280.0: the setup gate (decision 46); R-710 'I changed it' + absent-record window; R-709 password fields off the page; password:N:special generator
gates / gates (push) Successful in 25s

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:
2026-09-29 08:51:46 +02:00
parent 2548b4c924
commit 7fa8768cfd
37 changed files with 4015 additions and 107 deletions
@@ -313,6 +313,33 @@ func i18nCases() []i18nCase {
d["StorageLabels"] = map[string]string{}
return d
}})
// v0.280.0 (`09` §3 decision 46, R-710): the setup gate's card (button / probe) and "I changed it" — captured
// when born.
gateCase := func(name string, probe bool) i18nCase {
return i18nCase{name, "app_info", func() map[string]interface{} {
d := i18nLayoutData("stacks", "Immich")
st := stacks.Stack{Name: "immich", Deployed: true, State: stacks.StateRunning}
st.Meta = stacks.Metadata{DisplayName: "Immich", Slug: "immich"}
d["Stack"] = st
d["Meta"] = st.Meta
d["AppInfo"] = st.Meta.AppInfo
d["SetupGateClosed"] = true
d["SetupGateHasProbe"] = probe
return d
}}
}
base = append(base, gateCase("app_info_setup_gate_button", false), gateCase("app_info_setup_gate_probe", true))
base = append(base, i18nCase{"app_info_known_login_changed", "app_info", func() map[string]interface{} {
d := i18nLayoutData("stacks", "Calibre-Web")
st := stacks.Stack{Name: "calibre-web", Deployed: true, State: stacks.StateRunning}
st.Meta = stacks.Metadata{DisplayName: "Calibre-Web", Slug: "calibre-web", AppInfo: stacks.AppInfo{DefaultCreds: "admin / admin123"}}
d["Stack"] = st
d["Meta"] = st.Meta
d["AppInfo"] = st.Meta.AppInfo
d["HasAppInfo"] = true
d["KnownLoginLine"] = "Ez az alkalmazás egy ismert, közös jelszóval indul: admin / admin123. Telepítés után azonnal változtasd meg."
return d
}})
// v0.268.0 (`09` §3 decision 14): the ladder's "steps remaining" line, captured when it was born.
base = append(base, i18nCase{"app_info_ladder_steps", "app_info", func() map[string]interface{} {
d := i18nLayoutData("stacks", "RomM")
@@ -386,6 +413,7 @@ var i18nSessionTemplates = map[string]bool{"recovery": true}
var i18nDirectTemplates = map[string]bool{
"login": true, "claim": true, "recovery": true,
"launcher_shared": true, "launcher_share_password": true, "catchall": true,
"setupgate": true, // v0.280.0 (decision 46): the gate page a stranger meets
}
func i18nTestServer(t *testing.T) *Server {