--- name: orchestrate description: Use when the user describes a research goal without naming a skill, or the task spans several skills. Classifies the request, plans the order and routes to the right medsci-skills skill(s) instead of producing their output itself. metadata: triggers: "orchestrate, research help, what should I do next, where do I start, help me with my paper, run the pipeline, which skill, end-to-end, e2e" --- # Orchestrate Skill Route research requests in the **medsci-skills** bundle to the right skill, or chain several skills in the correct order. You classify, plan and delegate: never produce a routed skill's output yourself — invoke the skill that owns it. --- ## Available Skills | Skill | Domain | When to Route | |-------|--------|---------------| | **search-lit** | Literature | Find papers, verify citations, build reference lists, check if a topic has been studied | | **design-study** | Methodology | Review study design, identify leakage/bias, pick reporting guideline, validate analysis plan | | **intake-project** | Project setup | New or messy project folder, "what is this project?", classify and scaffold | | **manage-project** | Project mgmt | Scaffold directories, track progress, generate checklists and timelines | | **analyze-stats** | Statistics | Generate R/Python code for diagnostic accuracy, demographics, meta-analysis stats, agreement, regression (logistic/linear), propensity score, repeated measures | | **make-figures** | Visualization | ROC curves, forest plots, flow diagrams (PRISMA/CONSORT/STARD), Kaplan-Meier, Bland-Altman, visual/graphical abstracts | | **meta-analysis** | Systematic review | Full MA pipeline: protocol, search, screening, extraction, synthesis, PRISMA-DTA | | **write-paper** | Writing | IMRAD manuscript drafting (8-phase pipeline), any section writing | | **self-review** | Quality | Pre-submission self-check with domain probes (Survival / SR-MA / Radiomics / Narrative); optional `--panel` for a high-stakes final QC pass | | **check-reporting** | Compliance | Audit against 49 reporting guidelines and risk-of-bias tools | | **revise** | Revision | Parse reviewer comments, generate point-by-point response, track changes | | **grant-builder** | Funding | Structure grant proposals: significance, innovation, approach, milestones | | **present-paper** | Presentation | Prepare academic talks: analyze paper, draft scripts, inject slide notes, Q&A prep | | **publish-skill** | Packaging | Convert a personal skill into an open-source distributable package | | **calc-sample-size** | Statistics | Sample size calculation (17 tests including Cox EPV), power analysis, IRB justification text | | **find-journal** | Submission | Journal recommendation based on abstract/scope matching, post-rejection re-targeting | | **add-journal** | Journal DB | Add a new journal to the profile database; extracts metadata from author guidelines | | **fulltext-retrieval** | Literature | Batch download open-access PDFs by DOI using Unpaywall, PMC, OpenAlex APIs | | **deidentify** | Data safety | De-identify clinical data containing PHI before any LLM processing. Standalone Python CLI (no LLM). | | **clean-data** | Data | Data profiling, missing value flagging, outlier detection, cleaning code generation | | **generate-codebook** | Data | Generate a citable data dictionary/codebook from a dataset; flags coded variables as [NEEDS DICTIONARY]; feeds /define-variables | | **version-dataset** | Data | Content-hash manifest of a dataset; verify drift (schema/rows/values) and diff versions; reproducibility lock | | **write-protocol** | Protocol | IRB/ethics protocol drafting, 4 core sections + 6 skeleton sections with TODO markers | | **define-variables** | Operationalization | Literature-grounded variable definitions, cutoffs, DB-variable mappings; runs between `/search-lit` and `/write-protocol` for observational studies | | **verify-refs** | Reference audit | Read-only PubMed/CrossRef audit of manuscript references; first-author cross-check; sole writer of `qc/reference_audit.json`. Never modifies refs | | **manage-refs** | Reference lifecycle | Citekey validation, journal-CSL pandoc rendering, manuscript ↔ DOCX cross-reference QC, [N] ↔ [@key] marker conversion, Zotero CWYW field-code injection. Sole writer of `manuscript_final.docx`, `qc/xref_audit.json` | | **lit-sync** | Reference sync | Zotero collection ↔ Better BibTeX `manuscript/_src/refs.bib` ↔ Obsidian literature notes. Sole writer of refs.bib (auto-export); upstream of `manage-refs` | | **obsidian-paper-vault** | Vault build | A folder of PDFs → templated Obsidian literature notes + atomic concept notes synthesized across them. Enters the same vault folders as `lit-sync` from the PDF side | | **humanize** | Quality | AI-pattern density sweep (<2.0/1000 words target); rewrites flagged passages while preserving technical accuracy. Phase 7.5 of write-paper | | **academic-aio** | Visibility | AI-search-engine optimization for medical AI papers (Perplexity, ChatGPT web, Elicit, Consensus, SciSpace, RAG tools). Opt-in checklist; never auto-applies edits | | **render-pdf-doc** | Document layout | Non-bibliography academic markdown → PDF (proposal, briefing, anchor doc, IRB cover, reference table), CJK-aware. Boundary opposite of `manage-refs scripts/render_pandoc.sh` | | **fill-protocol** | Form filling | Institutional Word form filling (.doc/.docx) for IRB/ethics/grant templates; renders `write-protocol` content into the institutional template | | **fill-icmje-coi** | Form filling | Batch ICMJE COI Disclosure Form generation per author from a synthetic seed | | **sync-submission** | Submission | SSOT-to-submission drift audit; journal-specific submission manifest creation from canonical manuscript artifacts | | **peer-review** | Review | External manuscript peer review draft generation (journal-specific formatting). Use ONLY for reviewing other authors' work, never for self-review | | **review-paper** | Writing | Scaffold/draft a literature review (narrative / scoping PRISMA-ScR / systematic). Distinct from `write-paper` (original research) and `meta-analysis` (pooling) | | **polish-language** | Quality | Academic-English consistency lint + non-native clarity polish (abbreviations, US/UK spelling, ranges, P/p case, units). Style-only; distinct from `humanize` (AI-tell removal) and `check-reporting` (guideline items) | | **author-strategy** | Analysis | PubMed author-profile analysis: study-type classification, trajectory-archetype, publication-strategy report from a name | | **batch-cohort** | Analysis | Generate N analysis scripts from one validated methodology template × many exposure/outcome combinations (same method, swap variables) + summary matrix | | **replicate-study** | Analysis | Replicate an existing cohort study's methodology on a different database: design extraction, variable-harmonization table, replication-difference report | | **cross-national** | Analysis | Cross-national comparison study (KNHANES + NHANES + CHNS or parallel surveys): variable harmonization + parallel weighted analysis | | **ma-scout** | Systematic review | Meta-analysis topic discovery + feasibility (professor-first profile→gap, or topic-first question→gap→co-author) before a protocol exists | | **find-cohort-gap** | Methodology | Research-gap discovery from a longitudinal cohort DB: profile strengths, match PI expertise, literature-saturation scan, ranked topic proposals | | **design-ai-benchmarking** | Methodology | Design/validity review for benchmarking AI systems against a human-expert reference panel (rubrics, calibration probes, panel construction, IRR targets) — before data collection | | **model-selection** | Modeling | Choose the model for an imaging study: a paper-grounded architecture family (task + modality + data scale + imbalance → shortlist), then vet the concrete repo / checkpoint (licence, version pin, weight provenance; flags an evaluation arm on the benchmark the model was developed or tuned on) | | **imaging-data** | Modeling | Profile an imaging dataset before any modelling decision (spacing/orientation, intensity domain, label integrity, foreground fraction, target volume) and gate it against the plan; then plan/audit DICOM/NIfTI intake, resampling, normalisation and augmentation with a preprocessing manifest + data-stage leakage gate before `model-scaffold` | | **model-scaffold** | Modeling | Generate a reproducible runnable PyTorch training repo (patient-level seed-locked split, task model, train/eval scripts, repro record) — between choosing an architecture and validating a trained model | | **radiomics-ml** | Modeling | Produce/audit a radiomics / tabular-ML study (imaging or clinical features → penalised logistic / SVM / RF / gradient-boosting / MLP → outcome) with a nested-CV / feature-stability / calibration / external-validation gate (no GPU) | | **model-assessment** | Validation | Validate/evaluate a trained imaging model: split-leakage gate + validation design (internal vs external, comparator, sizing); task-correct held-out metrics (Dice + boundary, AUROC + AUPRC with bootstrap CIs, FROC/mAP, calibration, subgroups) → per-case table; uncertainty/OOD/abstention for deployment claims; Grad-CAM/explainability sanity checks + localisation | | **mllm-eval** | Evaluation | Design/audit an evaluation harness for an LLM/MLLM clinical task (report generation, VQA, extraction/classification): adjudicated reference, clinical-efficacy metrics beyond BLEU/ROUGE, hallucination, contamination, prompt-sensitivity, reader study | | **model-card** | Documentation | Generate a Model Card + Datasheet + data-quality pass for an engineer-built imaging model from user-supplied facts, with a completeness gate | | **contribute** | Setup | Offer a local edit (a journal profile, a fix) back as a pull request or issue without typing git; blocks on patient data in the diff and sends nothing until confirmed. Also files a false positive or a failed step | | **setup-medsci** | Setup | Read-only runtime diagnostic (Python, R, Node, Claude Code, Git, Zotero, MCP servers): pass/fail table with the setup doc for each missing component | --- ## Classification Logic Classify each request into one of these intents. ### Single-skill requests (route directly) Route to the skill whose Available Skills row matches: name it with a one-line reason, then invoke it. The rows below cover modes and flags, look-alike skills, and non-English phrasings: | User says something like... | Route to | |-----------------------------|----------| | "I have a messy folder, help me organize" | `/intake-project` | | "Set up a new project" / "Create project scaffold" | `/manage-project init` | | "Review my manuscript before submission" | `/self-review` | | "Brutally / harshly check before submission" / "top-tier journal final check" / "multi-reviewer / panel review" / "review it from stats, clinical, and imaging angles" / "혹독하게 제출 전 점검" | `/self-review --panel --json` | | "Review someone else's manuscript" / "Journal club critique draft" / "외부 논문 리뷰 답변" | `/peer-review` | | "Which journal should I submit to?" / "Find a journal" / "I was rejected, where else?" | `/find-journal` | | "Sync submission" / "Retarget journal" / "Check SSOT drift" | `/sync-submission` | | "Add a journal profile" / "저널 프로필 추가" | `/add-journal` | | "Download PDFs" / "Get full texts" / "PDF 다운로드" | `/fulltext-retrieval` | | "Visual abstract 만들어줘" / "Graphical abstract" / "GA 생성" | `/make-figures` | | "De-identify my data" / "Remove PHI" / "비식별화" / "익명화" / "Anonymize patient data" | `/deidentify` | | "Write an IRB protocol" / "Draft ethics submission" / "Research protocol" | `/write-protocol` | | "Fill IRB protocol form" / "기관 양식 채워줘" / "심사면제 요청서 채움" / "동의면제 양식" | `/fill-protocol` | | "Define my variables" / "Justify cutoff" / "Phenotype definition" / "변수 정의 근거" / "ad-hoc 정의 피하기" | `/define-variables` | | "Write a case report" / "I have an interesting case" | `/write-paper` (case-report mode) | | "Generate a cover letter" / "Write cover letter for submission" | `/write-paper` (Phase 8+, requires completed manuscript) | | "Render manuscript to DOCX" / "Build final .docx" / "Cascade reformat references" / "Apply journal CSL" / "Re-render with Vancouver" / "회람용 docx" / "Zotero CWYW injection" | `/manage-refs` | | "Render proposal to PDF" / "Anchor doc PDF" / "한글 학술 PDF" / "Briefing handout PDF" / "IRB cover PDF" / "non-bib markdown → PDF" | `/render-pdf-doc` | | "Sync Zotero" / "Refresh refs.bib" / "Better BibTeX export" / "Zotero ↔ Obsidian 동기화" / "literature note 만들어줘" | `/lit-sync` | | "PDF를 Obsidian 노트로" / "논문 요약 노트 만들어줘" / "이 폴더의 PDF 정리해줘" / "build a paper vault" / "second brain" / "extract concepts from papers" | `/obsidian-paper-vault` | | "ICMJE COI 양식 일괄 생성" / "공저자 COI 폼 만들기" / "Disclosure form batch" | `/fill-icmje-coi` | | "AI search optimization" / "Perplexity-friendly abstract" / "RAG visibility" / "GEO checklist" / "Elicit/Consensus 노출" | `/academic-aio` | | "Remove AI patterns" / "AI 티 제거" / "humanize this section" / "GPT 흔적 지워줘" | `/humanize` | ### Multi-skill workflows (plan then execute sequentially) The **Nodes** column lists the decision forks to render in interactive mode (Dialogue Protocol below); N1–N11 are defined in `${CLAUDE_SKILL_DIR}/references/dialogue_nodes.md`. | Scenario | Skill chain | Nodes | |----------|-------------|-------| | **New project, no prior work** | `intake-project` -> `search-lit` -> `design-study` -> `manage-project init` | N1, N2 (if user wants manuscript output), N3 | | **Data ready, need a paper** | `manage-project init` -> `analyze-stats` -> `make-figures` -> `write-paper` | N6 (PHI gate), N3, N4 (journal timing), N2 | | **Draft exists, prepare for submission** | `self-review` -> `check-reporting` -> `verify-refs` -> `humanize` -> `academic-aio` (opt-in `--aio`) -> `manage-refs` (DOCX build + xref QC `--strict`) -> `manage-project checklist` | N4 (if not yet locked), N8 (only if self-review returns fatal) | | **Submission rendering & cascade reformat** | `manage-refs` (Workflow A pandoc citeproc, or B Zotero CWYW) -> `manage-refs scripts/check_xref.py --strict` -> `verify-refs` -> `sync-submission build` | N10 (Workflow A vs B selection — see manage-refs SKILL.md decision tree) | | **Cascade rejection re-target** | `find-journal` (exclude rejected) -> `manage-refs` (re-render with new CSL) -> `write-paper` Phase 8+ (new cover letter) -> `sync-submission build --journal {new}` | N4 | | **Non-bibliography academic deliverable (proposal/briefing/anchor doc)** | `write-protocol` -> `fill-protocol` (institutional form available) ⫶ `render-pdf-doc` (markdown-only, no form) | N11 (form available vs not) | | **Reference housekeeping cycle** | `lit-sync` (Zotero ↔ refs.bib auto-export) -> `manage-refs scripts/check_citation_keys.py` -> `verify-refs --strict` (first-author cross-check) | — | | **ICMJE COI batch (multi-author submission)** | `fill-icmje-coi` (per-author docx generation from synthetic seed) -> manual circulation | — | | **Medical-AI paper, AI-search visibility pass** | `self-review` -> `humanize` -> `academic-aio` (title, abstract, summary box, README / CITATION.cff / HF card) | N4, N9 (section entry for re-edit scope) | | **Reviewer comments received** | `revise` -> `analyze-stats` (if new analyses needed) -> `make-figures` (if new figures needed) | N1 | | **Meta-analysis from scratch** | `search-lit` -> `fulltext-retrieval` -> `meta-analysis` (handles its own pipeline internally) | N2 (MA type), N5 (synthesis scope) | | **Grant writing** | `search-lit` -> `grant-builder` | N2 (option 5) | | **Conference presentation** | `present-paper` (handles its own pipeline internally) | N1 | | **New study, need IRB protocol** | `search-lit` -> `design-study` -> `calc-sample-size` -> `define-variables` -> `write-protocol` | N3, N2 (option 4 — protocol) | | **Observational cohort study (retro/screening/registry)** | `intake-project` -> `design-study` -> `search-lit` -> `define-variables` -> `write-protocol` -> `analyze-stats` -> `write-paper` | N1, N2, N3 | | **Data with PHI, need full pipeline** | `deidentify` -> `clean-data` -> `analyze-stats` -> `make-figures` -> `write-paper` | N6 (mandatory), N3, N4 | | **Data ready, need cleaning first** | `clean-data` -> `analyze-stats` -> `make-figures` -> `write-paper` | N6, N3, N4 | | **Full submission chain** | `write-paper` -> `self-review` -> `check-reporting` -> `find-journal` -> `write-paper` (Phase 8+ cover letter) -> `manage-project checklist` | N4, N8 (if recovery triggered), N9 (on re-entry) | | **Post-rejection resubmission** | `find-journal` (exclude rejected journal) -> `write-paper` (Phase 8+ new cover letter) | N4 | | **Case report pipeline** | `search-lit` (similar cases) -> `write-paper` (case-report mode) -> `self-review` -> `check-reporting` (CARE) -> `find-journal` | N2 (option 2), N4 | **Panel mode (`/self-review --panel`) is opt-in, never automatic.** The chains above use single-pass `self-review`. Add `--panel` only when the user asks for a high-stakes final pass, because it spawns several reviewer agents plus an editor (several times the tokens); never enable it by default, including in `--e2e`. Never combine `--panel` with `--fix`: a panel diagnoses and prioritizes, and the fix loop is a separate pass. ### Ambiguous requests (ask before routing) If the intent is genuinely unclear, ask ONE clarifying question — never two in one turn. If you can make a reasonable inference, act on it and confirm; inside a pipeline, render the matching node instead of asking. Examples: - "Help with my paper" -> Ask: "Do you want to start writing, review an existing draft, or respond to reviewer comments?" - "What should I do next?" -> Check for `project_state.json` or `STATUS.md` in the working directory first. If found, read it and suggest the next logical step. If not found, ask what they're working on. --- ## Workflow Execution — Dialogue Protocol (interactive default) Without `--e2e`, a multi-skill chain runs one decision node per fork. Never replace a node with a plan list and "Shall I proceed?", because that silently commits the paper type, study design, target journal or recovery branch. Also pause at write-paper's built-in gates (outline approval, discussion planning). Load `${CLAUDE_SKILL_DIR}/references/dialogue_nodes.md` the first time the pipeline enters a decision fork in the current session; it holds each node's options, rendering template and autonomous default. **Per-fork execution sequence:** 1. **Identify the node** for the fork (Nodes column of the Multi-skill workflows table). 2. **Render it** with the reference's §"Rendering Template": under ~15 lines, `unlocks` / `locks` / `recovery_cost` per option, autonomous default announced. 3. **Wait for a numeric choice** or a control word. One node per turn — never stack two. 4. **Echo the lock** in one line before invoking the skill ("Locking: CARE reporting guideline; abstract = structured 250w."). 5. **Invoke the downstream skill** for the chosen option, then return to step 1 for the next fork. 6. **Adapt on skill output.** If a result invalidates a prior lock (e.g., `/self-review` surfaces a Step 7.4a trigger), route to the recovery node (N8) instead of continuing the chain. **Control words.** `back` re-enters the previous node. `pause` halts the pipeline and returns control to the user. `skip` is allowed only for a node whose `locks` scope is empty (rare) — otherwise explain why skipping is not available. --- ## Full Pipeline Mode When the user asks to "run the full pipeline" or similar, run the Standard Pipeline below. ### `--e2e` Flag #### Pre-flight Validation (run once at `--e2e` entry) Before invoking any downstream skill in `--e2e` mode, run the following 4 checks. A failure on any one halts the pipeline. Write all four outcomes verbatim to `manuscript//REPORT.md` (see §"REPORT.md Generation") under `Frozen / Version status` + `Source artifacts checked`. 1. **STATUS / project_state**: read `STATUS.md` or `project_state.json` in the working directory and confirm the current phase. If neither exists, halt with `STATUS_MISSING` unless the user passes `--no-status`. 2. **Frozen artifact**: scan `manuscript//v_*_package/`. If the latest `v_N` carries a `_FROZEN` marker file or `INDEX.md::frozen=true`, this run is restricted to a `v_(N+1)_package/` branch. Any attempt to write directly into `v_N` halts with `FROZEN_VIOLATION`. 3. **Required inputs**: confirm input artifacts for the requested phase exist. Examples: Phase 4 figure requires `analysis/_analysis_outputs.md`; Phase 7 self-review requires `manuscript/manuscript.md`. Missing → halt with `REQUIRED_INPUT_MISSING: `. 4. **Dependency miss**: if the user requested phase `k` but a prior phase is incomplete, halt with `DEPENDENCY_MISS: [Phase i, Phase j]` by default. Only when the user explicitly passes `--auto-extend` may the orchestrator prepend the missing phases and continue. #### `--e2e` Pipeline Behavior When `--e2e` is passed (or the user says "end-to-end", "Arm A", or "fully autonomous"): 1. Set `--e2e` mode ON. 2. Pass `--autonomous` to `/write-paper` when invoking it. 3. Pass `--json` to `/self-review` and `/check-reporting` when invoking them. 4. Skip all orchestrator-level confirmations ("Shall I proceed?") and do NOT render any Dialogue Protocol nodes. 5. For each node the pipeline would have rendered interactively, apply the node's `default` (from `dialogue_nodes.md`) and log the choice to `qc/_pipeline_log.md` as: `[orchestrate] N{id}: defaulted to option {n} ({label}) — {autonomous_rationale}`. 6. DO still respect data-safety gates (PHI Safety Gate / node N6): if PHI status is unknown, HALT the autonomous run with a single prompt. After pre-flight passes, PHI is the only node that can interrupt autonomous mode. 7. Audit Recovery (node N8): auto-invoke the routed recovery skill. If the route itself fails validation twice, HALT with `RECOVERY_HALT_HUMAN_DECISION` in the log. 8. AIO (academic-aio) is OFF by default in `--e2e`, because AI-search visibility is a pre-submission concern and running it on every autonomous iteration would waste tokens and invite silent rewrites that violate the skill's "never edit silently" contract. Enable it only when the user explicitly adds `--aio` (or the pipeline is preparing a preprint / GitHub README / HF card alongside submission). When enabled, schedule it after `/humanize` so the checklist anchors on QC-confirmed and human-readable text, and surface the PASS/PARTIAL/FAIL report to the user — never auto-apply its edits. 9. After each skill completes, run post-skill validation (see below); once it passes, proceed to the next skill without asking. ### Standard Pipeline: Data → Manuscript 1. `/analyze-stats` → `analysis/tables/*.csv`, `analysis/figures/*`, `analysis/_analysis_outputs.md`, `analysis/analyze.py` 2. `/make-figures --study-type {type}` → reads `analysis/_analysis_outputs.md` → `analysis/figures/*.pdf`, `analysis/figures/*.png`, `analysis/figures/_figure_manifest.md` 3. `/write-paper --autonomous` (if --e2e) → reads analysis/ → `manuscript/manuscript.md` (DOCX rendering delegated to step 7) - Phase 7.4 internally calls `/self-review --json --fix` → `qc/self_review.md` 4. `/check-reporting` → reads `manuscript/manuscript.md` → `qc/reporting_checklist.md` + `qc/reporting_checklist.json` (Part D JSON; called within write-paper Phase 7, but orchestrator verifies output) 5. `/verify-refs` → reads `manuscript/manuscript.md` → `qc/reference_audit.json` (sole output; row-level status in `records[]`) 6. `/self-review --json --fix` → reads `manuscript/manuscript.md` → `qc/self_review.md` + auto-fix (called within write-paper Phase 7.4, but orchestrator verifies final output) 7. `/manage-refs` (Workflow A pandoc citeproc, or B Zotero CWYW) → reads `manuscript/manuscript.md` + `manuscript/_src/refs.bib` → `manuscript/manuscript_final.docx` + `qc/xref_audit.json`. Submission gate: `check_xref.py --strict` must pass (no MISSING_DOCX / MISSING_BODY / MISMATCH). ### Post-Skill Validation After each skill completes, verify that expected output files exist, then pass the discovered file paths to the next skill as context. If validation fails, report the error and do NOT proceed to the next skill. | Skill | Expected Outputs | Validation | |-------|-----------------|------------| | `/analyze-stats` | At least one file in `analysis/tables/*.csv` OR `analysis/_analysis_outputs.md` | Check file existence and non-empty | | `/make-figures` | `analysis/figures/_figure_manifest.md` with at least 1 entry | Parse manifest, verify listed files exist | | `/write-paper` | `manuscript/manuscript.md` (required) | Check file existence and non-empty. Do NOT require the DOCX here — `manuscript_final.docx` is rendered later by `/manage-refs` (step 7), so requiring it would halt an `--e2e` run before the DOCX exists | | `/check-reporting` | `qc/reporting_checklist.md` and `qc/reporting_checklist.json` (Part D JSON) | Parse the JSON; halt naming the file if it is absent, unparseable, or lacks an integer `missing`. If `missing > 0` or any `action_items[].status == "MISSING"`, halt with `REPORTING_ITEMS_MISSING` (list each item) and do NOT proceed to step 7 — route the gaps to `/write-paper` Phase 7. An inline report that wrote no file does not pass | | `/verify-refs` | `qc/reference_audit.json` (sole output) | Parse JSON; halt if `submission_safe == false` (i.e., `FABRICATED` / `MISMATCH` count > 0 OR `duplicate_findings[]` nonempty) | | `/self-review` | `qc/self_review.md` with the Phase 3c JSON block (`--json`) | Parse the JSON block; halt naming the file if it is absent, unparseable, or lacks an integer `fatal_count`. If `fatal_count > 0` or any `issues[].severity == "fatal"`, do NOT proceed to step 7 — route to N8 (Audit Recovery). A `REVISE` verdict with no fatal issue is logged (score, verdict, counts) in `qc/_pipeline_log.md` and REPORT.md, not halted. Accept the optional `consensus` array and R1/R2/R3 attributions that `--panel` adds to issues (additive, backwards-compatible) | | `/manage-refs` | `manuscript/manuscript_final.docx`, `qc/xref_audit.json` | DOCX exists and non-empty; xref_audit.json has `submission_safe: true` (no P0 blocker rows) | | `/lit-sync` | `manuscript/_src/refs.bib` (mtime updated), `references/zotero_collection.json` | refs.bib mtime newer than collection snapshot; `refs_bib_refreshed: true` in collection JSON | **On validation failure:** - Log the failure: which skill, which output was missing, any error messages. - In `--e2e` mode: report the error in `qc/_pipeline_log.md` and STOP. Do not proceed to the next skill. Output: "Pipeline halted at {skill}: {missing output}. Check the skill's output and re-run." - In interactive mode: report the error and ask the user how to proceed. ### REPORT.md Generation At the termination of every `--e2e` invocation — whether the pipeline completed, halted at pre-flight, or halted on post-skill validation — the Worker MUST write `manuscript//REPORT.md` using the template at `${CLAUDE_SKILL_DIR}/references/report_template.md`. - Copy every section of the template verbatim. Never delete a section. Empty fields are filled with `(none)` or `(unknown)` — never omitted, never collapsed. - The §"Pipeline log" entry is a 5-line summary of `qc/_pipeline_log.md` (Dialogue node defaults applied, skill invocations, halt reason if any) — not a paste of the full log. - The §"Tier-3 Blocked Items" hook-vs-prompt-guard split is mandatory — see §"Tier-3 Worker Guard" below. - The §"Next safe command" line is the literal command the user can copy to resume the next phase. Do not editorialize. - REPORT.md is the single artifact the user reviews; every other QC output is linked from it. ### Tier-3 Worker Guard The following actions are permanently forbidden inside `--e2e` autonomous flow. On detection, the Worker halts the pipeline and records the attempt under REPORT.md §"Tier-3 Blocked Items" as `tier3_pending: `. Hook-confirmed blocks and prompt-only blocks are listed separately so a future hook regression cannot silently re-open a prompt-only block. **Hook-confirmed (where a Tier-3 confirm hook is installed)**: - `gws gmail +send` / `+reply` - YouTube upload **Prompt / skill guard only (no hook coverage — Worker prompt enforces)**: - `git push`, `gh pr create` - MCP Gmail send, MCP Calendar send - MCP GitHub create-pr - `/sync-submission build` external publication paths - Phase 8 submission DOCX auto-build / journal submission - Senior mentor automatic email reply `git commit` is allowed; a subsequent `git push` attempt halts. Circulation emails are saved as a Gmail Draft only — never sent. ### Data Flow Contract Read `${CLAUDE_SKILL_DIR}/references/data_flow_contract.md` when chaining a skill and you need what it reads or writes (the Standard Pipeline above already names its own files). ### Post-E2E: Journal Selection & Submission Prep After the E2E pipeline completes (or when the user requests journal targeting), this workflow is available. It is NOT part of `--e2e`: it runs only on explicit user invocation, because it needs the user's journal selection. 1. `/find-journal` → top 5 recommendations based on `manuscript/manuscript.md` abstract 2. `/verify-refs` → block fabricated or mismatched references before packaging 3. User selects a journal → create `submission/{journal_short}/` directory 4. `/sync-submission build --journal {journal_short}` → create or refresh the derived manuscript package from the canonical manuscript 5. Generate inside `submission/{journal_short}/`: - `cover_letter.md`: via `/write-paper` Phase 8+ - `checklist.md`: journal-specific submission checklist - `manuscript_final.docx`: re-rendered by `/manage-refs` for the target journal (if format differs) 6. `/self-review` with the selected journal as the target → journal scope-aware final pass (not `/peer-review`, which reviews other authors' work only) --- ## PHI Safety Gate Before routing to any data-handling skill (`clean-data`, `analyze-stats`, `make-figures`), check if the data might contain PHI: 1. For each CSV/Excel file the task will read that is not itself a `*_deidentified.*` output (a de-identified copy of one file says nothing about the others), ask: "Does the data contain patient identifiers (PHI)? (names, national ID / RRN, date of birth, contact details, etc.)" - If yes → Route to `/deidentify` first, then continue to the originally requested skill using the `*_deidentified.*` output file - If no, or the user confirms the data is already de-identified → Proceed directly 2. De-identification is an INTERACTIVE process requiring the researcher's active participation. Warn: "De-identification requires the researcher's direct review. You must run the script in the terminal and verify each item." --- ## Context Detection Before routing, check for context clues in the working directory: | File found | Implies | |------------|---------| | `project_state.json` | Active managed project -- read it to determine current phase | | `STATUS.md` | Project with status tracking -- read current stage and blockers | | `PROJECT.md` | Project identity exists -- use for context | | `CLAIMS.md` | Claims-to-results map exists -- writing is underway | | `REVIEW_LOG.md` | Revision cycle -- likely needs `/revise` | | `*.qmd` or `*.tex` files | Manuscript drafting in progress | | `*.bib` files | References exist -- may need verification | | `PRISMA_*.md` or `QUADAS*.md` | Meta-analysis or systematic review | | Decision letter / reviewer PDF | Route to `/revise` | | CSV/Excel data files without analysis scripts | Raw data may need cleaning -- suggest `/clean-data` first | | `*_deidentified.*` or `audit_log.csv` | Some data was de-identified -- skip the PHI Safety Gate only for the `*_deidentified.*` outputs themselves; run it on every other data file the task will read | | `protocol_draft.md` | Protocol drafting in progress -- may need `/write-protocol` | | `sample_size_*.csv` or `sample_size_*.R` | Sample size calculation done -- check if protocol or manuscript next | --- ## Guardrails - **Never invent a skill.** Only route to skills listed in the Available Skills table. - **Respect existing state.** If a project scaffold exists, do not re-initialize it.