Files
stack/infra/traefik/certs/ca.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-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCfJX8NiEHu7CF
PEspA9BMEjfbjDsXfQy5GT32j/zfQkkbytNbJsLHaDa9q4j4vjYPrn48TlW3u0JY
cEkxSvYEfPvyE+4kyU+7w/BH0elHdqkiS3LyQ34VEA3OTfaAbnguFydzoWnenBy/
7TnR/fw9M8I23ZFHffoj7w7/VWj3+zx944gaXIBCiIC8vp6MkhRQGPB1ruXN9xIY
nqYFwYl0QwEA4oIaaHXEcRwZAxXUTE0JwI0CtvwUP7Iu+CUwvhqR7xIgwgU0Pi+g
VHTyOWj95lGfywqiIshhUs27IUPTFnTmtEFhHcijsuNvmmWh/xSyeGuk6BseSNWZ
hjcj4h0FAgMBAAECggEAAqjw+QtqjZPtP5AD8iQtic0dmeFijIL6r/izqGvgJI6z
0LGqltmJsI1zil2V3FsOtAigIGYPVbciEMHGYxuawVkTGjXr6rZh52vNmFAFPbJg
XQAxXAQkVQ6bP5PyRsJIVTtZpRHOS6lL0NN6+plbnb5I9XaQRIDVopxfEpS6mQuh
N/vHBnFBdQp+0dj2/MnBdOFjEBhqaCcUVs9WPbO8E6fVDcav3rioHH87Nhbyv8tK
2995yhWQ32gxevRId+Dp7ZWslksTEYukqJ2v065xaz0HiT1tZo7xEkkEkl40Ve0h
gPH+StXs6xvNxSVQ13WmwyO2UM72ZZ7+cnW9VDk4aQKBgQD2eQP6JiiTFzgzAeYu
Updj0Ti15VRtNXwppwVl+WiD7R4NdHrH8nj4kPA+Pqpg2Pu4RJqGhxo3nEojibaG
hYWUbqc6pqY9DjX6All2f7Xxw8sBrvwXBduDMuYRTJlOZML0kq9JSUT9YV8BvTmj
SNUijLkMEa7ZOUem6CFnhXxeGQKBgQDKASOz9xPcyF/Tp4pazKXBQh/EB55Dru6P
eY/avSiGiica40QnibMsnYESHaOWnD/pYPlebZqX/4A0IuvC3LhOrMtucpvq3B/6
RJy1oeWro7hkDHUFa9XsQNwLQ+msLbdp1MUd6I9kGw2g9GD4s0lrpBDfdkwvsizb
E8m/H9M7zQKBgDoRKK62bri4r7TUrbYcHy6VDBdOgCV6hFYL02nC6KysIHhrCMIy
je2BuBfyC5HljOhMwVsQWUzgtVbKCwaGToI5z4wx1thrkKvmAc25KNRcnGc5IosK
Bj1SsIFC2pttgcC9Di7l5CsN1aRDQGEHt678GFyPjfH/XLIl3jjVageBAoGBAKMf
DG+1I8rz274U2vq7q1ZGSVSJOlo5ltcxOONQQLt0MGPcBhtPbOqoPaQdXw6uGkYh
Uv3X0DDR1/tB/9QZXJPboWMNFa8wFnqIkWty0v4pdSsFjDHWhKcFMSu/qaCqQiQp
9wtR0wjpd7Xz4aKzVKShliZ9ZsRVQzed4Rp/Xpo5AoGBAK80yz5I17KG8p9ZPo0f
tCBtmM9txRTdcZTUTpbEF4/9se7+jyDFCKPhGj7JzRtAxdqt39cZmzE7HAezwM+K
OhT3nNQdqjQCZyvjSE8Ac/hefpoFsSPggZoBw1pRJol/kstILuwDrq3QkqDy/fnZ
jpPYp7yGIN5t+/mLOeB1H53A
-----END PRIVATE KEY-----