# TASK.md — Debug: App Info Page — YAML Parsing Failure > Read CLAUDE.md first for project context, workspace layout, and build instructions. ## Problem The `/apps/romm` info page shows NO app info content (no tagline, no use cases, no optional config form). More importantly, even basic metadata is missing: - `~ RAM` badge shows no value (should be "300M") - Category badge is empty (should be "media") - Tagline `
` is empty
These fields have been in `.felhom.yml` since BEFORE the `app_info` section was added. If they're
empty, it means `LoadMetadata()` is silently failing and returning defaults.
## Root cause analysis
`LoadMetadata()` in `internal/stacks/metadata.go` swallows YAML parse errors:
```go
if err := yaml.Unmarshal(data, &meta); err != nil {
// Parse error — still return defaults <-- NO LOG OUTPUT!
dirName := filepath.Base(stackDir)
meta.DisplayName = toTitleCase(strings.ReplaceAll(dirName, "-", " "))
meta.Slug = dirName
return meta
}
```
The YAML parse is failing for some reason, and the error is silently ignored.
## Step 1: Diagnose — check what the controller has in memory
Run this from your workstation to see the raw API data for romm:
```bash
# Get a session first, then check the stack data
ssh kisfenyo@192.168.0.162 "curl -s http://localhost:8080/api/stacks" 2>/dev/null | head -200
```
Wait — API needs auth. Easier approach: add a temporary debug log.
## Step 2: Add error logging to LoadMetadata
In `controller/internal/stacks/metadata.go`, the `LoadMetadata` function currently swallows
parse errors silently. **Add logging** so we can see what's failing:
```go
func LoadMetadata(stackDir string) Metadata {
meta := Metadata{}
path := filepath.Join(stackDir, ".felhom.yml")
data, err := os.ReadFile(path)
if err != nil {
dirName := filepath.Base(stackDir)
meta.DisplayName = toTitleCase(strings.ReplaceAll(dirName, "-", " "))
meta.Slug = dirName
meta.Category = "tools"
return meta
}
if err := yaml.Unmarshal(data, &meta); err != nil {
// ADD THIS LOG LINE — this is critical for debugging
fmt.Fprintf(os.Stderr, "[ERROR] Failed to parse .felhom.yml in %s: %v\n", stackDir, err)
dirName := filepath.Base(stackDir)
meta.DisplayName = toTitleCase(strings.ReplaceAll(dirName, "-", " "))
meta.Slug = dirName
return meta
}
// ADD THIS DEBUG LINE — confirms successful parse
fmt.Fprintf(os.Stderr, "[DEBUG] Loaded metadata for %s: tagline=%q, useCases=%d, optConfig=%d\n",
filepath.Base(stackDir), meta.AppInfo.Tagline, len(meta.AppInfo.UseCases), len(meta.OptionalConfig))
// ... rest of function unchanged ...
```
You'll need to add `"fmt"` to the imports if not already there.
## Step 3: Build, deploy, check logs
Follow the CLAUDE.md build workflow. After deploying, immediately check logs:
```bash
ssh kisfenyo@192.168.0.162 "docker logs felhom-controller 2>&1 | grep -E 'ERROR.*felhom.yml|DEBUG.*Loaded metadata'"
```
This will show either:
- `[ERROR] Failed to parse .felhom.yml in /opt/docker/stacks/romm: