Skip to content

Commit 085d137

Browse files
author
Kyeong Sun Kim
committed
release: v1.0.0
Promotion from 1.0.0-rc2 to 1.0.0 stable release for the Advances in Engineering Software submission (paper J10) and to provide a reproducible citation for papers J2, J5, J6, J8, J9 that depend on the framework. No functional changes relative to rc2. Version strings bumped across op3/__init__.py, pyproject.toml, CITATION.cff, docs/sphinx/conf.py. __release_date__ added to op3/__init__.py. Also fixes a pre-existing Windows cp949 encoding bug in the SSOT yaml parser test by specifying encoding="utf-8" explicitly. Tests: 362 passed, 11 skipped (optional data not bundled), 0 failed.
1 parent 5d8835b commit 085d137

7 files changed

Lines changed: 179 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,24 @@ All notable changes to Op^3 are documented here. The format follows
44
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this
55
project uses [Semantic Versioning](https://semver.org/).
66

7+
## [1.0.0] -- 2026-04-16
8+
9+
Promotion from 1.0.0-rc2 to 1.0.0 for the Advances in Engineering Software
10+
submission (Paper J9). No functional changes relative to rc2; this release is
11+
a stable version cut.
12+
13+
### Changed
14+
- Version strings bumped to 1.0.0 in `op3/__init__.py`, `pyproject.toml`,
15+
`CITATION.cff`, `docs/sphinx/conf.py`.
16+
- `__release_date__` added to `op3/__init__.py`.
17+
18+
### Verified
19+
- 361 / 361 tests passing (11 skipped for optional data not in this checkout;
20+
1 pre-existing test deselected for a Windows cp949 encoding issue unrelated
21+
to the release; reproducible at `tests/test_op3_framework.py::TestSSOTConfig::
22+
test_yaml_exists_and_parses`, tracked separately).
23+
- Package imports with `__version__ == "1.0.0"` confirmed.
24+
725
## [Unreleased]
826

927
### Added -- `op3_studio/` web GUI

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ authors:
1818
given-names: "Kyeong Sun"
1919
affiliation: "Department of Civil and Environmental Engineering, Seoul National University"
2020
type: software
21-
version: "1.0.0-rc2"
22-
date-released: "2026-04-10"
21+
version: "1.0.0"
22+
date-released: "2026-04-16"
2323
license: Apache-2.0
2424
repository-code: "https://github.com/ksk5429/numerical_model"
2525
identifiers:

RELEASE_NOTES_v1.0.0.md

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# Op^3 v1.0.0 Release Notes
2+
3+
**Release date:** 2026-04-16
4+
**Prior release:** 1.0.0-rc2 (2026-04-10)
5+
**Tag:** `v1.0.0`
6+
7+
## What this release is
8+
9+
This is the first stable release of the Op^3 integrated numerical framework for
10+
offshore wind turbine foundation assessment. The release is cut from the
11+
same codebase as `1.0.0-rc2` with no functional changes; it is a stable
12+
version tag to support the pending submission of the framework paper to
13+
*Advances in Engineering Software* (paper J10 in the KSK publication roster)
14+
and to provide a reproducible citation for papers J2, J5, J6, J8, and J9
15+
that depend on the framework.
16+
17+
## What is in the release
18+
19+
Same substance as 1.0.0-rc2:
20+
21+
- **OptumGX three-dimensional limit analysis** integration with automated
22+
parameter extraction for four foundation modes (A fixed, B six-by-six
23+
stiffness, C distributed BNWF, D dissipation-weighted generalised BNWF).
24+
- **OpenSeesPy structural dynamics** integration with eigenvalue sweep,
25+
pushover analysis, and cyclic degradation.
26+
- **OpenFAST v5 aero-servo-hydro-elastic** coupling via SoilDyn mode with
27+
six-by-six stiffness handoff.
28+
- **Fatigue module** per DNV-RP-C203 with rainflow counting.
29+
- **Op^3 Studio web application** with eight-tab interactive UI, large-
30+
language-model chat sandbox, and Three.js three-dimensional visualisation.
31+
- **Mooring anchor module** with novel dissipation-centroid padeye method
32+
and one hundred thirty-four validation tests.
33+
- **Thirty-nine cross-validation benchmarks** from twenty-five-plus published
34+
sources at ninety-two percent coverage.
35+
36+
## Verification
37+
38+
Test suite at the release tag:
39+
40+
- 362 passed, 11 skipped (optional data not bundled in this checkout).
41+
- Zero failures after the 2026-04-16 cp949 encoding fix in
42+
`tests/test_op3_framework.py::TestSSOTConfig::test_yaml_exists_and_parses`
43+
(explicit `encoding="utf-8"` added).
44+
45+
## Installation
46+
47+
```bash
48+
pip install op3-framework==1.0.0
49+
```
50+
51+
or directly from this release on GitHub:
52+
53+
```bash
54+
pip install https://github.com/ksk5429/numerical_model/releases/download/v1.0.0/op3_framework-1.0.0-py3-none-any.whl
55+
```
56+
57+
## Citing
58+
59+
```
60+
@software{op3_2026,
61+
author = {Kim, Kyeong Sun},
62+
title = {Op^3: OptumGX-OpenSeesPy-OpenFAST integrated numerical
63+
modeling framework for offshore wind turbines},
64+
version = {1.0.0},
65+
date = {2026-04-16},
66+
doi = {10.5281/zenodo.19476542},
67+
url = {https://github.com/ksk5429/numerical_model}
68+
}
69+
```
70+
71+
## Changes versus 1.0.0-rc2
72+
73+
- Version string bumped to `1.0.0` in `op3/__init__.py`,
74+
`pyproject.toml`, `CITATION.cff`, and `docs/sphinx/conf.py`.
75+
- `__release_date__` attribute added to `op3/__init__.py`.
76+
- Pre-existing Windows cp949 encoding bug in
77+
`tests/test_op3_framework.py::TestSSOTConfig::test_yaml_exists_and_parses`
78+
fixed by specifying `encoding="utf-8"` when reading the YAML that
79+
contains Korean site metadata.
80+
81+
No library behaviour changes. Papers J2, J5, J6, J8, and J9 that cite
82+
the framework can use `1.0.0` as a pinned version.
83+
84+
## Known limitations carried from 1.0.0-rc2
85+
86+
- Scour mode validated on Gunsan normally consolidated clay only;
87+
applicability boundaries to other soil classes are discussed in
88+
the companion OE-D-26-00984 paper.
89+
- Anchor mode validated on one hundred thirty-four reference tests;
90+
field validation is open.
91+
- OpenFAST coupling is tested against NREL reference turbines;
92+
utility-scale commercial OWT turbines are not yet validated.
93+
- Op^3 Studio is a research prototype, not production-hardened.
94+
95+
## Manual publish steps (pending after local build)
96+
97+
The following steps require user credentials and cannot be completed
98+
automatically. They are listed for user action.
99+
100+
1. **Rotate the PyPI token** (pending manual task #1 in memory). The
101+
previous token was exposed in conversation and should be revoked at
102+
<https://pypi.org/manage/account/token/>. Generate a new token scoped
103+
to `op3-framework` and store it in `~/.pypirc` or the environment
104+
variable `TWINE_PASSWORD`.
105+
106+
2. **Upload wheel and source distribution to PyPI.**
107+
108+
```bash
109+
cd F:/GITHUB3/numerical_model_fresh
110+
python -m twine upload dist/op3_framework-1.0.0*
111+
```
112+
113+
3. **Create the Git tag and push.**
114+
115+
```bash
116+
cd F:/GITHUB3/numerical_model_fresh
117+
git add -A
118+
git commit -m "release: v1.0.0"
119+
git tag -a v1.0.0 -m "Op^3 v1.0.0 stable release"
120+
git push origin main --tags
121+
```
122+
123+
4. **Create the GitHub release.** Either in the web UI at
124+
<https://github.com/ksk5429/numerical_model/releases/new?tag=v1.0.0>
125+
or via the `gh` CLI:
126+
127+
```bash
128+
gh release create v1.0.0 dist/op3_framework-1.0.0-py3-none-any.whl \
129+
dist/op3_framework-1.0.0.tar.gz \
130+
--title "Op^3 v1.0.0" \
131+
--notes-file RELEASE_NOTES_v1.0.0.md
132+
```
133+
134+
5. **Zenodo mint.** Zenodo automatically mints a DOI for the GitHub
135+
release if the repository has the Zenodo integration enabled. Verify
136+
at <https://zenodo.org/account/settings/github/> that the repository
137+
is switched on. The concept DOI `10.5281/zenodo.19476542` stays
138+
constant; a new version DOI is assigned to this release.
139+
140+
6. **Update README badge.** After PyPI upload succeeds, the README
141+
version badge should automatically reflect `1.0.0`. Verify manually.
142+
143+
## What does not happen in this release
144+
145+
- No breaking API changes.
146+
- No dependency changes.
147+
- No new tests or benchmarks (the test suite remains at 362 passing).
148+
- No new documentation pages; the Sphinx content is identical to rc2.

docs/sphinx/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
project = "Op^3 -- Integrated Numerical and Digital Twin Framework"
4040
author = "Kim Kyeong Sun (Seoul National University)"
4141
copyright = "2026, Kim Kyeong Sun"
42-
release = "1.0.0-rc2"
43-
version = "1.0.0-rc2"
42+
release = "1.0.0"
43+
version = "1.0.0"
4444

4545

4646
# -- General configuration ---------------------------------------------------

op3/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313
freqs = model.eigen(n_modes=3)
1414
"""
1515

16+
__version__ = "1.0.0"
17+
__release_date__ = "2026-04-16"
18+
1619
from op3.config import load_site_config
1720
from op3.foundations import build_foundation, FoundationMode
1821
from op3.composer import compose_tower_model
1922
from op3.cross_compare import cross_compare
2023

21-
__version__ = "1.0.0-rc2"
22-
2324
__all__ = [
2425
"load_site_config",
2526
"build_foundation",

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "op3-framework"
7-
version = "1.0.0-rc2"
7+
version = "1.0.0"
88
description = "OptumGX-OpenSeesPy-OpenFAST integration framework for offshore wind turbine foundations"
99
readme = "README.md"
1010
requires-python = ">=3.11"

tests/test_op3_framework.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,11 @@ class TestSSOTConfig:
153153

154154
def test_yaml_exists_and_parses(self):
155155
import yaml
156-
cfg = yaml.safe_load((REPO_ROOT / "op3" / "config" / "site_a.yaml").read_text())
156+
# Explicit UTF-8 encoding is required because the YAML contains
157+
# Korean site metadata; Windows cp949 default decoder fails on it.
158+
cfg = yaml.safe_load(
159+
(REPO_ROOT / "op3" / "config" / "site_a.yaml").read_text(encoding="utf-8")
160+
)
157161
assert cfg is not None
158162
assert isinstance(cfg, dict)
159163

0 commit comments

Comments
 (0)