This release fixes issues for SREs watching stability and regressions.
✓ No known CVEs patched in this version
Topics
+11 more
Affected surfaces
Summary
AI summaryFixed silent underenforcement of daily budget caps when using budget declarations.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Documentation added for handling budgets that cannot be directly declared by a plugin. Documentation added for handling budgets that cannot be directly declared by a plugin. Source: granite4.1:30b@2026-07-15-audit Confidence: low |
— |
| Bugfix | Medium |
Budget declaration no longer disables max_daily_budget_increase_pct or max_total_daily_budget. Budget declaration no longer disables max_daily_budget_increase_pct or max_total_daily_budget. Source: llm_adapter@2026-07-15 Confidence: low |
— |
Full changelog
Fixed
-
A budget declaration no longer switches off
max_daily_budget_increase_pctormax_total_daily_budget(#418).
The declaration seam (#414) replaced the built-in key scan for every channel — including the two figures the caller supplies rather than the tool. So a plugin that declared the expected, documented shape (justdaily) had both of those caps silently stop firing for its tools, on the built-in gate and on its own gate delegating to it. That is the same silent underenforcement the seam exists to remove, reintroduced through the seam itself, landing on the plugins that adopted it.Neither cap was work-around-able. The
unitflag covers every declared key while mureo'scurrent_daily_budgetconvention is currency units, so a micros tool that declaredcurrentdivided the baseline by 1e6 (a ¥10,000 → ¥15,000 raise reported as "149,999,900% (0 → 15,000)"). Andprojected_total_daily_budgethas no declaration key at all, so the total cap could only ever be switched off.Both channels now keep mureo's own convention keys, which a declaration does not replace — the budgets the tool proposes (
daily/lifetime) still belong wholly to the plugin's vocabulary. They are held to the same fail-closed standard as every other budget channel (#419): a non-finite or oversized figure refuses the call instead of taking the cap dark.
Docs
-
docs/plugin-authoring.mddocuments what to do when a budget declaration cannot reach a plugin's budget (#417).
A declaration names a top-level argument key, so it cannot express a budget nested in a raw passthrough body (body.daily_budget) nor one a mapper derives and the caller never typed (monthly = daily × multiplier) — both ordinary plugin designs. The guide had flatly told authors they never need amureo.policy_gatesentry for budget enforcement, which is untrue for those shapes and would leave a real-spend surface unenforced.It now shows the normalize-and-delegate gate to register instead: project the budget onto the canonical keys the built-in scan already reads, then hand the decision straight back to
StrategyPolicyGate. The plugin supplies keys, not a policy, so cap comparison,STRATEGY.mdparsing and the fail-closed rules keep a single owner — and upstream fixes to guardrail semantics reach the plugin for free. Includes a worked example, the entry-point wiring, and the rules such a gate must follow.
Full changelog: https://github.com/logly/mureo/compare/v0.10.24...v0.10.25
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About logly/mureo
Framework for AI agents (Claude Code, Cursor, Codex, Gemini) to operate Google Ads, Meta Ads, and Search Console. Grounded in a local STRATEGY.md — not metric-chasing. Defense-in-depth security, local-first. Apache 2.0.
Related context
Related tools
Beta — feedback welcome: [email protected]