Skip to main content

clarifying-scenarios

Evaluates whether a user's modernization/rewrite request provides enough scenario context to proceed (e.g., target component library, screenshots, design system for frontend; API contract policy, data migration strategy for backend). Produces a deterministic clarity score, emits the complete question set at once as an on-disk `clarification-questions.json` (the source of truth for the Q&A round; rendered externally into a webview/markdown, answers come back as a markdown document), and writes a canonical `clarification.md` artifact consumed by all downstream agents. Triggers: "clarification gate", "scenario clarification", "elicit missing context", "evaluate prompt completeness", "ask user for screenshots / target library / design system". NOT for: feature specification (use feature-inventory), planning (use creating-implementation-plan), implementation (use implementing-code), or resolving spec-time `[NEEDS CLARIFICATION]` markers (those remain owned by feature-inventory).

소스 정보

저장소
microsoft/github-copilot-modernization
최근 소스 활동
2026년 9월 22일 08:42
감지된 SKILL.md 언어
영어
스타
49
포크
14

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
7 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
clarifying-scenarios
description
Evaluates whether a user's modernization/rewrite request provides enough scenario context to proceed (e.g., target component library, screenshots, design system for frontend; API contract policy, data migration strategy for backend). Produces a deterministic clarity score, emits the complete question set at once as an on-disk `clarification-questions.json` (the source of truth for the Q&A round; rendered externally into a webview/markdown, answers come back as a markdown document), and writes a canonical `clarification.md` artifact consumed by all downstream agents. Triggers: "clarification gate", "scenario clarification", "elicit missing context", "evaluate prompt completeness", "ask user for screenshots / target library / design system". NOT for: feature specification (use feature-inventory), planning (use creating-implementation-plan), implementation (use implementing-code), or resolving spec-time `[NEEDS CLARIFICATION]` markers (those remain owned by feature-inventory).
## Purpose Frontend rewrites in particular fail silently when the user prompt omits the target component library, screenshots, or compliance requirements. This skill catches those gaps **before** decomposition by: 1. Evaluating the raw user prompt + project facts against three kits (frontend, backend, generic). 2. Computing a deterministic clarity score. 3. Emitting **all** clarification questions at once as a single on-disk JSON (`clarification-questions.json`) — no grouping, no interactive rounds. External tooling renders the JSON into a webview/markdown where the user answers; every select question carries an "Other" free-text choice. 4. Writing a canonical `clarification.md` consumed by Foundation/Design/Plan agents. ## Inputs You receive these from the coordinator (via task metadata or `dependencyArtifacts`): | Input | Source | Required | |-------|--------|----------| | `userInput` (raw user prompt) | task metadata | yes | | `classification` (type, complexity, target, etc.) | coordinator §1 output | yes | | `project_facts` (detected tech stack, frontend/backend presence) | coordinator §2.1 output | yes | | `interactive` (boolean — is a TTY available?) | session env (default true) | no | | Existing `clarification.md` (if any) | `{{BASE_PATH}}/clarification.md` | no | ## Outputs Two files may be written to disk: ``` {{BASE_PATH}}/clarification-questions.json ← one-shot question set + answers (source of truth for the Q&A round; persisted by the clarify tool on path A, or by this skill on path B) {{BASE_PATH}}/clarification.md ← canonical downstream artifact (written only on READY) ``` Questions are **never asked interactively and never printed as a chat form**. When the gate needs user input, the skill delivers the **complete** question set — every applicable field, all importance levels, no grouping, no rounds — as `clarification-questions.json`, via one of two paths (Step 4): preferably via the **tool pair** — **`appmod-rearchitecture-clarify`** validates and persists the question set, then **`appmod-rearchitecture-open-clarification`** opens the answering webview (and can re-open it at any time without touching the saved file); both return immediately — otherwise (tools unavailable, e.g. CLI runs) by writing the file itself. Either way the skill then returns `NEEDS_INPUT` and its turn ends — the user answers at their own pace and comes back with a short message (e.g. "continue"); the **next invocation resumes from disk (Step 0)**. The rendering (webview or fixed markdown template) shows every select question with a free-text choice; as the user clicks, the tooling persists each change — updating the JSON's `answer` fields (drafts carry `status: "answering"`) and regenerating the answers markdown at `{{BASE_PATH}}/clarification-answers.md`. The JSON stays on disk as the durable record of the question round, but it is maintained by the answering tooling — **this skill and the coordinator never read answers from the JSON**; the completed markdown is the only agent-facing answer contract. Decision tokens returned to the coordinator: - `READY <path-to-clarification.md>` — clarification.md written, ready to proceed. Normal outcome when the gate passes without questions, or of the resume invocation after the user submitted. - `NEEDS_INPUT <path-to-clarification-questions.json>` — the question round is open (webview already presented on the tool path; file written for external tooling on the fallback). The coordinator tells the user to fill in the form, submit, and reply — then `[wait]`s. - `BLOCKED <reason>` — inputs malformed or required info cannot be collected (e.g. a validation loop with the clarify tool) ## Workflow ### Step 0 — Resume check (the gate is disk-state driven and re-entrant) The gate's entire state lives on disk under `{{BASE_PATH}}`. Every invocation starts here, in order: 1. `clarification.md` exists → the gate already completed. Return `READY {{BASE_PATH}}/clarification.md`. 2. `clarification-answers.md` exists AND its front-matter says `status: submitted` → the user has answered. Read it and jump directly to Step 5. 3. `clarification-questions.json` exists (question round in flight, no submitted answers yet) → the user has not submitted. If the current `userInput` is just a continuation signal ("continue", "done", …), return `NEEDS_INPUT {{BASE_PATH}}/clarification-questions.json` again so the coordinator reminds the user to submit the form. If the user reports the form was closed, lost, or never appeared, call `appmod-rearchitecture-open-clarification` to re-present the saved question set — do NOT regenerate the JSON (that would overwrite the user's draft answers). Only on the file-based fallback (no tools) re-run Steps 1–4 from the original ask (the question set is deterministic — same inputs produce the same questions). 4. None of these files exist → fresh run; proceed to Step 1. ### Step 1 — Scope detection Apply the rules in `references/scoring-rubric.md` §"Step 1 — Scope Detection" to determine which kits apply: - `frontend` — load `references/kit-frontend.md` - `backend` — load `references/kit-backend.md` - always — load `references/kit-generic.md` If classification is `direct` or `fix_bug`, return `READY` with a minimal `clarification.md` that records `scope: []` and `clarity_score: 1.0`. Do not run scoring. ### Step 2 — Evidence extraction For each field in each applicable kit, scan the `userInput` and `project_facts` for accepted evidence (per the kit's "Accepted evidence" list). Mark each field `present` or `missing`. **Be conservative**: if you are unsure whether evidence is present, mark `missing` and let the user confirm. False positives are worse than asking. ### Step 3 — Score & decide Apply `references/scoring-rubric.md` §"Step 2-3" to compute per-kit scores and the overall pass/fail. - **All applicable kits pass** → go to Step 6 (write `clarification.md`). - **Any kit fails** → go to Step 4 (generate the question JSON). > `references/scoring-rubric.md` §Step 4 (output decision) and §Step 5 (round limit) are **superseded** by this SKILL's Step 4–5 and Round-limit sections. Apply the rubric only for scope detection (§Step 1) and scoring (§Step 2–3). ### Step 4 — Generate the one-shot question JSON 1. Load `templates/clarification-form.md` (the agent-internal field catalog) for the field set, ids, importance levels, and defaults. **Do not print it to the user.** 2. **Remove fields** for kits that are not in scope (and fields dropped by scope rules, e.g. `visual.screenshots` when no UI is in scope). 3. **Include every remaining field** — `required`, `recommended`, AND `optional`, prefilled or not. There is exactly one question round; nothing is deferred, grouped, or silently defaulted at this stage. **Always include G5 (`constraints.additional`)** — the fixed free-text "Additional Constraints" question — prefilled with its catalog default so the user can accept or override it. 4. **Author the narrative fields.** Document level: `title` (short scenario name, e.g. "WebSphere to Spring Boot" — rendered as "Clarifications - {title}"), `assessment_snapshot` (`intro` sentence + `bullets` listing the key scan findings), and `proposed_outcome` (one paragraph describing the proposed target state). Per question: a short `title` (card heading), an `impact` score 1–5 (how strongly the decision shapes the migration — rendered as stars), and `recommended` (the option value you would advise, flagged "(Recommended)" in the UI; `null` when there is no clear recommendation, always `null` for `text` questions). 5. **Pre-fill**: where `userInput` / `project_facts` contain evidence, set `prefilled: true` and `prefilled_value` so the renderer pre-selects the value for the user to confirm or override. Leave `answer: null` — only the answering side writes answers. 6. **Model dependencies** with `depends_on` (schema below) when a question's visibility or option list is decided by an earlier question's answer (e.g. component-library / state-management / routing options vary with the chosen target framework). A dependency may only reference a question that appears **earlier** in the `questions` array; cycles are forbidden. Questions without dependencies (the normal case) set `depends_on: null`. 7. Set `status: "awaiting_answers"` and every `answer` to `null`, then deliver the document via path A or B below. #### Delivery path A — clarification tools (preferred) If the **`appmod-rearchitecture-clarify`** / **`appmod-rearchitecture-open-clarification`** tool pair is available (IDE runs), use it — the first call validates and persists the document, the second presents the answering webview; both return immediately: 1. Call `appmod-rearchitecture-clarify` with the complete document serialized as a JSON **string** in `questionsJson` (status `awaiting_answers`, every answer `null`). Do NOT write `clarification-questions.json` yourself — the tool persists it. 2. On `❌ VALIDATION FAILED` — fix ONLY the listed issues and re-call with the complete corrected JSON. After **3** failed attempts, return `BLOCKED validation loop: <first error lines>`. 3. On `✅ … saved` — call `appmod-rearchitecture-open-clarification` (no input) to present the form. 4. On `✅ … presented to the user` — the webview is open and the answers will land in `{{BASE_PATH}}/clarification-answers.md`. **End this invocation now**: return `NEEDS_INPUT {{BASE_PATH}}/clarification-questions.json`. Do NOT wait, poll, or ask the questions in chat — the next invocation enters at Step 0 and picks up the submitted answers from disk. 5. If the open tool reports the webview could not be opened — the JSON is already saved; return `NEEDS_INPUT` the same way. The form can be presented later by re-calling `appmod-rearchitecture-open-clarification`, which never regenerates or overwrites the saved questions or draft answers. #### Delivery path B — file-based fallback (tool unavailable, e.g. CLI runs) 1. Write the document to `{{BASE_PATH}}/clarification-questions.json`. 2. Return `NEEDS_INPUT {{BASE_PATH}}/clarification-questions.json`. Do NOT put question text in the return body and do NOT ask anything in chat — rendering is owned by external tooling. #### `clarification-questions.json` schema (`clarification-questions/v1`) ```json { "schema": "clarification-questions/v1", "generated_at": "<UTC ISO-8601>", "user_input": "<verbatim original user ask>", "title": "AngularJS to React 18", "assessment_snapshot": { "intro": "The scan identifies an AngularJS single-page storefront with:", "bullets": [ "12 AngularJS controllers and 30 HTML templates", "REST calls to a Java backend via $http services" ] }, "proposed_outcome": "Rewrite the frontend to React 18 while preserving current behavior, URLs, and user journeys.", "scope": ["frontend", "backend", "generic"], "status": "awaiting_answers", "questions": [ { "id": "F1", "kit": "frontend", "field": "target.framework", "title": "Target frontend framework", "question": "Which target frontend framework and version should the rewrite use?", "importance": "required", "impact": 5, "type": "single_select", "options": [ { "value": "React 18", "label": "React 18" }, { "value": "Vue 3", "label": "Vue 3" }, { "value": "Angular 17", "label": "Angular 17" } ], "allow_other": true, "recommended": "React 18", "default": null, "prefilled": true, "prefilled_value": "React 18", "answer": null, "depends_on": null }, { "id": "F2", "kit": "frontend", "field": "target.component_library", "title": "Component library", "question": "What target component / UI library should the new frontend use?", "importance": "required", "impact": 4, "type": "single_select", "options": [ { "value": "shadcn/ui", "label": "shadcn/ui" }, { "value": "MUI v5", "label": "Material UI v5" } ], "allow_other": true, "recommended": "shadcn/ui", "default": null, "prefilled": false, "prefilled_value": null, "answer": null, "depends_on": { "question_id": "F1", "visible_when": null, "options_when": { "React 18": [ { "value": "shadcn/ui", "label": "shadcn/ui" }, { "value": "MUI v5", "label": "Material UI v5" }, { "value": "Ant Design v5", "label": "Ant Design v5" } ], "Vue 3": [ { "value": "Vuetify 3", "label": "Vuetify 3" }, { "value": "PrimeVue", "label": "PrimeVue" } ] } } } ] } ``` **Field rules:** - Document level: `title` — short scenario name shown as the page heading ("Clarifications - {title}"); `assessment_snapshot` — `{ intro, bullets[] }` summarizing the scan findings; `proposed_outcome` — one paragraph describing the proposed target state. All three are required. - `id` — field identifier from the catalog (F1–F10, B1–B5, G1–G5). Stable across regenerations. `G5` is the fixed "Additional Constraints" question: always included, always `type: "text"`, prefilled with its catalog default. - `title` — short card heading (a few words); the full wording goes in `question`. - `type` — `single_select` | `multi_select` | `text`. Use `text` for inherently free-form fields (e.g. screenshot paths/URLs). - `impact` — integer 1–5: how strongly this decision shapes the migration outcome. Rendered as a 1–5 star "Potential Impact" rating. - `recommended` — the option value the agent recommends; the renderer flags it "(Recommended)". `null` when no clear recommendation exists; always `null` for `text` questions. - `options[].value` — stable machine value used in answers and `options_when` keys; `label` is display-only. - `allow_other` — MUST be `true` on every `single_select` / `multi_select` question. The renderer appends a free-text "Enter your answer" choice. `text` questions omit it (free text is inherent). - `default` — the catalog's default-if-skipped value; `null` for required fields with no default. - `prefilled` / `prefilled_value` — evidence detected at generation time; the renderer shows it pre-selected for confirmation. - `answer` — `null` at generation. Filled by the answering side as `{ "value": <string | string[] | null>, "source": "user" | "default" | "skipped" }`. A free-text answer is simply `source: "user"` with a value not present in `options`. `multi_select` answers use a string array. - `depends_on` — `null`, or an object with: - `question_id` — an **earlier** question's `id`. - `visible_when` — array of the driver's option values; the question is shown only when the driver's answer is in the list. `null` = always visible. A question hidden at submit time is treated as skipped (its `default` applies). - `options_when` — map from driver option value → replacement option list. When the driver's answer matches no key (including free-text answers or unanswered), the question's own `options` array is the fallback. **Renderer contract** (informational — the fixed JSON→markdown/webview template is implemented outside this skill): render the page header (title, assessment snapshot, proposed outcome), then questions in array order grouped by `kit`, each card showing the star `impact` rating, the full `question`, and the option list with the `recommended` option flagged; pre-select `prefilled_value` (or `default`), always offer the free-text choice, apply `depends_on` reactively as the user answers, persist every user change immediately (update the JSON's `answer` fields AND regenerate the answers markdown keyed by question `id`), and on submit mark the markdown complete and hand it back to the agent as the final result. ### Step 5 — Ingest the completed answers markdown The completed markdown reaches this step in one of two ways: **read from `{{BASE_PATH}}/clarification-answers.md` at Step 0** (front-matter `status: submitted`) after the user returns — the normal tool-path flow; or, on the file-based fallback, supplied by the coordinator as the re-invocation's `userInput` (inline content or a path). The answering tooling persists the user's choices as they are made; only a **submitted** document may be consumed. > **Answer-source rule**: the answers markdown is the ONLY input this skill reads for answers. Do NOT read answers from `clarification-questions.json` — the JSON is webview-internal state maintained by the external tooling, not an agent-facing interface.
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기