From e65befda5eb0e3f5edf34ba95f424048c0683a21 Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Tue, 30 Jan 2024 15:44:30 +0100 Subject: [PATCH] Add Chang HF User Stories document --- .../chang_user_stories_template.md | 8 +- src_docs/chang_user_stories_template.rst | 539 ++++++++++++++++++ src_docs/source/_static/css/tables.css | 10 + src_docs/source/conf.py | 1 + src_docs/source/test_results.rst | 1 + .../test_results/chang_user_stories.rst | 7 + .../chang_user_stories_system_tests.rst | 539 ++++++++++++++++++ 7 files changed, 1102 insertions(+), 3 deletions(-) rename src_docs/{source => }/chang_user_stories_template.md (99%) create mode 100644 src_docs/chang_user_stories_template.rst create mode 100644 src_docs/source/_static/css/tables.css create mode 100644 src_docs/source/test_results/chang_user_stories.rst create mode 100644 src_docs/source/test_results/requirements/chang_user_stories_system_tests.rst diff --git a/src_docs/source/chang_user_stories_template.md b/src_docs/chang_user_stories_template.md similarity index 99% rename from src_docs/source/chang_user_stories_template.md rename to src_docs/chang_user_stories_template.md index c34ca8c72..5bb19736b 100644 --- a/src_docs/source/chang_user_stories_template.md +++ b/src_docs/chang_user_stories_template.md @@ -1,7 +1,9 @@ -Chang HF User Stories Coverage -============================== +System Tests Coverage +===================== -Status for **TODAY** +The page is updated about once a week. + +Latest update: **TODAY**   **Legend:** ![Success Badge][success-badge] ![Failure Badge][failure-badge] ![Uncovered Badge][uncovered-badge] diff --git a/src_docs/chang_user_stories_template.rst b/src_docs/chang_user_stories_template.rst new file mode 100644 index 000000000..d54fd11b5 --- /dev/null +++ b/src_docs/chang_user_stories_template.rst @@ -0,0 +1,539 @@ +System Tests Coverage +===================== + +The page is updated about once a week. + +Latest update: **TODAY**   + +**Legend:** |Success Badge| |Failure Badge| |Uncovered Badge|   + +CLI User Stories +---------------- + +.. list-table:: + :widths: 11 26 34 + :header-rows: 1 + + - + + - Status for Story ID + - Title + - Story Overview + - + + - |image-CLI1| + - Obtain constitution hash for verification (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to obtain the hash of the off-chain text of a Constitution, **so that** I can compare it against the hash registered on-chain to verify its authenticity. + - + + - |image-CLI2| + - Generate hash of the off-chain constitution (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to generate the hash of the off-chain text for a proposed Constitution, **so that** the hash can be utilized in a governance action. + - + + - |image-CLI3| + - Generate Committee member cold key pair (CCM) + `→ `__ + - **As** a potential Constitutional Committee member, **I want** to generate COLD key pair, **so that** I can be proposed for the Committee in a Governance action. + - + + - |image-CLI4| + - Generate committee member hot key pair (CCM) + `→ `__ + - **As** potential Constitutional Committee member, **I want** to generate HOT key pair, **so that** I can authorise the Hot key to sign votes on behalf of the Cold key. + - + + - |image-CLI5| + - Authorization certificate (CCM) + `→ `__ + - **As** a Constitutional Committee member, **I want** to issue a authorization certificate from my cold key to a hot key, **so that** I can sign my votes using the hot key and keep the cold key in cold storage and can authorise a new hot key in case the original one is compromised. + - + + - |image-CLI6| + - Generate committee member key hash (CCM) + `→ `__ + - **As** a potential Constitutional Committee member, **I want** to generate the key hashes for my cold and hot keys, **so that** they can be used by third parties to propose me as a new Constitutional Committee member and for identification purposes once I’ve been elected as Constitutional Committee member. + - + + - |image-CLI7| + - Committee member resignation certificate (CCM) + `→ `__ + - **As** a Constitutional Committee member, **I want** to be able to generate a resignation certificate, **so that** I can submit it to the chain on a transaction to signal to the Ada holders that I’m resigning from my duties as CC member. + - + + - |image-CLI8| + - Generate DRep keys (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to generate Ed25519 keys, **so that** I can register as a DRep. + - + + - |image-CLI9| + - Generate DRep ID (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep Id, **so that** Ada holder can use it to delegate their votes to me and my voting record can be tracked. + - + + - |image-CLI10| + - DRep Registration Certificate Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep registration certificate, **so that** I can submit it on a transaction and the Ada holders can delegate their votes to me. + - + + - |image-CLI11| + - DRep Retirement Certificate Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep retirement (unregistration) certificate, **so that** I can submit it on a transaction and can get my DRep deposit back. + - + + - |image-CLI12| + - DRep Metadata Hash Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate the hash of my DRep metadata, **so that** I can supply it when registering as DRep. + - + + - |image-CLI13| + - Create Update Constitution Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action that updates the constitution, **so that** it can be submitted to the chain and be voted by the governance bodies. + - + + - |image-CLI14| + - Create Update Constitutional Committee Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action that updates the Constitutional Committee, **so that** it can be submitted to the chain and be voted by the governance bodies. + - + + - |image-CLI15| + - Create Treasury Withdrawal Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to withdraw funds from the treasury, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-treasury-withdrawal``. + - + + - |image-CLI16| + - Create info governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create an info governance action, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-info``. + - + + - |image-CLI17| + - Create update protocol parameters governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to update protocol parameters, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-protocol-parameters-update``. + - + + - |image-CLI18| + - Create no-confidence governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a no-confidence governance action, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-no-confidence``. + - + + - |image-CLI19| + - Create Hard-fork initiation governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to initiate a hardfork, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-hf-init``. + - + + - |image-CLI20| + - View governance action file (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to inspect the contents of a governance action file, **so that** I can verify it is correct before submitting it in a transaction. + Command: ``cardano-cli conway governance action view``. + - + + - |image-CLI21| + - Create a governance action vote (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to create a vote for a governance action, **so that** I can include it in a transaction and submit it to the chain. + Command: ``cardano-cli conway governance vote create``. + - + + - |image-CLI22| + - View vote file (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to inspect the contents of a vote file, **so that** I can verify it is correct before submitting it in a transaction. + Command: ``cardano-cli conway governance vote view``. + - + + - |image-CLI23| + - Build a transaction with to submit proposal (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to build a transaction that includes a proposal (containing a governance action), **so that** I can later sign and submit to the chain. + Command: ``transaction build``. + - + + - |image-CLI24| + - Build transaction for proposal vote (DRep, SPO, CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to build a transaction that includes my vote on a particular governance action, **so that** I can later sign and submit to the chain. + Command: ``transaction build``. + - + + - |image-CLI25| + - Build RAW transaction for proposal vote (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to build a transaction that includes a proposal (containing a governance action), **so that** I can later sign and submit to the chain. + Command: ``transaction build-raw``. + - + + - |image-CLI26| + - Build RAW transaction for proposal vote (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to build a transaction that includes my vote on a particular governance action, **so that** I can later sign and submit to the chain. + Command: ``transaction build-raw``. + - + + - |image-CLI27| + - Create stake registration certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a conway cddl-compliant stake registration certificate. + - + + - |image-CLI28| + - Create stake deregistration certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a conway cddl-compliant stake deregistration certificate to get my deposit back. + - + + - |image-CLI29| + - Delegate vote to DRep (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to delegate my votes to a DRep (registered or default), **so that** my stake is counted when the DRep votes. + - + + - |image-CLI30| + - Delegate stake to SPO and votes to DRep with a single certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to delegate my stake to a stake pool AND my votes to a DRep (registered or default) with a single certificate. + - + + - |image-CLI31| + - Query governance state (ANY) + `→ `__ + - **As** any persona, **I want** to query the nodes for the currentGovernance state, **so that** I can inform my decisions. + - + + - |image-CLI32| + - Query committee state (CCM) + `→ `__ + - **As** a CC member, **I want** to query the Constitutional Committee state, **so that** I can find my expiration term and whether my hot key authorization certificate has been recorded on chain. + - + + - |image-CLI33| + - Query DRep state (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to query the DRep state, **so that** I can find detailed information about registered DReps. + - + + - |image-CLI34| + - Query DRep stake distribution (HOLDER) + `→ `__ + - **As** an Ada holder and DRep, **I want** to query the DRep stake distribution, **so that** I can find the weight (of the votes) of each DRep. + - + + - |image-CLI35| + - Expand query stake-address-info to show deposits and vote delegation (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to query my stake address information, **so that** I can learn to which pool and DRep I’m delegating to and the value in lovelace of my deposits for delegating and for submitting governance actions. + - + + - |image-CLI36| + - Register script based DReps. + `→ `__ + - + - + + - |image-CLI37| + - Unregister script based DReps. + `→ `__ + - + - + + - |image-CLI38| + - Script based CC GA. ``--add`` ``--remove``. + `→ `__ + - + +CIP1694 User Stories +-------------------- + +.. list-table:: + :widths: 11 26 34 + :header-rows: 1 + + - + + - Status for Story ID + - Title + - Story Overview + - + + - |image-CIP1| + - Hash value of the off-chain Constitution is recorded on-chain + `→ `__ + - **As** an Ada holder, **I want** the ledger state to record the hash of the current constitution, **so that** I can verify the authenticity of the off-chain document. + - + + - |image-CIP2| + - Node records Committee member key hashes, terms and status + `→ `__ + - **As** an Ada holder, **I want** the key hash of active and expired Committee Members and their terms to be registered on-chain, **so that** the system can count their votes. + - + + - |image-CIP3| + - Authorization Certificate + `→ `__ + - **As** a Committee Member, **I want** to submit a Cold to Hot key Authorization certificate, **so that** I can sign my votes using the hot key and keep my cold keys safely in cold storage. + - + + - |image-CIP4| + - Record cold credentials and authorization certificates on chain + `→ `__ + - **As** a committee member, **I want** node’s ledger state to accurately maintain the record of key-hashes, terms, and cold to hot key authorization maps for active and expired members, **so that** only votes from active Committee members are considered. + - + + - |image-CIP5| + - Replacing the constitutional committee via a governance action + `→ `__ + - **As** an Ada holder, **I want** to be able to submit a governance action to replace all or part of the current constitutional committee, **so that** committee members that have lost confidence of Ada holders can be removed from their duties. + - + + - |image-CIP6| + - Size of the constitutional committee + `→ `__ + - **As** an Ada holder, **I want** the size of the constitutional committee to be adjustable (a protocol parameter), **so that** I can propose a different size via a governance action. + - + + - |image-CIP7| + - Committee voting threshold (quorum) can be modified + `→ `__ + - **As** an Ada holder, **I want** that the committee threshold (the fraction of committee required to ratify a gov action) is not fixed, **so that** I can propose a different threshold via a governance action. + - + + - |image-CIP8| + - Electing an empty committee + `→ `__ + - **As** an Ada holder, **I want** to be able to elect an empty committee if the community wishes to abolish the constitutional committee entirely, **so that** governance actions don’t need the votes of a constitutional committee to be ratified. + - + + - |image-CIP9| + - Constitutional committee members have a limited term + `→ `__ + - **As** an Ada holder, **I want** each committee member to have an individual term, **so that** the system can have a rotation scheme. + - + + - |image-CIP10| + - Tracking committee member expirations + `→ `__ + - **As** an Ada holder, **I want** the system to keep track of the expiration epoch of each committee member, **so that** the information is publicly available in the ledger and can be consumed by anyone interested. + - + + - |image-CIP11| + - Automatically expire committee members that have completed their + terms + `→ `__ + - **As** an Ada holder, **I want** the system to automatically expire committee members that have reached their term, **so that** only active committee members can vote. + - + + - |image-CIP12| + - Resign as committee member + `→ `__ + - **As** a committee member, **I want** to be able to resign my responsibilities, **so that** I can stop my responsibilities with the Cardano Community while minimizing the effects on the system. + - + + - |image-CIP13| + - State of no-confidence + `→ `__ + - **As** an Ada holder, **I want** to submit a governance action to depose the current constitutional committee and put the system in a no-confidence-state, **so that** the community must elect a new constitutional committee. + - + + - |image-CIP14| + - Automatically enter a state of no-confidence + `→ `__ + - **As** an Ada holder, **I want** the system to automatically enter a state of no-confidence when the number of non-expired committee members falls below the minimal size of the committee, **so that** only update-committee governance actions can be ratified. + - + + - |image-CIP15| + - Proposal policy + `→ `__ + - **As** an Ada holder, **I want** a supplementary script to the constitution, **so that** some proposal types are automatically restricted. + - + + - |image-CIP16| + - Delegate representatives + `→ `__ + - **As** an Ada holder, **I want** stake credentials to delegate voting rights to a registered delegate representative (DRep), **so that** I can participate in the governance of the system. + - + + - |image-CIP17| + - Delegate to always abstain + `→ `__ + - **As** an Ada holder or an exchange, **I want** to delegate my stake to the predefined option ‘Abstain’, **so that** my stake is marked as not participating in governance. + - + + - |image-CIP18| + - Delegate to no-confidence + `→ `__ + - **As** an Ada holder, **I want** to delegate my stake to the predefined DRep ‘No Confidence’, **so that** my stake is counted as a ‘Yes’ vote on every ‘No Confidence’ action and a ‘No’ vote on every other action. + - + + - |image-CIP19| + - Inactive DReps + `→ `__ + - **As** an Ada holder, **I want** DReps to be considered inactive if they don’t vote for ``drepActivity``-many epochs, **so that** their delegated stake does not count towards the active voting stake, this to avoid leaving the system in a state where no governance action can pass. + - + + - |image-CIP20| + - DRep credentials + `→ `__ + - **As** a DRep, **I want** to be identified by a credential (A verification key (Ed2559) or a Native or Plutus Script), **so that** I can register and vote on governance actions. + - + + - |image-CIP21| + - DRep registration certificate + `→ `__ + - **As** a DRep, **I want** to generate a registration certificate, **so that** the system recognizes my credentials and counts my votes on governance actions. + - + + - |image-CIP22| + - Vote delegation certificate + `→ `__ + - **As** an Ada holder, **I want** to generate a vote delegation certificate, **so that** I can delegate my voting rights. + - + + - |image-CIP23| + - DRep retirement certificate + `→ `__ + - **As** a DRep, **I want** to generate a retirement certificate, **so that** the system and Ada holders (delegators) know that I’m no longer voting on governance actions and they should redelegate. + +.. |Success Badge| image:: https://img.shields.io/badge/success-green +.. |Failure Badge| image:: https://img.shields.io/badge/failure-red +.. |Uncovered Badge| image:: https://img.shields.io/badge/uncovered-grey +.. |image-CLI1| image:: https://img.shields.io/badge/CLI001-grey + :target: https://github.com/CLI001-404 +.. |image-CLI2| image:: https://img.shields.io/badge/CLI002-grey + :target: https://github.com/CLI002-404 +.. |image-CLI3| image:: https://img.shields.io/badge/CLI003-grey + :target: https://github.com/CLI003-404 +.. |image-CLI4| image:: https://img.shields.io/badge/CLI004-grey + :target: https://github.com/CLI004-404 +.. |image-CLI5| image:: https://img.shields.io/badge/CLI005-grey + :target: https://github.com/CLI005-404 +.. |image-CLI6| image:: https://img.shields.io/badge/CLI006-grey + :target: https://github.com/CLI006-404 +.. |image-CLI7| image:: https://img.shields.io/badge/CLI007-grey + :target: https://github.com/CLI007-404 +.. |image-CLI8| image:: https://img.shields.io/badge/CLI008-grey + :target: https://github.com/CLI008-404 +.. |image-CLI9| image:: https://img.shields.io/badge/CLI009-grey + :target: https://github.com/CLI009-404 +.. |image-CLI10| image:: https://img.shields.io/badge/CLI010-grey + :target: https://github.com/CLI010-404 +.. |image-CLI11| image:: https://img.shields.io/badge/CLI011-grey + :target: https://github.com/CLI011-404 +.. |image-CLI12| image:: https://img.shields.io/badge/CLI012-grey + :target: https://github.com/CLI012-404 +.. |image-CLI13| image:: https://img.shields.io/badge/CLI013-grey + :target: https://github.com/CLI013-404 +.. |image-CLI14| image:: https://img.shields.io/badge/CLI014-grey + :target: https://github.com/CLI014-404 +.. |image-CLI15| image:: https://img.shields.io/badge/CLI015-grey + :target: https://github.com/CLI015-404 +.. |image-CLI16| image:: https://img.shields.io/badge/CLI016-grey + :target: https://github.com/CLI016-404 +.. |image-CLI17| image:: https://img.shields.io/badge/CLI017-grey + :target: https://github.com/CLI017-404 +.. |image-CLI18| image:: https://img.shields.io/badge/CLI018-grey + :target: https://github.com/CLI018-404 +.. |image-CLI19| image:: https://img.shields.io/badge/CLI019-grey + :target: https://github.com/CLI019-404 +.. |image-CLI20| image:: https://img.shields.io/badge/CLI020-grey + :target: https://github.com/CLI020-404 +.. |image-CLI21| image:: https://img.shields.io/badge/CLI021-grey + :target: https://github.com/CLI021-404 +.. |image-CLI22| image:: https://img.shields.io/badge/CLI022-grey + :target: https://github.com/CLI022-404 +.. |image-CLI23| image:: https://img.shields.io/badge/CLI023-grey + :target: https://github.com/CLI023-404 +.. |image-CLI24| image:: https://img.shields.io/badge/CLI024-grey + :target: https://github.com/CLI024-404 +.. |image-CLI25| image:: https://img.shields.io/badge/CLI025-grey + :target: https://github.com/CLI025-404 +.. |image-CLI26| image:: https://img.shields.io/badge/CLI026-grey + :target: https://github.com/CLI026-404 +.. |image-CLI27| image:: https://img.shields.io/badge/CLI027-grey + :target: https://github.com/CLI027-404 +.. |image-CLI28| image:: https://img.shields.io/badge/CLI028-grey + :target: https://github.com/CLI028-404 +.. |image-CLI29| image:: https://img.shields.io/badge/CLI029-grey + :target: https://github.com/CLI029-404 +.. |image-CLI30| image:: https://img.shields.io/badge/CLI030-grey + :target: https://github.com/CLI030-404 +.. |image-CLI31| image:: https://img.shields.io/badge/CLI031-grey + :target: https://github.com/CLI031-404 +.. |image-CLI32| image:: https://img.shields.io/badge/CLI032-grey + :target: https://github.com/CLI032-404 +.. |image-CLI33| image:: https://img.shields.io/badge/CLI033-grey + :target: https://github.com/CLI033-404 +.. |image-CLI34| image:: https://img.shields.io/badge/CLI034-grey + :target: https://github.com/CLI034-404 +.. |image-CLI35| image:: https://img.shields.io/badge/CLI035-grey + :target: https://github.com/CLI035-404 +.. |image-CLI36| image:: https://img.shields.io/badge/CLI036-grey + :target: https://github.com/CLI036-404 +.. |image-CLI37| image:: https://img.shields.io/badge/CLI037-grey + :target: https://github.com/CLI037-404 +.. |image-CLI38| image:: https://img.shields.io/badge/CLI038-grey + :target: https://github.com/CLI038-404 +.. |image-CIP1| image:: https://img.shields.io/badge/CIP001-grey + :target: https://github.com/CIP001-404 +.. |image-CIP2| image:: https://img.shields.io/badge/CIP002-grey + :target: https://github.com/CIP002-404 +.. |image-CIP3| image:: https://img.shields.io/badge/CIP003-grey + :target: https://github.com/CIP003-404 +.. |image-CIP4| image:: https://img.shields.io/badge/CIP004-grey + :target: https://github.com/CIP004-404 +.. |image-CIP5| image:: https://img.shields.io/badge/CIP005-grey + :target: https://github.com/CIP005-404 +.. |image-CIP6| image:: https://img.shields.io/badge/CIP006-grey + :target: https://github.com/CIP006-404 +.. |image-CIP7| image:: https://img.shields.io/badge/CIP007-grey + :target: https://github.com/CIP007-404 +.. |image-CIP8| image:: https://img.shields.io/badge/CIP008-grey + :target: https://github.com/CIP008-404 +.. |image-CIP9| image:: https://img.shields.io/badge/CIP009-grey + :target: https://github.com/CIP009-404 +.. |image-CIP10| image:: https://img.shields.io/badge/CIP010-grey + :target: https://github.com/CIP010-404 +.. |image-CIP11| image:: https://img.shields.io/badge/CIP011-grey + :target: https://github.com/CIP011-404 +.. |image-CIP12| image:: https://img.shields.io/badge/CIP012-grey + :target: https://github.com/CIP012-404 +.. |image-CIP13| image:: https://img.shields.io/badge/CIP013-grey + :target: https://github.com/CIP013-404 +.. |image-CIP14| image:: https://img.shields.io/badge/CIP014-grey + :target: https://github.com/CIP014-404 +.. |image-CIP15| image:: https://img.shields.io/badge/CIP015-grey + :target: https://github.com/CIP015-404 +.. |image-CIP16| image:: https://img.shields.io/badge/CIP016-grey + :target: https://github.com/CIP016-404 +.. |image-CIP17| image:: https://img.shields.io/badge/CIP017-grey + :target: https://github.com/CIP017-404 +.. |image-CIP18| image:: https://img.shields.io/badge/CIP018-grey + :target: https://github.com/CIP018-404 +.. |image-CIP19| image:: https://img.shields.io/badge/CIP019-grey + :target: https://github.com/CIP019-404 +.. |image-CIP20| image:: https://img.shields.io/badge/CIP020-grey + :target: https://github.com/CIP020-404 +.. |image-CIP21| image:: https://img.shields.io/badge/CIP021-grey + :target: https://github.com/CIP021-404 +.. |image-CIP22| image:: https://img.shields.io/badge/CIP022-grey + :target: https://github.com/CIP022-404 +.. |image-CIP23| image:: https://img.shields.io/badge/CIP023-grey + :target: https://github.com/CIP023-404 diff --git a/src_docs/source/_static/css/tables.css b/src_docs/source/_static/css/tables.css new file mode 100644 index 000000000..aad824577 --- /dev/null +++ b/src_docs/source/_static/css/tables.css @@ -0,0 +1,10 @@ +/* override table width restrictions */ +.wy-table-responsive table td, .wy-table-responsive table th { + /* !important prevents the common CSS stylesheets from + overriding this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; +} + +.wy-table-responsive { + overflow: visible !important; +} diff --git a/src_docs/source/conf.py b/src_docs/source/conf.py index 2b805b6ab..55d0b8ce5 100644 --- a/src_docs/source/conf.py +++ b/src_docs/source/conf.py @@ -117,6 +117,7 @@ # or fully qualified paths (eg. https://...) html_css_files = [ "css/copyright.css", + "css/tables.css", ] # Clear tokens from the output diff --git a/src_docs/source/test_results.rst b/src_docs/source/test_results.rst index 702fc8c35..168ef1d56 100644 --- a/src_docs/source/test_results.rst +++ b/src_docs/source/test_results.rst @@ -7,3 +7,4 @@ Test Results test_results/nightly_system_tests test_results/sync_tests test_results/tag_tests + test_results/chang_user_stories diff --git a/src_docs/source/test_results/chang_user_stories.rst b/src_docs/source/test_results/chang_user_stories.rst new file mode 100644 index 000000000..47b088319 --- /dev/null +++ b/src_docs/source/test_results/chang_user_stories.rst @@ -0,0 +1,7 @@ +Chang HF User Stories +===================== + +.. toctree:: + :maxdepth: 4 + + requirements/chang_user_stories_system_tests.rst diff --git a/src_docs/source/test_results/requirements/chang_user_stories_system_tests.rst b/src_docs/source/test_results/requirements/chang_user_stories_system_tests.rst new file mode 100644 index 000000000..78310747f --- /dev/null +++ b/src_docs/source/test_results/requirements/chang_user_stories_system_tests.rst @@ -0,0 +1,539 @@ +System Tests Coverage +===================== + +The page is updated about once a week. + +Latest update: **2024-01-30**   + +**Legend:** |Success Badge| |Failure Badge| |Uncovered Badge|   + +CLI User Stories +---------------- + +.. list-table:: + :widths: 11 26 34 + :header-rows: 1 + + - + + - Status for Story ID + - Title + - Story Overview + - + + - |image-CLI1| + - Obtain constitution hash for verification (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to obtain the hash of the off-chain text of a Constitution, **so that** I can compare it against the hash registered on-chain to verify its authenticity. + - + + - |image-CLI2| + - Generate hash of the off-chain constitution (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to generate the hash of the off-chain text for a proposed Constitution, **so that** the hash can be utilized in a governance action. + - + + - |image-CLI3| + - Generate Committee member cold key pair (CCM) + `→ `__ + - **As** a potential Constitutional Committee member, **I want** to generate COLD key pair, **so that** I can be proposed for the Committee in a Governance action. + - + + - |image-CLI4| + - Generate committee member hot key pair (CCM) + `→ `__ + - **As** potential Constitutional Committee member, **I want** to generate HOT key pair, **so that** I can authorise the Hot key to sign votes on behalf of the Cold key. + - + + - |image-CLI5| + - Authorization certificate (CCM) + `→ `__ + - **As** a Constitutional Committee member, **I want** to issue a authorization certificate from my cold key to a hot key, **so that** I can sign my votes using the hot key and keep the cold key in cold storage and can authorise a new hot key in case the original one is compromised. + - + + - |image-CLI6| + - Generate committee member key hash (CCM) + `→ `__ + - **As** a potential Constitutional Committee member, **I want** to generate the key hashes for my cold and hot keys, **so that** they can be used by third parties to propose me as a new Constitutional Committee member and for identification purposes once I’ve been elected as Constitutional Committee member. + - + + - |image-CLI7| + - Committee member resignation certificate (CCM) + `→ `__ + - **As** a Constitutional Committee member, **I want** to be able to generate a resignation certificate, **so that** I can submit it to the chain on a transaction to signal to the Ada holders that I’m resigning from my duties as CC member. + - + + - |image-CLI8| + - Generate DRep keys (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to generate Ed25519 keys, **so that** I can register as a DRep. + - + + - |image-CLI9| + - Generate DRep ID (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep Id, **so that** Ada holder can use it to delegate their votes to me and my voting record can be tracked. + - + + - |image-CLI10| + - DRep Registration Certificate Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep registration certificate, **so that** I can submit it on a transaction and the Ada holders can delegate their votes to me. + - + + - |image-CLI11| + - DRep Retirement Certificate Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate a DRep retirement (unregistration) certificate, **so that** I can submit it on a transaction and can get my DRep deposit back. + - + + - |image-CLI12| + - DRep Metadata Hash Generation (DRep) + `→ `__ + - **As** a DRep, **I want** to generate the hash of my DRep metadata, **so that** I can supply it when registering as DRep. + - + + - |image-CLI13| + - Create Update Constitution Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action that updates the constitution, **so that** it can be submitted to the chain and be voted by the governance bodies. + - + + - |image-CLI14| + - Create Update Constitutional Committee Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action that updates the Constitutional Committee, **so that** it can be submitted to the chain and be voted by the governance bodies. + - + + - |image-CLI15| + - Create Treasury Withdrawal Governance Action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to withdraw funds from the treasury, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-treasury-withdrawal``. + - + + - |image-CLI16| + - Create info governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create an info governance action, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-info``. + - + + - |image-CLI17| + - Create update protocol parameters governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to update protocol parameters, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-protocol-parameters-update``. + - + + - |image-CLI18| + - Create no-confidence governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a no-confidence governance action, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-no-confidence``. + - + + - |image-CLI19| + - Create Hard-fork initiation governance action (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a governance action to initiate a hardfork, **so that** it can be submitted to the chain and be voted by the governance bodies. + Command: ``cardano-cli conway governance action create-hf-init``. + - + + - |image-CLI20| + - View governance action file (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to inspect the contents of a governance action file, **so that** I can verify it is correct before submitting it in a transaction. + Command: ``cardano-cli conway governance action view``. + - + + - |image-CLI21| + - Create a governance action vote (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to create a vote for a governance action, **so that** I can include it in a transaction and submit it to the chain. + Command: ``cardano-cli conway governance vote create``. + - + + - |image-CLI22| + - View vote file (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to inspect the contents of a vote file, **so that** I can verify it is correct before submitting it in a transaction. + Command: ``cardano-cli conway governance vote view``. + - + + - |image-CLI23| + - Build a transaction with to submit proposal (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to build a transaction that includes a proposal (containing a governance action), **so that** I can later sign and submit to the chain. + Command: ``transaction build``. + - + + - |image-CLI24| + - Build transaction for proposal vote (DRep, SPO, CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to build a transaction that includes my vote on a particular governance action, **so that** I can later sign and submit to the chain. + Command: ``transaction build``. + - + + - |image-CLI25| + - Build RAW transaction for proposal vote (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to build a transaction that includes a proposal (containing a governance action), **so that** I can later sign and submit to the chain. + Command: ``transaction build-raw``. + - + + - |image-CLI26| + - Build RAW transaction for proposal vote (DRep/SPO/CCM) + `→ `__ + - **As** a DRep, SPO or CC member, **I want** to build a transaction that includes my vote on a particular governance action, **so that** I can later sign and submit to the chain. + Command: ``transaction build-raw``. + - + + - |image-CLI27| + - Create stake registration certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a conway cddl-compliant stake registration certificate. + - + + - |image-CLI28| + - Create stake deregistration certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to create a conway cddl-compliant stake deregistration certificate to get my deposit back. + - + + - |image-CLI29| + - Delegate vote to DRep (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to delegate my votes to a DRep (registered or default), **so that** my stake is counted when the DRep votes. + - + + - |image-CLI30| + - Delegate stake to SPO and votes to DRep with a single certificate (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to delegate my stake to a stake pool AND my votes to a DRep (registered or default) with a single certificate. + - + + - |image-CLI31| + - Query governance state (ANY) + `→ `__ + - **As** any persona, **I want** to query the nodes for the currentGovernance state, **so that** I can inform my decisions. + - + + - |image-CLI32| + - Query committee state (CCM) + `→ `__ + - **As** a CC member, **I want** to query the Constitutional Committee state, **so that** I can find my expiration term and whether my hot key authorization certificate has been recorded on chain. + - + + - |image-CLI33| + - Query DRep state (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to query the DRep state, **so that** I can find detailed information about registered DReps. + - + + - |image-CLI34| + - Query DRep stake distribution (HOLDER) + `→ `__ + - **As** an Ada holder and DRep, **I want** to query the DRep stake distribution, **so that** I can find the weight (of the votes) of each DRep. + - + + - |image-CLI35| + - Expand query stake-address-info to show deposits and vote delegation (HOLDER) + `→ `__ + - **As** an Ada holder, **I want** to query my stake address information, **so that** I can learn to which pool and DRep I’m delegating to and the value in lovelace of my deposits for delegating and for submitting governance actions. + - + + - |image-CLI36| + - Register script based DReps. + `→ `__ + - + - + + - |image-CLI37| + - Unregister script based DReps. + `→ `__ + - + - + + - |image-CLI38| + - Script based CC GA. ``--add`` ``--remove``. + `→ `__ + - + +CIP1694 User Stories +-------------------- + +.. list-table:: + :widths: 11 26 34 + :header-rows: 1 + + - + + - Status for Story ID + - Title + - Story Overview + - + + - |image-CIP1| + - Hash value of the off-chain Constitution is recorded on-chain + `→ `__ + - **As** an Ada holder, **I want** the ledger state to record the hash of the current constitution, **so that** I can verify the authenticity of the off-chain document. + - + + - |image-CIP2| + - Node records Committee member key hashes, terms and status + `→ `__ + - **As** an Ada holder, **I want** the key hash of active and expired Committee Members and their terms to be registered on-chain, **so that** the system can count their votes. + - + + - |image-CIP3| + - Authorization Certificate + `→ `__ + - **As** a Committee Member, **I want** to submit a Cold to Hot key Authorization certificate, **so that** I can sign my votes using the hot key and keep my cold keys safely in cold storage. + - + + - |image-CIP4| + - Record cold credentials and authorization certificates on chain + `→ `__ + - **As** a committee member, **I want** node’s ledger state to accurately maintain the record of key-hashes, terms, and cold to hot key authorization maps for active and expired members, **so that** only votes from active Committee members are considered. + - + + - |image-CIP5| + - Replacing the constitutional committee via a governance action + `→ `__ + - **As** an Ada holder, **I want** to be able to submit a governance action to replace all or part of the current constitutional committee, **so that** committee members that have lost confidence of Ada holders can be removed from their duties. + - + + - |image-CIP6| + - Size of the constitutional committee + `→ `__ + - **As** an Ada holder, **I want** the size of the constitutional committee to be adjustable (a protocol parameter), **so that** I can propose a different size via a governance action. + - + + - |image-CIP7| + - Committee voting threshold (quorum) can be modified + `→ `__ + - **As** an Ada holder, **I want** that the committee threshold (the fraction of committee required to ratify a gov action) is not fixed, **so that** I can propose a different threshold via a governance action. + - + + - |image-CIP8| + - Electing an empty committee + `→ `__ + - **As** an Ada holder, **I want** to be able to elect an empty committee if the community wishes to abolish the constitutional committee entirely, **so that** governance actions don’t need the votes of a constitutional committee to be ratified. + - + + - |image-CIP9| + - Constitutional committee members have a limited term + `→ `__ + - **As** an Ada holder, **I want** each committee member to have an individual term, **so that** the system can have a rotation scheme. + - + + - |image-CIP10| + - Tracking committee member expirations + `→ `__ + - **As** an Ada holder, **I want** the system to keep track of the expiration epoch of each committee member, **so that** the information is publicly available in the ledger and can be consumed by anyone interested. + - + + - |image-CIP11| + - Automatically expire committee members that have completed their + terms + `→ `__ + - **As** an Ada holder, **I want** the system to automatically expire committee members that have reached their term, **so that** only active committee members can vote. + - + + - |image-CIP12| + - Resign as committee member + `→ `__ + - **As** a committee member, **I want** to be able to resign my responsibilities, **so that** I can stop my responsibilities with the Cardano Community while minimizing the effects on the system. + - + + - |image-CIP13| + - State of no-confidence + `→ `__ + - **As** an Ada holder, **I want** to submit a governance action to depose the current constitutional committee and put the system in a no-confidence-state, **so that** the community must elect a new constitutional committee. + - + + - |image-CIP14| + - Automatically enter a state of no-confidence + `→ `__ + - **As** an Ada holder, **I want** the system to automatically enter a state of no-confidence when the number of non-expired committee members falls below the minimal size of the committee, **so that** only update-committee governance actions can be ratified. + - + + - |image-CIP15| + - Proposal policy + `→ `__ + - **As** an Ada holder, **I want** a supplementary script to the constitution, **so that** some proposal types are automatically restricted. + - + + - |image-CIP16| + - Delegate representatives + `→ `__ + - **As** an Ada holder, **I want** stake credentials to delegate voting rights to a registered delegate representative (DRep), **so that** I can participate in the governance of the system. + - + + - |image-CIP17| + - Delegate to always abstain + `→ `__ + - **As** an Ada holder or an exchange, **I want** to delegate my stake to the predefined option ‘Abstain’, **so that** my stake is marked as not participating in governance. + - + + - |image-CIP18| + - Delegate to no-confidence + `→ `__ + - **As** an Ada holder, **I want** to delegate my stake to the predefined DRep ‘No Confidence’, **so that** my stake is counted as a ‘Yes’ vote on every ‘No Confidence’ action and a ‘No’ vote on every other action. + - + + - |image-CIP19| + - Inactive DReps + `→ `__ + - **As** an Ada holder, **I want** DReps to be considered inactive if they don’t vote for ``drepActivity``-many epochs, **so that** their delegated stake does not count towards the active voting stake, this to avoid leaving the system in a state where no governance action can pass. + - + + - |image-CIP20| + - DRep credentials + `→ `__ + - **As** a DRep, **I want** to be identified by a credential (A verification key (Ed2559) or a Native or Plutus Script), **so that** I can register and vote on governance actions. + - + + - |image-CIP21| + - DRep registration certificate + `→ `__ + - **As** a DRep, **I want** to generate a registration certificate, **so that** the system recognizes my credentials and counts my votes on governance actions. + - + + - |image-CIP22| + - Vote delegation certificate + `→ `__ + - **As** an Ada holder, **I want** to generate a vote delegation certificate, **so that** I can delegate my voting rights. + - + + - |image-CIP23| + - DRep retirement certificate + `→ `__ + - **As** a DRep, **I want** to generate a retirement certificate, **so that** the system and Ada holders (delegators) know that I’m no longer voting on governance actions and they should redelegate. + +.. |Success Badge| image:: https://img.shields.io/badge/success-green +.. |Failure Badge| image:: https://img.shields.io/badge/failure-red +.. |Uncovered Badge| image:: https://img.shields.io/badge/uncovered-grey +.. |image-CLI1| image:: https://img.shields.io/badge/CLI001-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L416 +.. |image-CLI2| image:: https://img.shields.io/badge/CLI002-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L217 +.. |image-CLI3| image:: https://img.shields.io/badge/CLI003-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L119 +.. |image-CLI4| image:: https://img.shields.io/badge/CLI004-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L119 +.. |image-CLI5| image:: https://img.shields.io/badge/CLI005-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L119 +.. |image-CLI6| image:: https://img.shields.io/badge/CLI006-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L119 +.. |image-CLI7| image:: https://img.shields.io/badge/CLI007-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L162 +.. |image-CLI8| image:: https://img.shields.io/badge/CLI008-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L264 +.. |image-CLI9| image:: https://img.shields.io/badge/CLI009-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L264 +.. |image-CLI10| image:: https://img.shields.io/badge/CLI010-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L264 +.. |image-CLI11| image:: https://img.shields.io/badge/CLI011-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L316 +.. |image-CLI12| image:: https://img.shields.io/badge/CLI012-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L259 +.. |image-CLI13| image:: https://img.shields.io/badge/CLI013-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L228 +.. |image-CLI14| image:: https://img.shields.io/badge/CLI014-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L585 +.. |image-CLI15| image:: https://img.shields.io/badge/CLI015-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1433 +.. |image-CLI16| image:: https://img.shields.io/badge/CLI016-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1990 +.. |image-CLI17| image:: https://img.shields.io/badge/CLI017-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1166 +.. |image-CLI18| image:: https://img.shields.io/badge/CLI018-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1726 +.. |image-CLI19| image:: https://img.shields.io/badge/CLI019-grey + :target: https://github.com/CLI019-404 +.. |image-CLI20| image:: https://img.shields.io/badge/CLI020-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L437 +.. |image-CLI21| image:: https://img.shields.io/badge/CLI021-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2057 +.. |image-CLI22| image:: https://img.shields.io/badge/CLI022-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2143 +.. |image-CLI23| image:: https://img.shields.io/badge/CLI023-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2010 +.. |image-CLI24| image:: https://img.shields.io/badge/CLI024-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2109 +.. |image-CLI25| image:: https://img.shields.io/badge/CLI025-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2229 +.. |image-CLI26| image:: https://img.shields.io/badge/CLI026-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2329 +.. |image-CLI27| image:: https://img.shields.io/badge/CLI027-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L554 +.. |image-CLI28| image:: https://img.shields.io/badge/CLI028-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L602 +.. |image-CLI29| image:: https://img.shields.io/badge/CLI029-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L563 +.. |image-CLI30| image:: https://img.shields.io/badge/CLI030-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L751 +.. |image-CLI31| image:: https://img.shields.io/badge/CLI031-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L2031 +.. |image-CLI32| image:: https://img.shields.io/badge/CLI032-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L148 +.. |image-CLI33| image:: https://img.shields.io/badge/CLI033-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L297 +.. |image-CLI34| image:: https://img.shields.io/badge/CLI034-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L675 +.. |image-CLI35| image:: https://img.shields.io/badge/CLI035-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L642 +.. |image-CLI36| image:: https://img.shields.io/badge/CLI036-grey + :target: https://github.com/CLI036-404 +.. |image-CLI37| image:: https://img.shields.io/badge/CLI037-grey + :target: https://github.com/CLI037-404 +.. |image-CLI38| image:: https://img.shields.io/badge/CLI038-grey + :target: https://github.com/CLI038-404 +.. |image-CIP1| image:: https://img.shields.io/badge/CIP001-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L416 +.. |image-CIP2| image:: https://img.shields.io/badge/CIP002-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L148 +.. |image-CIP3| image:: https://img.shields.io/badge/CIP003-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L119 +.. |image-CIP4| image:: https://img.shields.io/badge/CIP004-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L148 +.. |image-CIP5| image:: https://img.shields.io/badge/CIP005-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L660 +.. |image-CIP6| image:: https://img.shields.io/badge/CIP006-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1166 +.. |image-CIP7| image:: https://img.shields.io/badge/CIP007-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L251 +.. |image-CIP8| image:: https://img.shields.io/badge/CIP008-grey + :target: https://github.com/CIP008-404 +.. |image-CIP9| image:: https://img.shields.io/badge/CIP009-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L952 +.. |image-CIP10| image:: https://img.shields.io/badge/CIP010-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L952 +.. |image-CIP11| image:: https://img.shields.io/badge/CIP011-grey + :target: https://github.com/CIP011-404 +.. |image-CIP12| image:: https://img.shields.io/badge/CIP012-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_committee.py#L162 +.. |image-CIP13| image:: https://img.shields.io/badge/CIP013-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_voting.py#L1726 +.. |image-CIP14| image:: https://img.shields.io/badge/CIP014-grey + :target: https://github.com/CIP014-404 +.. |image-CIP15| image:: https://img.shields.io/badge/CIP015-grey + :target: https://github.com/CIP015-404 +.. |image-CIP16| image:: https://img.shields.io/badge/CIP016-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L551 +.. |image-CIP17| image:: https://img.shields.io/badge/CIP017-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L551 +.. |image-CIP18| image:: https://img.shields.io/badge/CIP018-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L551 +.. |image-CIP19| image:: https://img.shields.io/badge/CIP019-grey + :target: https://github.com/CIP019-404 +.. |image-CIP20| image:: https://img.shields.io/badge/CIP020-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L669 +.. |image-CIP21| image:: https://img.shields.io/badge/CIP021-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L264 +.. |image-CIP22| image:: https://img.shields.io/badge/CIP022-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L563 +.. |image-CIP23| image:: https://img.shields.io/badge/CIP023-green + :target: https://github.com/IntersectMBO/cardano-node-tests/blob/7f8be0b70dc78b28ddf8d98aa7906b2a1687d4eb/cardano_node_tests/tests/tests_conway/test_drep.py#L316