Skip to content
Agentmart
Submit a tool

findings-to-ado-backlog

End-to-end orchestrator that turns findings from ANY input (audit spreadsheet, code/security review, QA report, meeting notes, a pasted list of issues) into…

Skill by ThodsaphonSonthiphin

IndexedMIT
Write a review

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/thodsaphonsonthiphin-findings-to-ado-backlog

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.

We use your email only for this newsletter. Privacy

About

End-to-end orchestrator that turns findings from ANY input (audit spreadsheet, code/security review, QA report, meeting notes, a pasted list of issues) into an Azure DevOps backlog of linked work items. Drives the six sibling ado-backlog skills in order with safety gates. Trigger whenever the user says "turn this audit/spreadsheet/review/list of issues into ADO work items", "create a backlog from these findings", "file these as ADO tickets/bugs/stories", "import this xlsx/csv into Azure DevOps", "make work items from this report", or hands you a source document and asks for it to land in ADO. This is the headline, one-shot entry point (/ado-backlog:run wraps it). Prefer this over running the sub-skills piecemeal when the user wants the whole pipeline. Not for editing existing items individually — use ado-create-work-items.

Use cases: documents, spreadsheets, testing, devops

No 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
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/findings-to-ado-backlog

What's inside

Skill name
findings-to-ado-backlog
Description
End-to-end orchestrator that turns findings from ANY input (audit spreadsheet, code/security review, QA report, meeting notes, a pasted list of issues) into an Azure DevOps backlog of linked work items. Drives the six sibling ado-backlog skills in order with safety gates. Trigger whenever the user says "turn this audit/spreadsheet/review/list of issues into ADO work items", "create a backlog from these findings", "file these as ADO tickets/bugs/stories", "import this xlsx/csv into Azure DevOps", "make work items from this report", or hands you a source document and asks for it to land in ADO. This is the headline, one-shot entry point (/ado-backlog:run wraps it). Prefer this over running the sub-skills piecemeal when the user wants the whole pipeline. Not for editing existing items individually — use ado-create-work-items.
License
MIT
Instructions
153 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (6)

  • SKILL.md
  • data-contracts.md · references/
  • create-backlog.cs · scripts/
  • read_source.py · scripts/
  • setup_check.ps1 · scripts/
  • tracking.py · scripts/

SKILL.md (first lines)

<!-- generated: third-party requirements -->
> **Requires:** `pip install openpyxl` — this skill's scripts import `openpyxl`.

# findings-to-ado-backlog (orchestrator)

Run the full pipeline: a source document in, an ADO backlog out. You coordinate six
sibling skills; each owns its step and its data contract. Your job is to sequence them,
keep the working files together, and enforce the safety gates so nothing irreversible
happens without the user seeing it first.

**Why an orchestrator:** the value is in the gates, not the glue. Creating work items is a
write the user cannot easily undo, so the pipeline is deliberately staged: read-only
extraction and classification first, a dry run that creates nothing, an explicit human
approval, then the real write. Each sub-skill is reusable on its own; this skill is the
teachable happy path that ties them together.

## Data flow

Three small JSON files carry state between steps. They share a stable **`key`** per finding
(a row number or ID column) so a created ticket can be traced back to its source row.
Full shapes live in `references/data-contracts.md` — read it once; do
not duplicate schemas here.

```
extract-findings      -> findings.json
classify-work-items   -> backlog_input.json   (consumed by create-backlog.cs)
ado-create-work-items -> backlog_result.json  (consumed by tracking.py writeback)
```

**Working directory:** create one beside the source (e.g. next to the xlsx) and keep all
three JSON files there. This keeps a run self-contained and re-runnable.

## Process

### 0. Prereqs + auth (optional but recommended on first run)

Confirm the toolchain is present before you invest in extraction. This is read-only.

```powershell
powershell -ExecutionPolicy Bypass -File "${CLAUDE_SKILL_DIR}/scripts/setup_check.ps1"
```

It checks `az login`, .NET >= 10, Python + openpyxl, and the `AZDO_ORG` / `AZDO_PROJECT`
env vars. For auth specifics (Entra token vs `AZDO_PAT`, org/project), delegate to
**ado-auth**. The create script defaults to an Entra token via
`az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv`.

### 1. Extract → `findings.json` (delegate to **extract-findings**)

Have **extract-findings** read the source (it uses
`${CLAUDE_SKILL_DIR}/scripts/read_source.py` for xlsx/csv; docs and pasted text are read
directly) and normalize it to `findings.json`. **Confirm the column mapping with the user**
before moving on — which column is the `key`, which are `current` / `expected`, where
`severity` and `status` come from. A wrong mapping silently poisons everything downstream.

### 2. Triage → scoped subset (delegate to **triage-findings**)

Don't file everything blindly. Have **triage-findings** filter `findings.json` to the wave
worth creating now. **Recommend Critical + confirmed first** — it is the smallest defensible
batch and proves the pipeline before you fan out. Hold `needs-review` items for a later wave
and tell the user you are doing so.

### 3. Classify → `backlog_input.json` (delegate to **classify-work-items**)

Have **classify-work-items** map the scoped findings to ADO work items. It must:

- **Discover the target project's process** (Agile / Scrum / Basic / CMMI) and pick
  **industry-standard types that actually exist on that board** — e.g. a defect is `Bug` on
  Agile/Scrum/CMMI but Basic has no Bug (use `Issue`). See the process→types table in
  `data-contracts.md`.
- Optionally add a **`Feature` or `Epic` parent** to group the batch; every item links under
  it via `System.LinkTypes.Hierarchy-Reverse`.
- **Decide assignment — ask the user who these go to.** A fresh backlog is usually created
  *unassigned* (assigned later in planning), but ask: leave unassigned, assign to the user
  themselves, assign the batch to one person, or map a per-row owner. Set `System.AssignedTo`
  (a UPN like `name@domain`) on each item, or assign the whole batch at create time with the
  `AZDO_ASSIGNED_TO` env var. The dry run validates the identity before any real write.
- Emit raw ADO field reference names (`System.Title`, `Microsoft.VSTS.Common.Priority`,
  `System.Tags`; Bug body `Microsoft.VSTS.TCM.ReproSteps`; Story/PBI body `System.Description`
  + `Microsoft.VSTS.Common.AcceptanceCriteria`). HTML fields must be valid HTML.
- **Estimate time** per item and attach it as a **child Task** (hours in Original/Remaining
  Work; the detailed breakdown in the Task description) — see `classify-work-items`.

> **GATE — estimates.** classify proposes the hours per item as a table. **Show it and get the
> user's OK / adjustments before the dry run.** Estimates are cheap to fix now, annoying to fix
> across already-created Tasks.

### 4. DRY RUN → validate, create nothing (delegate to **ado-create-work-items**)

This is the first gate. The create script defaults to dry run, which sends each item to ADO
with `validateOnly=true` — it catches a bad type, a missing required field, or a wrong
area/iteration path **without creating anything**.

```powershell
$env:AZDO_DRY_RUN = "true"
dotnet run "${CLAUDE_SKILL_DIR}/scripts/create-backlog.cs" -- "<workdir>/backlog_input.json"
```

Show the user the validated PASS/FAIL list (type, title per `key`). Fix any FAIL in
`backlog_input.json` and re-run until clean.

> **GATE — stop here.** Do not proceed to the real run until the user has explicitly
> approved the validated list. Present the count, the types, and the parent, and wait for a
> clear yes.

### 5. REAL RUN → `backlog_result.json` (delegate to **ado-create-work-items**)

Only after approval. Setting `AZDO_DRY_RUN` to `false` creates the parent (if any), every
child, **and a child Task (with the hour estimate) under each item**, links them all, and writes
`backlog_result.json`.

```powershell
$env:AZDO_DRY_RUN = "false"
dotnet run "${CLAUDE_SKILL_DIR}/scripts/create-backlog.cs" -- "<workdir>/backlog_input.json"
```

Then **verify the created items** — confirm each `key` got an `id` and `url` in
`backlog_result.json`, and that any rows logged `FAILED` are surfaced to the user, not buried.

From ThodsaphonSonthiphin/workflow-daily-work, MIT.

More from ThodsaphonSonthiphin/workflow-daily-work

Signals

Stars
0
Forks
0
Open issues
6
Last commit (this folder)
Sep 5, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ThodsaphonSonthiphin

Cite this page

findings-to-ado-backlog skill. Agent Mart. https://agentmart.dev/skills/thodsaphonsonthiphin-findings-to-ado-backlog (last updated 2026-10-24)