Files
felhom-controller/controller/internal/stacks/testdata/catalog/crafty-controller/.felhom.yml
T
admin 60f0a86bd4
gates / gates (push) Successful in 25s
v0.257.0: the app catalog can speak English (R-560, slice 5 Part A)
The READ PATH for a second language in `.felhom.yml`. An `i18n: {en: …}` sibling
block inside the same file; `Metadata.For(lang)` merges it FIELD BY FIELD over the
Hungarian, so a missing or blank English field shows the Hungarian one and a
half-translated app is a legal, shippable state.

`For("hu")` is the parsed struct with `I18n` cleared and nothing else — measured
against all 53 real catalog files, copied into `internal/stacks/testdata/catalog/`.
Lists replace whole; every other list is matched by its own key, never by position.
`For` never writes through the receiver: the metadata is the stack manager's, shared
by concurrent requests, and an in-place merge would leak one household's language
into another household's page.

Pages reach catalog copy only through `LocalizeStacks`/`LocalizeStackPtr`/`MetaFor`,
and `TestNoDirectMetaCopyReadOnPages` keeps a named, reasoned allow-list of every
direct `.Meta.<copy>` read in `internal/web` so the NEXT page to read one fails the
suite instead of quietly rendering Hungarian to an English household.

Eight red-proofs. Two of them convicted a hollow TEST rather than the code: a struct
copy shares its slices' backing arrays, so the obvious DeepEqual mutation check
passed a deliberately broken merge; and a one-entry fixture cannot tell key matching
from position matching. Both rewritten, both then seen to fail.

MinAgent: 0.131.0 (unchanged). Older controllers are unaffected — `LoadMetadata`
uses non-strict `yaml.Unmarshal`, so a pre-0.257.0 box drops the whole block.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-20 14:31:52 +02:00

87 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# .felhom.yml - App metadata for felhom-controller
# =============================================================================
# --- Display info (shown on dashboard) ---
display_name: "Crafty Controller"
description: "Minecraft szerver kezelő webes felülettel"
category: "games"
subdomain: "minecraft"
slug: "crafty-controller"
# catalog_since: the date THIS repo last changed this app's pinned images. Any commit that
# changes an image: line must set this to the same day (see CLAUDE.md).
catalog_since: "2026-06-26"
# --- Resource hints (displayed on deploy screen) ---
resources:
mem_request: "256M"
mem_limit: "2048M"
pi_compatible: false
needs_hdd: false
# --- Deploy fields (first deployment only) ---
deploy_fields:
- env_var: DOMAIN
label: "Domain"
type: domain
description: "A szerver domain neve"
locked_after_deploy: true
- env_var: SUBDOMAIN
label: "Aldomain"
type: subdomain
default: "minecraft"
required: true
locked_after_deploy: true
description: "Az alkalmazás aldomainje"
- env_var: CRAFTY_PASSWORD
label: "Admin jelszó"
type: password
generate: password:24
locked_after_deploy: true
description: "A Crafty admin felhasználó (admin) kezdeti jelszava — ezzel tudsz belépni a kezelőfelületre"
# --- App info (info page content) ---
app_info:
tagline: "Minecraft szerver kezelő - hozd létre a saját világodat"
docs_url: "https://docs.craftycontrol.com/"
use_cases:
- 'Minecraft szerver létrehozása és kezelése webes felületen'
- 'Több szerver párhuzamos futtatása (Java és Bedrock)'
- 'Automatikus mentések és ütemezett újraindítás'
- 'Játékos menedzsment és konzol hozzáférés'
- 'Szerver fájlok kezelése böngészőből'
first_steps:
- 'Nyisd meg a minecraft.DOMAIN címet a böngészőben'
- 'A kezdeti belépési adatokat ezen az oldalon (Kezdeti belépési adatok) találod'
- 'Hozz létre egy új Minecraft szervert a varázslóval'
- 'Állítsd be a szerver beállításokat (játékmód, nehézség, stb.)'
- 'Állítsd be a szerver portját a 25565–25575 tartományon belül (server.properties → server-port); az első szerver a 25565-öt használja, a továbbiak 25566–25575-öt'
- 'Helyi hálózaton csatlakozz a szerver helyi IP-címére és portjára (pl. 192.168.x.x:25565) — a Minecraft kliens „helyi hálózat keresése” nem listázza automatikusan, add meg kézzel a címet'
- 'Interneten keresztüli eléréshez port-továbbítás szükséges a választott port(ok)ra — egyeztess az üzemeltetővel'
prerequisites:
- 'Legalább 2 GB szabad RAM ajánlott (Minecraft szerver + Crafty)'
- 'x86 processzor szükséges (nem fut Raspberry Pi-n)'
- 'A Minecraft szerverek a 25565–25575 porttartományt használhatják (egyszerre legfeljebb 11 szerver)'
# --- Controller-side health probe ---
healthcheck:
checks:
- type: tcp
port: 8443
# --- Initial login (felhom-seeded) ---
# The admin password is seeded into default.json by the compose entrypoint (CRAFTY_PASSWORD deploy
# field). The controller reads it back from default.json and shows it on the app page under "Kezdeti
# belépési adatok" — same value the customer set at deploy time.
initial_credentials:
file: /crafty/app/config/default.json
format: json
username_key: username
password_key: password
note: "Kezdeti admin jelszó (a telepítéskor beállított). Az első belépés után változtasd meg a Crafty felületén — ez a kártya továbbra is a kezdeti jelszót mutatja."