From fd52842a54ef0a73ebf99a5bf7ee9ad4abf5a393 Mon Sep 17 00:00:00 2001 From: Eric Young Date: Wed, 2 Sep 2020 11:34:28 +0100 Subject: [PATCH 1/9] Add analytical quality assurance plan, and assumptions/caveats log Added to Sphinx documentation. Also updated all other Sphinx files to refer to these new files. --- .../docs/aqa/README.md | 12 ++++ .../docs/aqa/aqa_plan.md | 8 +++ .../docs/aqa/assumptions_caveats.md | 58 +++++++++++++++++++ {{ cookiecutter.repo_name }}/docs/index.md | 1 + .../docs/structure/README.md | 6 ++ 5 files changed, 85 insertions(+) create mode 100644 {{ cookiecutter.repo_name }}/docs/aqa/README.md create mode 100644 {{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md create mode 100644 {{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/README.md b/{{ cookiecutter.repo_name }}/docs/aqa/README.md new file mode 100644 index 0000000..67eaa7e --- /dev/null +++ b/{{ cookiecutter.repo_name }}/docs/aqa/README.md @@ -0,0 +1,12 @@ +# Analytical quality assurance + +These pages summarise analytical quality assurance (AQA) required for this project: + +```eval_rst +.. toctree:: + :maxdepth: 2 + + aqa_plan.md + assumptions_caveats.md + +``` diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md b/{{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md new file mode 100644 index 0000000..4f833e1 --- /dev/null +++ b/{{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md @@ -0,0 +1,8 @@ +# Analytical quality assurance plan + +This analytical quality assurance (AQA) plan outlines our implementation of the [Aqua Book]( +https://www.gov.uk/government/publications/the-aqua-book-guidance-on-producing-quality-analysis-for-government) for +this project. + +This is a **living** document, and should be updated and/or modified as necessary, e.g. if new tasks not listed here +become relevant to project success, please add them to this plan. diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md b/{{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md new file mode 100644 index 0000000..270559d --- /dev/null +++ b/{{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md @@ -0,0 +1,58 @@ +# Assumptions and caveats Log + +This log contains a list of assumptions and caveats used in this analysis. + + +```eval_rst +.. contents:: + :local: + :depth: 1 +``` + +## Definitions + +Assumptions are RAG-rated according to the following definitions for quality and impact: + + +```eval_rst ++-------+------------------------------------------------------+-------------------------------------------------------+ +| RAG | Assumption quality | Assumption impact | ++=======+======================================================+=======================================================+ +| GREEN | Reliable assumption, well understood and/or | Marginal assumptions; their changes have no or | +| | documented; anything up to a validated & recent set | limited impact on the outputs. | +| | of actual data. | | ++-------+------------------------------------------------------+-------------------------------------------------------+ +| AMBER | Some evidence to support the assumption; may vary | Assumptions with a relevant, even if not critical, | +| | from a source with poor methodology to a good source | impact on the outputs. | +| | that is a few years old. | | ++-------+------------------------------------------------------+-------------------------------------------------------+ +| RED | Little evidence to support the assumption; may vary | Core assumptions of the analysis; the output would be | +| | from an opinion to a limited data source with poor | drastically affected by their change. | +| | methodology. | | ++-------+------------------------------------------------------+-------------------------------------------------------+ +``` + +## Assumptions and caveats + +The log contains the following assumptions and caveats: + + +```eval_rst +.. contents:: + :local: + :depth: 1 +``` + +### A1: + +* **Quality**: Insert RAG rating here +* **Impact**: Insert RAG rating here + +Add plain English description here. + +### A2: + +* **Quality**: Insert RAG rating here +* **Impact**: Insert RAG rating here + +Add plain English description here. diff --git a/{{ cookiecutter.repo_name }}/docs/index.md b/{{ cookiecutter.repo_name }}/docs/index.md index c2c45c1..8c9bcd6 100644 --- a/{{ cookiecutter.repo_name }}/docs/index.md +++ b/{{ cookiecutter.repo_name }}/docs/index.md @@ -6,6 +6,7 @@ Here is the documentation for the {{ cookiecutter.project_name }} project. .. toctree:: :maxdepth: 2 + aqa/README.md structure/README.md ``` diff --git a/{{ cookiecutter.repo_name }}/docs/structure/README.md b/{{ cookiecutter.repo_name }}/docs/structure/README.md index 8991091..ea3775d 100644 --- a/{{ cookiecutter.repo_name }}/docs/structure/README.md +++ b/{{ cookiecutter.repo_name }}/docs/structure/README.md @@ -51,6 +51,12 @@ make docs For further information about writing Sphinx documentation, see the `README.md` file in the `docs` folder. +#### Analytical quality assurance (AQA) + +All analytical quality assurance (AQA) documents can be found in the `docs/aqa` folder. These files document how this +project meets HM Government guidance on producing quality analysis, as described in the +[Aqua book](https://www.gov.uk/government/publications/the-aqua-book-guidance-on-producing-quality-analysis-for-government). + ### `notebooks` folder All Jupyter notebooks should be stored in this folder. The [`.envrc`](#envrc) file should automatically add the entire From e4a32ef8e4353a74499ed50f7e4409f74858bfaf Mon Sep 17 00:00:00 2001 From: Eric Young Date: Wed, 2 Sep 2020 13:54:15 +0100 Subject: [PATCH 2/9] Refactor the create `.secrets` file into a function Better readability for future post-cookiecutter generation hooks. --- hooks/post_gen_project.py | 61 ++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 49fa702..afb98d0 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,27 +1,42 @@ from textwrap import dedent -# Get the user-defined option around whether or not they would like to create a secrets file -require_secrets = "{{ cookiecutter.create_secrets_file }}" - -# Check if `require_secrets` is 'Yes' -if require_secrets == "Yes": - - # Define a header for the `.secrets file` - secrets_file = """ - # Secrets go here, and can be read in by Python using `os.environ.get`: - # - # -------------------------------------------------------- - # import os - # - # EXAMPLE_SECRET = os.environ.get("EXAMPLE_SECRET") - # -------------------------------------------------------- - # - # This file is NOT version-controlled! - - # Google Cloud authentication credentials - export GOOGLE_APPLICATION_CREDENTIALS="" + +def create_secrets_file(user_option: str) -> None: + """Create a .secrets file depending on a user option. + + Args: + user_option (str): User option. + + Returns: + A .secrets file created in the top-level if user_option is 'Yes', otherwise nothing. + """ - # Write the `.secrets` file out - with open(".secrets", "w") as f: - f.write(dedent(secrets_file).lstrip()) + # Check if `user_option` is 'Yes' + if user_option == "Yes": + + # Define a header for the `.secrets file` + secrets_file = """ + # Secrets go here, and can be read in by Python using `os.environ.get`: + # + # -------------------------------------------------------- + # import os + # + # EXAMPLE_SECRET = os.environ.get("EXAMPLE_SECRET") + # -------------------------------------------------------- + # + # This file is NOT version-controlled! + + # Google Cloud authentication credentials + export GOOGLE_APPLICATION_CREDENTIALS="" + """ + + # Write the `.secrets` file out + with open(".secrets", "w") as f: + f.write(dedent(secrets_file).lstrip()) + + +if __name__ == "__main__": + + # Create a .secrets file, if requested + create_secrets_file("{{ cookiecutter.create_secrets_file }}") From a2ffc53532b3dc4fa241da64a3cf05cbee6a1533 Mon Sep 17 00:00:00 2001 From: Eric Young Date: Wed, 2 Sep 2020 13:55:57 +0100 Subject: [PATCH 3/9] Enable options for analytical quality assurance framework Add an option to select a specific HM Government department AQA framework on cookiecutter build. Add a post-cookiecutter hook to create the selected framework from a folder of templates in the correct location. --- cookiecutter.json | 3 +- hooks/post_gen_project.py | 35 +++++++++++++++++++ .../{aqa => aqa_frameworks/GDS}/README.md | 0 .../{aqa => aqa_frameworks/GDS}/aqa_plan.md | 0 .../GDS}/assumptions_caveats.md | 0 5 files changed, 37 insertions(+), 1 deletion(-) rename {{ cookiecutter.repo_name }}/docs/{aqa => aqa_frameworks/GDS}/README.md (100%) rename {{ cookiecutter.repo_name }}/docs/{aqa => aqa_frameworks/GDS}/aqa_plan.md (100%) rename {{ cookiecutter.repo_name }}/docs/{aqa => aqa_frameworks/GDS}/assumptions_caveats.md (100%) diff --git a/cookiecutter.json b/cookiecutter.json index 8a5eeef..eb4922b 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -4,5 +4,6 @@ "author_name": "Your Name/Organisation", "overview": "Brief overview of your project.", "project_version": "0.0.1", - "create_secrets_file": ["No", "Yes"] + "create_secrets_file": ["No", "Yes"], + "departmental_aqa_framework": ["GDS"] } \ No newline at end of file diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index afb98d0..add6c30 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,4 +1,10 @@ +from shutil import rmtree from textwrap import dedent +import os + +# Define the folder path to the 'docs/aqa_frameworks' folder, and the future `docs/aqa` folder +PATH_DOCS_AQA_FRAMEWORKS = os.path.join("docs", "aqa_frameworks") +PATH_DOCS_AQA = os.path.join("docs", "aqa") def create_secrets_file(user_option: str) -> None: @@ -36,7 +42,36 @@ def create_secrets_file(user_option: str) -> None: f.write(dedent(secrets_file).lstrip()) +def select_dept_aqa_framework(user_option: str, default_option: str = "GDS") -> None: + """Create analytical quality assurance (AQA) documents for a specific HM Government department. + + Args: + user_option (str): User option that defines a HM Government departmental AQA framework to use + default_option (str): Default: GDS. Default option if user_option is not an existing framework. + + Returns: + A new folder in docs/aqa containing the selected HM Government departmental AQA framework. + + """ + + # Get all the directories in `PATH_DOCS_AQA_FRAMEWORKS` + all_folders = [d for d in os.listdir(PATH_DOCS_AQA_FRAMEWORKS) if os.path.isdir(d)] + + # Select the correct folder; use `default_option` if `user_option` is not a valid sub-folder in `all_folders` + selected_folder = user_option if user_option in all_folders else default_option + + # Copy the relevant HM Government departmental AQA framework to the `docs/aqa` folder, using `default_option` if + # `user_option` is not a valid sub-folder in `PATH_DOCS_AQA_FRAMEWORKS` + os.rename(os.path.join(PATH_DOCS_AQA_FRAMEWORKS, selected_folder), PATH_DOCS_AQA) + + # Remove all framework folders now we have the correct AQA framework + rmtree(PATH_DOCS_AQA_FRAMEWORKS) + + if __name__ == "__main__": # Create a .secrets file, if requested create_secrets_file("{{ cookiecutter.create_secrets_file }}") + + # Select the appropriate AQA framework + select_dept_aqa_framework("{{ cookiecutter.departmental_aqa_framework }}") diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/README.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/README.md similarity index 100% rename from {{ cookiecutter.repo_name }}/docs/aqa/README.md rename to {{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/README.md diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md similarity index 100% rename from {{ cookiecutter.repo_name }}/docs/aqa/aqa_plan.md rename to {{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md diff --git a/{{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md similarity index 100% rename from {{ cookiecutter.repo_name }}/docs/aqa/assumptions_caveats.md rename to {{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md From e1be7dbfaf4054f84322ec6e9a43f1a4a6bb9e6c Mon Sep 17 00:00:00 2001 From: Eric Young Date: Wed, 2 Sep 2020 16:09:30 +0100 Subject: [PATCH 4/9] Add pull/merge request template selection functionality Selection dependent on repository hosting platform, e.g. GitHub or GitLab. --- cookiecutter.json | 3 +- hooks/post_gen_project.py | 45 +++++++++++++++++++ .../docs/pull_merge_request_templates/GDS.md | 32 +++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 {{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md diff --git a/cookiecutter.json b/cookiecutter.json index eb4922b..8d4fa8a 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -5,5 +5,6 @@ "overview": "Brief overview of your project.", "project_version": "0.0.1", "create_secrets_file": ["No", "Yes"], - "departmental_aqa_framework": ["GDS"] + "departmental_aqa_framework": ["GDS"], + "repository_hosting_platform": ["GitHub", "GitLab"] } \ No newline at end of file diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index add6c30..656c4a7 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -6,6 +6,16 @@ PATH_DOCS_AQA_FRAMEWORKS = os.path.join("docs", "aqa_frameworks") PATH_DOCS_AQA = os.path.join("docs", "aqa") +# Define the folder path to the `docs/pull_merge_request_templates` folder +PATH_PR_MR_DEPT_TEMPLATES = os.path.join("docs", "pull_merge_request_templates") + +# Define the folder path where pull/merge requests should exist as values in a dictionary, where the keys are the +# remote hosts +PATH_PR_MR_TEMPLATE = { + "GitHub": [os.path.join(".github"), "pull_request_template.md"], + "GitLab": [os.path.join(".gitlab", "merge_request_templates"), "{{ cookiecutter.project_name }}.md"] +} + def create_secrets_file(user_option: str) -> None: """Create a .secrets file depending on a user option. @@ -68,6 +78,37 @@ def select_dept_aqa_framework(user_option: str, default_option: str = "GDS") -> rmtree(PATH_DOCS_AQA_FRAMEWORKS) +def select_pull_merge_request_template(user_option: str, repo_host: str, default_option: str = "GDS") -> None: + """Select a pull/merge request template depending on HM Government department, and repository remote host. + + Args: + user_option (str): User option that defines a HM Government departmental pull/merge request template to use. + repo_host (str): Repository hosting name. + default_option (str): Default: GDS. Default option if user_option is not an existing pull/merge request + template. + + Returns: + A pull/merge request template in the correct location for the selected repo_host. + + """ + + # Get all Markdown files in `PATH_PR_MR_DEPT_TEMPLATES` + md_files = [os.path.splitext(f)[0] for f in os.listdir(PATH_PR_MR_DEPT_TEMPLATES) if f.endswith(".md")] + + # Determine the selected file; fallback to `default_option` if `user_option` is not in `md_files` + selected_md_file = f"{user_option if user_option in md_files else default_option}.md" + + # Create a directory for the new location + if not os.path.isdir(PATH_PR_MR_TEMPLATE[repo_host][0]): + os.makedirs(PATH_PR_MR_TEMPLATE[repo_host][0], exist_ok=True) + + # Move the `selected_md_file` to the correct location + os.rename(os.path.join(PATH_PR_MR_DEPT_TEMPLATES, selected_md_file), os.path.join(*PATH_PR_MR_TEMPLATE[repo_host])) + + # Remove all pull/merge request templates now that we have the correct one + rmtree(PATH_PR_MR_DEPT_TEMPLATES) + + if __name__ == "__main__": # Create a .secrets file, if requested @@ -75,3 +116,7 @@ def select_dept_aqa_framework(user_option: str, default_option: str = "GDS") -> # Select the appropriate AQA framework select_dept_aqa_framework("{{ cookiecutter.departmental_aqa_framework }}") + + # Select the appropriate pull/merge request template + select_pull_merge_request_template("{{ cookiecutter.departmental_aqa_framework }}", + "{{ cookiecutter.repository_hosting_platform }}") diff --git a/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md new file mode 100644 index 0000000..3b4e53f --- /dev/null +++ b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md @@ -0,0 +1,32 @@ +# Summary + +Add your summary here - keep it brief, to the point, and in plain English. + +# Checklists + + + +### General checks + +- [ ] Code runs +- [ ] Developments are **secure** and **ethical** +- [ ] You have made proportionate checks that the code works correctly +- [ ] Test suite passes +- [ ] Assumptions, and caveats log updated (see `docs/aqa/assumptions_caveats.md`), if necessary +- [ ] [Minimum usable documentation](http://agilemodeling.com/essays/documentLate.htm) written in the `docs` folder + +### Project-specific checks + +> These are additional checks determined necessary according to the analytical quality assurance plan +(see `docs/aqa/aqa_plan.md`). + +- [ ] Check 1 +- [ ] Check 2 +- [ ] Check 3 From d90dea870169dfeeb3c0fe3892bbcbfee80a0053 Mon Sep 17 00:00:00 2001 From: Eric Young Date: Thu, 24 Sep 2020 11:13:48 +0100 Subject: [PATCH 5/9] Add additional Aqua book resources Following on from PR #6 comments (https://github.com/ukgovdatascience/govcookiecutter/pull/6#discussion_r493672629). Also corrected missing punctuation in one of the docstrings. --- hooks/post_gen_project.py | 2 +- .../docs/aqa_frameworks/GDS/aqa_plan.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 656c4a7..7256d9a 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -56,7 +56,7 @@ def select_dept_aqa_framework(user_option: str, default_option: str = "GDS") -> """Create analytical quality assurance (AQA) documents for a specific HM Government department. Args: - user_option (str): User option that defines a HM Government departmental AQA framework to use + user_option (str): User option that defines a HM Government departmental AQA framework to use. default_option (str): Default: GDS. Default option if user_option is not an existing framework. Returns: diff --git a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md index 4f833e1..faa9bc8 100644 --- a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md +++ b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/aqa_plan.md @@ -2,7 +2,8 @@ This analytical quality assurance (AQA) plan outlines our implementation of the [Aqua Book]( https://www.gov.uk/government/publications/the-aqua-book-guidance-on-producing-quality-analysis-for-government) for -this project. +this project. Further resources related to the Aqua Book can be found +[here](https://www.gov.uk/government/collections/aqua-book-resources). This is a **living** document, and should be updated and/or modified as necessary, e.g. if new tasks not listed here become relevant to project success, please add them to this plan. From 64ae3ebffb164922ff0e70fdab88fdda40cef30c Mon Sep 17 00:00:00 2001 From: Eric Young Date: Thu, 24 Sep 2020 11:33:34 +0100 Subject: [PATCH 6/9] Expand out abbreviations in Assumptions and Caveats log Also adding placeholder text for assumption titles Clarifying per PR #6 comments (https://github.com/ukgovdatascience/govcookiecutter/pull/6#discussion_r493674040). --- .../docs/aqa_frameworks/GDS/assumptions_caveats.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md index 270559d..f440674 100644 --- a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md +++ b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md @@ -43,14 +43,14 @@ The log contains the following assumptions and caveats: :depth: 1 ``` -### A1: +### Assumption 1: Insert plain English title here * **Quality**: Insert RAG rating here * **Impact**: Insert RAG rating here Add plain English description here. -### A2: +### Assumption 2: Insert plain English title here * **Quality**: Insert RAG rating here * **Impact**: Insert RAG rating here From 8ce5ba7b83e362a4b337c6468f2a77a5a7176d71 Mon Sep 17 00:00:00 2001 From: Eric Young Date: Thu, 24 Sep 2020 13:56:13 +0100 Subject: [PATCH 7/9] Add reference to the Data Ethics Framework Per PR #6 comments (https://github.com/ukgovdatascience/govcookiecutter/pull/6#discussion_r493675176). --- .../docs/pull_merge_request_templates/GDS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md index 3b4e53f..3f5f12f 100644 --- a/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md +++ b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md @@ -16,7 +16,7 @@ Incomplete pull/merge requests MAY be blocked until actions are resolved, or clo ### General checks - [ ] Code runs -- [ ] Developments are **secure** and **ethical** +- [ ] Developments are **secure** and [**ethical**](https://www.gov.uk/government/publications/data-ethics-framework)) - [ ] You have made proportionate checks that the code works correctly - [ ] Test suite passes - [ ] Assumptions, and caveats log updated (see `docs/aqa/assumptions_caveats.md`), if necessary From 7782f2836894a6a99d4dd437544147ce8d544870 Mon Sep 17 00:00:00 2001 From: Eric Young Date: Mon, 5 Oct 2020 08:50:26 +0100 Subject: [PATCH 8/9] Add source/credit for assumptions/caveats definitions Per PR #6 comments (https://github.com/ukgovdatascience/govcookiecutter/pull/6#discussion_r493673143) --- .../docs/aqa_frameworks/GDS/assumptions_caveats.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md index f440674..9423a73 100644 --- a/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md +++ b/{{ cookiecutter.repo_name }}/docs/aqa_frameworks/GDS/assumptions_caveats.md @@ -11,7 +11,7 @@ This log contains a list of assumptions and caveats used in this analysis. ## Definitions -Assumptions are RAG-rated according to the following definitions for quality and impact: +Assumptions are RAG-rated according to the following definitions for quality and impact1: ```eval_rst @@ -31,6 +31,7 @@ Assumptions are RAG-rated according to the following definitions for quality and | | methodology. | | +-------+------------------------------------------------------+-------------------------------------------------------+ ``` +1 With thanks to the Home Office Analytical Quality Assurance team for these definitions. ## Assumptions and caveats From 2a2e5eeb32e6fb06b3a41662d2578aff4ad68aed Mon Sep 17 00:00:00 2001 From: Eric Young Date: Thu, 8 Oct 2020 10:19:52 +0100 Subject: [PATCH 9/9] Add reference to GDS Way about pull requests Per PR #6 comments (https://github.com/ukgovdatascience/govcookiecutter/pull/6#discussion_r493674464). --- .../docs/pull_merge_request_templates/GDS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md index 3f5f12f..6640b08 100644 --- a/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md +++ b/{{ cookiecutter.repo_name }}/docs/pull_merge_request_templates/GDS.md @@ -1,6 +1,7 @@ # Summary -Add your summary here - keep it brief, to the point, and in plain English. +Add your summary here - keep it brief, to the point, and in plain English. For further information about pull requests, +check out the [GDS Way](https://gds-way.cloudapps.digital/standards/pull-requests.html). # Checklists