skills/ds-handoff/SKILL.md
Create structured handoff document for DS workflow session pause/resume.
npx skillsauth add edwinhu/workflows ds-handoffInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Announce: "Using ds-handoff to capture session state for clean resumption."
Capture current DS workflow state into .planning/HANDOFF.md so a fresh session can resume exactly where this one left off.
NO HANDOFF WITHOUT READING STATE FIRST. This is not negotiable.
Before writing .planning/HANDOFF.md, you MUST:
.planning/SPEC.md (if exists) — understand the requirements.planning/PLAN.md (if exists) — understand task breakdown and progress.planning/LEARNINGS.md (if exists) — understand pipeline state and discoveriesAbout to write the handoff without having read the state files first → STOP (read them, then write). </EXTREMELY-IMPORTANT>
Read all available state files to understand where we are:
1. Read .planning/SPEC.md → requirements and success criteria
2. Read .planning/PLAN.md → task breakdown and approach
3. Read .planning/LEARNINGS.md → pipeline state, row counts, discoveries
4. Scan recent git log → what's been committed
5. Check for uncommitted changes → what's in-flight
Run:
# Check for uncommitted work
git status --short 2>/dev/null
# Recent commits in this session
git log --oneline -10 2>/dev/null
Description: ds-handoff: read current workflow and git state
From the state files and git history, determine:
Write .planning/HANDOFF.md using the template below. Every field is mandatory.
Write as if briefing a colleague who has never seen this project. Include:
Checkpoint type: human-verify (handoff completeness is machine-verifiable)
After writing, verify the handoff is complete:
1. IDENTIFY: .planning/HANDOFF.md exists
2. READ: Re-read the handoff document
3. VERIFY: Contains all sections (Current State, Completed Work, Remaining Work, Decisions, Next Action)
4. VERIFY: "Next Action" is specific enough to start immediately
5. VERIFY: Frontmatter phase/task numbers are accurate
If any section is empty or vague, fix it before confirming handoff.
---
phase: [current phase number]
phase_name: [brainstorm|plan|implement|validate|review|verify]
task: [current task number, 0 if between tasks]
total_tasks: [N from PLAN.md]
status: paused
context_remaining: [approx % context left when handing off — lets a resuming session triage scope]
decisions_count: [N — number of entries in the Decisions Made section below]
last_updated: [ISO 8601]
---
# Session Handoff
## Current State
[Where exactly we are — the immediate context a new session needs.
Include: current file being edited, current pipeline stage,
current phase gate status. Be specific.]
## Completed Work
- [x] Task 1: [name] — Done ([brief note on what was done])
- [x] Task 2: [name] — Done
- [ ] Task 3: [name] — In progress ([what's done, what's not])
## Remaining Work
- Task 3: [what specifically remains]
- Task 4: [name] — Not started
- Task 5: [name] — Not started
## Decisions Made
- [Decision]: [what was decided and WHY]
- [Decision]: [what was decided and WHY]
## Master Datasets & Construction Diagram
<!-- For multi-exhibit projects. Lets the next session resume without re-deriving the data architecture. -->
- Master datasets and their grain/keys: [e.g. firm_quarter.parquet (gvkey, yearq) — BUILT; trade_file.parquet (cusip, trade_dt, seqnum) — NOT YET BUILT]
- Construction diagram location + currency: [e.g. docs/INVESTIGATION.md — current through Task 5; Task 6's filter not yet reflected]
- Exhibits still unmapped / unbuilt: [list, or "all exhibits map to a built master"]
- Parameter config location + open robustness checks: [e.g. src/config.py; MAX_TRADE_SIZE sensitivity {500K,2M} not yet run]
## Rejected Approaches
- [Approach]: [why it was rejected — saves the next session from re-exploring dead ends]
## Blockers
- [Blocker]: [status/workaround found]
- (none) — if no blockers
## Uncommitted Changes
- [file]: [what was changed and why]
- (none) — if all work is committed
## Next Action
Start with: [specific first action when resuming — not "continue task 3" but
"load data/processed/merged_panel.parquet and verify the winsorization in
src/clean.py produced expected row counts per LEARNINGS.md, then run DQ3
on the output"]
After writing and verifying .planning/HANDOFF.md:
Announce: "Session handoff saved to .planning/HANDOFF.md. Next session will detect it automatically and offer to resume."
Report to user:
Handoff saved:
- Phase: [phase_name]
- Task: [N] of [total]
- Next action: [one-line summary]
Resume by starting /ds in this project — it will detect the handoff.
development
Build the meeting-level proxy-voting × ownership panel on the WRDS SGE grid — ISS N-PX fund votes reduced to (item × block) direction cells, joined to institutional and mutual-fund ownership. Use when working with risk.voteanalysis_npx, N-PX fund-level votes, ISS→CRSP fund linking, index/passive/active voting blocks, or a proxy-voting panel that needs ownership attached.
development
Use when "CRSP CIZ", "CRSP v2", "CRSP flat file format 2.0", "crsp.dsf_v2 / msf_v2", "StkDlySecurityData", "StkMthSecurityData", "StkSecurityInfoHist", "stocknames_v2", "DlyRet / MthRet / DlyPrc / MthPrc", "SHRCD or EXCHCD equivalent in new CRSP", "SIZ to CIZ migration", "CRSP data after 2024", "CRSP delisting returns", "CRSP cumulative adjustment factors", "CRSP index INDNO / INDFAM", or any CRSP stock/index query where the legacy SIZ column names no longer exist.
development
Use when linking or deduping datasets by entity name rather than a shared key — 'fuzzy match', 'fuzzy name matching', 'entity resolution', 'record linkage', 'match company/person names', 'dedupe entity names', 'name-based join', 'bridge identifiers' (CIK ↔ permno ↔ gvkey ↔ wficn ↔ EIN ↔ personid), or any use of char n-gram TF-IDF, cosine similarity on names, `sparse_dot_topn`, or RapidFuzz at scale.
development
Use when building a publication-quality table in Python — 'regression table', 'results table', 'summary statistics table', 'etable', 'coefplot', 'great_tables', 'GT', 'gt table', 'format a table for the paper', 'export table to LaTeX/HTML', significance stars, spanners, or column formatting for a table headed into a paper, slide deck, or notebook.