Skip to content

v3.45.1

Choose a tag to compare

@wesleysimplicio wesleysimplicio released this 29 Sep 14:46
· 213 commits to main since this release
b3aa7df

simplicio-loop 3.45.1

The skill now works with no API key. 3.45.0 wrongly required OPENROUTER_API_KEY inside the skill, so workers that ran it without the key were blocked. In 3.45.1 the model that invoked the skill controls everything: simplicio-loop "<task>" surveys with Mapper and prints a plan request, the model writes the JSON plan, and simplicio-dev-cli applies it (simplicio-loop turbo --repo . --apply .simplicio-loop/turbo/plan.json). No provider call, no key.

Upgrade: pip install -U simplicio-loop && simplicio-loop install --global

Changes

  • Fix: 3.45.0 wrongly required a provider key inside the skill, so a worker that ran it without OPENROUTER_API_KEY was blocked. simplicio-loop turbo now defaults to host mode, which needs no key and makes no provider call (even when the key is set): the model that invoked the skill controls everything and simplicio-dev-cli makes every edit. Step 1, simplicio-loop turbo --repo R --task T [--verify V], surveys with Mapper and prints simplicio.turbo-request/v1 with status: "needs_plan": the map slice (one task gets only its slice), the task, the current file text, plan_path (.simplicio-loop/turbo/plan.json), format, tasks, prompt and the exact apply command; the request is also saved as .simplicio-loop/turbo/request.json. Step 2, simplicio-loop turbo --repo R --apply .simplicio-loop/turbo/plan.json [--verify V], applies the find/replace plan the model wrote through dev-cli, runs --verify and prints simplicio.turbo-run/v1 with mode: "host", status ok or failed, applied, failed (each with the dev-cli reason and an excerpt of the file around a find that did not match) and verify. A missing or malformed plan is failed with turbo_plan_missing or turbo_plan_malformed. Exit 0 ok or needs_plan, 1 failed, 2 blocked.
  • The OpenRouter engine is an explicit opt-in, --provider openrouter, and the only mode that needs OPENROUTER_API_KEY (turbo_provider_key_missing, exit 2, without it). The benchmark's turbo arm is unchanged.
  • simplicio-loop "<task>" [--verify "<tests>"] is the shortest form: a first argument that is not a subcommand runs turbo --repo . --task "<task>". Requests for all issues, tickets or tarefas still go to the GitHub drain intake, and bare simplicio-loop is unchanged. Before, it failed in argparse with "invalid choice".
  • The skill (body only, frontmatter unchanged), its orientation block, docs/LLM_MAX_SPEED_ORIENTATION.md, llms.txt, AGENTS.md, README.md, docs/CLI_COMMANDS.md, the host rules and the orient command card describe the two-command flow and drop the key requirement. The skill also says how to drain a queue: list the items (gh issue list --state open --json number,title,body), run the two commands per item in order, one CLAIMED issue and one PR per item, done only on status: "ok" plus a passing verify.
  • hooks/action_gate.py lets the host write .simplicio-loop/turbo/plan.json under SIMPLICIO_LOOP_STRICT and still blocks every other hand edit.
  • Turbo provider mode: one pooled httpx connection kept alive (about 50 ms per call, measured); a hedged duplicate request on session <id>-hedge after SIMPLICIO_TURBO_HEDGE_AFTER seconds (default 2.5, 0 disables) whose losing side is billed; a 1-token warm-up call that caches the header before independent tasks fan out at once; a one-task slice of the Mapper map (SIMPLICIO_TURBO_SLICE=0 disables it; 3,294 map tokens down to about 340, measured on fixture_hard); and one repair call with the test output after a failed --verify. Call records carry hedged and warm, and the benchmark counts hedge losers in the arm's tokens.
  • python3 scripts/check.py runs only the tests a change can affect by default. scripts/impact_tests.py diffs the working tree against --base (default origin/main), keeps the top-level functions, classes and assignments whose source changed, and selects the test files that reach them (bare name, module.symbol, import alias or dotted string), run a changed file by path, or name a changed non-Python file; a changed conftest.py reaches the tests below it. --full runs every test file and --base REF changes the reference; the package gates use the same selection. Selecting the whole 3.45.1 branch takes 9 s.
  • Test-suite pruning (the suite was 5,735 root tests): removed 141 and added 45 (host mode, the prose default, the impact gate and the safety net below), so 5,639 collected. 119 tests in 23 files test modules that no entry point, script, hook, doc or other module reaches (engine_router, engine_boundary, engine_dependency_guard, conformance, conformance_cache, hub_agent_store, inference_benchmark, inference_capacity, installed_process_e2e, installed_runtime_e2e, production_integration, model_routing_policy, semantic_convergence, token_control_plane, source_detect, map_service_delivery, map_service_invalidation, map_service_persistence, map_service_repository_watchers, behavior_loop, development_entry, epic_readiness, savings_cli); those modules and the unused hub_queue_agent_client compatibility shim are deleted, and so are the 11 tests in test_source_contract_v1.py that covered the deleted source_fan_in and source_providers. 5 exact duplicate tests and 6 skipped tests of the removed SQLite Hub queue are gone, plus 5 skipped dev-cli tests of removed provider features (dev-cli suite 2,716 to 2,711; mapper unchanged at 1,735). A new import sweep and a --help run of every console script guard the deleted modules.
  • The 5 tests blocked by the host's physical-pressure gate no longer depend on it: they pin the documented SIMPLICIO_LOOP_*_PRESSURE_PERCENT profile (new admitting_capacity fixture) and put the suite's interpreter first on PATH for the verify lanes. The quality provider's monitor honors the same profile through local_capacity.physical_monitor_kwargs, which moved out of runner.py.