willoscar/section-mapper
| Map papers from the core set to each outline subsection and write `outline/mapping.tsv` with coverage tracking.
npx skills add https://github.com/WILLOSCAR/research-units-pipeline-skills --skill section-mapper
Create a paper→subsection map that supports evidence building and later synthesis.
Good mapping is relevant, diverse, and explainable. Corpus-wide topic words and repeated outline boilerplate are not evidence of subsection relevance.
outline/outline.yml and a papers/core_set.csv and need coverage per subsection.papers/core_set.csvoutline/outline.ymloutline/mapping.tsvoutline/mapping_report.md (diagnostics: reuse hotspots, weak-signal subsections)outline/mapping_gap_candidates.tsv (read-only repair candidates from the deduplicated pool when the core set cannot meet a subsection target)To prevent accidental overwrites after you refine mapping rationales:
outline/mapping.refined.ok.The marker is valid only while it is newer than the mapping, core set, outline, query contract, and mapper implementation. Any upstream change invalidates it.
If you rerun the script without this marker, it will back up the previous mapping to a timestamped file:
outline/mapping.tsv.bak.<timestamp>why with a short semantic rationale (one line is enough), e.g.:outline/mapping.tsv exists and is non-empty.why).why is semantic (not just matched_terms=...).uv run python .codex/skills/section-mapper/scripts/run.py --helpuv run python .codex/skills/section-mapper/scripts/run.py --workspace <workspace> --per-subsection 28--per-subsection <n>: target mapped papers per subsection--diversity-penalty <int>: penalize repeated reuse of the same paper across many subsections--soft-limit <n> / --hard-limit <n>: caps for per-paper reuse (0 = auto)--minimum-score <n>: automatic relevance floor (default: 3); lower only when the resulting mappings will be reviewed manuallyuv run python .codex/skills/section-mapper/scripts/run.py --workspace <workspace> --per-subsection 4 --diversity-penalty 5uv run python .codex/skills/section-mapper/scripts/run.py --workspace <workspace> --per-subsection 3 --soft-limit 6 --hard-limit 10outline/mapping_report.md diagnostics.outline/mapping_gap_candidates.tsv instead of silently mutating papers/core_set.csv; a human or curation step remains responsible for changing the frozen core set.assets/domain_packs/*.json rules can tighten ambiguous subsection labels for an explicitly detected domain; these rules constrain mapping rather than changing the core set.pipeline.py --strict, mapping may be blocked until generic why rationales are replaced with semantic ones.outline/mapping.tsv is empty or low-coverageSymptom:
Causes:
Solutions:
dedupe-rank with larger --core-size).Symptom:
Causes:
Solutions:
--diversity-penalty and/or set tighter --soft-limit/--hard-limit.why column contains semantic rationale (not just token overlap).Take willoscar/section-mapper from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.