Skip to main content

issues-from-assessment

Convert a `/cd-test-architecture` assessment into a parent + Phase-tagged child issues on the tracker the operator points at (ADO, GitHub, GitLab, Jira). Dispatches by parent URL host to the tracker's own CLI (`az boards`, `gh`, `glab`, `acli`). When no parent URL is given, or when the required CLI is not installed, falls back to local plan files under `.claude/plans/<workflow>/` after informing the operator. Multi-workflow: called by `/test-improve` (Phase 4), via its own `--workflow` namespace so memory paths and tracker labels never collide.

Source facts

Repository
bdfinst/agentic-dev-team
Last source activity
August 4, 2026 at 18:58
Detected SKILL.md language
English
Stars
299
Forks
36

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
issues-from-assessment
description
Convert a `/cd-test-architecture` assessment into a parent + Phase-tagged child issues on the tracker the operator points at (ADO, GitHub, GitLab, Jira). Dispatches by parent URL host to the tracker's own CLI (`az boards`, `gh`, `glab`, `acli`). When no parent URL is given, or when the required CLI is not installed, falls back to local plan files under `.claude/plans/<workflow>/` after informing the operator. Multi-workflow: called by `/test-improve` (Phase 4), via its own `--workflow` namespace so memory paths and tracker labels never collide.
argument-hint
<assessment-path> [--parent <issue-url>] [--repo-slug <slug>] [--workflow <name>] [--refactor-mode <no-refactor|refactor-allowed>] [--dry-run]
user-invocable
true
allowed-tools
Read, Glob, Grep, Bash, Write
# Issues from Assessment Role: worker. Converts the assessment produced by `/cd-test-architecture` into the tracker artifacts the calling test-improvement workflow expects (Feature/Epic + Phase-tagged Stories + Tasks with predecessor links), or — when no tracker CLI is available — into local plan files with the same structure. Lifts the preview-then-confirm + `gh issue create` patterns from `/issues-from-plan`. You have been invoked with the `/issues-from-assessment` command. ## Parse Arguments Arguments: $ARGUMENTS - Positional: `<assessment-path>` — the file `/cd-test-architecture` wrote (`.dev-team-reports/cd-test-architecture-<app>.md`). - `--parent <issue-url>` — parent issue / Feature / Epic URL. Empty or omitted → local-files mode. - `--repo-slug <slug>` — slug used for the `.claude/memory/<workflow>/<slug>/` namespace. Defaults to the assessment file's `<app>` token. - `--workflow <name>` — the workflow namespace under `.claude/memory/` and `.claude/plans/`, and the leading tracker-label token. Defaults to `test-improve`. Callers pass their own namespace so parallel runs stay quarantined. - `--refactor-mode <no-refactor|refactor-allowed>` — optional; the caller's Phase-0 refactor choice. Defaults to `refactor-allowed` (unchanged behavior) when omitted. When `no-refactor`, the Phase-5 `[Refactor-for-testability]` work is emitted as **out-of-scope / skipped-in-no-refactor** plan entries — informational context only, **never actionable Stories** — so the written plan shows the coverage/behavior left on the table without offering refactor work this run will not do. - `--dry-run` — print the preview list and exit without creating anything. If `<assessment-path>` is absent or the file is missing, ask the operator to point at one. **Path + label templates.** Every filesystem path and every operator-visible tracker label in the Steps below carries `<workflow>` as a placeholder — the skill interpolates the resolved `--workflow` value at run time. No literal workflow name appears in a path or label string. ## Steps ### 1. Resolve sink (host-based dispatch + CLI probe) Parse the `--parent` URL host. Pick the CLI and probe it: | Host pattern | CLI | Probe | |---|---|---| | `dev.azure.com` | `az` (with `az boards` extension) | `command -v az >/dev/null 2>&1 && az extension show -n azure-devops >/dev/null 2>&1` | | `github.com` | `gh` | `command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1` | | `*.atlassian.net` | `acli` (Atlassian CLI) | `command -v acli >/dev/null 2>&1` — if missing, try REST with `$JIRA_TOKEN` | | `gitlab.com` / self-hosted GitLab | `glab` | `command -v glab >/dev/null 2>&1 && glab auth status >/dev/null 2>&1` | | *empty / omitted* | (none) | local-files mode | **If the probe fails**, tell the operator exactly what's missing and the canonical install / auth command, then fall back to local-files mode automatically. Example: ``` gh is not installed. Run `/project-init` to set up this repo's tooling, or install gh directly from https://cli.github.com/ and run `gh auth login`. Falling back to local-files mode — Stories will be written to .claude/plans/<workflow>/. ``` Record the resolved sink in `.claude/memory/<workflow>/<slug>/phase-1.md` so subsequent workers (`/coverage-baseline`, `/coverage-delta`, `/quality-targets-converge`) reuse the same dispatch decision. ### 2. Read the assessment + derive children Parse the assessment file's sections per `/cd-test-architecture`'s contract: - **Components & patterns** → Feature description. - **Current-vs-correct test classification** → input to Phase-5 `[Re-scope]` Stories. - **Duplicate-coverage table** → Phase-5 `[De-duplicate]` Stories. - **CD-fitness gaps** → Phase-1 `[Gap]` Stories. - **Seam-reachability table per component** → Phase-4 `[Baseline]` Stories + Phase-5 `[Refactor-for-testability]` Stories. When `--refactor-mode no-refactor`, the `[Refactor-for-testability]` entries are emitted **out-of-scope (skipped-in-no-refactor)** — listed for visibility, not created as actionable Stories. - **Target architecture (per component)** → Phase-5 Stories per (component, layer) **EXCLUDING `[Component tests]`** — those Stories are created by `/gherkin-public` at the end of Phase 2, bound to the approved Gherkin scenarios. `[Component tests]` Stories are intentionally NOT created from the assessment. Creating them here would bind the test code to the *recommended* behavior in the assessment rather than the *approved* behavior in the Gherkin — and the Phase-2 human gate exists precisely to let the operator sharpen, add to, or correct the inferred behaviors before any test binds to them. `/gherkin-public --create-stories` produces them after the gate. For each derived child, build the title + body + phase-tag + predecessor list per the prompt's "ADO mapping" section in `reports/legacy-test-modernization-prompt.md`. The phase tags are `Phase-1` through `Phase-5`. Predecessor links follow the rules: - Every `[Baseline]` blocked by `[Audit]` (created in Phase 3, referenced by ID). - Every `[Refactor-for-testability]` blocked by the matching `[Baseline]`. - Every contract / integration / E2E / resilience Story blocked by the same component's `[Component tests]` (those IDs are filled in by `/gherkin-public` in Phase 2; this skill leaves a placeholder `Depends on: [Component tests] for <component> (created in Phase 2)` and the orchestrator backfills the link after Phase 2). - Every `[De-duplicate]` blocked by the Story that adds the kept-layer test. - Every `[Re-scope]` blocked by the Story that lands the test at the correct layer. ### 3. Preview + confirm Print the full list (titles, types, predecessors, one-line acceptance summary) — grouped by phase. Ask: > Create these N issues against `<parent or local-files>`? (yes / no / dry-run output only) Do not call any tracker CLI or write any plan files until the operator answers `yes`. If `--dry-run` was given, print the list and exit zero. ### 4. Create the parent (tracker mode only) If `--parent <url>` was provided, the parent already exists — capture its ID/number from the URL. Otherwise (local-files mode), create the parent **file**: ``` .claude/plans/<workflow>/FEATURE.md ``` Contents: the assessment summary (components table, target pre-merge gate, link to the MinimumCD component-test page), plus a placeholder block for running metric snapshots that `/coverage-baseline`, `/coverage-delta`, and `/quality-targets-converge` will append to. ### 5. Create the children — partial-failure safe Two modes share the same control flow; only the create-call differs. Every tracker label carries `<workflow>` as its leading token so an operator scanning a mixed board can tell which workflow authored an issue. **Tracker mode.** For each child in dependency order, call the resolved CLI. Lift the GitHub pattern verbatim from `/issues-from-plan`, **including its Conventional Commit title rule** — GitHub is the only tracker here bound to `commitlint.config.js`/`issue-title-lint.yml`; ADO/GitLab/Jira titles keep the plain `[<phase-tag>] <component>` form from step 2 unchanged. For GitHub, prefix that same phase-tag title with a type — `test:` fits every phase here (audit/baseline/refactor-for-testability/de-duplicate/re-scope are all test-suite work): `test: [Baseline] <component>`. Verify with `printf '%s' "<title>" | npx commitlint --verbose` before creating. ```bash # GitHub — github.com gh issue create --title "test: [<phase-tag>] <title>" --body "$(cat <<'EOF' ## What to Build <one-paragraph behavior description> Part of #<parent> ## Phase Phase-<n> ## Depends On - #<predecessor>: <reason> <!-- "none" if no predecessors --> ## Acceptance Criteria - [ ] <gherkin scenario 1> - [ ] <gherkin scenario 2> ## Architectural Context <assessment excerpt for this row> ## Testing Approach <which test layer, which doubles, which pipeline stage> EOF )" --label "<workflow>,phase-<n>,<minimumcd-type>" ``` For the other trackers: ```bash # Azure DevOps — dev.azure.com az boards work-item create \ --org "https://dev.azure.com/<org>" --project "<project>" \ --type "User Story" --title "<title>" \ --description "<body>" \ --fields "Microsoft.VSTS.Common.AcceptanceCriteria=<gherkin>" \ "System.Tags=<workflow>; phase-<n>; <minimumcd-type>" # Then `az boards work-item relation add` for parent + predecessor links. # GitLab — gitlab.com / self-hosted glab issue create --title "<title>" --description "<body>" \ --label "<workflow>,phase-<n>,<minimumcd-type>" \ --linked-mr none # Predecessor links via `glab issue note add` referencing #<id>. # Jira — *.atlassian.net acli jira workitem create --type Story --summary "<title>" \ --description "<body>" \ --label "<workflow>" --label "phase-<n>" --label "<minimumcd-type>" # Parent + `is blocked by` links via `acli jira workitem link`. ``` Record the **child-slug → tracker-id** map as you go (in `.claude/memory/<workflow>/<slug>/issue-map.json`). **Local-files mode.** Write one `.claude/plans/<workflow>/phase-<n>/<child-slug>.md` per child. The file's body holds the same fields the tracker would (Phase, Depends On, Acceptance Criteria, Architectural Context, Testing Approach). Cross-Story predecessor links use **relative paths** (e.g. `Blocked by: ../phase-4/baseline-orders-api.md`). A `Status:` line at the top defaults to `Open` and gets flipped to `Done: <date>` by `/coverage-delta` and `/quality-targets-converge` when the matching gate passes. **Partial-failure safety.** If any CLI call (or file write) fails partway, do **not** abort silently. Report: - Which children were created (with IDs / paths). - Which were not. - The first failure's stderr. Leave the partial state on disk and let the operator decide whether to resume. ### 6. Backfill predecessor links For tracker mode, after every child exists, walk the child-slug → tracker-id map and add the predecessor links: - GitHub: append `Depends on #<n>` lines to the body, or use `gh issue edit` to update the issue. - ADO: `az boards work-item relation add --relation-type "System.LinkTypes.Dependency-Reverse" --id <child> --target-id <predecessor>`. - GitLab: `glab issue note add <child-iid> --message "Depends on #<predecessor>"`. - Jira: `acli jira workitem link --inward "is blocked by" --from <child> --to <predecessor>`. For local-files mode, the `Blocked by:` lines were written in Step 5 — no backfill needed. ### 7. Persist phase-1 progress Write `.claude/memory/<workflow>/<slug>/phase-1.md` with: - Resolved sink (CLI + parent URL or `local-files`). - Phase counts per phase tag. - The child-slug → tracker-id (or relative path) map. - The assessment file path. - Quality targets in force. ### 8. Report Print: - Parent: `<URL>` or `.claude/plans/<workflow>/FEATURE.md`. - N children created across Phases 1, 2, 4, 5 (Phase-3 Stories are created by `/test-audit-disable` + `/coverage-baseline` later). - Any partial-failure messages from Step 5. - The path to `.claude/memory/<workflow>/<slug>/phase-1.md` for `/continue`. ## Examples / Integration - `/test-improve` invokes this worker with `--workflow test-improve` from its Phase 4; paths resolve under `.claude/memory/test-improve/<slug>/` and labels lead with `test-improve`. - `/test-improve` invokes this worker with `--workflow test-improve`; paths resolve under `.claude/memory/test-improve/<slug>/` and labels lead with `test-improve`, keeping a mixed board unambiguous when both workflows are active. ## Notes - This worker is the only place tracker-CLI knowledge sits. Adding a new tracker means one new branch in Steps 1 + 5; no other skill changes. - `/issues-from-plan` (the existing GitHub-only issue creator) handles a *plan*; this worker handles a *test-architecture assessment*. The two are intentionally separate — overlap is only the `gh issue create` snippet. - Adding a new workflow caller means passing a new `--workflow <name>` value; no path or label edits inside this skill are required because both are templated.
View on GitHub