diff --git a/.agents/skills/closing-obsolete-issues/SKILL.md b/.agents/skills/closing-obsolete-issues/SKILL.md new file mode 100644 index 00000000000..f196d5e28c3 --- /dev/null +++ b/.agents/skills/closing-obsolete-issues/SKILL.md @@ -0,0 +1,49 @@ +--- +name: closing-obsolete-issues +description: Find and close obsolete, stale, or not reproducible issues in the flutter/devtools repository. +--- + +# Closing Obsolete Issues + +Use this skill to find old, outdated issues in the `flutter/devtools` repository that can be closed because they have been fixed, are stale, obsolete, or not reproducible. + +## Instructions + +1. **Identify Target Issues**: + - Use the GitHub CLI (`gh`) to search for the oldest open issues. + - Use any label that the user gives you, or none if the user does not specify any issue labels. + - Sort by creation date (`created-asc`) or last update (`updated-asc`) to find the most likely candidates for being outdated. + - Fetch at least 20-30 candidates. + - Example command (with label): `gh issue list --repo flutter/devtools --search "label:bug is:open sort:created-asc" --limit 30 | cat` + - Example command (without label): `gh issue list --repo flutter/devtools --search "is:open sort:created-asc" --limit 30 | cat` + +2. **Investigate Status**: + - For each candidate, analyze its description and comments. + - **Pro Tip**: Use the bundled script `scripts/fetch_issue_details.sh ` to get a comprehensive view of the issue and its comments. + - Compare the issue's request or reported bug with the current state of the codebase. + - Refer to `references/rationale_templates.md` for a library of common reasons issues become outdated in DevTools. + - **Safety Rule**: Do not assume a bug is fixed or obsolete just because the screen has been updated or the file modified. Verify if the specific bug behavior is still possible. Valid bugs or feature requests should not be closed as stale just because they are old or have no activity. Inactivity alone does not invalidate a feature request or bug report. + +3. **Draft and Review Closing Comments (CRITICAL MANDATE)**: + - For issues identified as candidates for closing, draft a detailed comment for each explaining *why* it can be closed. + - **Style Constraint**: DO NOT use em dashes (—) in the comments. Use hyphens (-) or colons (:) instead. + - **Template**: Consult `references/rationale_templates.md` for wording inspiration. + - Each comment MUST end with: "If there is more work to do here, please let us know by filing a new issue with up to date information. Thanks!" + - **User Approval Required**: You MUST present the identified issues (including URLs to the issues for easy navigation) and their drafted comments to the user and obtain explicit approval BEFORE running any command that closes an issue. + +4. **Iterate on Skill Knowledge (Learning Loop)**: + - If you discover a new, distinct category of closing rationale that is not covered in `references/rationale_templates.md`, **update the reference file** to include it. + +5. **Execute and Summarize**: + - Once approved, use `gh issue close` with the `-c` flag to post the comment and close the issue. + - Provide the user with a clean bulleted list of links to each closing comment. + +## Tips + +- Use available file and content search tools (such as `grep`, `ripgrep`, or environment-specific +search tools) to check the current codebase for references to the issue or relevant code. +- Look for related PRs that might have fixed the issue but didn't close it automatically. +- **Pro Tip**: Use the bundled script `scripts/search_prs.sh ` to search for PRs in the repository. +- For issues reporting specific versions, check the current DevTools version in `packages/devtools_app/pubspec.yaml` +to determine if the reported version is very old. If the reported version is 1 or more major versions behind or 12 or more +minor versions behind the current version, this issue is a good candidate for being obsolete. diff --git a/.agents/skills/closing-obsolete-issues/references/rationale_templates.md b/.agents/skills/closing-obsolete-issues/references/rationale_templates.md new file mode 100644 index 00000000000..ba7c6c27fd9 --- /dev/null +++ b/.agents/skills/closing-obsolete-issues/references/rationale_templates.md @@ -0,0 +1,41 @@ +# Common Closing Rationales for DevTools + +When investigating old issues in the Flutter DevTools repository, look for these common reasons they may be eligible for closing. Use these as templates for your closing comments. + +## 1. Superseded by New DevTools Features +DevTools has evolved significantly. Many old requests for features are now solved by newer implementations or entire new screens. +- **Example**: Requests for specific memory allocation tracking features that are covered by the new Tracing or Diff panes. +- **Rationale**: Point to the new feature or screen that fulfills the need (e.g., "This is now supported in the Memory screen's Tracing pane."). + +## 2. Observatory Deprecation +With the deprecation and removal of the Observatory UI in favor of DevTools, issues specifically requesting feature parity or fixing bugs in Observatory integration may be obsolete. +- **Rationale**: Note that Observatory is deprecated/removed and DevTools is the supported solution. + +## 3. Tooling Daemon (DTD) and IDE Integration +Issues about IDE integration or multi-package support might be resolved by the introduction of the Dart Tooling Daemon (DTD). +- **Rationale**: Explain that DTD now handles this integration or that workspace support has improved. + +## 4. UI Refactoring and Legacy Screens +Requests related to old UI patterns or legacy screens that have been completely rewritten or removed are obsolete. +- **Example**: The "Analysis" pane in the Memory screen no longer exists. +- **Rationale**: Note that the feature or screen has been refactored or removed. + +## 5. Resolved by Flutter SDK Updates +Some issues are caused by or fixed by changes in the Flutter SDK rather than DevTools itself. +- **Rationale**: If a bug was fixed in a specific Flutter version, mention it. + +## 6. Stale Feature Requests +Proposals or feature requests from several years ago with no recent activity or community interest may be closed if they no longer align with current priorities or have been superseded by general improvements. +- **Rationale**: Note that the issue is a stale feature request with no recent activity and that DevTools has evolved significantly since then. + +## 7. Very Old DevTools Version +Issues reported on very old versions of DevTools (check current version in `packages/devtools_app/pubspec.yaml` for comparison) may be closed if they are likely fixed or no longer relevant. +- **Rationale**: "This issue looks like it occurred on an old version of DevTools. Are you still experiencing this issue with DevTools on the latest Flutter stable? If so, please reopen and we will take a look. Thanks." + +## 8. Insufficient Information +Issues that lack clear descriptions, reproduction steps, or logs make it impossible to investigate. +- **Rationale**: "Without additional information, we cannot debug this issue. Please re-open if you can provide a description of your issue and repro steps. Thanks." + +--- +**Reminder**: Every closing comment MUST end with: +"If there is more work to do here, please let us know by filing a new issue with up to date information. Thanks!" diff --git a/.agents/skills/closing-obsolete-issues/scripts/fetch_issue_details.sh b/.agents/skills/closing-obsolete-issues/scripts/fetch_issue_details.sh new file mode 100755 index 00000000000..729efccedd0 --- /dev/null +++ b/.agents/skills/closing-obsolete-issues/scripts/fetch_issue_details.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# A script to fetch and format comprehensive issue details for investigation. +# Usage: ./fetch_issue_details.sh + +ISSUE_NUMBER=$1 + +if [ -z "$ISSUE_NUMBER" ]; then + echo "Usage: $0 " + exit 1 +fi + +echo "--- INVESTIGATION FOR ISSUE #$ISSUE_NUMBER ---" +# Fetching all comments to ensure full context is captured. +gh issue view "$ISSUE_NUMBER" --repo flutter/devtools --json number,title,author,createdAt,labels,body,comments -t ' +Title: {{.title}} +Author: {{if .author}}{{.author.login}}{{else}}ghost{{end}} +Created: {{.createdAt}} +Labels: {{range .labels}}{{.name}}, {{end}} + +Description: +{{.body}} + +--- ALL COMMENTS --- +{{range .comments}} +{{if .author}}{{.author.login}}{{else}}ghost{{end}} ({{.createdAt}}): +{{.body}} +------------------------------------------------------------ +{{end}} +' \ No newline at end of file diff --git a/.agents/skills/closing-obsolete-issues/scripts/search_prs.sh b/.agents/skills/closing-obsolete-issues/scripts/search_prs.sh new file mode 100755 index 00000000000..5f27ec36e2d --- /dev/null +++ b/.agents/skills/closing-obsolete-issues/scripts/search_prs.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# A script to search for PRs in flutter/devtools. +# Usage: ./search_prs.sh + +QUERY=$1 + +if [ -z "$QUERY" ]; then + echo "Usage: $0 " + exit 1 +fi + +echo "--- SEARCHING PRs FOR: $QUERY ---" +gh search prs "$QUERY" --repo flutter/devtools --limit 20 --json number,title,state,url,createdAt -t ' +{{range .}} +#{{.number}} {{.title}} ({{.state}}) +Url: {{.url}} +Created: {{.createdAt}} +------------------------------------------------------------ +{{end}} +' diff --git a/TRIAGE.md b/TRIAGE.md index 3ff74d54dc5..3064a0adb5f 100644 --- a/TRIAGE.md +++ b/TRIAGE.md @@ -50,14 +50,14 @@ If the issue is actively being worked on or if it needs immediate / almost-immed to a product area owner. Here are some suggested owners by product area: -* **Flutter Inspector**: @elliette +* **Flutter Inspector**: @kenzieschmoll or @srawlins * **Performance**: @kenzieschmoll * **CPU Profiler**: @kenzieschmoll or @bkonyi * **Memory**: @kenzieschmoll or @bkonyi -* **Network**: @elliette or @bkonyi -* **Logging**: @elliette or @bkonyi +* **Network**: @srawlins or @bkonyi +* **Logging**: @kenzieschmoll or @bkonyi * **VM Tools**: @bkonyi -* **Debugger**: @elliette +* **Debugger**: @srawlins * **DevTools extensions**: @kenzieschmoll * **Tooling integrations with VS Code**: @DanTup * **Tooling integrations with IntelliJ or Android Studio**: @helin24 or @jwren @@ -73,6 +73,10 @@ about issues marked “severe: …” or “P0”.** This step is to ensure the health of the [DevTools issue backlog](https://github.com/flutter/devtools/issues) over time. There are a couple of things to do as part of the backlog clean up work: - Close any obsolete issues. Recommendation: start with the oldest issues first since these are the most likely to be stale. + - **Tip**: You can use an AI assistant (agent) to help with this. Try a prompt like: + ``` + Identify and close obsolete issues in the backlog. + ``` - Add good candidates for product excellence / quality work to the [DevTools Product Excellence project](https://github.com/orgs/flutter/projects/157). This project feeds monthly milestone planning for ongoing P.E. work. diff --git a/pubspec.lock b/pubspec.lock index 7629d2b7aaf..4445dcce090 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: build - sha256: aadd943f4f8cc946882c954c187e6115a84c98c81ad1d9c6cbf0895a8c85da9c + sha256: a156715e7cd728130c592f30552575908aae5b100005fbc1f0fb16b3c03a3d10 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "4.0.6" build_config: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "521daf8d189deb79ba474e43a696b41c49fb3987818dbacf3308f1e03673a75e" + sha256: "22fdcc3cfeb9d974d7408718c4be15ec5e9b1b350088f3a6c88f154e74dd700d" url: "https://pub.dev" source: hosted - version: "2.13.1" + version: "2.14.1" built_collection: dependency: transitive description: @@ -286,10 +286,10 @@ packages: dependency: transitive description: name: file_selector_android - sha256: bf7ab65776d7e176280c853679e7742668586ba1663f7f1561e897fadad6c3ba + sha256: "89243030ea4b3463fb402b44d5eeacc4ccb1c46a88870cb2a5080d693200c1ed" url: "https://pub.dev" source: hosted - version: "0.5.2+5" + version: "0.5.2+6" file_selector_ios: dependency: transitive description: @@ -767,10 +767,10 @@ packages: dependency: transitive description: name: source_gen - sha256: "732792cfd197d2161a65bb029606a46e0a18ff30ef9e141a7a82172b05ea8ecd" + sha256: ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.3" source_map_stack_trace: dependency: transitive description: @@ -975,10 +975,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499" + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" url: "https://pub.dev" source: hosted - version: "15.1.0" + version: "15.2.0" vm_service_protos: dependency: transitive description: