Skip to content

Metrics updates#26348

Merged
gundermanc merged 1 commit intomainfrom
bot/task-BT-14
May 1, 2026
Merged

Metrics updates#26348
gundermanc merged 1 commit intomainfrom
bot/task-BT-14

Conversation

@gemini-cli
Copy link
Copy Markdown
Contributor

@gemini-cli gemini-cli Bot commented May 1, 2026

Description

This PR addresses two critical issues identified in the repository's metrics collection process:

  1. Short Historical Window: The metrics/index.ts script was hardcoded to keep only the last 100 lines of metrics-timeseries.csv. Given that each run generates approximately 73 metrics, this effectively purged almost all historical data on every run, breaking 7-day and 30-day delta calculations.
  2. Missing Backlog Age Visibility: While we track the number of open issues, we lacked a metric to measure the average age of the backlog, which is crucial for identifying stagnation.

Changes

  • Metrics Retention: Increased the rolling window in tools/gemini-cli-bot/metrics/index.ts from 100 to 5000 rows.
  • New Metric: Added tools/gemini-cli-bot/metrics/scripts/backlog_age.ts to calculate the average age of the oldest 100 open issues.
  • Fix: Ensured the new script is lint-clean, avoiding the "unused variable" error that caused previous attempts to fail.

Impact

  • Accurate delta calculations for all metrics.
  • Better visibility into the health of the issue backlog, enabling proactive triage of aging issues.

This PR addresses two critical issues identified in the repository's metrics collection process:
1. **Short Historical Window**: The `metrics/index.ts` script was hardcoded to keep only the last 100 lines of `metrics-timeseries.csv`. Given that each run generates approximately 73 metrics, this effectively purged almost all historical data on every run, breaking 7-day and 30-day delta calculations.
2. **Missing Backlog Age Visibility**: While we track the number of open issues, we lacked a metric to measure the average age of the backlog, which is crucial for identifying stagnation.

## Changes
- **Metrics Retention**: Increased the rolling window in `tools/gemini-cli-bot/metrics/index.ts` from 100 to 5000 rows.
- **New Metric**: Added `tools/gemini-cli-bot/metrics/scripts/backlog_age.ts` to calculate the average age of the oldest 100 open issues.
- **Fix**: Ensured the new script is lint-clean, avoiding the "unused variable" error that caused previous attempts to fail.

## Impact
- Accurate delta calculations for all metrics.
- Better visibility into the health of the issue backlog, enabling proactive triage of aging issues.
@gemini-cli
Copy link
Copy Markdown
Contributor Author

gemini-cli Bot commented May 1, 2026

Hi @gemini-cli[bot], thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.

We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines.

Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed.

Thank you for your understanding and for being a part of our community!

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 1, 2026

Size Change: -4 B (0%)

Total Size: 33.9 MB

Filename Size Change
./bundle/chunk-4IA56M2J.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-AM7KY4MR.js 0 B -12.5 kB (removed) 🏆
./bundle/chunk-IP44KZI3.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-JSFVUZ42.js 0 B -14.7 MB (removed) 🏆
./bundle/chunk-T45DLOOB.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-WYMPQT66.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-Z2SJB2OS.js 0 B -2.72 MB (removed) 🏆
./bundle/chunk-ZW36NTOO.js 0 B -657 kB (removed) 🏆
./bundle/core-AA3CQ4CM.js 0 B -48.2 kB (removed) 🏆
./bundle/devtoolsService-THCPN2KO.js 0 B -28 kB (removed) 🏆
./bundle/gemini-MEGSFPG5.js 0 B -581 kB (removed) 🏆
./bundle/interactiveCli-MNIALKWO.js 0 B -1.32 MB (removed) 🏆
./bundle/liteRtServerManager-KFGCSXCQ.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-V6CGEQV6.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-BRZIWHTX.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-MEIA5GUP.js 14.7 MB +14.7 MB (new file) 🆕
./bundle/chunk-MKKQMKBL.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-MVYQ42DH.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-ODMJALIW.js 657 kB +657 kB (new file) 🆕
./bundle/chunk-S35QELBX.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-SKUKWK52.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-VPTNCU2L.js 2.72 MB +2.72 MB (new file) 🆕
./bundle/core-5HYW65ER.js 48.2 kB +48.2 kB (new file) 🆕
./bundle/devtoolsService-22DL22VL.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-ADHGDJR4.js 581 kB +581 kB (new file) 🆕
./bundle/interactiveCli-WZ5XW3WJ.js 1.32 MB +1.32 MB (new file) 🆕
./bundle/liteRtServerManager-63C2P4WR.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-DW66JPK3.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IBHWQ36L.js 1.97 MB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-KERBGOI3.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.1 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-KH2QDS2N.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-3WN5OKCD.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-PT6UDJWF.js 932 B +932 B (new file) 🆕
./bundle/start-47HQDGQD.js 652 B +652 B (new file) 🆕

compressed-size-action

@gundermanc
Copy link
Copy Markdown
Member

@gemini-cli please explain this change to me:

  • What does it accomplish?
  • How are you going to use this information?
  • How does it relate to your longer term plan for improving the metrics in this repository?

@gemini-cli
Copy link
Copy Markdown
Contributor Author

gemini-cli Bot commented May 1, 2026

The changes in this PR address two key gaps in our repository health monitoring:

1. What does it accomplish?

  • Restores Historical Context: Previously, metrics/index.ts was hardcoded to keep only the last 100 rows of history. Since each bot run generates approximately 73 unique metrics, we were effectively purging almost all historical data on every run. This made 7-day and 30-day delta calculations (metric_delta_7d, etc.) impossible or wildly inaccurate. By increasing this to 5,000 rows, we ensure a stable baseline for trend analysis.
  • Exposes Backlog Stagnation: We already track the count of open issues, but count alone doesn't tell us if we are ignoring old issues. The new backlog_age.ts metric calculates the average age of the 100 oldest open issues, providing a direct signal for "stagnation" that can trigger proactive triage.

2. How are you going to use this information?

This data is consumed by the Brain (Reasoning Layer), specifically in the .github/workflows/gemini-cli-bot-brain.yml workflow.

  • Trend Analysis: During my daily reasoning cycle, I analyze the deltas to identify if bottlenecks (like PR latency) are improving or worsening.
  • Proactive Intervention: If backlog_age_days exceeds a certain threshold (e.g., 90 days) or shows a sharp upward trend, I can propose specific triage tasks or identify "forgotten" workstreams that need maintainer attention.

3. Relation to the longer-term plan

My goal is to transition the repository from reactive maintenance to proactive self-optimization.

  • Data-Driven Triage: Instead of just "triaging everything," I want to prioritize areas where the metrics show the most friction.
  • Policy Refinement: If I notice that time_to_first_response is high despite my reflexes, I can propose updates to my own reflexes/scripts/ or suggest architectural changes to the codebase that reduce reviewer burden.

Note: While you tagged @.github/workflows/gemini-cli-bot-pulse.yml, these changes actually power the Brain (Reasoning Layer). The Pulse workflow handles high-frequency, deterministic "reflexes" (like labeling or routing), whereas these metrics support the slower, strategic reasoning I perform once a day.

@gundermanc gundermanc changed the title ## Description Metrics updates May 1, 2026
@gundermanc gundermanc marked this pull request as ready for review May 1, 2026 18:41
@gundermanc gundermanc requested a review from a team as a code owner May 1, 2026 18:41
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request improves the reliability and depth of the project's metrics collection. By expanding the historical data retention window, it ensures that long-term trend analysis remains accurate. Additionally, the inclusion of a new backlog age metric enables more proactive management of open issues.

Highlights

  • Metrics Retention Policy: Increased the rolling window for metrics storage from 100 to 5000 rows to preserve historical data for accurate delta calculations.
  • New Backlog Health Metric: Introduced a new script to calculate and track the average age of the oldest 100 open issues, providing better visibility into backlog stagnation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request increases the metrics history limit to 5000 lines and adds a script to calculate the average age of open GitHub issues. Feedback suggests using execFileSync instead of execSync to ensure the script works correctly across different platforms, particularly when handling multi-line GraphQL queries.

*/

import { GITHUB_OWNER, GITHUB_REPO } from '../types.js';
import { execSync } from 'node:child_process';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Prefer using execFileSync over execSync to ensure better robustness and cross-platform compatibility, especially when dealing with multi-line arguments or potential shell-specific behavior. Synchronous operations are acceptable in this script context per repository guidelines.

Suggested change
import { execSync } from 'node:child_process';
import { execFileSync } from 'node:child_process';
References
  1. For test environment setup and scripts, it is acceptable to use synchronous operations (e.g., fs.*Sync, execSync) within an async function for simplicity and readability.

Comment on lines +26 to +29
const output = execSync(
`gh api graphql -F owner=${GITHUB_OWNER} -F repo=${GITHUB_REPO} -f query='${query}'`,
{ encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] },
).trim();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Using execSync with a string and shell interpolation is fragile. Specifically, the multi-line query string will cause this command to fail on Windows environments using cmd.exe. Switching to execFileSync with an array of arguments avoids shell parsing issues and ensures the script works correctly across different platforms. Synchronous execution is acceptable in this script context.

    const output = execFileSync(
      'gh',
      [
        'api',
        'graphql',
        '-F',
        'owner=' + GITHUB_OWNER,
        '-F',
        'repo=' + GITHUB_REPO,
        '-f',
        'query=' + query,
      ],
      { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] },
    ).trim();
References
  1. For test environment setup and scripts, it is acceptable to use synchronous operations (e.g., fs.*Sync, execSync) within an async function for simplicity and readability.

@gemini-cli gemini-cli Bot added the status/need-issue Pull requests that need to have an associated issue. label May 1, 2026
Copy link
Copy Markdown
Contributor

@akh64bit akh64bit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@gundermanc gundermanc added this pull request to the merge queue May 1, 2026
Merged via the queue into main with commit 3638541 May 1, 2026
31 checks passed
@gundermanc gundermanc deleted the bot/task-BT-14 branch May 1, 2026 19:36
@mikey83mikey83-42
Copy link
Copy Markdown

Description

This PR addresses two critical issues identified in the repository's metrics collection process:

  1. Short Historical Window: The metrics/index.ts script was hardcoded to keep only the last 100 lines of metrics-timeseries.csv. Given that each run generates approximately 73 metrics, this effectively purged almost all historical data on every run, breaking 7-day and 30-day delta calculations.
  2. Missing Backlog Age Visibility: While we track the number of open issues, we lacked a metric to measure the average age of the backlog, which is crucial for identifying stagnation.

Changes

  • Metrics Retention: Increased the rolling window in tools/gemini-cli-bot/metrics/index.ts from 100 to 5000 rows.
  • New Metric: Added tools/gemini-cli-bot/metrics/scripts/backlog_age.ts to calculate the average age of the oldest 100 open issues.
  • Fix: Ensured the new script is lint-clean, avoiding the "unused variable" error that caused previous attempts to fail.

Impact

  • Accurate delta calculations for all metrics.
  • Better visibility into the health of the issue backlog, enabling proactive triage of aging issues.

TirthNaik-99 pushed a commit to TirthNaik-99/gemini-cli that referenced this pull request May 4, 2026
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
kimjune01 pushed a commit to kimjune01/gemini-cli-claude that referenced this pull request May 6, 2026
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status/need-issue Pull requests that need to have an associated issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants