From 6e9c69d8384c61aeb6d8121bdce74c8888984ec0 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:06:25 -0700 Subject: [PATCH 01/11] fix some links, add error rules, remove footer --- portal/contributing.md | 2 +- portal/index.md | 2 +- portal/myst.yml | 36 ++++++------------------------ portal/posts/2025/mystification.md | 2 +- portal/posts/2025/new-cookbooks.md | 4 ++-- 5 files changed, 12 insertions(+), 34 deletions(-) diff --git a/portal/contributing.md b/portal/contributing.md index 9ad30c7c6..5f01e006d 100644 --- a/portal/contributing.md +++ b/portal/contributing.md @@ -13,7 +13,7 @@ and [contributing new Cookbooks](https://projectpythia.org/cookbook-guide). Welcome! This is the main guide for contributing to Project Pythia. Project Pythia is an open community, and all contributions are welcome following our [Code of -Conduct](https://projectpythia.org/code_of_conduct). All +Conduct](https://projectpythia.org/codeofconduct/). All of the content for Project Pythia is hosted on GitHub in a number of different public repositories. From this document you can learn about the many ways that you can contribute to this community diff --git a/portal/index.md b/portal/index.md index e9b18785e..0c0c03d85 100644 --- a/portal/index.md +++ b/portal/index.md @@ -100,7 +100,7 @@ Anyone can contribute to and participate in Project Pythia! We conduct all of our work in the open, and all of our work is Open Source Licensed. We welcome contributions from anyone in the community. Please see our [Contributor’s Guide](/contributing) -for details on how you can get involved, our [Code of Conduct](https://github.com/projectpythia/projectpythia.github.io/blob/main/CODEOFCONDUCT.md) for an overview of contribution rules and responsibilities, and come see our work in the +for details on how you can get involved, our [Code of Conduct](https://projectpythia.org/codeofconduct/) for an overview of contribution rules and responsibilities, and come see our work in the [ProjectPythia GitHub Organization](https://github.com/ProjectPythia). (monthly-pythia-meetings)= diff --git a/portal/myst.yml b/portal/myst.yml index 2d6494329..81874fcc5 100644 --- a/portal/myst.yml +++ b/portal/myst.yml @@ -9,6 +9,13 @@ project: plugins: - type: executable path: src/blogpost.py + error_rules: + - rule: link-resolves + severity: ignore + keys: + - 'chro@ucar.edu' + - 'http://localhost:3000' + - 'https://github.com/YOUR_USER_NAME/pythia-foundations' toc: - file: index.md @@ -40,32 +47,3 @@ site: options: style: style.css analytics_google: G-T9KGMX7VHZ # Measurement ID or Tracking ID - parts: - footer: | - :::::{grid} 3 - :class: items-center - - - ```{image} https://raw.githubusercontent.com/ProjectPythia/pythia-config/main/logos/NSF-NCAR.png - :alt: NCAR Logo - ``` - - ```{image} https://raw.githubusercontent.com/ProjectPythia/pythia-config/main/logos/NSF-Unidata.png - :alt: Unidata Logo - ``` - - ```{image} https://raw.githubusercontent.com/ProjectPythia/pythia-config/main/logos/UAlbany.svg - :alt: UAlbany Logo - ``` - ::::: - - :::::{div} - :class: flex items-center gap-4 text-disclaimer - - ```{image} https://raw.githubusercontent.com/ProjectPythia/pythia-config/main/logos/nsf.jpg - :alt: NSF Logo - :height: 60px - ``` - - This material is based upon work supported by the National Science Foundation under Grant Nos. 2026863 and 2026899. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation. - ::::: diff --git a/portal/posts/2025/mystification.md b/portal/posts/2025/mystification.md index c7ae52535..2d17828cf 100644 --- a/portal/posts/2025/mystification.md +++ b/portal/posts/2025/mystification.md @@ -6,7 +6,7 @@ authors: [jukent, brian-rose, dcamron, kafitzgerald] tags: [myst] --- -Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyterbook.org/en/stable/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://next.jupyterbook.org/)! +Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyterbook.org/en/stable/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://jupyterbook.org/! ## Our Motivation for MyST We began the process of transitioning to MyST in the summer of 2024 at the annual [Project Pythia Cook-off hackathon](https://projectpythia.org/posts/2025/new-cookbooks). At that event, members of the MyST team demonstrated the current [alpha-version of the technology](https://executablebooks.org/en/latest/blog/2024-06-14-project-pythia-mystmd/) and coached us through the boilerplate code necessary to make some of our key resources build with MyST. diff --git a/portal/posts/2025/new-cookbooks.md b/portal/posts/2025/new-cookbooks.md index 1059583c6..37e8c1fe4 100644 --- a/portal/posts/2025/new-cookbooks.md +++ b/portal/posts/2025/new-cookbooks.md @@ -85,7 +85,7 @@ Recently, [Steinman et al. (2022)](https://doi.org/10.1073/pnas.2120015119) used :align: left ``` -**Authors:** [Max Grover](@mgrover1), [Nathan Collier](@nocollier), [Carsten Ehbrecht](@cehbrecht), [Jacqueline Nugent](@jacnugent), and [Gerardo Rivera Tello](@griverat) +**Authors:** [Max Grover](https://github.com/mgrover1), [Nathan Collier](https://github.com/nocollier), [Carsten Ehbrecht](https://github.com/cehbrecht), [Jacqueline Nugent](https://github.com/jacnugent), and [Gerardo Rivera Tello](https://github.com/griverat) @@ -198,7 +198,7 @@ This Cookbook covers how to work with wavelets in Python. Wavelets are a powerfu ## Want to get involved? - + SAVE THE DATE! Project Pythia is hosting our next Cookbook Cook-off hackathon event at the NSF NCAR's Mesa Lab, August 5-8 2025. From ab64bf74aafb42f4e8cf1f7b32e6c88013861779 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:08:36 -0700 Subject: [PATCH 02/11] missing ) --- portal/posts/2025/mystification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/posts/2025/mystification.md b/portal/posts/2025/mystification.md index 2d17828cf..041b08db7 100644 --- a/portal/posts/2025/mystification.md +++ b/portal/posts/2025/mystification.md @@ -6,7 +6,7 @@ authors: [jukent, brian-rose, dcamron, kafitzgerald] tags: [myst] --- -Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyterbook.org/en/stable/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://jupyterbook.org/! +Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyterbook.org/en/stable/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://jupyterbook.org/)! ## Our Motivation for MyST We began the process of transitioning to MyST in the summer of 2024 at the annual [Project Pythia Cook-off hackathon](https://projectpythia.org/posts/2025/new-cookbooks). At that event, members of the MyST team demonstrated the current [alpha-version of the technology](https://executablebooks.org/en/latest/blog/2024-06-14-project-pythia-mystmd/) and coached us through the boilerplate code necessary to make some of our key resources build with MyST. From 6cb952f6240bff5c15c889af6dd5cea92e3e84ac Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:09:11 -0700 Subject: [PATCH 03/11] make metrics key more robust --- portal/metrics.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/portal/metrics.md b/portal/metrics.md index 051e7823d..418eb4450 100644 --- a/portal/metrics.md +++ b/portal/metrics.md @@ -12,6 +12,7 @@ kernelspec: import datetime import json import os +import re import cartopy import cartopy.io @@ -33,8 +34,23 @@ COOKBOOKS_ID = '324070631' # Access Secrets PRIVATE_KEY_ID = os.environ.get('PRIVATE_KEY_ID') -# Ensure GH secrets doesn't introduce extra '\' new line characters (related to '\' being an escape character) -PRIVATE_KEY = os.environ.get('PRIVATE_KEY').replace('\\n', '\n') + +# Ensure GH secrets doesn't introduce extra '\' new line characters or other +# formatting issues that stricter cryptography versions (Python 3.14+) will reject +raw_key = os.environ.get('PRIVATE_KEY', '') +raw_key = raw_key.replace('\\n', '\n').replace('\r\n', '\n').replace('\r', '\n') + +match = re.search( + r'-----BEGIN PRIVATE KEY-----(.*?)-----END PRIVATE KEY-----', + raw_key, + re.DOTALL +) +if match: + body = re.sub(r'\s+', '', match.group(1)) + chunks = [body[i:i+64] for i in range(0, len(body), 64)] + PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----\n' + '\n'.join(chunks) + '\n-----END PRIVATE KEY-----\n' +else: + PRIVATE_KEY = raw_key # fallback credentials_dict = { 'type': 'service_account', @@ -52,8 +68,8 @@ credentials_dict = { try: client = BetaAnalyticsDataClient.from_service_account_info(credentials_dict) -except google.auth.exceptions.MalformedError as e: - print('Malformed Error:', repr(e)) +except (google.auth.exceptions.MalformedError, ValueError) as e: + print('Credentials Error:', repr(e)) # Insight into reason for failure without exposing secret key # 0: Secret not found, else malformed # 706: extra quote, 732: extra '\', 734: both @@ -213,6 +229,7 @@ def _run_top_pages_report(property_id): # Reverse order of lists, so they'll plot with most visited page on top (i.e. last) return pages[::-1], views[::-1] + def plot_top_pages(PORTAL_ID, FOUNDATIONS_ID, COOKBOOKS_ID): """ Function that takes the top 5 viewed pages for all 3 projects and plot them on a histogram. @@ -288,6 +305,7 @@ def _run_usersXcountry_report(property_id): user_by_country[country] = user_by_country.get(country, 0) + users return user_by_country + def plot_usersXcountry(FOUNDATIONS_ID): """ Function for taking users by country for Pythia Foundations and plotting them on a map. From 00df98fa17e686066a9ab4d2c056adacdf829cfa Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:18:35 -0700 Subject: [PATCH 04/11] add raise --- portal/metrics.md | 1 + 1 file changed, 1 insertion(+) diff --git a/portal/metrics.md b/portal/metrics.md index 418eb4450..f5eb600a4 100644 --- a/portal/metrics.md +++ b/portal/metrics.md @@ -74,6 +74,7 @@ except (google.auth.exceptions.MalformedError, ValueError) as e: # 0: Secret not found, else malformed # 706: extra quote, 732: extra '\', 734: both print('Length of PRIVATE_KEY:', len(PRIVATE_KEY)) + raise pre_project_date = '2020-03-31' ``` From 80cae9002195b36158a7d71befbd73ed7e978b61 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:36:11 -0700 Subject: [PATCH 05/11] rm changes to metrics.md --- portal/metrics.md | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/portal/metrics.md b/portal/metrics.md index f5eb600a4..051e7823d 100644 --- a/portal/metrics.md +++ b/portal/metrics.md @@ -12,7 +12,6 @@ kernelspec: import datetime import json import os -import re import cartopy import cartopy.io @@ -34,23 +33,8 @@ COOKBOOKS_ID = '324070631' # Access Secrets PRIVATE_KEY_ID = os.environ.get('PRIVATE_KEY_ID') - -# Ensure GH secrets doesn't introduce extra '\' new line characters or other -# formatting issues that stricter cryptography versions (Python 3.14+) will reject -raw_key = os.environ.get('PRIVATE_KEY', '') -raw_key = raw_key.replace('\\n', '\n').replace('\r\n', '\n').replace('\r', '\n') - -match = re.search( - r'-----BEGIN PRIVATE KEY-----(.*?)-----END PRIVATE KEY-----', - raw_key, - re.DOTALL -) -if match: - body = re.sub(r'\s+', '', match.group(1)) - chunks = [body[i:i+64] for i in range(0, len(body), 64)] - PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----\n' + '\n'.join(chunks) + '\n-----END PRIVATE KEY-----\n' -else: - PRIVATE_KEY = raw_key # fallback +# Ensure GH secrets doesn't introduce extra '\' new line characters (related to '\' being an escape character) +PRIVATE_KEY = os.environ.get('PRIVATE_KEY').replace('\\n', '\n') credentials_dict = { 'type': 'service_account', @@ -68,13 +52,12 @@ credentials_dict = { try: client = BetaAnalyticsDataClient.from_service_account_info(credentials_dict) -except (google.auth.exceptions.MalformedError, ValueError) as e: - print('Credentials Error:', repr(e)) +except google.auth.exceptions.MalformedError as e: + print('Malformed Error:', repr(e)) # Insight into reason for failure without exposing secret key # 0: Secret not found, else malformed # 706: extra quote, 732: extra '\', 734: both print('Length of PRIVATE_KEY:', len(PRIVATE_KEY)) - raise pre_project_date = '2020-03-31' ``` @@ -230,7 +213,6 @@ def _run_top_pages_report(property_id): # Reverse order of lists, so they'll plot with most visited page on top (i.e. last) return pages[::-1], views[::-1] - def plot_top_pages(PORTAL_ID, FOUNDATIONS_ID, COOKBOOKS_ID): """ Function that takes the top 5 viewed pages for all 3 projects and plot them on a histogram. @@ -306,7 +288,6 @@ def _run_usersXcountry_report(property_id): user_by_country[country] = user_by_country.get(country, 0) + users return user_by_country - def plot_usersXcountry(FOUNDATIONS_ID): """ Function for taking users by country for Pythia Foundations and plotting them on a map. From 355d8612866d28859ac9780e2878f0ab458c1473 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:44:29 -0700 Subject: [PATCH 06/11] try exclude metrics.md --- .github/workflows/trigger-site-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-site-build.yaml b/.github/workflows/trigger-site-build.yaml index b536768c5..3552a7600 100644 --- a/.github/workflows/trigger-site-build.yaml +++ b/.github/workflows/trigger-site-build.yaml @@ -9,4 +9,4 @@ jobs: artifact_name: book-zip-${{ github.event.number }} base_url: '/_preview/${{ github.event.number }}' path_to_notebooks: 'portal' - # Other input options are possible, see ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml + build_command: 'myst build --execute --html --strict --exclude metrics.md' From 684527ed7eb52e556619b1481359560c16d67ffd Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:50:13 -0700 Subject: [PATCH 07/11] remove strict from PR --- .github/workflows/trigger-site-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-site-build.yaml b/.github/workflows/trigger-site-build.yaml index 3552a7600..8e63bc991 100644 --- a/.github/workflows/trigger-site-build.yaml +++ b/.github/workflows/trigger-site-build.yaml @@ -9,4 +9,4 @@ jobs: artifact_name: book-zip-${{ github.event.number }} base_url: '/_preview/${{ github.event.number }}' path_to_notebooks: 'portal' - build_command: 'myst build --execute --html --strict --exclude metrics.md' + build_command: 'myst build --execute --html' From c5c4ace680d4e4574009082f416f206dbffd881b Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:22:39 -0700 Subject: [PATCH 08/11] add metrics.md error-rules --- CODEOFCONDUCT.md | 2 +- portal/myst.yml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CODEOFCONDUCT.md b/CODEOFCONDUCT.md index 88850afea..1e5a4217a 100644 --- a/CODEOFCONDUCT.md +++ b/CODEOFCONDUCT.md @@ -86,6 +86,6 @@ Projects that adopt this Code of Conduct need to stay up to date with UCAR's Con ## Attribution -This Code of Conduct was originally adapted from the [Contributor Covenant](http://contributor-covenant.org/version/1/4), version 1.4. We then aligned it with the UCAR Participant Code of Conduct, which also borrows from the American Geophysical Union (AGU) Code of Conduct. The UCAR Participant Code of Conduct applies to both UCAR employees as well as participants in activities run by UCAR. The original version of this for all software projects that have strong management from UCAR or UCAR staff is available on the UCAR website at [https://doi.org/10.5065/6w2c-a132](https://doi.org/10.5065/6w2c-a132). The date that it was adopted by this project was September 11, 2023. When responding to complaints, UCAR HR will do so based on the latest published version. Therefore, any project-specific changes should follow the Process for Changes section above. +This Code of Conduct was originally adapted from the [Contributor Covenant](https://www.contributor-covenant.org/it/version/1/4/code-of-conduct/), version 1.4. We then aligned it with the UCAR Participant Code of Conduct, which also borrows from the American Geophysical Union (AGU) Code of Conduct. The UCAR Participant Code of Conduct applies to both UCAR employees as well as participants in activities run by UCAR. The original version of this for all software projects that have strong management from UCAR or UCAR staff is available on the UCAR website at [https://doi.org/10.5065/6w2c-a132](https://doi.org/10.5065/6w2c-a132). The date that it was adopted by this project was September 11, 2023. When responding to complaints, UCAR HR will do so based on the latest published version. Therefore, any project-specific changes should follow the Process for Changes section above. As an Equal Employment Opportunity Employer and recipient of federal funds, UCAR complies with Title VI, Title VII, and Title IX of the Civil Rights Act; the Rehabilitation Act of 1973, as amended, and the Age Discrimination in Employment Act of 1975, as amended. See [UCAR’s Nondiscrimination Statement](https://www.ucar.edu/who-we-are/ethics-integrity/nondiscrimination). diff --git a/portal/myst.yml b/portal/myst.yml index 81874fcc5..4480b7988 100644 --- a/portal/myst.yml +++ b/portal/myst.yml @@ -16,6 +16,12 @@ project: - 'chro@ucar.edu' - 'http://localhost:3000' - 'https://github.com/YOUR_USER_NAME/pythia-foundations' + - rule: directive-known # The postlist directive is not recognized by the linter, but it works when the site is built + severity: ignore + - rule: image-format-optimizes # `metrics.md` has some large images that are not optimized + severity: ignore + - rule: container-children-valid # `metrics.md`` unexpected figure content of type output found in legend node, but works when the site is built + severity: ignore toc: - file: index.md From 10fa3cda19589f0e0b44f7c7d6b931bcb57c8b58 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:25:17 -0700 Subject: [PATCH 09/11] add comment back in --- .github/workflows/trigger-site-build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/trigger-site-build.yaml b/.github/workflows/trigger-site-build.yaml index 8e63bc991..e23af97e2 100644 --- a/.github/workflows/trigger-site-build.yaml +++ b/.github/workflows/trigger-site-build.yaml @@ -9,4 +9,5 @@ jobs: artifact_name: book-zip-${{ github.event.number }} base_url: '/_preview/${{ github.event.number }}' path_to_notebooks: 'portal' + # Other input options are possible, see ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml build_command: 'myst build --execute --html' From 35b45faf5968b921f921395c0a3a265ef83ae59b Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:36:58 -0700 Subject: [PATCH 10/11] one more link --- portal/posts/2025/mystification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal/posts/2025/mystification.md b/portal/posts/2025/mystification.md index 041b08db7..d46fb8fe6 100644 --- a/portal/posts/2025/mystification.md +++ b/portal/posts/2025/mystification.md @@ -6,7 +6,7 @@ authors: [jukent, brian-rose, dcamron, kafitzgerald] tags: [myst] --- -Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyterbook.org/en/stable/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://jupyterbook.org/)! +Project Pythia recently transitioned from a [Sphinx-based JupyterBook](https://jupyter-book.readthedocs.io/v1/intro.html) architecture to using [MyST Markdown](https://mystmd.org/), which serves as the foundation for the upcoming [JupyterBook 2](https://jupyterbook.org/)! ## Our Motivation for MyST We began the process of transitioning to MyST in the summer of 2024 at the annual [Project Pythia Cook-off hackathon](https://projectpythia.org/posts/2025/new-cookbooks). At that event, members of the MyST team demonstrated the current [alpha-version of the technology](https://executablebooks.org/en/latest/blog/2024-06-14-project-pythia-mystmd/) and coached us through the boilerplate code necessary to make some of our key resources build with MyST. From 9b5aa00224628864a7e0ef4149eeb8bfa2c0da58 Mon Sep 17 00:00:00 2001 From: Julia Kent <46687291+jukent@users.noreply.github.com> Date: Fri, 27 Feb 2026 07:16:40 -0700 Subject: [PATCH 11/11] English version --- CODEOFCONDUCT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOFCONDUCT.md b/CODEOFCONDUCT.md index 1e5a4217a..d305ee165 100644 --- a/CODEOFCONDUCT.md +++ b/CODEOFCONDUCT.md @@ -86,6 +86,6 @@ Projects that adopt this Code of Conduct need to stay up to date with UCAR's Con ## Attribution -This Code of Conduct was originally adapted from the [Contributor Covenant](https://www.contributor-covenant.org/it/version/1/4/code-of-conduct/), version 1.4. We then aligned it with the UCAR Participant Code of Conduct, which also borrows from the American Geophysical Union (AGU) Code of Conduct. The UCAR Participant Code of Conduct applies to both UCAR employees as well as participants in activities run by UCAR. The original version of this for all software projects that have strong management from UCAR or UCAR staff is available on the UCAR website at [https://doi.org/10.5065/6w2c-a132](https://doi.org/10.5065/6w2c-a132). The date that it was adopted by this project was September 11, 2023. When responding to complaints, UCAR HR will do so based on the latest published version. Therefore, any project-specific changes should follow the Process for Changes section above. +This Code of Conduct was originally adapted from the [Contributor Covenant](https://www.contributor-covenant.org/version/1/4/code-of-conduct/), version 1.4. We then aligned it with the UCAR Participant Code of Conduct, which also borrows from the American Geophysical Union (AGU) Code of Conduct. The UCAR Participant Code of Conduct applies to both UCAR employees as well as participants in activities run by UCAR. The original version of this for all software projects that have strong management from UCAR or UCAR staff is available on the UCAR website at [https://doi.org/10.5065/6w2c-a132](https://doi.org/10.5065/6w2c-a132). The date that it was adopted by this project was September 11, 2023. When responding to complaints, UCAR HR will do so based on the latest published version. Therefore, any project-specific changes should follow the Process for Changes section above. As an Equal Employment Opportunity Employer and recipient of federal funds, UCAR complies with Title VI, Title VII, and Title IX of the Civil Rights Act; the Rehabilitation Act of 1973, as amended, and the Age Discrimination in Employment Act of 1975, as amended. See [UCAR’s Nondiscrimination Statement](https://www.ucar.edu/who-we-are/ethics-integrity/nondiscrimination).