Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8e43588
feat: add review skill for blog posts
vitorvasc Apr 10, 2026
5d2b59a
feat: add otel-issue-draft skill
vitorvasc Apr 10, 2026
49f1ec3
feat: add otel-pr-review skill
vitorvasc Apr 10, 2026
3ce688a
feat: add otel-triage skill
vitorvasc Apr 10, 2026
3eab61e
remove 'contributor' folder, fix format
vitorvasc Apr 10, 2026
4ac1d03
add Bloomberg OSS mentorship evaluation criteria
vitorvasc Apr 10, 2026
0195f15
Merge branch 'main' into site_agentic-skills
vitorvasc Apr 23, 2026
984b474
chore(skills): enhance argument handling
vitorvasc Apr 23, 2026
495920f
Merge branch 'main' into site_agentic-skills
vitorvasc Apr 23, 2026
b8fcbdc
chore: rename review-blog-post skill
vitorvasc Apr 23, 2026
15de35e
chore: rename draft-issue skill
vitorvasc Apr 23, 2026
756422a
chore: rename review-pull-request skill
vitorvasc Apr 23, 2026
6e7dc34
chore: rename triage-issue skill
vitorvasc Apr 23, 2026
1bce79b
chore: add Polish language support to repo configuration
vitorvasc Apr 23, 2026
d8cd6a3
chore: address code review suggestions
vitorvasc Apr 23, 2026
8342181
Merge branch 'main' into site_agentic-skills
vitorvasc Apr 23, 2026
8480fbd
chore: improve error handling in frontmatter-check script and update …
vitorvasc Apr 23, 2026
f51b3a1
fix refcache
vitorvasc Apr 23, 2026
d4f1337
chore(schema): simplify examples for verdict labels in triage profiles
vitorvasc Apr 23, 2026
b07f64c
Results from /fix directive
otelbot[bot] Apr 23, 2026
7a5af3a
feat(frontmatter-check): replace bash script with node.js validation …
vitorvasc Apr 23, 2026
26800c7
update tests to use describe block and improve readability
vitorvasc Apr 23, 2026
36cfce0
fix refcache
vitorvasc Apr 23, 2026
9540d6b
npm run fix:format
vitorvasc Apr 23, 2026
eb7f3cd
migrate validation script and tests to scripts/validate/front-matter-…
vitorvasc Apr 23, 2026
f614530
chore(triage-issue): reduce skill size; add reference files
vitorvasc Apr 23, 2026
a447d96
chore(review-pull-request): reduce skill size; add reference files
vitorvasc Apr 23, 2026
2eae4e7
fix(triage-issue): clarify read-only behavior and link formatting in …
vitorvasc Apr 23, 2026
c07ba12
chore: add automation note for front matter rules enforcement
vitorvasc Apr 23, 2026
fc2d197
Results from /fix directive
otelbot[bot] Apr 23, 2026
bcecd90
fix(triage-issue): update command block omission rule and add new ver…
vitorvasc Apr 28, 2026
89a0ae3
fix(label-taxonomy): update and expand label taxonomy; remove duplica…
vitorvasc Apr 28, 2026
e4c2b71
chore: refactor otel-issue-triager agent, add instructions to read fr…
vitorvasc Apr 28, 2026
28b0e8b
fix(otel-issue-triager): update agent name to match naming conventions
vitorvasc Apr 28, 2026
2262678
chore: add comment to clarify path traversal in hook configuration
vitorvasc Apr 28, 2026
bceb1b3
chore: clarify source of truth for label taxonomy and usage instructions
vitorvasc Apr 28, 2026
7de665b
chore: clean up and reorganize documentation for review-pull-request …
vitorvasc Apr 28, 2026
9dab0fb
chore(review-pull-request): update step references in documentation
vitorvasc Apr 28, 2026
4ec2f17
chore(review-pull-request): remove redundant external references
vitorvasc Apr 28, 2026
7b92013
chore: defer triage-issue subsystem to a follow-up PR
vitorvasc Apr 28, 2026
e6bfe03
chore(draft-issue): defer label taxonomy and template structures to u…
vitorvasc Apr 28, 2026
3d6c8fa
chore(review-blog-post): trim mechanical rules and review checklist
vitorvasc Apr 28, 2026
7628ae3
chore(review-pull-request): inline content-review and drop deleted-da…
vitorvasc Apr 28, 2026
73a8ed7
chore(refcache): drop entry for removed triage-issue skill page
vitorvasc Apr 28, 2026
94b5733
chore: apply prettier formatting to trimmed skills
vitorvasc Apr 28, 2026
0ab1e1d
Merge branch 'main' into site_agentic-skills
vitorvasc Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
486 changes: 486 additions & 0 deletions .claude/agents/otel-issue-triager.md

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions .claude/data/bloomberg-mentorship.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Bloomberg OSS Mentorship
description: >-
Evaluates issues as candidates for the Bloomberg x OpenTelemetry mentorship
program. Mentees are new-to-OSS contributors guided by a senior maintainer
over approximately 3 months.

evaluation:
report_note: >-
Assessed for suitability as a Bloomberg mentorship task. Mentees have
programming experience but are new to OSS contribution. Prefer well-scoped,
spec-covered issues with clear acceptance criteria and no requirement for
deep runtime or SDK internals knowledge up front.

criteria:
- label: Scope
question: >-
Is the work clearly bounded? Can a mentee reasonably complete it within
2–4 weeks with mentor guidance, without scope creep or open-ended design
questions?
weight: high

- label: Ramp-up
question: >-
Does the issue require deep C++ runtime knowledge, OTel SDK internals,
or prior OTel contribution experience — or is it accessible to a
motivated new contributor with a senior mentor?
weight: high

- label: Spec coverage
question: >-
Is the expected behavior described in the OTel specification, an
existing RFC, or a well-defined upstream issue? Or does the contributor
need to make independent design decisions without a clear spec
reference?
weight: medium

- label: Mentorship value
question: >-
Does this issue expose the mentee to meaningful OSS workflows such as PR
review cycles, CI/test infrastructure, community discussion, or the
release process?
weight: medium

- label: Effort estimate
question: >-
What is the rough effort level? Use: e0-minutes / e1-hours / e2-days /
e3-weeks / e4-months. Ideal range for mentorship is e2-days to e3-weeks.
weight: low

verdict_labels:
recommended: 'mentorship:bloomberg'
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
169 changes: 169 additions & 0 deletions .claude/data/opentelemetry-website.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
name: OpenTelemetry Website
description: >-
Repo-specific configuration for open-telemetry/opentelemetry.io. Provides SIG
keyword inference, label taxonomy, type filters, category buckets, and comment
templates for the OTel website repository.

repo:
default_repo: 'open-telemetry/opentelemetry.io'
auto_apply_for:
- 'open-telemetry/opentelemetry.io'

sig_keywords:
- keywords: ['Go', 'golang', 'docs/languages/go']
label: 'sig:go'
- keywords: ['Python', 'docs/languages/python']
label: 'sig:python'
- keywords: ['Java', 'docs/languages/java']
label: 'sig:java'
- keywords: ['JavaScript', 'JS', 'Node', 'docs/languages/js']
label: 'sig:javascript'
- keywords: ['.NET', 'dotnet', 'C#', 'docs/languages/net']
label: 'sig:dotnet'
- keywords: ['Ruby', 'docs/languages/ruby']
label: 'sig:ruby'
- keywords: ['PHP', 'docs/languages/php']
label: 'sig:php'
- keywords: ['Rust', 'docs/languages/rust']
label: 'sig:rust'
- keywords: ['Swift', 'docs/languages/swift']
label: 'sig:swift'
- keywords: ['C++', 'cpp', 'docs/languages/cpp']
label: 'sig:cpp'
- keywords: ['Erlang', 'Elixir', 'docs/languages/erlang']
label: 'sig:erlang'
- keywords: ['Kotlin', 'docs/languages/kotlin']
label: 'sig:kotlin'
- keywords: ['Collector', 'OTLP', 'receiver', 'exporter', 'processor']
label: 'sig:collector'
- keywords: ['Operator', 'docs/kubernetes/operator']
label: 'sig:operator'
- keywords: ['Helm', 'chart', 'docs/kubernetes/helm']
label: 'sig:helm'
- keywords: ['Demo', 'docs/demo']
label: 'sig:demo'
- keywords: ['Specification', 'spec', 'docs/specs']
label: 'sig:spec'
- keywords: ['Semantic conventions', 'semconv']
label: 'sig:semconv'
- keywords: ['Profiling', 'profiles']
label: 'sig:profiling'

type_filters:
- type: docs
title_prefix: '[Docs]:'
- type: bug
title_prefix: 'bug:'
- type: feat
title_prefix: 'feat:'
- type: blog
title_prefix: 'blog:'
- type: feedback
title_prefix: 'page feedback:'
label_match: 'page feedback'

category_buckets:
- 'sig:collector'
- 'sig:go'
- 'docs-general'
- 'blog'
- 'registry'
- 'ci-infra'
- 'feedback'
- 'uncategorized'

label_taxonomy:
area:
- 'CI/infra'
- 'Github actions'
- 'blog'
- 'docs'
- 'registry'
- 'i18n'
- 'site:accessibility'
- 'site:design/style'
- 'ux'
- 'cleanup/refactoring'
- 'upstream'
- 'upstream:docsy'
- 'upstream:hugo'
sig:
- 'sig:android'
- 'sig:collector'
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
- 'sig:cpp'
- 'sig:demo'
- 'sig:dotnet'
- 'sig:enduser'
- 'sig:erlang'
- 'sig:faas'
- 'sig:go'
- 'sig:helm'
- 'sig:java'
- 'sig:javascript'
- 'sig:kotlin'
- 'sig:obi'
- 'sig:operator'
- 'sig:php'
- 'sig:profiling'
- 'sig:python'
- 'sig:ruby'
- 'sig:rust'
- 'sig:security'
- 'sig:semconv'
- 'sig:spec'
- 'sig:swift'
localization:
- 'lang:bn'
- 'lang:es'
- 'lang:fr'
- 'lang:ja'
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
- 'lang:pt'
- 'lang:ro'
- 'lang:uk'
- 'lang:zh'
effort:
- 'e0-minutes'
- 'e1-hours'
- 'e2-days'
- 'e3-weeks'
- 'e4-months'
priority:
- 'p0-critical'
- 'p1-high'
- 'p2-medium'
- 'p3-low'
triage:
- 'triage:accepted'
- 'triage:accepted:needs-pr'
- 'triage:deciding'
- 'triage:deciding:blocked'
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
- 'triage:deciding:needs-info'
type:
- 'type:copyedit'
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
- 'good first issue'
- 'help wanted'

comment_templates:
stale: |
This issue has had no activity for {N} months and the referenced content has
been updated since it was filed. Closing as resolved. If you believe this is
still relevant, please reopen with updated details.
needs_info: |
Thank you for filing this issue. To help us triage it, could you please
provide:
- {specific missing info}
- Is this still relevant with the current documentation?

We'll revisit once more details are available.
duplicate: |
This appears to be a duplicate of #{duplicate_number}. Please check that
issue for updates. If your case is different, please reopen with details on
how it differs.
accepted: |
This issue has been triaged and accepted. It's ready for someone to work on.
If you'd like to contribute a fix, please see our
[contributing guide](https://opentelemetry.io/docs/contributing/).
good_first_issue: |
This issue has been triaged as a good first issue for new contributors. See
our [contributing guide](https://opentelemetry.io/docs/contributing/) for
how to get started.
89 changes: 89 additions & 0 deletions .claude/hooks/frontmatter-check.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#!/usr/bin/env bash
# Frontmatter validation hook for OTel blog posts.
# Fires on Write/Edit tool calls targeting content/en/blog/**/*.md files.
# Reads TOOL_INPUT from stdin (JSON with file_path and content/new_string).

set -euo pipefail

INPUT=$(cat)

# Extract file path from the tool input JSON
FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"//;s/"$//')
Comment thread
vitorvasc marked this conversation as resolved.
Outdated

# Only check blog posts
if [[ ! "$FILE_PATH" =~ content/en/blog/.*\.md$ ]]; then
exit 0
fi

# Extract content: prefer "content" (Write tool), fall back to "new_string" (Edit tool)
CONTENT=$(echo "$INPUT" | python3 -c "
import sys, json
try:
data = json.load(sys.stdin)
print(data.get('content', data.get('new_string', '')))
except:
pass
" 2>/dev/null || echo "")

# If no content to check (e.g., Edit with no frontmatter), skip
if [[ -z "$CONTENT" ]]; then
exit 0
fi

# Only validate if content contains frontmatter (starts with ---)
if [[ ! "$CONTENT" =~ ^--- ]]; then
exit 0
fi

ERRORS=()

# Extract frontmatter (between first two --- lines)
FRONTMATTER=$(echo "$CONTENT" | sed -n '/^---$/,/^---$/p' | sed '1d;$d')

if [[ -z "$FRONTMATTER" ]]; then
exit 0
fi

# Check required fields
if ! echo "$FRONTMATTER" | grep -q '^title:'; then
ERRORS+=("Missing required frontmatter field: title")
fi

if ! echo "$FRONTMATTER" | grep -q '^date:'; then
ERRORS+=("Missing required frontmatter field: date")
fi

if ! echo "$FRONTMATTER" | grep -q '^author:'; then
ERRORS+=("Missing required frontmatter field: author")
fi

Comment thread
vitorvasc marked this conversation as resolved.
Outdated
# Validate date format (YYYY-MM-DD)
DATE_VALUE=$(echo "$FRONTMATTER" | grep '^date:' | sed 's/^date:[[:space:]]*//' | tr -d "'\"" || true)
if [[ -n "$DATE_VALUE" ]] && ! echo "$DATE_VALUE" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'; then
ERRORS+=("Date format must be YYYY-MM-DD, got: $DATE_VALUE")
fi

# Validate author format: '[Name](url)'
AUTHOR_VALUE=$(echo "$FRONTMATTER" | grep '^author:' | sed 's/^author:[[:space:]]*//' || true)
if [[ -n "$AUTHOR_VALUE" ]]; then
if ! echo "$AUTHOR_VALUE" | grep -qE "'\[.+\]\(https?://.+\)'"; then
ERRORS+=("Author should be in format: '[First Last](https://github.com/username)'")
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
fi
fi

# Check for H1 headings in content (after frontmatter)
BODY=$(echo "$CONTENT" | awk 'BEGIN{n=0} /^---$/{n++; next} n>=2{print}')
if echo "$BODY" | grep -qE '^# [^#]'; then
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

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

The H1 check scans the entire body with a simple grep '^# ', which will also match shell comments or other lines inside fenced code blocks (common in blog posts), causing false failures. Consider tracking fenced-code state (``` / ~~~) and only flagging # headings outside code fences, or using a markdown-aware parser.

Suggested change
# Check for H1 headings in content (after frontmatter)
BODY=$(echo "$CONTENT" | awk 'BEGIN{n=0} /^---$/{n++; next} n>=2{print}')
if echo "$BODY" | grep -qE '^# [^#]'; then
# Check for H1 headings in content (after frontmatter), ignoring fenced code blocks
BODY=$(echo "$CONTENT" | awk 'BEGIN{n=0} /^---$/{n++; next} n>=2{print}')
if echo "$BODY" | awk '
BEGIN {
in_fence = 0
fence_char = ""
}
/^[[:space:]]*```/ {
if (!in_fence) {
in_fence = 1
fence_char = "`"
next
}
if (fence_char == "`") {
in_fence = 0
fence_char = ""
next
}
}
/^[[:space:]]*~~~/ {
if (!in_fence) {
in_fence = 1
fence_char = "~"
next
}
if (fence_char == "~") {
in_fence = 0
fence_char = ""
next
}
}
!in_fence && /^# [^#]/ {
found = 1
exit
}
END {
exit found ? 0 : 1
}
'; then

Copilot uses AI. Check for mistakes.
ERRORS+=("Blog posts must not use H1 (#) headings. Start with ## (H2) instead")
fi

# Output errors
if [[ ${#ERRORS[@]} -gt 0 ]]; then
echo "OTel Blog Frontmatter Issues:"
for err in "${ERRORS[@]}"; do
echo " - $err"
done
exit 1
fi

exit 0
15 changes: 15 additions & 0 deletions .claude/hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "bash ${PLUGIN_DIR}/hooks/frontmatter-check.sh \"$TOOL_INPUT\""
Comment thread
vitorvasc marked this conversation as resolved.
Outdated
}
]
}
]
}
}
Loading
Loading