investing-label-historical-phases
For a given investing thesis with named phases, produce a CSV timeline of phase transitions for prior cycles. The output is the input that /investing:backtest-thesis v2 needs to align cycle windows to thesis phases (not arbitrary calendar years).
Status: scaffold v1 (2026-05-18). Implementation (the actual labeling work for each thesis) happens in a separate sub-agent session per thesis. This file is the SOP shape that future labeling sessions execute against.
Why this skill exists
The v1 memory backtest used calendar-year folds because no phase-history dataset existed. The founder critic correctly identified this as a methodology artifact, not a strategy choice — a memory-cycle strategy should be tested against memory-cycle boundaries.
Building phase-history for prior cycles is research work (read primary sources, label transitions) that's separate from backtesting and from thesis-writing. This skill is the dedicated harness so it can happen once per thesis, get reviewed, and be reused by every subsequent backtest revision.
This skill is Ray-autonomous — the founder doesn't see the labeling work. He sees only:
- The output CSV (consumed by backtests, surfaced when material to a thesis review)
- The output narrative companion (filed to the anchors folder; surfaced if the gaps make the backtest non-deployable)
Inputs
thesis-id— slug matching~/rdco-vault/01-projects/investing/theses/<date>-<thesis-id>.md. Required.- Optional:
--from-year YYYYto override the default earliest year searched (default: 1995 for theses with structural depth, 2005 for narrower theses).
The thesis file must declare a phases block listing the named phases in order, with each phase's defining characteristic. Example for memory:
phases:
- demand_surge
- capacity_announcement
- capacity_online
- down_cycle
- recovery
phase_definitions:
demand_surge: "Quarterly memory demand growth >15% YoY for 2+ consecutive quarters"
capacity_announcement: "Memory vendor (Samsung/SK Hynix/Micron) publicly commits >20% capacity increase"
capacity_online: "New fab production at >50% capacity, contributing to oversupply pressure"
down_cycle: "DRAM spot declining for 6+ consecutive months OR vendor margin compression >30%"
recovery: "DRAM spot stabilizing for 2+ months AND vendor capex cuts announced"
If the thesis lacks phases + phase_definitions, FAIL and route to founder — the thesis needs sharpening before historical labeling is possible.
Methodology
Step 1 — Determine cycle scope
Read the thesis. Determine how many historical cycles to label. Default: as many as the available data can support back to --from-year. For memory: ~6-7 cycles back to 1997-2002. For power: fewer well-defined cycles, document the gap.
Step 2 — For each phase transition, gather evidence
For each candidate transition date, search:
- Vault:
qmdlex + vec searches scoped tordco-vaultfor any prior coverage (research briefs, reference docs, decision notes). If the transition appears in vault material, that's the highest-quality evidence. - WebSearch: news archives for the transition date ±90d. Search terms: vendor name + phase-specific language ("capacity expansion", "fab construction", "memory glut", "inventory correction").
- Seeking Alpha (free tier): earnings-call transcripts of major sector vendors (e.g. Micron, SK Hynix ADR, Samsung) within the candidate quarter. Vendor commentary on demand / supply / pricing is the highest-fidelity primary source for phase state.
- SEC EDGAR: 10-K and 10-Q narrative sections (MD&A specifically) of the sector primaries. The "industry overview" and "outlook" sections often state phase implicitly.
- Anchor data already in vault:
01-projects/investing/anchors/for any quantitative anchors (DRAM spot from TrendForce starting 2017, hyperscaler capex from EDGAR-watch).
Per transition, capture:
- Date (ideally to the month; phase boundaries are fuzzy — see "Honest limits" below)
- Phase transitioned TO (from the thesis's
phaseslist) - Specific quoted text or data point that evidences the transition
- Source URL / file path
- Confidence: high / medium / low
Step 3 — Apply consistent decision rules
Phase boundaries are not natively sharp; we're imposing labels on continuous data. Pick decision rules from the thesis's phase_definitions and apply them mechanically. If two raters would disagree because the underlying anchor data is noisy, log it as confidence: low and document the disagreement in the narrative companion.
Example rule (memory down_cycle start): "Earliest month where DRAM spot has declined for 6 consecutive months AND at least one of the three major vendors has cut capex guidance in their most recent earnings call." This is mechanical; two researchers applying it should agree on the date to within ~1 month.
Step 4 — Write outputs
Primary output: ~/rdco-vault/01-projects/investing/anchors/<thesis-id>/phase-history.csv with columns:
date,phase_transition_to,evidence,evidence_source,confidence
1998-07-01,down_cycle,"DRAM spot down 7 consecutive months; Micron 10-Q MD&A: 'continued pricing pressure'",https://www.sec.gov/...,high
1999-04-01,recovery,"DRAM spot stabilized Mar-Apr; Samsung announces capex cut",https://www.koreatimes.co.kr/...,medium
...
Narrative companion: ~/rdco-vault/01-projects/investing/anchors/<thesis-id>/phase-history-notes.md documenting:
- Methodology applied (which sources, which decision rules)
- Coverage by year/decade — where labels are dense vs sparse
- Known gaps (e.g. "pre-2010 hyperscaler-capex data unavailable")
- Disagreement notes for
confidence: lowtransitions - Versions / re-labels (if a future re-pass changes earlier labels, log it)
Frontmatter:
---
date: YYYY-MM-DD
type: investing-anchor
thesis_id: <id>
covers_period: YYYY-YYYY
cycle_count: <N>
high_confidence_pct: <X%>
sensitivity: medium
tags: [investing, anchor, phase-history, <thesis-id>]
---
Step 5 — Self-check before exiting
Before declaring done:
- Are all named phases from the thesis represented at least once? If not, document why (e.g. "capacity_announcement transitions exist but pre-2005 vendor PR is sparse — labeled where evidence found, otherwise inferred from capex anchor with confidence: low").
- Do consecutive transitions follow a legal phase sequence per the thesis? (You can't go demand_surge → recovery skipping down_cycle.)
- Are at least 2/3 of transitions
confidence: highormedium? If majority islow, the labeling is too noisy to feed a backtest — flag in the narrative companion and route a note to the founder via vault (NOT iMessage; this is a vault-surface concern).
Step 6 — Return
One-line summary to the caller (Ray's parent session, not the founder):
<thesis-id> phase-history | <N> cycles labeled | <high_confidence_pct>% high-confidence | <coverage-period>
Honest limits to document (every run)
Bake these into the narrative companion every time — they're not bugs, they're the shape of the data:
- Phase boundaries are not sharp transitions. We're imposing discrete labels on continuous underlying state. A 1-2 month uncertainty on any transition date is normal.
- Pre-2010 hyperscaler-capex data is sparse. Hyperscalers (AWS, Azure, GCP) didn't dominate semi demand pre-2010. For memory cycles in 1997-2008, hyperscaler-capex is not a useful anchor — consumer + enterprise PC demand was the driver. Label using vendor commentary and DRAM spot instead, and document the substitution.
- DRAM spot data pre-2017 requires TrendForce historical archive scraping. TrendForce news archives go back further than their structured spot data. Manual labeling from news + 10-K MD&A is the fallback for pre-2017 phase transitions in the memory thesis. Document which transitions used manual labeling.
- Multiple raters would disagree. Two researchers labeling the same cycle would probably agree on 70-80% of transition dates within 1 month. Reduce disagreement by picking SHARP decision rules from
phase_definitionsand applying them mechanically — don't eyeball. - Regime change risk. Pre-2017 memory cycles were driven by PC + enterprise demand; post-2022 cycles are driven by hyperscaler + AI demand. The "phases" labeled in older cycles may not be predictively relevant to current cycles even if structurally identical. Note this in the narrative.
- Seeking Alpha free-tier rate-limits. Heavy transcript scraping will hit limits. Budget ~30 transcripts per labeling pass; rotate quarters across multiple sessions if a full thesis backfill needs more.
Dependencies
qmdfor vault search (lex + vec).- WebSearch for news archives.
- Seeking Alpha free tier (no auth needed for the transcripts surface) — scrape with rate-limit respect.
- SEC EDGAR — full-text search at https://efts.sec.gov/LATEST/search-index?q=... and 10-K/10-Q narrative sections via the existing edgar-watch tooling.
- Existing anchor data in
01-projects/investing/anchors/{dram-spot,hyperscaler-capex,smart-money}/— use first, fill gaps from primary sources.
Caveats (load-bearing)
- This skill is RAY-AUTONOMOUS. Don't ping the founder per-transition or per-decision. Run the labeling, write the outputs, return a one-liner. Surface ONLY if
high_confidence_pct < 33%(in which case the output isn't backtest-quality and the founder needs to know before we proceed). - Re-labels happen. A future pass with better data sources may revise earlier transitions. Version the CSV (keep
phase-history-2026-05-18.csvalongsidephase-history.csv) so backtests are reproducible against the version they ran on. - This is NOT the same as the live phase-marker monitoring that
/investing:weekly-pulsedoes. This is the HISTORICAL labeling for backtest input; weekly pulse is the FORWARD labeling for current state. - Don't infer phases from price action. Price-derived phase labels would make any subsequent backtest circular (strategy fires on phase, phase defined from price = strategy fires on price). Phase labels must come from FUNDAMENTAL anchors (demand data, capex announcements, capacity-online reports, smart-money flow).
Related
- [[01-projects/investing/README.md]] — investing project v2 quality process
- [[.claude/skills/investing-backtest-thesis/SKILL.md]] — v2 backtest skill (this skill's primary consumer)
- [[01-projects/investing/anchors/dram-spot/]] — DRAM spot anchor data (memory thesis)
- [[01-projects/investing/anchors/hyperscaler-capex/]] — hyperscaler capex anchor data (memory + power theses)
- [[01-projects/investing/anchors/smart-money/]] — 13F flow anchor data (all theses)
- [[.claude/skills/investing-edgar-watch/SKILL.md]] — quarterly capex pull from EDGAR (provides hyperscaler-capex anchor)
- [[.claude/skills/investing-smart-money-watch/SKILL.md]] — quarterly 13F diff (provides smart-money anchor)
Changelog
- 2026-05-18 (v1) — Initial scaffold. SOP shape locked; first per-thesis labeling pass (memory cycle 1997-2025) runs in a separate sub-agent session. Designed as the input producer for
/investing:backtest-thesisv2.