-
check_budget(): accumulates current_usage on success (04-P monitoring-> monitoring), and on reaching/exceeding limit_value transitions the task to blocked_pending_human with blocked_reason='budget_exceeded' (never 'usage_limit_wait_timeout' -- 04-P is explicit these two guardrails, human- configured budget vs Claude Code's own plan quota, must not share a blocked_reason) and raises BudgetExceededError rather than returning allowed=false silently, matching 03-C §3.12's own errors list. update_budget_limit_and_resume(): REQ-10's boundary case needs "raise the limit -> paused tasks resume" to be real; built the minimal version this Unit needs rather than the full settings-page controller (c_budget_config_update, U-030/PH3's job) -- reuses U-016's manual_resume (org_loop_route.route_org_loop) for the actual status restoration instead of reimplementing it. 6 new stdlib unittest cases, all real (sqlite, no mocking needed). 173 total across U-001-019, all passing. Also: the U-014 full real closed-loop run that's been going in a detached background process since earlier this session finished -- 957s (~16min). All 4 real BRD/PRD/SDD/Benchmark docs, a real JS snake-game implementation (engine.js/engine.test.js/index.html/app.js) from the Coder, and a genuinely careful INCONCLUSIVE verdict from the Validator: it explicitly refused to accept the Coder's own claimed "10/10 passed, verified with headless Chrome" without being able to reproduce it, correctly citing its own migrated SOUL.md rule ("工具错误和权限不足属于INCONCLUSIVE,不能洗成PASS"). It also caught a real test-fidelity gap (T3/T7 not matching the Benchmark's literal wording) via careful static tracing. Result preserved at /private/tmp/.../scratchpad/snake-game-result for inspection. The Validator also reported no Bash tool available despite its frontmatter granting one -- investigating that as a follow-up, separate from this commit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>