triage-unassigned-bfs
Lists unassigned hot and cold Build Failures (BFs) for a team and, on request, suggests an owner.
Skill by enricogolfieri
Chalk Labs
Need help deploying triage-unassigned-bfs?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/enricogolfieri-triage-unassigned-bfs
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/triage-unassigned-bfs
What's inside
- Skill name
triage-unassigned-bfs- Description
- Lists unassigned hot and cold Build Failures (BFs) for a team and, on request, suggests an owner. Hot BFs get suggestions based on the first failing revision and recent code authors of the failing test/source files; cold BFs get suggestions based on which teammates have the lightest BF load lately. Use when the user asks to "triage unassigned BFs", "list unassigned BFs", "find owners for hot BFs", "balance the cold BF backlog", or shares a BF dashboard / filter URL and wants assignees suggested.
- License
- Unlicense
- Instructions
- 283 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Triage Unassigned BFs
Tooling: Always use the Jira MCP tools on `user-devprod-mcp-gateway` for BF triage; do **not** use the `jira` CLI for this skill. If the Jira MCP returns an auth or gateway issue, stop and report back to the user; do not continue with fallbacks. Glean MCP may miss Jira tickets due to stale indexing, so use it only as supplemental context after the Jira MCP succeeds, never as the source of truth for ticket discovery.
Two-phase workflow. **Always run Phase 1 first.** Only run Phase 2 if the user explicitly asks for owner suggestions or confirms after seeing the Phase 1 list.
## Source board (fixed)
Static board: <https://jira.mongodb.org/secure/Dashboard.jspa?selectPageId=32941> — scopes to the **Catalog and Routing** team's open BFs. Use the JQL templates below directly; do **not** ask the user for a filter URL, JQL, or team name. Only override the team name if the user explicitly says so.
---
## Phase 1 — List unassigned BFs
Use `jira_search_issues` (`user-devprod-mcp-gateway`) to query unassigned non-resolved BFs, split by temperature (run once with `hot`, once with `cold`):
```
project = BF
and status not in (Resolved, Closed)
and assignee is EMPTY
and Temperature ~ "<hot|cold>"
and "Assigned Teams" = "Catalog and Routing"
```
**JQL gotcha**: `Temperature` only supports `~`, not `=` (HTTP 400 otherwise).
### Output format
Two sections, each a table sorted by **Priority desc, then Created desc** so the most actionable items lead.
**Only list non-Trivial-P5 BFs in tables.** Trivial-P5 BFs (including ones tagged `keep-trivial*`, `not-*-blocker`, `oldshardingemea`, etc.) are noise for triage — collapse them into a single trailing count line per section. Do not list keys, do not give them rows.
```
🔥 Unassigned hot BFs (<count>)
| BF | Priority | Status | Test / Task | Created |
|---|---|---|---|---|
| BF-XXXXX | Major-P3 | Waiting for bug fix | foo.js / sharded_jscore | 3d ago |
_+ <N> Trivial-P5 hot BFs not shown._
🧊 Unassigned cold BFs (<count>)
| BF | Priority | Status | Test / Task | Created | Note |
|---|---|---|---|---|---|
| BF-YYYYY | Major-P3 | Open | bar.js / concurrency | 3d ago | ⚠️ non-trivial |
_+ <N> Trivial-P5 cold BFs not shown._
```
If a section has **no non-trivial BFs**, omit the table and just print the trivial count line — and explicitly call out that there is nothing actionable in that section.
**Always flag non-Trivial-P5 cold BFs with ⚠️** — they deserve a real owner. Do not bury them in a paragraph (lesson learned: a Major-P3 cold BF is the headline, not a parenthetical).
After the tables, ask: *"Want me to suggest owners (Phase 2)?"*
---
## Phase 2 — Suggest owners
Run only after Phase 1 if the user asks. Different strategies for hot vs. cold. For any non-trivial BF, the **fixed pre-flight order** is:
1. **Duplicate check** (below) — same root cause as another BF?
2. **Team-fit / mis-routing check** (below) — does the failure even belong to our team, or is the BF auto-assigned to us only because the failing suite is owned by us?
3. **Owner search** (hot: code blame; cold: load-balance) — only run this once steps 1 and 2 don't fully dispose of the BF.
If step 1 or step 2 dispose of the BF, **stop** — don't suggest a teammate. Re-route or link-as-duplicate instead.
### Mandatory duplicate check (non-trivial BFs)
A **duplicate** here means: two BFs likely share the **same core issue**, such that the same fix would probably apply to both. Do **not** require the same exact test, task, or team. Do **not** prove via deep log analysis (too expensive); infer from **error symptoms** + **execution conditions**.
After `jira_get_issue` succeeds, use Glean MCP (`user-glean_default`) as supplemental context together with Jira fields:
1. Use `jira_get_issue` for the BF, especially to read: `Failing Tests`, `Failing Tasks`, `Failing Buildvariants`, `Bug Symptoms`, `Last Comment`, `Dependencies`, `Fix Revision` (if present).
2. First `search`: short, discriminative failure-signature keywords — BF key (e.g. `BF-42857`), failing test basename (e.g. `change_stream_future_start_time_new_shard.js`), core error fragment (e.g. `A shard named newShard already exists`).
3. Second `search`: failing task/buildvariant + error fragment.
4. If neither surfaces a convincing candidate, run a **symptom-family pass**:
- Normalize the symptom before searching; keep the durable signal, drop incidental wording.
- Examples: reduce `No progress was made executing write ops in after 5 rounds (6 rounds total)` and `no progress was made executing bulkWrite ops in after 5 rounds (0 ops completed in 9 rounds total)` to the same family: `NoProgressMade`, `bulk write`, `code 82`. Ignore exact round counts, document ids, hostnames, and `/data/mci/...` path prefixes.
- Search on the condition bundle, not just the test name: suite/task family; operation family (`movePrimary`, `bulkWrite`, `stepdown`, `unsplittable`, etc.); environment hints that materially affect behavior.
5. `read_document` on top candidate URLs to verify the **symptoms + conditions** line up.
6. Explicitly inspect whether any linked fix/dependency on the candidate BF plausibly applies to the current BF — best cheap proxy for "same core issue."
7. Use `chat` only when synthesis across several candidate sources is needed.
Heuristics:
- Different failing tests do **not** disqualify a duplicate if the symptom family and execution conditions still point to the same bug.
- Different teams do **not** disqualify a duplicate; some bug families cross ownership boundaries.
- A shared generic error alone is **not** enough. `NoProgressMade` or `code 82` by itself only says "same symptom family," not "same root cause."
- Prefer an older BF with a linked fix ticket whose fix description matches the current BF's conditions over a newer BF that only shares a string fragment.
- **Suite-disable / test-skip fixes are sticky.** If a recently-closed BF on the **same suite** with an overlapping test-family was fixed by disabling those tests (e.g. `SERVER-XXX Disable <family> tests in <suite>`), a new BF on the same suite touching any test in that family is almost certainly the same issue — even if the literal exception text differs (one run may surface as a primary assertion, another as a teardown error). Look for a `Dependencies` / `Fix Revision` like `Disable …` or `Skip …` on the candidate BF; that's a high-confidence dup signal.
Confidence rubric:
- **High ("likely duplicate")** — all of: same normalized symptom family; similar execution conditions (same suite/task family, operation family, failover pattern, or other meaningful scenario overlap); candidate BF's known fix/dependency/root-cause notes plausibly apply to the current BF.
- **Medium ("possible duplicate")** — symptom family matches and conditions look related, but fix applicability is still uncertain.
- **Low** — only generic symptom overlap, or conditions/root-cause notes point in different directions; explicitly say no clear duplicate found.
When high confidence, state certainty plainly, link the suspected duplicate ticket(s), and name the fix ticket if one exists. When medium, say whether it looks like a real duplicate or merely the same symptom family.
### Mandatory team-fit / mis-routing check (non-trivial BFs)
Run **after** the duplicate check, **before** any commit blame. BFs are often auto-assigned to the team that owns the failing suite, even when the actual failure has nothing to do with that team's code. Catching this saves the team a useless triage round and gets the BF to the right owner faster.
A BF is **likely mis-routed** if any of these hold:
- `Failure Type` is `system-failed` and `Bug Symptoms` contains test-runner / infra strings such as:
- `No test results found for target … in 'build_events.json'`
- `fetch remote test results` / `One or more shards had TIMEOUT or NO_REPORT status` (where "shards" are Bazel test shards, not DB shards)
- `validating expanded params: AWS key cannot be blank` / `s3.get` / `s3.put` failures
- `Failed to import a dependency … the task did not initialize the venv`
- `subprocess.exec … in block 'post' failed: process encountered problem: exit code 127`
- any Evergreen `Command 'X' in function 'Y'` failure where `Y` is a generic Evergreen function (`do setup`, `fetch …`, `upload …`, `cleanup …`, `kill processes`)
- `Failing Tasks` contains many unrelated tasks across many unrelated suites (a sign the failure hit at the runner / variant level, not in any one suite's code).
- `Failing Buildvariants` is dominated by one variant (often a `*-required` or `*-compile-required` variant) and the buildvariant — not the suite — is the common factor across recent occurrences.
- `First Failing Revision` is a commit that touches files clearly unrelated to the failing suite (e.g. a search/disagg or unrelated component change that wouldn't plausibly affect a sharding suite).
- The error contains no MongoDB-side stack frame, assertion, fassert, invariant, or `src/mongo/...` source pointer.From enricogolfieri/workspace-mongo, Unlicense.
More from enricogolfieri/workspace-mongo
- 0.552score
trace-function
enricogolfieri
Statically trace what happens when a C++ function is called, including verified call edges, max-depth stack trace, and branch gates.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-flush
enricogolfieri
Persist durable ticket session truth mid-chat: update state.json and create any memory files needed (context, session notes, experiment notes), indexed from…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-implement
enricogolfieri
Implement an approved SERVER ticket plan: create branch, code+tests, validate, open a draft PR.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-plan
enricogolfieri
Start and plan a Jira ticket: load context, summarize scope, evaluate split, and produce an approved plan.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-resume
enricogolfieri
Resume a ticket from durable state and continue from its recorded phase.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
write-mongo-jstests
enricogolfieri
Write focused MongoDB jstests with explicit mocha cases, small mechanical topology helpers, purposeful comments, robust teardown, and correct ownership.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-analyse
enricogolfieri
Analyse PERF tickets and register each new experiment in state.json (patch, comparison links, notes paths).
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
ticket-shared
enricogolfieri
Shared reference and state_memory.py for ticket-plan, ticket-implement, ticket-analyse, ticket-resume, and ticket-flush.
SkillBFreshness: B★ 1Claude Code +9 - 0.497score
mongo-pr-review
enricogolfieri
Performs deep pull request reviews by quickly explaining code changes and identifying potential bugs grouped by severity (critical, non-critical, nit).
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
distributed-code-flow-diagrams
enricogolfieri
Generate scoped Mermaid diagrams for distributed code flows.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
extract-author-changes
enricogolfieri
Loads context for the current branch's PR-scope changes (merge-base to HEAD), including uncommitted edits, then confirms without summarizing.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
hot-bf-pings
enricogolfieri
Drafts Slack ping messages for hot Build Failures (BFs) from a Jira filter, listing the assignee, the SERVER dependency ticket, the GitHub PR, and a one-line…
SkillCFreshness: C★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jun 15, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Unlicense
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from enricogolfieri
- 0.552score
trace-function
enricogolfieri
Statically trace what happens when a C++ function is called, including verified call edges, max-depth stack trace, and branch gates.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-resume
enricogolfieri
Resume a ticket from durable state and continue from its recorded phase.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-analyse
enricogolfieri
Analyse PERF tickets and register each new experiment in state.json (patch, comparison links, notes paths).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-flush
enricogolfieri
Persist durable ticket session truth mid-chat: update state.json and create any memory files needed (context, session notes, experiment notes), indexed from…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-plan
enricogolfieri
Start and plan a Jira ticket: load context, summarize scope, evaluate split, and produce an approved plan.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
ticket-implement
enricogolfieri
Implement an approved SERVER ticket plan: create branch, code+tests, validate, open a draft PR.
SkillBFreshness: B★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get triage-unassigned-bfs running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
triage-unassigned-bfs skill. Agent Mart. https://agentmart.dev/skills/enricogolfieri-triage-unassigned-bfs (last updated 2026-10-24)