cloudfall 0.8.0rc14__tar.gz → 0.8.0rc15__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/PKG-INFO +1 -1
  2. cloudfall-0.8.0rc15/docs/decisions/2026-11-02-isolation-without-containers.md +155 -0
  3. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/decisions.md +8 -0
  4. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/pyproject.toml +1 -1
  5. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/.ansible-lint +0 -0
  6. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/.gitignore +0 -0
  7. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/ARCHITECTURE.md +0 -0
  8. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/CHANGELOG.md +0 -0
  9. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/CODE_OF_CONDUCT.md +0 -0
  10. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/CONTRIBUTING.md +0 -0
  11. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/LICENSE +0 -0
  12. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/MANIFESTO.md +0 -0
  13. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/README.md +0 -0
  14. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/ROADMAP.md +0 -0
  15. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/SECURITY.md +0 -0
  16. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/Taskfile.yml +0 -0
  17. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/106-enforce-manual-approval.md +0 -0
  18. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/113-component-build-validation.md +0 -0
  19. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/114-refuse-node-runtimes.md +0 -0
  20. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/115-component-build-steps.md +0 -0
  21. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/116-converge-one-domain.md +0 -0
  22. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/117-domains-apply.md +0 -0
  23. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/118-domains-observe.md +0 -0
  24. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/119-release-command.md +0 -0
  25. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/120-release-command-plan.md +0 -0
  26. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/121-owned-postgresql-validation.md +0 -0
  27. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/122-owned-postgresql-converge.md +0 -0
  28. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/123-postgresql-remote-access.md +0 -0
  29. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/124-data-copy-schema.md +0 -0
  30. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/125-data-copy-preflight.md +0 -0
  31. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/126-source-schema-checks.md +0 -0
  32. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/140-scram-verifier.md +0 -0
  33. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/143-audit-remote-access.md +0 -0
  34. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/144-pg-hba-reload-and-names.md +0 -0
  35. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/151-keep-hand-made-unit.md +0 -0
  36. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/159-domain-routes-validation.md +0 -0
  37. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/160-release-approve.md +0 -0
  38. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/161-command-health-check-schema.md +0 -0
  39. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/162-domain-routes-render.md +0 -0
  40. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/164-command-health-gate.md +0 -0
  41. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/165-migrate-approval-pause.md +0 -0
  42. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/166-command-check-restart-rollback-health.md +0 -0
  43. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/173-preflight-extension-arrays.md +0 -0
  44. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/174-no-templating-config-values.md +0 -0
  45. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/181-catalog-inputs-as-data.md +0 -0
  46. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/183-migrate-observations-missing.md +0 -0
  47. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/89-ci-deploy-guide.md +0 -0
  48. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/90-domain-upstream-early.md +0 -0
  49. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/96-healthcheck-none.md +0 -0
  50. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/97-stale-proposals.md +0 -0
  51. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/changelog.d/README.md +0 -0
  52. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/README.md +0 -0
  53. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/alert-rules/postgresql-down.yaml +0 -0
  54. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/applications/crm.yaml +0 -0
  55. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/components/crm-backend.yaml +0 -0
  56. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/domains/crm-site.yaml +0 -0
  57. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/logging-stacks/operations.yaml +0 -0
  58. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/operator-policies/production.yaml +0 -0
  59. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/server-types/debian-application.yaml +0 -0
  60. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/servers/h1.yaml +0 -0
  61. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/servers/h2.yaml +0 -0
  62. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/services/postgresql-main.yaml +0 -0
  63. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/services/redis-cache.yaml +0 -0
  64. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/examples/ssh-public-keys/example-admin.yaml +0 -0
  65. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/agent-investigation.schema.json +0 -0
  66. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/alert-rule.schema.json +0 -0
  67. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/application.schema.json +0 -0
  68. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/artifact.schema.json +0 -0
  69. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/backup-receipt.schema.json +0 -0
  70. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/common.schema.json +0 -0
  71. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/component.schema.json +0 -0
  72. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/deployment-receipt.schema.json +0 -0
  73. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/domain.schema.json +0 -0
  74. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/environment-receipt.schema.json +0 -0
  75. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/logging-stack.schema.json +0 -0
  76. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/observed-domain.schema.json +0 -0
  77. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/observed-server.schema.json +0 -0
  78. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/operation-decision.schema.json +0 -0
  79. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/operation.schema.json +0 -0
  80. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/operator-policy.schema.json +0 -0
  81. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/operator-proposal.schema.json +0 -0
  82. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/release-approval.schema.json +0 -0
  83. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/release-receipt.schema.json +0 -0
  84. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/server-type.schema.json +0 -0
  85. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/server.schema.json +0 -0
  86. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/service.schema.json +0 -0
  87. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/schemas/v1/ssh-public-key.schema.json +0 -0
  88. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/invalid/missing-server/applications/crm.yaml +0 -0
  89. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/invalid/missing-server/components/crm-backend.yaml +0 -0
  90. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/invalid/missing-server/server-types/debian-application.yaml +0 -0
  91. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/invalid/missing-server/servers/h1.yaml +0 -0
  92. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/invalid/schema/components/component-unknown-field.yaml +0 -0
  93. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/observed/compliant/h1.json +0 -0
  94. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/config/tests/observed/compliant/h2.json +0 -0
  95. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/README.md +0 -0
  96. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/.gitignore +0 -0
  97. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/ansible.cfg +0 -0
  98. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/inventories/production/hosts.yml +0 -0
  99. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/converge.yml +0 -0
  100. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/disk-report.yml +0 -0
  101. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/journal-vacuum.yml +0 -0
  102. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/postgresql-reinit.yml +0 -0
  103. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/postgresql-restart.yml +0 -0
  104. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/service-logs.yml +0 -0
  105. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/operations/shop-logrotate.yml +0 -0
  106. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/disk-report.yml +0 -0
  107. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/journal-vacuum.yml +0 -0
  108. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/postgresql-reinit.yml +0 -0
  109. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/postgresql-restart.yml +0 -0
  110. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/postgresql.yml +0 -0
  111. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/service-logs.yml +0 -0
  112. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/shop-logrotate.yml +0 -0
  113. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/playbooks/shop.yml +0 -0
  114. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/disk-report-20261008170744.diff +0 -0
  115. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/disk-report-20261008170744.json +0 -0
  116. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/journal-vacuum-20261008171016.diff +0 -0
  117. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/journal-vacuum-20261008171016.json +0 -0
  118. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/postgresql-reinit-20261008171010.diff +0 -0
  119. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/postgresql-reinit-20261008171010.json +0 -0
  120. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/postgresql-restart-20261008170624.diff +0 -0
  121. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/postgresql-restart-20261008170624.json +0 -0
  122. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170612.diff +0 -0
  123. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170612.json +0 -0
  124. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170740.diff +0 -0
  125. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170740.json +0 -0
  126. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170742.diff +0 -0
  127. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170742.json +0 -0
  128. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170838.diff +0 -0
  129. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170838.json +0 -0
  130. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170920.diff +0 -0
  131. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/service-logs-20261008170920.json +0 -0
  132. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/shop-logrotate-20261008170752.diff +0 -0
  133. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full/shop-logrotate-20261008170752.json +0 -0
  134. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/disk-report-20261008204348.diff +0 -0
  135. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/disk-report-20261008204348.json +0 -0
  136. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/disk-report-20261008204421.diff +0 -0
  137. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/disk-report-20261008204421.json +0 -0
  138. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/postgresql-restart-20261008204358.diff +0 -0
  139. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/postgresql-restart-20261008204358.json +0 -0
  140. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/shop-logrotate-20261008204351.diff +0 -0
  141. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/recordings/disk-full-approved/shop-logrotate-20261008204351.json +0 -0
  142. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/scenario/break.yml +0 -0
  143. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/incident/site.yml +0 -0
  144. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/pyproject.toml +0 -0
  145. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/src/cloudfall_demo/__init__.py +0 -0
  146. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/src/cloudfall_demo/server.py +0 -0
  147. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/src/cloudfall_demo/static/evaluation.json +0 -0
  148. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/src/cloudfall_demo/static/index.html +0 -0
  149. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/tests/test_demo.py +0 -0
  150. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/demo/uv.lock +0 -0
  151. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/ansible-context.md +0 -0
  152. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/assets/logo.svg +0 -0
  153. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/availability-design.md +0 -0
  154. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/brownfield-design.md +0 -0
  155. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/ci-deploy-guide.md +0 -0
  156. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/decisions/2026-09-14-no-ansible-replacement.md +0 -0
  157. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/decisions/2026-09-14-no-nixos-base.md +0 -0
  158. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/decisions/2026-09-14-no-rust-rewrite.md +0 -0
  159. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/fleet-goals.md +0 -0
  160. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/getting-started.md +0 -0
  161. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/hybrid-storage-design.md +0 -0
  162. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/images/demo.png +0 -0
  163. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/landscape.md +0 -0
  164. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/logging-service-guide.md +0 -0
  165. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/neon-migration-guide.md +0 -0
  166. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/new-server-storage-guide.md +0 -0
  167. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/operator-guide.md +0 -0
  168. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/product.md +0 -0
  169. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-debian-container-m1.md +0 -0
  170. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-dns-cutover.md +0 -0
  171. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-guided-data-migration.md +0 -0
  172. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-hetzner-m1.md +0 -0
  173. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-hetzner-m2-m3.md +0 -0
  174. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-hetzner-m4-m5.md +0 -0
  175. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-08-render-cutover.md +0 -0
  176. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-10-hetzner-m7.md +0 -0
  177. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-10-hetzner-m8.md +0 -0
  178. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-10-hetzner-m9.md +0 -0
  179. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-09-11-hetzner-m10.md +0 -0
  180. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/proving-runs/2026-10-08-disk-full-agent.md +0 -0
  181. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/render-migration-guide.md +0 -0
  182. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/secrets-guide.md +0 -0
  183. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/001-stale-proposals.md +0 -0
  184. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/002-component-build-steps.md +0 -0
  185. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/003-domain-routes.md +0 -0
  186. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/004-domains-apply.md +0 -0
  187. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/005-release-command.md +0 -0
  188. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/006-standalone-postgresql.md +0 -0
  189. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/007-data-copy-schemas.md +0 -0
  190. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/008-enforce-manual-approval.md +0 -0
  191. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/docs/specs/009-command-health-check.md +0 -0
  192. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/README.md +0 -0
  193. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/ansible.cfg +0 -0
  194. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/backup.yml +0 -0
  195. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/baseline.yml +0 -0
  196. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/bootstrap.yml +0 -0
  197. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/data.yml +0 -0
  198. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/deploy.yml +0 -0
  199. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/domains-observe.yml +0 -0
  200. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/domains.yml +0 -0
  201. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/health.yml +0 -0
  202. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/inspect.yml +0 -0
  203. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/logging.yml +0 -0
  204. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/restart.yml +0 -0
  205. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/rollback.yml +0 -0
  206. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/services.yml +0 -0
  207. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/playbooks/time.yml +0 -0
  208. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_access/defaults/main.yml +0 -0
  209. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_access/handlers/main.yml +0 -0
  210. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_access/meta/argument_specs.yml +0 -0
  211. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_access/meta/main.yml +0 -0
  212. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_access/tasks/main.yml +0 -0
  213. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_bootstrap/defaults/main.yml +0 -0
  214. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_bootstrap/meta/argument_specs.yml +0 -0
  215. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_bootstrap/meta/main.yml +0 -0
  216. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_bootstrap/tasks/main.yml +0 -0
  217. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_data_migration/defaults/main.yml +0 -0
  218. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_data_migration/meta/argument_specs.yml +0 -0
  219. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_data_migration/meta/main.yml +0 -0
  220. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_data_migration/tasks/main.yml +0 -0
  221. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/defaults/main.yml +0 -0
  222. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/meta/argument_specs.yml +0 -0
  223. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/meta/main.yml +0 -0
  224. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/command_health_check.yml +0 -0
  225. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/health.yml +0 -0
  226. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/health_gate.yml +0 -0
  227. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/main.yml +0 -0
  228. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/release_command.yml +0 -0
  229. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/release_receipt.yml +0 -0
  230. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/restart.yml +0 -0
  231. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/tasks/rollback.yml +0 -0
  232. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_deploy/templates/component.service.j2 +0 -0
  233. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/defaults/main.yml +0 -0
  234. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/handlers/main.yml +0 -0
  235. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/meta/argument_specs.yml +0 -0
  236. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/meta/main.yml +0 -0
  237. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/tasks/main.yml +0 -0
  238. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_firewall/templates/nftables.conf.j2 +0 -0
  239. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_inspect/defaults/main.yml +0 -0
  240. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_inspect/meta/argument_specs.yml +0 -0
  241. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_inspect/meta/main.yml +0 -0
  242. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_inspect/tasks/main.yml +0 -0
  243. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/defaults/main.yml +0 -0
  244. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/handlers/main.yml +0 -0
  245. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/meta/argument_specs.yml +0 -0
  246. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/meta/main.yml +0 -0
  247. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/tasks/main.yml +0 -0
  248. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/alertmanager-defaults.j2 +0 -0
  249. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/alertmanager.yaml.j2 +0 -0
  250. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/grafana.ini.j2 +0 -0
  251. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/loki-datasource.yml.j2 +0 -0
  252. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/loki-systemd-override.conf.j2 +0 -0
  253. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/loki.yaml.j2 +0 -0
  254. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/nginx-loki-gateway.conf.j2 +0 -0
  255. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/prometheus-datasource.yml.j2 +0 -0
  256. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/prometheus-defaults.j2 +0 -0
  257. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/prometheus-rules.yaml.j2 +0 -0
  258. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_backend/templates/prometheus.yaml.j2 +0 -0
  259. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/defaults/main.yml +0 -0
  260. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/handlers/main.yml +0 -0
  261. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/meta/argument_specs.yml +0 -0
  262. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/meta/main.yml +0 -0
  263. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/tasks/main.yml +0 -0
  264. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/templates/alloy-systemd-override.conf.j2 +0 -0
  265. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_logging_collector/templates/config.alloy.j2 +0 -0
  266. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/defaults/main.yml +0 -0
  267. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/handlers/main.yml +0 -0
  268. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/meta/argument_specs.yml +0 -0
  269. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/meta/main.yml +0 -0
  270. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/tasks/apply_virtual_host.yml +0 -0
  271. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/tasks/main.yml +0 -0
  272. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/tasks/static_access.yml +0 -0
  273. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_nginx_site/templates/domain-site.conf.j2 +0 -0
  274. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/defaults/main.yml +0 -0
  275. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/handlers/main.yml +0 -0
  276. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/meta/argument_specs.yml +0 -0
  277. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/meta/main.yml +0 -0
  278. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/tasks/main.yml +0 -0
  279. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/tasks/owner_password.yml +0 -0
  280. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/backup.service.j2 +0 -0
  281. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/backup.sh.j2 +0 -0
  282. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/backup.timer.j2 +0 -0
  283. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/cloudfall.conf.j2 +0 -0
  284. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/pg_hba-remote-access.j2 +0 -0
  285. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/restore-check.service.j2 +0 -0
  286. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/restore-check.sh.j2 +0 -0
  287. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_postgresql/templates/restore-check.timer.j2 +0 -0
  288. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/defaults/main.yml +0 -0
  289. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/handlers/main.yml +0 -0
  290. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/meta/argument_specs.yml +0 -0
  291. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/meta/main.yml +0 -0
  292. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/tasks/main.yml +0 -0
  293. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/backup.service.j2 +0 -0
  294. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/backup.sh.j2 +0 -0
  295. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/backup.timer.j2 +0 -0
  296. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/cloudfall.conf.j2 +0 -0
  297. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/restore-check.service.j2 +0 -0
  298. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/restore-check.sh.j2 +0 -0
  299. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_redis/templates/restore-check.timer.j2 +0 -0
  300. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_time/defaults/main.yml +0 -0
  301. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_time/meta/argument_specs.yml +0 -0
  302. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_time/meta/main.yml +0 -0
  303. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_time/tasks/main.yml +0 -0
  304. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_unattended_upgrades/defaults/main.yml +0 -0
  305. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_unattended_upgrades/meta/argument_specs.yml +0 -0
  306. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_unattended_upgrades/meta/main.yml +0 -0
  307. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/ansible/roles/cloudfall_unattended_upgrades/tasks/main.yml +0 -0
  308. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/__init__.py +0 -0
  309. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/__main__.py +0 -0
  310. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/ansible_inventory.py +0 -0
  311. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/artifact.py +0 -0
  312. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/cli.py +0 -0
  313. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/playbook.py +0 -0
  314. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/src/cloudfall_engine/py.typed +0 -0
  315. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/ansible-inventory.json +0 -0
  316. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/h1/nftables.conf +0 -0
  317. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/h1/postgresql-main/backup.sh +0 -0
  318. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/h1/postgresql-main/cloudfall.conf +0 -0
  319. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/h1/postgresql-main/restore-check.sh +0 -0
  320. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/examples/h2/nftables.conf +0 -0
  321. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/nginx-site/http-1.22.1.conf +0 -0
  322. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/nginx-site/http-1.26.3.conf +0 -0
  323. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/nginx-site/tls-1.22.1.conf +0 -0
  324. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/golden/nginx-site/tls-1.26.3.conf +0 -0
  325. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_ansible_inventory.py +0 -0
  326. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_artifact_build_steps.py +0 -0
  327. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_artifact_builder.py +0 -0
  328. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_command_health_gate.py +0 -0
  329. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_data_migration_role.py +0 -0
  330. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_deploy_role.py +0 -0
  331. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_deploy_templates.py +0 -0
  332. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_domains_certificate.py +0 -0
  333. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_domains_one_domain.py +0 -0
  334. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_domains_playbook.py +0 -0
  335. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_examples_render_unchanged.py +0 -0
  336. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_firewall_templates.py +0 -0
  337. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_logging_templates.py +0 -0
  338. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_nginx_site_role.py +0 -0
  339. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_nginx_site_routes.py +0 -0
  340. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_nginx_site_templates.py +0 -0
  341. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_playbook.py +0 -0
  342. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_postgresql_owner_role.py +0 -0
  343. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_postgresql_remote_access.py +0 -0
  344. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_postgresql_templates.py +0 -0
  345. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_release_command.py +0 -0
  346. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_services_passwords.py +0 -0
  347. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_time_role.py +0 -0
  348. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/engine/tests/test_unsafe_config_values.py +0 -0
  349. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/.gitignore +0 -0
  350. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/README.md +0 -0
  351. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/ansible.cfg +0 -0
  352. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/inventories/production/hosts.yml +0 -0
  353. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/converge.yml +0 -0
  354. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/disk-report.yml +0 -0
  355. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/journal-vacuum.yml +0 -0
  356. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/postgresql-reinit.yml +0 -0
  357. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/postgresql-restart.yml +0 -0
  358. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/service-logs.yml +0 -0
  359. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/operations/shop-logrotate.yml +0 -0
  360. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/disk-report.yml +0 -0
  361. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/journal-vacuum.yml +0 -0
  362. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/postgresql-reinit.yml +0 -0
  363. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/postgresql-restart.yml +0 -0
  364. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/postgresql.yml +0 -0
  365. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/service-logs.yml +0 -0
  366. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/shop-logrotate.yml +0 -0
  367. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/playbooks/shop.yml +0 -0
  368. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/disk-report-20261008170744.diff +0 -0
  369. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/disk-report-20261008170744.json +0 -0
  370. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/journal-vacuum-20261008171016.diff +0 -0
  371. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/journal-vacuum-20261008171016.json +0 -0
  372. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/postgresql-reinit-20261008171010.diff +0 -0
  373. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/postgresql-reinit-20261008171010.json +0 -0
  374. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/postgresql-restart-20261008170624.diff +0 -0
  375. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/postgresql-restart-20261008170624.json +0 -0
  376. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170612.diff +0 -0
  377. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170612.json +0 -0
  378. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170740.diff +0 -0
  379. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170740.json +0 -0
  380. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170742.diff +0 -0
  381. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170742.json +0 -0
  382. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170838.diff +0 -0
  383. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170838.json +0 -0
  384. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170920.diff +0 -0
  385. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/service-logs-20261008170920.json +0 -0
  386. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/shop-logrotate-20261008170752.diff +0 -0
  387. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full/shop-logrotate-20261008170752.json +0 -0
  388. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/disk-report-20261008204348.diff +0 -0
  389. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/disk-report-20261008204348.json +0 -0
  390. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/disk-report-20261008204421.diff +0 -0
  391. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/disk-report-20261008204421.json +0 -0
  392. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/postgresql-restart-20261008204358.diff +0 -0
  393. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/postgresql-restart-20261008204358.json +0 -0
  394. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/shop-logrotate-20261008204351.diff +0 -0
  395. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/recordings/disk-full-approved/shop-logrotate-20261008204351.json +0 -0
  396. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/scenario/break.yml +0 -0
  397. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/disk-full-incident/site.yml +0 -0
  398. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/README.md +0 -0
  399. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/pyproject.toml +0 -0
  400. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/render.yaml +0 -0
  401. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/src/demo/__init__.py +0 -0
  402. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/src/demo/asgi.py +0 -0
  403. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/examples/render-demo/uv.lock +0 -0
  404. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/README.md +0 -0
  405. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/__init__.py +0 -0
  406. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/__main__.py +0 -0
  407. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/agent_server.py +0 -0
  408. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/agent_tools.py +0 -0
  409. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/ansible_api.py +0 -0
  410. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/ansible_data.py +0 -0
  411. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/ansible_reader.py +0 -0
  412. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/app.py +0 -0
  413. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/audit.py +0 -0
  414. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/authoring.py +0 -0
  415. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/callback_plugins/__init__.py +0 -0
  416. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/callback_plugins/cloudfall_host_stats.py +0 -0
  417. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/catalog.py +0 -0
  418. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/cli.py +0 -0
  419. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/commands.py +0 -0
  420. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/cutover.py +0 -0
  421. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/dashboard.py +0 -0
  422. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/dashboard_server.py +0 -0
  423. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/decision.py +0 -0
  424. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/domain.py +0 -0
  425. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/importer.py +0 -0
  426. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/inventory.py +0 -0
  427. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/investigation.py +0 -0
  428. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/lifecycle.py +0 -0
  429. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/migrate.py +0 -0
  430. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/observation.py +0 -0
  431. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/observe.py +0 -0
  432. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/operations.py +0 -0
  433. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/operator.py +0 -0
  434. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/project.py +0 -0
  435. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/py.typed +0 -0
  436. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/recording.py +0 -0
  437. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/release_approval.py +0 -0
  438. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/render_api.py +0 -0
  439. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/resources.py +0 -0
  440. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/secrets.py +0 -0
  441. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/service_evidence.py +0 -0
  442. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/validation.py +0 -0
  443. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/src/cloudfall/why.py +0 -0
  444. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_agent_server.py +0 -0
  445. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_ansible_reader.py +0 -0
  446. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_app.py +0 -0
  447. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_arguments.py +0 -0
  448. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_audit.py +0 -0
  449. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_authoring.py +0 -0
  450. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_catalog.py +0 -0
  451. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_command_health_check.py +0 -0
  452. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_commands.py +0 -0
  453. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_component_build_validation.py +0 -0
  454. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_cutover.py +0 -0
  455. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_dashboard_server.py +0 -0
  456. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_data_copy_preflight.py +0 -0
  457. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_data_migration.py +0 -0
  458. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_decision.py +0 -0
  459. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_deploy_approval.py +0 -0
  460. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_domain_routes.py +0 -0
  461. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_domains_apply.py +0 -0
  462. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_domains_converge.py +0 -0
  463. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_domains_observe.py +0 -0
  464. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_host_stats.py +0 -0
  465. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_importer.py +0 -0
  466. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_inventory.py +0 -0
  467. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_investigation.py +0 -0
  468. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_lifecycle.py +0 -0
  469. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_migrate.py +0 -0
  470. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_migrate_approval.py +0 -0
  471. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_observe.py +0 -0
  472. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_operations_dashboard.py +0 -0
  473. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_operator.py +0 -0
  474. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_owned_postgresql.py +0 -0
  475. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_owned_postgresql_converge.py +0 -0
  476. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_project.py +0 -0
  477. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_release_approval.py +0 -0
  478. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_release_command_plan.py +0 -0
  479. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_render_api.py +0 -0
  480. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_resources.py +0 -0
  481. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_secrets.py +0 -0
  482. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_service_evidence.py +0 -0
  483. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_stale.py +0 -0
  484. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_validation.py +0 -0
  485. {cloudfall-0.8.0rc14 → cloudfall-0.8.0rc15}/sdk/tests/test_why.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: cloudfall
3
- Version: 0.8.0rc14
3
+ Version: 0.8.0rc15
4
4
  Summary: The operator's record for self-hosted servers run by an AI agent: Ansible executes, Cloudfall gates, verifies and keeps the receipts
5
5
  Project-URL: Homepage, https://cloudfall.dev
6
6
  Project-URL: Repository, https://github.com/cloudfall-dev/cloudfall
@@ -0,0 +1,155 @@
1
+ # Decision: isolation without containers or self-run VMs
2
+
3
+ Date: 2026-11-02. Status: decided, revisit on the triggers listed below.
4
+
5
+ ## Question
6
+
7
+ How does Cloudfall keep components, runners and environments apart, and does
8
+ that need containers or virtual machines it runs itself?
9
+
10
+ ## Decision
11
+
12
+ No containers and no hypervisor of Cloudfall's own. Isolation has two
13
+ boundaries:
14
+
15
+ - **Inside a server**, the boundary is the systemd sandbox of each unit, a
16
+ database role per component, and cgroup limits. This is required on every
17
+ server
18
+ - **Between trust levels**, the stronger boundary is a separate server: its
19
+ own kernel. A VPS counts as a server; its hypervisor belongs to the
20
+ provider, not to Cloudfall. This is recommended, not required
21
+
22
+ A team may run everything on one server, several independent projects
23
+ included, when it accepts the shared-kernel risk. The acceptance is declared
24
+ in the plan, never implied: Cloudfall warns about a placement that puts two
25
+ trust levels on one server unless the plan declares it.
26
+
27
+ A separate Unix user per component is necessary but is not a boundary on its
28
+ own.
29
+
30
+ ## Why a Unix user is not enough
31
+
32
+ A user keeps files and signals apart. It does not stop:
33
+
34
+ - a local privilege escalation in the shared kernel, which reaches every
35
+ component on the host
36
+ - a database, cache or queue on localhost that trusts every local user, or
37
+ that components share one account of
38
+ - membership in the `docker` group or a broad sudo rule, either of which is
39
+ root
40
+ - a runner that executes code from a pull request or a compromised
41
+ dependency, which gets every key the runner holds; the keys, not the uid,
42
+ set the blast radius
43
+ - reading other processes' command lines in `/proc`, world-readable home
44
+ directories, and one component exhausting memory, disk or processes for
45
+ the rest
46
+
47
+ ## Why not containers
48
+
49
+ Docker and Podman isolate with the same kernel mechanisms systemd exposes
50
+ directly: namespaces, cgroups, seccomp and capabilities. A container shares
51
+ the kernel exactly as a sandboxed unit does, so it adds no boundary. What it
52
+ adds is packaging (images, independent library versions) and a runtime to
53
+ operate. Cloudfall's base is Debian and systemd
54
+ ([`2026-09-14-no-nixos-base.md`](2026-09-14-no-nixos-base.md)), container
55
+ orchestration is a non-goal ([`../product.md`](../product.md), N-1), and the
56
+ exit test is that any Linux admin can take over a server with Debian
57
+ knowledge.
58
+
59
+ ## Why not self-run VMs
60
+
61
+ A hypervisor on Cloudfall's hosts (Proxmox, KVM, Firecracker) is a second
62
+ infrastructure layer to provision, patch, back up and explain to whoever
63
+ takes over. A separate small server gives the same kernel boundary for a
64
+ few euros a month and fits the model Cloudfall already manages.
65
+
66
+ ## The target model
67
+
68
+ The first four parts are required on every server, one server or many. The
69
+ last is a recommendation.
70
+
71
+ **Each unit is sandboxed by systemd.** The component unit gets, by default:
72
+
73
+ - its own user (or `DynamicUser=`), `NoNewPrivileges=` and an empty
74
+ `CapabilityBoundingSet=`
75
+ - `ProtectSystem=strict`, `ProtectHome=`, `PrivateTmp=`, `PrivateDevices=`,
76
+ writes only to `ReadWritePaths=` and `StateDirectory=`
77
+ - `ProtectProc=invisible`, `SystemCallFilter=@system-service`,
78
+ `RestrictNamespaces=`, `RestrictAddressFamilies=`
79
+ - `IPAddressAllow=` and `IPAddressDeny=` where the component's peers are
80
+ known
81
+ - `MemoryMax=`, `CPUQuota=`, `TasksMax=` from the component's declared
82
+ envelope ([`../fleet-goals.md`](../fleet-goals.md), goal 8)
83
+ - secrets through `LoadCredentialEncrypted=` rather than `EnvironmentFile=`,
84
+ so a value is readable by that unit only and never sits in the process
85
+ environment
86
+
87
+ `systemd-analyze security` scores a unit; a score threshold can become a
88
+ deploy gate.
89
+
90
+ **Shared services authenticate per component.** Each component gets its own
91
+ PostgreSQL role, preferably through `peer` authentication over the Unix
92
+ socket, so the unit's user is the role and no password exists. A service
93
+ without authentication is never shared between components of different
94
+ owners.
95
+
96
+ **Runners are ephemeral and sandboxed.** A runner executes untrusted code.
97
+ It runs one job per transient unit started with `systemd-run` under the same
98
+ sandbox and `DynamicUser=`, its state removed after the job, and its network
99
+ open only for the dependency step. On a server that also runs production
100
+ components, the runner's unit is also denied the production components'
101
+ directories and network peers (`InaccessiblePaths=`, `IPAddressDeny=`) and
102
+ holds no production keys. This is the most exposed point of a one-server
103
+ placement.
104
+
105
+ **Access is scoped by environment.** A runner holds the SSH and age keys of
106
+ one environment ([`../ci-deploy-guide.md`](../ci-deploy-guide.md)). Deploys
107
+ log in as a dedicated user with sudo limited to the commands a deploy runs,
108
+ not as root.
109
+
110
+ **Separate servers separate trust levels (recommended).** Where the budget
111
+ allows, these do not share a kernel:
112
+
113
+ - production and staging
114
+ - build and CI, and production; production servers then receive built
115
+ artifacts only
116
+ - components of different customers or owners
117
+
118
+ A team can only accept risk for its own projects. Placing components of
119
+ different owners on one server puts the risk on owners who did not accept
120
+ it, so Cloudfall keeps a separate, stronger warning for it. Cloudfall cannot
121
+ verify ownership, so this stays a warning, not a refusal.
122
+
123
+ ## Where Cloudfall is today
124
+
125
+ - Each component already runs as its own application user with
126
+ `NoNewPrivileges=true` and `PrivateTmp=true`
127
+ (`engine/ansible/roles/cloudfall_deploy/templates/component.service.j2`);
128
+ the rest of the sandbox is missing
129
+ - SSH keys are scoped by environment, but the baseline installs them into
130
+ root's `authorized_keys`, so a runner's key is root on every server of its
131
+ environment
132
+ - Secrets reach units through `EnvironmentFile=`
133
+ - Resource envelopes are not declared or enforced yet
134
+
135
+ ## Triggers to revisit
136
+
137
+ - **A customer needs untrusted code from several tenants on one server**,
138
+ where a separate server per tenant does not pay; then a stronger sandbox
139
+ (gVisor, microVMs) is the question, not containers
140
+ - **A required workload ships only as a container image** with no reasonable
141
+ Debian install path
142
+ - **systemd sandboxing proves insufficient** for a concrete attack that a
143
+ container runtime would have stopped
144
+
145
+ ## Consequences
146
+
147
+ - The component unit template gains the sandbox directives above as
148
+ defaults, with per-component opt-outs that are declared, not silent
149
+ - No container runtime, image build or registry appears in Cloudfall's
150
+ engine or docs as the way to isolate components
151
+ - One server is a supported placement, not a degraded one; the required
152
+ parts above carry the whole isolation there
153
+ - A plan that puts two trust levels on one server declares it as an
154
+ accepted risk; Cloudfall warns when it is undeclared, and warns again,
155
+ more strongly, when the trust levels belong to different owners
@@ -75,3 +75,11 @@ entry that supersedes it, never by editing an old one.
75
75
  - Why: psql substitutes a variable into the statement text, so ALTER ROLE ... PASSWORD with the plaintext puts the password in the server's log under log_statement ddl or all, or on a failing statement; PostgreSQL stores a pre-hashed verifier as it is
76
76
  - Applies to: engine/ansible/roles/cloudfall_postgresql/tasks/owner_password.yml, sdk/src/cloudfall/secrets.py, engine/src/cloudfall_engine/cli.py
77
77
  - Enforced by: a regression test that the staged file holds a verifier and never the password
78
+
79
+ ## D-10: Components are isolated by the systemd sandbox, and separate servers are recommended, not required
80
+
81
+ - Decided: 2026-11-02, by the maintainer; reasoning in docs/decisions/2026-11-02-isolation-without-containers.md
82
+ - Rule: On every server, components are kept apart by each unit's systemd sandbox (own user, ProtectSystem, ProtectHome, PrivateTmp, ProtectProc, SystemCallFilter, capability and address-family limits, cgroup limits), a database role per component, secrets through systemd credentials, keys scoped by environment and a non-root deploy user; runners are ephemeral sandboxed units, denied production directories, network peers and keys when they share a server with production; separate servers for different trust levels (production and staging, build or CI and production, different owners) are recommended, and a team may place everything on one server, several independent projects included, by declaring the accepted risk in the plan; Cloudfall warns about an undeclared placement of two trust levels on one server, and warns more strongly when they belong to different owners; Cloudfall adds no container runtime and no hypervisor of its own
83
+ - Why: A Unix user alone keeps only files and signals apart; containers use the same kernel mechanisms systemd exposes and add no boundary, only a runtime to operate; a separate kernel is the one stronger boundary and comes from a separate server, but requiring it would rule out the one-server teams Cloudfall serves, and a team can accept that risk for its own projects, not for other owners
84
+ - Applies to: engine/ansible/roles/cloudfall_deploy/templates/component.service.j2, engine/ansible/roles/cloudfall_access, server placement in plans, runner and CI setup
85
+ - Enforced by: review
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cloudfall"
3
- version = "0.8.0rc14"
3
+ version = "0.8.0rc15"
4
4
  description = "The operator's record for self-hosted servers run by an AI agent: Ansible executes, Cloudfall gates, verifies and keeps the receipts"
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-or-later"
File without changes
File without changes
File without changes
File without changes
File without changes