Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
254 commits
Select commit Hold shift + click to select a range
2d61978
Adding screenshots to time-series examples
sadie-niblett Jul 23, 2026
843b6d1
Adding screenshots to input-data examples
sadie-niblett Jul 23, 2026
25f7b3c
docs: rebuild technical reference for peer review
HadenSmith Jul 24, 2026
5d975b7
Build verification foundation and complete distribution oracles
HadenSmith Jul 24, 2026
e585bc2
Fix DataFrame series replacement plotting positions
HadenSmith Jul 25, 2026
ebb640a
Close distribution fitting optimizer tolerance audit
HadenSmith Jul 25, 2026
c1e343a
Verify Gaussian prior equivalence for GMM
HadenSmith Jul 25, 2026
06b85d8
Confirm influence diagnostic review findings
HadenSmith Jul 25, 2026
4f91691
Verify MAP and GMM influence diagnostics
HadenSmith Jul 25, 2026
adb4920
Add verification finalization handoff plan
HadenSmith Jul 25, 2026
6ffab67
Complete Phase 2 estimation verification
HadenSmith Jul 27, 2026
1a848ef
Restore NUTS acceptance reporting contract
HadenSmith Jul 27, 2026
62f4fbe
Adding screenshots to univariate-distribution-analysis examples
sadie-niblett Jul 27, 2026
00563a4
Fixing image accesing issues
sadie-niblett Jul 27, 2026
a32da0a
Fixing image accessing issues (pt 2)
sadie-niblett Jul 27, 2026
e5c9222
Finalize Bulletin 17C verification scope
HadenSmith Jul 28, 2026
55f5a6f
Document TR-003 nonstationary assumptions
HadenSmith Jul 28, 2026
d95588f
Updating and working through examples
HadenSmith Jul 28, 2026
6aa97d3
Adding screenshots to bivariate-distribution-analysis + rating-curve-…
sadie-niblett Jul 29, 2026
519f2f4
Fixing image accessing issues (pt 3)
sadie-niblett Jul 29, 2026
25d5f28
Image accessing test
sadie-niblett Jul 29, 2026
60745e8
Image accessing test 2
sadie-niblett Jul 29, 2026
52cdc0e
Image accessing test 3
sadie-niblett Jul 29, 2026
6dbc5f2
Image accessing test 4
sadie-niblett Jul 29, 2026
6c95067
Even more image formatting
sadie-niblett Jul 29, 2026
a6918b5
Finalize Phase 4 point-process and mixture corrections
HadenSmith Jul 31, 2026
991c830
Close Phase 4 point-process and mixture verification
HadenSmith Jul 31, 2026
a9065d4
Updating documentation
HadenSmith Aug 3, 2026
9d252f6
Verify competing-risk and composite corrections
HadenSmith Aug 3, 2026
47c06f7
Reconcile Phase 0-4 verification documentation
HadenSmith Aug 3, 2026
c28228d
Add Phase 4 recovery verification supplement
HadenSmith Aug 4, 2026
f8df484
Full review of formatting
sadie-niblett Aug 4, 2026
91f001a
Clean up verification test ownership
HadenSmith Aug 4, 2026
758b8f5
Consolidating namespaces
HadenSmith Aug 4, 2026
8709263
docs: open phase 5 after composite rerun
HadenSmith Aug 20, 2026
6cb363e
test: capture UI and App compatibility baselines
HadenSmith Aug 20, 2026
c7b08d4
fix: classify time-series Jeffreys priors
HadenSmith Aug 20, 2026
54f2518
fix: reject invalid time-series scales consistently
HadenSmith Aug 20, 2026
adc61c7
test: add phase 5 transform oracle
HadenSmith Aug 20, 2026
ac661e9
fix: make time-series transform state atomic
HadenSmith Aug 20, 2026
4e3f42c
test: add ARIMAX alignment oracle
HadenSmith Aug 20, 2026
02f766b
fix: align ARIMAX differenced likelihood
HadenSmith Aug 20, 2026
3d79c31
fix: reintegrate ARIMA predictions
HadenSmith Aug 20, 2026
924f13e
fix: generate transformed ARIMA series
HadenSmith Aug 20, 2026
b2332c0
test: cap ARIMA generator verification steps
HadenSmith Aug 20, 2026
a4db99a
fix: generate ARIMAX series on model scale
HadenSmith Aug 20, 2026
a38c83b
test: refresh time-series criteria verification
HadenSmith Aug 20, 2026
38d8ad8
test: add independent phase 5 recovery fixtures
HadenSmith Aug 20, 2026
d40d654
test: cover AR and MA in recovery oracle
HadenSmith Aug 20, 2026
1497a58
test: retain established AR and MA recovery seed
HadenSmith Aug 20, 2026
856cf9d
test: record blocked phase 5 recovery matrix
HadenSmith Aug 20, 2026
c3b924f
test: add burn-in to phase 5 recovery oracle
HadenSmith Aug 20, 2026
5493304
test: regenerate phase 5 recovery fixtures with burn-in
HadenSmith Aug 20, 2026
a9e9bbd
test: enforce phase 5 recovery burn-in contract
HadenSmith Aug 20, 2026
43fa979
docs: record phase 5 AR recovery pass
HadenSmith Aug 20, 2026
b513fae
docs: record phase 5 AR Bayesian convergence finding
HadenSmith Aug 20, 2026
ccd5842
Use default MCMC settings in time-series verification
HadenSmith Aug 20, 2026
a977204
Document default MCMC recovery evidence
HadenSmith Aug 20, 2026
e0a380e
Add independent ARIMA MLE recovery oracle
HadenSmith Aug 20, 2026
55687f2
Verify ARIMA MLE against independent oracle
HadenSmith Aug 20, 2026
130a815
Record ARIMA MLE oracle gate failure
HadenSmith Aug 20, 2026
fc4bc30
Compare ARIMA likelihood at one parameter point
HadenSmith Aug 20, 2026
1c0cecd
Align recovery prediction oracle with complete paths
HadenSmith Aug 20, 2026
e481d08
Compare ARIMA sampled MAP with posterior oracle
HadenSmith Aug 20, 2026
cd8f6b3
Add independent ARIMAX recovery oracle
HadenSmith Aug 20, 2026
552596b
Use production MLE default for ARIMAX recovery
HadenSmith Aug 20, 2026
b0dff5c
Verify ARIMAX sampled MAP against posterior oracle
HadenSmith Aug 20, 2026
65045e0
Finalize Phase 5 time-series verification
HadenSmith Aug 20, 2026
dbf16d7
fix: condition differenced predictions at forecast boundary
HadenSmith Aug 21, 2026
c3db43b
Implement identified mixture sampling and align diagnostics
HadenSmith Aug 21, 2026
057ba8e
test: verify transformed forecast scale
HadenSmith Aug 21, 2026
7a0a797
Testing examples
HadenSmith Aug 21, 2026
e7b9201
Untrack SQLite sidecar files of example projects
HadenSmith Aug 21, 2026
6cc26d0
Condition ARIMAX on max(p,q,b) and harden time-series model state
HadenSmith Aug 21, 2026
84a2ce9
Attribute per-observation transform Jacobian terms in pointwise likel…
HadenSmith Aug 21, 2026
a9c3e45
Strengthen time-series test oracles and remove source-text App tests
HadenSmith Aug 21, 2026
19f5942
Correct seasonal point-process annualization, clone rate and quantile…
HadenSmith Aug 21, 2026
a02c8a8
Simulate seasonal point processes from fitted per-season intensities
HadenSmith Aug 21, 2026
3c1e97d
Harden composite zero-inflation, correlation undo and coincident-freq…
HadenSmith Aug 21, 2026
e738b8f
Harden estimation diagnostics and GMM state handling
HadenSmith Aug 21, 2026
89f9c7b
Report Bulletin 17C bootstrap substitutions per replicate and tighten…
HadenSmith Aug 21, 2026
9903cb2
Repair encoding-damaged comments and remove history narration from pr…
HadenSmith Aug 21, 2026
dd03f0e
Describe current behavior in fast-test comments and rename the phase-…
HadenSmith Aug 21, 2026
1236cb0
Record the review findings, pending release notes, and legacy distrib…
HadenSmith Aug 21, 2026
1745448
Use default MCMC settings in Verification recovery tests and add the …
HadenSmith Aug 21, 2026
63750c1
Record the focused verification reruns and finish the default-setting…
HadenSmith Aug 21, 2026
16cc9d9
Add the v1.0 verification report and quick start guide PDFs and the s…
HadenSmith Aug 21, 2026
14dd21e
Open Phase 6: complete the finding register, close TR-078 and TR-081,…
HadenSmith Aug 21, 2026
6c0d55c
Add the rating-curve example fixtures, discharge-space likelihood ora…
HadenSmith Aug 21, 2026
89b7450
Record the proposed rating-curve corrections awaiting approval
HadenSmith Aug 21, 2026
15edb43
Add the independent copula-estimation oracle, its twelve exact cells,…
HadenSmith Aug 21, 2026
4d5534b
Add the spatial copula missing-site and location-error likelihood ora…
HadenSmith Aug 21, 2026
4bc095e
Correct the rating-curve discharge-space likelihood, exponent bounds,…
HadenSmith Aug 22, 2026
134643a
Correct the spatial GEV likelihood core: marginalize missing sites th…
HadenSmith Aug 22, 2026
c06ca34
Fit spatial leave-one-site-out folds on reduced training models with …
HadenSmith Aug 22, 2026
dc27300
Predict ungauged spatial sites with the conditional Gaussian process …
HadenSmith Aug 22, 2026
e1ee6eb
Name the spatial site weights as a correlation heuristic with an obso…
HadenSmith Aug 22, 2026
9b360ac
Dispose TR-084 through TR-090: condition the GMM moment covariance by…
HadenSmith Aug 22, 2026
acaf425
Finalize the verification plan: record the Phase 7 ledger and externa…
HadenSmith Aug 22, 2026
4304fb3
claude: checkpoint
HadenSmith Aug 22, 2026
458c881
Prepare technical reports for peer review
HadenSmith Aug 24, 2026
eff9378
Recompute plotting positions in the low-outlier setters and ClearLowO…
HadenSmith Aug 28, 2026
fcdad20
Delegate LinearTrendTest to Numerics and align the summary-statistics…
HadenSmith Aug 28, 2026
9e75a35
Add a scale-relative parameter-change test to iterative GMM convergence
HadenSmith Aug 28, 2026
37165c0
Make DIC and WAIC accumulation deterministic
HadenSmith Aug 28, 2026
6261993
Record the pending release notes for the upstream-issue fixes
HadenSmith Aug 28, 2026
e0d698b
Clamp out-of-bounds default initials and cover sub-unity log-space da…
HadenSmith Aug 28, 2026
4a31332
Fix the crash when deleting a mixture distribution row
HadenSmith Aug 28, 2026
f49ccee
Catch low-outlier setter validation throws in the App and on legacy open
HadenSmith Aug 28, 2026
5df4ed3
Surface reprocess failures and clamp the mixture simplex-boundary res…
HadenSmith Aug 28, 2026
9ce7cfa
Drive the POT diagnostic plots from the smoothed series
HadenSmith Aug 28, 2026
831f7d4
Record the pending release notes for the diagnosed issue fixes
HadenSmith Aug 28, 2026
cdf39e8
Make the Bulletin 17C jackknife acceleration reduction deterministic
HadenSmith Aug 28, 2026
d252c63
Describe the ParallelMean fixed-chunk reduction in the pending releas…
HadenSmith Aug 28, 2026
3b31f92
Pin the seasonal point-process block-day pairing against reordered input
HadenSmith Aug 28, 2026
df8ccf4
Record the moment, tie-term, and time-series interval corrections in …
HadenSmith Aug 28, 2026
d29f87a
Route BFGS line search failures to fallback
HadenSmith Aug 28, 2026
3276b8b
Preserve small-sample fitting metrics when RMSE is undefined
HadenSmith Aug 28, 2026
73cf9be
Preserve spatial covariance failure context
HadenSmith Aug 28, 2026
0a2703a
Complete verification remediation through Chunk 6
HadenSmith Aug 30, 2026
ff17257
Complete verification remediation through Chunk 10
HadenSmith Aug 30, 2026
503fd9c
Complete verification remediation through Chunk 12
HadenSmith Aug 31, 2026
808be5c
Complete verification remediation through Chunk 14
HadenSmith Sep 2, 2026
2bd8efb
Reconcile verification evidence through Chunk 16D
HadenSmith Sep 2, 2026
b732703
Restore v2 competing-risk deserialization compatibility
HadenSmith Sep 5, 2026
d367f06
Restore magnitude-ordered HS plotting positions and repair saved frames
HadenSmith Sep 8, 2026
81882ce
Changed tolerance on verification comparison tests. Changed defaults …
HadenSmith Sep 8, 2026
fbe0989
Merge issue #19 plotting-position repair
HadenSmith Sep 8, 2026
9a8d969
Use robust distribution likelihoods and quantile priors
HadenSmith Sep 8, 2026
cd8c0d1
Merge current BestFit branch with distribution integration
HadenSmith Sep 8, 2026
3e0371a
Fix DSS imports across missing blocks
HadenSmith Sep 8, 2026
7059034
Repair distribution integration and native test isolation
HadenSmith Sep 9, 2026
ae4aaa1
Deleting coverage files
HadenSmith Sep 9, 2026
6ffdbd6
Save updated BestFit example projects
HadenSmith Sep 9, 2026
1e8f26c
Merge distribution regression repairs into local BestFit branch
HadenSmith Sep 9, 2026
4732d5c
Add analytical systematic B17C Jacobians and regression evidence
HadenSmith Sep 17, 2026
cc5931c
Record Cholesky repair and B17C optimizer root causes
HadenSmith Sep 17, 2026
99c97a4
Record BFGS rounding validation and remaining GMM limits
HadenSmith Sep 17, 2026
8808f19
Testing example projects. Improving API to include MGBT and adding sk…
HadenSmith Sep 21, 2026
f4421e4
Polish verification report and library documentation
HadenSmith Sep 22, 2026
3fa55a0
Document technical reference finalization handoff
HadenSmith Sep 22, 2026
d46907d
Finalize technical reference for peer review
HadenSmith Sep 22, 2026
190b088
Add source-bound Python plots and read-only plot exports
HadenSmith Sep 22, 2026
5b4883c
Reject nested comparison alternatives without losing provenance
HadenSmith Sep 22, 2026
d584f8e
Add evidence-backed flood frequency workflows and input chronology
HadenSmith Sep 22, 2026
0cb6ab9
Merge documentation-verification-updates into main
HadenSmith Sep 23, 2026
1fe9b9a
Merge updater validation into documentation branch
HadenSmith Sep 25, 2026
9fbf0ec
Merge shared Python plotting into documentation branch
HadenSmith Sep 25, 2026
8e66b52
Preserve desktop plot geometry and audit example metadata
HadenSmith Sep 25, 2026
3c0ce8e
Complete data preparation tutorials with audited Python figures
HadenSmith Sep 25, 2026
db5807d
Complete saved-result example guides and portable plotting references
HadenSmith Sep 25, 2026
296cf6a
Build against the published RMC.Numerics 2.2.0 package by default
HadenSmith Sep 26, 2026
ec2c4e3
Preserve saved ARIMAX parameters and priors when restoring covariates
HadenSmith Sep 26, 2026
7481352
Keep time-series model undo consistent after covariate and structural…
HadenSmith Sep 26, 2026
6b005a6
Keep time-series fits when covariate metadata changes
HadenSmith Sep 26, 2026
2d11bd8
Unbind the replaced default model when copying a time-series analysis
HadenSmith Sep 26, 2026
41581d8
Test opening the regression example and document the ARIMAX restore c…
HadenSmith Sep 26, 2026
46fde9b
Reapply time-series undo snapshots only to the covariates they were r…
HadenSmith Sep 26, 2026
8461377
Degrade B17C gracefully when the GMM covariance fails
HadenSmith Sep 26, 2026
e75ef4a
Share the B17C covariance-failure guard between the MVN samplers
HadenSmith Sep 26, 2026
9891d63
Restore trend-model state and handlers when a default build fails
HadenSmith Sep 26, 2026
e51c4ff
Reject invalid smoothing periods instead of crashing POT diagnostics
HadenSmith Sep 26, 2026
c24a799
Keep coincident-frequency results after opening a saved analysis
HadenSmith Sep 26, 2026
aee423c
Report NaN RMSE for small Univariate and PointProcess fits
HadenSmith Sep 26, 2026
280cb8a
Clear a stale POT exposure when the input source changes
HadenSmith Sep 26, 2026
a72d10d
Restore the POT exposure when the method returns with the series unch…
HadenSmith Sep 26, 2026
b9d99c8
Rebuild ARIMAX defaults before notifying structural changes
HadenSmith Sep 26, 2026
4b7e305
Condition ARIMAX on max(q, p + b) so every AR-lag mean has its covari…
HadenSmith Sep 26, 2026
4f42286
Verify ARIMAX distributed-lag conditioning against an independent R o…
HadenSmith Sep 26, 2026
a08cb28
Document the ARIMAX max(q, p + b) conditioning order and its verifica…
HadenSmith Sep 26, 2026
ad0f7b2
Warn when time-series results predate v2.0.1 model handling
HadenSmith Sep 26, 2026
7e1c1f3
Apply the manual low-outlier threshold in the API
HadenSmith Sep 26, 2026
7cb2abd
Reconcile the DE population evidence with the Numerics default
HadenSmith Sep 26, 2026
96a3723
Record approved estimation changes in the review findings
HadenSmith Sep 26, 2026
6bf4e97
Clarify the ARIMAX residual-lag conditioning wording
HadenSmith Sep 26, 2026
ed76ddd
Correct the approval dates and scope in the new review-findings records
HadenSmith Sep 26, 2026
b6daad8
Keep the legacy time-series results warning until the results are ref…
HadenSmith Sep 26, 2026
fc6f859
Correct the MLE/MAP evidence window and API/skill threshold wording
HadenSmith Sep 26, 2026
f9e2e95
Complete XML documentation on Session 2 members and helpers
HadenSmith Sep 26, 2026
7107fee
Test the POT diagnostics invalid-period guard through the control
HadenSmith Sep 26, 2026
31639f0
Limit the MLE/MAP evidence-window count to Differential Evolution fits
HadenSmith Sep 26, 2026
8c3d323
Record the approval of the covariate-free ARIMAX conditioning order
HadenSmith Sep 26, 2026
ef12fd3
Record the 10*k reruns of the MLE/MAP evidence
HadenSmith Sep 26, 2026
617a8e9
Convert the remaining source files to UTF-8
HadenSmith Sep 26, 2026
c72caa1
Restore mis-encoded symbols in source files
HadenSmith Sep 26, 2026
d6eef15
Restore Greek symbols lost to a lossy code-page conversion
HadenSmith Sep 26, 2026
f2775c6
Label the B17C report interval as a confidence interval
HadenSmith Sep 26, 2026
2d2b237
Warn when a version 1.0 project's low outliers are cleared on open
HadenSmith Sep 26, 2026
f595901
Explain date-based covariate pairing in the validation messages
HadenSmith Sep 26, 2026
c32fd79
Reject negative forecast steps and clamp short random series
HadenSmith Sep 26, 2026
b2dff5a
Reject non-positive random-series lengths
HadenSmith Sep 26, 2026
a12ba57
Share the mixture weight expansion with the parameter-sets view and API
HadenSmith Sep 26, 2026
af1df7d
Keep the mixture expansion identical for single-component models
HadenSmith Sep 26, 2026
0c08282
Reject Godambe uncertainty with spatial regression errors in validation
HadenSmith Sep 26, 2026
019e3a7
Restore the caller's suppression flag in the low-outlier setters
HadenSmith Sep 26, 2026
69f5855
Warn and skip saved results when a time-series model no longer fits i…
HadenSmith Sep 26, 2026
0721c87
Reconcile the pending release notes with the approved changes
HadenSmith Sep 26, 2026
8373cee
Add known issues and limitations to the pending release notes
HadenSmith Sep 26, 2026
b315f06
Correct the time-series transform description in the API guide
HadenSmith Sep 26, 2026
09edfe6
Correct the TR-070 claim about prediction-window covariate validation
HadenSmith Sep 27, 2026
7a8d27c
Drop the parameter-name suffix from the version 1.0 low-outlier warning
HadenSmith Sep 27, 2026
ff8a12b
Complete the MCP tool list and drop a plan tag in the API guide
HadenSmith Sep 27, 2026
71e60bd
Clarify the time-series, low-outlier, and legacy Bulletin 17C release…
HadenSmith Sep 27, 2026
2bede69
Document the unset-series exception and replace plan tags in new code…
HadenSmith Sep 27, 2026
63e9e6d
Reject low-outlier flags without a threshold in API manual input
HadenSmith Sep 27, 2026
42f252b
Stop the skill runner from applying a screening threshold to unscreen…
HadenSmith Sep 27, 2026
d72acb9
Derive the default time-series training window from its degrees of fr…
HadenSmith Sep 27, 2026
b90f4cf
Record the approved default training window in the review findings
HadenSmith Sep 27, 2026
d9c81fd
Bump the release version to 2.0.1
HadenSmith Sep 27, 2026
c1c9df0
Generalize the release workflows and pin the OpenAPI package
HadenSmith Sep 27, 2026
c113170
Record the binary-asset policy and supersede closeout Session 3
HadenSmith Sep 27, 2026
4845917
Remove machine-local paths and agent names from verification records
HadenSmith Sep 27, 2026
6452f55
Recompute the ARIMA and ARIMAX MLE oracle hashes and document the con…
HadenSmith Sep 27, 2026
a452f55
Point the spatial GEV MLE catalog entries at their current reruns
HadenSmith Sep 27, 2026
742ccc3
Correct the TR-070 heading and amend TR-041's superseded conditioning…
HadenSmith Sep 27, 2026
09c9af5
Stop the App's Training Steps box from capping a default window
HadenSmith Sep 27, 2026
4cbaa1f
Pin the default window's transform refit and covariate notification c…
HadenSmith Sep 27, 2026
b406043
Correct two ARIMAX documentation comments
HadenSmith Sep 27, 2026
43b1012
Ship the XML documentation file in the RMC.BestFit package
HadenSmith Sep 27, 2026
f8bbb28
Pin the ASP.NET Core OpenAPI and test-host packages to their resolved…
HadenSmith Sep 27, 2026
9427bd2
Note that teams sharing projects with 2.0.0 should upgrade together
HadenSmith Sep 27, 2026
d82df82
Regenerate the report drafts at the v2.0.1 checkpoint
HadenSmith Sep 27, 2026
0d014da
Fix comparison refresh dispatch across analysis views
HadenSmith Sep 29, 2026
1032636
Keep time-series point refresh on the UI dispatcher
HadenSmith Sep 29, 2026
7b3297e
Refresh nonstationary chronology when point estimate changes
HadenSmith Sep 29, 2026
d1e7ef5
Cover retained point estimates across every analysis family
HadenSmith Sep 29, 2026
556d6b5
Fix mixture row identity and complete-state undo
HadenSmith Sep 29, 2026
b445ddf
Invalidate derived input data when source observations change
HadenSmith Sep 29, 2026
fbc8e57
Clear stale POT diagnostics after source changes
HadenSmith Sep 29, 2026
68fc038
Package the bestfit-frequency skill as a Claude plugin
HadenSmith Sep 30, 2026
16ee89a
Describe the 29 September fixes in the release notes
HadenSmith Sep 30, 2026
b727b21
Publish the chronology only when it is complete
HadenSmith Sep 30, 2026
e1147ca
Remove the header sort menu from the mixture distributions grid
HadenSmith Sep 30, 2026
3408eee
Keep manual and USGS observations when a formerly linked series changes
HadenSmith Sep 30, 2026
78bf641
Note the chronology, mixture sort, and USGS source fixes
HadenSmith Sep 30, 2026
8bc56f3
claude: checkpoint
HadenSmith Sep 30, 2026
7d0158c
Adding try-catch on cases were distributions moments can throw an error.
HadenSmith Oct 6, 2026
f80b14e
Updating and testing example projects
HadenSmith Oct 6, 2026
b7288c4
Restore Bulletin 17C GMM quantile variance reporting
HadenSmith Oct 6, 2026
7a3f665
Patching summary stats
HadenSmith Oct 6, 2026
17088c3
Prepare BestFit plugins for release and enforce browser origins
HadenSmith Oct 6, 2026
8498897
Prepare permanent plugin publication sources and directory README
HadenSmith Oct 7, 2026
e11a74a
Dispose SQLite persistence connections across project and elements
HadenSmith Oct 7, 2026
65b3e12
Pin WPF framework packages to 1.0.5
HadenSmith Oct 7, 2026
8e2ba5d
Cover element captions during rename undo and redo
HadenSmith Oct 7, 2026
d247d8a
Preserve analysis selections across theme changes
HadenSmith Oct 8, 2026
34ba2c0
FInal application testing
HadenSmith Oct 8, 2026
94b6761
Merge plugin release readiness into documentation-verification-updates
HadenSmith Oct 8, 2026
ed6f39a
Align updater release notes with the pinned framework version
HadenSmith Oct 8, 2026
81b1877
Merge Sadie's example documentation with current saved results
HadenSmith Oct 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Reference bytes are checksummed across Windows and non-Windows consumers.
validation/plot-parity/app-reference/*.json -text whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol
skills/bestfit-frequency/references/app-plot-map.json -text whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol
2 changes: 1 addition & 1 deletion .github/workflows/Integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
run: dotnet restore src/RMC.BestFit.Tests/RMC.BestFit.Tests.csproj

- name: Build
run: dotnet build src/RMC.BestFit.Tests/RMC.BestFit.Tests.csproj -c Release --no-restore /p:Version=2.0.0
run: dotnet build src/RMC.BestFit.Tests/RMC.BestFit.Tests.csproj -c Release --no-restore

- name: Test
env:
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/NuGetPublish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ jobs:
shell: pwsh
run: |
$version = $env:GITHUB_REF_NAME -replace '^v', ''
if ($version -ne '2.0.0') {
throw "The first public NuGet publish is restricted to v2.0.0; got '$env:GITHUB_REF_NAME'."
}
if ($version -notmatch '^\d+\.\d+\.\d+$') { throw "Tag '$env:GITHUB_REF_NAME' is not vX.Y.Z." }
[xml]$props = Get-Content Directory.Build.props
$projectVersion = @($props.Project.PropertyGroup.Version | Where-Object { $_ })[0]
if ($version -ne $projectVersion) { throw "Tag $version does not match Directory.Build.props Version $projectVersion." }
"VERSION=$version" >> $env:GITHUB_ENV

- name: Restore
Expand Down
119 changes: 119 additions & 0 deletions .github/workflows/PluginPackages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Plugin packages

on:
pull_request:
branches: [main]
push:
branches: [main, 'codex/plugin-*']
workflow_dispatch:
release:
types: [published]

permissions:
contents: read

jobs:
validate:
name: Packaged skill (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 45
defaults:
run:
shell: pwsh
env:
MPLBACKEND: Agg
MPLCONFIGDIR: ${{ github.workspace }}/artifacts/matplotlib
PYTHONDONTWRITEBYTECODE: '1'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Validate application release tag
if: github.event_name == 'release'
env:
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
if ($env:RELEASE_TAG -notmatch '^v\d+\.\d+\.\d+$') {
throw "Plugin packages accompany a BestFit application release tagged vX.Y.Z."
}
[xml]$props = Get-Content Directory.Build.props
$version = @($props.Project.PropertyGroup.Version | Where-Object { $_ })[0]
if ($env:RELEASE_TAG -ne "v$version") {
throw "Release tag does not match Directory.Build.props Version $version."
}

- name: Install skill validation dependencies
run: python -m pip install -r skills/bestfit-frequency/requirements.txt pytest

- name: Build portable API and tests with XML documentation enforced
run: dotnet build src/RMC.BestFit.Api.Tests/RMC.BestFit.Api.Tests.csproj -c Release -p:UseLocalRmcNumerics=false -p:EnforceXmlDocumentation=true

- name: Test API contracts and browser origin restrictions
run: dotnet test src/RMC.BestFit.Api.Tests/RMC.BestFit.Api.Tests.csproj -c Release --no-build

- name: Test skill scripts and all package layouts
run: python -m pytest tests/skills -q -p no:cacheprovider

- name: Build four distribution archives and checksums
run: python scripts/package-bestfit-skill.py

- name: Exercise the packaged skill with a fresh local API
run: python scripts/smoke-bestfit-plugin.py --output artifacts/plugin-smoke

- name: Preserve integration evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: plugin-evidence-${{ matrix.os }}
path: |
artifacts/plugin-smoke/
src/RMC.BestFit.Api.Tests/bin/Release/net10.0/TestResults/
if-no-files-found: warn

- name: Retain validated distribution archives
uses: actions/upload-artifact@v4
with:
name: plugin-packages-${{ matrix.os }}
path: |
artifacts/bestfit-frequency-*.zip
artifacts/bestfit-frequency-*.zip.sha256
if-no-files-found: error

release-assets:
name: Attach plugins to the application release
needs: validate
if: github.event_name == 'release'
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: plugin-packages-ubuntu-latest
path: packages
- name: Verify and attach all four packages
shell: bash
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
cd packages
assets=()
for kind in skill marketplace openai-plugin claude-plugin; do
archive="bestfit-frequency-${kind}.zip"
sha256sum --check "${archive}.sha256"
assets+=("$archive" "${archive}.sha256")
done
# Fail on existing assets; never replace previously published bytes silently.
gh release upload "$RELEASE_TAG" "${assets[@]}"
29 changes: 27 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,11 @@ MSBuild_Logs/
__pycache__/
*.pyc

# Local verification runtimes and document-rendering scratch
verification/python/.venv/
verification/r/renv/
tmp/

# Local AI-assistant metadata and scratch files. These stay on developer machines.
AGENTS.md
**/AGENTS.md
Expand All @@ -101,6 +106,26 @@ CLAUDE.md
.claude/
.codex/
.codex-tmp/
.superpowers

/artifacts/
/docs/superpowers/

# SQLite sidecar files created while a .bestfit project is open
*.bestfit-shm
*.bestfit-wal
*.bestfit-journal

# Verification project is not ready for the public repository yet.
src/RMC.BestFit.Verification/
# Local plot-reference rendering and temporary runtime state (source JSON lives in validation).
/.tmp-appdata/
/output/.dotnet/
/output/plot-ref-test*/
/output/plot-reference-gallery/
/output/plot-reference-smoke/
/output/plot-final-tests*/
/output/pytest-*/
/output/influence-compare.json
/output/loo-compare.json
*.egg-info/
/skills/bestfit-frequency/build/
/skills/bestfit-frequency/dist/
8 changes: 6 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ cff-version: 1.2.0
message: "If you use this software, please cite it as below."
type: software
title: "RMC-BestFit: Bayesian Estimation and Fitting Software for Flood Frequency Analysis"
version: "2.0.0"
date-released: "2026-07-17"
version: "2.0.1"
date-released: "2026-10-01"
license: 0BSD
repository-code: "https://github.com/USACE-RMC/RMC-BestFit"
url: "https://github.com/USACE-RMC/RMC-BestFit"
Expand Down Expand Up @@ -36,6 +36,10 @@ authors:
given-names: "Brian"
affiliation: "Fariborz Maseeh Department of Mathematics and Statistics, Portland State University, Portland, Oregon, USA"
orcid: "https://orcid.org/0000-0002-2164-0301"
- family-names: "Niblett"
given-names: "Sadie"
affiliation: "U.S. Army Corps of Engineers, Risk Management Center, Lakewood, Colorado, USA"
orcid: "https://orcid.org/0009-0008-8588-4816"
contact:
- family-names: "Smith"
given-names: "C. Haden"
Expand Down
8 changes: 8 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ Pull requests may take several weeks or longer to review. Before submitting code
7. Ensure a clean build with zero errors and zero warnings.
8. For model-library changes, run the public model test project locally.

## Binary Assets

Binary files stay in the repository history permanently, so they are committed sparingly:

- The technical reference and verification report PDFs in `output/pdf/` are regenerated and committed once per release, at the release's source checkpoint.
- Example projects (`examples/**/*.bestfit`) are recommitted only when their content changes, for example a corrected fixture or a project-format migration, not after an incidental open and save.
- Release packages and desktop zips are not committed. They are attached to the GitHub release, and the release description carries the desktop zip's SHA-256 checksum.

## Coding Standards

RMC-BestFit is used for flood risk and life-safety engineering decisions. Code should be explicit, well-tested, and numerically defensive.
Expand Down
11 changes: 8 additions & 3 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@
<HecDssAssemblyPath>$(HecDssRoot)bin\Debug\net10.0\Hec.Dss.dll</HecDssAssemblyPath>
<HecDssNativeWin>$(HecDssRoot)native-lib\win\hecdss.dll</HecDssNativeWin>
<HecDssNativeLinux>$(HecDssRoot)native-lib\linux\libhecdss.so</HecDssNativeLinux>
<Version>2.0.0</Version>
<AssemblyVersion>2.0.0.0</AssemblyVersion>
<FileVersion>2.0.0.0</FileVersion>
<!-- Build against the published RMC.Numerics package (Directory.Packages.props) by default.
Cross-repository development opts in with -p:UseLocalRmcNumerics=true and, optionally,
-p:RmcNumericsProjectPath=<path to Numerics.csproj>. -->
<RmcNumericsProjectPath Condition="'$(RmcNumericsProjectPath)' == ''">$(RepositoryRoot)..\Numerics\Numerics\Numerics.csproj</RmcNumericsProjectPath>
<UseLocalRmcNumerics Condition="'$(UseLocalRmcNumerics)' == ''">false</UseLocalRmcNumerics>
<Version>2.0.1</Version>
<AssemblyVersion>2.0.1.0</AssemblyVersion>
<FileVersion>2.0.1.0</FileVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(EnforceXmlDocumentation)' == 'true'">
Expand Down
21 changes: 10 additions & 11 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,20 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageFloatingVersionsEnabled>true</CentralPackageFloatingVersionsEnabled>
<DotNetReproducibleBuildsVersion>1.2.39</DotNetReproducibleBuildsVersion>
<MicrosoftSourceLinkGitHubVersion>10.0.102</MicrosoftSourceLinkGitHubVersion>
<RmcNumericsVersion>[2.1.4,3.0.0)</RmcNumericsVersion>
<MicrosoftSourceLinkGitHubVersion>10.0.111</MicrosoftSourceLinkGitHubVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="$(DotNetReproducibleBuildsVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.*" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.*" />
<PackageVersion Include="Microsoft.OpenApi" Version="2.*" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.12" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.12" />
<PackageVersion Include="Microsoft.OpenApi" Version="2.12.2" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="$(MicrosoftSourceLinkGitHubVersion)" />
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="2.0.0-preview.1" />
<PackageVersion Include="RMC.Numerics" Version="2.1.4" />
<PackageVersion Include="RMC.Wpf.Framework.Core" Version="1.0.4" />
<PackageVersion Include="RMC.Wpf.Framework.Models" Version="1.0.4" />
<PackageVersion Include="RMC.Wpf.Framework.Controls" Version="1.0.4" />
<PackageVersion Include="RMC.Wpf.Framework.Support" Version="1.0.4" />
<PackageVersion Include="RMC.Numerics" Version="2.2.0" />
<PackageVersion Include="RMC.Wpf.Framework.Core" Version="1.0.5" />
<PackageVersion Include="RMC.Wpf.Framework.Models" Version="1.0.5" />
<PackageVersion Include="RMC.Wpf.Framework.Controls" Version="1.0.5" />
<PackageVersion Include="RMC.Wpf.Framework.Support" Version="1.0.5" />
</ItemGroup>
</Project>
</Project>
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
***RMC-BestFit*** is free and open-source software developed by the U.S. Army Corps of Engineers Risk Management Center (USACE-RMC) for Bayesian flood-frequency analysis, distribution fitting, uncertainty quantification, rating curves, bivariate and coincident frequency analysis, time-series modeling, and related hydrologic risk workflows. Version 2.0 exposes the core statistical engine as a reusable .NET model library while retaining the desktop application, UI/project layer, and REST API source in the same repository.

> [!NOTE]
> RMC-BestFit 2.0.0 is the official public 2.0 release. Expect ongoing bug fixes, minor enhancements, and documentation improvements as the project continues to evolve.
> RMC-BestFit 2.0.1 is the current public 2.0 release, a maintenance update of 2.0.0. Expect ongoing bug fixes, minor enhancements, and documentation improvements as the project continues to evolve.

![RMC-BestFit desktop application](docs/images/rmc-bestfit-gui.png)

Expand All @@ -26,7 +26,7 @@
Install the model library from NuGet:

```powershell
dotnet add package RMC.BestFit --version 2.0.0
dotnet add package RMC.BestFit --version 2.0.1
```

Or search for [RMC.BestFit](https://www.nuget.org/packages/RMC.BestFit/) in the NuGet Package Manager. The package depends on [RMC.Numerics](https://github.com/USACE-RMC/Numerics) 2.x for probability distributions, optimization, MCMC sampling, and numerical methods.
Expand All @@ -43,6 +43,7 @@ Source builds include the model library, unit tests, UI/project layer, desktop a
| [Getting Started](docs/getting-started.md) | Minimal namespaces and first model-library workflows |
| [Technical Reference](docs/index.md) | Model, data, distribution, estimation, analysis, and diagnostic documentation |
| [REST API + MCP Server](docs/api.md) | Headless API and MCP server over `RMC.BestFit.dll` |
| [Frequency Curve Skill](docs/bestfit-frequency-skill.md) | Downloadable Claude/Codex skill for headless analysis and BestFit-style matplotlib plots |
| [References](docs/references.md) | Consolidated bibliography for the public documentation |
| [Version 1.0 User's Guide](https://usace-rmc.github.io/RMC-Software-Documentation/docs/desktop-applications/rmc-bestfit/users-guide/v1.0/preface/) | Published desktop user guide for the previous major release |
| [Version 1.0 Verification Report](https://usace-rmc.github.io/RMC-Software-Documentation/source-documents/desktop-applications/rmc-bestfit/verification-report/RMC-BestFit-Verification-Report.pdf) | Published verification report for the previous major release |
Expand Down Expand Up @@ -74,7 +75,7 @@ dotnet test src/RMC.BestFit.Tests/RMC.BestFit.Tests.csproj -c Release --no-build
Create the public NuGet package locally:

```powershell
dotnet pack src/RMC.BestFit/RMC.BestFit.csproj -c Release -o packages /p:Version=2.0.0
dotnet pack src/RMC.BestFit/RMC.BestFit.csproj -c Release -o packages /p:Version=2.0.1
```

## Key Capabilities
Expand Down
8 changes: 8 additions & 0 deletions RMC.BestFit.sln
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RMC.BestFit.Api", "src\RMC.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RMC.BestFit.Api.Tests", "src\RMC.BestFit.Api.Tests\RMC.BestFit.Api.Tests.csproj", "{3A7F9C2D-0005-4B14-8000-000000000005}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RMC.BestFit.Verification", "src\RMC.BestFit.Verification\RMC.BestFit.Verification.csproj", "{3A7F9C2D-0006-4B14-8000-000000000006}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{A1B2C3D4-1111-4000-8000-000000000001}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A1B2C3D4-2222-4000-8000-000000000002}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Verification", "Verification", "{A1B2C3D4-3333-4000-8000-000000000003}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -61,6 +65,9 @@ Global
{3A7F9C2D-0005-4B14-8000-000000000005}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3A7F9C2D-0005-4B14-8000-000000000005}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3A7F9C2D-0005-4B14-8000-000000000005}.Release|Any CPU.Build.0 = Release|Any CPU
{3A7F9C2D-0006-4B14-8000-000000000006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3A7F9C2D-0006-4B14-8000-000000000006}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3A7F9C2D-0006-4B14-8000-000000000006}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -74,6 +81,7 @@ Global
{3A7F9C2D-0003-4B14-8000-000000000003} = {A1B2C3D4-2222-4000-8000-000000000002}
{3A7F9C2D-0004-4B14-8000-000000000004} = {A1B2C3D4-1111-4000-8000-000000000001}
{3A7F9C2D-0005-4B14-8000-000000000005} = {A1B2C3D4-2222-4000-8000-000000000002}
{3A7F9C2D-0006-4B14-8000-000000000006} = {A1B2C3D4-3333-4000-8000-000000000003}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C73D6134-2D97-4E17-A6AD-BDE4D28FDBC5}
Expand Down
4 changes: 2 additions & 2 deletions codemeta.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"name": "RMC-BestFit: Bayesian Estimation and Fitting Software for Flood Frequency Analysis",
"alternateName": "RMC-BestFit",
"description": "A free and open-source .NET codebase for Bayesian estimation, distribution fitting, and frequency analysis in flood risk and water resources engineering. The first public package target is the portable RMC.BestFit model library.",
"version": "2.0.0",
"dateModified": "2026-07-17",
"version": "2.0.1",
"dateModified": "2026-10-01",
"license": "https://spdx.org/licenses/0BSD",
"codeRepository": "https://github.com/USACE-RMC/RMC-BestFit",
"issueTracker": "https://github.com/USACE-RMC/RMC-BestFit/issues",
Expand Down
Loading
Loading