[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-clarifying-scenarios":3,"mdc-6hmfaw-key":33,"related-repo-microsoft-clarifying-scenarios":1625,"related-org-microsoft-clarifying-scenarios":1721},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"clarifying-scenarios","evaluate modernization request scenario context","Evaluates whether a user's modernization\u002Frewrite 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, asks the user for missing required fields via a structured form, and writes a canonical `clarification.md` artifact consumed by all downstream agents.\nTriggers: \"clarification gate\", \"scenario clarification\", \"elicit missing context\", \"evaluate prompt completeness\", \"ask user for screenshots \u002F target library \u002F design system\".\nNOT 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).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19],{"name":13,"slug":14,"type":15},"Modernization","modernization","tag",{"name":17,"slug":18,"type":15},"Copilot","copilot",{"name":20,"slug":21,"type":15},"Engineering","engineering",34,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization","2026-07-03T16:31:04.911521",null,8,[18,14],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[18,14],"GitHub Copilot modernization agent","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization\u002Ftree\u002FHEAD\u002Fplugins\u002Fgithub-copilot-modernization\u002Fskills\u002Fclarifying-scenarios","---\nname: clarifying-scenarios\ndescription: |\n  Evaluates whether a user's modernization\u002Frewrite 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, asks the user for missing required fields via a structured form, and writes a canonical `clarification.md` artifact consumed by all downstream agents.\n  Triggers: \"clarification gate\", \"scenario clarification\", \"elicit missing context\", \"evaluate prompt completeness\", \"ask user for screenshots \u002F target library \u002F design system\".\n  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).\n---\n\n## Purpose\n\nFrontend 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:\n\n1. Evaluating the raw user prompt + project facts against three kits (frontend, backend, generic).\n2. Computing a deterministic clarity score.\n3. Asking the user — exactly once per round, in a single batched form — for missing required\u002Frecommended fields.\n4. Writing a canonical `clarification.md` consumed by Foundation\u002FDesign\u002FPlan agents.\n\n## Inputs\n\nYou receive these from the coordinator (via task metadata or `dependencyArtifacts`):\n\n| Input | Source | Required |\n|-------|--------|----------|\n| `userInput` (raw user prompt) | task metadata | yes |\n| `classification` (type, complexity, target, etc.) | coordinator §1 output | yes |\n| `project_facts` (detected tech stack, frontend\u002Fbackend presence) | coordinator §2.1 output | yes |\n| `interactive` (boolean — is a TTY available?) | session env (default true) | no |\n| Existing `clarification.md` (if any) | `{{BASE_PATH}}\u002Fclarification.md` | no |\n\n## Outputs\n\nOnly **one** file is ever written to disk:\n\n```\n{{BASE_PATH}}\u002Fclarification.md   ← canonical artifact (written only on READY)\n```\n\nThe clarification **form is never persisted to disk**. When the gate needs user input, the skill renders the form inline (as the body of its return value) and the coordinator embeds it in the `[wait]` message shown to the user. The user's reply comes back through the next invocation's `userInput` \u002F conversation context — not by editing a file. This eliminates a class of bugs where a stale form lingers on disk after clarification completes.\n\nDecision tokens returned to the coordinator:\n\n- `READY \u003Cpath-to-clarification.md>` — clarification.md written, ready to proceed\n- `NEEDS_INPUT` — the body of this return value IS the form markdown; coordinator shows it to the user verbatim inside `[wait]`\n- `BLOCKED \u003Creason>` — inputs malformed or required info cannot be collected\n\n## Workflow\n\n### Step 1 — Scope detection\n\nApply the rules in `references\u002Fscoring-rubric.md` §\"Step 1 — Scope Detection\" to determine which kits apply:\n- `frontend` — load `references\u002Fkit-frontend.md`\n- `backend` — load `references\u002Fkit-backend.md`\n- always — load `references\u002Fkit-generic.md`\n\nIf 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.\n\n### Step 2 — Evidence extraction\n\nFor 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`.\n\n**Be conservative**: if you are unsure whether evidence is present, mark `missing` and let the user confirm. False positives are worse than asking.\n\n### Step 3 — Score & decide\n\nApply `references\u002Fscoring-rubric.md` §\"Step 2-3\" to compute per-kit scores and the overall pass\u002Ffail.\n\n- **All applicable kits pass** → go to Step 6 (write `clarification.md`).\n- **Any kit fails** → go to Step 4 (write form).\n\n### Step 4 — Generate structured questions\n\n1. Load `templates\u002Fclarification-form.md` to identify the fields that need answers. **Do not write anything to disk.**\n2. **Remove fields** for kits that are not in scope.\n3. **Pre-fill** any fields that already have evidence in `userInput` or `project_facts` — mark them as `prefilled: true` with the detected value so the coordinator can show them as pre-selected defaults.\n4. Return `NEEDS_INPUT` with the body as a **JSON array** of question objects. Each object has:\n   ```json\n   {\n     \"id\": \"F2\",\n     \"question\": \"What target component \u002F UI library should the new frontend use?\",\n     \"importance\": \"required\",\n     \"options\": [\"shadcn\u002Fui\", \"Material UI\", \"Ant Design\", \"Chakra UI\"],\n     \"default\": null,\n     \"prefilled\": false,\n     \"prefilled_value\": null\n   }\n   ```\n   - `id`: field identifier (F1–F10, B1–B5, G1–G3).\n   - `question`: human-readable question text (concise, one sentence).\n   - `importance`: `required` | `recommended` | `optional`.\n   - `options`: array of common choices (may be empty if free-text only). Include an \"Other\" option when applicable.\n   - `default`: the default value if skipped (null for required fields).\n   - `prefilled`: true if evidence was found in the user's input.\n   - `prefilled_value`: the detected value (null if not prefilled).\n5. The coordinator will present these questions interactively (not as a printed form) and re-invoke this skill with the collected answers.\n\n### Step 5 — Re-invocation after user reply\n\nWhen re-invoked with the user's collected answers (formatted as `\"F1: \u003Canswer>, F2: \u003Canswer>, ...\"` or free-text):\n\n1. Parse the user's reply against the field list. Tolerate variations: key-value pairs, a bullet list, or sentence form — all map to the same fields by id (F1–F10, B1–B5, G1–G3).\n2. For each field:\n   - If user provided an answer → `resolution: user`, value = answer.\n   - If user selected a default \u002F accepted pre-fill → `resolution: user`, value = confirmed value.\n   - If answer is empty and field is not `required` → `resolution: default`, value = the field's `default-if-skipped`.\n   - If answer is empty and field IS `required` → `resolution: blocking`, no value, append to `blocking_gaps`.\n3. Re-score. If all required fields are now answered (or marked blocking), proceed to Step 6. Otherwise, if `rounds \u003C 2`, return `NEEDS_INPUT` again with only the still-missing fields as structured questions.\n4. If `rounds == 2` and gaps remain, apply defaults to all non-required missing fields and mark unfilled required fields as `blocking_gaps`. Proceed to Step 6.\n\n### Step 6 — Write `clarification.md`\n\n1. Copy `templates\u002Fclarification.md` to `{{BASE_PATH}}\u002Fclarification.md`.\n2. Populate the YAML front-matter:\n   - `generated_at`: current UTC time\n   - `scope`: the detected scope list\n   - `clarity_score`: the final overall score\n   - `rounds`: number of clarification rounds taken\n   - `gaps`: every field where `resolution != user`\n   - `blocking_gaps`: every required field with `resolution == blocking`\n3. Fill the body sections with the resolved values. Remove sections for out-of-scope kits.\n4. Return `READY \u003Cpath>`.\n\n> **No cleanup step needed.** Because the form was never written to disk, there is nothing to delete. This is the single source-of-truth file for clarification state.\n\n\n## Non-interactive \u002F CLI mode\n\nWhen `interactive == false` (no TTY, `--yes` flag, CI run):\n\n- Skip Step 4\u002F5 entirely.\n- Apply `default-if-skipped` to every missing non-required field.\n- For missing required fields: return `BLOCKED missing required fields: \u003Clist>`. The coordinator decides whether to fail or proceed with risks.\n\n## Round limit\n\nMaximum **2** clarification rounds per session. After round 2, defaults are applied automatically — the user is not asked a third time.\n\n## Determinism guarantee\n\nGiven the same `userInput`, `classification`, and `project_facts`, this skill **must** produce the same `clarity_score` and the same set of asked fields. Do not introduce randomness or model-driven judgement at the scoring step — only at the evidence-extraction step (where light interpretation of natural language is unavoidable).\n\n## Resources\n\n### References\n- `references\u002Fkit-frontend.md` — full frontend field set\n- `references\u002Fkit-backend.md` — backend field set (v1 skeleton)\n- `references\u002Fkit-generic.md` — baseline fields (always applied)\n- `references\u002Fscoring-rubric.md` — scoring algorithm and pass thresholds\n\n### Templates\n- `templates\u002Fclarification-form.md` — user-facing questionnaire\n- `templates\u002Fclarification.md` — canonical artifact schema (clarification\u002Fv1)\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,47,61,95,101,114,269,275,287,299,326,331,373,379,386,399,446,498,504,537,554,560,572,602,608,1112,1118,1131,1264,1275,1398,1412,1418,1439,1471,1477,1489,1495,1535,1541,1547,1590,1596,1619],{"type":39,"tag":40,"props":41,"children":43},"element","h2",{"id":42},"purpose",[44],{"type":45,"value":46},"text","Purpose",{"type":39,"tag":48,"props":49,"children":50},"p",{},[51,53,59],{"type":45,"value":52},"Frontend rewrites in particular fail silently when the user prompt omits the target component library, screenshots, or compliance requirements. This skill catches those gaps ",{"type":39,"tag":54,"props":55,"children":56},"strong",{},[57],{"type":45,"value":58},"before",{"type":45,"value":60}," decomposition by:",{"type":39,"tag":62,"props":63,"children":64},"ol",{},[65,71,76,81],{"type":39,"tag":66,"props":67,"children":68},"li",{},[69],{"type":45,"value":70},"Evaluating the raw user prompt + project facts against three kits (frontend, backend, generic).",{"type":39,"tag":66,"props":72,"children":73},{},[74],{"type":45,"value":75},"Computing a deterministic clarity score.",{"type":39,"tag":66,"props":77,"children":78},{},[79],{"type":45,"value":80},"Asking the user — exactly once per round, in a single batched form — for missing required\u002Frecommended fields.",{"type":39,"tag":66,"props":82,"children":83},{},[84,86,93],{"type":45,"value":85},"Writing a canonical ",{"type":39,"tag":87,"props":88,"children":90},"code",{"className":89},[],[91],{"type":45,"value":92},"clarification.md",{"type":45,"value":94}," consumed by Foundation\u002FDesign\u002FPlan agents.",{"type":39,"tag":40,"props":96,"children":98},{"id":97},"inputs",[99],{"type":45,"value":100},"Inputs",{"type":39,"tag":48,"props":102,"children":103},{},[104,106,112],{"type":45,"value":105},"You receive these from the coordinator (via task metadata or ",{"type":39,"tag":87,"props":107,"children":109},{"className":108},[],[110],{"type":45,"value":111},"dependencyArtifacts",{"type":45,"value":113},"):",{"type":39,"tag":115,"props":116,"children":117},"table",{},[118,142],{"type":39,"tag":119,"props":120,"children":121},"thead",{},[122],{"type":39,"tag":123,"props":124,"children":125},"tr",{},[126,132,137],{"type":39,"tag":127,"props":128,"children":129},"th",{},[130],{"type":45,"value":131},"Input",{"type":39,"tag":127,"props":133,"children":134},{},[135],{"type":45,"value":136},"Source",{"type":39,"tag":127,"props":138,"children":139},{},[140],{"type":45,"value":141},"Required",{"type":39,"tag":143,"props":144,"children":145},"tbody",{},[146,171,194,217,241],{"type":39,"tag":123,"props":147,"children":148},{},[149,161,166],{"type":39,"tag":150,"props":151,"children":152},"td",{},[153,159],{"type":39,"tag":87,"props":154,"children":156},{"className":155},[],[157],{"type":45,"value":158},"userInput",{"type":45,"value":160}," (raw user prompt)",{"type":39,"tag":150,"props":162,"children":163},{},[164],{"type":45,"value":165},"task metadata",{"type":39,"tag":150,"props":167,"children":168},{},[169],{"type":45,"value":170},"yes",{"type":39,"tag":123,"props":172,"children":173},{},[174,185,190],{"type":39,"tag":150,"props":175,"children":176},{},[177,183],{"type":39,"tag":87,"props":178,"children":180},{"className":179},[],[181],{"type":45,"value":182},"classification",{"type":45,"value":184}," (type, complexity, target, etc.)",{"type":39,"tag":150,"props":186,"children":187},{},[188],{"type":45,"value":189},"coordinator §1 output",{"type":39,"tag":150,"props":191,"children":192},{},[193],{"type":45,"value":170},{"type":39,"tag":123,"props":195,"children":196},{},[197,208,213],{"type":39,"tag":150,"props":198,"children":199},{},[200,206],{"type":39,"tag":87,"props":201,"children":203},{"className":202},[],[204],{"type":45,"value":205},"project_facts",{"type":45,"value":207}," (detected tech stack, frontend\u002Fbackend presence)",{"type":39,"tag":150,"props":209,"children":210},{},[211],{"type":45,"value":212},"coordinator §2.1 output",{"type":39,"tag":150,"props":214,"children":215},{},[216],{"type":45,"value":170},{"type":39,"tag":123,"props":218,"children":219},{},[220,231,236],{"type":39,"tag":150,"props":221,"children":222},{},[223,229],{"type":39,"tag":87,"props":224,"children":226},{"className":225},[],[227],{"type":45,"value":228},"interactive",{"type":45,"value":230}," (boolean — is a TTY available?)",{"type":39,"tag":150,"props":232,"children":233},{},[234],{"type":45,"value":235},"session env (default true)",{"type":39,"tag":150,"props":237,"children":238},{},[239],{"type":45,"value":240},"no",{"type":39,"tag":123,"props":242,"children":243},{},[244,256,265],{"type":39,"tag":150,"props":245,"children":246},{},[247,249,254],{"type":45,"value":248},"Existing ",{"type":39,"tag":87,"props":250,"children":252},{"className":251},[],[253],{"type":45,"value":92},{"type":45,"value":255}," (if any)",{"type":39,"tag":150,"props":257,"children":258},{},[259],{"type":39,"tag":87,"props":260,"children":262},{"className":261},[],[263],{"type":45,"value":264},"{{BASE_PATH}}\u002Fclarification.md",{"type":39,"tag":150,"props":266,"children":267},{},[268],{"type":45,"value":240},{"type":39,"tag":40,"props":270,"children":272},{"id":271},"outputs",[273],{"type":45,"value":274},"Outputs",{"type":39,"tag":48,"props":276,"children":277},{},[278,280,285],{"type":45,"value":279},"Only ",{"type":39,"tag":54,"props":281,"children":282},{},[283],{"type":45,"value":284},"one",{"type":45,"value":286}," file is ever written to disk:",{"type":39,"tag":288,"props":289,"children":293},"pre",{"className":290,"code":292,"language":45},[291],"language-text","{{BASE_PATH}}\u002Fclarification.md   ← canonical artifact (written only on READY)\n",[294],{"type":39,"tag":87,"props":295,"children":297},{"__ignoreMap":296},"",[298],{"type":45,"value":292},{"type":39,"tag":48,"props":300,"children":301},{},[302,304,309,311,317,319,324],{"type":45,"value":303},"The clarification ",{"type":39,"tag":54,"props":305,"children":306},{},[307],{"type":45,"value":308},"form is never persisted to disk",{"type":45,"value":310},". When the gate needs user input, the skill renders the form inline (as the body of its return value) and the coordinator embeds it in the ",{"type":39,"tag":87,"props":312,"children":314},{"className":313},[],[315],{"type":45,"value":316},"[wait]",{"type":45,"value":318}," message shown to the user. The user's reply comes back through the next invocation's ",{"type":39,"tag":87,"props":320,"children":322},{"className":321},[],[323],{"type":45,"value":158},{"type":45,"value":325}," \u002F conversation context — not by editing a file. This eliminates a class of bugs where a stale form lingers on disk after clarification completes.",{"type":39,"tag":48,"props":327,"children":328},{},[329],{"type":45,"value":330},"Decision tokens returned to the coordinator:",{"type":39,"tag":332,"props":333,"children":334},"ul",{},[335,346,362],{"type":39,"tag":66,"props":336,"children":337},{},[338,344],{"type":39,"tag":87,"props":339,"children":341},{"className":340},[],[342],{"type":45,"value":343},"READY \u003Cpath-to-clarification.md>",{"type":45,"value":345}," — clarification.md written, ready to proceed",{"type":39,"tag":66,"props":347,"children":348},{},[349,355,357],{"type":39,"tag":87,"props":350,"children":352},{"className":351},[],[353],{"type":45,"value":354},"NEEDS_INPUT",{"type":45,"value":356}," — the body of this return value IS the form markdown; coordinator shows it to the user verbatim inside ",{"type":39,"tag":87,"props":358,"children":360},{"className":359},[],[361],{"type":45,"value":316},{"type":39,"tag":66,"props":363,"children":364},{},[365,371],{"type":39,"tag":87,"props":366,"children":368},{"className":367},[],[369],{"type":45,"value":370},"BLOCKED \u003Creason>",{"type":45,"value":372}," — inputs malformed or required info cannot be collected",{"type":39,"tag":40,"props":374,"children":376},{"id":375},"workflow",[377],{"type":45,"value":378},"Workflow",{"type":39,"tag":380,"props":381,"children":383},"h3",{"id":382},"step-1-scope-detection",[384],{"type":45,"value":385},"Step 1 — Scope detection",{"type":39,"tag":48,"props":387,"children":388},{},[389,391,397],{"type":45,"value":390},"Apply the rules in ",{"type":39,"tag":87,"props":392,"children":394},{"className":393},[],[395],{"type":45,"value":396},"references\u002Fscoring-rubric.md",{"type":45,"value":398}," §\"Step 1 — Scope Detection\" to determine which kits apply:",{"type":39,"tag":332,"props":400,"children":401},{},[402,419,435],{"type":39,"tag":66,"props":403,"children":404},{},[405,411,413],{"type":39,"tag":87,"props":406,"children":408},{"className":407},[],[409],{"type":45,"value":410},"frontend",{"type":45,"value":412}," — load ",{"type":39,"tag":87,"props":414,"children":416},{"className":415},[],[417],{"type":45,"value":418},"references\u002Fkit-frontend.md",{"type":39,"tag":66,"props":420,"children":421},{},[422,428,429],{"type":39,"tag":87,"props":423,"children":425},{"className":424},[],[426],{"type":45,"value":427},"backend",{"type":45,"value":412},{"type":39,"tag":87,"props":430,"children":432},{"className":431},[],[433],{"type":45,"value":434},"references\u002Fkit-backend.md",{"type":39,"tag":66,"props":436,"children":437},{},[438,440],{"type":45,"value":439},"always — load ",{"type":39,"tag":87,"props":441,"children":443},{"className":442},[],[444],{"type":45,"value":445},"references\u002Fkit-generic.md",{"type":39,"tag":48,"props":447,"children":448},{},[449,451,457,459,465,467,473,475,480,482,488,490,496],{"type":45,"value":450},"If classification is ",{"type":39,"tag":87,"props":452,"children":454},{"className":453},[],[455],{"type":45,"value":456},"direct",{"type":45,"value":458}," or ",{"type":39,"tag":87,"props":460,"children":462},{"className":461},[],[463],{"type":45,"value":464},"fix_bug",{"type":45,"value":466},", return ",{"type":39,"tag":87,"props":468,"children":470},{"className":469},[],[471],{"type":45,"value":472},"READY",{"type":45,"value":474}," with a minimal ",{"type":39,"tag":87,"props":476,"children":478},{"className":477},[],[479],{"type":45,"value":92},{"type":45,"value":481}," that records ",{"type":39,"tag":87,"props":483,"children":485},{"className":484},[],[486],{"type":45,"value":487},"scope: []",{"type":45,"value":489}," and ",{"type":39,"tag":87,"props":491,"children":493},{"className":492},[],[494],{"type":45,"value":495},"clarity_score: 1.0",{"type":45,"value":497},". Do not run scoring.",{"type":39,"tag":380,"props":499,"children":501},{"id":500},"step-2-evidence-extraction",[502],{"type":45,"value":503},"Step 2 — Evidence extraction",{"type":39,"tag":48,"props":505,"children":506},{},[507,509,514,515,520,522,528,529,535],{"type":45,"value":508},"For each field in each applicable kit, scan the ",{"type":39,"tag":87,"props":510,"children":512},{"className":511},[],[513],{"type":45,"value":158},{"type":45,"value":489},{"type":39,"tag":87,"props":516,"children":518},{"className":517},[],[519],{"type":45,"value":205},{"type":45,"value":521}," for accepted evidence (per the kit's \"Accepted evidence\" list). Mark each field ",{"type":39,"tag":87,"props":523,"children":525},{"className":524},[],[526],{"type":45,"value":527},"present",{"type":45,"value":458},{"type":39,"tag":87,"props":530,"children":532},{"className":531},[],[533],{"type":45,"value":534},"missing",{"type":45,"value":536},".",{"type":39,"tag":48,"props":538,"children":539},{},[540,545,547,552],{"type":39,"tag":54,"props":541,"children":542},{},[543],{"type":45,"value":544},"Be conservative",{"type":45,"value":546},": if you are unsure whether evidence is present, mark ",{"type":39,"tag":87,"props":548,"children":550},{"className":549},[],[551],{"type":45,"value":534},{"type":45,"value":553}," and let the user confirm. False positives are worse than asking.",{"type":39,"tag":380,"props":555,"children":557},{"id":556},"step-3-score-decide",[558],{"type":45,"value":559},"Step 3 — Score & decide",{"type":39,"tag":48,"props":561,"children":562},{},[563,565,570],{"type":45,"value":564},"Apply ",{"type":39,"tag":87,"props":566,"children":568},{"className":567},[],[569],{"type":45,"value":396},{"type":45,"value":571}," §\"Step 2-3\" to compute per-kit scores and the overall pass\u002Ffail.",{"type":39,"tag":332,"props":573,"children":574},{},[575,592],{"type":39,"tag":66,"props":576,"children":577},{},[578,583,585,590],{"type":39,"tag":54,"props":579,"children":580},{},[581],{"type":45,"value":582},"All applicable kits pass",{"type":45,"value":584}," → go to Step 6 (write ",{"type":39,"tag":87,"props":586,"children":588},{"className":587},[],[589],{"type":45,"value":92},{"type":45,"value":591},").",{"type":39,"tag":66,"props":593,"children":594},{},[595,600],{"type":39,"tag":54,"props":596,"children":597},{},[598],{"type":45,"value":599},"Any kit fails",{"type":45,"value":601}," → go to Step 4 (write form).",{"type":39,"tag":380,"props":603,"children":605},{"id":604},"step-4-generate-structured-questions",[606],{"type":45,"value":607},"Step 4 — Generate structured questions",{"type":39,"tag":62,"props":609,"children":610},{},[611,629,639,670,1107],{"type":39,"tag":66,"props":612,"children":613},{},[614,616,622,624],{"type":45,"value":615},"Load ",{"type":39,"tag":87,"props":617,"children":619},{"className":618},[],[620],{"type":45,"value":621},"templates\u002Fclarification-form.md",{"type":45,"value":623}," to identify the fields that need answers. ",{"type":39,"tag":54,"props":625,"children":626},{},[627],{"type":45,"value":628},"Do not write anything to disk.",{"type":39,"tag":66,"props":630,"children":631},{},[632,637],{"type":39,"tag":54,"props":633,"children":634},{},[635],{"type":45,"value":636},"Remove fields",{"type":45,"value":638}," for kits that are not in scope.",{"type":39,"tag":66,"props":640,"children":641},{},[642,647,649,654,655,660,662,668],{"type":39,"tag":54,"props":643,"children":644},{},[645],{"type":45,"value":646},"Pre-fill",{"type":45,"value":648}," any fields that already have evidence in ",{"type":39,"tag":87,"props":650,"children":652},{"className":651},[],[653],{"type":45,"value":158},{"type":45,"value":458},{"type":39,"tag":87,"props":656,"children":658},{"className":657},[],[659],{"type":45,"value":205},{"type":45,"value":661}," — mark them as ",{"type":39,"tag":87,"props":663,"children":665},{"className":664},[],[666],{"type":45,"value":667},"prefilled: true",{"type":45,"value":669}," with the detected value so the coordinator can show them as pre-selected defaults.",{"type":39,"tag":66,"props":671,"children":672},{},[673,675,680,682,687,689,1013],{"type":45,"value":674},"Return ",{"type":39,"tag":87,"props":676,"children":678},{"className":677},[],[679],{"type":45,"value":354},{"type":45,"value":681}," with the body as a ",{"type":39,"tag":54,"props":683,"children":684},{},[685],{"type":45,"value":686},"JSON array",{"type":45,"value":688}," of question objects. Each object has:\n",{"type":39,"tag":288,"props":690,"children":694},{"className":691,"code":692,"language":693,"meta":296,"style":296},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"F2\",\n  \"question\": \"What target component \u002F UI library should the new frontend use?\",\n  \"importance\": \"required\",\n  \"options\": [\"shadcn\u002Fui\", \"Material UI\", \"Ant Design\", \"Chakra UI\"],\n  \"default\": null,\n  \"prefilled\": false,\n  \"prefilled_value\": null\n}\n","json",[695],{"type":39,"tag":87,"props":696,"children":697},{"__ignoreMap":296},[698,710,755,793,831,927,953,979,1004],{"type":39,"tag":699,"props":700,"children":703},"span",{"class":701,"line":702},"line",1,[704],{"type":39,"tag":699,"props":705,"children":707},{"style":706},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[708],{"type":45,"value":709},"{\n",{"type":39,"tag":699,"props":711,"children":713},{"class":701,"line":712},2,[714,719,725,730,735,740,746,750],{"type":39,"tag":699,"props":715,"children":716},{"style":706},[717],{"type":45,"value":718},"  \"",{"type":39,"tag":699,"props":720,"children":722},{"style":721},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[723],{"type":45,"value":724},"id",{"type":39,"tag":699,"props":726,"children":727},{"style":706},[728],{"type":45,"value":729},"\"",{"type":39,"tag":699,"props":731,"children":732},{"style":706},[733],{"type":45,"value":734},":",{"type":39,"tag":699,"props":736,"children":737},{"style":706},[738],{"type":45,"value":739}," \"",{"type":39,"tag":699,"props":741,"children":743},{"style":742},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[744],{"type":45,"value":745},"F2",{"type":39,"tag":699,"props":747,"children":748},{"style":706},[749],{"type":45,"value":729},{"type":39,"tag":699,"props":751,"children":752},{"style":706},[753],{"type":45,"value":754},",\n",{"type":39,"tag":699,"props":756,"children":758},{"class":701,"line":757},3,[759,763,768,772,776,780,785,789],{"type":39,"tag":699,"props":760,"children":761},{"style":706},[762],{"type":45,"value":718},{"type":39,"tag":699,"props":764,"children":765},{"style":721},[766],{"type":45,"value":767},"question",{"type":39,"tag":699,"props":769,"children":770},{"style":706},[771],{"type":45,"value":729},{"type":39,"tag":699,"props":773,"children":774},{"style":706},[775],{"type":45,"value":734},{"type":39,"tag":699,"props":777,"children":778},{"style":706},[779],{"type":45,"value":739},{"type":39,"tag":699,"props":781,"children":782},{"style":742},[783],{"type":45,"value":784},"What target component \u002F UI library should the new frontend use?",{"type":39,"tag":699,"props":786,"children":787},{"style":706},[788],{"type":45,"value":729},{"type":39,"tag":699,"props":790,"children":791},{"style":706},[792],{"type":45,"value":754},{"type":39,"tag":699,"props":794,"children":796},{"class":701,"line":795},4,[797,801,806,810,814,818,823,827],{"type":39,"tag":699,"props":798,"children":799},{"style":706},[800],{"type":45,"value":718},{"type":39,"tag":699,"props":802,"children":803},{"style":721},[804],{"type":45,"value":805},"importance",{"type":39,"tag":699,"props":807,"children":808},{"style":706},[809],{"type":45,"value":729},{"type":39,"tag":699,"props":811,"children":812},{"style":706},[813],{"type":45,"value":734},{"type":39,"tag":699,"props":815,"children":816},{"style":706},[817],{"type":45,"value":739},{"type":39,"tag":699,"props":819,"children":820},{"style":742},[821],{"type":45,"value":822},"required",{"type":39,"tag":699,"props":824,"children":825},{"style":706},[826],{"type":45,"value":729},{"type":39,"tag":699,"props":828,"children":829},{"style":706},[830],{"type":45,"value":754},{"type":39,"tag":699,"props":832,"children":834},{"class":701,"line":833},5,[835,839,844,848,852,857,861,866,870,875,879,884,888,892,896,901,905,909,913,918,922],{"type":39,"tag":699,"props":836,"children":837},{"style":706},[838],{"type":45,"value":718},{"type":39,"tag":699,"props":840,"children":841},{"style":721},[842],{"type":45,"value":843},"options",{"type":39,"tag":699,"props":845,"children":846},{"style":706},[847],{"type":45,"value":729},{"type":39,"tag":699,"props":849,"children":850},{"style":706},[851],{"type":45,"value":734},{"type":39,"tag":699,"props":853,"children":854},{"style":706},[855],{"type":45,"value":856}," [",{"type":39,"tag":699,"props":858,"children":859},{"style":706},[860],{"type":45,"value":729},{"type":39,"tag":699,"props":862,"children":863},{"style":742},[864],{"type":45,"value":865},"shadcn\u002Fui",{"type":39,"tag":699,"props":867,"children":868},{"style":706},[869],{"type":45,"value":729},{"type":39,"tag":699,"props":871,"children":872},{"style":706},[873],{"type":45,"value":874},",",{"type":39,"tag":699,"props":876,"children":877},{"style":706},[878],{"type":45,"value":739},{"type":39,"tag":699,"props":880,"children":881},{"style":742},[882],{"type":45,"value":883},"Material UI",{"type":39,"tag":699,"props":885,"children":886},{"style":706},[887],{"type":45,"value":729},{"type":39,"tag":699,"props":889,"children":890},{"style":706},[891],{"type":45,"value":874},{"type":39,"tag":699,"props":893,"children":894},{"style":706},[895],{"type":45,"value":739},{"type":39,"tag":699,"props":897,"children":898},{"style":742},[899],{"type":45,"value":900},"Ant Design",{"type":39,"tag":699,"props":902,"children":903},{"style":706},[904],{"type":45,"value":729},{"type":39,"tag":699,"props":906,"children":907},{"style":706},[908],{"type":45,"value":874},{"type":39,"tag":699,"props":910,"children":911},{"style":706},[912],{"type":45,"value":739},{"type":39,"tag":699,"props":914,"children":915},{"style":742},[916],{"type":45,"value":917},"Chakra UI",{"type":39,"tag":699,"props":919,"children":920},{"style":706},[921],{"type":45,"value":729},{"type":39,"tag":699,"props":923,"children":924},{"style":706},[925],{"type":45,"value":926},"],\n",{"type":39,"tag":699,"props":928,"children":930},{"class":701,"line":929},6,[931,935,940,944,948],{"type":39,"tag":699,"props":932,"children":933},{"style":706},[934],{"type":45,"value":718},{"type":39,"tag":699,"props":936,"children":937},{"style":721},[938],{"type":45,"value":939},"default",{"type":39,"tag":699,"props":941,"children":942},{"style":706},[943],{"type":45,"value":729},{"type":39,"tag":699,"props":945,"children":946},{"style":706},[947],{"type":45,"value":734},{"type":39,"tag":699,"props":949,"children":950},{"style":706},[951],{"type":45,"value":952}," null,\n",{"type":39,"tag":699,"props":954,"children":956},{"class":701,"line":955},7,[957,961,966,970,974],{"type":39,"tag":699,"props":958,"children":959},{"style":706},[960],{"type":45,"value":718},{"type":39,"tag":699,"props":962,"children":963},{"style":721},[964],{"type":45,"value":965},"prefilled",{"type":39,"tag":699,"props":967,"children":968},{"style":706},[969],{"type":45,"value":729},{"type":39,"tag":699,"props":971,"children":972},{"style":706},[973],{"type":45,"value":734},{"type":39,"tag":699,"props":975,"children":976},{"style":706},[977],{"type":45,"value":978}," false,\n",{"type":39,"tag":699,"props":980,"children":981},{"class":701,"line":26},[982,986,991,995,999],{"type":39,"tag":699,"props":983,"children":984},{"style":706},[985],{"type":45,"value":718},{"type":39,"tag":699,"props":987,"children":988},{"style":721},[989],{"type":45,"value":990},"prefilled_value",{"type":39,"tag":699,"props":992,"children":993},{"style":706},[994],{"type":45,"value":729},{"type":39,"tag":699,"props":996,"children":997},{"style":706},[998],{"type":45,"value":734},{"type":39,"tag":699,"props":1000,"children":1001},{"style":706},[1002],{"type":45,"value":1003}," null\n",{"type":39,"tag":699,"props":1005,"children":1007},{"class":701,"line":1006},9,[1008],{"type":39,"tag":699,"props":1009,"children":1010},{"style":706},[1011],{"type":45,"value":1012},"}\n",{"type":39,"tag":332,"props":1014,"children":1015},{},[1016,1026,1036,1067,1077,1087,1097],{"type":39,"tag":66,"props":1017,"children":1018},{},[1019,1024],{"type":39,"tag":87,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":45,"value":724},{"type":45,"value":1025},": field identifier (F1–F10, B1–B5, G1–G3).",{"type":39,"tag":66,"props":1027,"children":1028},{},[1029,1034],{"type":39,"tag":87,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":45,"value":767},{"type":45,"value":1035},": human-readable question text (concise, one sentence).",{"type":39,"tag":66,"props":1037,"children":1038},{},[1039,1044,1046,1051,1053,1059,1060,1066],{"type":39,"tag":87,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":45,"value":805},{"type":45,"value":1045},": ",{"type":39,"tag":87,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":45,"value":822},{"type":45,"value":1052}," | ",{"type":39,"tag":87,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":45,"value":1058},"recommended",{"type":45,"value":1052},{"type":39,"tag":87,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":45,"value":1065},"optional",{"type":45,"value":536},{"type":39,"tag":66,"props":1068,"children":1069},{},[1070,1075],{"type":39,"tag":87,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":45,"value":843},{"type":45,"value":1076},": array of common choices (may be empty if free-text only). Include an \"Other\" option when applicable.",{"type":39,"tag":66,"props":1078,"children":1079},{},[1080,1085],{"type":39,"tag":87,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":45,"value":939},{"type":45,"value":1086},": the default value if skipped (null for required fields).",{"type":39,"tag":66,"props":1088,"children":1089},{},[1090,1095],{"type":39,"tag":87,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":45,"value":965},{"type":45,"value":1096},": true if evidence was found in the user's input.",{"type":39,"tag":66,"props":1098,"children":1099},{},[1100,1105],{"type":39,"tag":87,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":45,"value":990},{"type":45,"value":1106},": the detected value (null if not prefilled).",{"type":39,"tag":66,"props":1108,"children":1109},{},[1110],{"type":45,"value":1111},"The coordinator will present these questions interactively (not as a printed form) and re-invoke this skill with the collected answers.",{"type":39,"tag":380,"props":1113,"children":1115},{"id":1114},"step-5-re-invocation-after-user-reply",[1116],{"type":45,"value":1117},"Step 5 — Re-invocation after user reply",{"type":39,"tag":48,"props":1119,"children":1120},{},[1121,1123,1129],{"type":45,"value":1122},"When re-invoked with the user's collected answers (formatted as ",{"type":39,"tag":87,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":45,"value":1128},"\"F1: \u003Canswer>, F2: \u003Canswer>, ...\"",{"type":45,"value":1130}," or free-text):",{"type":39,"tag":62,"props":1132,"children":1133},{},[1134,1139,1225,1244],{"type":39,"tag":66,"props":1135,"children":1136},{},[1137],{"type":45,"value":1138},"Parse the user's reply against the field list. Tolerate variations: key-value pairs, a bullet list, or sentence form — all map to the same fields by id (F1–F10, B1–B5, G1–G3).",{"type":39,"tag":66,"props":1140,"children":1141},{},[1142,1144],{"type":45,"value":1143},"For each field:\n",{"type":39,"tag":332,"props":1145,"children":1146},{},[1147,1160,1172,1199],{"type":39,"tag":66,"props":1148,"children":1149},{},[1150,1152,1158],{"type":45,"value":1151},"If user provided an answer → ",{"type":39,"tag":87,"props":1153,"children":1155},{"className":1154},[],[1156],{"type":45,"value":1157},"resolution: user",{"type":45,"value":1159},", value = answer.",{"type":39,"tag":66,"props":1161,"children":1162},{},[1163,1165,1170],{"type":45,"value":1164},"If user selected a default \u002F accepted pre-fill → ",{"type":39,"tag":87,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":45,"value":1157},{"type":45,"value":1171},", value = confirmed value.",{"type":39,"tag":66,"props":1173,"children":1174},{},[1175,1177,1182,1184,1190,1192,1198],{"type":45,"value":1176},"If answer is empty and field is not ",{"type":39,"tag":87,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":45,"value":822},{"type":45,"value":1183}," → ",{"type":39,"tag":87,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":45,"value":1189},"resolution: default",{"type":45,"value":1191},", value = the field's ",{"type":39,"tag":87,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":45,"value":1197},"default-if-skipped",{"type":45,"value":536},{"type":39,"tag":66,"props":1200,"children":1201},{},[1202,1204,1209,1210,1216,1218,1224],{"type":45,"value":1203},"If answer is empty and field IS ",{"type":39,"tag":87,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":45,"value":822},{"type":45,"value":1183},{"type":39,"tag":87,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":45,"value":1215},"resolution: blocking",{"type":45,"value":1217},", no value, append to ",{"type":39,"tag":87,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":45,"value":1223},"blocking_gaps",{"type":45,"value":536},{"type":39,"tag":66,"props":1226,"children":1227},{},[1228,1230,1236,1237,1242],{"type":45,"value":1229},"Re-score. If all required fields are now answered (or marked blocking), proceed to Step 6. Otherwise, if ",{"type":39,"tag":87,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":45,"value":1235},"rounds \u003C 2",{"type":45,"value":466},{"type":39,"tag":87,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":45,"value":354},{"type":45,"value":1243}," again with only the still-missing fields as structured questions.",{"type":39,"tag":66,"props":1245,"children":1246},{},[1247,1249,1255,1257,1262],{"type":45,"value":1248},"If ",{"type":39,"tag":87,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":45,"value":1254},"rounds == 2",{"type":45,"value":1256}," and gaps remain, apply defaults to all non-required missing fields and mark unfilled required fields as ",{"type":39,"tag":87,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":45,"value":1223},{"type":45,"value":1263},". Proceed to Step 6.",{"type":39,"tag":380,"props":1265,"children":1267},{"id":1266},"step-6-write-clarificationmd",[1268,1270],{"type":45,"value":1269},"Step 6 — Write ",{"type":39,"tag":87,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":45,"value":92},{"type":39,"tag":62,"props":1276,"children":1277},{},[1278,1297,1382,1387],{"type":39,"tag":66,"props":1279,"children":1280},{},[1281,1283,1289,1291,1296],{"type":45,"value":1282},"Copy ",{"type":39,"tag":87,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":45,"value":1288},"templates\u002Fclarification.md",{"type":45,"value":1290}," to ",{"type":39,"tag":87,"props":1292,"children":1294},{"className":1293},[],[1295],{"type":45,"value":264},{"type":45,"value":536},{"type":39,"tag":66,"props":1298,"children":1299},{},[1300,1302],{"type":45,"value":1301},"Populate the YAML front-matter:\n",{"type":39,"tag":332,"props":1303,"children":1304},{},[1305,1316,1327,1338,1349,1366],{"type":39,"tag":66,"props":1306,"children":1307},{},[1308,1314],{"type":39,"tag":87,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":45,"value":1313},"generated_at",{"type":45,"value":1315},": current UTC time",{"type":39,"tag":66,"props":1317,"children":1318},{},[1319,1325],{"type":39,"tag":87,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":45,"value":1324},"scope",{"type":45,"value":1326},": the detected scope list",{"type":39,"tag":66,"props":1328,"children":1329},{},[1330,1336],{"type":39,"tag":87,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":45,"value":1335},"clarity_score",{"type":45,"value":1337},": the final overall score",{"type":39,"tag":66,"props":1339,"children":1340},{},[1341,1347],{"type":39,"tag":87,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":45,"value":1346},"rounds",{"type":45,"value":1348},": number of clarification rounds taken",{"type":39,"tag":66,"props":1350,"children":1351},{},[1352,1358,1360],{"type":39,"tag":87,"props":1353,"children":1355},{"className":1354},[],[1356],{"type":45,"value":1357},"gaps",{"type":45,"value":1359},": every field where ",{"type":39,"tag":87,"props":1361,"children":1363},{"className":1362},[],[1364],{"type":45,"value":1365},"resolution != user",{"type":39,"tag":66,"props":1367,"children":1368},{},[1369,1374,1376],{"type":39,"tag":87,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":45,"value":1223},{"type":45,"value":1375},": every required field with ",{"type":39,"tag":87,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":45,"value":1381},"resolution == blocking",{"type":39,"tag":66,"props":1383,"children":1384},{},[1385],{"type":45,"value":1386},"Fill the body sections with the resolved values. Remove sections for out-of-scope kits.",{"type":39,"tag":66,"props":1388,"children":1389},{},[1390,1391,1397],{"type":45,"value":674},{"type":39,"tag":87,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":45,"value":1396},"READY \u003Cpath>",{"type":45,"value":536},{"type":39,"tag":1399,"props":1400,"children":1401},"blockquote",{},[1402],{"type":39,"tag":48,"props":1403,"children":1404},{},[1405,1410],{"type":39,"tag":54,"props":1406,"children":1407},{},[1408],{"type":45,"value":1409},"No cleanup step needed.",{"type":45,"value":1411}," Because the form was never written to disk, there is nothing to delete. This is the single source-of-truth file for clarification state.",{"type":39,"tag":40,"props":1413,"children":1415},{"id":1414},"non-interactive-cli-mode",[1416],{"type":45,"value":1417},"Non-interactive \u002F CLI mode",{"type":39,"tag":48,"props":1419,"children":1420},{},[1421,1423,1429,1431,1437],{"type":45,"value":1422},"When ",{"type":39,"tag":87,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":45,"value":1428},"interactive == false",{"type":45,"value":1430}," (no TTY, ",{"type":39,"tag":87,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":45,"value":1436},"--yes",{"type":45,"value":1438}," flag, CI run):",{"type":39,"tag":332,"props":1440,"children":1441},{},[1442,1447,1458],{"type":39,"tag":66,"props":1443,"children":1444},{},[1445],{"type":45,"value":1446},"Skip Step 4\u002F5 entirely.",{"type":39,"tag":66,"props":1448,"children":1449},{},[1450,1451,1456],{"type":45,"value":564},{"type":39,"tag":87,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":45,"value":1197},{"type":45,"value":1457}," to every missing non-required field.",{"type":39,"tag":66,"props":1459,"children":1460},{},[1461,1463,1469],{"type":45,"value":1462},"For missing required fields: return ",{"type":39,"tag":87,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":45,"value":1468},"BLOCKED missing required fields: \u003Clist>",{"type":45,"value":1470},". The coordinator decides whether to fail or proceed with risks.",{"type":39,"tag":40,"props":1472,"children":1474},{"id":1473},"round-limit",[1475],{"type":45,"value":1476},"Round limit",{"type":39,"tag":48,"props":1478,"children":1479},{},[1480,1482,1487],{"type":45,"value":1481},"Maximum ",{"type":39,"tag":54,"props":1483,"children":1484},{},[1485],{"type":45,"value":1486},"2",{"type":45,"value":1488}," clarification rounds per session. After round 2, defaults are applied automatically — the user is not asked a third time.",{"type":39,"tag":40,"props":1490,"children":1492},{"id":1491},"determinism-guarantee",[1493],{"type":45,"value":1494},"Determinism guarantee",{"type":39,"tag":48,"props":1496,"children":1497},{},[1498,1500,1505,1507,1512,1514,1519,1521,1526,1528,1533],{"type":45,"value":1499},"Given the same ",{"type":39,"tag":87,"props":1501,"children":1503},{"className":1502},[],[1504],{"type":45,"value":158},{"type":45,"value":1506},", ",{"type":39,"tag":87,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":45,"value":182},{"type":45,"value":1513},", and ",{"type":39,"tag":87,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":45,"value":205},{"type":45,"value":1520},", this skill ",{"type":39,"tag":54,"props":1522,"children":1523},{},[1524],{"type":45,"value":1525},"must",{"type":45,"value":1527}," produce the same ",{"type":39,"tag":87,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":45,"value":1335},{"type":45,"value":1534}," and the same set of asked fields. Do not introduce randomness or model-driven judgement at the scoring step — only at the evidence-extraction step (where light interpretation of natural language is unavoidable).",{"type":39,"tag":40,"props":1536,"children":1538},{"id":1537},"resources",[1539],{"type":45,"value":1540},"Resources",{"type":39,"tag":380,"props":1542,"children":1544},{"id":1543},"references",[1545],{"type":45,"value":1546},"References",{"type":39,"tag":332,"props":1548,"children":1549},{},[1550,1560,1570,1580],{"type":39,"tag":66,"props":1551,"children":1552},{},[1553,1558],{"type":39,"tag":87,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":45,"value":418},{"type":45,"value":1559}," — full frontend field set",{"type":39,"tag":66,"props":1561,"children":1562},{},[1563,1568],{"type":39,"tag":87,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":45,"value":434},{"type":45,"value":1569}," — backend field set (v1 skeleton)",{"type":39,"tag":66,"props":1571,"children":1572},{},[1573,1578],{"type":39,"tag":87,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":45,"value":445},{"type":45,"value":1579}," — baseline fields (always applied)",{"type":39,"tag":66,"props":1581,"children":1582},{},[1583,1588],{"type":39,"tag":87,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":45,"value":396},{"type":45,"value":1589}," — scoring algorithm and pass thresholds",{"type":39,"tag":380,"props":1591,"children":1593},{"id":1592},"templates",[1594],{"type":45,"value":1595},"Templates",{"type":39,"tag":332,"props":1597,"children":1598},{},[1599,1609],{"type":39,"tag":66,"props":1600,"children":1601},{},[1602,1607],{"type":39,"tag":87,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":45,"value":621},{"type":45,"value":1608}," — user-facing questionnaire",{"type":39,"tag":66,"props":1610,"children":1611},{},[1612,1617],{"type":39,"tag":87,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":45,"value":1288},{"type":45,"value":1618}," — canonical artifact schema (clarification\u002Fv1)",{"type":39,"tag":1620,"props":1621,"children":1622},"style",{},[1623],{"type":45,"value":1624},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1626,"total":26},[1627,1642,1648,1663,1678,1693,1704],{"slug":1628,"name":1628,"fn":1629,"description":1630,"org":1631,"tags":1632,"stars":22,"repoUrl":23,"updatedAt":1641},"assessment","assess application repositories for modernization","Run application assessment for a single repository",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1633,1636,1639,1640],{"name":1634,"slug":1635,"type":15},"Audit","audit",{"name":1637,"slug":1638,"type":15},"Code Analysis","code-analysis",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-07T06:52:46.921075",{"slug":4,"name":4,"fn":5,"description":6,"org":1643,"tags":1644,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1645,1646,1647],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":1649,"name":1649,"fn":1650,"description":1651,"org":1652,"tags":1653,"stars":22,"repoUrl":23,"updatedAt":1662},"create-modernization-plan","create modernization plans for Azure migration","Create a modernization plan to migrate the project to Azure",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1654,1657,1660,1661],{"name":1655,"slug":1656,"type":15},"Azure","azure",{"name":1658,"slug":1659,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-07T06:52:44.361557",{"slug":1664,"name":1664,"fn":1665,"description":1666,"org":1667,"tags":1668,"stars":22,"repoUrl":23,"updatedAt":1677},"dependency-map","generate project dependency map diagrams","Generate dependency map diagram from project build files",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1669,1672,1673,1676],{"name":1670,"slug":1671,"type":15},"Architecture","architecture",{"name":1637,"slug":1638,"type":15},{"name":1674,"slug":1675,"type":15},"Diagrams","diagrams",{"name":20,"slug":21,"type":15},"2026-07-18T05:14:07.976259",{"slug":1679,"name":1679,"fn":1680,"description":1681,"org":1682,"tags":1683,"stars":22,"repoUrl":23,"updatedAt":1692},"guidelines","apply framework migration and transformation rules","Collection of framework-to-framework migration rules and transformation patterns (e.g., Struts→Spring MVC, JSP→Thymeleaf, EJB→Spring Boot).\nTriggers: \"check migration guidelines\", \"look up transformation rules\", \"find Struts-to-Spring patterns\", \"apply migration conventions\", \"conversion rules for X→Y\".\nAlso consumed automatically by breaking-down-tasks and implementing-code during migration workflows.\nNOT for: direct execution — other skills scan this directory.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1684,1687,1688,1691],{"name":1685,"slug":1686,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1689,"slug":1690,"type":15},"Migration","migration",{"name":13,"slug":14,"type":15},"2026-07-03T16:31:08.783756",{"slug":1694,"name":1694,"fn":1695,"description":1696,"org":1697,"tags":1698,"stars":22,"repoUrl":23,"updatedAt":1703},"implementing-code","execute implementation tasks for modernization","Executes a batch of implementation tasks with TDD workflow, source-anchored rewrite for behavioral fidelity, guideline-based code transformation, and full requirement tracing. Returns a structured batch report.\nTriggers: \"implement tasks\", \"execute the batch\", \"write code for these tasks\", \"implement with source anchoring\", \"run the implementation\".\nNOT for: task generation (use breaking-down-tasks), implementation planning (use creating-implementation-plan).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1699,1700,1701,1702],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":1689,"slug":1690,"type":15},{"name":13,"slug":14,"type":15},"2026-07-18T05:14:07.057305",{"slug":1705,"name":1705,"fn":1706,"description":1707,"org":1708,"tags":1709,"stars":22,"repoUrl":23,"updatedAt":1720},"quality-gates","run quality gate validation for workflows","Runs quality gate validation at each workflow stage. Supports 4 gate types: spec-quality, spec-to-plan, plan-to-tasks, completeness. Produces gate pass\u002Ffail reports with actionable feedback.\nTriggers: \"run quality gate\", \"validate spec quality\", \"spec quality\", \"plan coverage\", \"check plan coverage\", \"validate plan to tasks\", \"check task traceability\", \"verify task completeness\", \"run completeness review\", \"review implementation\", \"check plan traceability\", \"check coverage\", \"completeness quality gate\", \"final sign-off\", \"feature parity sign-off\", \"completeness gate\", \"feature parity\", \"sign-off report\", \"verify all requirements\".\nRequires `type` parameter to select the gate.\nNOT for: code review, implementation (use implementing-code), spec writing.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1710,1711,1714,1717],{"name":9,"slug":8,"type":15},{"name":1712,"slug":1713,"type":15},"QA","qa",{"name":1715,"slug":1716,"type":15},"Testing","testing",{"name":1718,"slug":1719,"type":15},"Workflow Automation","workflow-automation","2026-07-07T06:52:45.631984",{"items":1722,"total":1911},[1723,1743,1762,1781,1796,1813,1824,1837,1852,1867,1886,1899],{"slug":1724,"name":1724,"fn":1725,"description":1726,"org":1727,"tags":1728,"stars":1740,"repoUrl":1741,"updatedAt":1742},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1729,1730,1733,1734,1737],{"name":20,"slug":21,"type":15},{"name":1731,"slug":1732,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1735,"slug":1736,"type":15},"Project Management","project-management",{"name":1738,"slug":1739,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1744,"name":1744,"fn":1745,"description":1746,"org":1747,"tags":1748,"stars":1759,"repoUrl":1760,"updatedAt":1761},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1749,1752,1755,1756],{"name":1750,"slug":1751,"type":15},".NET","net",{"name":1753,"slug":1754,"type":15},"Agents","agents",{"name":1655,"slug":1656,"type":15},{"name":1757,"slug":1758,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1763,"name":1763,"fn":1764,"description":1765,"org":1766,"tags":1767,"stars":1759,"repoUrl":1760,"updatedAt":1780},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1768,1771,1772,1775,1776,1777],{"name":1769,"slug":1770,"type":15},"Analytics","analytics",{"name":1655,"slug":1656,"type":15},{"name":1773,"slug":1774,"type":15},"Data Analysis","data-analysis",{"name":1685,"slug":1686,"type":15},{"name":9,"slug":8,"type":15},{"name":1778,"slug":1779,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1782,"name":1782,"fn":1783,"description":1784,"org":1785,"tags":1786,"stars":1759,"repoUrl":1760,"updatedAt":1795},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1787,1790,1791,1792],{"name":1788,"slug":1789,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1655,"slug":1656,"type":15},{"name":1685,"slug":1686,"type":15},{"name":1793,"slug":1794,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1797,"name":1797,"fn":1798,"description":1799,"org":1800,"tags":1801,"stars":1759,"repoUrl":1760,"updatedAt":1812},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1802,1803,1806,1807,1808,1811],{"name":1655,"slug":1656,"type":15},{"name":1804,"slug":1805,"type":15},"Compliance","compliance",{"name":1757,"slug":1758,"type":15},{"name":9,"slug":8,"type":15},{"name":1809,"slug":1810,"type":15},"Python","python",{"name":1793,"slug":1794,"type":15},"2026-07-18T05:14:23.017504",{"slug":1814,"name":1814,"fn":1815,"description":1816,"org":1817,"tags":1818,"stars":1759,"repoUrl":1760,"updatedAt":1823},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1819,1820,1821,1822],{"name":1769,"slug":1770,"type":15},{"name":1655,"slug":1656,"type":15},{"name":1757,"slug":1758,"type":15},{"name":1809,"slug":1810,"type":15},"2026-07-31T05:54:29.068751",{"slug":1825,"name":1825,"fn":1826,"description":1827,"org":1828,"tags":1829,"stars":1759,"repoUrl":1760,"updatedAt":1836},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1830,1833,1834,1835],{"name":1831,"slug":1832,"type":15},"API Development","api-development",{"name":1655,"slug":1656,"type":15},{"name":9,"slug":8,"type":15},{"name":1809,"slug":1810,"type":15},"2026-07-18T05:14:16.988376",{"slug":1838,"name":1838,"fn":1839,"description":1840,"org":1841,"tags":1842,"stars":1759,"repoUrl":1760,"updatedAt":1851},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1843,1844,1847,1850],{"name":1655,"slug":1656,"type":15},{"name":1845,"slug":1846,"type":15},"Computer Vision","computer-vision",{"name":1848,"slug":1849,"type":15},"Images","images",{"name":1809,"slug":1810,"type":15},"2026-07-18T05:14:18.007737",{"slug":1853,"name":1853,"fn":1854,"description":1855,"org":1856,"tags":1857,"stars":1759,"repoUrl":1760,"updatedAt":1866},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1858,1859,1862,1865],{"name":1655,"slug":1656,"type":15},{"name":1860,"slug":1861,"type":15},"Configuration","configuration",{"name":1863,"slug":1864,"type":15},"Feature Flags","feature-flags",{"name":1685,"slug":1686,"type":15},"2026-07-03T16:32:01.278468",{"slug":1868,"name":1868,"fn":1869,"description":1870,"org":1871,"tags":1872,"stars":1759,"repoUrl":1760,"updatedAt":1885},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1873,1876,1879,1882],{"name":1874,"slug":1875,"type":15},"Cosmos DB","cosmos-db",{"name":1877,"slug":1878,"type":15},"Database","database",{"name":1880,"slug":1881,"type":15},"NoSQL","nosql",{"name":1883,"slug":1884,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1887,"name":1887,"fn":1869,"description":1888,"org":1889,"tags":1890,"stars":1759,"repoUrl":1760,"updatedAt":1898},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1891,1892,1893,1894,1895],{"name":1874,"slug":1875,"type":15},{"name":1877,"slug":1878,"type":15},{"name":9,"slug":8,"type":15},{"name":1880,"slug":1881,"type":15},{"name":1896,"slug":1897,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1900,"name":1900,"fn":1901,"description":1902,"org":1903,"tags":1904,"stars":1759,"repoUrl":1760,"updatedAt":1910},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1905,1906,1907,1908,1909],{"name":1655,"slug":1656,"type":15},{"name":1874,"slug":1875,"type":15},{"name":1877,"slug":1878,"type":15},{"name":1685,"slug":1686,"type":15},{"name":1880,"slug":1881,"type":15},"2026-05-13T06:14:17.582229",267]