simplicio-cli 0.16.2__tar.gz → 0.16.3__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 (463) hide show
  1. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/PKG-INFO +19 -13
  2. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/README.md +17 -11
  3. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/pyproject.toml +4 -4
  4. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/__init__.py +1 -1
  5. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/_cache.py +104 -24
  6. simplicio_cli-0.16.3/simplicio/atomic_execution.py +306 -0
  7. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cli.py +71 -4
  8. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/_shared.py +3 -0
  9. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/edit.py +111 -3
  10. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/prototype.py +1 -0
  11. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/run.py +186 -0
  12. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/runtime.py +21 -0
  13. simplicio_cli-0.16.3/simplicio/commands/task.py +132 -0
  14. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/execution_contract.py +21 -0
  15. simplicio_cli-0.16.3/simplicio/execution_mode.py +603 -0
  16. simplicio_cli-0.16.3/simplicio/hbp.py +339 -0
  17. simplicio_cli-0.16.3/simplicio/legacy_json_adapter.py +64 -0
  18. simplicio_cli-0.16.3/simplicio/local_inference.py +59 -0
  19. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/local_models.py +13 -0
  20. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/memory_store.py +1 -3
  21. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/observability.py +6 -2
  22. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/multi_task.py +3 -3
  23. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orientation_plan.py +1 -2
  24. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline.py +307 -20
  25. simplicio_cli-0.16.3/simplicio/pipeline_integrated.py +351 -0
  26. simplicio_cli-0.16.3/simplicio/plan_compiler/__init__.py +163 -0
  27. simplicio_cli-0.16.3/simplicio/plan_compiler/authority.py +336 -0
  28. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/compat_adapter.py +8 -0
  29. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/compile_task_spec.py +32 -13
  30. simplicio_cli-0.16.3/simplicio/plan_compiler/conformance.py +193 -0
  31. simplicio_cli-0.16.3/simplicio/plan_compiler/effect_sink.py +112 -0
  32. simplicio_cli-0.16.3/simplicio/plan_compiler/mapper_context.py +696 -0
  33. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/models.py +42 -38
  34. simplicio_cli-0.16.3/simplicio/plan_compiler/runtime_effect_sink.py +681 -0
  35. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_discovery.py +4 -12
  36. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/provider_cache_receipt.py +1 -3
  37. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/providers.py +92 -12
  38. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_contracts.py +16 -0
  39. simplicio_cli-0.16.3/simplicio/standalone_migration.py +237 -0
  40. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/task_operator.py +1 -1
  41. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/task_spec.py +177 -24
  42. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/PKG-INFO +19 -13
  43. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/SOURCES.txt +12 -1
  44. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/requires.txt +1 -1
  45. simplicio_cli-0.16.3/tests/test_json_boundaries.py +18 -0
  46. simplicio_cli-0.16.2/simplicio/commands/task.py +0 -59
  47. simplicio_cli-0.16.2/simplicio/pipeline_integrated.py +0 -171
  48. simplicio_cli-0.16.2/simplicio/plan_compiler/__init__.py +0 -87
  49. simplicio_cli-0.16.2/simplicio/plan_compiler/effect_sink.py +0 -93
  50. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/LICENSE +0 -0
  51. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/setup.cfg +0 -0
  52. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/adaptive.py +0 -0
  53. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/bench.py +0 -0
  54. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cache.py +0 -0
  55. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/cache_cli.py +0 -0
  56. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/__init__.py +0 -0
  57. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/bench.py +0 -0
  58. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/cache.py +0 -0
  59. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/claims.py +0 -0
  60. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/detect.py +0 -0
  61. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/doctor.py +0 -0
  62. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/env_export.py +0 -0
  63. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/file.py +0 -0
  64. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/file_read.py +0 -0
  65. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/gate.py +0 -0
  66. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/index.py +0 -0
  67. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/init.py +0 -0
  68. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/inspect.py +0 -0
  69. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/intake.py +0 -0
  70. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/memory.py +0 -0
  71. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/nest.py +0 -0
  72. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/scenarios/claims-gate.json +0 -0
  73. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/score_skill.py +0 -0
  74. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/smoke.py +0 -0
  75. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/status.py +0 -0
  76. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/test.py +0 -0
  77. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/test_run.py +0 -0
  78. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/token.py +0 -0
  79. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/commands/versions.py +0 -0
  80. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/component_manifest.py +0 -0
  81. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/detect.py +0 -0
  82. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/doctor.py +0 -0
  83. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/dod.py +0 -0
  84. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/ecosystem.py +0 -0
  85. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/evidence_ledger.py +0 -0
  86. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/hardware.py +0 -0
  87. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/hub_adapter.py +0 -0
  88. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/init.py +0 -0
  89. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/intent.py +0 -0
  90. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/map_view.py +0 -0
  91. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mapper.py +0 -0
  92. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mapper_api.py +0 -0
  93. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/mechanical_edit.py +0 -0
  94. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/__init__.py +0 -0
  95. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/cost_governor.py +0 -0
  96. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/orchestrator/feature.py +0 -0
  97. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_fixers.py +0 -0
  98. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_stages.py +0 -0
  99. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/pipeline_task_result.py +0 -0
  100. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/canonical_hash.py +0 -0
  101. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/plan_compiler/errors.py +0 -0
  102. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/precedent.py +0 -0
  103. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/prompt.py +0 -0
  104. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/prompt_envelope.py +0 -0
  105. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/py.typed +0 -0
  106. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_async.py +0 -0
  107. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_bridge.py +0 -0
  108. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/runtime_env.py +0 -0
  109. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/__init__.py +0 -0
  110. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/_pipeline_adapter.py +0 -0
  111. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/cli.py +0 -0
  112. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/__init__.py +0 -0
  113. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/go_gin.py +0 -0
  114. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/markdown_document.py +0 -0
  115. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/php_laravel.py +0 -0
  116. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_cst.py +0 -0
  117. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_fastapi.py +0 -0
  118. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_orm.py +0 -0
  119. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_pydantic.py +0 -0
  120. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/python_pytest.py +0 -0
  121. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/registry.py +0 -0
  122. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/rust_axum.py +0 -0
  123. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/types.py +0 -0
  124. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
  125. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
  126. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/executor.py +0 -0
  127. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/plan_schema.py +0 -0
  128. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/planner.py +0 -0
  129. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/recipes.py +0 -0
  130. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/skill_opt.py +0 -0
  131. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/scratch/stack_registry.py +0 -0
  132. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/skill_router.py +0 -0
  133. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/sprint_loader.py +0 -0
  134. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/SKILL.md +0 -0
  135. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/admin-crud.yaml +0 -0
  136. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/auth-jwt.yaml +0 -0
  137. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
  138. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/admin-crud.yaml +0 -0
  139. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/auth-jwt.yaml +0 -0
  140. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
  141. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
  142. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
  143. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
  144. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/background-worker.yaml +0 -0
  145. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
  146. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/file-upload.yaml +0 -0
  147. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/oauth-integration.yaml +0 -0
  148. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/scheduled-job.yaml +0 -0
  149. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/py-fastapi/websocket.yaml +0 -0
  150. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/admin-crud.yaml +0 -0
  151. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/auth-jwt.yaml +0 -0
  152. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
  153. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
  154. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
  155. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
  156. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/simplicio_prompt.md +0 -0
  157. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/README.md +0 -0
  158. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
  159. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
  160. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
  161. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
  162. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
  163. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
  164. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
  165. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
  166. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
  167. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
  168. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
  169. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
  170. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
  171. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
  172. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
  173. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
  174. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
  175. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
  176. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
  177. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
  178. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
  179. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
  180. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
  181. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
  182. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
  183. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
  184. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
  185. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
  186. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
  187. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
  188. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
  189. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
  190. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
  191. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
  192. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
  193. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
  194. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
  195. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
  196. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
  197. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
  198. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
  199. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
  200. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
  201. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
  202. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
  203. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
  204. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
  205. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/README.md +0 -0
  206. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/practices.md +0 -0
  207. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/stack.json +0 -0
  208. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
  209. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
  210. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
  211. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
  212. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
  213. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-cli/verify.json +0 -0
  214. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/README.md +0 -0
  215. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/practices.md +0 -0
  216. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/stack.json +0 -0
  217. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
  218. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
  219. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
  220. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
  221. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
  222. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-echo/verify.json +0 -0
  223. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/README.md +0 -0
  224. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/practices.md +0 -0
  225. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/stack.json +0 -0
  226. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
  227. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
  228. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
  229. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
  230. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
  231. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/go-gin/verify.json +0 -0
  232. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/README.md +0 -0
  233. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/practices.md +0 -0
  234. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/stack.json +0 -0
  235. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
  236. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
  237. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
  238. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
  239. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
  240. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
  241. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/java-spring/verify.json +0 -0
  242. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/README.md +0 -0
  243. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/practices.md +0 -0
  244. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/stack.json +0 -0
  245. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
  246. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
  247. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
  248. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
  249. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
  250. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/js-express/verify.json +0 -0
  251. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
  252. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
  253. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
  254. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
  255. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
  256. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
  257. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
  258. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
  259. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
  260. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
  261. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
  262. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
  263. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
  264. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
  265. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
  266. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
  267. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
  268. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
  269. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
  270. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
  271. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
  272. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
  273. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
  274. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
  275. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
  276. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
  277. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
  278. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
  279. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
  280. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
  281. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
  282. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/README.md +0 -0
  283. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
  284. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
  285. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
  286. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
  287. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
  288. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
  289. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
  290. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
  291. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
  292. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
  293. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
  294. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
  295. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/README.md +0 -0
  296. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
  297. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
  298. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
  299. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
  300. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
  301. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
  302. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
  303. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
  304. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
  305. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
  306. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
  307. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
  308. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
  309. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
  310. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
  311. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
  312. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/README.md +0 -0
  313. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/practices.md +0 -0
  314. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/stack.json +0 -0
  315. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
  316. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
  317. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
  318. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
  319. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
  320. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-cli/verify.json +0 -0
  321. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/README.md +0 -0
  322. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/practices.md +0 -0
  323. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/stack.json +0 -0
  324. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
  325. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
  326. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
  327. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
  328. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
  329. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
  330. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
  331. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
  332. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
  333. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
  334. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
  335. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
  336. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-django/verify.json +0 -0
  337. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
  338. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
  339. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
  340. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
  341. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
  342. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
  343. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
  344. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
  345. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
  346. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
  347. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
  348. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/README.md +0 -0
  349. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/practices.md +0 -0
  350. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/stack.json +0 -0
  351. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
  352. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
  353. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
  354. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
  355. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
  356. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/py-flask/verify.json +0 -0
  357. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/README.md +0 -0
  358. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/practices.md +0 -0
  359. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/stack.json +0 -0
  360. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
  361. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
  362. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
  363. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
  364. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
  365. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
  366. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
  367. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/react-vite/verify.json +0 -0
  368. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
  369. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
  370. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
  371. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
  372. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
  373. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
  374. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
  375. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
  376. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
  377. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
  378. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
  379. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
  380. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
  381. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/README.md +0 -0
  382. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
  383. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
  384. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
  385. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
  386. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
  387. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
  388. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/README.md +0 -0
  389. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
  390. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
  391. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
  392. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
  393. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
  394. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
  395. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
  396. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
  397. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
  398. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
  399. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
  400. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
  401. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
  402. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/README.md +0 -0
  403. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
  404. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
  405. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
  406. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
  407. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
  408. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
  409. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
  410. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
  411. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
  412. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
  413. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
  414. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
  415. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
  416. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
  417. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
  418. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
  419. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
  420. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
  421. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
  422. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
  423. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
  424. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
  425. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
  426. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
  427. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
  428. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
  429. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
  430. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
  431. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
  432. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
  433. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
  434. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
  435. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
  436. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
  437. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
  438. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
  439. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
  440. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
  441. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/README.md +0 -0
  442. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
  443. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
  444. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
  445. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
  446. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
  447. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
  448. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
  449. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
  450. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
  451. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
  452. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
  453. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/token_primitives.py +0 -0
  454. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/toon_codec.py +0 -0
  455. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/transaction.py +0 -0
  456. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/__init__.py +0 -0
  457. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/cache.py +0 -0
  458. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/fs.py +0 -0
  459. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/http_client.py +0 -0
  460. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio/utils/serialization.py +0 -0
  461. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/dependency_links.txt +0 -0
  462. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/entry_points.txt +0 -0
  463. {simplicio_cli-0.16.2 → simplicio_cli-0.16.3}/simplicio_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplicio-cli
3
- Version: 0.16.2
3
+ Version: 0.16.3
4
4
  Summary: Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens.
5
5
  Author-email: Wesley Simplicio <wesleybob4@gmail.com>
6
6
  License: MIT
@@ -28,7 +28,7 @@ Requires-Python: >=3.10
28
28
  Description-Content-Type: text/markdown
29
29
  License-File: LICENSE
30
30
  Requires-Dist: numpy>=2.1.0
31
- Requires-Dist: simplicio-mapper>=0.24.1
31
+ Requires-Dist: simplicio-mapper>=0.24.2
32
32
  Requires-Dist: simplicio-prompt>=1.14.1
33
33
  Requires-Dist: httpx>=0.28.1
34
34
  Requires-Dist: orjson>=3.11.9
@@ -538,10 +538,10 @@ Missing an extra never crashes with a raw traceback — every optional import
538
538
  is guarded and raises an actionable error naming the exact extra to install
539
539
  (e.g. `pip install 'simplicio-cli[providers]'`).
540
540
 
541
- #### Local quality gate
541
+ #### CI and local quality gate
542
542
 
543
- GitHub Actions is disabled for this repository and `.github/workflows/` is
544
- intentionally absent. The reproducible merge gate runs locally; attach its
543
+ The blocking `.github/workflows/ci.yml` coverage job runs on pull requests
544
+ and pushes to `main`. The same gate is reproducible locally; attach its
545
545
  command output to the pull request:
546
546
 
547
547
  ```bash
@@ -780,7 +780,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
780
780
  | GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
781
781
  | DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
782
782
  | OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
783
- | Local (llama.cpp) | `openbmb/minicpm5:latest` | *(leave unset)* |
783
+ | Local (llama.cpp, paused by default) | `openbmb/minicpm5:latest` + `SIMPLICIO_LOCAL_INFERENCE=enabled` | *(leave unset)* |
784
784
  | Anthropic native | `claude-opus-4-7` | *(leave unset)* |
785
785
 
786
786
  If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
@@ -791,19 +791,25 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
791
791
  simplicio-py smoke # prints provider config + one test call
792
792
  ```
793
793
 
794
- #### Path 4 — local llama.cpp GGUF default
794
+ #### Path 4 — local llama.cpp GGUF (explicitly re-enabled only)
795
795
 
796
- When **no provider is configured** (`SIMPLICIO_MODEL` and
797
- `SIMPLICIO_BASE_URL` both unset), simplicio runs the in-process
798
- [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python) backend with
799
- `openbmb/minicpm5:latest`, backed by
796
+ Local inference is **paused by default**. With no provider configured, or
797
+ when a loopback endpoint such as Ollama is selected, the CLI fails closed with
798
+ the machine-readable reason `LOCAL_INFERENCE_PAUSED`; it does not read a
799
+ cached completion, load a model, download weights, start a process, or open a
800
+ socket. Existing GGUF artifacts are preserved.
801
+
802
+ Use an explicit remote provider for normal operation. To intentionally enable
803
+ the local route for a process, set `SIMPLICIO_LOCAL_INFERENCE=enabled` first.
804
+ The in-process [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python)
805
+ backend then uses `openbmb/minicpm5:latest`, backed by
800
806
  `openbmb/MiniCPM5-1B-GGUF::MiniCPM5-1B-Q4_K_M.gguf`.
801
807
 
802
808
  ```bash
803
809
  pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
804
- simplicio-py doctor --install # downloads/validates the default GGUF
810
+ SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py doctor --install
805
811
 
806
- simplicio-py task "add input validation to createUser" \
812
+ SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py task "add input validation to createUser" \
807
813
  --target src/users.ts --local # forces local llama.cpp
808
814
 
809
815
  # the GGUF is fetched once from the Hugging Face Hub, then reused
@@ -472,10 +472,10 @@ Missing an extra never crashes with a raw traceback — every optional import
472
472
  is guarded and raises an actionable error naming the exact extra to install
473
473
  (e.g. `pip install 'simplicio-cli[providers]'`).
474
474
 
475
- #### Local quality gate
475
+ #### CI and local quality gate
476
476
 
477
- GitHub Actions is disabled for this repository and `.github/workflows/` is
478
- intentionally absent. The reproducible merge gate runs locally; attach its
477
+ The blocking `.github/workflows/ci.yml` coverage job runs on pull requests
478
+ and pushes to `main`. The same gate is reproducible locally; attach its
479
479
  command output to the pull request:
480
480
 
481
481
  ```bash
@@ -714,7 +714,7 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
714
714
  | GLM (z.ai) | `glm-4.6` | `https://api.z.ai/api/paas/v4` |
715
715
  | DeepSeek | `deepseek-chat` | `https://api.deepseek.com` |
716
716
  | OpenAI | `gpt-4.1` | `https://api.openai.com/v1` |
717
- | Local (llama.cpp) | `openbmb/minicpm5:latest` | *(leave unset)* |
717
+ | Local (llama.cpp, paused by default) | `openbmb/minicpm5:latest` + `SIMPLICIO_LOCAL_INFERENCE=enabled` | *(leave unset)* |
718
718
  | Anthropic native | `claude-opus-4-7` | *(leave unset)* |
719
719
 
720
720
  If `SIMPLICIO_BASE_URL` is unset and the key is `ANTHROPIC_API_KEY`, it uses the
@@ -725,19 +725,25 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
725
725
  simplicio-py smoke # prints provider config + one test call
726
726
  ```
727
727
 
728
- #### Path 4 — local llama.cpp GGUF default
728
+ #### Path 4 — local llama.cpp GGUF (explicitly re-enabled only)
729
729
 
730
- When **no provider is configured** (`SIMPLICIO_MODEL` and
731
- `SIMPLICIO_BASE_URL` both unset), simplicio runs the in-process
732
- [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python) backend with
733
- `openbmb/minicpm5:latest`, backed by
730
+ Local inference is **paused by default**. With no provider configured, or
731
+ when a loopback endpoint such as Ollama is selected, the CLI fails closed with
732
+ the machine-readable reason `LOCAL_INFERENCE_PAUSED`; it does not read a
733
+ cached completion, load a model, download weights, start a process, or open a
734
+ socket. Existing GGUF artifacts are preserved.
735
+
736
+ Use an explicit remote provider for normal operation. To intentionally enable
737
+ the local route for a process, set `SIMPLICIO_LOCAL_INFERENCE=enabled` first.
738
+ The in-process [`llama-cpp-python`](https://github.com/abetlen/llama-cpp-python)
739
+ backend then uses `openbmb/minicpm5:latest`, backed by
734
740
  `openbmb/MiniCPM5-1B-GGUF::MiniCPM5-1B-Q4_K_M.gguf`.
735
741
 
736
742
  ```bash
737
743
  pip install 'simplicio-cli[local]' # pulls llama-cpp-python + huggingface-hub
738
- simplicio-py doctor --install # downloads/validates the default GGUF
744
+ SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py doctor --install
739
745
 
740
- simplicio-py task "add input validation to createUser" \
746
+ SIMPLICIO_LOCAL_INFERENCE=enabled simplicio-py task "add input validation to createUser" \
741
747
  --target src/users.ts --local # forces local llama.cpp
742
748
 
743
749
  # the GGUF is fetched once from the Hugging Face Hub, then reused
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simplicio-cli"
3
- version = "0.16.2"
3
+ version = "0.16.3"
4
4
  description = "Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens."
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -53,7 +53,7 @@ classifiers = [
53
53
  # (generated, `--check`-able) for the full graph and #99 for the audit.
54
54
  dependencies = [
55
55
  "numpy>=2.1.0",
56
- "simplicio-mapper>=0.24.1",
56
+ "simplicio-mapper>=0.24.2",
57
57
  "simplicio-prompt>=1.14.1",
58
58
  "httpx>=0.28.1",
59
59
  "orjson>=3.11.9",
@@ -72,8 +72,8 @@ providers = ["anthropic>=0.112.0", "openai>=2.44.0"]
72
72
  # vectors yet); the numpy-only cosine-similarity math stays in base.
73
73
  ml = ["sentence-transformers>=5.6.0"]
74
74
  bench = ["fpdf2>=2.8.7"]
75
- # Offline fallback in-process inference. Pulls the llama.cpp Python bindings
76
- # plus huggingface-hub to fetch MiniCPM5-1B-Q4_K_M.gguf.
75
+ # Explicit opt-in local inference. Pulls llama.cpp Python bindings and
76
+ # huggingface-hub; the backend stays paused until SIMPLICIO_LOCAL_INFERENCE=enabled.
77
77
  local = ["llama-cpp-python>=0.3.32", "huggingface-hub>=1.21.0"]
78
78
  # Opt-in faster asyncio event loop for the structured-concurrency runtime
79
79
  # (simplicio.runtime_async, issue #212). Never required: `install_uvloop()`
@@ -1,4 +1,4 @@
1
- __version__ = "0.16.2"
1
+ __version__ = "0.16.3"
2
2
 
3
3
  from .mapper_api import mapper_module, mapper_version
4
4
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import ast
5
6
  import hashlib
6
7
  import json
7
8
  import os
@@ -12,6 +13,8 @@ from dataclasses import dataclass, field
12
13
  from pathlib import Path
13
14
  from typing import Any
14
15
 
16
+ from .hbp import HbpError, HbpEvidenceLedger
17
+
15
18
 
16
19
  def _env_flag(name: str, default: bool) -> bool:
17
20
  raw = os.environ.get(name)
@@ -111,8 +114,90 @@ class CompletionCache:
111
114
  return _env_flag("SIMPLICIO_BUST_CACHE", False)
112
115
 
113
116
  def path_for(self, key: str) -> Path:
117
+ return self.root / key[:2] / f"{key}.hbp"
118
+
119
+ def _legacy_path_for(self, key: str) -> Path:
114
120
  return self.root / key[:2] / f"{key}.json"
115
121
 
122
+ @staticmethod
123
+ def _fields(entry: CacheEntry) -> dict[str, str]:
124
+ # repr/literal_eval is used only for the bounded metadata scalar. It
125
+ # is never executed and keeps the internal cache free of JSON.
126
+ return {
127
+ "completion": entry.completion,
128
+ "created_at": repr(entry.created_at),
129
+ "metadata": repr(entry.metadata),
130
+ "model": entry.model,
131
+ "provider_id": entry.provider_id,
132
+ }
133
+
134
+ @staticmethod
135
+ def _entry_from_fields(fields: dict[str, str]) -> CacheEntry:
136
+ try:
137
+ metadata = ast.literal_eval(fields.get("metadata", "{}"))
138
+ created_at = float(fields.get("created_at", "0"))
139
+ except (ValueError, SyntaxError, TypeError) as exc:
140
+ raise HbpError("invalid completion cache fields") from exc
141
+ if not isinstance(metadata, dict):
142
+ raise HbpError("completion cache metadata must be a mapping")
143
+ return CacheEntry(
144
+ completion=fields.get("completion", ""),
145
+ provider_id=fields.get("provider_id", ""),
146
+ model=fields.get("model", ""),
147
+ created_at=created_at or time.time(),
148
+ metadata=metadata,
149
+ )
150
+
151
+ def _read_hbp(self, path: Path) -> CacheEntry:
152
+ rows = HbpEvidenceLedger(path.parent, file_name=path.name).verify()
153
+ if len(rows) != 1 or rows[0].topic != "completion-cache":
154
+ raise HbpError("completion cache must contain exactly one record")
155
+ payload = rows[0].payload
156
+ payload_bytes = payload.encode("utf-8")
157
+ prefix = b"hbp-fields/v1"
158
+ if not payload_bytes.startswith(prefix):
159
+ raise HbpError("completion cache has an unsupported payload")
160
+ fields: dict[str, str] = {}
161
+ cursor = len(prefix)
162
+ while cursor < len(payload_bytes):
163
+ if payload_bytes[cursor : cursor + 1] != b":":
164
+ raise HbpError("invalid completion cache field framing")
165
+ colon = payload_bytes.find(b":", cursor + 1)
166
+ if colon < 0:
167
+ raise HbpError("truncated completion cache field length")
168
+ try:
169
+ size = int(payload_bytes[cursor + 1 : colon])
170
+ except ValueError as exc:
171
+ raise HbpError("invalid completion cache field length") from exc
172
+ start = colon + 1
173
+ end = start + size
174
+ raw_field, cursor = payload_bytes[start:end], end
175
+ if len(raw_field) != size:
176
+ raise HbpError("truncated completion cache field")
177
+ try:
178
+ field = raw_field.decode("utf-8")
179
+ except UnicodeDecodeError as exc:
180
+ raise HbpError("completion cache field is not UTF-8") from exc
181
+ separator = field.find("=")
182
+ if separator < 1:
183
+ raise HbpError("completion cache field is missing a key")
184
+ key, value = field[:separator], field[separator + 1 :]
185
+ fields[key] = value
186
+ return self._entry_from_fields(fields)
187
+
188
+ def _write_hbp(self, path: Path, entry: CacheEntry) -> None:
189
+ path.parent.mkdir(parents=True, exist_ok=True)
190
+ temp_dir = Path(tempfile.mkdtemp(prefix=f".{path.stem}.", dir=str(path.parent)))
191
+ try:
192
+ temp_path = temp_dir / path.name
193
+ HbpEvidenceLedger(temp_dir, file_name=path.name).record_fields(
194
+ "completion-cache", self._fields(entry), "simplicio-dev-cli/cache"
195
+ )
196
+ HbpEvidenceLedger(temp_dir, file_name=path.name).verify()
197
+ os.replace(temp_path, path)
198
+ finally:
199
+ shutil.rmtree(temp_dir, ignore_errors=True)
200
+
116
201
  def get(self, key: str) -> CacheEntry | None:
117
202
  if not self.enabled or self.bust:
118
203
  self.misses += 1
@@ -120,8 +205,19 @@ class CompletionCache:
120
205
  path = self.path_for(key)
121
206
  try:
122
207
  if not path.exists():
123
- self.misses += 1
124
- return None
208
+ legacy = self._legacy_path_for(key)
209
+ if legacy.exists():
210
+ try:
211
+ with legacy.open("r", encoding="utf-8") as handle:
212
+ self._write_hbp(path, CacheEntry.from_dict(json.load(handle)))
213
+ legacy.unlink()
214
+ except (OSError, ValueError, TypeError, json.JSONDecodeError, HbpError):
215
+ self._safe_unlink(legacy)
216
+ self.misses += 1
217
+ return None
218
+ else:
219
+ self.misses += 1
220
+ return None
125
221
  if self._is_expired(path):
126
222
  self._safe_unlink(path)
127
223
  self.misses += 1
@@ -130,11 +226,10 @@ class CompletionCache:
130
226
  self.misses += 1
131
227
  return None
132
228
  try:
133
- with path.open("r", encoding="utf-8") as handle:
134
- entry = CacheEntry.from_dict(json.load(handle))
135
- self.hits += 1
136
- return entry
137
- except (OSError, ValueError, TypeError):
229
+ entry = self._read_hbp(path)
230
+ self.hits += 1
231
+ return entry
232
+ except (OSError, ValueError, TypeError, HbpError):
138
233
  self._safe_unlink(path)
139
234
  self.misses += 1
140
235
  return None
@@ -144,24 +239,9 @@ class CompletionCache:
144
239
  return
145
240
  path = self.path_for(key)
146
241
  try:
147
- path.parent.mkdir(parents=True, exist_ok=True)
148
- fd, tmp_name = tempfile.mkstemp(
149
- prefix=f".{path.stem}.",
150
- suffix=".tmp",
151
- dir=str(path.parent),
152
- )
242
+ self._write_hbp(path, entry)
153
243
  except OSError:
154
244
  return
155
- try:
156
- with os.fdopen(fd, "w", encoding="utf-8") as handle:
157
- json.dump(entry.to_dict(), handle, sort_keys=True)
158
- try:
159
- os.replace(tmp_name, path)
160
- except OSError:
161
- return
162
- finally:
163
- if os.path.exists(tmp_name):
164
- self._safe_unlink(Path(tmp_name))
165
245
  self.puts += 1
166
246
  evict_every = max(1, _env_int("SIMPLICIO_CACHE_EVICT_EVERY", 16))
167
247
  if self.puts == 1 or self.puts % evict_every == 0:
@@ -202,7 +282,7 @@ class CompletionCache:
202
282
  return []
203
283
  return [
204
284
  path
205
- for path in self.root.rglob("*.json")
285
+ for path in self.root.rglob("*.hbp")
206
286
  if path.is_file() and _is_completion_cache_file(self.root, path)
207
287
  ]
208
288
  except OSError:
@@ -0,0 +1,306 @@
1
+ """One-dispatch/one-attempt execution boundary for integrated coordinators.
2
+
3
+ This module deliberately has no scheduler, retry loop, provider selection,
4
+ worktree creation, queue, or terminal-state writer. The coordinator supplies
5
+ one already-selected PlanNode and its causal attempt/lease context; Dev CLI
6
+ may submit at most the single effect belonging to that node and returns an
7
+ observation. What happens next is exclusively a coordinator decision.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import contextvars
13
+ import hashlib
14
+ import time
15
+ from collections.abc import Callable, Mapping, Sequence
16
+ from dataclasses import dataclass, field
17
+ from typing import Any, Literal
18
+
19
+ from simplicio.plan_compiler.effect_sink import EffectDispatchContext, EffectOutcome, EffectSink
20
+ from simplicio.plan_compiler.models import EffectPlan, PlanNode, VerificationPlan
21
+
22
+ ATOMIC_OBSERVATION_SCHEMA = "simplicio.dev-cli.atomic-observation/v1"
23
+ Outcome = Literal[
24
+ "completed",
25
+ "effect_submitted",
26
+ "failed",
27
+ "cancelled",
28
+ "lease_lost",
29
+ "stale_fence",
30
+ "effect_unknown",
31
+ ]
32
+ Retryability = Literal["retryable", "non_retryable", "unknown"]
33
+ CancellationCheck = Callable[[], bool]
34
+ LeaseCheck = Callable[[str, str], bool]
35
+ FenceCheck = Callable[[str], bool]
36
+
37
+
38
+ class IntegratedOwnershipError(RuntimeError):
39
+ """An integrated caller attempted to reintroduce local lifecycle ownership."""
40
+
41
+
42
+ @dataclass(frozen=True)
43
+ class AttemptContext:
44
+ """Coordinator-owned identity and guards for exactly one dispatch."""
45
+
46
+ attempt_id: str
47
+ lease_id: str
48
+ fencing_token: str
49
+ context_handle: str
50
+ deadline_monotonic: float | None = None
51
+ cancellation_requested: CancellationCheck = field(default=lambda: False, repr=False, compare=False)
52
+ lease_valid: LeaseCheck = field(default=lambda _lease, _fence: True, repr=False, compare=False)
53
+ fence_current: FenceCheck = field(default=lambda _fence: True, repr=False, compare=False)
54
+
55
+ def __post_init__(self) -> None:
56
+ for name in ("attempt_id", "lease_id", "fencing_token", "context_handle"):
57
+ if not getattr(self, name).strip():
58
+ raise ValueError(f"{name} is required for integrated execution")
59
+
60
+
61
+ @dataclass(frozen=True)
62
+ class AtomicObservation:
63
+ """Executor facts sufficient for an external coordinator's next decision."""
64
+
65
+ outcome: Outcome
66
+ reason: str
67
+ failure_fingerprint: str | None
68
+ retryability: Retryability
69
+ attempt_id: str
70
+ lease_id: str
71
+ fencing_token: str
72
+ context_handle: str
73
+ plan_node_id: str
74
+ effect_ids: tuple[str, ...]
75
+ evidence_handles: tuple[str, ...]
76
+ receipt_handles: tuple[str, ...]
77
+ validation: tuple[Mapping[str, Any], ...]
78
+ resources: Mapping[str, int | float | None]
79
+
80
+ def to_dict(self) -> dict[str, Any]:
81
+ return {
82
+ "schema": ATOMIC_OBSERVATION_SCHEMA,
83
+ "outcome": self.outcome,
84
+ "reason": self.reason,
85
+ "failure_fingerprint": self.failure_fingerprint,
86
+ "retryability": self.retryability,
87
+ "attempt_id": self.attempt_id,
88
+ "lease_id": self.lease_id,
89
+ "fencing_token": self.fencing_token,
90
+ "context_handle": self.context_handle,
91
+ "plan_node_id": self.plan_node_id,
92
+ "effect_ids": list(self.effect_ids),
93
+ "evidence_handles": list(self.evidence_handles),
94
+ "receipt_handles": list(self.receipt_handles),
95
+ "validation": [dict(item) for item in self.validation],
96
+ "resources": dict(self.resources),
97
+ }
98
+
99
+
100
+ _ACTIVE_ATTEMPT: contextvars.ContextVar[str | None] = contextvars.ContextVar(
101
+ "simplicio_integrated_attempt", default=None
102
+ )
103
+
104
+
105
+ def _fingerprint(reason: str) -> str:
106
+ return hashlib.sha256(reason.encode("utf-8", errors="replace")).hexdigest()[:16]
107
+
108
+
109
+ def _guard_reason(attempt: AttemptContext) -> tuple[Outcome, str] | None:
110
+ if attempt.cancellation_requested():
111
+ return "cancelled", "coordinator cancellation requested"
112
+ if attempt.deadline_monotonic is not None and time.monotonic() >= attempt.deadline_monotonic:
113
+ return "cancelled", "coordinator deadline elapsed"
114
+ if not attempt.fence_current(attempt.fencing_token):
115
+ return "stale_fence", "coordinator fencing token is stale"
116
+ if not attempt.lease_valid(attempt.lease_id, attempt.fencing_token):
117
+ return "lease_lost", "coordinator lease is no longer valid"
118
+ return None
119
+
120
+
121
+ def _observation(
122
+ outcome: Outcome,
123
+ reason: str,
124
+ retryability: Retryability,
125
+ *,
126
+ node: PlanNode,
127
+ attempt: AttemptContext,
128
+ started: float,
129
+ effect_ids: tuple[str, ...] = (),
130
+ evidence_handles: tuple[str, ...] = (),
131
+ receipt_handles: tuple[str, ...] = (),
132
+ validation: tuple[Mapping[str, Any], ...] = (),
133
+ ) -> AtomicObservation:
134
+ return AtomicObservation(
135
+ outcome=outcome,
136
+ reason=reason,
137
+ failure_fingerprint=None if outcome in {"completed", "effect_submitted"} else _fingerprint(reason),
138
+ retryability=retryability,
139
+ attempt_id=attempt.attempt_id,
140
+ lease_id=attempt.lease_id,
141
+ fencing_token=attempt.fencing_token,
142
+ context_handle=attempt.context_handle,
143
+ plan_node_id=node.node_id,
144
+ effect_ids=effect_ids,
145
+ evidence_handles=evidence_handles,
146
+ receipt_handles=receipt_handles,
147
+ validation=validation,
148
+ resources={
149
+ "atomic_attempts": 1,
150
+ "effect_calls": len(effect_ids),
151
+ "model_calls": 0,
152
+ "subprocesses": 0,
153
+ "threads_created": 0,
154
+ "worktrees_created": 0,
155
+ "tokens": 0,
156
+ "latency_ms": round((time.monotonic() - started) * 1000, 3),
157
+ },
158
+ )
159
+
160
+
161
+ def execute_work_item_once(
162
+ plan_node: PlanNode,
163
+ attempt: AttemptContext,
164
+ *,
165
+ effects: Sequence[EffectPlan],
166
+ verifications: Sequence[VerificationPlan],
167
+ effect_sink: EffectSink,
168
+ dispatch_context: EffectDispatchContext | None = None,
169
+ ) -> AtomicObservation:
170
+ """Execute one selected node once, without making lifecycle decisions.
171
+
172
+ An effectful node must have exactly one matching effect. This structural
173
+ restriction makes a single dispatch incapable of hiding a retry/batch.
174
+ Guard checks run immediately before the only mutating boundary. Sink
175
+ exceptions become ``effect_unknown`` and are never retried here.
176
+ """
177
+ active = _ACTIVE_ATTEMPT.get()
178
+ if active is not None:
179
+ raise IntegratedOwnershipError(
180
+ f"nested integrated attempt is forbidden: active={active}, requested={attempt.attempt_id}"
181
+ )
182
+ matching_effects = tuple(effect for effect in effects if effect.plan_node_id == plan_node.node_id)
183
+ unrelated = [effect.effect_id for effect in effects if effect.plan_node_id != plan_node.node_id]
184
+ if unrelated:
185
+ raise IntegratedOwnershipError("one dispatch may contain effects only for its selected PlanNode")
186
+ if len(matching_effects) > 1:
187
+ raise IntegratedOwnershipError("one integrated PlanNode may submit at most one effect per dispatch")
188
+ if dispatch_context is not None:
189
+ if dispatch_context.plan_node.node_id != plan_node.node_id:
190
+ raise IntegratedOwnershipError(
191
+ "dispatch context PlanNode must match the selected integrated PlanNode"
192
+ )
193
+ if dispatch_context.coordinator_id != attempt.attempt_id:
194
+ raise IntegratedOwnershipError(
195
+ "dispatch context coordinator_id must preserve the coordinator attempt_id"
196
+ )
197
+
198
+ started = time.monotonic()
199
+ token = _ACTIVE_ATTEMPT.set(attempt.attempt_id)
200
+ try:
201
+ guard = _guard_reason(attempt)
202
+ if guard is not None:
203
+ outcome, reason = guard
204
+ return _observation(
205
+ outcome, reason, "retryable", node=plan_node, attempt=attempt, started=started
206
+ )
207
+
208
+ matching_validations = tuple(
209
+ {
210
+ "verification_id": item.verification_id,
211
+ "verifier": item.verifier,
212
+ "acceptance_criteria_refs": list(item.acceptance_criteria_refs),
213
+ }
214
+ for item in verifications
215
+ if item.plan_node_id == plan_node.node_id
216
+ )
217
+ if not matching_effects:
218
+ return _observation(
219
+ "completed",
220
+ "effect-free node observed; coordinator retains verification scheduling",
221
+ "non_retryable",
222
+ node=plan_node,
223
+ attempt=attempt,
224
+ started=started,
225
+ validation=matching_validations,
226
+ )
227
+
228
+ # Re-check at the last possible instant before the only effect boundary.
229
+ guard = _guard_reason(attempt)
230
+ if guard is not None:
231
+ outcome, reason = guard
232
+ return _observation(
233
+ outcome, reason, "retryable", node=plan_node, attempt=attempt, started=started
234
+ )
235
+ effect = matching_effects[0]
236
+ try:
237
+ context = dispatch_context or EffectDispatchContext(
238
+ plan_id="",
239
+ goal_id="",
240
+ plan_node=plan_node,
241
+ verifications=list(verifications),
242
+ coordinator_id=attempt.attempt_id,
243
+ )
244
+ result: EffectOutcome = effect_sink.submit(effect, context)
245
+ except IntegratedOwnershipError:
246
+ raise
247
+ except Exception as exc:
248
+ reason = f"effect outcome unknown after sink failure: {type(exc).__name__}"
249
+ return _observation(
250
+ "effect_unknown",
251
+ reason,
252
+ "unknown",
253
+ node=plan_node,
254
+ attempt=attempt,
255
+ started=started,
256
+ effect_ids=(effect.effect_id,),
257
+ )
258
+
259
+ receipt_payload = result.receipt or {}
260
+ receipt = str(receipt_payload.get("receipt_handle", result.idempotency_key)).strip()
261
+ evidence = tuple(
262
+ str(item) for item in receipt_payload.get("evidence_handles", ()) if str(item).strip()
263
+ )
264
+ accepted_states = {"running", "completed"}
265
+ if result.state not in accepted_states:
266
+ reason = ", ".join(result.reason_codes) or f"runtime effect state: {result.state}"
267
+ retryability: Retryability = (
268
+ "unknown"
269
+ if result.state == "effect_unknown"
270
+ else "retryable"
271
+ if result.state in {"not_started", "blocked_conflict"}
272
+ else "non_retryable"
273
+ )
274
+ return _observation(
275
+ "effect_unknown" if result.state == "effect_unknown" else "failed",
276
+ reason,
277
+ retryability,
278
+ node=plan_node,
279
+ attempt=attempt,
280
+ started=started,
281
+ effect_ids=(effect.effect_id,),
282
+ receipt_handles=(receipt,) if receipt else (),
283
+ )
284
+ return _observation(
285
+ "effect_submitted",
286
+ f"runtime accepted atomic submission with state {result.state}",
287
+ "non_retryable",
288
+ node=plan_node,
289
+ attempt=attempt,
290
+ started=started,
291
+ effect_ids=(effect.effect_id,),
292
+ evidence_handles=evidence,
293
+ receipt_handles=(receipt,) if receipt else (),
294
+ validation=matching_validations,
295
+ )
296
+ finally:
297
+ _ACTIVE_ATTEMPT.reset(token)
298
+
299
+
300
+ __all__ = [
301
+ "ATOMIC_OBSERVATION_SCHEMA",
302
+ "AtomicObservation",
303
+ "AttemptContext",
304
+ "IntegratedOwnershipError",
305
+ "execute_work_item_once",
306
+ ]