.. This work is licensed under a Creative Commons Attribution 4.0 International License.

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

.. note::
   * This Release Notes must be updated each time the team decides to Release new artifacts.
   * The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
   * This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
   * Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
   * This note must be removed after content has been added.


Version: x.y.z
--------------


:Release Date: yyyy-mm-dd



**New Features**

One or two sentences explaining the purpose of this Release.

**Bug Fixes**
   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
**Known Issues**
   - `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
     One sentences explaining what is the issue.

     Another sentence explaining the impact of the issue.

     And an optional sentence providing a workaround.

**Security Issues**
   You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_


**Upgrade Notes**

**Deprecation Notes**

**Other**

