atraxis 1.0.2__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 (482) hide show
  1. atraxis-1.0.2/.dockerignore +15 -0
  2. atraxis-1.0.2/.github/workflows/browser-engine.yml +71 -0
  3. atraxis-1.0.2/.github/workflows/chain.yml +86 -0
  4. atraxis-1.0.2/.github/workflows/dockerhub.yml +83 -0
  5. atraxis-1.0.2/.github/workflows/endurance.yml +62 -0
  6. atraxis-1.0.2/.github/workflows/guided-deployment.yml +24 -0
  7. atraxis-1.0.2/.github/workflows/memory.yml +60 -0
  8. atraxis-1.0.2/.github/workflows/operator-compose.yml +170 -0
  9. atraxis-1.0.2/.github/workflows/operator-registry.yml +187 -0
  10. atraxis-1.0.2/.github/workflows/package.yml +136 -0
  11. atraxis-1.0.2/.github/workflows/prometheus.yml +61 -0
  12. atraxis-1.0.2/.github/workflows/release-candidate.yml +93 -0
  13. atraxis-1.0.2/.github/workflows/release-stable.yml +108 -0
  14. atraxis-1.0.2/.github/workflows/tests.yml +42 -0
  15. atraxis-1.0.2/.github/workflows/textual.yml +20 -0
  16. atraxis-1.0.2/.github/workflows/web.yml +43 -0
  17. atraxis-1.0.2/.gitignore +7 -0
  18. atraxis-1.0.2/.readthedocs.yaml +15 -0
  19. atraxis-1.0.2/AGENTS.md +130 -0
  20. atraxis-1.0.2/CONTRIBUTING.md +9 -0
  21. atraxis-1.0.2/Dockerfile +14 -0
  22. atraxis-1.0.2/LICENSE +232 -0
  23. atraxis-1.0.2/MANIFEST.in +26 -0
  24. atraxis-1.0.2/PKG-INFO +507 -0
  25. atraxis-1.0.2/README.md +254 -0
  26. atraxis-1.0.2/ROADMAP.md +134 -0
  27. atraxis-1.0.2/_templates/documentation-tracks.html +6 -0
  28. atraxis-1.0.2/assets/brand/README.md +70 -0
  29. atraxis-1.0.2/assets/brand/favicon/android-chrome-192x192.png +0 -0
  30. atraxis-1.0.2/assets/brand/favicon/android-chrome-512x512.png +0 -0
  31. atraxis-1.0.2/assets/brand/favicon/apple-touch-icon.png +0 -0
  32. atraxis-1.0.2/assets/brand/favicon/favicon-16x16.png +0 -0
  33. atraxis-1.0.2/assets/brand/favicon/favicon-32x32.png +0 -0
  34. atraxis-1.0.2/assets/brand/favicon/favicon-48x48.png +0 -0
  35. atraxis-1.0.2/assets/brand/favicon/favicon-64x64.png +0 -0
  36. atraxis-1.0.2/assets/brand/favicon/favicon.ico +0 -0
  37. atraxis-1.0.2/assets/brand/favicon/favicon.svg +8 -0
  38. atraxis-1.0.2/assets/brand/favicon/safari-pinned-tab.svg +4 -0
  39. atraxis-1.0.2/assets/brand/favicon/site.webmanifest +21 -0
  40. atraxis-1.0.2/assets/brand/pdf/atraxis-logo-horizontal.pdf +0 -0
  41. atraxis-1.0.2/assets/brand/pdf/atraxis-logo-stacked.pdf +0 -0
  42. atraxis-1.0.2/assets/brand/png/atraxis-logo-horizontal-1024.png +0 -0
  43. atraxis-1.0.2/assets/brand/png/atraxis-logo-horizontal-2048.png +0 -0
  44. atraxis-1.0.2/assets/brand/png/atraxis-logo-horizontal-512.png +0 -0
  45. atraxis-1.0.2/assets/brand/png/atraxis-logo-horizontal-dark-1024.png +0 -0
  46. atraxis-1.0.2/assets/brand/png/atraxis-logo-horizontal-light-1024.png +0 -0
  47. atraxis-1.0.2/assets/brand/png/atraxis-logo-mono-navy-1024.png +0 -0
  48. atraxis-1.0.2/assets/brand/png/atraxis-logo-mono-white-1024.png +0 -0
  49. atraxis-1.0.2/assets/brand/png/atraxis-logo-stacked-1024.png +0 -0
  50. atraxis-1.0.2/assets/brand/png/atraxis-logo-stacked-2048.png +0 -0
  51. atraxis-1.0.2/assets/brand/png/atraxis-logo-stacked-512.png +0 -0
  52. atraxis-1.0.2/assets/brand/png/atraxis-logo-stacked-dark-1024.png +0 -0
  53. atraxis-1.0.2/assets/brand/png/atraxis-logo-stacked-light-1024.png +0 -0
  54. atraxis-1.0.2/assets/brand/png/atraxis-symbol-1024.png +0 -0
  55. atraxis-1.0.2/assets/brand/png/atraxis-symbol-128.png +0 -0
  56. atraxis-1.0.2/assets/brand/png/atraxis-symbol-256.png +0 -0
  57. atraxis-1.0.2/assets/brand/png/atraxis-symbol-512.png +0 -0
  58. atraxis-1.0.2/assets/brand/png/atraxis-symbol-dark-1024.png +0 -0
  59. atraxis-1.0.2/assets/brand/png/atraxis-symbol-light-1024.png +0 -0
  60. atraxis-1.0.2/assets/brand/png/atraxis-wordmark-1024.png +0 -0
  61. atraxis-1.0.2/assets/brand/png/atraxis-wordmark-2048.png +0 -0
  62. atraxis-1.0.2/assets/brand/png/atraxis-wordmark-512.png +0 -0
  63. atraxis-1.0.2/assets/brand/png/atraxis-wordmark-dark-1024.png +0 -0
  64. atraxis-1.0.2/assets/brand/png/atraxis-wordmark-light-1024.png +0 -0
  65. atraxis-1.0.2/assets/brand/preview/atraxis-brand-overview.jpg +0 -0
  66. atraxis-1.0.2/assets/brand/social/atraxis-avatar-1024.png +0 -0
  67. atraxis-1.0.2/assets/brand/social/atraxis-open-graph-1200x630.png +0 -0
  68. atraxis-1.0.2/assets/brand/source/atraxis-approved.png +0 -0
  69. atraxis-1.0.2/assets/brand/source/atraxis-symbol-master.svg +60 -0
  70. atraxis-1.0.2/assets/brand/svg/atraxis-logo-horizontal-dark.svg +66 -0
  71. atraxis-1.0.2/assets/brand/svg/atraxis-logo-horizontal.svg +66 -0
  72. atraxis-1.0.2/assets/brand/svg/atraxis-logo-mono-navy.svg +11 -0
  73. atraxis-1.0.2/assets/brand/svg/atraxis-logo-mono-white.svg +11 -0
  74. atraxis-1.0.2/assets/brand/svg/atraxis-logo-stacked-dark.svg +66 -0
  75. atraxis-1.0.2/assets/brand/svg/atraxis-logo-stacked.svg +66 -0
  76. atraxis-1.0.2/assets/brand/svg/atraxis-symbol-dark.svg +59 -0
  77. atraxis-1.0.2/assets/brand/svg/atraxis-symbol-mono-navy.svg +4 -0
  78. atraxis-1.0.2/assets/brand/svg/atraxis-symbol-mono-white.svg +4 -0
  79. atraxis-1.0.2/assets/brand/svg/atraxis-symbol-small.svg +8 -0
  80. atraxis-1.0.2/assets/brand/svg/atraxis-symbol.svg +59 -0
  81. atraxis-1.0.2/assets/brand/svg/atraxis-wordmark-dark.svg +8 -0
  82. atraxis-1.0.2/assets/brand/svg/atraxis-wordmark.svg +8 -0
  83. atraxis-1.0.2/assets/brand/webp/atraxis-logo-horizontal-1024.webp +0 -0
  84. atraxis-1.0.2/assets/brand/webp/atraxis-logo-stacked-1024.webp +0 -0
  85. atraxis-1.0.2/assets/diagrams/atraxis-architecture.svg +111 -0
  86. atraxis-1.0.2/assets/diagrams/logos/LICENSE-prometheus.txt +202 -0
  87. atraxis-1.0.2/assets/diagrams/logos/README.md +15 -0
  88. atraxis-1.0.2/assets/diagrams/logos/alertmanager.svg +51 -0
  89. atraxis-1.0.2/assets/diagrams/logos/atraxis.svg +59 -0
  90. atraxis-1.0.2/assets/diagrams/logos/atropos.svg +25 -0
  91. atraxis-1.0.2/assets/diagrams/logos/auton.svg +7 -0
  92. atraxis-1.0.2/assets/diagrams/logos/certlord.svg +10 -0
  93. atraxis-1.0.2/assets/diagrams/logos/covenant.svg +8 -0
  94. atraxis-1.0.2/assets/diagrams/logos/monit-docker.svg +7 -0
  95. atraxis-1.0.2/assets/diagrams/logos/prometheus.svg +51 -0
  96. atraxis-1.0.2/atraxis/__init__.py +1 -0
  97. atraxis-1.0.2/atraxis/__main__.py +3 -0
  98. atraxis-1.0.2/atraxis/account_admin.py +140 -0
  99. atraxis-1.0.2/atraxis/account_admin_commands.py +56 -0
  100. atraxis-1.0.2/atraxis/account_backup.py +128 -0
  101. atraxis-1.0.2/atraxis/account_commands.py +98 -0
  102. atraxis-1.0.2/atraxis/account_delegation.py +182 -0
  103. atraxis-1.0.2/atraxis/account_entities.py +223 -0
  104. atraxis-1.0.2/atraxis/account_forms.py +23 -0
  105. atraxis-1.0.2/atraxis/account_json.py +88 -0
  106. atraxis-1.0.2/atraxis/account_lock.py +24 -0
  107. atraxis-1.0.2/atraxis/account_schema.py +56 -0
  108. atraxis-1.0.2/atraxis/account_search.py +68 -0
  109. atraxis-1.0.2/atraxis/account_search_textual.py +86 -0
  110. atraxis-1.0.2/atraxis/account_sqlite.py +220 -0
  111. atraxis-1.0.2/atraxis/account_storage.py +78 -0
  112. atraxis-1.0.2/atraxis/account_store.py +130 -0
  113. atraxis-1.0.2/atraxis/account_textual.py +114 -0
  114. atraxis-1.0.2/atraxis/accounts.py +147 -0
  115. atraxis-1.0.2/atraxis/administration_cli.py +43 -0
  116. atraxis-1.0.2/atraxis/cli.py +151 -0
  117. atraxis-1.0.2/atraxis/client.py +231 -0
  118. atraxis-1.0.2/atraxis/client_config.py +36 -0
  119. atraxis-1.0.2/atraxis/collection.py +77 -0
  120. atraxis-1.0.2/atraxis/config.py +194 -0
  121. atraxis-1.0.2/atraxis/configuration_admin.py +208 -0
  122. atraxis-1.0.2/atraxis/configuration_commands.py +43 -0
  123. atraxis-1.0.2/atraxis/doctor.py +199 -0
  124. atraxis-1.0.2/atraxis/installation/__init__.py +1 -0
  125. atraxis-1.0.2/atraxis/installation/deployment.py +208 -0
  126. atraxis-1.0.2/atraxis/installation/engine.py +86 -0
  127. atraxis-1.0.2/atraxis/installation/filesystem.py +124 -0
  128. atraxis-1.0.2/atraxis/installation/host.py +60 -0
  129. atraxis-1.0.2/atraxis/installation/material.py +26 -0
  130. atraxis-1.0.2/atraxis/installation/probe.py +128 -0
  131. atraxis-1.0.2/atraxis/installation/tls.py +50 -0
  132. atraxis-1.0.2/atraxis/installation/validation.py +224 -0
  133. atraxis-1.0.2/atraxis/installation/wizard.py +178 -0
  134. atraxis-1.0.2/atraxis/installation/worker.py +33 -0
  135. atraxis-1.0.2/atraxis/intervention_search.py +112 -0
  136. atraxis-1.0.2/atraxis/intervention_search_textual.py +58 -0
  137. atraxis-1.0.2/atraxis/inventory_access.py +164 -0
  138. atraxis-1.0.2/atraxis/inventory_admin.py +165 -0
  139. atraxis-1.0.2/atraxis/inventory_commands.py +41 -0
  140. atraxis-1.0.2/atraxis/inventory_search.py +119 -0
  141. atraxis-1.0.2/atraxis/inventory_textual.py +122 -0
  142. atraxis-1.0.2/atraxis/models.py +85 -0
  143. atraxis-1.0.2/atraxis/observation_codec.py +184 -0
  144. atraxis-1.0.2/atraxis/organization_context.py +36 -0
  145. atraxis-1.0.2/atraxis/parsing.py +264 -0
  146. atraxis-1.0.2/atraxis/prometheus.py +140 -0
  147. atraxis-1.0.2/atraxis/prometheus_certlord.py +21 -0
  148. atraxis-1.0.2/atraxis/prometheus_monit.py +21 -0
  149. atraxis-1.0.2/atraxis/prometheus_observation.py +254 -0
  150. atraxis-1.0.2/atraxis/read_request.py +22 -0
  151. atraxis-1.0.2/atraxis/resource_scopes.py +130 -0
  152. atraxis-1.0.2/atraxis/retention.py +59 -0
  153. atraxis-1.0.2/atraxis/rule_commands.py +247 -0
  154. atraxis-1.0.2/atraxis/rule_files.py +18 -0
  155. atraxis-1.0.2/atraxis/rule_inputs.py +26 -0
  156. atraxis-1.0.2/atraxis/rule_observation_config.py +37 -0
  157. atraxis-1.0.2/atraxis/rule_observation_dispatch.py +34 -0
  158. atraxis-1.0.2/atraxis/rule_observations.py +134 -0
  159. atraxis-1.0.2/atraxis/rule_operator.py +160 -0
  160. atraxis-1.0.2/atraxis/rule_protocol.py +3 -0
  161. atraxis-1.0.2/atraxis/rule_remote.py +23 -0
  162. atraxis-1.0.2/atraxis/rule_remote_worker.py +5 -0
  163. atraxis-1.0.2/atraxis/rule_server.py +162 -0
  164. atraxis-1.0.2/atraxis/rule_textual.py +305 -0
  165. atraxis-1.0.2/atraxis/rule_tui.py +153 -0
  166. atraxis-1.0.2/atraxis/rule_workbench.py +283 -0
  167. atraxis-1.0.2/atraxis/rules.py +2 -0
  168. atraxis-1.0.2/atraxis/search_client.py +66 -0
  169. atraxis-1.0.2/atraxis/search_commands.py +55 -0
  170. atraxis-1.0.2/atraxis/search_textual.py +107 -0
  171. atraxis-1.0.2/atraxis/server.py +331 -0
  172. atraxis-1.0.2/atraxis/service.py +101 -0
  173. atraxis-1.0.2/atraxis/setup.py +117 -0
  174. atraxis-1.0.2/atraxis/source_adapters/__init__.py +20 -0
  175. atraxis-1.0.2/atraxis/source_adapters/certlord.py +16 -0
  176. atraxis-1.0.2/atraxis/source_adapters/contracts.py +40 -0
  177. atraxis-1.0.2/atraxis/source_adapters/monit_docker.py +16 -0
  178. atraxis-1.0.2/atraxis/source_adapters/prometheus.py +24 -0
  179. atraxis-1.0.2/atraxis/source_adapters/prometheus_certlord.py +41 -0
  180. atraxis-1.0.2/atraxis/source_adapters/prometheus_monit.py +42 -0
  181. atraxis-1.0.2/atraxis/source_config.py +181 -0
  182. atraxis-1.0.2/atraxis/transport.py +119 -0
  183. atraxis-1.0.2/atraxis/transport_worker.py +143 -0
  184. atraxis-1.0.2/atraxis/web.py +166 -0
  185. atraxis-1.0.2/atraxis/web_account_search.py +23 -0
  186. atraxis-1.0.2/atraxis/web_accounts.py +134 -0
  187. atraxis-1.0.2/atraxis/web_configuration.py +115 -0
  188. atraxis-1.0.2/atraxis/web_dispatch.py +171 -0
  189. atraxis-1.0.2/atraxis/web_intervention_detail.py +180 -0
  190. atraxis-1.0.2/atraxis/web_intervention_search.py +59 -0
  191. atraxis-1.0.2/atraxis/web_inventory_admin.py +108 -0
  192. atraxis-1.0.2/atraxis/web_inventory_search.py +65 -0
  193. atraxis-1.0.2/atraxis/web_observations.py +100 -0
  194. atraxis-1.0.2/atraxis/web_organization_context.py +94 -0
  195. atraxis-1.0.2/atraxis/web_reconciliation.py +146 -0
  196. atraxis-1.0.2/atraxis/web_rule_activation.py +195 -0
  197. atraxis-1.0.2/atraxis/web_rule_audit.py +177 -0
  198. atraxis-1.0.2/atraxis/web_rule_creation.py +142 -0
  199. atraxis-1.0.2/atraxis/web_rule_editor.py +291 -0
  200. atraxis-1.0.2/atraxis/web_rule_retirement.py +88 -0
  201. atraxis-1.0.2/atraxis/web_rules.py +225 -0
  202. atraxis-1.0.2/atraxis/web_simulation.py +191 -0
  203. atraxis-1.0.2/atraxis.egg-info/PKG-INFO +507 -0
  204. atraxis-1.0.2/atraxis.egg-info/SOURCES.txt +480 -0
  205. atraxis-1.0.2/atraxis.egg-info/dependency_links.txt +1 -0
  206. atraxis-1.0.2/atraxis.egg-info/entry_points.txt +2 -0
  207. atraxis-1.0.2/atraxis.egg-info/requires.txt +13 -0
  208. atraxis-1.0.2/atraxis.egg-info/top_level.txt +1 -0
  209. atraxis-1.0.2/browser_engine_tests/test_browser_administration.py +498 -0
  210. atraxis-1.0.2/browser_engine_tests/test_browser_creation.py +172 -0
  211. atraxis-1.0.2/browser_engine_tests/test_browser_dispatch.py +105 -0
  212. atraxis-1.0.2/browser_engine_tests/test_browser_engine.py +317 -0
  213. atraxis-1.0.2/browser_engine_tests/test_browser_interventions.py +172 -0
  214. atraxis-1.0.2/browser_engine_tests/test_browser_reconciliation.py +102 -0
  215. atraxis-1.0.2/browser_engine_tests/test_browser_simulation.py +95 -0
  216. atraxis-1.0.2/client_tests/test_account_operator.py +51 -0
  217. atraxis-1.0.2/client_tests/test_environment_cli.py +43 -0
  218. atraxis-1.0.2/client_tests/test_organization_gateway.py +40 -0
  219. atraxis-1.0.2/client_tests/test_rule_remote_transport.py +198 -0
  220. atraxis-1.0.2/client_tests/test_rules_application.py +63 -0
  221. atraxis-1.0.2/client_tests/test_setup_connections.py +33 -0
  222. atraxis-1.0.2/client_tests/test_web_rule_client.py +140 -0
  223. atraxis-1.0.2/compose_tests/cold_volume.py +86 -0
  224. atraxis-1.0.2/compose_tests/inventory_recovery.py +264 -0
  225. atraxis-1.0.2/compose_tests/operator_access.py +259 -0
  226. atraxis-1.0.2/compose_tests/recovery_transfer.py +152 -0
  227. atraxis-1.0.2/compose_tests/test_installation.py +319 -0
  228. atraxis-1.0.2/compose_tests/uncertain_recovery.py +168 -0
  229. atraxis-1.0.2/compose_tests/uncertain_target.py +111 -0
  230. atraxis-1.0.2/compose_tests/worker_profiles.py +204 -0
  231. atraxis-1.0.2/conf.py +22 -0
  232. atraxis-1.0.2/container_tests/test_chain.py +841 -0
  233. atraxis-1.0.2/container_tests/test_load.py +267 -0
  234. atraxis-1.0.2/correspondence_tests/certlord_support.py +232 -0
  235. atraxis-1.0.2/correspondence_tests/fixtures/covenant-monit-legacy.yml +269 -0
  236. atraxis-1.0.2/correspondence_tests/support.py +425 -0
  237. atraxis-1.0.2/correspondence_tests/test_certlord_correspondence.py +236 -0
  238. atraxis-1.0.2/correspondence_tests/test_correspondence.py +224 -0
  239. atraxis-1.0.2/correspondence_tests/test_guarded_correspondence.py +203 -0
  240. atraxis-1.0.2/deploy/compose/Dockerfile +77 -0
  241. atraxis-1.0.2/deploy/compose/atraxis.yml.example +8 -0
  242. atraxis-1.0.2/deploy/compose/compose.source.yml +25 -0
  243. atraxis-1.0.2/deploy/compose/compose.yml +102 -0
  244. atraxis-1.0.2/deploy/compose/engine-client.yml.example +5 -0
  245. atraxis-1.0.2/deploy/compose/engine.nginx.conf +25 -0
  246. atraxis-1.0.2/deploy/compose/engine.yml.example +14 -0
  247. atraxis-1.0.2/deploy/compose/images.json +21 -0
  248. atraxis-1.0.2/deploy/compose/locks/build.txt +11 -0
  249. atraxis-1.0.2/deploy/compose/locks/debian.sources +13 -0
  250. atraxis-1.0.2/deploy/compose/locks/engine.txt +674 -0
  251. atraxis-1.0.2/deploy/compose/locks/record-environment.py +121 -0
  252. atraxis-1.0.2/deploy/compose/locks/versions.json +83 -0
  253. atraxis-1.0.2/deploy/compose/locks/web.txt +726 -0
  254. atraxis-1.0.2/deploy/compose/site.env.example +5 -0
  255. atraxis-1.0.2/deploy/compose/web-rules.yml.example +6 -0
  256. atraxis-1.0.2/deploy/compose/web.nginx.conf +25 -0
  257. atraxis-1.0.2/deploy/docker/Dockerfile +46 -0
  258. atraxis-1.0.2/deploy/docker/check-image.py +38 -0
  259. atraxis-1.0.2/deploy/docker/client.txt +1 -0
  260. atraxis-1.0.2/deploy/docker/compose.yml +24 -0
  261. atraxis-1.0.2/deploy/docker/release.py +102 -0
  262. atraxis-1.0.2/deploy/docker/tests/test_release.py +51 -0
  263. atraxis-1.0.2/docs/README.md +53 -0
  264. atraxis-1.0.2/docs/accounts.md +493 -0
  265. atraxis-1.0.2/docs/certlord-correspondence.md +15 -0
  266. atraxis-1.0.2/docs/cli.md +115 -0
  267. atraxis-1.0.2/docs/collection-inventory.md +110 -0
  268. atraxis-1.0.2/docs/contributing.md +323 -0
  269. atraxis-1.0.2/docs/contributors.rst +27 -0
  270. atraxis-1.0.2/docs/docker-compose.md +248 -0
  271. atraxis-1.0.2/docs/docker-image.md +51 -0
  272. atraxis-1.0.2/docs/docker-publication.md +35 -0
  273. atraxis-1.0.2/docs/evidence/observation-capacity-2026-10-31.json +990 -0
  274. atraxis-1.0.2/docs/http-transport.md +90 -0
  275. atraxis-1.0.2/docs/images/account-search-desktop.png +0 -0
  276. atraxis-1.0.2/docs/images/account-search-mobile.png +0 -0
  277. atraxis-1.0.2/docs/images/accounts-textual.png +0 -0
  278. atraxis-1.0.2/docs/images/accounts-web-review.png +0 -0
  279. atraxis-1.0.2/docs/images/accounts-web.png +0 -0
  280. atraxis-1.0.2/docs/images/installation-access.png +0 -0
  281. atraxis-1.0.2/docs/images/installation-review.png +0 -0
  282. atraxis-1.0.2/docs/images/intervention-search-desktop.png +0 -0
  283. atraxis-1.0.2/docs/images/intervention-search-mobile.png +0 -0
  284. atraxis-1.0.2/docs/images/inventory-admin-desktop.png +0 -0
  285. atraxis-1.0.2/docs/images/inventory-admin-mobile.png +0 -0
  286. atraxis-1.0.2/docs/images/inventory-admin-review-desktop.png +0 -0
  287. atraxis-1.0.2/docs/images/inventory-context-desktop.png +0 -0
  288. atraxis-1.0.2/docs/images/inventory-context-mobile.png +0 -0
  289. atraxis-1.0.2/docs/images/inventory-resources-desktop.png +0 -0
  290. atraxis-1.0.2/docs/images/inventory-resources-mobile.png +0 -0
  291. atraxis-1.0.2/docs/images/inventory-search-desktop.png +0 -0
  292. atraxis-1.0.2/docs/images/inventory-search-mobile.png +0 -0
  293. atraxis-1.0.2/docs/images/textual-account-search.png +0 -0
  294. atraxis-1.0.2/docs/images/textual-intervention-search.png +0 -0
  295. atraxis-1.0.2/docs/images/textual-inventory-admin-review.png +0 -0
  296. atraxis-1.0.2/docs/images/textual-inventory-admin.png +0 -0
  297. atraxis-1.0.2/docs/images/textual-inventory-search.png +0 -0
  298. atraxis-1.0.2/docs/images/textual-review.png +0 -0
  299. atraxis-1.0.2/docs/images/textual-rules.png +0 -0
  300. atraxis-1.0.2/docs/images/textual-test-bindings.png +0 -0
  301. atraxis-1.0.2/docs/images/textual-test-queued.png +0 -0
  302. atraxis-1.0.2/docs/images/textual-test-result.png +0 -0
  303. atraxis-1.0.2/docs/images/textual-test-review.png +0 -0
  304. atraxis-1.0.2/docs/images/web-activation-desktop.png +0 -0
  305. atraxis-1.0.2/docs/images/web-activation-mobile.png +0 -0
  306. atraxis-1.0.2/docs/images/web-audit-desktop.png +0 -0
  307. atraxis-1.0.2/docs/images/web-audit-mobile.png +0 -0
  308. atraxis-1.0.2/docs/images/web-deactivation-desktop.png +0 -0
  309. atraxis-1.0.2/docs/images/web-deactivation-mobile.png +0 -0
  310. atraxis-1.0.2/docs/images/web-editor-desktop.png +0 -0
  311. atraxis-1.0.2/docs/images/web-editor-mobile.png +0 -0
  312. atraxis-1.0.2/docs/images/web-inventory-desktop.png +0 -0
  313. atraxis-1.0.2/docs/images/web-inventory-historical.png +0 -0
  314. atraxis-1.0.2/docs/images/web-inventory-mobile.png +0 -0
  315. atraxis-1.0.2/docs/images/web-rollback-desktop.png +0 -0
  316. atraxis-1.0.2/docs/images/web-rollback-mobile.png +0 -0
  317. atraxis-1.0.2/docs/images/web-rules-desktop.png +0 -0
  318. atraxis-1.0.2/docs/images/web-rules-mobile.png +0 -0
  319. atraxis-1.0.2/docs/images/web-test-report-desktop.png +0 -0
  320. atraxis-1.0.2/docs/images/web-test-report-mobile.png +0 -0
  321. atraxis-1.0.2/docs/installation-core.md +165 -0
  322. atraxis-1.0.2/docs/inventory-administration.md +170 -0
  323. atraxis-1.0.2/docs/inventory-search.md +109 -0
  324. atraxis-1.0.2/docs/local-administration.md +145 -0
  325. atraxis-1.0.2/docs/observation-capacity.md +129 -0
  326. atraxis-1.0.2/docs/observations-and-tests.md +82 -0
  327. atraxis-1.0.2/docs/operator-journey.md +231 -0
  328. atraxis-1.0.2/docs/prometheus-acceptance.md +61 -0
  329. atraxis-1.0.2/docs/prometheus-alerting.md +142 -0
  330. atraxis-1.0.2/docs/prometheus-certlord.md +96 -0
  331. atraxis-1.0.2/docs/prometheus-monit.md +121 -0
  332. atraxis-1.0.2/docs/prometheus.md +153 -0
  333. atraxis-1.0.2/docs/read-only-adapters.md +127 -0
  334. atraxis-1.0.2/docs/release-candidate.md +34 -0
  335. atraxis-1.0.2/docs/release-stable.md +39 -0
  336. atraxis-1.0.2/docs/releases/1.0.0-qualification.json +121 -0
  337. atraxis-1.0.2/docs/releases/1.0.0.md +46 -0
  338. atraxis-1.0.2/docs/releases/1.0.0rc1.md +63 -0
  339. atraxis-1.0.2/docs/releases/1.0.1-integration.json +24 -0
  340. atraxis-1.0.2/docs/releases/1.0.1-qualification.json +125 -0
  341. atraxis-1.0.2/docs/releases/1.0.1.md +34 -0
  342. atraxis-1.0.2/docs/releases/1.0.2-qualification.json +132 -0
  343. atraxis-1.0.2/docs/releases/1.0.2.md +23 -0
  344. atraxis-1.0.2/docs/requirements.txt +4 -0
  345. atraxis-1.0.2/docs/retention.md +59 -0
  346. atraxis-1.0.2/docs/rule-console.md +222 -0
  347. atraxis-1.0.2/docs/rule-dispatch.md +195 -0
  348. atraxis-1.0.2/docs/rule-lifecycle.md +43 -0
  349. atraxis-1.0.2/docs/rule-remote.md +302 -0
  350. atraxis-1.0.2/docs/setup.md +269 -0
  351. atraxis-1.0.2/docs/source-configuration.md +144 -0
  352. atraxis-1.0.2/docs/source-correspondence.md +71 -0
  353. atraxis-1.0.2/docs/textual.md +114 -0
  354. atraxis-1.0.2/docs/v1-candidate.md +87 -0
  355. atraxis-1.0.2/docs/v1-delivery.md +101 -0
  356. atraxis-1.0.2/docs/v1.0.md +102 -0
  357. atraxis-1.0.2/docs/web-configuration.md +91 -0
  358. atraxis-1.0.2/docs/web-inventory.md +209 -0
  359. atraxis-1.0.2/docs/web-rules.md +408 -0
  360. atraxis-1.0.2/docs-core.md +57 -0
  361. atraxis-1.0.2/docs-runtime.md +101 -0
  362. atraxis-1.0.2/engine_tests/journey_fixture.py +99 -0
  363. atraxis-1.0.2/engine_tests/test_https_journey.py +116 -0
  364. atraxis-1.0.2/engine_tests/test_source_journey.py +157 -0
  365. atraxis-1.0.2/engine_tests/test_web_engine.py +540 -0
  366. atraxis-1.0.2/engine_tests/tls_fixture.py +80 -0
  367. atraxis-1.0.2/examples/atraxis.yml +10 -0
  368. atraxis-1.0.2/examples/client.yml +6 -0
  369. atraxis-1.0.2/examples/covenant-certlord.yml +15 -0
  370. atraxis-1.0.2/examples/covenant-monit.yml +15 -0
  371. atraxis-1.0.2/examples/rules/atropos-client.yml +7 -0
  372. atraxis-1.0.2/examples/rules/cpu-cases.json +5 -0
  373. atraxis-1.0.2/examples/rules/operator.yml +14 -0
  374. atraxis-1.0.2/examples/rules/remote.yml +6 -0
  375. atraxis-1.0.2/examples/rules/service.yml +20 -0
  376. atraxis-1.0.2/index.rst +53 -0
  377. atraxis-1.0.2/installed_tests/test_package.py +201 -0
  378. atraxis-1.0.2/integration_tests/test_rule_operator.py +91 -0
  379. atraxis-1.0.2/integration_tests/test_rule_remote.py +711 -0
  380. atraxis-1.0.2/integration_tests/test_rules_atropos.py +8 -0
  381. atraxis-1.0.2/pyproject.toml +24 -0
  382. atraxis-1.0.2/recovery_tests/test_host_recovery.py +253 -0
  383. atraxis-1.0.2/scripts/build_architecture.py +112 -0
  384. atraxis-1.0.2/scripts/capture_textual.py +195 -0
  385. atraxis-1.0.2/scripts/chain/atraxis.Dockerfile +6 -0
  386. atraxis-1.0.2/scripts/chain/atraxis.Dockerfile.dockerignore +7 -0
  387. atraxis-1.0.2/scripts/chain/auton-oidc-deadline.patch +190 -0
  388. atraxis-1.0.2/scripts/chain/auton.Dockerfile +8 -0
  389. atraxis-1.0.2/scripts/chain/auton.Dockerfile.dockerignore +5 -0
  390. atraxis-1.0.2/scripts/chain/engine.Dockerfile +9 -0
  391. atraxis-1.0.2/scripts/chain/engine.Dockerfile.dockerignore +6 -0
  392. atraxis-1.0.2/scripts/chain/image-identities.py +138 -0
  393. atraxis-1.0.2/scripts/chain/image-inputs.json +28 -0
  394. atraxis-1.0.2/scripts/chain/load.py +248 -0
  395. atraxis-1.0.2/scripts/chain/node.py +203 -0
  396. atraxis-1.0.2/scripts/chain/prepare-public-inputs.py +46 -0
  397. atraxis-1.0.2/scripts/chain/public-inputs.json +12 -0
  398. atraxis-1.0.2/scripts/chain/recovery.py +103 -0
  399. atraxis-1.0.2/scripts/chain/verify-installed-candidates.py +54 -0
  400. atraxis-1.0.2/scripts/check-guided-deployment.py +54 -0
  401. atraxis-1.0.2/scripts/check-observation-capacity.py +275 -0
  402. atraxis-1.0.2/scripts/check-source-archive.py +47 -0
  403. atraxis-1.0.2/scripts/check-test-collection.py +148 -0
  404. atraxis-1.0.2/scripts/check_configuration_browser.py +74 -0
  405. atraxis-1.0.2/scripts/check_prometheus_chain.py +149 -0
  406. atraxis-1.0.2/scripts/check_web_browser.py +543 -0
  407. atraxis-1.0.2/scripts/docker-acceptance.py +111 -0
  408. atraxis-1.0.2/scripts/docker-network-acceptance.py +234 -0
  409. atraxis-1.0.2/scripts/network/Dockerfile +7 -0
  410. atraxis-1.0.2/scripts/network/fixture.py +178 -0
  411. atraxis-1.0.2/scripts/prepare-candidate-release.py +50 -0
  412. atraxis-1.0.2/scripts/prepare-stable-release.py +96 -0
  413. atraxis-1.0.2/setup.cfg +4 -0
  414. atraxis-1.0.2/tests/observation_support.py +152 -0
  415. atraxis-1.0.2/tests/test_account_backup.py +88 -0
  416. atraxis-1.0.2/tests/test_account_delegation.py +168 -0
  417. atraxis-1.0.2/tests/test_account_entities.py +178 -0
  418. atraxis-1.0.2/tests/test_account_search.py +93 -0
  419. atraxis-1.0.2/tests/test_account_storage.py +248 -0
  420. atraxis-1.0.2/tests/test_accounts.py +219 -0
  421. atraxis-1.0.2/tests/test_administration_cli.py +254 -0
  422. atraxis-1.0.2/tests/test_candidate_release.py +91 -0
  423. atraxis-1.0.2/tests/test_client.py +167 -0
  424. atraxis-1.0.2/tests/test_collection.py +226 -0
  425. atraxis-1.0.2/tests/test_collection_guard.py +29 -0
  426. atraxis-1.0.2/tests/test_compose_environment.py +68 -0
  427. atraxis-1.0.2/tests/test_configuration_admin.py +267 -0
  428. atraxis-1.0.2/tests/test_doctor.py +208 -0
  429. atraxis-1.0.2/tests/test_guided_deployment.py +79 -0
  430. atraxis-1.0.2/tests/test_installation.py +472 -0
  431. atraxis-1.0.2/tests/test_integration_images.py +88 -0
  432. atraxis-1.0.2/tests/test_intervention_search.py +76 -0
  433. atraxis-1.0.2/tests/test_inventory_access.py +174 -0
  434. atraxis-1.0.2/tests/test_inventory_admin.py +209 -0
  435. atraxis-1.0.2/tests/test_inventory_runtime.py +245 -0
  436. atraxis-1.0.2/tests/test_inventory_search.py +130 -0
  437. atraxis-1.0.2/tests/test_load_diagnostics.py +248 -0
  438. atraxis-1.0.2/tests/test_observations.py +212 -0
  439. atraxis-1.0.2/tests/test_organization_context.py +97 -0
  440. atraxis-1.0.2/tests/test_projection_details.py +133 -0
  441. atraxis-1.0.2/tests/test_prometheus.py +238 -0
  442. atraxis-1.0.2/tests/test_prometheus_certlord.py +147 -0
  443. atraxis-1.0.2/tests/test_prometheus_monit.py +134 -0
  444. atraxis-1.0.2/tests/test_prometheus_observation.py +219 -0
  445. atraxis-1.0.2/tests/test_recovery_transfer.py +104 -0
  446. atraxis-1.0.2/tests/test_resource_scopes.py +178 -0
  447. atraxis-1.0.2/tests/test_retention.py +74 -0
  448. atraxis-1.0.2/tests/test_rule_observations.py +115 -0
  449. atraxis-1.0.2/tests/test_rule_terminal.py +103 -0
  450. atraxis-1.0.2/tests/test_rule_test_workbench.py +126 -0
  451. atraxis-1.0.2/tests/test_runtime.py +249 -0
  452. atraxis-1.0.2/tests/test_setup.py +115 -0
  453. atraxis-1.0.2/tests/test_source_adapters.py +123 -0
  454. atraxis-1.0.2/tests/test_source_archive.py +93 -0
  455. atraxis-1.0.2/tests/test_source_config.py +129 -0
  456. atraxis-1.0.2/tests/test_stable_release.py +175 -0
  457. atraxis-1.0.2/tests/test_terminal_inventory.py +101 -0
  458. atraxis-1.0.2/tests/test_transport.py +280 -0
  459. atraxis-1.0.2/tests/test_uncertain_target.py +62 -0
  460. atraxis-1.0.2/tests/test_web.py +107 -0
  461. atraxis-1.0.2/tests/test_web_accounts.py +152 -0
  462. atraxis-1.0.2/tests/test_web_dispatch.py +183 -0
  463. atraxis-1.0.2/tests/test_web_intervention_detail.py +141 -0
  464. atraxis-1.0.2/tests/test_web_reconciliation.py +116 -0
  465. atraxis-1.0.2/tests/test_web_rule_activation.py +148 -0
  466. atraxis-1.0.2/tests/test_web_rule_creation.py +130 -0
  467. atraxis-1.0.2/tests/test_web_rule_editor.py +213 -0
  468. atraxis-1.0.2/tests/test_web_rule_lifecycle.py +239 -0
  469. atraxis-1.0.2/tests/test_web_rule_retirement.py +76 -0
  470. atraxis-1.0.2/tests/test_web_rules.py +241 -0
  471. atraxis-1.0.2/tests/test_web_simulation.py +138 -0
  472. atraxis-1.0.2/tests/web_editor_fixture.py +159 -0
  473. atraxis-1.0.2/tests/web_simulation_fixture.py +25 -0
  474. atraxis-1.0.2/textual_tests/test_account_search.py +41 -0
  475. atraxis-1.0.2/textual_tests/test_accounts.py +67 -0
  476. atraxis-1.0.2/textual_tests/test_install_wizard.py +61 -0
  477. atraxis-1.0.2/textual_tests/test_intervention_search_ui.py +36 -0
  478. atraxis-1.0.2/textual_tests/test_inventory.py +80 -0
  479. atraxis-1.0.2/textual_tests/test_rules.py +168 -0
  480. atraxis-1.0.2/textual_tests/test_search.py +63 -0
  481. atraxis-1.0.2/tools/brand/build.py +168 -0
  482. atraxis-1.0.2/tools/brand/requirements.txt +4 -0
@@ -0,0 +1,15 @@
1
+ *
2
+ !pyproject.toml
3
+ !README.md
4
+ !LICENSE
5
+ !atraxis/
6
+ !atraxis/**
7
+ !deploy/
8
+ !deploy/compose/
9
+ !deploy/compose/locks/
10
+ !deploy/compose/locks/**
11
+ **/__pycache__
12
+ **/*.pyc
13
+
14
+ !deploy/docker/
15
+ !deploy/docker/**
@@ -0,0 +1,71 @@
1
+ name: native browser engine acceptance
2
+ on: [push, pull_request, workflow_dispatch]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ browser-engine:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 15
9
+ container:
10
+ image: mcr.microsoft.com/playwright/python:v1.55.0-noble@sha256:640d578aae63cfb632461d1b0aecb01414e4e020864ac3dd45a868dc0eff3078
11
+ options: --init --ipc=host
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
16
+ persist-credentials: false
17
+ - name: Verify running browser image identity
18
+ env:
19
+ CI_JOB_CONTAINER_ID: ${{ job.container.id }}
20
+ run: python scripts/chain/image-identities.py browser-engine image-evidence/browser-engine.json
21
+ - name: Install native daemon dependency
22
+ timeout-minutes: 3
23
+ run: |
24
+ sed -i 's|http://archive.ubuntu.com|https://archive.ubuntu.com|g; s|http://security.ubuntu.com|https://security.ubuntu.com|g' /etc/apt/sources.list.d/ubuntu.sources
25
+ apt-get -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 -o Acquire::Retries=1 update
26
+ apt-get -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 -o Acquire::Retries=1 install --yes --no-install-recommends libmagic1t64 python3.12-venv libnss3-tools
27
+ - uses: actions/checkout@v4
28
+ with:
29
+ repository: decryptus/atropos
30
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
31
+ path: .acceptance/engine
32
+ persist-credentials: false
33
+ - uses: actions/checkout@v4
34
+ with:
35
+ repository: decryptus/auton
36
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
37
+ path: .auton-source
38
+ persist-credentials: false
39
+ - name: Verify public inputs and prepare the bounded Auton fixture
40
+ run: |
41
+ # The job container and host checkout use different UIDs.
42
+ # Trust only this job's explicit checkout for provenance inspection.
43
+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
44
+ python scripts/chain/prepare-public-inputs.py
45
+ - name: Install independent service environments
46
+ run: |
47
+ python -m venv "$RUNNER_TEMP/browser-web"
48
+ python -m venv "$RUNNER_TEMP/browser-engine"
49
+ python -m venv "$RUNNER_TEMP/browser-auton"
50
+ AUTON_PACKAGE=autond "$RUNNER_TEMP/browser-auton/bin/python" -m pip install .auton-source
51
+ "$RUNNER_TEMP/browser-engine/bin/python" -m pip install '.acceptance/engine[service,redis,auton]' .acceptance/engine/client redislite==6.2.912183
52
+ "$RUNNER_TEMP/browser-web/bin/python" -m pip install . '.acceptance/engine/client[observations]' playwright==1.55.0
53
+ "$RUNNER_TEMP/browser-engine/bin/python" -m pip check
54
+ "$RUNNER_TEMP/browser-web/bin/python" -m pip check
55
+ "$RUNNER_TEMP/browser-auton/bin/python" -m pip check
56
+ - name: Collect every browser acceptance case
57
+ run: '"$RUNNER_TEMP/browser-web/bin/python" scripts/check-test-collection.py --runner unittest browser_engine_tests'
58
+ - name: Execute native forms against actual SQLite engine and Redis delivery
59
+ run: |
60
+ ATROPOS_TEST_PYTHON="$RUNNER_TEMP/browser-engine/bin/python" \
61
+ AUTON_TEST_SOURCE="$GITHUB_WORKSPACE/.auton-source" \
62
+ AUTON_TEST_DAEMON="$RUNNER_TEMP/browser-auton/bin/autond" \
63
+ "$RUNNER_TEMP/browser-web/bin/python" -m unittest discover -s browser_engine_tests -v
64
+ - name: Retain browser image identity
65
+ if: always()
66
+ uses: actions/upload-artifact@v4
67
+ with:
68
+ name: image-identity-browser-engine
69
+ path: image-evidence/browser-engine.json
70
+ retention-days: 14
71
+ if-no-files-found: error
@@ -0,0 +1,86 @@
1
+ name: container chain acceptance
2
+ on: [push, pull_request, workflow_dispatch]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ chain:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 20
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ with:
12
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
13
+ persist-credentials: false
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: '3.12'
17
+ - run: python -m pip install cryptography==50.0.2 PyYAML==6.0.3
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ repository: decryptus/atropos
21
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
22
+ path: .acceptance/engine
23
+ persist-credentials: false
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ repository: decryptus/auton
27
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
28
+ path: .auton-source
29
+ persist-credentials: false
30
+ - name: Verify public inputs and prepare the bounded Auton fixture
31
+ run: python scripts/chain/prepare-public-inputs.py
32
+ - name: Build separate installed service images (no publication)
33
+ run: |
34
+ docker build --tag atraxis-acceptance:ci .
35
+ docker build --tag atraxis-ingress:ci --file scripts/network/Dockerfile .
36
+ docker build --tag atraxis-chain:ci --file scripts/chain/atraxis.Dockerfile .
37
+ docker build --tag atropos-chain:ci --file scripts/chain/engine.Dockerfile .
38
+ docker build --tag auton-chain:ci --file scripts/chain/auton.Dockerfile .
39
+ - name: Verify built image identities and locked base layers
40
+ run: python scripts/chain/image-identities.py chain acceptance-artifacts/image-identities.json
41
+ - name: Verify installed candidates match pinned sources
42
+ run: python scripts/chain/verify-installed-candidates.py
43
+ - name: Collect every container acceptance case
44
+ run: python scripts/check-test-collection.py --runner unittest container_tests
45
+ - name: Run complete HTTPS chain with disposable effects and failure injection
46
+ env:
47
+ AUTON_TEST_SOURCE: ${{ github.workspace }}/.auton-source
48
+ shell: bash
49
+ run: python -m unittest discover -s container_tests -v 2>&1 | tee acceptance-artifacts/short-chain.log
50
+ - name: Preserve synthetic provenance and short-chain evidence
51
+ if: always()
52
+ uses: actions/upload-artifact@v4
53
+ with:
54
+ name: chain-evidence
55
+ path: acceptance-artifacts/*
56
+ retention-days: 7
57
+ if-no-files-found: error
58
+ compose:
59
+ runs-on: ubuntu-latest
60
+ timeout-minutes: 15
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - uses: actions/setup-python@v5
64
+ with:
65
+ python-version: '3.12'
66
+ - run: python -m pip install cryptography==50.0.2 PyYAML==6.0.3
67
+ - uses: actions/checkout@v4
68
+ with:
69
+ repository: decryptus/atropos
70
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
71
+ path: .acceptance/engine
72
+ persist-credentials: false
73
+ - uses: actions/checkout@v4
74
+ with:
75
+ repository: decryptus/auton
76
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
77
+ path: .auton-source
78
+ persist-credentials: false
79
+ - name: Verify public inputs and prepare the bounded Auton fixture
80
+ run: python scripts/chain/prepare-public-inputs.py
81
+ - name: Collect operator Compose acceptance
82
+ run: python scripts/check-test-collection.py --runner unittest compose_tests
83
+ - name: Build and verify operator Compose with disposable pinned inputs
84
+ # Root prepares test-owned UID 10001 files on this disposable runner only.
85
+ # All four long-running Compose services retain their non-root protections.
86
+ run: sudo "$(command -v python)" -m unittest discover -s compose_tests -v
@@ -0,0 +1,83 @@
1
+ name: Docker Hub image
2
+ on:
3
+ pull_request:
4
+ push:
5
+ branches: [main, release/dockerhub]
6
+ workflow_dispatch:
7
+ inputs:
8
+ publish:
9
+ description: Publish the tested stable image to Docker Hub
10
+ type: boolean
11
+ default: false
12
+ permissions:
13
+ contents: read
14
+ concurrency:
15
+ group: dockerhub-atraxis
16
+ cancel-in-progress: false
17
+ jobs:
18
+ image:
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 20
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
25
+ fetch-depth: 0
26
+ persist-credentials: false
27
+ - uses: actions/setup-python@v5
28
+ with:
29
+ python-version: '3.12'
30
+ - name: Check publication guards
31
+ run: |
32
+ python scripts/check-test-collection.py --runner unittest deploy/docker/tests
33
+ python -m unittest discover -s deploy/docker/tests -v
34
+ - name: Read package identity
35
+ id: identity
36
+ run: |
37
+ python - <<'PY'
38
+ import os, tomllib
39
+ from pathlib import Path
40
+ version = tomllib.loads(Path('pyproject.toml').read_text())['project']['version']
41
+ with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
42
+ print('version=' + version, file=output)
43
+ PY
44
+ - uses: docker/setup-buildx-action@v4
45
+ - name: Build the Linux amd64 image
46
+ uses: docker/build-push-action@v7
47
+ with:
48
+ context: .
49
+ file: deploy/docker/Dockerfile
50
+ platforms: linux/amd64
51
+ load: true
52
+ tags: atraxis:test
53
+ build-args: |
54
+ VERSION=${{ steps.identity.outputs.version }}
55
+ REVISION=${{ github.event.pull_request.head.sha || github.sha }}
56
+ cache-from: type=gha,scope=atraxis
57
+ cache-to: type=gha,mode=max,scope=atraxis
58
+ - name: Test the installed image and durable state
59
+ run: python deploy/docker/check-image.py
60
+ - name: Record tested image identity
61
+ run: |
62
+ mkdir -p image-evidence
63
+ docker image inspect atraxis:test > image-evidence/image.json
64
+ docker run --rm --network none --read-only --entrypoint cat atraxis:test /usr/local/share/atraxis/environment.json > image-evidence/environment.json
65
+ - uses: actions/upload-artifact@v4
66
+ with:
67
+ name: docker-image-evidence
68
+ path: image-evidence/
69
+ retention-days: 14
70
+ - name: Check Docker Hub credential availability
71
+ if: (github.event_name == 'workflow_dispatch' && inputs.publish && github.ref == 'refs/heads/main') || (github.event_name == 'push' && github.ref == 'refs/heads/release/dockerhub')
72
+ env:
73
+ TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
74
+ run: test -n "$TOKEN" || { echo 'Configure DOCKERHUB_TOKEN for this repository.'; exit 1; }
75
+ - name: Log in to Docker Hub
76
+ if: (github.event_name == 'workflow_dispatch' && inputs.publish && github.ref == 'refs/heads/main') || (github.event_name == 'push' && github.ref == 'refs/heads/release/dockerhub')
77
+ uses: docker/login-action@v4
78
+ with:
79
+ username: decryptus
80
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
81
+ - name: Publish the exact tested image
82
+ if: (github.event_name == 'workflow_dispatch' && inputs.publish && github.ref == 'refs/heads/main') || (github.event_name == 'push' && github.ref == 'refs/heads/release/dockerhub')
83
+ run: python deploy/docker/release.py atraxis --image atraxis:test
@@ -0,0 +1,62 @@
1
+ name: two-hour container endurance
2
+ on:
3
+ workflow_dispatch:
4
+ push:
5
+ branches: [qualification/endurance]
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ endurance:
10
+ runs-on: ubuntu-latest
11
+ timeout-minutes: 165
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: '3.12'
17
+ - run: python -m pip install cryptography==50.0.2 PyYAML==6.0.3
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ repository: decryptus/atropos
21
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
22
+ path: .acceptance/engine
23
+ persist-credentials: false
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ repository: decryptus/auton
27
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
28
+ path: .auton-source
29
+ persist-credentials: false
30
+ - name: Verify public inputs and prepare the bounded Auton fixture
31
+ run: python scripts/chain/prepare-public-inputs.py
32
+ - name: Build separate installed service images (no publication)
33
+ run: |
34
+ docker build --tag atraxis-acceptance:ci .
35
+ docker build --tag atraxis-ingress:ci --file scripts/network/Dockerfile .
36
+ docker build --tag atraxis-chain:ci --file scripts/chain/atraxis.Dockerfile .
37
+ docker build --tag atropos-chain:ci --file scripts/chain/engine.Dockerfile .
38
+ docker build --tag auton-chain:ci --file scripts/chain/auton.Dockerfile .
39
+ - name: Verify installed candidates match pinned sources
40
+ run: python scripts/chain/verify-installed-candidates.py
41
+ - name: Collect every container acceptance case
42
+ run: python scripts/check-test-collection.py --runner unittest container_tests
43
+ - name: Run complete HTTPS chain with disposable effects and failure injection
44
+ env:
45
+ AUTON_TEST_SOURCE: ${{ github.workspace }}/.auton-source
46
+ shell: bash
47
+ run: python -m unittest discover -s container_tests -v 2>&1 | tee acceptance-artifacts/short-chain.log
48
+ - name: Run two-hour saturation and recovery after the complete short gate
49
+ timeout-minutes: 145
50
+ env:
51
+ AUTON_TEST_SOURCE: ${{ github.workspace }}/.auton-source
52
+ CHAIN_ENDURANCE_SECONDS: '7200'
53
+ shell: bash
54
+ run: python -m unittest discover -s container_tests -p test_load.py -v 2>&1 | tee acceptance-artifacts/endurance.log
55
+ - name: Preserve synthetic progress including failed runs
56
+ if: always()
57
+ uses: actions/upload-artifact@v4
58
+ with:
59
+ name: endurance-progress
60
+ path: acceptance-artifacts/*
61
+ retention-days: 7
62
+ if-no-files-found: warn
@@ -0,0 +1,24 @@
1
+ name: Guided inventory deployment
2
+ on: [push, pull_request]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ qualify:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 12
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ mode: [systemd, compose]
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: actions/setup-python@v5
16
+ with:
17
+ python-version: '3.12'
18
+ - run: python -m pip install '.[installer,textual]'
19
+ - if: matrix.mode == 'systemd'
20
+ run: |
21
+ sudo loginctl enable-linger "$(id -un)"
22
+ sudo systemctl start "user@$(id -u).service"
23
+ echo "XDG_RUNTIME_DIR=/run/user/$(id -u)" >> "$GITHUB_ENV"
24
+ - run: python scripts/check-guided-deployment.py "${{ matrix.mode }}"
@@ -0,0 +1,60 @@
1
+ name: four-hour memory qualification
2
+ on:
3
+ workflow_dispatch:
4
+ permissions:
5
+ contents: read
6
+ jobs:
7
+ endurance:
8
+ runs-on: ubuntu-latest
9
+ timeout-minutes: 300
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: actions/setup-python@v5
13
+ with:
14
+ python-version: '3.12'
15
+ - run: python -m pip install cryptography==50.0.2 PyYAML==6.0.3
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ repository: decryptus/atropos
19
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
20
+ path: .acceptance/engine
21
+ persist-credentials: false
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ repository: decryptus/auton
25
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
26
+ path: .auton-source
27
+ persist-credentials: false
28
+ - name: Verify public inputs and prepare the bounded Auton fixture
29
+ run: python scripts/chain/prepare-public-inputs.py
30
+ - name: Build separate installed service images (no publication)
31
+ run: |
32
+ docker build --tag atraxis-acceptance:ci .
33
+ docker build --tag atraxis-ingress:ci --file scripts/network/Dockerfile .
34
+ docker build --tag atraxis-chain:ci --file scripts/chain/atraxis.Dockerfile .
35
+ docker build --tag atropos-chain:ci --file scripts/chain/engine.Dockerfile .
36
+ docker build --tag auton-chain:ci --file scripts/chain/auton.Dockerfile .
37
+ - name: Verify installed candidates match pinned sources
38
+ run: python scripts/chain/verify-installed-candidates.py
39
+ - name: Collect every container acceptance case
40
+ run: python scripts/check-test-collection.py --runner unittest container_tests
41
+ - name: Run complete HTTPS chain with disposable effects and failure injection
42
+ env:
43
+ AUTON_TEST_SOURCE: ${{ github.workspace }}/.auton-source
44
+ shell: bash
45
+ run: python -m unittest discover -s container_tests -v 2>&1 | tee acceptance-artifacts/short-chain.log
46
+ - name: Run four-hour saturation, quiescence and recovery after the complete short gate
47
+ timeout-minutes: 280
48
+ env:
49
+ AUTON_TEST_SOURCE: ${{ github.workspace }}/.auton-source
50
+ CHAIN_ENDURANCE_SECONDS: '14400'
51
+ shell: bash
52
+ run: python -m unittest discover -s container_tests -p test_load.py -v 2>&1 | tee acceptance-artifacts/endurance.log
53
+ - name: Preserve synthetic progress including failed runs
54
+ if: always()
55
+ uses: actions/upload-artifact@v4
56
+ with:
57
+ name: memory-progress
58
+ path: acceptance-artifacts/*
59
+ retention-days: 7
60
+ if-no-files-found: warn
@@ -0,0 +1,170 @@
1
+ name: operator Compose acceptance
2
+ on: [push, pull_request, workflow_dispatch]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ compose:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 20
9
+ outputs:
10
+ transfer_sha256: ${{ steps.transfer.outputs.sha256 }}
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
15
+ persist-credentials: false
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: '3.12'
19
+ - run: python -m pip install cryptography==50.0.2 PyYAML==6.0.3
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ repository: decryptus/atropos
23
+ ref: 613856430e87cd5abac0ea346d8d60a63b73cc57
24
+ path: .acceptance/engine
25
+ persist-credentials: false
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ repository: decryptus/auton
29
+ ref: 7f57348b144fa62400bad31160d4b4ad5c00f53c
30
+ path: .auton-source
31
+ persist-credentials: false
32
+ - name: Verify public inputs and prepare the bounded Auton fixture
33
+ run: python scripts/chain/prepare-public-inputs.py
34
+ - name: Collect operator Compose acceptance
35
+ run: python scripts/check-test-collection.py --runner unittest compose_tests
36
+ - name: Build and verify worker profiles, recreation and cold restoration
37
+ shell: bash
38
+ run: sudo env ATRAXIS_EXPORT_RECOVERY=1 "$(command -v python)" -m unittest discover -s compose_tests -v 2>&1 | tee acceptance-artifacts/compose.log
39
+ - name: Verify installed packages match both source candidates
40
+ run: |
41
+ python - <<'PY'
42
+ import hashlib
43
+ import json
44
+ from pathlib import Path
45
+ import subprocess
46
+ source = Path('.acceptance/engine')
47
+ expected = {str(p.relative_to(source)): hashlib.sha256(p.read_bytes()).hexdigest()
48
+ for p in sorted((source / 'atropos').rglob('*.py'))}
49
+ expected.update({str(p.relative_to(source / 'client')): hashlib.sha256(p.read_bytes()).hexdigest()
50
+ for p in sorted((source / 'client/atropos_client').rglob('*.py'))})
51
+ web_files = {str(p): hashlib.sha256(p.read_bytes()).hexdigest()
52
+ for p in sorted(Path('atraxis').rglob('*.py'))}
53
+ web_files.update({name: digest for name, digest in expected.items() if name.startswith('atropos_client/')})
54
+ verifier = '''import hashlib, importlib.util, json
55
+ from importlib.metadata import version
56
+ from pathlib import Path
57
+ project, release = json.loads(%r)
58
+ assert version(project) == release
59
+ assert version('sonicprobe') == '0.3.62'
60
+ assert version('atropos-client') == '1.0.0'
61
+ if project == 'atraxis-atropos':
62
+ from atropos import __version__ as engine_version
63
+ assert engine_version == release, 'engine_runtime_version_mismatch'
64
+ for name, digest in json.loads(%r).items():
65
+ package, relative = name.split('/', 1)
66
+ spec = importlib.util.find_spec(package)
67
+ path = Path(spec.origin).parent / relative
68
+ assert str(path).startswith('/usr/local/lib/python3.12/site-packages/')
69
+ assert hashlib.sha256(path.read_bytes()).hexdigest() == digest, name
70
+ print('Installed package bytes verified:', project)
71
+ '''
72
+ images = {}
73
+ for image, project, release, files in (
74
+ ('atraxis-install-engine:local', 'atraxis-atropos', '1.0.0', expected),
75
+ ('atraxis-install-web:local', 'atraxis', '1.0.2', web_files)):
76
+ subprocess.run(['docker', 'run', '--rm', '-i', '--network', 'none', '--read-only',
77
+ '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges', '--memory', '512m',
78
+ '--cpus', '2', '--pids-limit', '128', '--entrypoint', 'python', image, '-'],
79
+ input=verifier % (json.dumps([project, release]), json.dumps(files)),
80
+ text=True, check=True, timeout=60)
81
+ images[image] = dict(files=files, image=subprocess.check_output(
82
+ ['docker', 'image', 'inspect', '--format', '{{.Id}}', image], text=True).strip())
83
+ Path('acceptance-artifacts/installed-packages.json').write_text(json.dumps(images, indent=2) + '\n')
84
+ PY
85
+ - name: Retain the locked Python and native environments
86
+ run: |
87
+ python - <<'PY'
88
+ import json
89
+ from pathlib import Path
90
+ import subprocess
91
+ specification = json.loads(Path('deploy/compose/locks/versions.json').read_text())
92
+ environments = {}
93
+ for profile in ('web', 'engine', 'proxy'):
94
+ image = 'atraxis-install-' + profile + ':local'
95
+ output = subprocess.check_output(['docker', 'run', '--rm', '--network', 'none',
96
+ '--read-only', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',
97
+ '--memory', '128m', '--cpus', '1', '--pids-limit', '32', '--entrypoint', 'cat',
98
+ image, '/usr/local/share/atraxis/environment.json'], timeout=30)
99
+ assert len(output) <= 1024 * 1024
100
+ environment = json.loads(output)
101
+ assert environment['profile'] == profile
102
+ assert environment['base_image'] == specification['base_image']
103
+ assert environment['python'] == specification['python']
104
+ environments[profile] = dict(environment=environment, image_id=subprocess.check_output(
105
+ ['docker', 'image', 'inspect', '--format', '{{.Id}}', image],
106
+ text=True, timeout=30).strip())
107
+ Path('acceptance-artifacts/locked-environments.json').write_text(
108
+ json.dumps(environments, indent=2) + '\n')
109
+ PY
110
+ - name: Bind transferred images and manifest to the verified source job
111
+ id: transfer
112
+ run: |
113
+ python - <<'PY'
114
+ import json, os, sys
115
+ sys.path.insert(0, 'compose_tests')
116
+ from recovery_transfer import TRANSFER, MANIFEST, MAX_MANIFEST_BYTES, confirm_images, digest
117
+ confirm_images(json.loads((TRANSFER / MANIFEST).read_text()))
118
+ with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
119
+ output.write('sha256=' + digest(TRANSFER / MANIFEST, MAX_MANIFEST_BYTES) + '\n')
120
+ PY
121
+ - name: Transfer disposable recovery fixture to a separate runner
122
+ uses: actions/upload-artifact@v4
123
+ with:
124
+ name: operator-recovery-transfer-${{ github.run_id }}-${{ github.run_attempt }}
125
+ path: acceptance-transfer/*
126
+ retention-days: 1
127
+ compression-level: 1
128
+ if-no-files-found: error
129
+ - name: Retain synthetic acceptance evidence
130
+ if: always()
131
+ uses: actions/upload-artifact@v4
132
+ with:
133
+ name: operator-compose-evidence
134
+ path: acceptance-artifacts/*
135
+ retention-days: 30
136
+ if-no-files-found: error
137
+ recover:
138
+ needs: compose
139
+ runs-on: ubuntu-latest
140
+ timeout-minutes: 10
141
+ steps:
142
+ - uses: actions/checkout@v4
143
+ with:
144
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
145
+ persist-credentials: false
146
+ - uses: actions/setup-python@v5
147
+ with:
148
+ python-version: '3.12'
149
+ - run: python -m pip install PyYAML==6.0.3
150
+ - uses: actions/download-artifact@v4
151
+ with:
152
+ name: operator-recovery-transfer-${{ github.run_id }}-${{ github.run_attempt }}
153
+ path: acceptance-transfer
154
+ - name: Collect separate-host recovery acceptance
155
+ run: python scripts/check-test-collection.py --runner unittest recovery_tests
156
+ - name: Restore verified archives on a fresh host without rebuilding
157
+ shell: bash
158
+ env:
159
+ TRANSFER_SHA256: ${{ needs.compose.outputs.transfer_sha256 }}
160
+ run: |
161
+ mkdir -p acceptance-artifacts
162
+ sudo env ATRAXIS_TRANSFER_SHA256="$TRANSFER_SHA256" "$(command -v python)" -m unittest discover -s recovery_tests -v 2>&1 | tee acceptance-artifacts/recovery.log
163
+ - name: Retain recovery results without fixture credentials or keys
164
+ if: always()
165
+ uses: actions/upload-artifact@v4
166
+ with:
167
+ name: operator-host-recovery-evidence
168
+ path: acceptance-artifacts/*
169
+ retention-days: 30
170
+ if-no-files-found: error