- Replace MinIO + Chrome with SeaweedFS (S3) + bucket init container
- Update Reactive Resume to v5 config (S3_* env vars, APP_URL, AUTH_SECRET)
- Fix Kiwix: smaller ZIM download, graceful fallback on failure, start_period
- Fix Apple Health: use InfluxDB ping() instead of deprecated ready()
- Remove stale RESUME_CHROME_TOKEN and RESUME_REFRESH_TOKEN_SECRET
- Add .yamllint config to relax line-length for compose template
- Update validate-all.sh to use local yamllint config and new image refs
- Update unit tests for createbucket service (replaces chrome)
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Add Reactive Resume, Metrics, Kiwix, Resume Matcher, and Apple Health
from the earlier SelfStack project. Rewrite Apple Health collector to
use InfluxDB v2 with proper error handling. Update all tests, scripts,
Homepage config, env template, and documentation for the expanded stack.
New services:
- Reactive Resume (4016) + Postgres/Minio/Chrome companions
- Metrics (4021) - GitHub metrics visualization
- Kiwix (4022) - offline wiki reader
- Resume Matcher (4023) - AI resume screening
- Apple Health (4024) - health data collector → InfluxDB v2
Also adds git policy to AGENTS.md: always commit and push automatically.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Unit tests (test_env_validation.sh):
- Validate docker-compose.yml.template has all 16 services
- Verify every exposed service has healthcheck, restart policy, labels
- Verify Dockhand routes through socket proxy (not direct mount)
- Verify only docker-socket-proxy mounts /var/run/docker.sock
- Validate demo.env.template has all 28 required variables
- Verify all port values are in 4000-4099 range
- Verify Homepage and Grafana config files exist
- Verify all scripts use strict mode (set -euo pipefail)
- 53 assertions, all passing
Integration tests (test_service_communication.sh):
- Remove || true suppression on test failures
- Add require_stack_running guard with clear error message
- Add test for Dockhand proxy integration (DOCKER_HOST env check)
- Add network isolation test (container count on network)
- Proper pass/fail counting with exit code
Previous unit test was a tautology (id -u == id -u) that could
never fail. Previous integration tests suppressed all failures.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>