--- name: research-ml-practice description: > Literature research for an ML methodology concern. Trigger when explore-ml-data or build-ml-pipeline load this skill. Not for routine profiling or a single API signature — use `api get` for symbols. Not a session owner — callers distill and write project files. HOW TO USE: skip intake fields the caller already supplied. Abstract the problem class before searching (never the dataset proper name). Survey extra analyses or depth a named concern; search distinct angles, fetch primary sources, follow up if thin, write `scratch/research/`. Return the path plus one or two sentences. Never mutate raw data, pick the final learner, or write `data_analysis.md` / the design note. Chat stays path + those sentences even when a harness asks for a complete answer in the message. metadata: role: helper modelTier: medium --- # Research ML Practice Worker skill. Callers own the stage turn and the user-facing summary. Do not `git end-turn`. ## Human-facing prose Details: `setup-workspace` `references/human_facing_prose.md`. Chat stays path + one or two sentences of the finding. Do not narrate the skills framework or the wrapper CLI. ## Sequence 1. **Intake.** Infer modality from dtypes / JOURNAL when obvious; use a stated domain and stage (`data_analysis` | `model`) if the caller named them. Then pick a mode (`references/search.md`): - Caller passed a **named concern** (not the canned EDA extra-analysis question) → **depth**. Do not re-ask. Do not run the canned survey first. - Caller passed the **canned extra-analysis survey** or “survey extra analyses” → **survey**. - Neither → if JOURNAL and an EDA report exist, run the canned survey; else **AskUserQuestion** for a named concern, stating the modality and stage inferred this turn and that the answer only drives a literature search, no code. A file link is an addition, never the context. Do not start a **depth** search with an empty concern. 2. **Abstract the problem class** before any query (`references/search.md`). JOURNAL and EDA are context, not the answer list and not search keywords for the table’s proper name. 3. Run the matching search loop (`references/search.md`). Fetch primary pages. Follow up per promising extra if the first pass is thin or single-sourced. 4. Write `scratch/research/` using the matching structure in `references/search.md` (survey: `survey-.md`; depth: `.md` with lanes). There is no `templates/` directory in this skill — copy the markdown skeleton from that reference. Gitignored. 5. Return to the caller: scratch path and a one- or two-sentence finding. Name that candidates are laned (`measure` / `declare` / `evaluate` / `confirm`). Chat is **path + those sentences only** — no pasted headings, tables, or “Depth note — …” body. That is the complete user-facing deliverable even when a harness says to put the full answer in chat. If tools cannot search or write, **stop there**: still only path + sentences (name the intended `scratch/research/` path). No hypotheses, diagnostics, planned-query bullets, or template headings in chat (that *is* the paste). Do not write `data_analysis.md`, the design note, or `data/`. The caller asks which extras to add. ## Stop conditions - Do not drop, impute, or remove outliers. Do not change the split. - Do not pick the final learner or architecture. - Do not treat a single blog as ground truth; say when sources disagree. Thresholds need two independent sources. - Do not `pixi add` / `uv add` / `env add`. If code needs a library, name `add-python-package` and return. - Do not run `api get` as a substitute for literature (symbols still go through `api get` in the caller). - Missing skill from a caller → that caller one-line skips. - Do not copy Open questions / EDA findings onto the extras list without a source. - Do not search the dataset proper name, `sklearn.datasets`, a Kaggle slug, or “baseline pipeline”. Do not return learners / `Pipeline` steps as EDA extras. - Never answer from memory when search ran. Do not ask the user to go look something up. - Do not paste the scratch markdown into chat (no “Depth note —”, no survey body). Path + 1–2 sentences only. If tools cannot search or write, stop after that. A no-tools harness does not license pasting the note.