What's Changed
- ci(macos): the last platform without an install job gets one by @Zhonghao1995 in #420
- docs(readme): catch up with what the installer and the cases now do by @Zhonghao1995 in #421
- feat(swmm-plot): render every figure to the Nature figure specification by @Zhonghao1995 in #424
- docs(readme): cut the highlights down to one line each by @Zhonghao1995 in #427
- fix(docker): bare docker build no longer pins v0.8.0 by @Zhonghao1995 in #429
- docs(repo-map): redraw the map to match the current tree by @Zhonghao1995 in #430
- feat(hitl): the threshold gate reads real QA shapes and grades breaches low/medium/high by @Zhonghao1995 in #431
- fix(swmmcanada): resolve the service URL like every other stored setting by @Zhonghao1995 in #433
- fix(shell): follow-ups about the run in hand stay in its folder by @Zhonghao1995 in #434
- feat(rpt): typed flooding/surcharge/depth/runoff sections and an honest command allowlist by @Zhonghao1995 in #435
- fix(run): the default report node is the outfall that carries the flow by @Zhonghao1995 in #436
- test: the suite no longer writes into the project's real memory stores by @Zhonghao1995 in #437
- feat(memory): the failure memory is read back at session start by @Zhonghao1995 in #438
- fix(planner): the model actually receives typed results, and a scoped search stays scoped by @Zhonghao1995 in #439
- fix(report): the Word deliverable states the evidence boundary and the review verdict by @Zhonghao1995 in #440
- fix(cli): four verbs answer a novice honestly by @Zhonghao1995 in #441
- fix(tools): tolerate path:line references and name the route for in-process tools by @Zhonghao1995 in #442
- feat(memory): the agent path feeds memory, anchored on the place the run is named after by @Zhonghao1995 in #443
- fix(approval): the question names what it approves; repository writes are never chained by @Zhonghao1995 in #444
- feat(memory): parametric hits reach the planner as a prompt block by @Zhonghao1995 in #445
- fix(memory): stores anchored on the repository; earlier turns' reports kept by @Zhonghao1995 in #446
- perf(planner): prime only the top two skills' SKILL.md before the first call by @Zhonghao1995 in #447
- fix(cli): the inspection verbs answer what a first-time user types by @Zhonghao1995 in #448
- perf(planner): drop the discarded skill priming; goal-scoped tool schemas behind a knob by @Zhonghao1995 in #449
- fix(prompt): answer in the language of the user's current message by @Zhonghao1995 in #450
- fix(cli): a bare aiswmm --safe starts the safe interactive shell by @Zhonghao1995 in #451
- fix(permissions): the SAFE profile no longer asks before the runtime reads its own catalogue by @Zhonghao1995 in #452
- fix(welcome): quote the example path and drop the em dash in the greeting by @Zhonghao1995 in #453
- fix(synthesize): repair the Overture release cache before swmmanywhere runs by @Zhonghao1995 in #454
- fix(planner): the tool subset grows when the model names a skill; uncertainty phrasings select the skill by @Zhonghao1995 in #455
- fix(synthesize): keep swmmanywhere's warnings in the run instead of on the spinner line by @Zhonghao1995 in #456
- fix(units): every peak carries the report's flow unit; nothing assumes CMS any more by @Zhonghao1995 in #457
- fix(prompt): a bounded analysis runs its first pass instead of asking a questionnaire by @Zhonghao1995 in #458
- fix(tools): the product's source code is not evidence for a modeling question by @Zhonghao1995 in #459
- docs(skills): the network and uncertainty index lines lead with the question they answer by @Zhonghao1995 in #460
- fix(web): web_search tells a blocked backend from an empty result by @Zhonghao1995 in #461
- fix(tools): search_files skips operator tooling, traces and logs by @Zhonghao1995 in #462
- fix(permissions): agent-authored code stays under the run it serves by @Zhonghao1995 in #463
- perf(planner): the goal-scoped tool subset is on by default by @Zhonghao1995 in #464
- fix(runs): a run started by a plain request gets a short, lower-case name by @Zhonghao1995 in #465
- fix(climate): the scenario comparison carries the report's flow unit by @Zhonghao1995 in #466
- fix(shell): a declined tool call ends the turn instead of failing it by @Zhonghao1995 in #467
- fix(permissions): agent-authored inputs go under _agent/inputs/, not the run root by @Zhonghao1995 in #468
- fix(tools): the doctor tool's summary is its verdict, not its last line by @Zhonghao1995 in #469
- fix(executor): a bridge call to a tool with a typed ToolSpec is redirected before any prompt by @Zhonghao1995 in #470
- fix(memory): a long session-recall query matches any of its words by @Zhonghao1995 in #471
- fix(executor): redirect a bridge call only when the typed tool takes its arguments by @Zhonghao1995 in #472
- feat(network): the typed network_qa checks an existing INP as well as a network JSON by @Zhonghao1995 in #473
- fix(network): the typed network_qa writes the report it is cited for by @Zhonghao1995 in #474
- fix(prompt): asked what it remembers, the planner answers from the memory blocks by @Zhonghao1995 in #475
- perf(planner): the catalogue prologue runs once per process by @Zhonghao1995 in #476
- feat(uncertainty): propagate_parameter_ranges, the typed reference-free propagation tool by @Zhonghao1995 in #477
- fix(batches): sweeps and climate batches report at the run's dominant outfall by @Zhonghao1995 in #478
- fix(shell): a chat turn prints its LLM usage line by @Zhonghao1995 in #479
- fix(shell): a follow-up that names one earlier run of the session re-anchors there by @Zhonghao1995 in #480
- fix(shell): a question about work already done is a chat turn, not a run folder by @Zhonghao1995 in #481
- fix(shell): a chat continuation that starts modeling work opens a run folder by @Zhonghao1995 in #482
- fix(shell): a chat continuation starts work even when the chat turn ended with a statement by @Zhonghao1995 in #483
- fix(runs): a run name keeps no one-letter leftover of a contraction by @Zhonghao1995 in #484
- fix(audit): the audit finds the built INP by layout when no manifest records it by @Zhonghao1995 in #485
- fix(audit): the audit finds the network QA report beside the INP by @Zhonghao1995 in #486
- fix(audit): a re-audit keeps the prior record as a timestamped backup by @Zhonghao1995 in #487
- fix(audit): the audit takes an external INP from the runner manifest by @Zhonghao1995 in #488
- fix(audit): the audit reads the prepared-input validation verdict by @Zhonghao1995 in #489
- fix(doctor): doctor lists the run-failure store and the campaign's knobs by @Zhonghao1995 in #490
- fix(report): the Word report title follows the house style, no em dash by @Zhonghao1995 in #491
- fix(report): captions and the run README follow the house style, no em dashes by @Zhonghao1995 in #492
- fix(text): generated run-folder markdown follows the house style, no em dashes by @Zhonghao1995 in #493
- fix(shell): the interactive shell survives a provider error by @Zhonghao1995 in #494
- fix(providers): the codex route checks the model it pins against the gateway by @Zhonghao1995 in #495
- fix(report): the report tool states that its body is the English template by @Zhonghao1995 in #496
- fix(shell): the model swap note is said once per process by @Zhonghao1995 in #497
- feat(canada): fetch_swmm_from_canada accepts a published city name by @Zhonghao1995 in #498
- fix(canada): a placeholder bbox does not block the city name by @Zhonghao1995 in #499
- fix(canada): the timeout hint says what to do next and bbox is for user coordinates by @Zhonghao1995 in #500
- fix(shell): a failed run stays the anchor and no other run's results stand in for it by @Zhonghao1995 in #501
- fix(tools): a missing file names the files that exist by @Zhonghao1995 in #502
- fix(runs): a run is named after the place, not the request's verbs by @Zhonghao1995 in #503
- fix(runs): a Chinese request names its run after its Chinese words by @Zhonghao1995 in #504
- fix(shell): the approval line shows the city when the bbox is a placeholder by @Zhonghao1995 in #505
- fix(shell): an outward-facing tool asks again for a new area within a turn by @Zhonghao1995 in #506
- fix(tools): the climate and propagation tools name the INP files that exist by @Zhonghao1995 in #507
- fix(uncertainty): each parameter sweep keeps its own files by @Zhonghao1995 in #508
- fix(uncertainty): a sensitivity scan routes to the OAT tool, not to repeated sweeps by @Zhonghao1995 in #509
- fix(review): review_run takes a bundled rulebook by name and says which one it applied by @Zhonghao1995 in #510
- feat(uncertainty): a reference-free one-at-a-time ranking, and the honest routing split by @Zhonghao1995 in #511
- fix(uncertainty): one-at-a-time levels are per parameter and capped, SWMM storage names are aliases by @Zhonghao1995 in #512
- fix(uncertainty): a scaled rain event routes to the climate tool, the ensemble states its inputs by @Zhonghao1995 in #513
- fix(climate): each scenario batch keeps its own files by @Zhonghao1995 in #514
- fix(tools): apply_patch never edits an audited run in place by @Zhonghao1995 in #515
- fix(mcp): the tools listing budgets ten seconds by default by @Zhonghao1995 in #516
- fix(hitl): the expert-review prompt asks a clear question and records only y or n by @Zhonghao1995 in #517
- fix(hitl): the expert-review result says what was decided and lists the patterns by @Zhonghao1995 in #518
- fix(mcp): a server that cannot start names its cause by @Zhonghao1995 in #519
- fix(shell): an answered turn with failed calls is not reported as a failed turn by @Zhonghao1995 in #520
- fix(intent): an imperative Do ... is not a question, and whole-job phrasings start new work by @Zhonghao1995 in #521
- fix(planner): a declined tool call ends the turn instead of being retried by @Zhonghao1995 in #522
- fix(errors): a miss inside a chat folder points at the run the chat is about by @Zhonghao1995 in #523
- docs(examples): Kelowna end to end, one sentence to a finished model by @Zhonghao1995 in #524
- docs(cases): Kelowna, the same one-sentence chain on a fifth city by @Zhonghao1995 in #525
- release: v0.9.4, what two days of real use changed by @Zhonghao1995 in #526
Full Changelog: v0.9.3...v0.9.4