Files
felhom.eu/REPORT.md
T

4.9 KiB
Raw Blame History

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 15cdf7bc7490f7 (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-catalog REUSE.md §12 / 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.py auto-discovers skills/*/SKILL.md dirs (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

  1. 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's container_name = stack name (vaultwarden/rallly already comply; sparkyfitness now does).
  2. BusyBox ash command -v takes ONE argumentcommand -v wget curl node python3 reported "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 ps agreed throughout; the probe's DEBUG-level per-stack log lines are invisible at INFO — the GET /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 name paperless-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.