This document maps every finding from the July 22, 2026 technical review to a concrete fix that has been (or will be) applied. The goal is to address the legitimate engineering issues raised, while being honest about scope: formal epistemic-logic research (Kripke models, AGM belief revision, trained PRMs, true MCTS-UCB) is a multi-month research program and is documented here as a roadmap item rather than overclaimed as "done".
- Rewrite
.github/workflows/ci.yml: remove|| echo, makepytestblocking. - Add coverage reporting (
pytest-cov) with a floor. - Make
ruffa blocking lint gate (was--exit-zerowarning only). - Add
mypy(type checking) andbandit(security scan) to CI. - Fix
tests.ymlmatrix + blocking tests + coverage.
- Fix
test_l2_conductor_routing: it passedspec.domain.value(str) whereSemanticConductor._route_experts(spec: ProjectSpec)is expected. -
arsenal_run.py: moveroute_projectimport to module top (was imported insiderun()). -
arsenal_run.py: remove unreachable dead code afterreturn. -
arsenal_run.py:run_pipelineusedraise SystemExit(1)in library code → replaced with a re-raisedPipelineError(CLI still doessys.exit).
- Delete
patch_run.py(string-replacement hack). Its intended logging was folded intoarsenal_run.pyproperly via a normal edit.
-
memory/economy.py: bareexcept: pass→except Exception. -
memory/skill_library.py: bareexcept:inget_all_skills→except Exception. - General: no new bare excepts introduced; ruff
E722enforced in CI.
-
llm.py: stop writing API keys intoos.environglobally (redundant — the key is already passed per-call viacall_params["api_key"]). -
llm.py: add input validation (validate_messages) — reject empty/oversized prompts before dispatch, capping token blow-up. -
l1_5_adas.py: harden dynamic schema generation — bound field count, validate identifiers, reject empty/unsafe blueprints (no arbitrary code execution; only Pydanticcreate_modelfrom sanitized names).
- Add
ruff,pytest-cov,mypy,bandit,types-requeststodev. - Move
streamlitout of core deps into an optionaluiextra (non-UI users no longer pull a heavy web framework). - Lock file (
uv.lock/pip-compile) — tracked as follow-up; see CHANGELOG.
- Fix existing test + big expansion:
llmoffline fallback,router,l1_optimizer,l2_conductor,l1_5_adas,l3_search,l4_refine,l6_stages,skill_library(with injected fake client),economy,models(Pydantic constraints),cliarg parsing, and a full offline pipeline integration test. - Coverage floor enforced in CI (start modest, raise as suite grows).
-
pipeline/machine.py: explicit, data-driven stage registry (L0→L6) with per-stage enable predicates, plus a typedPipelineContext(replaces ad-hocDict[str, Any]), so routing is inspectable, not hidden inifstatements. - Async:
llm.agenerate_structured(reallitellm.acompletion+ instructor), parallelconduct_async(experts run concurrently viaasyncio.gather), andarun_pipelineentrypoint — addresses "no async / sequential experts".
- README: mark the "85% cost / 80% fewer tokens" figures as illustrative targets, not independently benchmarked; add a "What 'Epistemic' Means Here" section clarifying it is structured Toulmin prompting, not formal logic; add architecture diagram.
-
docs/ARCHITECTURE.mdwith Mermaid diagram + data contracts. -
docs/BENCHMARKS.mddescribing methodology + current caveats. -
CHANGELOG.md.
- Formal Dynamic Epistemic Logic / Kripke structures / AGM belief revision.
- Trained Process Reward Model (current "PRM" is LLM-as-Judge prompting).
- True MCTS with UCB / value backpropagation (current L3 is bounded beam enumeration).
- Full multi-agent message-passing communication layer (current "experts" are sequential strategy-pattern nodes).
- These remain research roadmap items; the naming is now qualified in docs.