simplicio-cli 0.18.11__tar.gz → 0.18.13__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.
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/PKG-INFO +3 -3
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/pyproject.toml +3 -3
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/__init__.py +1 -2
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/cli.py +23 -1
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/edit.py +54 -12
- simplicio_cli-0.18.13/simplicio/commands/release_train.py +98 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/versions.py +44 -12
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/component_manifest.py +72 -4
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/dev_cli_contracts.py +40 -3
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/doctor.py +3 -0
- simplicio_cli-0.18.13/simplicio/mapper_binding.py +213 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mechanical_edit.py +736 -50
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/ad_hoc_edit.py +54 -4
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/models.py +14 -0
- simplicio_cli-0.18.13/simplicio/release_train.py +732 -0
- simplicio_cli-0.18.13/simplicio/release_train_adapters.py +287 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/runtime_contracts.py +24 -0
- simplicio_cli-0.18.13/simplicio/scaffold_contract.py +173 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/PKG-INFO +3 -3
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/SOURCES.txt +5 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/requires.txt +2 -2
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/LICENSE +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/setup.cfg +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/_cache.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/adaptive.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/atomic_execution.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/bench.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/cache.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/cache_cli.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/changeset_transaction.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/changeset_v2.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/checkpoint_store.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/codex_hooks.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/codex_wrapper.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/_shared.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/bench.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/cache.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/changeset.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/claims.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/detect.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/doctor.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/env_export.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/fast.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/file.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/file_read.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/gate.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/index.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/init.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/inspect.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/intake.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/memory.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/nest.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/proposal.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/prototype.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/reconcile.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/run.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/runtime.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/scenarios/claims-gate.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/score_skill.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/smoke.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/status.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/task.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/test.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/test_run.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/commands/token.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/delivery_auth.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/detect.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/dod.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/ecosystem.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/effect_transaction.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/evidence_ledger.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/execution_contract.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/execution_mode.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/execution_receipts.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/fast_contracts.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/hardware.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/hbp.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/hub_adapter.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/init.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/intent.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/legacy_json_adapter.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/litert_cli.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/llm_policy.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/local_inference.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/local_models.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/map_view.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mapper.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mapper_api.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/memory_migration.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/memory_store.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mutation_dispatch.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mutation_lifecycle.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/mutation_worker.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/observability.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/orchestrator/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/orchestrator/cost_governor.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/orchestrator/feature.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/orchestrator/multi_task.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/orientation_plan.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_fixers.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_input.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_integrated.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_preparation.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_stages.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_state.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/pipeline_task_result.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/authority.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/canonical_hash.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/compat_adapter.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/compile_task_spec.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/conformance.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/effect_sink.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/errors.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/execution_contracts.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/mapper_context.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_compiler/runtime_effect_sink.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plan_discovery.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plugin_effect_bridge.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/plugin_reconcile.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/precedent.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/prism_envelope.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/prism_receipts.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/prism_transaction.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/progressive_verify.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/prompt.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/prompt_envelope.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/provider_cache_receipt.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/providers.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/py.typed +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/runtime_async.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/runtime_bridge.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/runtime_env.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/_pipeline_adapter.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/cli.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/go_gin.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/markdown_document.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/php_laravel.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/python_cst.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/python_fastapi.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/python_orm.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/python_pydantic.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/python_pytest.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/registry.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/rust_axum.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/types.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/typescript_next_page.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/codegen/typescript_next_route.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/executor.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/plan_schema.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/planner.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/recipes.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/skill_opt.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/scratch/stack_registry.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/skill_router.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/sprint_loader.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/stage_abi.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/stage_main.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/standalone_migration.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/store_adapter.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/task_context.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/task_operator.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/task_spec.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/SKILL.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/go-gin/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/go-gin/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/go-gin/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/php-laravel/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/php-laravel/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/php-laravel/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/php-vanilla/docs-marker.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/background-worker.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/file-upload.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/oauth-integration.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/scheduled-job.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/py-fastapi/websocket.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/rust-axum/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/rust-axum/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/rust-axum/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/ts-nextjs/admin-crud.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/ts-nextjs/auth-jwt.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/recipes/ts-nextjs/crud-resource.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/simplicio_prompt.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/tree/bin/app.sh +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/tree/test/app.bats +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/bash-cli/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/App.Api.csproj +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/tree/src/App.Api/Program.cs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-aspnet/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/App.Web.csproj +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/App.razor +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Components/Pages/Home.razor +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/src/App.Web/Program.cs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/App.Tests.csproj +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/tree/tests/App.Tests/HealthTests.cs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/csharp-blazor/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/tree/lib/main.dart +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/tree/pubspec.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/tree/test/widget_test.dart +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/dart-flutter/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/config/config.exs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app/application.ex +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/controllers/health_controller.ex +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/endpoint.ex +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/lib/app_web/router.ex +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/mix.exs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/test/health_controller_test.exs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/tree/test/test_helper.exs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/elixir-phoenix/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/tree/cmd/root.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/tree/cmd/root_test.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/tree/go.mod +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/tree/main.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-cli/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/tree/go.mod +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-echo/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/tree/cmd/server/main.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/tree/go.mod +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/tree/internal/http/router.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/tree/internal/http/router_test.go +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/go-gin/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/Application.java +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/src/main/java/com/example/HealthController.java +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/tree/src/test/java/com/example/HealthControllerTest.java +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/java-spring/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/tree/package.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/tree/src/app.js +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/tree/src/server.js +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/tree/tests/health.test.js +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/js-express/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/app/build.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/AndroidManifest.xml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/java/com/example/app/MainActivity.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/app/src/main/res/values/styles.xml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/app/src/test/java/com/example/app/SmokeTest.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-android/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/tree/src/test/kotlin/com/example/ApplicationTest.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-ktor/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/build.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/settings.gradle.kts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/Application.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/src/main/kotlin/com/example/HealthController.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/tree/src/test/kotlin/com/example/HealthControllerTest.kt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/kotlin-spring/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/artisan +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/bootstrap/app.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/composer.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/phpunit.xml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/routes/api.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/routes/console.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/tests/Feature/HealthTest.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/tree/tests/TestCase.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-laravel/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/tree/composer.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/tree/src/Controller/HealthController.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/tree/tests/HealthControllerTest.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-symfony/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/tree/composer.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/tree/phpunit.xml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/tree/src/Health.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/tree/tests/HealthTest.php +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/php-vanilla/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/tree/src/app/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/tree/src/app/cli.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/tree/tests/test_cli.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-cli/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/app/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/app/apps.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/app/tests.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/app/views.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/config/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/config/asgi.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/config/settings.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/config/urls.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/config/wsgi.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/manage.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-django/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/.gitignore +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/README.template.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/ruff.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/src/api/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/src/main.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-fastapi/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/tree/pyproject.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/tree/ruff.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/tree/src/app.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/tree/tests/test_health.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/py-flask/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/index.html +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/package.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/src/App.test.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/src/App.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/src/main.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/react-vite/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/Gemfile +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/app/controllers/health_controller.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/bin/rails +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/config/application.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/config/boot.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/config/routes.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/test/controllers/health_controller_test.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/tree/test/test_helper.rb +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ruby-rails/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-axum/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-cli/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/tree/Cargo.toml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/tree/src/main.rs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/rust-leptos/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/tree/Sources/App/App.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/tree/Sources/App/ContentView.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/tree/Tests/AppTests/AppTests.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-ios/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/tree/Package.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/tree/Sources/App/main.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/tree/Tests/AppTests/HealthTests.swift +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/swift-vapor/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/package.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.spec.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/src/app.controller.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/src/app.module.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/src/main.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nestjs/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/.eslintrc.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/.gitignore +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/next.config.mjs +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/package.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/pnpm-workspace.yaml +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/src/app/layout.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/src/app/page.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-nextjs/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/practices.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/stack.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/README.md +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/app/root.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/app/routes/_index.tsx +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.test.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/app/routes/health.ts +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/package.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/tree/tsconfig.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/stacks/ts-remix/verify.json +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/templates/userpromptsubmit-hook.sh +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/token_primitives.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/toon_codec.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/transaction.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/utils/__init__.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/utils/cache.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/utils/fs.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/utils/http_client.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/utils/serialization.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio/write_set_lock.py +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/dependency_links.txt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/entry_points.txt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/simplicio_cli.egg-info/top_level.txt +0 -0
- {simplicio_cli-0.18.11 → simplicio_cli-0.18.13}/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.
|
|
3
|
+
Version: 0.18.13
|
|
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.27,>=0.26.
|
|
31
|
+
Requires-Dist: simplicio-mapper<0.27,>=0.26.31
|
|
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<3,>=2.0.
|
|
43
|
+
Requires-Dist: simplicio-fast<3,>=2.0.33; python_version >= "3.11" and 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.
|
|
3
|
+
version = "0.18.13"
|
|
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.
|
|
48
|
+
"simplicio-mapper>=0.26.31,<0.27",
|
|
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>=2.0.
|
|
65
|
+
fast = ["simplicio-fast>=2.0.33,<3; python_version >= '3.11'"]
|
|
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
|
|
@@ -413,6 +413,27 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
413
413
|
help="bypass the 24h PyPI cache when resolving mapper latest_known",
|
|
414
414
|
)
|
|
415
415
|
|
|
416
|
+
p_release_train = sub.add_parser(
|
|
417
|
+
"release-train",
|
|
418
|
+
help="verify Mapper release events, immutable artifacts, and N/N-1 conformance",
|
|
419
|
+
)
|
|
420
|
+
release_train_sub = p_release_train.add_subparsers(dest="release_train_command", required=True)
|
|
421
|
+
release_verify = release_train_sub.add_parser(
|
|
422
|
+
"verify", help="fail-closed verification of one component-release-event/v1"
|
|
423
|
+
)
|
|
424
|
+
release_verify.add_argument("--event", required=True, help="Mapper release event JSON")
|
|
425
|
+
release_verify.add_argument("--conformance", help="installed N/N-1 conformance JSON")
|
|
426
|
+
release_verify.add_argument("--root", default=".", help="Dev CLI checkout containing pyproject.toml/uv.lock")
|
|
427
|
+
release_verify.add_argument("--declared-range")
|
|
428
|
+
release_verify.add_argument("--tested-against")
|
|
429
|
+
release_verify.add_argument("--state", default="", help="deduplication state JSON")
|
|
430
|
+
release_verify.add_argument("--record", action="store_true", help="record accepted event atomically")
|
|
431
|
+
release_verify.add_argument("--active-task", action="store_true", help="defer while a task is active")
|
|
432
|
+
release_verify.add_argument("--json", action="store_true", help="emit stable JSON")
|
|
433
|
+
release_doctor = release_train_sub.add_parser("doctor", help="report release-train evidence readiness")
|
|
434
|
+
release_doctor.add_argument("--root", default=".")
|
|
435
|
+
release_doctor.add_argument("--json", action="store_true", help="emit stable JSON")
|
|
436
|
+
|
|
416
437
|
p_env_export = sub.add_parser(
|
|
417
438
|
"env-export",
|
|
418
439
|
help="print shell-safe exports from a dotenv file without sourcing it",
|
|
@@ -462,7 +483,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
462
483
|
|
|
463
484
|
p_edit = sub.add_parser(
|
|
464
485
|
"edit",
|
|
465
|
-
help="apply a
|
|
486
|
+
help="apply a Dev CLI edit plan; legacy plans may delegate to Runtime",
|
|
466
487
|
)
|
|
467
488
|
p_edit.add_argument("--root", "--repo", dest="root", default=".")
|
|
468
489
|
p_edit.add_argument("--plan", default="-", help="plan JSON path, or - for stdin")
|
|
@@ -788,6 +809,7 @@ _COMMAND_MODULES = {
|
|
|
788
809
|
"doctor": "doctor",
|
|
789
810
|
"fast": "fast",
|
|
790
811
|
"versions": "versions",
|
|
812
|
+
"release-train": "release_train",
|
|
791
813
|
"env-export": "env_export",
|
|
792
814
|
"changeset": "changeset",
|
|
793
815
|
"file": "file",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""``simplicio-py mechanical-edit`` / ``simplicio-py edit``.
|
|
2
2
|
|
|
3
3
|
Extracted from `cli.py`'s `_run_mechanical_edit_command`/`_run_edit_command`
|
|
4
|
-
(issue #103)
|
|
5
|
-
``simplicio``
|
|
6
|
-
|
|
4
|
+
(issue #103). Legacy plans retain their established Runtime delegation
|
|
5
|
+
behavior. Versioned ``simplicio.dev-cli.edit-plan/v1`` plans always use the
|
|
6
|
+
Dev CLI-owned deterministic kernel so the native Runtime adapter cannot
|
|
7
|
+
silently select a second Mapper edit vocabulary.
|
|
7
8
|
"""
|
|
8
9
|
|
|
9
10
|
from __future__ import annotations
|
|
@@ -32,6 +33,21 @@ CLI_PROG = "simplicio-py"
|
|
|
32
33
|
RUNTIME_EDIT_TIMEOUT_S = 30.0
|
|
33
34
|
|
|
34
35
|
|
|
36
|
+
def _decode_native_json(stdout: Any) -> Any:
|
|
37
|
+
"""Decode Runtime's final JSON receipt after any human-readable output."""
|
|
38
|
+
if not isinstance(stdout, str):
|
|
39
|
+
return None
|
|
40
|
+
for line in reversed(stdout.splitlines()):
|
|
41
|
+
candidate = line.strip()
|
|
42
|
+
if not candidate.startswith("{"):
|
|
43
|
+
continue
|
|
44
|
+
try:
|
|
45
|
+
return json.loads(candidate)
|
|
46
|
+
except json.JSONDecodeError:
|
|
47
|
+
continue
|
|
48
|
+
return None
|
|
49
|
+
|
|
50
|
+
|
|
35
51
|
def run_mechanical_edit(a: argparse.Namespace) -> int:
|
|
36
52
|
from ..mechanical_edit import execute_plan_json
|
|
37
53
|
|
|
@@ -40,11 +56,21 @@ def run_mechanical_edit(a: argparse.Namespace) -> int:
|
|
|
40
56
|
except OSError as exc:
|
|
41
57
|
print(f"{CLI_PROG} mechanical-edit: {exc}", file=sys.stderr)
|
|
42
58
|
return 2
|
|
59
|
+
try:
|
|
60
|
+
decoded_plan = json.loads(plan_text)
|
|
61
|
+
plan_schema = decoded_plan.get("schema") if isinstance(decoded_plan, dict) else None
|
|
62
|
+
except (TypeError, json.JSONDecodeError):
|
|
63
|
+
plan_schema = None
|
|
64
|
+
result_schema = (
|
|
65
|
+
"simplicio.dev-cli.edit-receipt/v1"
|
|
66
|
+
if plan_schema == "simplicio.dev-cli.edit-plan/v1"
|
|
67
|
+
else "simplicio.mechanical-edit-result/v1"
|
|
68
|
+
)
|
|
43
69
|
policy = standalone_policy_for_root(a.root)
|
|
44
70
|
result: dict[str, Any]
|
|
45
71
|
if a.apply and not policy.write_allowed:
|
|
46
72
|
result = {
|
|
47
|
-
"schema":
|
|
73
|
+
"schema": result_schema,
|
|
48
74
|
"status": "refused",
|
|
49
75
|
"applied": False,
|
|
50
76
|
"noop": False,
|
|
@@ -209,10 +235,7 @@ def _run_atomic_native_create_plans(
|
|
|
209
235
|
),
|
|
210
236
|
}
|
|
211
237
|
|
|
212
|
-
|
|
213
|
-
payload = json.loads(completed.stdout)
|
|
214
|
-
except json.JSONDecodeError:
|
|
215
|
-
payload = None
|
|
238
|
+
payload = _decode_native_json(completed.stdout)
|
|
216
239
|
result_files = payload.get("files") if isinstance(payload, dict) else None
|
|
217
240
|
actual_files = (
|
|
218
241
|
{str(item.get("file")) for item in result_files if isinstance(item, dict)}
|
|
@@ -347,9 +370,8 @@ def _run_native_edit_plans(
|
|
|
347
370
|
}
|
|
348
371
|
)
|
|
349
372
|
continue
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
except json.JSONDecodeError:
|
|
373
|
+
result = _decode_native_json(getattr(completed, "stdout", ""))
|
|
374
|
+
if result is None:
|
|
353
375
|
errors.append(
|
|
354
376
|
{
|
|
355
377
|
"code": "native_delegation_malformed_output",
|
|
@@ -358,7 +380,9 @@ def _run_native_edit_plans(
|
|
|
358
380
|
}
|
|
359
381
|
)
|
|
360
382
|
continue
|
|
361
|
-
|
|
383
|
+
native_status = result.get("status") if isinstance(result, dict) else None
|
|
384
|
+
final_status = result.get("final_status", native_status) if isinstance(result, dict) else None
|
|
385
|
+
if native_status not in {"ok", "success"} or final_status not in {"ok", "success"}:
|
|
362
386
|
errors.append(
|
|
363
387
|
{
|
|
364
388
|
"code": "native_delegation_invalid_result",
|
|
@@ -416,6 +440,15 @@ def _invalid_delegated_plan(plan: Any) -> list[dict[str, Any]]:
|
|
|
416
440
|
if not all(isinstance(item, dict) and isinstance(item.get("op"), str) for item in operations):
|
|
417
441
|
return [{"code": "invalid_plan", "message": "Runtime plan operations must be objects with an op"}]
|
|
418
442
|
return []
|
|
443
|
+
if plan.get("schema") == "simplicio.dev-cli.edit-plan/v1":
|
|
444
|
+
operations = plan.get("operations")
|
|
445
|
+
if not isinstance(operations, list) or not operations:
|
|
446
|
+
return [{"code": "invalid_plan", "message": "Dev CLI edit operations must be a non-empty list"}]
|
|
447
|
+
return (
|
|
448
|
+
[]
|
|
449
|
+
if all(isinstance(item, dict) and isinstance(item.get("op"), str) for item in operations)
|
|
450
|
+
else [{"code": "invalid_plan", "message": "Dev CLI edit operations must be objects with an op"}]
|
|
451
|
+
)
|
|
419
452
|
if plan.get("schema") != "simplicio.mechanical-edit/v1":
|
|
420
453
|
return [{"code": "missing_schema", "message": "plan schema is unsupported"}]
|
|
421
454
|
operations = plan.get("operations")
|
|
@@ -499,6 +532,15 @@ def run_edit(a: argparse.Namespace) -> int:
|
|
|
499
532
|
)
|
|
500
533
|
return _print_edit_result(result, a)
|
|
501
534
|
|
|
535
|
+
# The Dev CLI-owned plan is already in the canonical kernel vocabulary.
|
|
536
|
+
# Do not hand it to the legacy Runtime Mapper edit endpoint, whose older
|
|
537
|
+
# operation engine has different semantics. Runtime-backed callers can
|
|
538
|
+
# authorize the resulting effect at their boundary; the local kernel is
|
|
539
|
+
# the only implementation of this versioned plan.
|
|
540
|
+
if plan.get("schema") == "simplicio.dev-cli.edit-plan/v1":
|
|
541
|
+
record_delegation("edit", "python-forced", root=a.root, reason="canonical-dev-cli-plan")
|
|
542
|
+
return run_mechanical_edit(a)
|
|
543
|
+
|
|
502
544
|
runtime = None if a.no_runtime else _runtime_edit_binary()
|
|
503
545
|
if runtime:
|
|
504
546
|
native_plans = None
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""CLI adapter for the deterministic release-train contract."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
import tempfile
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from ..release_train import (
|
|
13
|
+
ReleaseTrainError,
|
|
14
|
+
evaluate_release_event,
|
|
15
|
+
release_train_doctor,
|
|
16
|
+
)
|
|
17
|
+
from ..component_manifest import (
|
|
18
|
+
declared_dependency_range,
|
|
19
|
+
tested_dependency_version,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _read_json(path: Path) -> Any:
|
|
24
|
+
try:
|
|
25
|
+
return json.loads(path.read_text(encoding="utf-8"))
|
|
26
|
+
except (OSError, json.JSONDecodeError) as error:
|
|
27
|
+
raise ReleaseTrainError(f"cannot read JSON {path}: {error}") from error
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _write_json_atomic(path: Path, value: dict[str, Any]) -> None:
|
|
31
|
+
path = path.resolve()
|
|
32
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
33
|
+
fd, temporary = tempfile.mkstemp(prefix=f".{path.name}.", suffix=".tmp", dir=str(path.parent))
|
|
34
|
+
try:
|
|
35
|
+
with os.fdopen(fd, "w", encoding="utf-8") as handle:
|
|
36
|
+
json.dump(value, handle, ensure_ascii=False, sort_keys=True, indent=2)
|
|
37
|
+
handle.write("\n")
|
|
38
|
+
handle.flush()
|
|
39
|
+
os.fsync(handle.fileno())
|
|
40
|
+
os.replace(temporary, path)
|
|
41
|
+
except Exception:
|
|
42
|
+
try:
|
|
43
|
+
os.unlink(temporary)
|
|
44
|
+
except OSError:
|
|
45
|
+
pass
|
|
46
|
+
raise
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _load_state(path: Path | None) -> dict[str, Any]:
|
|
50
|
+
if path is None or not path.exists():
|
|
51
|
+
return {"processed_event_ids": [], "last_processed_version": None}
|
|
52
|
+
state = _read_json(path)
|
|
53
|
+
if not isinstance(state, dict):
|
|
54
|
+
raise ReleaseTrainError("release-train state must be an object")
|
|
55
|
+
ids = state.get("processed_event_ids", [])
|
|
56
|
+
last = state.get("last_processed_version")
|
|
57
|
+
if not isinstance(ids, list) or not all(isinstance(item, str) for item in ids):
|
|
58
|
+
raise ReleaseTrainError("state.processed_event_ids must be a list of strings")
|
|
59
|
+
if last is not None and not isinstance(last, str):
|
|
60
|
+
raise ReleaseTrainError("state.last_processed_version must be a string or null")
|
|
61
|
+
return {"processed_event_ids": sorted(set(ids)), "last_processed_version": last}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def run(a: argparse.Namespace) -> int:
|
|
65
|
+
if a.release_train_command == "doctor":
|
|
66
|
+
print(json.dumps(release_train_doctor(a.root), ensure_ascii=False, indent=2, sort_keys=True))
|
|
67
|
+
return 0
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
root = a.root
|
|
71
|
+
declared = a.declared_range or declared_dependency_range("simplicio-mapper", root)
|
|
72
|
+
tested = a.tested_against
|
|
73
|
+
if tested is None:
|
|
74
|
+
tested, _ = tested_dependency_version("simplicio-mapper", root)
|
|
75
|
+
state_path = Path(a.state) if a.state else None
|
|
76
|
+
state = _load_state(state_path)
|
|
77
|
+
evidence = _read_json(Path(a.conformance)) if a.conformance else None
|
|
78
|
+
decision = evaluate_release_event(
|
|
79
|
+
_read_json(Path(a.event)),
|
|
80
|
+
declared_range=declared,
|
|
81
|
+
tested_against=tested,
|
|
82
|
+
conformance=evidence,
|
|
83
|
+
active_task=a.active_task,
|
|
84
|
+
processed_event_ids=state["processed_event_ids"],
|
|
85
|
+
last_processed_version=state["last_processed_version"],
|
|
86
|
+
)
|
|
87
|
+
if a.record and decision.status == "accepted" and state_path is not None:
|
|
88
|
+
_write_json_atomic(state_path, decision.state)
|
|
89
|
+
print(json.dumps(decision.to_dict(), ensure_ascii=False, indent=2, sort_keys=True))
|
|
90
|
+
return 0 if decision.status in {"accepted", "duplicate"} else 2
|
|
91
|
+
except (OSError, ReleaseTrainError, TypeError, ValueError) as error:
|
|
92
|
+
print(json.dumps({
|
|
93
|
+
"schema": "simplicio.dev-cli.release-train/v1",
|
|
94
|
+
"status": "blocked",
|
|
95
|
+
"reason_code": "invalid_input",
|
|
96
|
+
"reason": str(error),
|
|
97
|
+
}, ensure_ascii=False, indent=2, sort_keys=True))
|
|
98
|
+
return 2
|
|
@@ -12,20 +12,21 @@ and reports drift — all read-only, all local.
|
|
|
12
12
|
and the cache is empty the field is ``null`` with
|
|
13
13
|
``unavailable_reason: "registry_unreachable"`` — never a fabricated version.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
This read-only command deliberately does not mutate the checkout. The checked-
|
|
16
|
+
in release-train workflows own authenticated event receipt, deduplicated PR
|
|
17
|
+
updates, PyPI publication, and Loop propagation; this command reports their
|
|
18
|
+
local version/drift state and remains safe to run during an active task.
|
|
19
|
+
|
|
20
|
+
The workflow boundary is intentional:
|
|
21
|
+
|
|
22
|
+
- **Receiving a Mapper release event** is handled by
|
|
23
|
+
`.github/workflows/release-train-reconcile.yml`.
|
|
24
|
+
- **Creating or merging a version-bump PR** is handled by the fixed
|
|
25
|
+
`release-train/mapper-latest` branch and its gate/promote workflows.
|
|
26
|
+
- **Dispatching `simplicio-loop`** is handled only after the signed PyPI
|
|
27
|
+
publication receipt in `.github/workflows/publish.yml`.
|
|
25
28
|
- **SBOM/signing/provenance** — no signing identity available in this
|
|
26
29
|
environment.
|
|
27
|
-
- **Triggering `simplicio-loop`** — cross-repo propagation is a separate
|
|
28
|
-
release-train step, not part of the local versions report.
|
|
29
30
|
"""
|
|
30
31
|
|
|
31
32
|
from __future__ import annotations
|
|
@@ -41,9 +42,11 @@ from ..component_manifest import (
|
|
|
41
42
|
check_version_against_range,
|
|
42
43
|
declared_dependency_range,
|
|
43
44
|
detect_drift,
|
|
45
|
+
tested_dependency_artifacts,
|
|
44
46
|
tested_dependency_version,
|
|
45
47
|
)
|
|
46
48
|
from ..ecosystem import _pypi_latest
|
|
49
|
+
from ..release_train import release_train_doctor
|
|
47
50
|
|
|
48
51
|
CLI_PROG = "simplicio-py"
|
|
49
52
|
MAPPER_DIST_NAME = "simplicio-mapper"
|
|
@@ -99,6 +102,9 @@ def versions_report(
|
|
|
99
102
|
installed = _installed_mapper_version()
|
|
100
103
|
declared_range = declared_dependency_range(MAPPER_DIST_NAME, root)
|
|
101
104
|
tested_against, tested_reason = tested_dependency_version(MAPPER_DIST_NAME, root)
|
|
105
|
+
tested_artifact_version, tested_artifacts, tested_artifact_reason = tested_dependency_artifacts(
|
|
106
|
+
MAPPER_DIST_NAME, root
|
|
107
|
+
)
|
|
102
108
|
latest_known, unavailable_reason = _latest_mapper_version(refresh=refresh)
|
|
103
109
|
|
|
104
110
|
compatibility = (
|
|
@@ -111,6 +117,16 @@ def versions_report(
|
|
|
111
117
|
tested_against=tested_against,
|
|
112
118
|
)
|
|
113
119
|
own_manifest = build_own_manifest(root)
|
|
120
|
+
release_train = release_train_doctor(root)
|
|
121
|
+
latest_compatible = (
|
|
122
|
+
latest_known is not None
|
|
123
|
+
and declared_range is not None
|
|
124
|
+
and check_version_against_range(latest_known, declared_range, name=MAPPER_DIST_NAME).status
|
|
125
|
+
== "compatible"
|
|
126
|
+
)
|
|
127
|
+
upgrade_available = bool(
|
|
128
|
+
installed and latest_compatible and latest_known != installed and latest_known is not None
|
|
129
|
+
)
|
|
114
130
|
|
|
115
131
|
return {
|
|
116
132
|
"schema": "simplicio.dev-cli.versions/v1",
|
|
@@ -120,12 +136,23 @@ def versions_report(
|
|
|
120
136
|
"required": declared_range,
|
|
121
137
|
"tested_against": tested_against,
|
|
122
138
|
"tested_against_reason": tested_reason,
|
|
139
|
+
"tested_artifact_version": tested_artifact_version,
|
|
140
|
+
"tested_artifacts": tested_artifacts,
|
|
141
|
+
"tested_artifacts_reason": tested_artifact_reason,
|
|
123
142
|
"latest_known": latest_known,
|
|
124
143
|
"unavailable_reason": unavailable_reason,
|
|
125
144
|
"compatibility": compatibility.to_dict() if compatibility else None,
|
|
145
|
+
"upgrade": {
|
|
146
|
+
"available": upgrade_available,
|
|
147
|
+
"from": installed,
|
|
148
|
+
"to": latest_known if upgrade_available else None,
|
|
149
|
+
"action": "recreate environment from the updated lockfile" if upgrade_available else None,
|
|
150
|
+
"safe_while_task_active": True,
|
|
151
|
+
},
|
|
126
152
|
},
|
|
127
153
|
"drift": drift.to_dict(),
|
|
128
154
|
"own_manifest": own_manifest.to_dict(),
|
|
155
|
+
"release_train": release_train,
|
|
129
156
|
}
|
|
130
157
|
|
|
131
158
|
|
|
@@ -158,6 +185,11 @@ def _render_human(payload: dict[str, Any]) -> None:
|
|
|
158
185
|
print(f" version {own['version']}")
|
|
159
186
|
print(f" commit {own['commit'] or '(unknown)'}")
|
|
160
187
|
print(f" schema count {len(own['schema_versions'])}")
|
|
188
|
+
train = payload["release_train"]
|
|
189
|
+
print()
|
|
190
|
+
print("release train readiness:")
|
|
191
|
+
print(f" status {train['status']}")
|
|
192
|
+
print(f" reason {train['reason_code']}")
|
|
161
193
|
|
|
162
194
|
|
|
163
195
|
def run(a: argparse.Namespace) -> int:
|
|
@@ -3,11 +3,11 @@ manifests and check them against this repo's own declared compatibility
|
|
|
3
3
|
range (issue #232).
|
|
4
4
|
|
|
5
5
|
Context (verified in the issue): `simplicio-cli` declares
|
|
6
|
-
`simplicio-mapper>=0.
|
|
7
|
-
publishes 0.
|
|
6
|
+
`simplicio-mapper>=0.26.31,<0.27` in `pyproject.toml`, while the Mapper already
|
|
7
|
+
publishes the 0.26.x train. That range lets a *clean* install resolve to the
|
|
8
8
|
newer Mapper, but it never proves the combination was actually exercised,
|
|
9
9
|
and it never updates an *existing* environment/lock (this repo's own
|
|
10
|
-
`uv.lock`
|
|
10
|
+
`uv.lock` is now expected to pin the verified train candidate — see
|
|
11
11
|
:func:`tested_mapper_version`). Issue #280 on the Mapper side (built by a
|
|
12
12
|
parallel agent, not visible from here) is expected to add a
|
|
13
13
|
``simplicio.component-release/v1`` manifest and a `simplicio-mapper version
|
|
@@ -20,7 +20,7 @@ parallel agent, not visible from here) is expected to add a
|
|
|
20
20
|
- :func:`check_component_compatibility` — real semver-range logic deciding
|
|
21
21
|
whether a candidate manifest's version is COMPATIBLE, INCOMPATIBLE, or
|
|
22
22
|
NEEDS_REVIEW against a declared range (e.g. this repo's own
|
|
23
|
-
``simplicio-mapper>=0.
|
|
23
|
+
``simplicio-mapper>=0.26.27,<0.27``), parsed for real out of `pyproject.toml`.
|
|
24
24
|
- :func:`build_own_manifest` — the reverse direction: build *this* repo's
|
|
25
25
|
own ``simplicio.component-release/v1`` manifest (name=`simplicio-cli`,
|
|
26
26
|
version from `pyproject.toml`/`__version__`, commit from
|
|
@@ -375,6 +375,73 @@ def tested_dependency_version(
|
|
|
375
375
|
return None, "not_present_in_lockfile"
|
|
376
376
|
|
|
377
377
|
|
|
378
|
+
def tested_dependency_artifacts(
|
|
379
|
+
name: str, root: str | os.PathLike[str] | None = None
|
|
380
|
+
) -> tuple[str | None, dict[str, Any], str]:
|
|
381
|
+
"""Return the locked version and its immutable distribution digests.
|
|
382
|
+
|
|
383
|
+
The result is ``(version, artifacts, reason)`` where ``artifacts`` has a
|
|
384
|
+
``sdist`` object and a ``wheels`` list when the lock records them. Hashes
|
|
385
|
+
are normalized to the ``sha256:...`` form used by component-release
|
|
386
|
+
events. Missing or malformed lock data is reported, never guessed.
|
|
387
|
+
"""
|
|
388
|
+
if root is not None:
|
|
389
|
+
candidates = [Path(root).resolve() / "uv.lock"]
|
|
390
|
+
else:
|
|
391
|
+
candidates = [
|
|
392
|
+
Path.cwd() / "uv.lock",
|
|
393
|
+
Path(__file__).resolve().parent.parent / "uv.lock",
|
|
394
|
+
]
|
|
395
|
+
lock_path = next((p for p in candidates if p.is_file()), None)
|
|
396
|
+
if lock_path is None:
|
|
397
|
+
return None, {}, "no_lockfile_found"
|
|
398
|
+
try:
|
|
399
|
+
text = lock_path.read_text(encoding="utf-8")
|
|
400
|
+
import tomllib # type: ignore[import-not-found]
|
|
401
|
+
|
|
402
|
+
data = tomllib.loads(text)
|
|
403
|
+
except ModuleNotFoundError:
|
|
404
|
+
try:
|
|
405
|
+
import tomli as tomllib # type: ignore[import-not-found,no-redef]
|
|
406
|
+
|
|
407
|
+
data = tomllib.loads(text)
|
|
408
|
+
except ModuleNotFoundError:
|
|
409
|
+
return None, {}, "tomllib_unavailable"
|
|
410
|
+
except (OSError, ValueError) as exc:
|
|
411
|
+
return None, {}, f"lockfile_unparseable: {exc}"
|
|
412
|
+
for package in data.get("package", []) or []:
|
|
413
|
+
if not isinstance(package, dict) or package.get("name") != name:
|
|
414
|
+
continue
|
|
415
|
+
version = package.get("version")
|
|
416
|
+
if not isinstance(version, str) or not version:
|
|
417
|
+
return None, {}, "lockfile_entry_missing_version"
|
|
418
|
+
|
|
419
|
+
def artifact(raw: Any) -> dict[str, Any] | None:
|
|
420
|
+
if not isinstance(raw, dict):
|
|
421
|
+
return None
|
|
422
|
+
digest = raw.get("hash")
|
|
423
|
+
if not isinstance(digest, str) or not digest.startswith("sha256:"):
|
|
424
|
+
return None
|
|
425
|
+
url = raw.get("url")
|
|
426
|
+
return {
|
|
427
|
+
"filename": Path(url).name if isinstance(url, str) else None,
|
|
428
|
+
"digest": digest,
|
|
429
|
+
"size": raw.get("size"),
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
artifacts: dict[str, Any] = {}
|
|
433
|
+
sdist = artifact(package.get("sdist"))
|
|
434
|
+
if sdist is not None:
|
|
435
|
+
artifacts["sdist"] = sdist
|
|
436
|
+
wheels = [item for item in (artifact(raw) for raw in package.get("wheels", []) or []) if item]
|
|
437
|
+
if wheels:
|
|
438
|
+
artifacts["wheels"] = wheels
|
|
439
|
+
if not artifacts:
|
|
440
|
+
return version, {}, "locked_entry_has_no_artifact_digests"
|
|
441
|
+
return version, artifacts, "locked_in_uv.lock"
|
|
442
|
+
return None, {}, "not_present_in_lockfile"
|
|
443
|
+
|
|
444
|
+
|
|
378
445
|
# ---------------------------------------------------------------------------#
|
|
379
446
|
# Compatibility check
|
|
380
447
|
# ---------------------------------------------------------------------------#
|
|
@@ -659,6 +726,7 @@ __all__ = [
|
|
|
659
726
|
"declared_dependency_range",
|
|
660
727
|
"declared_own_version",
|
|
661
728
|
"tested_dependency_version",
|
|
729
|
+
"tested_dependency_artifacts",
|
|
662
730
|
"COMPATIBLE",
|
|
663
731
|
"INCOMPATIBLE",
|
|
664
732
|
"NEEDS_REVIEW",
|
|
@@ -6,10 +6,16 @@ import hashlib
|
|
|
6
6
|
import json
|
|
7
7
|
import os
|
|
8
8
|
import time
|
|
9
|
+
from collections.abc import Mapping
|
|
9
10
|
from copy import deepcopy
|
|
10
11
|
from pathlib import Path, PurePosixPath, PureWindowsPath
|
|
11
12
|
from typing import Any
|
|
12
13
|
|
|
14
|
+
from .mapper_binding import (
|
|
15
|
+
canonical_mapper_binding,
|
|
16
|
+
mapper_binding_digest,
|
|
17
|
+
validate_mapper_binding,
|
|
18
|
+
)
|
|
13
19
|
from .mechanical_edit import execute_plan
|
|
14
20
|
from .standalone_migration import load_effect_unknown_lock
|
|
15
21
|
from .utils.fs import write_text_atomic
|
|
@@ -109,7 +115,7 @@ def _diagnostics(result: dict[str, Any]) -> dict[str, Any]:
|
|
|
109
115
|
def _preview(plan: dict[str, Any], root: Path) -> dict[str, Any]:
|
|
110
116
|
try:
|
|
111
117
|
return execute_plan(plan, root=root, apply=False, allow_native=False)
|
|
112
|
-
except Exception as exc:
|
|
118
|
+
except Exception as exc: # noqa: BLE001 - convert any executor failure to a refusal
|
|
113
119
|
return {
|
|
114
120
|
"status": "refused",
|
|
115
121
|
"planned_diff": "",
|
|
@@ -145,6 +151,11 @@ def _validated_preview(
|
|
|
145
151
|
return empty, "plan_digest_mismatch", None
|
|
146
152
|
if plan_envelope.get("effect_digest") != plan_envelope.get("plan_digest"):
|
|
147
153
|
return empty, "effect_digest_mismatch", None
|
|
154
|
+
mapper_binding = plan.get("mapper_binding")
|
|
155
|
+
if mapper_binding is not None:
|
|
156
|
+
binding_errors = validate_mapper_binding(mapper_binding)
|
|
157
|
+
if binding_errors:
|
|
158
|
+
return empty, "mapper_binding_invalid", {"errors": binding_errors}
|
|
148
159
|
result = _preview(plan, root)
|
|
149
160
|
diagnostics = _diagnostics(result)
|
|
150
161
|
if result.get("status") != "ok":
|
|
@@ -162,14 +173,32 @@ def _validated_preview(
|
|
|
162
173
|
return diagnostics, None, None
|
|
163
174
|
|
|
164
175
|
|
|
165
|
-
def compile_plan(
|
|
176
|
+
def compile_plan(
|
|
177
|
+
plan: dict[str, Any],
|
|
178
|
+
*,
|
|
179
|
+
root: str | Path,
|
|
180
|
+
idempotency_key: str,
|
|
181
|
+
mapper_binding: Mapping[str, Any] | None = None,
|
|
182
|
+
) -> dict[str, Any]:
|
|
166
183
|
"""Validate and bind a mechanical plan without writing or spawning."""
|
|
167
184
|
root_path = Path(root).resolve()
|
|
168
185
|
if not isinstance(plan, dict):
|
|
169
|
-
raise ValueError("plan must be an object")
|
|
186
|
+
raise ValueError("plan must be an object") # noqa: TRY004 - public contract error
|
|
170
187
|
if not idempotency_key:
|
|
171
188
|
raise ValueError("idempotency_key is required")
|
|
172
189
|
normalized = _normalized_plan(plan)
|
|
190
|
+
supplied_binding = mapper_binding if mapper_binding is not None else normalized.get("mapper_binding")
|
|
191
|
+
if supplied_binding is not None:
|
|
192
|
+
binding_errors = validate_mapper_binding(supplied_binding)
|
|
193
|
+
if binding_errors:
|
|
194
|
+
return {
|
|
195
|
+
"schema": PLAN_SCHEMA,
|
|
196
|
+
"status": "blocked",
|
|
197
|
+
"idempotency_key": idempotency_key,
|
|
198
|
+
"reason": "mapper_binding_invalid",
|
|
199
|
+
"errors": binding_errors,
|
|
200
|
+
}
|
|
201
|
+
normalized["mapper_binding"] = canonical_mapper_binding(supplied_binding)
|
|
173
202
|
preview = _preview(normalized, root_path)
|
|
174
203
|
digest = _digest(normalized)
|
|
175
204
|
diagnostics = _diagnostics(preview)
|
|
@@ -182,6 +211,9 @@ def compile_plan(plan: dict[str, Any], *, root: str | Path, idempotency_key: str
|
|
|
182
211
|
"diagnostics": diagnostics,
|
|
183
212
|
"provenance": {"producer": "simplicio-dev-cli", "operator": "native-deterministic"},
|
|
184
213
|
}
|
|
214
|
+
if "mapper_binding" in normalized:
|
|
215
|
+
base["mapper_binding"] = normalized["mapper_binding"]
|
|
216
|
+
base["provenance"]["mapper_binding_digest"] = mapper_binding_digest(normalized["mapper_binding"])
|
|
185
217
|
if preview.get("status") != "ok":
|
|
186
218
|
return base | {"status": "blocked", "errors": preview.get("errors", [])}
|
|
187
219
|
try:
|
|
@@ -210,6 +242,8 @@ def dry_run(plan_envelope: dict[str, Any], *, root: str | Path) -> dict[str, Any
|
|
|
210
242
|
"diagnostics": diagnostics,
|
|
211
243
|
"provenance": plan_envelope.get("provenance", {}),
|
|
212
244
|
}
|
|
245
|
+
if isinstance(plan_envelope.get("mapper_binding"), dict):
|
|
246
|
+
payload["mapper_binding"] = plan_envelope["mapper_binding"]
|
|
213
247
|
if reason:
|
|
214
248
|
payload["reason"] = reason
|
|
215
249
|
if preconditions is not None:
|
|
@@ -333,6 +367,9 @@ def apply(plan_envelope: dict[str, Any], *, root: str | Path) -> dict[str, Any]:
|
|
|
333
367
|
"provenance": plan_envelope.get("provenance", {}),
|
|
334
368
|
"recovery_locator": str(receipt_path.relative_to(root_path)),
|
|
335
369
|
}
|
|
370
|
+
if isinstance(plan_envelope.get("mapper_binding"), dict):
|
|
371
|
+
receipt["mapper_binding"] = plan_envelope["mapper_binding"]
|
|
372
|
+
receipt["mapper_binding_digest"] = mapper_binding_digest(plan_envelope["mapper_binding"])
|
|
336
373
|
receipt["receipt_digest"] = _receipt_digest(receipt)
|
|
337
374
|
write_text_atomic(receipt_path, _canonical(receipt) + "\n")
|
|
338
375
|
return receipt | {"replayed": False}
|
|
@@ -136,6 +136,9 @@ def _render_mapper_versions(payload: dict) -> None:
|
|
|
136
136
|
print(f" drift {drift['kind']}: {drift['reason']}")
|
|
137
137
|
else:
|
|
138
138
|
print(" drift none")
|
|
139
|
+
train = payload.get("release_train")
|
|
140
|
+
if train:
|
|
141
|
+
print(f" release train {train['status']} — {train['reason_code']}")
|
|
139
142
|
|
|
140
143
|
|
|
141
144
|
def _render_native_delegation(summary: dict) -> None:
|