From 410895505d21be1a93224dfda25c50677e757b25 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:00:42 +0000 Subject: [PATCH 01/11] make project class more flexible --- gh_review_project/finish_milestone.py | 6 +++--- gh_review_project/review_project.py | 30 ++++++++++++++------------- gh_review_project/workload.py | 6 +++--- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index d97ccab0..ee33c0d3 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -15,7 +15,7 @@ """ from pathlib import Path import argparse -from review_project import ProjectData +from review_project import ProjectData, REVIEW_ID, ISSUE_ID def print_banner(message: str) -> None: @@ -184,9 +184,9 @@ def main( # Get milestone data if test: - data = ProjectData.from_file(file) + data = ProjectData.from_file(REVIEW_ID, file) else: - data = ProjectData.from_github(capture_project, file) + data = ProjectData.from_github(REVIEW_ID, capture_project, file) # Process data and report on status check_ready(data, milestone, dry) diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 67971aa2..098dca2a 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -16,7 +16,8 @@ import shlex from collections import defaultdict -PROJECT_ID = 376 +REVIEW_ID = 376 +ISSUE_ID = 418 PROJECT_OWNER = "MetOffice" @@ -39,7 +40,7 @@ class ProjectData: repos: list All repositories currectly represented in the project """ - open_states = [ + pr_open_states = [ "In Progress", "SciTech Review", "Code Review", @@ -47,7 +48,8 @@ class ProjectData: "Changes Requested", ] - def __init__(self, pull_requests: list, test: bool = False): + def __init__(self, project: int, pull_requests: list, test: bool = False): + self.project = project self.pull_requests = pull_requests self.test = test @@ -56,7 +58,7 @@ def __init__(self, pull_requests: list, test: bool = False): self.repos = self._extract_repositories() @classmethod - def from_github(cls, capture: bool = False, file: Path = None) -> ProjectData: + def from_github(cls, project: int, capture: bool = False, file: Path = None) -> ProjectData: """ Retrieve data from GitHub API and initialise the class. @@ -64,7 +66,7 @@ def from_github(cls, capture: bool = False, file: Path = None) -> ProjectData: file: Path to the test file to be written to. """ print("Retrieving project data from GitHub") - command = f"gh project item-list {PROJECT_ID} -L 500 --owner {PROJECT_OWNER} --format json" + command = f"gh project item-list {project} -L 500 --owner {PROJECT_OWNER} --format json" output = run_command(command) raw_data = json.loads(output.stdout) @@ -82,10 +84,10 @@ def from_github(cls, capture: bool = False, file: Path = None) -> ProjectData: print("Unable to capture data as filename not specified.") pull_requests = cls._extract_data(raw_data) - return cls(pull_requests, test=False) + return cls(project, pull_requests, test=False) @classmethod - def from_file(cls, file: Path) -> ProjectData: + def from_file(cls, project: int, file: Path) -> ProjectData: """ Retrieve data from test file and initialise the class. @@ -95,7 +97,7 @@ def from_file(cls, file: Path) -> ProjectData: raw_data = json.loads(f.read()) pull_requests = cls._extract_data(raw_data) - return cls(pull_requests, test=True) + return cls(project, pull_requests, test=True) @classmethod def _extract_data(cls, raw_data: dict) -> list: @@ -231,8 +233,8 @@ def get_milestone(self, milestone: str, status: str = "all") -> dict: if pr.milestone == milestone and ( pr.status == status or status == "all" - or (status == "open" and pr.status in self.open_states) - or (status == "closed" and pr.status not in self.open_states) + or (status == "open" and pr.status in self.pr_open_states) + or (status == "closed" and pr.status not in self.pr_open_states) ): milestone_data[pr.repo].append(pr) @@ -253,7 +255,7 @@ def archive_milestone(self, milestone: str, dry_run: bool = False) -> None: closed_prs = self.get_milestone(milestone=milestone, status="closed") for repo in closed_prs: for pr in closed_prs[repo]: - pr.archive(dry_run) + pr.archive(self.project, dry_run) class PullRequest: @@ -286,14 +288,14 @@ def __init__( self.scitechReview = None self.codeReview = None - def archive(self, dry_run: bool = False) -> None: + def archive(self, project: int, dry_run: bool = False) -> None: """ Archive this pull request from the project. dry_run: If true, print the command used rather than archiving. """ - command = f"gh project item-archive {PROJECT_ID} --owner {PROJECT_OWNER} --id {self.id}" + command = f"gh project item-archive {project} --owner {PROJECT_OWNER} --id {self.id}" message = f"Archiving #{self.number} in {self.repo}" if dry_run: @@ -310,7 +312,7 @@ def modify_milestone(self, milestone: str, dry_run: bool = False) -> None: dry_run, If true, print the command rather than making a change. """ - command = f"gh pr edit {self.number} --repo='MetOffice/{self.repo}' --milestone='{milestone}'" + command = f"gh pr edit {self.number} --repo='{PROJECT_OWNER}/{self.repo}' --milestone='{milestone}'" message = f"Changing milestone for #{self.number} in {self.repo}" if dry_run: diff --git a/gh_review_project/workload.py b/gh_review_project/workload.py index f840d5ae..cc5a4b5d 100644 --- a/gh_review_project/workload.py +++ b/gh_review_project/workload.py @@ -16,7 +16,7 @@ from pathlib import Path from prettytable import PrettyTable -from review_project import ProjectData +from review_project import ProjectData, REVIEW_ID lfric_repositories = [ "lfric_apps", @@ -205,9 +205,9 @@ def main(total: bool, test: bool, capture_project: bool, file: Path): # Extract data from github about the reviews and team members. if test: - data = ProjectData.from_file(file) + data = ProjectData.from_file(REVIEW_ID, file) else: - data = ProjectData.from_github(capture_project, file) + data = ProjectData.from_github(REVIEW_ID, capture_project, file) teams = { "SSD": Team("ssdteam", test), From 1ec44f502aab58370f06854c6843a28b85ea934b Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:56:58 +0000 Subject: [PATCH 02/11] expand classes to Issues --- gh_review_project/review_project.py | 249 ++++++++++++++++++---------- 1 file changed, 158 insertions(+), 91 deletions(-) diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 098dca2a..4ab63b5c 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -40,17 +40,9 @@ class ProjectData: repos: list All repositories currectly represented in the project """ - pr_open_states = [ - "In Progress", - "SciTech Review", - "Code Review", - "Approved", - "Changes Requested", - ] - - def __init__(self, project: int, pull_requests: list, test: bool = False): + def __init__(self, project: int, items: list, test: bool = False): self.project = project - self.pull_requests = pull_requests + self.project_items = items self.test = test # Extract these once as useful lists @@ -58,7 +50,9 @@ def __init__(self, project: int, pull_requests: list, test: bool = False): self.repos = self._extract_repositories() @classmethod - def from_github(cls, project: int, capture: bool = False, file: Path = None) -> ProjectData: + def from_github( + cls, project: int, capture: bool = False, file: Path = None + ) -> ProjectData: """ Retrieve data from GitHub API and initialise the class. @@ -83,8 +77,8 @@ def from_github(cls, project: int, capture: bool = False, file: Path = None) -> else: print("Unable to capture data as filename not specified.") - pull_requests = cls._extract_data(raw_data) - return cls(project, pull_requests, test=False) + items = cls._extract_data(raw_data) + return cls(project, items, test=False) @classmethod def from_file(cls, project: int, file: Path) -> ProjectData: @@ -96,8 +90,8 @@ def from_file(cls, project: int, file: Path) -> ProjectData: with open(file) as f: raw_data = json.loads(f.read()) - pull_requests = cls._extract_data(raw_data) - return cls(project, pull_requests, test=True) + items = cls._extract_data(raw_data) + return cls(project, items, test=True) @classmethod def _extract_data(cls, raw_data: dict) -> list: @@ -108,42 +102,51 @@ def _extract_data(cls, raw_data: dict) -> list: raw_data: github data from the project """ - pr_list = [] + item_list = [] - for pr in raw_data["items"]: - pull_request = PullRequest( - id=pr["id"], - number=pr["content"]["number"], - title=pr["content"]["title"], - repo=pr["content"]["repository"].replace("MetOffice/", ""), - ) + for item_data in raw_data["items"]: + if item_data["content"]["type"] == "PullRequest": + item = PullRequest( + id=item_data["id"], + number=item_data["content"]["number"], + title=item_data["content"]["title"], + repo=item_data["content"]["repository"].replace("MetOffice/", ""), + ) + + if "code Review" in item_data: + item.codeReview = item_data["code Review"] - if "status" in pr: - pull_request.status = pr["status"] + if "sciTech Review" in item_data: + item.scitechReview = item_data["sciTech Review"] - if "milestone" in pr: - pull_request.milestone = pr["milestone"]["title"] + elif item_data["content"]["type"] == "Issue": + item = Issue( + id=item_data["id"], + number=item_data["content"]["number"], + title=item_data["content"]["title"], + repo=item_data["content"]["repository"].replace("MetOffice/", ""), + ) - if "assignee" in pr: - pull_request.assignee = pr["assignees"] + if "status" in item_data: + item.status = item_data["status"] - if "code Review" in pr: - pull_request.codeReview = pr["code Review"] + if "milestone" in item_data: + item.milestone = item_data["milestone"]["title"] - if "sciTech Review" in pr: - pull_request.scitechReview = pr["sciTech Review"] + if "assignee" in item_data: + item.assignee = item_data["assignees"] - pr_list.append(pull_request) + item_list.append(item) - return pr_list + return item_list def _extract_milestones(self) -> set: """ Create a set of milestones from the pull request data """ milestones = set() - for pr in self.pull_requests: - milestones.add(pr.milestone) + for item in self.project_items: + milestones.add(item.milestone) return milestones @@ -152,8 +155,8 @@ def _extract_repositories(self) -> set: Create a set of repositories from the pull request data """ repositories = set() - for pr in self.pull_requests: - repositories.add(pr.repo) + for item in self.project_items: + repositories.add(item.repo) return repositories @@ -169,30 +172,31 @@ def get_reviewers_for_repo(self, repo: str) -> list: if self.test: print("\n=== Reviewers for " + repo) - for pr in self.pull_requests: - if pr.repo == repo: - sr = pr.scitechReview - if sr: - reviewers.append(sr) - - cr = pr.codeReview - if cr: - reviewers.append(cr) - - if self.test and (cr or sr): - # Handle case where these are None - if not sr: - sr = "" - if not cr: - cr = "" - - print( - "SciTech:", - f"{sr: <18}", - "Code:", - f"{cr: <18}", - pr.title, - ) + for item in self.project_items: + if isinstance(item, PullRequest): + if item.repo == repo: + sr = item.scitechReview + if sr: + reviewers.append(sr) + + cr = item.codeReview + if cr: + reviewers.append(cr) + + if self.test and (cr or sr): + # Handle case where these are None + if not sr: + sr = "" + if not cr: + cr = "" + + print( + "SciTech:", + f"{sr: <18}", + "Code:", + f"{cr: <18}", + item.title, + ) return reviewers @@ -229,51 +233,50 @@ def get_milestone(self, milestone: str, status: str = "all") -> dict: milestone_data = defaultdict(list) - for pr in self.pull_requests: - if pr.milestone == milestone and ( - pr.status == status + for item in self.project_items: + if item.milestone == milestone and ( + item.status == status or status == "all" - or (status == "open" and pr.status in self.pr_open_states) - or (status == "closed" and pr.status not in self.pr_open_states) + or (status == "open" and item.status in item.open_states) + or (status == "closed" and item.status not in item.open_states) ): - milestone_data[pr.repo].append(pr) + milestone_data[item.repo].append(item) return milestone_data def archive_milestone(self, milestone: str, dry_run: bool = False) -> None: """ - Archive all pull requests for a given milestone from the project. + Archive all items for a given milestone from the project. milestone: Title of milestone to archive dry_run: If true then dummy the commands """ - print(f"Archiving all completed pull requests for {milestone}") + print(f"Archiving all completed items for {milestone}") dry_run = dry_run | self.test # if test data, or a dryrun, then dummy commands - closed_prs = self.get_milestone(milestone=milestone, status="closed") - for repo in closed_prs: - for pr in closed_prs[repo]: - pr.archive(self.project, dry_run) + closed = self.get_milestone(milestone=milestone, status="closed") + for repo in closed: + for item in closed[repo]: + item.archive(self.project, dry_run) -class PullRequest: +class ProjectItem: """ - Class for an individual pull request to hold key information and provide - functions to modify the pull request. + Base class for pull requests and issues - id: github ID for the pull request - number: number of the pull request in the repository - title: title of the pull request - repo: repository where the pull request is located - status: status of the pull request + id: github ID for the item + number: number of the item in the repository + title: title of the item + repo: repository where the item is located + status: status of the item milestone: title of the milestone - assignee: assignee of the pull request, which is the developer - scitechReview: user assigned to sciTech review the pull request - codeReview: user assigned to code review the pull request """ + open_states = [] + command_type = None + def __init__( self, id: str = None, number: str = None, title: str = None, repo: str = None ): @@ -285,17 +288,17 @@ def __init__( self.status = None self.milestone = "None" self.assignee = None - self.scitechReview = None - self.codeReview = None def archive(self, project: int, dry_run: bool = False) -> None: """ - Archive this pull request from the project. + Archive this item from the project. dry_run: If true, print the command used rather than archiving. """ - command = f"gh project item-archive {project} --owner {PROJECT_OWNER} --id {self.id}" + command = ( + f"gh project item-archive {project} --owner {PROJECT_OWNER} --id {self.id}" + ) message = f"Archiving #{self.number} in {self.repo}" if dry_run: @@ -312,7 +315,7 @@ def modify_milestone(self, milestone: str, dry_run: bool = False) -> None: dry_run, If true, print the command rather than making a change. """ - command = f"gh pr edit {self.number} --repo='{PROJECT_OWNER}/{self.repo}' --milestone='{milestone}'" + command = f"gh {self.command_type} edit {self.number} --repo='{PROJECT_OWNER}/{self.repo}' --milestone='{milestone}'" message = f"Changing milestone for #{self.number} in {self.repo}" if dry_run: @@ -322,3 +325,67 @@ def modify_milestone(self, milestone: str, dry_run: bool = False) -> None: run_command(command) self.milestone = milestone + + def add_comment(self, text: str, dry_run: bool = False) -> None: + """ + Add a comment to this item + + test: string to form the comment + dry_run: If true, print the command rather than making a change. + """ + + command = f"gh {self.command_type} comment {self.number} --repo='{PROJECT_OWNER}/{self.repo}' --body='{text}'" + message = f"Adding comment to #{self.number} in {self.repo}" + + if dry_run: + print(f"[DRY RUN] {message: <50} {command}") + else: + print(message) + run_command(command) + + +class PullRequest(ProjectItem): + """ + Class for an individual pull request to hold key information and provide + functions to modify the pull request. + + + assignee: assignee of the pull request, which is the developer + scitechReview: user assigned to sciTech review the pull request + codeReview: user assigned to code review the pull request + """ + + open_states = [ + "In Progress", + "SciTech Review", + "Code Review", + "Approved", + "Changes Requested", + ] + + command_type = "pr" + + def __init__( + self, id: str = None, number: str = None, title: str = None, repo: str = None + ): + super().__init__(id, number, title, repo) + + self.scitechReview = None + self.codeReview = None + + +class Issue: + """ + Class for an individual issue to hold key information and provide + functions to modify the issue. + + id: github ID for the pull request + number: number of the pull request in the repository + title: title of the pull request + repo: repository where the pull request is located + status: status of the pull request + milestone: title of the milestone + assignee: assignee of the pull request, which is the developer + """ + + open_states = ["New Issue", "Ready for Work", "In Progress", "In Review"] From 4253491519a0cb0ff16d754feb30a51c4028ad42 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:05:50 +0000 Subject: [PATCH 03/11] add issue test file --- gh_review_project/finish_milestone.py | 16 +- gh_review_project/review_project.py | 2 +- gh_review_project/test/issue.json | 4101 +++++++++++++++++ gh_review_project/test/{test.json => pr.json} | 2 +- gh_review_project/workload.py | 2 +- 5 files changed, 4113 insertions(+), 10 deletions(-) create mode 100644 gh_review_project/test/issue.json rename gh_review_project/test/{test.json => pr.json} (99%) diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index ee33c0d3..1d01c2de 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -136,7 +136,7 @@ def parse_args(): Read command line args """ - testfile = Path(__file__).parent / "test" / "test.json" + testfile_path = Path(__file__).parent / "test" parser = argparse.ArgumentParser( "Archive milestone contents within the project and close the " @@ -156,7 +156,7 @@ def parse_args(): ) parser.add_argument( "--file", - default=testfile, + default=testfile_path, help="Filepath to test data for either capturing the project status, " "or use as input data.", ) @@ -184,17 +184,19 @@ def main( # Get milestone data if test: - data = ProjectData.from_file(REVIEW_ID, file) + review_data = ProjectData.from_file(REVIEW_ID, file / "pr.json") + issue_data = ProjectData.from_file(ISSUE_ID, file / "issue.json") else: - data = ProjectData.from_github(REVIEW_ID, capture_project, file) + review_data = ProjectData.from_github(REVIEW_ID, capture_project, file/ "pr.json") + issue_data = ProjectData.from_github(ISSUE_ID, capture_project, file/ "issue.json") # Process data and report on status - check_ready(data, milestone, dry) - report(data, milestone) + check_ready(review_data, milestone, dry) + report(review_data, milestone) # Archive pull requests at the milestone print_banner(f"Archiving Milestone {milestone}") - data.archive_milestone(milestone, dry_run=dry) + review_data.archive_milestone(milestone, dry_run=dry) # Close milestones # TODO: run this command from here, rather than prompting user. Leaving diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 4ab63b5c..903d7d8e 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -374,7 +374,7 @@ def __init__( self.codeReview = None -class Issue: +class Issue(ProjectItem): """ Class for an individual issue to hold key information and provide functions to modify the issue. diff --git a/gh_review_project/test/issue.json b/gh_review_project/test/issue.json new file mode 100644 index 00000000..63bdc6ca --- /dev/null +++ b/gh_review_project/test/issue.json @@ -0,0 +1,4101 @@ +{ + "items": [ + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 34, + "repository": "MetOffice/growss", + "title": "Optimise build-docs workflow", + "type": "Issue", + "url": "https://github.com/MetOffice/growss/issues/34" + }, + "id": "PVTI_lADOAGrG5M4BId8GzghZfq0", + "labels": [ + "enhancement", + "CI" + ], + "linked pull requests": [ + "https://github.com/MetOffice/growss/pull/37", + "https://github.com/MetOffice/growss/pull/38" + ], + "repository": "https://github.com/MetOffice/growss", + "status": "New Issue", + "title": "Optimise build-docs workflow" + }, + { + "content": { + "number": 11, + "repository": "MetOffice/growss", + "title": "Update the README.md", + "type": "Issue", + "url": "https://github.com/MetOffice/growss/issues/11" + }, + "id": "PVTI_lADOAGrG5M4BId8GzghZfwQ", + "labels": [ + "documentation" + ], + "repository": "https://github.com/MetOffice/growss", + "status": "New Issue", + "title": "Update the README.md" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 29, + "repository": "MetOffice/growss", + "title": "Add Troubleshooting section", + "type": "Issue", + "url": "https://github.com/MetOffice/growss/issues/29" + }, + "id": "PVTI_lADOAGrG5M4BId8GzghZfwY", + "labels": [ + "documentation" + ], + "repository": "https://github.com/MetOffice/growss", + "status": "New Issue", + "title": "Add Troubleshooting section" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 25, + "repository": "MetOffice/lfric_apps", + "title": "Update Transmute PSyclone steps in line with adjustments", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/25" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzghfjfk", + "labels": [ + "documentation" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Update Transmute PSyclone steps in line with adjustments" + }, + { + "assignees": [ + "yaswant" + ], + "content": { + "number": 499, + "repository": "MetOffice/simulation-systems", + "title": "Use reusable workflow to build and deploy docs", + "type": "Issue", + "url": "https://github.com/MetOffice/simulation-systems/issues/499" + }, + "id": "PVTI_lADOAGrG5M4BId8GzghhgJU", + "labels": [ + ":blue_book:Documentation" + ], + "linked pull requests": [ + "https://github.com/MetOffice/simulation-systems/pull/500" + ], + "repository": "https://github.com/MetOffice/simulation-systems", + "status": "In Review", + "title": "Use reusable workflow to build and deploy docs" + }, + { + "content": { + "number": 4, + "repository": "MetOffice/ukca", + "title": "Add GitHub Action to perform initial quality checks", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/4" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgh3180", + "repository": "https://github.com/MetOffice/ukca", + "status": "New Issue", + "title": "Add GitHub Action to perform initial quality checks" + }, + { + "content": { + "number": 2, + "repository": "MetOffice/casim", + "title": "Add GitHub Action to perform initial quality checks", + "type": "Issue", + "url": "https://github.com/MetOffice/casim/issues/2" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgh33mw", + "repository": "https://github.com/MetOffice/casim", + "status": "New Issue", + "title": "Add GitHub Action to perform initial quality checks" + }, + { + "content": { + "number": 2, + "repository": "MetOffice/socrates", + "title": "Add GitHub Action to perform initial quality checks", + "type": "Issue", + "url": "https://github.com/MetOffice/socrates/issues/2" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgh33qY", + "repository": "https://github.com/MetOffice/socrates", + "status": "New Issue", + "title": "Add GitHub Action to perform initial quality checks" + }, + { + "content": { + "number": 11, + "repository": "MetOffice/um", + "title": "Add GitHub Action to perform initial quality checks", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/11" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgh33uk", + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Add GitHub Action to perform initial quality checks" + }, + { + "content": { + "number": 143, + "repository": "MetOffice/SimSys_Scripts", + "title": "Update linting action", + "type": "Issue", + "url": "https://github.com/MetOffice/SimSys_Scripts/issues/143" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiBnMg", + "repository": "https://github.com/MetOffice/SimSys_Scripts", + "status": "Done", + "title": "Update linting action" + }, + { + "content": { + "number": 2, + "repository": "MetOffice/moci", + "title": "Incorrect identification of Fortran namelist files as newlisp", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/2" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiBx2g", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Incorrect identification of Fortran namelist files as newlisp" + }, + { + "assignees": [ + "christophermaynard" + ], + "content": { + "number": 29, + "repository": "MetOffice/lfric_apps", + "title": "Finish NG-ARCH tickets", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/29" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiHylk", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Finish NG-ARCH tickets" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 171, + "repository": "MetOffice/lfric_core", + "title": "Ensure correct interpretation of read frequency for files defined in iodef.xml", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/171" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiRphU", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/203", + "https://github.com/MetOffice/lfric_core/pull/212" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Ensure correct interpretation of read frequency for files defined in iodef.xml" + }, + { + "content": { + "number": 17, + "repository": "MetOffice/jules", + "title": "Setup CODEOWNERS", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/17" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiVM3o", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Setup CODEOWNERS" + }, + { + "content": { + "number": 173, + "repository": "MetOffice/lfric_core", + "title": "Add lighthouse accessibility check for documentation", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/173" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiZUQ8", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add lighthouse accessibility check for documentation" + }, + { + "content": { + "number": 176, + "repository": "MetOffice/lfric_core", + "title": "Add 32-bit tests for applications in the rose stem suite", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/176" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiZ8PQ", + "labels": [ + "enhancement", + "good first issue" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add 32-bit tests for applications in the rose stem suite" + }, + { + "content": { + "number": 177, + "repository": "MetOffice/lfric_core", + "title": "Assess and possibly remove r_val and dp_val from constants_mod", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/177" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiaBX0", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Assess and possibly remove r_val and dp_val from constants_mod" + }, + { + "content": { + "number": 7, + "repository": "MetOffice/um_doc", + "title": "Refresh doc contents for GitHub migration", + "type": "Issue", + "url": "https://github.com/MetOffice/um_doc/issues/7" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgifwUY", + "repository": "https://github.com/MetOffice/um_doc", + "status": "New Issue", + "title": "Refresh doc contents for GitHub migration" + }, + { + "content": { + "number": 181, + "repository": "MetOffice/lfric_core", + "title": "Provide support for running without OpenMP", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/181" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgigwcQ", + "labels": [ + "bug", + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Provide support for running without OpenMP" + }, + { + "assignees": [ + "allynt" + ], + "content": { + "number": 183, + "repository": "MetOffice/lfric_core", + "title": "Ensure data variable in io_value_type is private", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/183" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgigzcQ", + "labels": [ + "enhancement", + "Linked Apps" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Ensure data variable in io_value_type is private" + }, + { + "assignees": [ + "TeranIvy" + ], + "content": { + "number": 43, + "repository": "MetOffice/lfric_core", + "title": "Document PSyKAl design and rules/guidance for writing kernels for users", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/43" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Dk", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Document PSyKAl design and rules/guidance for writing kernels for users" + }, + { + "assignees": [ + "andrewcoughtrie" + ], + "content": { + "number": 46, + "repository": "MetOffice/lfric_core", + "title": "Write simple_diffusion application tutorial", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/46" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Do", + "labels": [ + "documentation", + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Write simple_diffusion application tutorial" + }, + { + "assignees": [ + "andrewcoughtrie" + ], + "content": { + "number": 8, + "repository": "MetOffice/lfric_core", + "title": "Documentation of the io_demo application", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/8" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Dw", + "labels": [ + "documentation", + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Documentation of the io_demo application" + }, + { + "content": { + "number": 115, + "repository": "MetOffice/lfric_core", + "title": "[Documentation]: Create stencil documentation", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/115" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Eg", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "[Documentation]: Create stencil documentation" + }, + { + "assignees": [ + "andrewcoughtrie" + ], + "content": { + "number": 97, + "repository": "MetOffice/lfric_core", + "title": "Add Sphinx linkcheck", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/97" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Ek", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add Sphinx linkcheck" + }, + { + "content": { + "number": 107, + "repository": "MetOffice/lfric_core", + "title": "[Documentation]: Initiate documentation of driver component", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/107" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Es", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "[Documentation]: Initiate documentation of driver component" + }, + { + "content": { + "number": 133, + "repository": "MetOffice/lfric_core", + "title": "User documentation for driver component mesh support", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/133" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2E4", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "User documentation for driver component mesh support" + }, + { + "content": { + "number": 151, + "repository": "MetOffice/lfric_core", + "title": "Change PR template section from \"Developer tags\" to \"Developer mentions\"", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/151" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2FM", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Change PR template section from \"Developer tags\" to \"Developer mentions\"" + }, + { + "assignees": [ + "mike-hobson" + ], + "content": { + "number": 135, + "repository": "MetOffice/lfric_core", + "title": "Add field UML diagrams to how it works documentation ", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/135" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2FQ", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add field UML diagrams to how it works documentation " + }, + { + "content": { + "number": 156, + "repository": "MetOffice/lfric_core", + "title": "[Documentation]: Standardise restructured text", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/156" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Fo", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "[Documentation]: Standardise restructured text" + }, + { + "assignees": [ + "andrewcoughtrie" + ], + "content": { + "number": 163, + "repository": "MetOffice/lfric_core", + "title": "Update documentation for Key Value pairs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/163" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig2Fw", + "labels": [ + "documentation" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Update documentation for Key Value pairs" + }, + { + "content": { + "number": 184, + "repository": "MetOffice/lfric_core", + "title": "Improvements to the way we use YAXT", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/184" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgig4FM", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Improvements to the way we use YAXT" + }, + { + "assignees": [ + "allynt" + ], + "content": { + "number": 45, + "repository": "MetOffice/lfric_apps", + "title": "Use new io_value_type getter & setter", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/45" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgihA_c", + "labels": [ + "enhancement", + "Linked Core" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Use new io_value_type getter & setter" + }, + { + "assignees": [ + "mo-snishimoto" + ], + "content": { + "number": 46, + "repository": "MetOffice/lfric_apps", + "title": "Import of high order turbulence closure scheme", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/46" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgihCS0", + "labels": [ + "enhancement", + "macro" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Import of high order turbulence closure scheme" + }, + { + "content": { + "number": 47, + "repository": "MetOffice/lfric_apps", + "title": "Additional PC2 optimisations for NG-ARCH", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/47" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgikjhg", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Additional PC2 optimisations for NG-ARCH" + }, + { + "assignees": [ + "ukmo-juan-castillo" + ], + "content": { + "number": 48, + "repository": "MetOffice/lfric_apps", + "title": "lfric2lfric: generate lbcs in a regional mesh", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/48" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgik4Rc", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/55" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Done", + "title": "lfric2lfric: generate lbcs in a regional mesh" + }, + { + "assignees": [ + "mike-hobson" + ], + "content": { + "number": 186, + "repository": "MetOffice/lfric_core", + "title": "Move mpi_mod unit test over to mpi_f08", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/186" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiorPA", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Move mpi_mod unit test over to mpi_f08" + }, + { + "assignees": [ + "Pierre-siddall", + "hsrumbold", + "maggiehendry" + ], + "content": { + "number": 21, + "repository": "MetOffice/jules", + "title": "Migrating the JULES Trac wiki pages to GitHub", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/21" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgio9Cs", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Migrating the JULES Trac wiki pages to GitHub" + }, + { + "content": { + "number": 60, + "repository": "MetOffice/lfric_apps", + "title": "lfric2lfric: processing W2 fields", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/60" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgipzvk", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/238" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "lfric2lfric: processing W2 fields" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 61, + "repository": "MetOffice/lfric_apps", + "title": "Boundary Layer - bdy_expl2 optimisations", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/61" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiqAFQ", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Boundary Layer - bdy_expl2 optimisations" + }, + { + "assignees": [ + "tommbendall" + ], + "content": { + "number": 66, + "repository": "MetOffice/lfric_apps", + "title": "The sample_physics_wind_correction option is broken", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/66" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgis5_U", + "labels": [ + "bug" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/69" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Done", + "title": "The sample_physics_wind_correction option is broken" + }, + { + "assignees": [ + "tommbendall" + ], + "content": { + "number": 70, + "repository": "MetOffice/lfric_apps", + "title": "Several gungho_model plotting scripts are broken", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/70" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgitubM", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Several gungho_model plotting scripts are broken" + }, + { + "assignees": [ + "oakleybrunt" + ], + "content": { + "number": 73, + "repository": "MetOffice/lfric_apps", + "title": "Investigation into failing multithreaded `lfric_atm` runs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/73" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgivqms", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Investigation into failing multithreaded `lfric_atm` runs" + }, + { + "assignees": [ + "hsrumbold", + "maggiehendry" + ], + "content": { + "number": 23, + "repository": "MetOffice/jules", + "title": "Implement new irrigation scheme into standalone JULES", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/23" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgiv3VQ", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "In Progress", + "title": "Implement new irrigation scheme into standalone JULES" + }, + { + "content": { + "number": 76, + "repository": "MetOffice/lfric_apps", + "title": "Add PSyclone generated timing callipers", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/76" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgiwl7g", + "labels": [ + "enhancement", + "Linked Core" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Add PSyclone generated timing callipers" + }, + { + "content": { + "number": 196, + "repository": "MetOffice/lfric_core", + "title": "Add PSyclone generated timing callipers", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/196" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiwmfY", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add PSyclone generated timing callipers" + }, + { + "assignees": [ + "mo-rickywong" + ], + "content": { + "number": 197, + "repository": "MetOffice/lfric_core", + "title": "Add method to retrieve a specified instance of a namelist that allows multiple instances", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/197" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgiwmp8", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add method to retrieve a specified instance of a namelist that allows multiple instances" + }, + { + "assignees": [ + "mo-jmanners" + ], + "content": { + "number": 8, + "repository": "MetOffice/socrates", + "title": "Improve treatment of solar spectrum for correlated-k", + "type": "Issue", + "url": "https://github.com/MetOffice/socrates/issues/8" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgiw13s", + "labels": [ + "enhancement", + "KGO" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/socrates", + "status": "New Issue", + "title": "Improve treatment of solar spectrum for correlated-k" + }, + { + "assignees": [ + "mike-hobson" + ], + "content": { + "number": 77, + "repository": "MetOffice/lfric_apps", + "title": "Checkpointing wind (W2) fields", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/77" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgiyiVA", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Checkpointing wind (W2) fields" + }, + { + "assignees": [ + "mike-hobson" + ], + "content": { + "number": 199, + "repository": "MetOffice/lfric_core", + "title": "Checkpointing wind (W2) fields", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/199" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgiyi9o", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Checkpointing wind (W2) fields" + }, + { + "assignees": [ + "harry-shepherd" + ], + "content": { + "number": 8, + "repository": "MetOffice/moci", + "title": "Update infrastructure build suite to be git compatible", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/8" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgi0Hfw", + "repository": "https://github.com/MetOffice/moci", + "status": "In Progress", + "title": "Update infrastructure build suite to be git compatible" + }, + { + "assignees": [ + "mo-andymalcolm" + ], + "content": { + "number": 20, + "repository": "MetOffice/um", + "title": "Consolidate_nudging_changes", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/20" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgi4bGw", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/um/pull/22" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/um", + "status": "In Review", + "title": "Consolidate_nudging_changes" + }, + { + "content": { + "number": 81, + "repository": "MetOffice/lfric_apps", + "title": "Use of unallocated arrays in ukca_volcanic_so2", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/81" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjG6Bw", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Use of unallocated arrays in ukca_volcanic_so2" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 85, + "repository": "MetOffice/lfric_apps", + "title": "Align jedi_lfric_tests linear model/adjoint testing to adjoint_tests/linear_model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/85" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjRaxk", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/156" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Done", + "title": "Align jedi_lfric_tests linear model/adjoint testing to adjoint_tests/linear_model" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 86, + "repository": "MetOffice/lfric_apps", + "title": "Update Transmute opt scripts with global.py changes", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/86" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjRa7Y", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Update Transmute opt scripts with global.py changes" + }, + { + "content": { + "number": 87, + "repository": "MetOffice/lfric_apps", + "title": "Incorrect adjoint semi-implicit timestep when reference_reset_time != dt", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/87" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjRgag", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Incorrect adjoint semi-implicit timestep when reference_reset_time != dt" + }, + { + "assignees": [ + "thomasmelvin" + ], + "content": { + "number": 88, + "repository": "MetOffice/lfric_apps", + "title": "Decompose across multiple panels", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/88" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjRkF4", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Decompose across multiple panels" + }, + { + "assignees": [ + "sarahshannon-uor" + ], + "content": { + "number": 25, + "repository": "MetOffice/jules", + "title": "vn7.9 crash when using elevated tiles: elevation ancil read before ainfo/jules_vars association", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/25" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjRtVA", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "vn7.9 crash when using elevated tiles: elevation ancil read before ainfo/jules_vars association" + }, + { + "content": { + "number": 89, + "repository": "MetOffice/lfric_apps", + "title": "Implement SST Anomaly functionality", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/89" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjSGFA", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Implement SST Anomaly functionality" + }, + { + "content": { + "number": 205, + "repository": "MetOffice/lfric_core", + "title": "Re-factor Configurator Python code.", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/205" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjSVJM", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Re-factor Configurator Python code." + }, + { + "assignees": [ + "Adrian-Lock" + ], + "content": { + "number": 91, + "repository": "MetOffice/lfric_apps", + "title": "Remove old redundant UM code from ex_coef routine in boundary_layer and tidy", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/91" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjUnO8", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Remove old redundant UM code from ex_coef routine in boundary_layer and tidy" + }, + { + "assignees": [ + "pdearnshaw" + ], + "content": { + "number": 92, + "repository": "MetOffice/lfric_apps", + "title": "Allow lfric_atm to compile for oasis coupled models", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/92" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjUtWU", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Allow lfric_atm to compile for oasis coupled models" + }, + { + "assignees": [ + "DrTVockerodtMO" + ], + "content": { + "number": 93, + "repository": "MetOffice/lfric_apps", + "title": "Plumb adjoint lookup table caches into interface", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/93" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjU2NM", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Plumb adjoint lookup table caches into interface" + }, + { + "content": { + "number": 206, + "repository": "MetOffice/lfric_core", + "title": "LFRic Core documentation (namelist_collection_type)", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/206" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjVEUY", + "labels": [ + "documentation" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "LFRic Core documentation (namelist_collection_type)" + }, + { + "content": { + "number": 54, + "repository": "MetOffice/growss", + "title": "Fix CR checker to identify code reviewer in PR body", + "type": "Issue", + "url": "https://github.com/MetOffice/growss/issues/54" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjYuqI", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/growss", + "status": "New Issue", + "title": "Fix CR checker to identify code reviewer in PR body" + }, + { + "content": { + "number": 97, + "repository": "MetOffice/lfric_apps", + "title": "Update the LFRic apps coupled configuration to use XIOS 2", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/97" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjZF8Y", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Update the LFRic apps coupled configuration to use XIOS 2" + }, + { + "assignees": [ + "mo-jmanners" + ], + "content": { + "number": 10, + "repository": "MetOffice/socrates", + "title": "Include spherical ice-crystal optical properties in ga9 spectral files", + "type": "Issue", + "url": "https://github.com/MetOffice/socrates/issues/10" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjZQtU", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/socrates", + "status": "New Issue", + "title": "Include spherical ice-crystal optical properties in ga9 spectral files" + }, + { + "assignees": [ + "alanjhewitt" + ], + "content": { + "number": 100, + "repository": "MetOffice/lfric_apps", + "title": "lfric_atm_nwp_gal9 loses bit comparison across NRUN-CRUN boundary", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/100" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjZc_A", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "lfric_atm_nwp_gal9 loses bit comparison across NRUN-CRUN boundary" + }, + { + "assignees": [ + "christophermaynard", + "oakleybrunt" + ], + "content": { + "number": 103, + "repository": "MetOffice/lfric_apps", + "title": "Develop a performance profiling suite", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/103" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjb7zA", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Develop a performance profiling suite" + }, + { + "content": { + "number": 104, + "repository": "MetOffice/lfric_apps", + "title": "Fix CrayPat profiling for `lfric_atm`", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/104" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjb_OM", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Fix CrayPat profiling for `lfric_atm`" + }, + { + "assignees": [ + "oakleybrunt" + ], + "content": { + "number": 105, + "repository": "MetOffice/lfric_apps", + "title": "Reformat loading of modules in suite-config files for easier editing", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/105" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjcG0k", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Reformat loading of modules in suite-config files for easier editing" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 106, + "repository": "MetOffice/lfric_apps", + "title": "Boundary Layer Umbrella", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/106" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjcHfc", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Boundary Layer Umbrella" + }, + { + "assignees": [ + "christophermaynard", + "mattatmet" + ], + "content": { + "number": 107, + "repository": "MetOffice/lfric_apps", + "title": "Performance of colouring and tiling in gungho", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/107" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjcJ1M", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Performance of colouring and tiling in gungho" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 108, + "repository": "MetOffice/lfric_apps", + "title": "Add Split MoL-MoL transport in linear models", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/108" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjckcw", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Add Split MoL-MoL transport in linear models" + }, + { + "assignees": [ + "mo-pmol" + ], + "content": { + "number": 14, + "repository": "MetOffice/ukca", + "title": "Add PM diagnostics to the new UKCA Diagnostics Handling system.", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/14" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjcu64", + "labels": [ + "enhancement", + "Linked UM" + ], + "repository": "https://github.com/MetOffice/ukca", + "status": "New Issue", + "title": "Add PM diagnostics to the new UKCA Diagnostics Handling system." + }, + { + "assignees": [ + "oakleybrunt" + ], + "content": { + "number": 110, + "repository": "MetOffice/lfric_apps", + "title": "Investigation into MPIIO tuning for output files", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/110" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjh8Ew", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Investigation into MPIIO tuning for output files" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 111, + "repository": "MetOffice/lfric_apps", + "title": "Run linear model as 32bit", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/111" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiAyQ", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Run linear model as 32bit" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 112, + "repository": "MetOffice/lfric_apps", + "title": "Remove RAL settings from mesh configs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/112" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiBA4", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Remove RAL settings from mesh configs" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 113, + "repository": "MetOffice/lfric_apps", + "title": "Transport efficiency in linear model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/113" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiBeo", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Transport efficiency in linear model" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 114, + "repository": "MetOffice/lfric_apps", + "title": "Create a new adjoint model app", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/114" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiCtU", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Create a new adjoint model app" + }, + { + "assignees": [ + "cjohnson-pi" + ], + "content": { + "number": 115, + "repository": "MetOffice/lfric_apps", + "title": "Update linear integration tests configs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/115" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiD7E", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Update linear integration tests configs" + }, + { + "content": { + "number": 116, + "repository": "MetOffice/lfric_apps", + "title": "Add psycone transmute for UKCA glomap on archer site (ncas-ex)", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/116" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjiLio", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Add psycone transmute for UKCA glomap on archer site (ncas-ex)" + }, + { + "assignees": [ + "mo-alistairp" + ], + "content": { + "number": 213, + "repository": "MetOffice/lfric_core", + "title": "Add GH_SCALAR_ARRAY to argument_mod", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/213" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjifS8", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add GH_SCALAR_ARRAY to argument_mod" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 215, + "repository": "MetOffice/lfric_core", + "title": "Run LFRic-XIOS technical tests with XIOS 3", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/215" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjlrj0", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Run LFRic-XIOS technical tests with XIOS 3" + }, + { + "content": { + "number": 118, + "repository": "MetOffice/lfric_apps", + "title": "Enable reading of sea-ice ancils on categories", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/118" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjl2Cc", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Enable reading of sea-ice ancils on categories" + }, + { + "content": { + "number": 119, + "repository": "MetOffice/lfric_apps", + "title": "No environment setup instructions for Met Office users", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/119" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjl6K0", + "labels": [ + "documentation" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "No environment setup instructions for Met Office users" + }, + { + "content": { + "number": 216, + "repository": "MetOffice/lfric_core", + "title": "IO_Demo benchmark configuration", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/216" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjmJUA", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/232" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "IO_Demo benchmark configuration" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 124, + "repository": "MetOffice/lfric_apps", + "title": "Allow jelf adjoint test tolerance to be set via a namelist variable", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/124" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjplyw", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/132" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Done", + "title": "Allow jelf adjoint test tolerance to be set via a namelist variable" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 125, + "repository": "MetOffice/lfric_apps", + "title": "jelf adjoint tests initialised with realistic increments", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/125" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjpmCU", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/161" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "jelf adjoint tests initialised with realistic increments" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 126, + "repository": "MetOffice/lfric_apps", + "title": "C224 adjoint tests in jelf", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/126" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjpmSA", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/163" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "C224 adjoint tests in jelf" + }, + { + "content": { + "number": 127, + "repository": "MetOffice/lfric_apps", + "title": "Floating-point precision conversions in jelf to allow 32-bit TLM/adjoint for use with JADA", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/127" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjpmt0", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/142" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Done", + "title": "Floating-point precision conversions in jelf to allow 32-bit TLM/adjoint for use with JADA" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 128, + "repository": "MetOffice/lfric_apps", + "title": "Incorrect adjoint when using incremental wind interpolation in jelf", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/128" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjpnVo", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Incorrect adjoint when using incremental wind interpolation in jelf" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 129, + "repository": "MetOffice/lfric_apps", + "title": "Linear and adjoint boundary layer physics scheme", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/129" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjpnoI", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/182" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Linear and adjoint boundary layer physics scheme" + }, + { + "assignees": [ + "tom-j-h" + ], + "content": { + "number": 130, + "repository": "MetOffice/lfric_apps", + "title": "Overarching Issue for series of TLM/adjoint work", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/130" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjpojE", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Overarching Issue for series of TLM/adjoint work" + }, + { + "assignees": [ + "timgraham-Met" + ], + "content": { + "number": 134, + "repository": "MetOffice/lfric_apps", + "title": "Issue with 32 bit compilation in coupled interface", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/134" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjqCoQ", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Issue with 32 bit compilation in coupled interface" + }, + { + "assignees": [ + "mo-andymalcolm" + ], + "content": { + "number": 23, + "repository": "MetOffice/um", + "title": "Optimisations for climate diagnostics", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/23" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjqpw8", + "linked pull requests": [ + "https://github.com/MetOffice/um/pull/24" + ], + "repository": "https://github.com/MetOffice/um", + "status": "In Review", + "title": "Optimisations for climate diagnostics" + }, + { + "content": { + "number": 136, + "repository": "MetOffice/lfric_apps", + "title": "NG-ARCH: Loop blocking for vertical layers", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/136" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjs8B0", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "NG-ARCH: Loop blocking for vertical layers" + }, + { + "content": { + "number": 219, + "repository": "MetOffice/lfric_core", + "title": "NG-ARCH: Loop blocking for vertical layers", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/219" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjs-08", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Progress", + "title": "NG-ARCH: Loop blocking for vertical layers" + }, + { + "assignees": [ + "caroduro" + ], + "content": { + "number": 28, + "repository": "MetOffice/jules", + "title": "Bug fix (Ticket #1545)", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/28" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjtlZ0", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Bug fix (Ticket #1545)" + }, + { + "assignees": [ + "maggiehendry" + ], + "content": { + "number": 30, + "repository": "MetOffice/jules", + "title": "Web help urls in JULES metadata require updating", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/30" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxQuI", + "labels": [ + "bug", + "documentation", + "Accessibility" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Web help urls in JULES metadata require updating" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 10, + "repository": "MetOffice/moci", + "title": "Update CI/CD pipeline", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/10" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjxbzw", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Update CI/CD pipeline" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 11, + "repository": "MetOffice/moci", + "title": "Remove duplicated code", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/11" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjxcew", + "labels": [ + "enhancement", + "help wanted" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Remove duplicated code" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 12, + "repository": "MetOffice/moci", + "title": "Move shell out commands to a separate module/library", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/12" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxdTk", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/moci/pull/19" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "In Review", + "title": "Move shell out commands to a separate module/library" + }, + { + "assignees": [ + "jennyhickson" + ], + "content": { + "number": 167, + "repository": "MetOffice/SimSys_Scripts", + "title": "Fix Compiler Warning Checker", + "type": "Issue", + "url": "https://github.com/MetOffice/SimSys_Scripts/issues/167" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxmEg", + "labels": [ + "bug", + "enhancement" + ], + "repository": "https://github.com/MetOffice/SimSys_Scripts", + "status": "New Issue", + "title": "Fix Compiler Warning Checker" + }, + { + "content": { + "number": 31, + "repository": "MetOffice/jules", + "title": "Purge Fortran Keywords as variables", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/31" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjxmy0", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Purge Fortran Keywords as variables" + }, + { + "content": { + "number": 15, + "repository": "MetOffice/ukca", + "title": "Purge Fortran keywords as variable.", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/15" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxnD8", + "repository": "https://github.com/MetOffice/ukca", + "status": "New Issue", + "title": "Purge Fortran keywords as variable." + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 14, + "repository": "MetOffice/moci", + "title": "Move pylint.rc out of utilities", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/14" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxwpU", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/moci/pull/17" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "In Review", + "title": "Move pylint.rc out of utilities" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 15, + "repository": "MetOffice/moci", + "title": "Add a Python linter", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/15" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjxzCo", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/moci/pull/20" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "In Review", + "title": "Add a Python linter" + }, + { + "content": { + "number": 152, + "repository": "MetOffice/lfric_apps", + "title": "Deprecate legacy timer", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/152" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgjycBk", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Deprecate legacy timer" + }, + { + "content": { + "number": 225, + "repository": "MetOffice/lfric_core", + "title": "Deprecating Legacy Timer", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/225" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgjycko", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Deprecating Legacy Timer" + }, + { + "assignees": [ + "doucla" + ], + "content": { + "number": 32, + "repository": "MetOffice/jules", + "title": "Add minor reservoirs to hydrology (old ticket #1123)", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/32" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj0L1U", + "labels": [ + "enhancement", + "Linked UM", + "macro" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Add minor reservoirs to hydrology (old ticket #1123)" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 25, + "repository": "MetOffice/um", + "title": "CoMorph convection scheme refactoring", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/25" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj45IY", + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "CoMorph convection scheme refactoring" + }, + { + "content": { + "number": 18, + "repository": "MetOffice/moci", + "title": "Implement common logging system", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/18" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj5Xx0", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Implement common logging system" + }, + { + "assignees": [ + "caroduro", + "mo-eddy" + ], + "content": { + "number": 33, + "repository": "MetOffice/jules", + "title": "New water table depth calculation (Ticket #1485)", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/33" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj722w", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "New water table depth calculation (Ticket #1485)" + }, + { + "assignees": [ + "Adrian-Lock" + ], + "content": { + "number": 159, + "repository": "MetOffice/lfric_apps", + "title": "Add new option for a smoother calculation of mixing length", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/159" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj8UIA", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Add new option for a smoother calculation of mixing length" + }, + { + "assignees": [ + "DanCopsey" + ], + "content": { + "number": 26, + "repository": "MetOffice/um", + "title": "Move the l_inland switch from the jules_rivers namelist to the jules_hydrology namelist", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/26" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj8Zds", + "labels": [ + "Linked Jules", + "Linked Apps" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Move the l_inland switch from the jules_rivers namelist to the jules_hydrology namelist" + }, + { + "assignees": [ + "alanjhewitt" + ], + "content": { + "number": 160, + "repository": "MetOffice/lfric_apps", + "title": "Extend RADAER functionality to allow several GLOMAP settings", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/160" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj8sV8", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Progress", + "title": "Extend RADAER functionality to allow several GLOMAP settings" + }, + { + "assignees": [ + "DanCopsey" + ], + "content": { + "number": 34, + "repository": "MetOffice/jules", + "title": "Inland basin flow coupling and use land fractions on rivers grid", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/34" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj9VVY", + "labels": [ + "Linked UM", + "Linked Apps" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Inland basin flow coupling and use land fractions on rivers grid" + }, + { + "content": { + "number": 164, + "repository": "MetOffice/lfric_apps", + "title": "Unable to write out W2H fields with XIOS", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/164" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj9f8w", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Unable to write out W2H fields with XIOS" + }, + { + "content": { + "number": 230, + "repository": "MetOffice/lfric_core", + "title": "Cyclic file reading with lfric_xios temporal controller", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/230" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj9_RU", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/231" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Cyclic file reading with lfric_xios temporal controller" + }, + { + "content": { + "number": 167, + "repository": "MetOffice/lfric_apps", + "title": "Improve Stochastic Physics PSyclone Scripts by Grouping Functionalities into Reusable Functions", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/167" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgj-qFA", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Improve Stochastic Physics PSyclone Scripts by Grouping Functionalities into Reusable Functions" + }, + { + "assignees": [ + "yaswant" + ], + "content": { + "number": 168, + "repository": "MetOffice/lfric_apps", + "title": "TCD email in PR template is incorrect", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/168" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkAEj8", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "TCD email in PR template is incorrect" + }, + { + "assignees": [ + "marcstring" + ], + "content": { + "number": 28, + "repository": "MetOffice/um", + "title": "Bug in STASH for the Gregorian Calendar", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/28" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkAeRg", + "linked pull requests": [ + "https://github.com/MetOffice/um/pull/35" + ], + "repository": "https://github.com/MetOffice/um", + "status": "In Review", + "title": "Bug in STASH for the Gregorian Calendar" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 234, + "repository": "MetOffice/lfric_core", + "title": "Can we deprecate `dp_xios`?", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/234" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkA1Ic", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Can we deprecate `dp_xios`?" + }, + { + "assignees": [ + "alanjhewitt" + ], + "content": { + "number": 235, + "repository": "MetOffice/lfric_core", + "title": "Add GLOMAP to model db", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/235" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkBDbU", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Add GLOMAP to model db" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 236, + "repository": "MetOffice/lfric_core", + "title": "Variable to read time value from netcdf files needs to be double precision regardless", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/236" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkBZM4", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Variable to read time value from netcdf files needs to be double precision regardless" + }, + { + "content": { + "number": 29, + "repository": "MetOffice/um", + "title": "NCI rose-stem problems", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/29" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkC8qg", + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "NCI rose-stem problems" + }, + { + "assignees": [ + "tommbendall" + ], + "content": { + "number": 175, + "repository": "MetOffice/lfric_apps", + "title": "Halos wrap around y-direction in some gungho vertical slice tests", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/175" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkFDXk", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Halos wrap around y-direction in some gungho vertical slice tests" + }, + { + "content": { + "number": 239, + "repository": "MetOffice/lfric_core", + "title": "Halo exchange hangs for high-order W0 field on multigrid mesh in high-res runs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/239" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkFJLw", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Halo exchange hangs for high-order W0 field on multigrid mesh in high-res runs" + }, + { + "content": { + "number": 36, + "repository": "MetOffice/jules", + "title": "WIEMIP / PRIME version of jules", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/36" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkFw-o", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "WIEMIP / PRIME version of jules" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 178, + "repository": "MetOffice/lfric_apps", + "title": "CoMorph convection scheme refactoring", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/178" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkGJEA", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CoMorph convection scheme refactoring" + }, + { + "content": { + "number": 240, + "repository": "MetOffice/lfric_core", + "title": "Add Fab build script for Skeleton apps", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/240" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkHnjc", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/246" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Add Fab build script for Skeleton apps" + }, + { + "content": { + "number": 17, + "repository": "MetOffice/ukca", + "title": "Further ASAD refactoring", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/17" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkIuNM", + "linked pull requests": [ + "https://github.com/MetOffice/ukca/pull/18" + ], + "repository": "https://github.com/MetOffice/ukca", + "status": "In Review", + "title": "Further ASAD refactoring" + }, + { + "content": { + "number": 37, + "repository": "MetOffice/jules", + "title": "Better Process For publishing JULES input data", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/37" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkIweE", + "labels": [ + "backlog" + ], + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Better Process For publishing JULES input data" + }, + { + "content": { + "number": 19, + "repository": "MetOffice/ukca", + "title": "Is it worth making better use of compressed Jacobian format?", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/19" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkI6Yk", + "repository": "https://github.com/MetOffice/ukca", + "status": "New Issue", + "title": "Is it worth making better use of compressed Jacobian format?" + }, + { + "content": { + "number": 20, + "repository": "MetOffice/ukca", + "title": "Predict timesteps for ASAD in advance", + "type": "Issue", + "url": "https://github.com/MetOffice/ukca/issues/20" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkJEYw", + "repository": "https://github.com/MetOffice/ukca", + "status": "New Issue", + "title": "Predict timesteps for ASAD in advance" + }, + { + "assignees": [ + "t00sa" + ], + "content": { + "number": 38, + "repository": "MetOffice/jules", + "title": "Remove include directives from Fortran source files", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/38" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkJa0Y", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/jules", + "status": "In Progress", + "title": "Remove include directives from Fortran source files" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 241, + "repository": "MetOffice/lfric_core", + "title": "A generic sleep implementation", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/241" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkJj0M", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "A generic sleep implementation" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 242, + "repository": "MetOffice/lfric_core", + "title": "Time interpolation of input data with XIOS temporal type", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/242" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkJmC4", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Time interpolation of input data with XIOS temporal type" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 243, + "repository": "MetOffice/lfric_core", + "title": "Complete implementation of time-varying reading with new temporal controller object", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/243" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkJmss", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Complete implementation of time-varying reading with new temporal controller object" + }, + { + "content": { + "number": 21, + "repository": "MetOffice/moci", + "title": "Update rose-stem to run from Git", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/21" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkUkJ4", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Update rose-stem to run from Git" + }, + { + "content": { + "number": 250, + "repository": "MetOffice/lfric_core", + "title": "Even spacing of DoFs for higher-order elements", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/250" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkVtCk", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Even spacing of DoFs for higher-order elements" + }, + { + "assignees": [ + "tommbendall" + ], + "content": { + "number": 185, + "repository": "MetOffice/lfric_apps", + "title": "Kernels which write to W2 fields may not be thread-safe", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/185" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkV9b8", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Kernels which write to W2 fields may not be thread-safe" + }, + { + "assignees": [ + "tommbendall" + ], + "content": { + "number": 252, + "repository": "MetOffice/lfric_core", + "title": "Face Selectors not suitable for Not Annexed DoFs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/252" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkV97Q", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Face Selectors not suitable for Not Annexed DoFs" + }, + { + "content": { + "number": 22, + "repository": "MetOffice/moci", + "title": "Move unit tests into a single folder", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/22" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkYrHo", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Move unit tests into a single folder" + }, + { + "content": { + "number": 23, + "repository": "MetOffice/moci", + "title": "Deprecate old shellout commands", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/23" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkYtB8", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Deprecate old shellout commands" + }, + { + "content": { + "number": 24, + "repository": "MetOffice/moci", + "title": "Deprecate shellouts in postproc", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/24" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkYtVo", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Deprecate shellouts in postproc" + }, + { + "content": { + "number": 25, + "repository": "MetOffice/moci", + "title": "Deprecate shellouts from coupled drivers", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/25" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkYtbU", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Deprecate shellouts from coupled drivers" + }, + { + "assignees": [ + "alanjhewitt" + ], + "content": { + "number": 189, + "repository": "MetOffice/lfric_apps", + "title": "RADAER full domain and segmentation and OpenMP", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/189" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkZ5Ts", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "Ready for Work", + "title": "RADAER full domain and segmentation and OpenMP" + }, + { + "content": { + "number": 31, + "repository": "MetOffice/um", + "title": "Implement new irrigation scheme in JULES and UM", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/31" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkaY4Y", + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Implement new irrigation scheme in JULES and UM" + }, + { + "assignees": [ + "mo-jmanners" + ], + "content": { + "number": 15, + "repository": "MetOffice/socrates", + "title": "CMIP7 future scenario solar forcing for GA9 spectral files", + "type": "Issue", + "url": "https://github.com/MetOffice/socrates/issues/15" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkajZk", + "labels": [ + "enhancement", + "Linked Spectral" + ], + "linked pull requests": [ + "https://github.com/MetOffice/socrates/pull/16" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/socrates", + "status": "In Review", + "title": "CMIP7 future scenario solar forcing for GA9 spectral files" + }, + { + "content": { + "number": 192, + "repository": "MetOffice/lfric_apps", + "title": "lfric2lfric: run with multiple CPUs", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/192" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkavDs", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/201" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "lfric2lfric: run with multiple CPUs" + }, + { + "content": { + "number": 194, + "repository": "MetOffice/lfric_apps", + "title": "glomap_aerosol_kernel should use gh_scalar_array when available", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/194" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgka1O4", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "glomap_aerosol_kernel should use gh_scalar_array when available" + }, + { + "content": { + "number": 196, + "repository": "MetOffice/lfric_apps", + "title": "Unable to run GC6 coupled model at git_migration version of LFRic_Apps", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/196" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkdcGw", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Unable to run GC6 coupled model at git_migration version of LFRic_Apps" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 199, + "repository": "MetOffice/lfric_apps", + "title": "Add fortitude linting to the CI/CD pipeline", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/199" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkd3zs", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/200" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Add fortitude linting to the CI/CD pipeline" + }, + { + "assignees": [ + "Pierre-siddall" + ], + "content": { + "number": 257, + "repository": "MetOffice/lfric_core", + "title": "Add fortitude linting to the CI/CD pipeline", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/257" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkd304", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/258" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Add fortitude linting to the CI/CD pipeline" + }, + { + "assignees": [ + "alanjhewitt" + ], + "content": { + "number": 32, + "repository": "MetOffice/um", + "title": "Refactoring for radaer", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/32" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkeWFU", + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Refactoring for radaer" + }, + { + "assignees": [ + "maggiehendry" + ], + "content": { + "number": 41, + "repository": "MetOffice/jules", + "title": "Migrate jules_pftparm metadata to jules-shared", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/41" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkesGk", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/jules/pull/42" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "In Progress", + "title": "Migrate jules_pftparm metadata to jules-shared" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 259, + "repository": "MetOffice/lfric_core", + "title": "Vernier output not being picked up by rose-stem", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/259" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkiUS4", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Vernier output not being picked up by rose-stem" + }, + { + "assignees": [ + "allynt" + ], + "content": { + "number": 260, + "repository": "MetOffice/lfric_core", + "title": "Update configurator python code to be more robust when specifying the duplicate namelist property", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/260" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkiUcQ", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Update configurator python code to be more robust when specifying the duplicate namelist property" + }, + { + "assignees": [ + "cjohnson-pi", + "jameskent-metoffice" + ], + "content": { + "number": 206, + "repository": "MetOffice/lfric_apps", + "title": "FFSL Transport for the Linear Model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/206" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkqNrM", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "FFSL Transport for the Linear Model" + }, + { + "content": { + "number": 26, + "repository": "MetOffice/moci", + "title": "Update Utilities/mean_nemo to handle time-varying masks and make other improvements", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/26" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgks5bA", + "linked pull requests": [ + "https://github.com/MetOffice/moci/pull/28" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "Done", + "title": "Update Utilities/mean_nemo to handle time-varying masks and make other improvements" + }, + { + "content": { + "number": 27, + "repository": "MetOffice/moci", + "title": "Add Python dependency checking to the CI/CD pipeline", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/27" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkus7Q", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Add Python dependency checking to the CI/CD pipeline" + }, + { + "assignees": [ + "hsrumbold" + ], + "content": { + "number": 207, + "repository": "MetOffice/lfric_apps", + "title": "Implement new irrigation scheme into standalone JULES", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/207" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkvcFw", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Implement new irrigation scheme into standalone JULES" + }, + { + "content": { + "number": 211, + "repository": "MetOffice/lfric_apps", + "title": "No isothermal profile option for planar domain initialisation", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/211" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkwJEs", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "No isothermal profile option for planar domain initialisation" + }, + { + "content": { + "number": 212, + "repository": "MetOffice/lfric_apps", + "title": "Unphysical vertical wave amplification in non-Earth isothermal CRM setup", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/212" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkw7I4", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Unphysical vertical wave amplification in non-Earth isothermal CRM setup" + }, + { + "assignees": [ + "christophermaynard" + ], + "content": { + "number": 263, + "repository": "MetOffice/lfric_core", + "title": "Silent lfric_atm transmute script errors with PSyclone v3.2.0", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/263" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkzh-Y", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Silent lfric_atm transmute script errors with PSyclone v3.2.0" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 215, + "repository": "MetOffice/lfric_apps", + "title": "Remove j loop bdy_lyr_expl2", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/215" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkzx1k", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/223" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Remove j loop bdy_lyr_expl2" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 216, + "repository": "MetOffice/lfric_apps", + "title": "Remove j loop ex_coef", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/216" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkzyHM", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/220" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Remove j loop ex_coef" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 217, + "repository": "MetOffice/lfric_apps", + "title": "Remove j loop kmkhz_9c", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/217" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkzyuI", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/221" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Remove j loop kmkhz_9c" + }, + { + "assignees": [ + "mo-cjsmith" + ], + "content": { + "number": 218, + "repository": "MetOffice/lfric_apps", + "title": "Additional methods for switching to height-varying gravity", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/218" + }, + "id": "PVTI_lADOAGrG5M4BId8GzgkzywA", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Additional methods for switching to height-varying gravity" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 219, + "repository": "MetOffice/lfric_apps", + "title": "Remove j loop in excf_nl_9c", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/219" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgkzy5c", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/222" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Remove j loop in excf_nl_9c" + }, + { + "assignees": [ + "allynt" + ], + "content": { + "number": 265, + "repository": "MetOffice/lfric_core", + "title": "Ensure data variable in io_value_type is private", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/265" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk0laI", + "labels": [ + "enhancement" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_core/pull/274" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "In Review", + "title": "Ensure data variable in io_value_type is private" + }, + { + "assignees": [ + "allynt" + ], + "content": { + "number": 224, + "repository": "MetOffice/lfric_apps", + "title": "Use new io_value_type getter & setter", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/224" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk0oP4", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Use new io_value_type getter & setter" + }, + { + "assignees": [ + "mo-cjsmith" + ], + "content": { + "number": 226, + "repository": "MetOffice/lfric_apps", + "title": "Idealised initialisation of temperature and relative humidity profiles", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/226" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk4Z6Y", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Idealised initialisation of temperature and relative humidity profiles" + }, + { + "assignees": [ + "iboutle" + ], + "content": { + "number": 228, + "repository": "MetOffice/lfric_apps", + "title": "Add option to call implicit boundary-layer before convection", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/228" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk5HkU", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Add option to call implicit boundary-layer before convection" + }, + { + "assignees": [ + "GAndrsn" + ], + "content": { + "number": 37, + "repository": "MetOffice/um", + "title": "Address issues with missing data values in tropopause height calculation", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/37" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk5evY", + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Address issues with missing data values in tropopause height calculation" + }, + { + "assignees": [ + "oakleybrunt" + ], + "content": { + "number": 229, + "repository": "MetOffice/lfric_apps", + "title": "Missing `crayhost` switch for Genoa nodes", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/229" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk5-Zo", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Missing `crayhost` switch for Genoa nodes" + }, + { + "assignees": [ + "t00sa" + ], + "content": { + "number": 18, + "repository": "MetOffice/shumlib", + "title": "Add SHUMlib installation instructions for non-MO sites", + "type": "Issue", + "url": "https://github.com/MetOffice/shumlib/issues/18" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk9Q7I", + "labels": [ + "backlog" + ], + "repository": "https://github.com/MetOffice/shumlib", + "status": "In Progress", + "title": "Add SHUMlib installation instructions for non-MO sites" + }, + { + "content": { + "number": 17, + "repository": "MetOffice/socrates", + "title": "Add spectral file examples for other planets", + "type": "Issue", + "url": "https://github.com/MetOffice/socrates/issues/17" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk9tPw", + "repository": "https://github.com/MetOffice/socrates", + "status": "New Issue", + "title": "Add spectral file examples for other planets" + }, + { + "content": { + "number": 30, + "repository": "MetOffice/moci", + "title": "Get build of drivers and postproc to work with Git", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/30" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk-gu8", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "Get build of drivers and postproc to work with Git" + }, + { + "content": { + "number": 31, + "repository": "MetOffice/moci", + "title": "UKESM2 postproc developments", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/31" + }, + "id": "PVTI_lADOAGrG5M4BId8Gzgk-oNw", + "repository": "https://github.com/MetOffice/moci", + "status": "New Issue", + "title": "UKESM2 postproc developments" + }, + { + "assignees": [ + "Adrian-Lock" + ], + "content": { + "number": 232, + "repository": "MetOffice/lfric_apps", + "title": "Improve consistency of diagnosed TKE with diffusivity", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/232" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglGz6c", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Improve consistency of diagnosed TKE with diffusivity" + }, + { + "content": { + "number": 233, + "repository": "MetOffice/lfric_apps", + "title": "Can't write checkpoints from coupled model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/233" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglHGc4", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Can't write checkpoints from coupled model" + }, + { + "assignees": [ + "DanCopsey" + ], + "content": { + "number": 234, + "repository": "MetOffice/lfric_apps", + "title": "Inland basin flow coupling", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/234" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglHWBQ", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 30th January 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-03-04T00:00:00Z", + "title": "Spring 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Inland basin flow coupling" + }, + { + "assignees": [ + "tinyendian" + ], + "content": { + "number": 46, + "repository": "MetOffice/jules", + "title": "Add ESNZ site to JULES Rose Stem configuration", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/46" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglI6qo", + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Add ESNZ site to JULES Rose Stem configuration" + }, + { + "assignees": [ + "t00sa" + ], + "content": { + "number": 19, + "repository": "MetOffice/shumlib", + "title": "Fix environment variable handling bug in regression tests", + "type": "Issue", + "url": "https://github.com/MetOffice/shumlib/issues/19" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglJ-z4", + "labels": [ + "bug" + ], + "linked pull requests": [ + "https://github.com/MetOffice/shumlib/pull/20" + ], + "repository": "https://github.com/MetOffice/shumlib", + "status": "Done", + "title": "Fix environment variable handling bug in regression tests" + }, + { + "assignees": [ + "harry-shepherd" + ], + "content": { + "number": 236, + "repository": "MetOffice/lfric_apps", + "title": "XIOS/OASIS module for lfric_coupled was not updated for vn3.0", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/236" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglK4GI", + "labels": [ + "bug" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/254" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "XIOS/OASIS module for lfric_coupled was not updated for vn3.0" + }, + { + "assignees": [ + "maggiehendry" + ], + "content": { + "number": 49, + "repository": "MetOffice/jules", + "title": "Migrate jules_radiation metadata to jules-shared", + "type": "Issue", + "url": "https://github.com/MetOffice/jules/issues/49" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglNDgY", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/jules", + "status": "New Issue", + "title": "Migrate jules_radiation metadata to jules-shared" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 240, + "repository": "MetOffice/lfric_apps", + "title": "CoMorph microphysics changes for CASIM 2nd ice category", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/240" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQTGQ", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CoMorph microphysics changes for CASIM 2nd ice category" + }, + { + "content": { + "number": 12, + "repository": "MetOffice/shumlib", + "title": "Address ignored fortitude rules for Fortran", + "type": "Issue", + "url": "https://github.com/MetOffice/shumlib/issues/12" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQdDQ", + "repository": "https://github.com/MetOffice/shumlib", + "status": "New Issue", + "title": "Address ignored fortitude rules for Fortran" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 241, + "repository": "MetOffice/lfric_apps", + "title": "CoMorph transport and detrainment of CASIM number concentrations", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/241" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQjec", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CoMorph transport and detrainment of CASIM number concentrations" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 242, + "repository": "MetOffice/lfric_apps", + "title": "PC2 homogeneous forcing by turbulent horizontal diffusion", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/242" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQmbU", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "PC2 homogeneous forcing by turbulent horizontal diffusion" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 243, + "repository": "MetOffice/lfric_apps", + "title": "Impose max limit on in-cloud water-content in pc2_checks", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/243" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQoX4", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Impose max limit on in-cloud water-content in pc2_checks" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 244, + "repository": "MetOffice/lfric_apps", + "title": "Limit numerical vertical diffusion of liquid-cloud in PC2", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/244" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQtgk", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Limit numerical vertical diffusion of liquid-cloud in PC2" + }, + { + "content": { + "number": 272, + "repository": "MetOffice/lfric_core", + "title": "Logging present in unit-tests", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/272" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQxs0", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Logging present in unit-tests" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 247, + "repository": "MetOffice/lfric_apps", + "title": "Accurately-reversible PC2 homogeneous forcing option", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/247" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQykg", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Accurately-reversible PC2 homogeneous forcing option" + }, + { + "assignees": [ + "mo-lottieturner" + ], + "content": { + "number": 248, + "repository": "MetOffice/lfric_apps", + "title": "Vertical regridding in lfric2lfric", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/248" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQ1Jw", + "labels": [ + "enhancement", + "LFRic Inputs" + ], + "linked pull requests": [ + "https://github.com/MetOffice/lfric_apps/pull/253" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "In Review", + "title": "Vertical regridding in lfric2lfric" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 249, + "repository": "MetOffice/lfric_apps", + "title": "Improved PC2 \"smooth\" initiation option", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/249" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQ1s4", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Improved PC2 \"smooth\" initiation option" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 250, + "repository": "MetOffice/lfric_apps", + "title": "Bug-fixes for \"no ice in turb\" option used with CASIM", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/250" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQ4_A", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 29th May 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-07-01T00:00:00Z", + "title": "Summer 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Bug-fixes for \"no ice in turb\" option used with CASIM" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 251, + "repository": "MetOffice/lfric_apps", + "title": "CoMorph KGO-breaking refactoring", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/251" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQ7aY", + "labels": [ + "enhancement", + "KGO" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CoMorph KGO-breaking refactoring" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 252, + "repository": "MetOffice/lfric_apps", + "title": "CoMorph minor bug-fixes", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/252" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglQ88g", + "labels": [ + "bug" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CoMorph minor bug-fixes" + }, + { + "assignees": [ + "MetBenjaminWent" + ], + "content": { + "number": 255, + "repository": "MetOffice/lfric_apps", + "title": "Adjust the bdy_lyr local script, and housekeeping", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/255" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglRZT0", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Adjust the bdy_lyr local script, and housekeeping" + }, + { + "assignees": [ + "stevemullerworth" + ], + "content": { + "number": 256, + "repository": "MetOffice/lfric_apps", + "title": "Fix coupled restarts in global coupled model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/256" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglRfro", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Fix coupled restarts in global coupled model" + }, + { + "assignees": [ + "EdHone" + ], + "content": { + "number": 273, + "repository": "MetOffice/lfric_core", + "title": "Fix output of intermediate checkpoints in global coupled model", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_core/issues/273" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglRj1c", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_core", + "status": "New Issue", + "title": "Fix output of intermediate checkpoints in global coupled model" + }, + { + "content": { + "number": 33, + "repository": "MetOffice/moci", + "title": "Add support for 5D variables to `mean_nemo`", + "type": "Issue", + "url": "https://github.com/MetOffice/moci/issues/33" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglRrgs", + "linked pull requests": [ + "https://github.com/MetOffice/moci/pull/34" + ], + "repository": "https://github.com/MetOffice/moci", + "status": "Done", + "title": "Add support for 5D variables to `mean_nemo`" + }, + { + "assignees": [ + "hiker" + ], + "content": { + "number": 40, + "repository": "MetOffice/um", + "title": "Adding Fab Build Script", + "type": "Issue", + "url": "https://github.com/MetOffice/um/issues/40" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglTiLQ", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/um", + "status": "New Issue", + "title": "Adding Fab Build Script" + }, + { + "assignees": [ + "MichaelWhitall" + ], + "content": { + "number": 258, + "repository": "MetOffice/lfric_apps", + "title": "CASIM coupling to prognostic precipitation fraction used with CoMorph", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/258" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglUyP8", + "labels": [ + "enhancement" + ], + "milestone": { + "description": "Code Review deadline is 25th September 2026 (SciTech review to be completed by this date)", + "dueOn": "2026-11-04T00:00:00Z", + "title": "Autumn 2026" + }, + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "CASIM coupling to prognostic precipitation fraction used with CoMorph" + }, + { + "content": { + "number": 259, + "repository": "MetOffice/lfric_apps", + "title": "Checkpointing scalars and arrays in a generic way", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/259" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglU5wo", + "labels": [ + "enhancement" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Checkpointing scalars and arrays in a generic way" + }, + { + "content": { + "number": 263, + "repository": "MetOffice/lfric_apps", + "title": "Short-circuit evaluation in Fortran IF statement leads to segfault with Intel OneAPI compiler", + "type": "Issue", + "url": "https://github.com/MetOffice/lfric_apps/issues/263" + }, + "id": "PVTI_lADOAGrG5M4BId8GzglYvSY", + "labels": [ + "bug" + ], + "repository": "https://github.com/MetOffice/lfric_apps", + "status": "New Issue", + "title": "Short-circuit evaluation in Fortran IF statement leads to segfault with Intel OneAPI compiler" + } + ], + "totalCount": 210 +} diff --git a/gh_review_project/test/test.json b/gh_review_project/test/pr.json similarity index 99% rename from gh_review_project/test/test.json rename to gh_review_project/test/pr.json index 6db02cfd..c8f844ee 100644 --- a/gh_review_project/test/test.json +++ b/gh_review_project/test/pr.json @@ -5927,4 +5927,4 @@ } ], "totalCount": 227 -} \ No newline at end of file +} diff --git a/gh_review_project/workload.py b/gh_review_project/workload.py index cc5a4b5d..7597b180 100644 --- a/gh_review_project/workload.py +++ b/gh_review_project/workload.py @@ -166,7 +166,7 @@ def parse_args(): Read command line args """ - testfile = Path(__file__).parent / "test" / "test.json" + testfile = Path(__file__).parent / "test" / "pr.json" parser = argparse.ArgumentParser( "Create tables of review workload based on Simulation Systems Review Tracker" From 1c401baf9114f49ae0fce5d53c5e17d0ce62f385 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 16 Feb 2026 11:06:23 +0000 Subject: [PATCH 04/11] clear unfinished issues --- gh_review_project/finish_milestone.py | 95 ++++++++++++++++++--------- gh_review_project/review_project.py | 46 ++++++++----- 2 files changed, 94 insertions(+), 47 deletions(-) diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index 1d01c2de..c9a82153 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -25,26 +25,28 @@ def print_banner(message: str) -> None: print("=" * len(message)) -def still_open(open_prs: dict, current_milestone: str) -> int: - """ - Report on all open pull requests for the current milestone +def count_items(data: dict, message: str): """ + For a dictionary of pull requests or issues keyed by repository, count + per repo and return the total. Print details of items found. - print_banner(f"Checking for open pull requests for {current_milestone}") + data: dict, lists of project items keyed by repository + message: str, message to display + """ total = 0 - for repo in open_prs: + for repo in data: print(f"{repo} \n{'-'*len(repo)}") - for pr in open_prs[repo]: - print(f"{pr.status: <18} #{pr.number: <5} {pr.title}") + for item in data[repo]: + print(f"{item.status: <18} #{item.number: <5} {item.title}") - count = len(open_prs[repo]) - print(f"-> {count} open pull request(s) in {repo} \n") + count = len(data[repo]) + print(f"-> {count} {message} in {repo} \n") total += count if total == 0: - print(f"No open pull requests for {current_milestone} \n") + print(f"No {message} \n") return total @@ -65,45 +67,47 @@ def closed_other( continue elif milestone == "None": - print(f"Setting pull requests with no milestone " f"to {current_milestone}") + print(f"Setting pull requests with no milestone to {current_milestone}") for repo in closed_prs[milestone]: for pr in closed_prs[milestone][repo]: pr.modify_milestone(current_milestone, dry_run) else: - for repo in closed_prs[milestone]: - print(f"{repo} \n{'-' * len(repo)}") - for pr in closed_prs[milestone][repo]: - print(f"#{pr.number : <5} {pr.title}") - - count = len(closed_prs[milestone][repo]) - print( - f"-> {count} closed pull request(s) in {repo} at milestone {milestone} \n" - ) - total += count + if len(closed_prs[milestone]): + total = count_items(closed_prs[milestone], "closed pull requests") return total -def check_ready(data: ProjectData, milestone: str, dry_run: bool = False) -> None: +def check_ready( + reviews: ProjectData, issues: ProjectData, milestone: str, dry_run: bool = False +) -> None: """ Check if the milestone is ready to be closed by confirming that: * all pull requests for this milestone have been completed * all closed pull requests in the project are in this milestone. + * all In Review issues for this milestone have been completed Give the user the choice to continue regardless since there may be valid exceptions. """ - open_prs = data.get_milestone(milestone=milestone, status="open") - closed_prs = data.get_all_milestones(status="closed") - total_open = still_open(open_prs, milestone) + print_banner(f"Checking for open pull requests for {milestone}") + open_prs = reviews.get_milestone(milestone=milestone, status="open") + total_open = count_items(open_prs, "open pull requests") + + closed_prs = reviews.get_all_milestones(status="closed") total_other = closed_other(closed_prs, milestone, dry_run) - if total_open or total_other: + print_banner(f"Checking for issues in review for {milestone}") + open_issues = issues.get_milestone(milestone=milestone, status="In Review") + total_issues_in_review = count_items(open_issues, "In Review issues") + + if total_open or total_other or total_issues_in_review: print("=" * 50) print( - f"{total_open} open pull request(s) in {milestone} and " - f"{total_other} closed pull request(s) not in {milestone}." + f"{total_open} open pull request(s) in {milestone}. \n" + f"{total_other} closed pull request(s) not in {milestone}. \n" + f"{total_issues_in_review} issues in {milestone} with status In Review. " ) cont = input("Would you like to continue with closing this milestone? (y/n) ") @@ -131,6 +135,24 @@ def report(data: ProjectData, milestone: str) -> None: print(f"{total} pull requests completed in {milestone}") +def tidy_issues(data: ProjectData, milestone: str, dry_run: bool = False) -> None: + # Check for uncompleted issues at milestone, remove milestone and leave a comment + + print_banner(f"Removing uncompleted issues from {milestone}") + + issues = data.get_milestone(milestone=milestone, status="open") + comment = ( + f"[Automatic Update]\n\nThe {milestone} milestone is being closed. " + f"Please review this issue and either select a new milestone or " + f"close it as appropriate. Please contact @MetOffice/ssdteam if " + f"you think there has been an error.\n\n Thanks" + ) + for repo in issues: + for issue in issues[repo]: + issue.add_comment(comment, dry_run=dry_run) + issue.modify_milestone(milestone=None, dry_run=dry_run) + + def parse_args(): """ Read command line args @@ -187,17 +209,26 @@ def main( review_data = ProjectData.from_file(REVIEW_ID, file / "pr.json") issue_data = ProjectData.from_file(ISSUE_ID, file / "issue.json") else: - review_data = ProjectData.from_github(REVIEW_ID, capture_project, file/ "pr.json") - issue_data = ProjectData.from_github(ISSUE_ID, capture_project, file/ "issue.json") + review_data = ProjectData.from_github( + REVIEW_ID, capture_project, file / "pr.json" + ) + issue_data = ProjectData.from_github( + ISSUE_ID, capture_project, file / "issue.json" + ) # Process data and report on status - check_ready(review_data, milestone, dry) - report(review_data, milestone) + check_ready(review_data, issue_data, milestone, dry) + + # Tidy outstanding issues + tidy_issues(issue_data, milestone, dry) # Archive pull requests at the milestone print_banner(f"Archiving Milestone {milestone}") review_data.archive_milestone(milestone, dry_run=dry) + # Print report as final step so its visible + report(review_data, milestone) + # Close milestones # TODO: run this command from here, rather than prompting user. Leaving # like this until script feels stable. diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 903d7d8e..08973fee 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -56,18 +56,19 @@ def from_github( """ Retrieve data from GitHub API and initialise the class. + project: number of GitHub project capture: True if data should be stored to a test file. file: Path to the test file to be written to. """ - print("Retrieving project data from GitHub") + print(f"Retrieving data from GitHub project {project}") command = f"gh project item-list {project} -L 500 --owner {PROJECT_OWNER} --format json" output = run_command(command) raw_data = json.loads(output.stdout) # Remove body as is large before working with or storing data. - for pr in raw_data["items"]: - pr["content"].pop("body") + for item in raw_data["items"]: + item["content"].pop("body") if capture: if file: @@ -97,7 +98,7 @@ def from_file(cls, project: int, file: Path) -> ProjectData: def _extract_data(cls, raw_data: dict) -> list: """ Extract useful information from the raw data and - store it in a list of PullRequest objects. + store it in a list of ProjectItem objects. raw_data: github data from the project """ @@ -127,6 +128,13 @@ def _extract_data(cls, raw_data: dict) -> list: repo=item_data["content"]["repository"].replace("MetOffice/", ""), ) + if "linked pull requests" in item_data: + for pr in item_data["linked pull requests"]: + # Store PR number, not whole link + item.linked_prs.append(pr.split("/")[-1]) + else: + raise Exception(f"Unknown item type {item_data['content']['type']}") + if "status" in item_data: item.status = item_data["status"] @@ -260,6 +268,7 @@ def archive_milestone(self, milestone: str, dry_run: bool = False) -> None: for repo in closed: for item in closed[repo]: item.archive(self.project, dry_run) + print(f"Archived {len(closed[repo])} items for {repo}") class ProjectItem: @@ -304,7 +313,6 @@ def archive(self, project: int, dry_run: bool = False) -> None: if dry_run: print(f"[DRY RUN] {message: <40} {command}") else: - print(message) run_command(command) def modify_milestone(self, milestone: str, dry_run: bool = False) -> None: @@ -315,7 +323,12 @@ def modify_milestone(self, milestone: str, dry_run: bool = False) -> None: dry_run, If true, print the command rather than making a change. """ - command = f"gh {self.command_type} edit {self.number} --repo='{PROJECT_OWNER}/{self.repo}' --milestone='{milestone}'" + command = f"gh {self.command_type} edit {self.number} --repo='{PROJECT_OWNER}/{self.repo}'" + if milestone: + command += f" --milestone='{milestone}'" + else: + command += f" --remove-milestone" + message = f"Changing milestone for #{self.number} in {self.repo}" if dry_run: @@ -338,6 +351,8 @@ def add_comment(self, text: str, dry_run: bool = False) -> None: message = f"Adding comment to #{self.number} in {self.repo}" if dry_run: + # text can be long, don't print it all + command = command.replace(f"--body='{text}", "--body=''") print(f"[DRY RUN] {message: <50} {command}") else: print(message) @@ -349,8 +364,6 @@ class PullRequest(ProjectItem): Class for an individual pull request to hold key information and provide functions to modify the pull request. - - assignee: assignee of the pull request, which is the developer scitechReview: user assigned to sciTech review the pull request codeReview: user assigned to code review the pull request """ @@ -379,13 +392,16 @@ class Issue(ProjectItem): Class for an individual issue to hold key information and provide functions to modify the issue. - id: github ID for the pull request - number: number of the pull request in the repository - title: title of the pull request - repo: repository where the pull request is located - status: status of the pull request - milestone: title of the milestone - assignee: assignee of the pull request, which is the developer + linked pr: number of linked pull request """ open_states = ["New Issue", "Ready for Work", "In Progress", "In Review"] + + command_type = "issue" + + def __init__( + self, id: str = None, number: str = None, title: str = None, repo: str = None + ): + super().__init__(id, number, title, repo) + + self.linked_prs = [] From 372ca37a457156b6ae79fcd5ddfe9a64383d4537 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 16 Feb 2026 13:51:55 +0000 Subject: [PATCH 05/11] move counting into project class --- gh_review_project/cr_deadline.py | 88 +++++++++++++++++++++++++++ gh_review_project/finish_milestone.py | 88 ++++++++++----------------- gh_review_project/review_project.py | 26 +++++++- 3 files changed, 146 insertions(+), 56 deletions(-) create mode 100644 gh_review_project/cr_deadline.py diff --git a/gh_review_project/cr_deadline.py b/gh_review_project/cr_deadline.py new file mode 100644 index 00000000..42d9ecf0 --- /dev/null +++ b/gh_review_project/cr_deadline.py @@ -0,0 +1,88 @@ +import argparse +from pathlib import Path +from review_project import ProjectData, ISSUE_ID + + +def remove_milestone(issue_data: ProjectData, milestone: str, dry_run: bool=False) -> int: + + open_issues = issue_data.get_milestone(milestone=milestone, status="open") + + comment = ( + f"[Automatic Update]\n\nThe Code Review deadline for the {milestone} has " + f"passed. As this issue does not have a linked pull request it has been " + f"removed from the milestone. Please review this issue and either select " + f"a new milestone or close it as appropriate. Please contact " + f"@MetOffice/ssdteam if you think there has been an error.\n\n Thanks" + ) + + for repo in open_issues: + for issue in open_issues[repo]: + if not issue.linked_prs: + issue.add_comment(comment, dry_run=dry_run) + issue.modify_milestone(milestone=None, dry_run=dry_run) + + +def parse_args(): + """ + Read command line args + """ + + testfile_path = Path(__file__).parent / "test" + + parser = argparse.ArgumentParser( + "Clean up uncompleted issues from a milestone." + ) + + parser.add_argument("--milestone", help="Milestone to archive and close.") + parser.add_argument( + "--test", + action="store_true", + help="Use test input files.", + ) + parser.add_argument( + "--capture_project", + action="store_true", + help="Capture the current project status into the test file", + ) + parser.add_argument( + "--file", + default=testfile_path, + help="Filepath to test data for either capturing the project status, " + "or use as input data.", + ) + parser.add_argument( + "--dry", + action="store_true", + help="Dry run. Print commands, don't action them. Always true when " + "running with test data.", + ) + + args = parser.parse_args() + + args.file = Path(args.file) + args.file = args.file.expanduser().resolve() + + if args.test: + args.dry = True + + return args + + +def main( + milestone: str, test: bool, capture_project: bool, file: Path, dry: bool +) -> None: + + # Get milestone data + if test: + issue_data = ProjectData.from_file(ISSUE_ID, file / "issue.json") + else: + issue_data = ProjectData.from_github( + ISSUE_ID, capture_project, file / "issue.json" + ) + + remove_milestone(issue_data, milestone=milestone, dry_run=dry) + + +if __name__ == "__main__": + args = parse_args() + main(args.milestone, args.test, args.capture_project, args.file, args.dry) diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index c9a82153..7f5f98d8 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -25,62 +25,28 @@ def print_banner(message: str) -> None: print("=" * len(message)) -def count_items(data: dict, message: str): - """ - For a dictionary of pull requests or issues keyed by repository, count - per repo and return the total. Print details of items found. - - data: dict, lists of project items keyed by repository - message: str, message to display - """ - - total = 0 - - for repo in data: - print(f"{repo} \n{'-'*len(repo)}") - for item in data[repo]: - print(f"{item.status: <18} #{item.number: <5} {item.title}") - - count = len(data[repo]) - print(f"-> {count} {message} in {repo} \n") - total += count - - if total == 0: - print(f"No {message} \n") - - return total - - def closed_other( - closed_prs: dict, current_milestone: str, dry_run: bool = False -) -> int: - """ - Report on closed pull requests not at the current milestone. + reviews: ProjectData, current_milestone: str, dry_run: bool = False +) -> None: """ + Set a milestone for closed PRs without one. - print_banner(f"Checking for closed pull requests not for {current_milestone}") - - total = 0 - - for milestone in closed_prs: - if milestone == current_milestone: - continue + reviews: ProjectData from the Review Tracker Project + current_milestone: Milestone being closed + dry_run: If true, do not actually modify the milestone + """ - elif milestone == "None": - print(f"Setting pull requests with no milestone to {current_milestone}") - for repo in closed_prs[milestone]: - for pr in closed_prs[milestone][repo]: - pr.modify_milestone(current_milestone, dry_run) + print_banner(f"Setting pull requests with no milestone to {current_milestone}") - else: - if len(closed_prs[milestone]): - total = count_items(closed_prs[milestone], "closed pull requests") + closed_prs = reviews.get_milestone(milestone="None", status="closed") - return total + for repo in closed_prs: + for pr in closed_prs[repo]: + pr.modify_milestone(current_milestone, dry_run) def check_ready( - reviews: ProjectData, issues: ProjectData, milestone: str, dry_run: bool = False + reviews: ProjectData, issues: ProjectData, milestone: str ) -> None: """ Check if the milestone is ready to be closed by confirming that: @@ -92,15 +58,24 @@ def check_ready( exceptions. """ print_banner(f"Checking for open pull requests for {milestone}") - open_prs = reviews.get_milestone(milestone=milestone, status="open") - total_open = count_items(open_prs, "open pull requests") - - closed_prs = reviews.get_all_milestones(status="closed") - total_other = closed_other(closed_prs, milestone, dry_run) + total_open = reviews.count_items(milestone=milestone, status="open", message="open pull requests") + if total_open == 0: + print("No open pull requests\n") print_banner(f"Checking for issues in review for {milestone}") - open_issues = issues.get_milestone(milestone=milestone, status="In Review") - total_issues_in_review = count_items(open_issues, "In Review issues") + total_issues_in_review = issues.count_items(milestone=milestone, status="In Review", message="In Review issues") + if total_issues_in_review == 0: + print("No issues in review\n") + + print_banner(f"Checking for closed pull requests not set to {milestone}") + total_other = 0 + for milestone in reviews.milestones: + if milestone == milestone: + continue + else: + total_other += reviews.count_items(milestone=milestone, status="closed", message="closed pull requests") + if total_other == 0: + print("All closed pull requests are in this milestone\n") if total_open or total_other or total_issues_in_review: print("=" * 50) @@ -216,8 +191,11 @@ def main( ISSUE_ID, capture_project, file / "issue.json" ) + # Set a milestone on closed PRs + closed_other(review_data, milestone, dry) + # Process data and report on status - check_ready(review_data, issue_data, milestone, dry) + check_ready(review_data, issue_data, milestone) # Tidy outstanding issues tidy_issues(issue_data, milestone, dry) diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 08973fee..aeec7f1d 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -268,7 +268,31 @@ def archive_milestone(self, milestone: str, dry_run: bool = False) -> None: for repo in closed: for item in closed[repo]: item.archive(self.project, dry_run) - print(f"Archived {len(closed[repo])} items for {repo}") + print(f"--> Archived {len(closed[repo])} items for {repo}") + + def count_items(self, milestone: str, repository: str = "all", status:str = "all", message: str = None) -> int: + """ + Count items filtered using the provided information. Print details of items found. + + message: str, message to display. If none then assume no prints. + """ + + total = 0 + + data = self.get_milestone(milestone=milestone, status=status) + + for repo in data: + if repo is repository or repository == "all": + if message: + print(f"{repo} \n{'-' * len(repo)}") + for item in data[repo]: + print(f"{item.status: <18} #{item.number: <5} {item.title}") + + count = len(data[repo]) + total += count + print(f"-> {count} {message} in {repo} \n") if message else None + + return total class ProjectItem: From 3e549de96e7d8bfda2dd40a1f0e89495078e89d9 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 16 Feb 2026 13:55:11 +0000 Subject: [PATCH 06/11] update help --- gh_review_project/cr_deadline.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gh_review_project/cr_deadline.py b/gh_review_project/cr_deadline.py index 42d9ecf0..c22a681a 100644 --- a/gh_review_project/cr_deadline.py +++ b/gh_review_project/cr_deadline.py @@ -30,10 +30,11 @@ def parse_args(): testfile_path = Path(__file__).parent / "test" parser = argparse.ArgumentParser( - "Clean up uncompleted issues from a milestone." + "Changes to the Simulation System projects required at the code" + "review deadline." ) - parser.add_argument("--milestone", help="Milestone to archive and close.") + parser.add_argument("--milestone", help="Milestone being released") parser.add_argument( "--test", action="store_true", From 1164cd0d39e0e80e84beba295c7109c4a438e6fd Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 16 Feb 2026 14:01:06 +0000 Subject: [PATCH 07/11] black --- gh_review_project/cr_deadline.py | 4 +++- gh_review_project/finish_milestone.py | 24 +++++++++++++++--------- gh_review_project/review_project.py | 8 +++++++- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/gh_review_project/cr_deadline.py b/gh_review_project/cr_deadline.py index c22a681a..b268da5e 100644 --- a/gh_review_project/cr_deadline.py +++ b/gh_review_project/cr_deadline.py @@ -3,7 +3,9 @@ from review_project import ProjectData, ISSUE_ID -def remove_milestone(issue_data: ProjectData, milestone: str, dry_run: bool=False) -> int: +def remove_milestone( + issue_data: ProjectData, milestone: str, dry_run: bool = False +) -> int: open_issues = issue_data.get_milestone(milestone=milestone, status="open") diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index 7f5f98d8..979e23af 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -45,9 +45,7 @@ def closed_other( pr.modify_milestone(current_milestone, dry_run) -def check_ready( - reviews: ProjectData, issues: ProjectData, milestone: str -) -> None: +def check_ready(reviews: ProjectData, issues: ProjectData, milestone: str) -> None: """ Check if the milestone is ready to be closed by confirming that: * all pull requests for this milestone have been completed @@ -58,12 +56,16 @@ def check_ready( exceptions. """ print_banner(f"Checking for open pull requests for {milestone}") - total_open = reviews.count_items(milestone=milestone, status="open", message="open pull requests") + total_open = reviews.count_items( + milestone=milestone, status="open", message="open pull requests" + ) if total_open == 0: print("No open pull requests\n") print_banner(f"Checking for issues in review for {milestone}") - total_issues_in_review = issues.count_items(milestone=milestone, status="In Review", message="In Review issues") + total_issues_in_review = issues.count_items( + milestone=milestone, status="In Review", message="In Review issues" + ) if total_issues_in_review == 0: print("No issues in review\n") @@ -73,7 +75,9 @@ def check_ready( if milestone == milestone: continue else: - total_other += reviews.count_items(milestone=milestone, status="closed", message="closed pull requests") + total_other += reviews.count_items( + milestone=milestone, status="closed", message="closed pull requests" + ) if total_other == 0: print("All closed pull requests are in this milestone\n") @@ -110,12 +114,14 @@ def report(data: ProjectData, milestone: str) -> None: print(f"{total} pull requests completed in {milestone}") -def tidy_issues(data: ProjectData, milestone: str, dry_run: bool = False) -> None: - # Check for uncompleted issues at milestone, remove milestone and leave a comment +def tidy_issues(issue_data: ProjectData, milestone: str, dry_run: bool = False) -> None: + """ + Remove any outstanding open issues from the current milestone. + """ print_banner(f"Removing uncompleted issues from {milestone}") - issues = data.get_milestone(milestone=milestone, status="open") + issues = issue_data.get_milestone(milestone=milestone, status="open") comment = ( f"[Automatic Update]\n\nThe {milestone} milestone is being closed. " f"Please review this issue and either select a new milestone or " diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index aeec7f1d..9c9ce8b6 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -270,7 +270,13 @@ def archive_milestone(self, milestone: str, dry_run: bool = False) -> None: item.archive(self.project, dry_run) print(f"--> Archived {len(closed[repo])} items for {repo}") - def count_items(self, milestone: str, repository: str = "all", status:str = "all", message: str = None) -> int: + def count_items( + self, + milestone: str, + repository: str = "all", + status: str = "all", + message: str = None, + ) -> int: """ Count items filtered using the provided information. Print details of items found. From 598d347d6faad1c5a3bd66b8dfbc39150a219f9b Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Tue, 17 Feb 2026 08:02:29 +0000 Subject: [PATCH 08/11] tweaks --- gh_review_project/cr_deadline.py | 1 + gh_review_project/review_project.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gh_review_project/cr_deadline.py b/gh_review_project/cr_deadline.py index b268da5e..4ab0fdad 100644 --- a/gh_review_project/cr_deadline.py +++ b/gh_review_project/cr_deadline.py @@ -18,6 +18,7 @@ def remove_milestone( ) for repo in open_issues: + print(f"\nRemoving issues in {repo}") for issue in open_issues[repo]: if not issue.linked_prs: issue.add_comment(comment, dry_run=dry_run) diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index 9c9ce8b6..bf9d0b74 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -382,7 +382,7 @@ def add_comment(self, text: str, dry_run: bool = False) -> None: if dry_run: # text can be long, don't print it all - command = command.replace(f"--body='{text}", "--body=''") + command = command.replace(f"--body='{text}'", "--body=...") print(f"[DRY RUN] {message: <50} {command}") else: print(message) From c2844a5c7386982f3177eb4152b61fc34c0408a6 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Tue, 17 Feb 2026 11:47:12 +0000 Subject: [PATCH 09/11] CR response --- gh_review_project/cr_deadline.py | 4 ++++ gh_review_project/finish_milestone.py | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/gh_review_project/cr_deadline.py b/gh_review_project/cr_deadline.py index 4ab0fdad..d0b34717 100644 --- a/gh_review_project/cr_deadline.py +++ b/gh_review_project/cr_deadline.py @@ -6,6 +6,10 @@ def remove_milestone( issue_data: ProjectData, milestone: str, dry_run: bool = False ) -> int: + """ + Remove the milestone from all open issues that do not have any linked PRs + attached to them. Leave a comment explaining why. + """ open_issues = issue_data.get_milestone(milestone=milestone, status="open") diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index 979e23af..06ec9528 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -45,7 +45,7 @@ def closed_other( pr.modify_milestone(current_milestone, dry_run) -def check_ready(reviews: ProjectData, issues: ProjectData, milestone: str) -> None: +def check_ready(reviews: ProjectData, issues: ProjectData, current_milestone: str) -> None: """ Check if the milestone is ready to be closed by confirming that: * all pull requests for this milestone have been completed @@ -55,24 +55,24 @@ def check_ready(reviews: ProjectData, issues: ProjectData, milestone: str) -> No Give the user the choice to continue regardless since there may be valid exceptions. """ - print_banner(f"Checking for open pull requests for {milestone}") + print_banner(f"Checking for open pull requests for {current_milestone}") total_open = reviews.count_items( - milestone=milestone, status="open", message="open pull requests" + milestone=current_milestone, status="open", message="open pull requests" ) if total_open == 0: print("No open pull requests\n") - print_banner(f"Checking for issues in review for {milestone}") + print_banner(f"Checking for issues in review for {current_milestone}") total_issues_in_review = issues.count_items( - milestone=milestone, status="In Review", message="In Review issues" + milestone=current_milestone, status="In Review", message="In Review issues" ) if total_issues_in_review == 0: print("No issues in review\n") - print_banner(f"Checking for closed pull requests not set to {milestone}") + print_banner(f"Checking for closed pull requests not set to {current_milestone}") total_other = 0 for milestone in reviews.milestones: - if milestone == milestone: + if milestone == current_milestone: continue else: total_other += reviews.count_items( @@ -84,9 +84,9 @@ def check_ready(reviews: ProjectData, issues: ProjectData, milestone: str) -> No if total_open or total_other or total_issues_in_review: print("=" * 50) print( - f"{total_open} open pull request(s) in {milestone}. \n" - f"{total_other} closed pull request(s) not in {milestone}. \n" - f"{total_issues_in_review} issues in {milestone} with status In Review. " + f"{total_open} open pull request(s) in {current_milestone}. \n" + f"{total_other} closed pull request(s) not in {current_milestone}. \n" + f"{total_issues_in_review} issues in {current_milestone} with status In Review. " ) cont = input("Would you like to continue with closing this milestone? (y/n) ") From a7c5fd2f501c27a1dc85a32d66bc032368014f2e Mon Sep 17 00:00:00 2001 From: Jenny Hickson <61183013+jennyhickson@users.noreply.github.com> Date: Tue, 17 Feb 2026 11:47:46 +0000 Subject: [PATCH 10/11] Update gh_review_project/review_project.py Co-authored-by: James Bruten <109733895+james-bruten-mo@users.noreply.github.com> --- gh_review_project/review_project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gh_review_project/review_project.py b/gh_review_project/review_project.py index bf9d0b74..a5d9ee36 100644 --- a/gh_review_project/review_project.py +++ b/gh_review_project/review_project.py @@ -56,7 +56,7 @@ def from_github( """ Retrieve data from GitHub API and initialise the class. - project: number of GitHub project + project: GitHub Project ID Number capture: True if data should be stored to a test file. file: Path to the test file to be written to. """ From d65f146a89e214c2aad2bafd69d6d494a56525aa Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Tue, 17 Feb 2026 11:48:50 +0000 Subject: [PATCH 11/11] black --- gh_review_project/finish_milestone.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gh_review_project/finish_milestone.py b/gh_review_project/finish_milestone.py index 06ec9528..6c5f5fdd 100644 --- a/gh_review_project/finish_milestone.py +++ b/gh_review_project/finish_milestone.py @@ -45,7 +45,9 @@ def closed_other( pr.modify_milestone(current_milestone, dry_run) -def check_ready(reviews: ProjectData, issues: ProjectData, current_milestone: str) -> None: +def check_ready( + reviews: ProjectData, issues: ProjectData, current_milestone: str +) -> None: """ Check if the milestone is ready to be closed by confirming that: * all pull requests for this milestone have been completed