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.
29 lines
1.7 KiB
Plaintext
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-----
|