You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v0.3.0-alpha.30: defensive samples validation in bridge
Bug #31 surfaced by the round-3 input-validation probe. The MCP tool
layer's Pydantic validation rejects samples<1 cleanly, but direct
callers (integration tests, automation scripts, future Python
clients) bypassed that. samples=-1 reached the XLL which threw an
opaque C++ exception (OLE error 0xe06d7363), surfacing to the user
as "Application.Run failed" — useless.
Fix: defensive sanity check at the bridge boundary. samples >= 1 is
enforced and a 10M soft cap rejects clearly rather than letting
MRService.dll thrash on absurd inputs.
Round 3 also verified (no fixes needed):
- MCP tool envelope shapes are correct per the alpha.17 sweep
- All 40 tool descriptions have the ModelRisk: brand prefix
- 9 distribution families round-trip through insert_distribution
- MCP resources (5 modelrisk:// URIs) registered and readable
- 50K-iteration sim completes in 18.4s wall-clock
- End-to-end convert workflow on noMR produces real randomness
404 tests pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,25 @@ All notable changes to ModelRisk MCP. Follows [Keep a Changelog](https://keepach
4
4
5
5
## [Unreleased]
6
6
7
+
## [0.3.0-alpha.30] — 2026-05-22
8
+
9
+
### Fixed
10
+
11
+
-**Bug #31 — `samples<=0` passed to `bridge.run_simulation` reached the XLL and triggered an opaque C++ exception** (`OLE error 0xe06d7363`). The MCP tool layer's Pydantic validation enforces `ge=1`, but direct callers (integration tests, automation scripts, future Python clients) bypassed that. Surfaced by the round-3 input-validation probe. Fix: defensive sanity check at the bridge boundary (`samples >= 1` and a 10M soft cap) so every code path produces a clear actionable error before invoking ModelRisk's XLL. The message names the offending value and explains why we're rejecting it.
12
+
13
+
### Verified end-to-end (no fixes needed)
14
+
15
+
Round 3 confirmed:
16
+
-**MCP tool envelope shapes**: all `list_*` and `find_*` tools return the alpha.17 `{noun: [...], count: N}` envelope correctly. Brand prefix on all 40 tool descriptions.
17
+
-**Distribution catalogue breadth**: 9 of 11 sampled families (Lognormal, Uniform, Triangle, Beta, Gamma, Weibull, Poisson, Binomial, Bernoulli) round-trip through `insert_distribution`. The other two failures were test-script errors (`VoseExpon`'s param is `beta` not `mean`; the discrete uniform is `VoseDiscreteU`, not `VoseDiscreteUniform`).
0 commit comments