simplicio-cli 0.18.0__tar.gz → 0.18.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 (482) hide show
  1. {simplicio_cli-0.18.0/simplicio_cli.egg-info → simplicio_cli-0.18.3}/PKG-INFO +3 -3
  2. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/pyproject.toml +3 -3
  3. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/__init__.py +1 -1
  4. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/checkpoint_store.py +2 -1
  5. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cli.py +2 -0
  6. simplicio_cli-0.18.3/simplicio/codex_hooks.py +65 -0
  7. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/delivery_auth.py +2 -3
  8. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/effect_transaction.py +2 -4
  9. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_mode.py +9 -3
  10. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_receipts.py +1 -1
  11. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/fast_contracts.py +4 -4
  12. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hardware.py +7 -3
  13. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/litert_cli.py +1 -1
  14. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/map_view.py +7 -3
  15. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mapper.py +1 -1
  16. simplicio_cli-0.18.3/simplicio/mutation_dispatch.py +45 -0
  17. simplicio_cli-0.18.3/simplicio/mutation_lifecycle.py +96 -0
  18. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mutation_worker.py +59 -19
  19. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline.py +21 -3
  20. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_task_result.py +27 -4
  21. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/execution_contracts.py +7 -19
  22. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/mapper_context.py +20 -6
  23. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_envelope.py +204 -205
  24. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_receipts.py +4 -4
  25. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prism_transaction.py +2 -2
  26. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/progressive_verify.py +2 -1
  27. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/cli.py +3 -1
  28. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/stage_abi.py +6 -4
  29. simplicio_cli-0.18.3/simplicio/stage_main.py +52 -0
  30. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/fs.py +18 -1
  31. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/write_set_lock.py +122 -122
  32. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3/simplicio_cli.egg-info}/PKG-INFO +3 -3
  33. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/SOURCES.txt +1 -0
  34. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/requires.txt +2 -2
  35. simplicio_cli-0.18.0/simplicio/mutation_dispatch.py +0 -35
  36. simplicio_cli-0.18.0/simplicio/mutation_lifecycle.py +0 -58
  37. simplicio_cli-0.18.0/simplicio/stage_main.py +0 -34
  38. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/LICENSE +0 -0
  39. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/README.md +0 -0
  40. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/setup.cfg +0 -0
  41. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/_cache.py +0 -0
  42. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/adaptive.py +0 -0
  43. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/atomic_execution.py +0 -0
  44. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/bench.py +0 -0
  45. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cache.py +0 -0
  46. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/cache_cli.py +0 -0
  47. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/changeset_v2.py +0 -0
  48. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/__init__.py +0 -0
  49. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/_shared.py +0 -0
  50. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/bench.py +0 -0
  51. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/cache.py +0 -0
  52. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/changeset.py +0 -0
  53. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/claims.py +0 -0
  54. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/detect.py +0 -0
  55. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/doctor.py +0 -0
  56. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/edit.py +0 -0
  57. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/env_export.py +0 -0
  58. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/fast.py +0 -0
  59. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/file.py +0 -0
  60. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/file_read.py +0 -0
  61. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/gate.py +0 -0
  62. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/index.py +0 -0
  63. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/init.py +0 -0
  64. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/inspect.py +0 -0
  65. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/intake.py +0 -0
  66. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/memory.py +0 -0
  67. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/nest.py +0 -0
  68. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/prototype.py +0 -0
  69. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/run.py +0 -0
  70. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/runtime.py +0 -0
  71. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/scenarios/claims-gate.json +0 -0
  72. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/score_skill.py +0 -0
  73. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/smoke.py +0 -0
  74. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/status.py +0 -0
  75. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/task.py +0 -0
  76. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/test.py +0 -0
  77. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/test_run.py +0 -0
  78. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/token.py +0 -0
  79. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/commands/versions.py +0 -0
  80. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/component_manifest.py +0 -0
  81. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/detect.py +0 -0
  82. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/doctor.py +0 -0
  83. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/dod.py +0 -0
  84. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/ecosystem.py +0 -0
  85. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/evidence_ledger.py +0 -0
  86. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/execution_contract.py +0 -0
  87. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hbp.py +0 -0
  88. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/hub_adapter.py +0 -0
  89. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/init.py +0 -0
  90. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/intent.py +0 -0
  91. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/legacy_json_adapter.py +0 -0
  92. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/local_models.py +0 -0
  93. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mapper_api.py +0 -0
  94. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/mechanical_edit.py +0 -0
  95. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/memory_store.py +0 -0
  96. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/observability.py +0 -0
  97. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/__init__.py +0 -0
  98. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/cost_governor.py +0 -0
  99. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/feature.py +0 -0
  100. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orchestrator/multi_task.py +0 -0
  101. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/orientation_plan.py +0 -0
  102. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_fixers.py +0 -0
  103. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_integrated.py +0 -0
  104. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/pipeline_stages.py +0 -0
  105. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/__init__.py +0 -0
  106. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/authority.py +0 -0
  107. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/canonical_hash.py +0 -0
  108. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/compat_adapter.py +0 -0
  109. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/compile_task_spec.py +0 -0
  110. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/conformance.py +0 -0
  111. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/effect_sink.py +0 -0
  112. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/errors.py +0 -0
  113. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/models.py +0 -0
  114. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_compiler/runtime_effect_sink.py +0 -0
  115. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/plan_discovery.py +0 -0
  116. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/precedent.py +0 -0
  117. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prompt.py +0 -0
  118. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/prompt_envelope.py +0 -0
  119. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/provider_cache_receipt.py +0 -0
  120. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/providers.py +0 -0
  121. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/py.typed +0 -0
  122. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_async.py +0 -0
  123. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_bridge.py +0 -0
  124. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_contracts.py +0 -0
  125. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/runtime_env.py +0 -0
  126. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/__init__.py +0 -0
  127. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/_pipeline_adapter.py +0 -0
  128. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/__init__.py +0 -0
  129. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/go_gin.py +0 -0
  130. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/markdown_document.py +0 -0
  131. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/php_laravel.py +0 -0
  132. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_cst.py +0 -0
  133. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_fastapi.py +0 -0
  134. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_orm.py +0 -0
  135. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_pydantic.py +0 -0
  136. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/python_pytest.py +0 -0
  137. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/registry.py +0 -0
  138. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/rust_axum.py +0 -0
  139. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/types.py +0 -0
  140. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
  141. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
  142. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/executor.py +0 -0
  143. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/plan_schema.py +0 -0
  144. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/planner.py +0 -0
  145. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/recipes.py +0 -0
  146. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/skill_opt.py +0 -0
  147. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/scratch/stack_registry.py +0 -0
  148. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/skill_router.py +0 -0
  149. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/sprint_loader.py +0 -0
  150. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/standalone_migration.py +0 -0
  151. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/task_operator.py +0 -0
  152. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/task_spec.py +0 -0
  153. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/SKILL.md +0 -0
  154. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/admin-crud.yaml +0 -0
  155. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/auth-jwt.yaml +0 -0
  156. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
  157. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/admin-crud.yaml +0 -0
  158. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/auth-jwt.yaml +0 -0
  159. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
  160. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
  161. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
  162. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
  163. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/background-worker.yaml +0 -0
  164. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
  165. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/file-upload.yaml +0 -0
  166. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/oauth-integration.yaml +0 -0
  167. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/scheduled-job.yaml +0 -0
  168. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/py-fastapi/websocket.yaml +0 -0
  169. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/admin-crud.yaml +0 -0
  170. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/auth-jwt.yaml +0 -0
  171. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
  172. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
  173. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
  174. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
  175. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/simplicio_prompt.md +0 -0
  176. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/README.md +0 -0
  177. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
  178. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
  179. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
  180. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
  181. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
  182. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
  183. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
  184. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
  185. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
  186. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
  187. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
  188. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
  189. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
  190. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
  191. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
  192. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
  193. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
  194. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
  195. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
  196. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
  197. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
  198. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
  199. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
  200. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
  201. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
  202. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
  203. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
  204. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
  205. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
  206. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
  207. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
  208. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
  209. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
  210. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
  211. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
  212. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
  213. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
  214. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
  215. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
  216. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
  217. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
  218. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
  219. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
  220. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
  221. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
  222. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
  223. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
  224. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/README.md +0 -0
  225. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/practices.md +0 -0
  226. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/stack.json +0 -0
  227. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
  228. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
  229. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
  230. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
  231. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
  232. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-cli/verify.json +0 -0
  233. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/README.md +0 -0
  234. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/practices.md +0 -0
  235. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/stack.json +0 -0
  236. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
  237. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
  238. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
  239. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
  240. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
  241. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-echo/verify.json +0 -0
  242. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/README.md +0 -0
  243. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/practices.md +0 -0
  244. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/stack.json +0 -0
  245. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
  246. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
  247. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
  248. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
  249. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
  250. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/go-gin/verify.json +0 -0
  251. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/README.md +0 -0
  252. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/practices.md +0 -0
  253. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/stack.json +0 -0
  254. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
  255. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
  256. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
  257. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
  258. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
  259. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
  260. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/java-spring/verify.json +0 -0
  261. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/README.md +0 -0
  262. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/practices.md +0 -0
  263. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/stack.json +0 -0
  264. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
  265. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
  266. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
  267. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
  268. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
  269. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/js-express/verify.json +0 -0
  270. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
  271. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
  272. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
  273. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
  274. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
  275. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
  276. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
  277. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
  278. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
  279. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
  280. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
  281. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
  282. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
  283. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
  284. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
  285. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
  286. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
  287. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
  288. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
  289. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
  290. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
  291. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
  292. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
  293. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
  294. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
  295. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
  296. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
  297. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
  298. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
  299. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
  300. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
  301. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/README.md +0 -0
  302. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
  303. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
  304. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
  305. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
  306. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
  307. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
  308. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
  309. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
  310. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
  311. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
  312. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
  313. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
  314. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/README.md +0 -0
  315. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
  316. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
  317. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
  318. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
  319. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
  320. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
  321. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
  322. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
  323. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
  324. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
  325. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
  326. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
  327. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
  328. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
  329. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
  330. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
  331. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/README.md +0 -0
  332. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/practices.md +0 -0
  333. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/stack.json +0 -0
  334. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
  335. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
  336. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
  337. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
  338. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
  339. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-cli/verify.json +0 -0
  340. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/README.md +0 -0
  341. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/practices.md +0 -0
  342. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/stack.json +0 -0
  343. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
  344. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
  345. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
  346. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
  347. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
  348. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
  349. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
  350. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
  351. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
  352. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
  353. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
  354. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
  355. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-django/verify.json +0 -0
  356. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
  357. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
  358. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
  359. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
  360. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
  361. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
  362. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
  363. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
  364. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
  365. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
  366. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
  367. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/README.md +0 -0
  368. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/practices.md +0 -0
  369. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/stack.json +0 -0
  370. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
  371. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
  372. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
  373. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
  374. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
  375. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/py-flask/verify.json +0 -0
  376. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/README.md +0 -0
  377. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/practices.md +0 -0
  378. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/stack.json +0 -0
  379. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
  380. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
  381. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
  382. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
  383. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
  384. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
  385. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
  386. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/react-vite/verify.json +0 -0
  387. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
  388. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
  389. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
  390. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
  391. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
  392. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
  393. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
  394. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
  395. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
  396. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
  397. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
  398. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
  399. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
  400. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/README.md +0 -0
  401. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
  402. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
  403. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
  404. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
  405. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
  406. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
  407. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/README.md +0 -0
  408. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
  409. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
  410. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
  411. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
  412. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
  413. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
  414. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
  415. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
  416. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
  417. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
  418. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
  419. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
  420. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
  421. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/README.md +0 -0
  422. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
  423. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
  424. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
  425. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
  426. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
  427. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
  428. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
  429. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
  430. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
  431. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
  432. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
  433. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
  434. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
  435. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
  436. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
  437. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
  438. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
  439. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
  440. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
  441. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
  442. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
  443. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
  444. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
  445. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
  446. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
  447. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
  448. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
  449. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
  450. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
  451. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
  452. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
  453. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
  454. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
  455. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
  456. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
  457. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
  458. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
  459. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
  460. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/README.md +0 -0
  461. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
  462. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
  463. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
  464. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
  465. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
  466. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
  467. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
  468. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
  469. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
  470. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
  471. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
  472. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/token_primitives.py +0 -0
  473. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/toon_codec.py +0 -0
  474. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/transaction.py +0 -0
  475. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/__init__.py +0 -0
  476. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/cache.py +0 -0
  477. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/http_client.py +0 -0
  478. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio/utils/serialization.py +0 -0
  479. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/dependency_links.txt +0 -0
  480. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/entry_points.txt +0 -0
  481. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/simplicio_cli.egg-info/top_level.txt +0 -0
  482. {simplicio_cli-0.18.0 → simplicio_cli-0.18.3}/tests/test_json_boundaries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplicio-cli
3
- Version: 0.18.0
3
+ Version: 0.18.3
4
4
  Summary: Deterministic task-to-code contract and verification CLI. It never executes or provisions an LLM.
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.26.0
31
+ Requires-Dist: simplicio-mapper>=0.26.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
@@ -40,7 +40,7 @@ Requires-Dist: sentence-transformers>=5.6.0; extra == "ml"
40
40
  Provides-Extra: bench
41
41
  Requires-Dist: fpdf2>=2.8.7; extra == "bench"
42
42
  Provides-Extra: fast
43
- Requires-Dist: simplicio-fast<1,>=0.1; extra == "fast"
43
+ Requires-Dist: simplicio-fast<3,>=2.0.18; extra == "fast"
44
44
  Provides-Extra: performance
45
45
  Requires-Dist: uvloop>=0.21.0; sys_platform != "win32" and extra == "performance"
46
46
  Provides-Extra: all
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simplicio-cli"
3
- version = "0.18.0"
3
+ version = "0.18.3"
4
4
  description = "Deterministic task-to-code contract and verification CLI. It never executes or provisions an LLM."
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -45,7 +45,7 @@ classifiers = [
45
45
  # (generated, `--check`-able) for the full graph and #99 for the audit.
46
46
  dependencies = [
47
47
  "numpy>=2.1.0",
48
- "simplicio-mapper>=0.26.0",
48
+ "simplicio-mapper>=0.26.2",
49
49
  "simplicio-prompt>=1.14.1",
50
50
  "httpx>=0.28.1",
51
51
  "orjson>=3.11.9",
@@ -62,7 +62,7 @@ ml = ["sentence-transformers>=5.6.0"]
62
62
  bench = ["fpdf2>=2.8.7"]
63
63
  # Optional canonical Fast adapter. It remains outside the base install until
64
64
  # its release train is formally promoted.
65
- fast = ["simplicio-fast>=0.1,<1"]
65
+ fast = ["simplicio-fast>=2.0.18,<3"]
66
66
  # Opt-in faster asyncio event loop for the structured-concurrency runtime
67
67
  # (simplicio.runtime_async, issue #212). Never required: `install_uvloop()`
68
68
  # no-ops on Windows or when this extra is absent, falling back to stdlib
@@ -1,4 +1,4 @@
1
- __version__ = "0.18.0"
1
+ __version__ = "0.18.3"
2
2
 
3
3
  from .mapper_api import mapper_module, mapper_version
4
4
 
@@ -6,8 +6,9 @@ import hashlib
6
6
  import json
7
7
  import os
8
8
  import shutil
9
+ from collections.abc import Sequence
9
10
  from pathlib import Path
10
- from typing import Any, Sequence
11
+ from typing import Any
11
12
 
12
13
 
13
14
  class CheckpointError(RuntimeError):
@@ -692,6 +692,7 @@ def _main_unwrapped(argv=None):
692
692
 
693
693
  # Stage ABI mutations fail closed before verbosity/parser/dispatch can run.
694
694
  from .mutation_dispatch import guard_mutable_dispatch
695
+
695
696
  guard_mutable_dispatch(argv)
696
697
 
697
698
  quiet, verbose, argv = _extract_global_verbosity(argv)
@@ -769,6 +770,7 @@ def main(argv=None):
769
770
  """Run legacy commands directly or wrap Stage ABI mutations pre-to-post."""
770
771
  args = list(sys.argv[1:] if argv is None else argv)
771
772
  from .stage_main import run_stage_or_legacy
773
+
772
774
  return run_stage_or_legacy(args, _main_unwrapped)
773
775
 
774
776
 
@@ -0,0 +1,65 @@
1
+ """Portable Codex hook bridge for the installed Simplicio CLI.
2
+
3
+ Codex sends hook context as JSON on stdin. This module deliberately keeps
4
+ the hook observational: malformed input, unsupported events, and detector
5
+ errors never block the host agent. UserPromptSubmit is the one event with a
6
+ useful side effect: it emits the existing deterministic task hint on stderr.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import json
12
+ import os
13
+ import sys
14
+ from typing import Any
15
+
16
+ from .detect import detect
17
+
18
+
19
+ def _payload(raw: str) -> dict[str, Any]:
20
+ if not raw.strip():
21
+ return {}
22
+ try:
23
+ value = json.loads(raw)
24
+ except (TypeError, ValueError):
25
+ return {}
26
+ return value if isinstance(value, dict) else {}
27
+
28
+
29
+ def _event(payload: dict[str, Any]) -> str:
30
+ value = payload.get("hook_event_name") or payload.get("event") or payload.get("type")
31
+ return str(value or "").strip().lower()
32
+
33
+
34
+ def _prompt(payload: dict[str, Any]) -> str:
35
+ for key in ("prompt", "user_prompt", "text"):
36
+ value = payload.get(key)
37
+ if isinstance(value, str):
38
+ return value
39
+ return ""
40
+
41
+
42
+ def main() -> int:
43
+ if os.environ.get("SIMPLICIO_HOOK_GUARD"):
44
+ return 0
45
+
46
+ payload = _payload(sys.stdin.read())
47
+ if _event(payload) not in {"userpromptsubmit", "user_prompt_submit"}:
48
+ return 0
49
+
50
+ prompt = _prompt(payload)
51
+ if not prompt:
52
+ return 0
53
+
54
+ try:
55
+ result = detect(prompt)
56
+ if result.is_code_task:
57
+ sys.stderr.write(f"{result.hint}\n")
58
+ except Exception:
59
+ # Hooks must never take down or block the host agent.
60
+ return 0
61
+ return 0
62
+
63
+
64
+ if __name__ == "__main__":
65
+ raise SystemExit(main())
@@ -2,11 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import hashlib
6
- import json
7
5
  import time
6
+ from collections.abc import Callable, Mapping
8
7
  from dataclasses import dataclass, field
9
- from typing import Any, Callable, Mapping, Sequence
8
+ from typing import Any
10
9
 
11
10
  from simplicio.plan_compiler.canonical_hash import canonical_hash
12
11
 
@@ -58,8 +58,7 @@ class EffectTransaction:
58
58
  with self._db() as database:
59
59
  database.execute("BEGIN IMMEDIATE")
60
60
  database.execute(
61
- "UPDATE transactions SET state=?, receipt=COALESCE(?, receipt) "
62
- "WHERE idempotency_key=?",
61
+ "UPDATE transactions SET state=?, receipt=COALESCE(?, receipt) WHERE idempotency_key=?",
63
62
  (state, encoded, key),
64
63
  )
65
64
  database.execute(
@@ -82,8 +81,7 @@ class EffectTransaction:
82
81
  with self._db() as database:
83
82
  database.execute("BEGIN IMMEDIATE")
84
83
  row = database.execute(
85
- "SELECT change_set_hash,state,receipt FROM transactions "
86
- "WHERE idempotency_key=?",
84
+ "SELECT change_set_hash,state,receipt FROM transactions WHERE idempotency_key=?",
87
85
  (key,),
88
86
  ).fetchone()
89
87
  if row:
@@ -236,9 +236,15 @@ def prepare_execution_inputs(
236
236
  ) -> PreparedExecutionInputs:
237
237
  """Resolve installed-entrypoint inputs without probing in standalone mode."""
238
238
  if requested_mode(mode, root) == "standalone":
239
+ # Standalone still needs to consume an explicitly supplied context pack.
240
+ # Previously the path arguments were silently ignored in this branch, so
241
+ # Loop's local degraded context never reached the task precondition gate.
242
+ resolved_pack = (
243
+ context_pack if context_pack is not None else _load_context_pack(root, context_pack_path)
244
+ )
239
245
  return PreparedExecutionInputs(
240
246
  context_snapshot,
241
- context_pack,
247
+ resolved_pack,
242
248
  execution_context,
243
249
  authorization,
244
250
  effect_sink,
@@ -324,7 +330,7 @@ def blocked_input_profile(
324
330
  },
325
331
  {"configured": False, "production": False, "kind": None},
326
332
  None,
327
- os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "shadow"))),
333
+ os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "default"))),
328
334
  False,
329
335
  error.code,
330
336
  policy.to_dict(),
@@ -361,7 +367,7 @@ def negotiate_execution_mode(
361
367
  """Negotiate only from versioned contracts; never infer from files/help/process names."""
362
368
  requested = requested_mode(mode, root)
363
369
  config = _config(root)
364
- rollout = os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "shadow")))
370
+ rollout = os.environ.get("SIMPLICIO_EXECUTION_ROLLOUT", str(config.get("rollout", "default")))
365
371
  coordinator = {
366
372
  "kind": coordinator_kind or os.environ.get("SIMPLICIO_COORDINATOR_KIND", "unknown"),
367
373
  "id": coordinator_id or os.environ.get("SIMPLICIO_COORDINATOR_ID", ""),
@@ -24,7 +24,7 @@ def execution_mode_blocker(profile: Any) -> dict[str, Any]:
24
24
  [runtime["capability"]] if not runtime.get("capability_available") else []
25
25
  ),
26
26
  "runtime_version": runtime.get("version"),
27
- "compatible_dev_cli_version": ">=0.16.3",
27
+ "compatible_dev_cli_version": ">=0.18.1",
28
28
  "next_action": "run `simplicio-py runtime verify --json`, then retry",
29
29
  }
30
30
  )
@@ -12,8 +12,8 @@ from typing import Any
12
12
 
13
13
  FAST_DISTRIBUTION = "simplicio-fast"
14
14
  FAST_MODULE = "simplicio_fast"
15
- FAST_MIN_VERSION = (0, 1, 0)
16
- FAST_MAX_MAJOR = 1
15
+ FAST_MIN_VERSION = (2, 0, 18)
16
+ FAST_MAX_MAJOR = 3
17
17
  CAPABILITIES_SCHEMA = "simplicio.fast-capabilities/v1"
18
18
  DOCTOR_SCHEMA = "simplicio.fast-doctor/v1"
19
19
  RECEIPT_SCHEMA = "simplicio.fast-local-receipt/v1"
@@ -87,7 +87,7 @@ def fast_preflight(*, offline: bool = False) -> FastPreflight:
87
87
  mapper_version,
88
88
  False,
89
89
  "fast-version-outside-supported-range",
90
- f"install {FAST_DISTRIBUTION}>=0.1,<1",
90
+ f"install {FAST_DISTRIBUTION}>=2.0.18,<3",
91
91
  )
92
92
 
93
93
  parser_available = _module_available(f"{FAST_MODULE}.parsers", "SIMPLICIO_FAST_PARSER_AVAILABLE")
@@ -109,7 +109,7 @@ def capabilities_contract(*, offline: bool = False) -> dict[str, Any]:
109
109
  "schema": CAPABILITIES_SCHEMA,
110
110
  "availability": preflight.to_dict(),
111
111
  "compatibility": {
112
- "fast": ">=0.1,<1",
112
+ "fast": ">=2.0.18,<3",
113
113
  "mapper": "installed version reported; negotiated through snapshot schema",
114
114
  },
115
115
  "schemas": [
@@ -65,7 +65,7 @@ def _ram_macos() -> float | None:
65
65
  if out.returncode != 0:
66
66
  return None
67
67
  return int(out.stdout.strip()) / (1024**3)
68
- except (FileNotFoundError, subprocess.TimeoutExpired, ValueError):
68
+ except (OSError, subprocess.TimeoutExpired, ValueError):
69
69
  return None
70
70
 
71
71
 
@@ -95,7 +95,11 @@ def _gpu_nvidia() -> tuple[float, str] | None:
95
95
  text=True,
96
96
  timeout=5,
97
97
  )
98
- except (FileNotFoundError, subprocess.TimeoutExpired):
98
+ # Captured console handles can be invalid under Windows test runners
99
+ # (WinError 6/50). Hardware probing is advisory, so every OS-level
100
+ # process-launch failure must degrade to "no GPU" instead of failing
101
+ # `doctor --json`.
102
+ except (OSError, subprocess.TimeoutExpired):
99
103
  return None
100
104
  if out.returncode != 0 or not out.stdout.strip():
101
105
  return None
@@ -129,7 +133,7 @@ def _gpu_apple_silicon() -> tuple[float, str] | None:
129
133
  text=True,
130
134
  timeout=3,
131
135
  )
132
- except (FileNotFoundError, subprocess.TimeoutExpired):
136
+ except (OSError, subprocess.TimeoutExpired):
133
137
  return None
134
138
  if out.returncode != 0:
135
139
  return None
@@ -11,7 +11,7 @@ import platform
11
11
  import shutil
12
12
  import sys
13
13
  from pathlib import Path
14
- from typing import Any, Mapping
14
+ from typing import Any
15
15
 
16
16
 
17
17
  class LiteRTError(RuntimeError):
@@ -366,7 +366,13 @@ def get_effective_map_view(root: str | os.PathLike[str], *, force_remap: bool =
366
366
  manifest + worktree overlay from disk when the live git identity still
367
367
  matches them — this is the "no redundant full remap" path (issue #213).
368
368
  """
369
- identity = resolve_git_identity(root)
369
+ root_path = Path(root).resolve()
370
+ # Mapper inspection may materialize its own cache under ``.simplicio``.
371
+ # Resolve that state before fingerprinting the worktree, otherwise the
372
+ # cache write changes ``git status`` after the overlay path is chosen and
373
+ # makes the just-created overlay unreachable on the next call.
374
+ artifacts = artifact_status(root_path)
375
+ identity = resolve_git_identity(root_path)
370
376
  cache_key = _cache_key(identity)
371
377
  if not force_remap and cache_key in _VIEW_CACHE:
372
378
  return _VIEW_CACHE[cache_key]
@@ -390,8 +396,6 @@ def get_effective_map_view(root: str | os.PathLike[str], *, force_remap: bool =
390
396
  if overlay_candidate.matches(identity):
391
397
  overlay = overlay_candidate
392
398
 
393
- artifacts = artifact_status(identity.root)
394
-
395
399
  if canonical is not None and overlay is not None:
396
400
  source = SOURCE_CANONICAL_OVERLAY_HIT
397
401
  else:
@@ -178,7 +178,7 @@ def map_ask(
178
178
  data = run_mapper_json(root, "ask", extra=extra, revision=revision, snapshot_id=snapshot_id)
179
179
  if data is None:
180
180
  return None
181
- return _normalize_ask_results(data.get("results"))
181
+ return _normalize_ask_results(data.get("results"))
182
182
 
183
183
 
184
184
  def _safe_json(path: Path) -> dict[str, Any] | None:
@@ -0,0 +1,45 @@
1
+ """Mandatory pre-dispatch Hookwall guard for every Stage ABI mutation route."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ from collections.abc import Mapping, Sequence
8
+ from pathlib import Path
9
+
10
+ from .mutation_lifecycle import MUTABLE_ENTRYPOINTS
11
+ from .mutation_worker import MutationBlocked, validate
12
+
13
+ READ_ONLY = {"status", "claims", "inspect", "doctor", "versions", "file", "detect", "runtime", "fast"}
14
+
15
+
16
+ def route_name(argv: Sequence[str]) -> str:
17
+ if not argv:
18
+ return ""
19
+ for length in range(min(3, len(argv)), 0, -1):
20
+ candidate = ".".join(argv[:length])
21
+ if candidate in MUTABLE_ENTRYPOINTS:
22
+ return candidate
23
+ return argv[0]
24
+
25
+
26
+ def guard_mutable_dispatch(argv: Sequence[str], environ: Mapping[str, str] | None = None) -> None:
27
+ env = dict(os.environ if environ is None else environ)
28
+ route = route_name(argv)
29
+ if route in READ_ONLY or route not in MUTABLE_ENTRYPOINTS:
30
+ return
31
+ if env.get("SIMPLICIO_STAGE_ABI") != "1":
32
+ return # compatibility lane; never presented as Stage ABI
33
+ path = env.get("SIMPLICIO_MECHANICAL_PLAN", "")
34
+ if not path:
35
+ raise MutationBlocked("MECHANICAL_PLAN_REQUIRED")
36
+ plan_path = Path(path)
37
+ try:
38
+ plan = json.loads(plan_path.read_text(encoding="utf-8"))
39
+ except (OSError, ValueError) as exc:
40
+ raise MutationBlocked("MECHANICAL_PLAN_INVALID") from exc
41
+ root = Path(env.get("SIMPLICIO_WORKSPACE", ".")).resolve()
42
+ sealed = validate(plan, root)
43
+ expected = env.get("SIMPLICIO_IDEMPOTENCY_KEY")
44
+ if not expected or sealed["idempotency_key"] != expected:
45
+ raise MutationBlocked("IDEMPOTENCY_KEY_REQUIRED")
@@ -0,0 +1,96 @@
1
+ """Recovery, verification and rollback lifecycle for the Stage ABI worker."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from collections.abc import Callable
7
+ from typing import Any
8
+
9
+ from .mutation_worker import RECEIPT, MutationBlocked, MutationWorker, digest
10
+
11
+ MUTABLE_ENTRYPOINTS = {
12
+ "index",
13
+ "task",
14
+ "run",
15
+ "cache.clear",
16
+ "init",
17
+ "env-export",
18
+ "mechanical-edit",
19
+ "changeset",
20
+ "edit",
21
+ "test.run",
22
+ "prototype.apply",
23
+ "prototype.scaffold",
24
+ "prototype.plan",
25
+ "prototype.promote",
26
+ "prototype.reject",
27
+ "prototype.batch",
28
+ "memory.init",
29
+ "memory.store",
30
+ "memory.handoff",
31
+ "token.context-cache.put",
32
+ "token.context-cache.invalidate",
33
+ }
34
+
35
+
36
+ def verify_receipt(receipt: dict[str, Any]) -> bool:
37
+ if receipt.get("schema") != RECEIPT:
38
+ return False
39
+ supplied = receipt.get("receipt_hash")
40
+ return isinstance(supplied, str) and supplied == digest(
41
+ {key: value for key, value in receipt.items() if key != "receipt_hash"}
42
+ )
43
+
44
+
45
+ def recover(worker: MutationWorker, key: str, observer: Callable[[], dict[str, Any]]) -> dict[str, Any]:
46
+ with worker._db() as db:
47
+ row = db.execute("SELECT plan_hash,state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
48
+ if not row or row[1] not in {"RESERVED", "UNCERTAIN"}:
49
+ raise MutationBlocked("RECOVERY_NOT_REQUIRED")
50
+ observed = observer()
51
+ if observed.get("status") == "committed":
52
+ receipt = {
53
+ "schema": RECEIPT,
54
+ "plan_id": observed["plan_id"],
55
+ "plan_hash": row[0],
56
+ "idempotency_key": key,
57
+ "before_hash": observed["before_hash"],
58
+ "after_hash": observed["after_hash"],
59
+ "status": "committed",
60
+ "operations": observed.get("operations", []),
61
+ }
62
+ receipt["receipt_hash"] = digest(receipt)
63
+ with worker._db() as db:
64
+ db.execute(
65
+ "UPDATE mutations SET state='VERIFIED',receipt=? WHERE key=?",
66
+ (json.dumps(receipt, sort_keys=True), key),
67
+ )
68
+ return receipt
69
+ raise MutationBlocked("RECOVERY_OBSERVATION_INSUFFICIENT")
70
+
71
+
72
+ def rollback(
73
+ worker: MutationWorker, key: str, restorer: Callable[[dict[str, Any]], dict[str, Any]]
74
+ ) -> dict[str, Any]:
75
+ with worker._db() as db:
76
+ row = db.execute("SELECT state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
77
+ if not row or row[0] not in {"VERIFIED", "UNCERTAIN"}:
78
+ raise MutationBlocked("ROLLBACK_NOT_ALLOWED")
79
+ prior = json.loads(row[1]) if row[1] else {}
80
+ result = restorer(prior)
81
+ if result.get("status") != "restored":
82
+ raise MutationBlocked("ROLLBACK_UNVERIFIED")
83
+ receipt = {
84
+ "schema": "simplicio.rollback-receipt/v1",
85
+ "idempotency_key": key,
86
+ "mutation_receipt_hash": prior.get("receipt_hash"),
87
+ "restored_hash": result["restored_hash"],
88
+ "status": "restored",
89
+ }
90
+ receipt["receipt_hash"] = digest(receipt)
91
+ with worker._db() as db:
92
+ db.execute(
93
+ "UPDATE mutations SET state='ROLLED_BACK',receipt=? WHERE key=?",
94
+ (json.dumps(receipt, sort_keys=True), key),
95
+ )
96
+ return receipt
@@ -1,23 +1,38 @@
1
1
  """Fail-closed Stage ABI mutation worker for MechanicalPlanV1."""
2
+
2
3
  from __future__ import annotations
3
- import hashlib, json, os, sqlite3
4
+
5
+ import hashlib
6
+ import json
7
+ import sqlite3
8
+ from collections.abc import Callable
4
9
  from pathlib import Path
5
- from typing import Any, Callable
10
+ from typing import Any
6
11
 
7
12
  SCHEMA = "simplicio.mechanical-plan/v1"
8
13
  RECEIPT = "simplicio.mutation-receipt/v1"
9
14
 
15
+
10
16
  class MutationBlocked(RuntimeError):
11
17
  def __init__(self, reason_code: str):
12
18
  self.reason_code = reason_code
13
19
  super().__init__(reason_code)
14
20
 
21
+
15
22
  def digest(value: Any) -> str:
16
23
  return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
17
24
 
25
+
18
26
  def validate(plan: dict[str, Any], root: Path) -> dict[str, Any]:
19
- required = ("schema", "plan_id", "source_hash", "idempotency_key", "operations",
20
- "effect_set", "hookwall_pre")
27
+ required = (
28
+ "schema",
29
+ "plan_id",
30
+ "source_hash",
31
+ "idempotency_key",
32
+ "operations",
33
+ "effect_set",
34
+ "hookwall_pre",
35
+ )
21
36
  if any(not plan.get(key) for key in required) or plan["schema"] != SCHEMA:
22
37
  raise MutationBlocked("MECHANICAL_PLAN_INVALID")
23
38
  pre = plan["hookwall_pre"]
@@ -29,51 +44,76 @@ def validate(plan: dict[str, Any], root: Path) -> dict[str, Any]:
29
44
  if not isinstance(value, str) or Path(value).is_absolute() or ".." in Path(value).parts:
30
45
  raise MutationBlocked("PATH_ESCAPE")
31
46
  candidate = (root.resolve() / value).resolve()
32
- try: candidate.relative_to(root.resolve())
33
- except ValueError as exc: raise MutationBlocked("SYMLINK_ESCAPE") from exc
47
+ try:
48
+ candidate.relative_to(root.resolve())
49
+ except ValueError as exc:
50
+ raise MutationBlocked("SYMLINK_ESCAPE") from exc
34
51
  normalized["plan_hash"] = digest({k: normalized[k] for k in normalized if k != "plan_hash"})
35
52
  if plan.get("plan_hash") and plan["plan_hash"] != normalized["plan_hash"]:
36
53
  raise MutationBlocked("PLAN_TAMPERED")
37
54
  return normalized
38
55
 
56
+
39
57
  class MutationWorker:
40
58
  def __init__(self, root: str | Path):
41
59
  self.root = Path(root)
42
60
  self.db_path = self.root / ".simplicio" / "mutation-worker.sqlite3"
43
61
  self.db_path.parent.mkdir(parents=True, exist_ok=True)
44
62
  with self._db() as db:
45
- db.execute("CREATE TABLE IF NOT EXISTS mutations(key TEXT PRIMARY KEY, plan_hash TEXT, state TEXT, receipt TEXT)")
63
+ db.execute(
64
+ "CREATE TABLE IF NOT EXISTS mutations("
65
+ "key TEXT PRIMARY KEY, plan_hash TEXT, state TEXT, receipt TEXT)"
66
+ )
67
+
46
68
  def _db(self):
47
69
  db = sqlite3.connect(self.db_path, isolation_level=None)
48
- db.execute("PRAGMA journal_mode=WAL"); db.execute("PRAGMA synchronous=FULL")
70
+ db.execute("PRAGMA journal_mode=WAL")
71
+ db.execute("PRAGMA synchronous=FULL")
49
72
  return db
50
- def execute(self, plan: dict[str, Any], executor: Callable[[dict[str, Any]], dict[str, Any]]) -> dict[str, Any]:
51
- sealed = validate(plan, self.root); key = sealed["idempotency_key"]
73
+
74
+ def execute(
75
+ self, plan: dict[str, Any], executor: Callable[[dict[str, Any]], dict[str, Any]]
76
+ ) -> dict[str, Any]:
77
+ sealed = validate(plan, self.root)
78
+ key = sealed["idempotency_key"]
52
79
  with self._db() as db:
53
80
  db.execute("BEGIN IMMEDIATE")
54
81
  row = db.execute("SELECT plan_hash,state,receipt FROM mutations WHERE key=?", (key,)).fetchone()
55
82
  if row:
56
83
  db.execute("COMMIT")
57
- if row[0] != sealed["plan_hash"]: raise MutationBlocked("IDEMPOTENCY_LINEAGE_MISMATCH")
58
- if row[1] == "VERIFIED": return json.loads(row[2])
84
+ if row[0] != sealed["plan_hash"]:
85
+ raise MutationBlocked("IDEMPOTENCY_LINEAGE_MISMATCH")
86
+ if row[1] == "VERIFIED":
87
+ return json.loads(row[2])
59
88
  raise MutationBlocked("RECOVERY_REQUIRED")
60
89
  db.execute("INSERT INTO mutations VALUES(?,?,?,NULL)", (key, sealed["plan_hash"], "RESERVED"))
61
90
  db.execute("COMMIT")
62
91
  try:
63
92
  result = executor(sealed)
64
93
  except BaseException:
65
- with self._db() as db: db.execute("UPDATE mutations SET state='UNCERTAIN' WHERE key=?", (key,))
94
+ with self._db() as db:
95
+ db.execute("UPDATE mutations SET state='UNCERTAIN' WHERE key=?", (key,))
66
96
  raise
67
97
  if result.get("status") != "ok" or not result.get("applied"):
68
- with self._db() as db: db.execute("UPDATE mutations SET state='ROLLED_BACK' WHERE key=?", (key,))
98
+ with self._db() as db:
99
+ db.execute("UPDATE mutations SET state='ROLLED_BACK' WHERE key=?", (key,))
69
100
  raise MutationBlocked("EFFECT_NOT_COMMITTED")
70
- receipt = {"schema": RECEIPT, "plan_id": sealed["plan_id"], "plan_hash": sealed["plan_hash"],
71
- "idempotency_key": key, "before_hash": result["before_hash"],
72
- "after_hash": result["after_hash"], "status": "committed",
73
- "operations": result.get("operations", [])}
101
+ receipt = {
102
+ "schema": RECEIPT,
103
+ "plan_id": sealed["plan_id"],
104
+ "plan_hash": sealed["plan_hash"],
105
+ "idempotency_key": key,
106
+ "before_hash": result["before_hash"],
107
+ "after_hash": result["after_hash"],
108
+ "status": "committed",
109
+ "operations": result.get("operations", []),
110
+ }
74
111
  receipt["receipt_hash"] = digest(receipt)
75
112
  with self._db() as db:
76
113
  db.execute("BEGIN IMMEDIATE")
77
- db.execute("UPDATE mutations SET state='VERIFIED',receipt=? WHERE key=?", (json.dumps(receipt, sort_keys=True), key))
114
+ db.execute(
115
+ "UPDATE mutations SET state='VERIFIED',receipt=? WHERE key=?",
116
+ (json.dumps(receipt, sort_keys=True), key),
117
+ )
78
118
  db.execute("COMMIT")
79
119
  return receipt
@@ -451,7 +451,12 @@ def run_task(
451
451
  blocked_preconditions=[blocker],
452
452
  )
453
453
  if dry_run_task:
454
- blockers = _dry_run_preconditions(root, target)
454
+ blockers = _dry_run_preconditions(
455
+ root,
456
+ target,
457
+ context_pack=context_pack,
458
+ allow_degraded_mapper=requested_execution_mode == "standalone",
459
+ )
455
460
  if blockers:
456
461
  warnings = [item["message"] for item in blockers]
457
462
  return _task_result(
@@ -464,6 +469,21 @@ def run_task(
464
469
  blocked_preconditions=blockers,
465
470
  target_kind=target_kind(root, target),
466
471
  )
472
+ if os.environ.get("SIMPLICIO_STANDALONE_PREFLIGHT", "").strip().lower() in {
473
+ "1",
474
+ "true",
475
+ "yes",
476
+ "on",
477
+ }:
478
+ return _task_result(
479
+ target,
480
+ prompt,
481
+ "",
482
+ applied=False,
483
+ status="dry_run",
484
+ warnings=["standalone_preflight_provider_skipped"],
485
+ target_kind=target_kind(root, target),
486
+ )
467
487
  # Issue #210 AC6: snapshot bound paths BEFORE generate() so an
468
488
  # out-of-band mutation that happens while the provider subprocess is
469
489
  # running (e.g. the target deleted mid-stall) is caught even though
@@ -924,8 +944,6 @@ def run_task_spec(root, stack, task_spec: TaskSpec, **kwargs: Any) -> dict[str,
924
944
  """
925
945
  if not isinstance(task_spec, TaskSpec):
926
946
  raise TypeError("run_task_spec requires a simplicio.task_spec.TaskSpec")
927
- if "task_spec" in kwargs:
928
- raise TypeError("run_task_spec does not accept a second task_spec argument")
929
947
  narrative = task_spec.narrative
930
948
  goal = str(narrative.get("goal") or narrative.get("want") or task_spec.functionality or task_spec.task_id)
931
949
  criteria = "\n".join(