.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright (C) 2022-2023 Nordix Foundation. All rights reserved
.. Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved.

=============
Release Notes
=============


This document provides the release notes for the Non-RT RIC Service Management & Exposure (SME).

Version history SME CAPIFcore
=============================

+------------+----------+------------------+--------------------------------------+
| **Date**   | **Ver.** | **Author**       | **Comment**                          |
|            |          |                  |                                      |
+------------+----------+------------------+--------------------------------------+
| 2022-12-14 | 1.0.0    | Henrik Andersson | G Release                            |
|            |          |                  | Initial version of Capifcore         |
|            |          |                  |                                      |
+------------+----------+------------------+--------------------------------------+
| 2023-02-10 | 1.0.1    | Yennifer Chacon  | G Maintenance                        |
|            |          |                  | Release                              |
+------------+----------+------------------+--------------------------------------+
| 2023-06-16 | 1.1.0    | Yennifer Chacon  | H Release                            |
|            |          |                  |                                      |
+------------+----------+------------------+--------------------------------------+
| 2023-12-15 | 1.2.0    | John Keeney      | I Release                            |
|            |          |                  |                                      |
+------------+----------+------------------+--------------------------------------+

Version history SME Service Manager
===================================

+------------+----------+------------------+--------------------------------------+
| **Date**   | **Ver.** | **Author**       | **Comment**                          |
|            |          |                  |                                      |
+------------+----------+------------------+--------------------------------------+
| TBA        |          |                  | Initial release of Service Manager   |
+------------+----------+------------------+--------------------------------------+

Release Data
============

G Release
---------
+-----------------------------+---------------------------------------------------+
| **Project**                 | Non-RT RIC CAPIF Core                             |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
|                             | 487e239542f74384f6557a5001411da56503e7bb          |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release designation**     | G release                                         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release date**            | 2022-12-14                                        |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Purpose of the delivery** | Introduction of Capifcore                         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+

G Maintenance
-------------
+-----------------------------+---------------------------------------------------+
| **Project**                 | Non-RT RIC CAPIF Core                             |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
|                             | b4cee94bd251b0bb92fc435fbe74ea1079d43356          |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release designation**     | G release                                         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release date**            | 2023-02-10                                        |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Purpose of the delivery** | Refactor and improvements of Capifcore            |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+

H Release
---------
+-----------------------------+---------------------------------------------------+
| **Project**                 | Non-RT RIC CAPIF Core                             |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
|                             | a5609aed918b4b53eda377f78374dd4abe5d2eb1          |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release designation**     | H release                                         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release date**            | 2023-06-16                                        |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Purpose of the delivery** | nonrtric-plt-capifcore:1.1.0                      |
|                             |    Add more CAPIF core functions and APIs         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+

I Release
---------
+-----------------------------+---------------------------------------------------+
| **Project**                 | Non-RT RIC CAPIF Core                             |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
|                             | b0d960af6287a3da8744af704b89daa5e23f0b54          |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release designation**     | I release                                         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Release date**            | 2023-12-15                                        |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
| **Purpose of the delivery** | nonrtric-plt-capifcore:1.2.0                      |
|                             |    Add more CAPIF core functions and APIs         |
|                             |                                                   |
+-----------------------------+---------------------------------------------------+
