e81d41e527
gates / gates (push) Failing after 2s
89 of 1 032 strings. No Hungarian byte moved; no image, pin, catalog_since or compose line changed. EN_MISSING_CEILING 1032 -> 943 in this commit. Chosen for SHAPE: privatebin exercises the plain case (description, tagline, lists); paperless-ngx adds select options, a placeholder and a customer-facing folder label; romm carries the catalog's only optional_config block, whose group has no id of its own and is matched by `match_group` — the Hungarian group name it translates. All three run on the demo box, so the English pages can be fetched rather than reasoned about. Two gate defects fixed while translating, each found by its own decoy rather than by reading: coverage was counted only for the apps NAMED on the command line, so `check-copy-i18n.py privatebin` reported 47 more missing strings than the same tree unscoped and either number could have been made to "pass"; and the ASCII-Hungarian stems matched as bare substrings, so „ird be" convicted "the third best" and „angol" convicted "Angola". Both now have their own case in the decoy suite. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
237 lines
9.3 KiB
YAML
237 lines
9.3 KiB
YAML
# =============================================================================
|
|
# .felhom.yml — App metadata for felhom-controller
|
|
# =============================================================================
|
|
|
|
# --- Display info (shown on dashboard) ---
|
|
display_name: "RomM"
|
|
description: "Retró játékgyűjtemény kezelő"
|
|
category: "media"
|
|
subdomain: "arcade"
|
|
slug: "romm"
|
|
# 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-07-18"
|
|
|
|
# --- Resource hints (displayed on deploy screen) ---
|
|
resources:
|
|
mem_request: "300M"
|
|
mem_limit: "1024M"
|
|
pi_compatible: false
|
|
needs_hdd: true
|
|
|
|
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
|
backup:
|
|
userdata:
|
|
- path: roms
|
|
class: optional # ruled: curated ROM sets often not re-acquirable
|
|
hdd:
|
|
- path: appdata/romm/resources
|
|
class: excluded # scraper cache, re-derivable
|
|
|
|
# --- Customer-facing folder annotation (R-75) ---
|
|
data_paths:
|
|
- path: roms
|
|
root: userdata
|
|
role: library
|
|
label: "ROM gyűjtemény"
|
|
|
|
# --- 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: "arcade"
|
|
required: true
|
|
locked_after_deploy: true
|
|
description: "Az alkalmazás aldomainje"
|
|
|
|
- env_var: DB_PASSWORD
|
|
label: "Adatbázis jelszó"
|
|
type: secret
|
|
generate: "password:24"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: MYSQL_ROOT_PASSWORD
|
|
label: "MariaDB root jelszó"
|
|
type: secret
|
|
generate: "password:24"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: ROMM_AUTH_SECRET_KEY
|
|
label: "Hitelesítési titkosítási kulcs"
|
|
type: secret
|
|
generate: "hex:32"
|
|
locked_after_deploy: true
|
|
|
|
- env_var: HDD_PATH
|
|
label: "Adattárolási útvonal"
|
|
type: path
|
|
required: true
|
|
placeholder: "/mnt/felhom-drives/hdd_1"
|
|
description: "A külső merevlemez elérési útja, ahol a ROM-ok és borítóképek tárolódnak"
|
|
locked_after_deploy: true
|
|
|
|
# --- App info (info page content) ---
|
|
app_info:
|
|
tagline: "Retró játékgyűjtemény kezelő, böngésző és lejátszó"
|
|
default_creds: "admin / admin"
|
|
docs_url: "https://github.com/rommapp/romm/wiki"
|
|
|
|
use_cases:
|
|
- "Retró játékgyűjtemény rendszerezése és böngészése webes felületen"
|
|
- "Játékok metaadatainak automatikus letöltése — borítók, leírások, értékelések"
|
|
- "Platformonkénti szűrés és keresés a teljes gyűjteményben"
|
|
- "ROM fájlok webes feltöltése és letöltése"
|
|
- "Többfelhasználós hozzáférés a háztartás tagjai számára"
|
|
|
|
first_steps:
|
|
- "Nyisd meg az arcade.DOMAIN címet a böngészőben"
|
|
- "Jelentkezz be az alapértelmezett admin / admin fiókkal"
|
|
- "Változtasd meg azonnal a jelszót a Settings menüben"
|
|
- "Töltsd fel a ROM fájlokat a Fájlkezelőben (FileBrowser) a roms/ mappába, platform mappákba rendezve (pl. roms/gba/, roms/snes/)"
|
|
- "Indíts egy Scan-t a bal oldali menüben a ROM-ok beolvasásához"
|
|
- "Opcionális: állíts be metaadat-szolgáltatókat a borítóképek és leírások automatikus letöltéséhez (lásd lent)"
|
|
|
|
prerequisites:
|
|
- "Külső HDD szükséges a ROM fájlok és borítóképek tárolásához"
|
|
- "Legalább 1 GB szabad RAM ajánlott (MariaDB + Redis + RomM)"
|
|
- "ROM fájlok platform mappákba rendezve (pl. roms/gba/, roms/snes/)"
|
|
|
|
# --- Optional config (configurable before or after deployment) ---
|
|
optional_config:
|
|
- group: "Metaadat-szolgáltatók"
|
|
description: "Játékok borítóinak, leírásainak és értékeléseinek automatikus letöltéséhez. Legalább az IGDB beállítása ajánlott. Mindegyik ingyenesen használható regisztráció után."
|
|
fields:
|
|
- env_var: IGDB_CLIENT_ID
|
|
label: "IGDB Client ID"
|
|
type: text
|
|
help_url: "https://api-docs.igdb.com/#getting-started"
|
|
help_text: "1) Regisztrálj / jelentkezz be a Twitch fejlesztői portálon (dev.twitch.tv). 2) Hozz létre egy új alkalmazást (bármilyen névvel). 3) Másold be a Client ID-t."
|
|
|
|
- env_var: IGDB_CLIENT_SECRET
|
|
label: "IGDB Client Secret"
|
|
type: secret_input
|
|
help_text: "A Twitch alkalmazásod Client Secret-je (a „New Secret\" gombbal generálhatod)."
|
|
|
|
- env_var: STEAMGRIDDB_API_KEY
|
|
label: "SteamGridDB API Key"
|
|
type: text
|
|
help_url: "https://www.steamgriddb.com/profile/preferences/api"
|
|
help_text: "Regisztrálj a SteamGridDB oldalon, majd a Preferences → API fül alatt kattints a „Generate API key\" gombra."
|
|
|
|
- env_var: SCREENSCRAPER_USER
|
|
label: "ScreenScraper felhasználónév"
|
|
type: text
|
|
help_url: "https://www.screenscraper.fr/"
|
|
help_text: "Regisztrálj a screenscraper.fr oldalon. A felhasználóneved lesz az API felhasználónév."
|
|
|
|
- env_var: SCREENSCRAPER_PASSWORD
|
|
label: "ScreenScraper jelszó"
|
|
type: secret_input
|
|
help_text: "A screenscraper.fr fiókod jelszava."
|
|
|
|
- env_var: MOBYGAMES_API_KEY
|
|
label: "MobyGames API Key"
|
|
type: text
|
|
help_url: "https://www.mobygames.com/info/api/"
|
|
help_text: "Regisztrálj a MobyGames oldalon, majd az API oldalon igényelj kulcsot. Részletes játékinformációkat és krediteket biztosít."
|
|
|
|
# --- Controller-side health probe ---
|
|
healthcheck:
|
|
checks:
|
|
- type: http
|
|
port: 8080
|
|
|
|
# --- English copy (localisation slice 5, R-560) --------------------------------------------
|
|
# The Hungarian above is UNCHANGED. A box on English reads this block field by field; a missing
|
|
# field shows the Hungarian one; a controller older than 0.257.0 ignores the block entirely.
|
|
i18n:
|
|
en:
|
|
description: "Retro game collection manager"
|
|
|
|
data_paths:
|
|
- path: roms
|
|
label: "ROM collection"
|
|
|
|
deploy_fields:
|
|
- env_var: DOMAIN
|
|
label: "Domain"
|
|
description: "The server domain name"
|
|
|
|
- env_var: SUBDOMAIN
|
|
label: "Subdomain"
|
|
description: "The subdomain this app answers on"
|
|
|
|
- env_var: DB_PASSWORD
|
|
label: "Database password"
|
|
|
|
- env_var: MYSQL_ROOT_PASSWORD
|
|
label: "MariaDB root password"
|
|
|
|
- env_var: ROMM_AUTH_SECRET_KEY
|
|
label: "Sign-in encryption key"
|
|
|
|
- env_var: HDD_PATH
|
|
label: "Data storage path"
|
|
placeholder: "/mnt/felhom-drives/hdd_1"
|
|
description: "The path to the external hard drive where the ROMs and cover art are kept"
|
|
|
|
app_info:
|
|
tagline: "Retro game collection manager, browser and player"
|
|
default_creds: "admin / admin"
|
|
|
|
use_cases:
|
|
- "Sort and browse a retro game collection in your browser"
|
|
- "Game details download themselves - cover art, descriptions, ratings"
|
|
- "Filter and search the whole collection by platform"
|
|
- "Upload and download ROM files in your browser"
|
|
- "Several people in the household can have their own account"
|
|
|
|
first_steps:
|
|
- "Open arcade.DOMAIN in your browser"
|
|
- "Sign in with the default admin / admin account"
|
|
- "Change the password straight away, in the Settings menu"
|
|
- "Upload the ROM files into the roms/ folder in the File manager (FileBrowser), sorted into platform folders (for example roms/gba/, roms/snes/)"
|
|
- "Start a Scan from the menu on the left to read the ROMs in"
|
|
- "Optional: set up metadata providers so cover art and descriptions download themselves (see below)"
|
|
|
|
prerequisites:
|
|
- "An external hard drive is needed to keep the ROM files and cover art on"
|
|
- "At least 1 GB of free RAM is recommended (MariaDB + Redis + RomM)"
|
|
- "ROM files sorted into platform folders (for example roms/gba/, roms/snes/)"
|
|
|
|
optional_config:
|
|
- match_group: "Metaadat-szolgáltatók"
|
|
group: "Metadata providers"
|
|
description: "So that cover art, descriptions and ratings download themselves. IGDB is the one worth setting up first. All of them are free after you sign up."
|
|
fields:
|
|
- env_var: IGDB_CLIENT_ID
|
|
label: "IGDB Client ID"
|
|
help_text: '1) Sign up or sign in on the Twitch developer portal (dev.twitch.tv). 2) Create a new application (any name will do). 3) Copy the Client ID across.'
|
|
|
|
- env_var: IGDB_CLIENT_SECRET
|
|
label: "IGDB Client Secret"
|
|
help_text: 'The Client Secret of your Twitch application (the "New Secret" button makes one).'
|
|
|
|
- env_var: STEAMGRIDDB_API_KEY
|
|
label: "SteamGridDB API Key"
|
|
help_text: 'Sign up on SteamGridDB, then select the "Generate API key" button under Preferences -> API.'
|
|
|
|
- env_var: SCREENSCRAPER_USER
|
|
label: "ScreenScraper user name"
|
|
help_text: 'Sign up on screenscraper.fr. Your account name is the API user name.'
|
|
|
|
- env_var: SCREENSCRAPER_PASSWORD
|
|
label: "ScreenScraper password"
|
|
help_text: 'The password of your screenscraper.fr account.'
|
|
|
|
- env_var: MOBYGAMES_API_KEY
|
|
label: "MobyGames API Key"
|
|
help_text: 'Sign up on MobyGames, then ask for a key on the API page. It gives detailed game information and credits.'
|