Skip to content

chore(dev): add AI-assisted component maturity evaluation skill#25518

Open
pront wants to merge 8 commits into
masterfrom
chore/vector-maturity-eval-skill
Open

chore(dev): add AI-assisted component maturity evaluation skill#25518
pront wants to merge 8 commits into
masterfrom
chore/vector-maturity-eval-skill

Conversation

@pront
Copy link
Copy Markdown
Member

@pront pront commented May 28, 2026

Summary

Adds a Claude Code project skill that evaluates the maturity of all Vector components on a monthly cadence and publishes the results to Confluence.

  • Skill lives at .claude/skills/vector-components-maturity-eval/SKILL.md and is invoked via /vector-components-maturity-eval in any Claude Code session on this repo
  • Collects signals from CUE metadata (status, commonly_used), git history (component age, config churn), GitHub issues (type: bug label), and test coverage (unit + integration)
  • Uses AI judgment to classify each component as: promote candidate, keep, watch, or deprecate candidate
  • Publishes a monthly markdown report as a child page under the Vector (COSE) Confluence page
  • Also excludes .claude/skill-reports/ from git — reports are generated locally and published to Confluence, not tracked in the repo

First report to be published soon after we gain more confidence in this skill.

Vector configuration

N/A — this is a developer tooling addition, not a Vector configuration change.

How did you test this PR?

Ran the skill manually and generated the first monthly report. Verified signal collection (CUE parsing, git log, GitHub API, test detection), AI evaluation, and Confluence publishing end-to-end.

Change Type

  • Bug fix
  • New feature
  • Dependencies
  • Non-functional (chore, refactoring, docs)
  • Performance

Is this a breaking change?

  • Yes
  • No

Does this PR include user facing changes?

  • Yes. Please add a changelog fragment based on our guidelines.
  • No. A maintainer will apply the no-changelog label to this PR.

Adds a Claude Code project skill (`/vector-components-maturity-eval`)
that evaluates the maturity of all Vector components monthly and
publishes a report to Confluence. The skill collects signals from
CUE metadata, git history, GitHub issues, and test coverage, then
uses AI judgment to recommend promote/keep/watch/deprecate per component.

Also excludes `.claude/skill-reports/` from git — reports are
generated locally and published to Confluence, not tracked in the repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
Comment thread .claude/skills/vector-components-maturity-eval/SKILL.md Fixed
@pront pront changed the title chore: add AI-assisted component maturity evaluation skill chore(dev): add AI-assisted component maturity evaluation skill May 29, 2026
@github-actions github-actions Bot added the domain: ci Anything related to Vector's CI environment label May 29, 2026
@pront pront added the no-changelog Changes in this PR do not need user-facing explanations in the release changelog label May 29, 2026
pront and others added 2 commits May 29, 2026 13:47
- Remove auto-publish to Confluence (Phase 7); report stays local
- Add Near Misses section separate from strict Promotion Candidates
- Harden Phase 4 bug matching: flag generic names as ambiguous
- Align frontmatter description path with actual output path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pront pront marked this pull request as ready for review May 29, 2026 18:50
@pront pront requested a review from a team as a code owner May 29, 2026 18:50
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49f8617d27

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +97 to +98
add_path "src/${kind}/${name}.rs"
add_path "src/${kind}/${name}"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Add source-specific implementation mappings

When this runs for source components whose implementations live under shared directories, the only paths added are src/sources/<name>.rs and src/sources/<name>, so repo search shows existing tests in src/sources/prometheus/{scrape,pushgateway,remote_write}.rs and src/sources/file_descriptors/{stdin,file_descriptor}.rs are never counted. That makes the generated report mark stable components such as prometheus_scrape, stdin, and file_descriptor as having zero unit tests, which can put them on the watch list incorrectly and understate beta promotion candidates.

Useful? React with 👍 / 👎.

pront and others added 2 commits May 29, 2026 20:13
The type: bug label is deprecated; bugs are now identified via
the GitHub issue Type field (type:Bug search qualifier).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
prometheus_scrape, prometheus_remote_write, prometheus_pushgateway,
stdin, and file_descriptor all live under shared subdirectories.
Without explicit mappings the unit test count falls back to zero,
incorrectly putting stable components on the watch list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8333461f95

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

---

## Phase 2: Bulk Signal Collection

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include legacy bug labels in the bug query

For open issues that still carry the legacy type: bug label but have no GitHub Issue Type set, this query drops them before Phase 4, so affected components can be reported as having no open bugs. I checked the current tracker and found examples such as #21837 with label type: bug and Type: No type; the bug collection should include both type:Bug and label:"type: bug" (or otherwise merge the legacy label path) until those issues are migrated.

Useful? React with 👍 / 👎.

Issues use the GitHub issue **Type** field (not a label). The type name is `Bug`.

```bash
gh issue list --state open --search "type:Bug" --json number,title,url --limit 500 2>/dev/null
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Use component labels when matching bugs

When an open bug has the component only in its GitHub labels, this command discards that signal and Phase 4's title scan won't count it for the component. I checked the current tracker and found open bugs such as #24984 with label source: opentelemetry but a title that does not contain the canonical opentelemetry component name, so the report can undercount bugs and incorrectly promote or clear watch status unless labels are included and matched.

Useful? React with 👍 / 👎.

if [ ${#paths[@]} -eq 0 ]; then
count=0
elif command -v rg >/dev/null 2>&1; then
count=$(rg -n "$test_attr_regex" "${paths[@]}" 2>/dev/null | wc -l | tr -d ' ')
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Exclude integration tests from unit test counts

For components whose directory contains feature-gated integration_tests.rs, this recursive rg counts those integration tests as unit tests even though Phase 2e tracks integration coverage separately. For example, src/sources/windows_event_log/integration_tests.rs has 34 #[tokio::test] entries gated by the integration-test feature, so beta components can satisfy the unit tests > 10 promotion criterion without actually having that many unit tests.

Useful? React with 👍 / 👎.

- Bugs are identified by the GitHub issue **Type** field (`type:Bug` in search), not by label — the old `type: bug` label is deprecated
- Working directory is the Vector repo root

**Parent/shared CUE files**: Some CUE files define shared configuration for families of components and have no `development` field of their own (children inherit it). These will appear as "unknown" status when grepped. Known parent files: `sinks/aws_cloudwatch.cue`, `sinks/datadog.cue`, `sinks/gcp.cue`, `sinks/humio.cue`, `sinks/influxdb.cue`, `sinks/sematext.cue`, `sinks/splunk_hec.cue`, and possibly `sinks/statsd.cue`, `sources/syslog.cue`. Exclude these from per-component counts; note them separately.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep inherited real components in the inventory

Excluding sinks/statsd.cue and sources/syslog.cue from per-component counts drops two real components from the monthly inventory whenever their inherited development field is not resolved by grep. Both have concrete implementations (src/sinks/statsd and src/sources/syslog.rs) and inherit the stable/common classes from the socket components, so they should be resolved through inheritance rather than omitted from counts and recommendations.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain: ci Anything related to Vector's CI environment no-changelog Changes in this PR do not need user-facing explanations in the release changelog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants