Files
stack/infra/traefik/certs/homelab.key
kert 8bd649d9ab feat: skinny packages, tree reorg, cloud abstraction (refs #182–#201)
P23 — Skinny Packages:
- Break conf→bib circular dependency with lazy guarded import
- Extract aco.table.base → conf.table_base (shared foundation)
- Add try/except ImportError guards on all cross-module imports
- Define per-module optional-dependencies in pyproject.toml
- Slim base deps to just pydantic; all heavy deps in optional groups
- Add gen_config.py --check validation for module/dep sync
- Add skinny-install CI matrix job (tests each extra in isolation)

P24 — Tree Reorganization:
- Move service configs to infra/ (traefik, coredns, grafana, etc.)
- Consolidate Dockerfiles under infra/images/
- Move styles/ → assets/css/ + assets/icons/ + assets/nature.py
- Update compose.yml, stack.toml, gen_config.py, all backend emitters
- Update bootstrap scripts and install_certs.sh

P25 — Cloud Provider Abstraction:
- Add cloud/ directory with self-hosted, aws, gcp, azure stubs
- Add cloud contexts (aws, gcp, azure) to stack.toml
- Add conf/storage.py — get_filesystem() dispatches per context
- Add aws, gcp, azure optional dependency groups
- Document service mapping for each provider

All 11955 tests pass. Zero functionality lost.
2026-03-24 15:00:26 -04:00

29 lines
1.7 KiB
Plaintext

-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDkyZZrB/IUL2E/
BgEXM8uRMgV9P59wuz+m4FIZL4Zr6jUdVX0gyqchDxipyq3EoOHMEg4OHK75z/rr
hIFqesXg+GML3qd8s+t8LJ9d2BDd2mvr4pQXf9jvBFd+rxJr8thAlyjDkRWtpnaX
3jRS5U0YcxXXMzji6+ENYkFyM2J3km9tEloj1hv69gFVCM79XjYfId2pLcIKkU4z
v+kZ9VesWsQs4BBKArlyCNOO4/emn8h6ezo6w501AKeold9cRt7NpUXA9a5eR+Xj
AzyAc0nMeoDZ7CCnyUwxHZMMyeNuxgi8BHq92cL4b2G7CQKKlqvP349uzPo8TBee
tr/VVlhJAgMBAAECggEAQAo/XPFJ7SWAAnyjRIPeiONoDvGGpy76t7LVuDAJ394c
hPv/fPTMyF+p5ykQ79earJ0nKwMTZWC2m0MpWI1KI1lTnCh0WF8iXM0+xK1stzTi
/ZGcI2HJbsoX1aGatfWxW48UPX24hDVyv7rWiZeet2fLZsPzOe2NvsnQiO9iMhaX
MmQMmRJP/0XowQwELyms3HjZw4XTP2jj6DuuHBVmx5XSCrb0yVjeJmQDI4aArnru
GaW7zo4sRrGQCGbiVV451JyTEP5NQsOKVrPOuW9fn+2f2m7Xf9j3wqu85BPaIij8
EdHYIp7yxgHWc/k4IGdaNEsLnnfMZDZN0AeTQtY/awKBgQD14/+AQbmnXY0zAq05
d2k6UW2sLWBZelVv0ncc2L+WFNxYqpUBecB4NQhZ8O3EB7r8pI9f2wA3ZAJXkSWS
/gbMEzsXu3DUIRisKSNVoWsgi79KjwZkZtTFveNwwHwawNfJd7afymNKJ11BYw4F
LM2PCGzDgDbLi3UA85bIuU1ZNwKBgQDuMZQW+++24vogm9lEjZXddL5wpz5UY1MF
1iEnTSQ3bdt2zFUK8Zan0aLAgGquqdGtM/lpPFo2lksa1Q/thom2LhOF2q99Jn09
gSitzF2Sne1c59dT36dIMb4dIyH/KPxDCZUFJt9Rf6s/5+W4fvwzXtSL7TMDHZ/u
Nv+u2BSafwKBgBhU0FKLrmhOTIuQpz15gHMh3Z1c/By+ize+dsTm+cZLGCa58nar
6oy6irIDsjNkpG8dhYZxsErK3aR2m2Y5Nsj42i8WACstfziB9Zoil+wnh+1Dy9kh
h8ptaNUeZulqza+E5hBXwY1z6blvqNKARXLy3XhW9pUbnp9Se0gvdeTvAoGARwHO
pN9sAbg+WpQ7O919bKxNzWV+BkgpytafwYiUoFWGlC6rt3x3rgWnn/1oUDNdx2V0
F7QfLKC3OQOFIQj3arDnrwKXSBa+RSSIzO7cgkXEKesPXPiSdMonY6ZCjz9XnGBx
5TxGXJRTp9RovgxVALdnY2NNzsL5F1mb9TKDSd8CgYBKl/cyqUQ/f9MiMdKYgnmb
t0MfoAbma5kXgvD0hlXbZU+bSm9eMl1LjrieKO7kxtdTrROrArqPbQelRrdulx+o
o4A4JWgJoY+g6TlSId3pX0bIvW+Wqp/ym97mN5tGCW0o2BwS/5S8ehRPcWyaO7zO
QtWyxoW/UNn95YJceRp7xg==
-----END PRIVATE KEY-----