Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
4.9 KiB
felhom.eu — task reports
Overwrite this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in hub/CHANGELOG.md; the scripts history lives in scripts/CHANGELOG.md.
REPORT — felhom-app-catalog skill (4th) + SparkyFitness finalized as its worked example (2026-07-03)
Companion half in app-catalog-felhom.eu/REPORT.md (the template changes + live-deploy evidence).
Baselines
| Repo | Base → head |
|---|---|
| felhom.eu | 7ad111c → this push (skills/felhom-app-catalog/SKILL.md NEW + docs) |
| app-catalog-felhom.eu | 15cdf7b → c7490f7 (sparkyfitness finalized + REUSE.md probe-naming row) |
| felhom-controller | READ-ONLY (sync.go + healthprobe.go consulted to state consumer behavior accurately) |
The skill
- Workflow, not reference: research → inspect-the-image healthcheck choice → compose →
.felhom.yml→ live UI deploy on demo → verify healthy → reconcile count → finish. Every field table is a POINTER to app-catalogREUSE.md§1–2 /README.md§format — the shipped SKILL.md contains no field tables at all (checked); the one new fact it teaches (probe-container naming) was placed in REUSE.md and is referenced from the skill. - Installer: no change needed —
install_skills.pyauto-discoversskills/*/SKILL.mddirs (line 69). Ran it:felhom-app-catalog junction -> E:\git\felhom.eu\skills\felhom-app-catalog. - Fresh-session discovery:
claude -p "List your custom skills…"→ all 4 listed (felhom-app-catalog,felhom-build-deploy,felhom-testing,felhom-ui-design).
Two verified facts the exercise added to the knowledge base
- Probe-container naming (REUSE.md row, new): the controller-side
healthcheck.checks[]probe dials the container named EXACTLY like the stack dir; fallback = first running prefix-match — in a multi-container stack that can be the DB. Convention: exposed service'scontainer_name= stack name (vaultwarden/rallly already comply; sparkyfitness now does). - BusyBox
ashcommand -vtakes ONE argument —command -v wget curl node python3reported "wget only" in both SparkyFitness images while per-tool runs showed curl (and node in the server) present. The skill's inspect command is a per-tool loop for this reason.
SparkyFitness — markers resolved by inspection (no more VERIFY-BEFORE-FINALIZE)
| Image (both tags RESOLVE) | wget | curl | node | python3 | Family chosen |
|---|---|---|---|---|---|
codewithcj/sparkyfitness:v0.17.2 (nginx SPA) |
/usr/bin/wget | /usr/bin/curl | no | no | BusyBox-wget --spider :80/ (kept — most common family) |
codewithcj/sparkyfitness_server:v0.17.2 (Node) |
/usr/bin/wget | /usr/bin/curl | /usr/local/bin/node v24.17.0 | no | node-exec HTTP GET :3010/api/health status<400 (real status check, kept) |
/api/health existence proven live: {"status":"UP"}. mem_limit arithmetic verified:
512 (db) + 1024 (server) + 256 (frontend) = 1792M = the .felhom.yml value (comment added).
Live validation (method stated per claim)
SparkyFitness was ALREADY deployed on demo from the draft (4 h prior, three containers healthy) —
so the live action was applying the FINALIZED template: "Sablonok frissítése" then the card's
"Frissítés", both clicked in the real dashboard via the browser bridge (claude-in-chrome).
Compose recreated only the renamed frontend (sparkyfitness, healthy in 21 s); server + db
untouched (Up 4 h) → the two data_key secrets were NOT regenerated, as required. Verifications:
git-sync file content, docker ps, /api/health, traefik Host-header curl (200), and
GET /api/stacks/sparkyfitness (the endpoint the UI polls) — controller probe verdict
healthy: true, http :80/ → 200 (6ms) against the renamed container. Kept deployed (7.3 option A;
expendable demo box, real catalog app).
App-count reconciliation (recorded, NOT fixed)
Real catalog: 53 templates. Website gyik.html claims "több mint 45" (true but lagging);
alkalmazasok.html per-category app-count spans sum 49 ≠ 53. Website fixes are
felhom-ui-design + site_gates.py territory — separate task.
Observations (not acted on)
- The controller UI card and
docker psagreed throughout; the probe's DEBUG-level per-stack log lines are invisible at INFO — theGET /api/stacks/<name>endpoint is the reliable verdict source for validation. paperless-ngx's containers (paperless-webserver…) match NEITHER the exact-name nor the prefix fallback of its stack namepaperless-ngx— its controller-side probe likely never runs (silently "skipped no container"). Candidate follow-up: rename or add a probe-container hint; NOT touched here.- The pre-rename fallback DID probe the right container on demo (probe was green before the update) — the rename converts order-dependent luck into the deterministic convention.