# Stock Industry Review

> Review a US-listed company's industry position and competitive moat for an equity-research workup. Covers Porter Five Forces scan, market-share trend (absolute and relative to industry growth), TAM size and trajectory, unit economics where disclosed (LTV/CAC, unit gross margin), moat classification (network / brand / scale-cost / switching-cost / patent / regulatory / proprietary-data), substitute threats, new-entrant threats, pricing-power evidence, supplier/channel concentration risk, and regulatory exposure. Trigger when analyzing competitive position at L6 of the seven-layer X-ray framework. Dispatched by stock-analysis-lead; at Lite depth runs in Lite-Industry mode (moat type + share trend only, no full Porter scan).

- Skill: `johnqtcg/stock-industry-review` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add johnqtcg/stock-industry-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnqtcg/stock-industry-review/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: johnqtcg (https://skillmd.com/u/johnqtcg)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/johnqtcg/stock-industry-review

---


# Stock Industry Review

## Purpose

Read 10-K "Competition" sections, MD&A market commentary, and external industry-size data with the eye of a strategy analyst. The financial statements tell you what the company *did*; this skill tells you what the industry will *let it keep doing*. Surface moat type and durability, market-share trajectory relative to industry, pricing power evidence, and structural threats. Output Findings that the orchestrator uses to model Bull/Base/Bear scenarios — moat strength caps the multiple expansion, and competitive pressure determines margin sustainability.

## When To Use

- Orchestrator dispatches industry review — a **Tier-0 core** worker, always-on at all depths; Lite runs the lighter moat-type + share-trend pass only, no full Porter scan. See `stock-analysis-lead/references/dispatch-protocol.md` Part 1.
- User asks "what's the moat", "is <ticker> losing share", "who are the competitors", "what's the TAM".

## When NOT To Use

- Business model classification → `stock-business-review`
- Margin trends → `stock-earnings-quality-review`
- Management quality → `stock-management-review`

## Mandatory Gates

### 1) Execution Integrity Gate
Read 10-K Item 1 "Competition" section AND at least one external source (analyst report, industry association, or comparable peer's 10-K) for triangulation. The company's own description of competition is self-serving.

### 2) Quantification Gate
"Strong competitive position" is not a Finding. Quantify: market share %, share trend, TAM $, growth rate. If you cannot quantify, suppress.

### 3) Moat-Type Gate
Generic "competitive advantages" is not a moat. Classify into one of seven types: network effects, brand, scale-cost advantage, switching cost, patent/IP, regulatory, proprietary data. If you cannot fit it into a named type, flag "no identifiable moat".

### 4) Cyclicality Gate
Pricing-power evidence in a bull market is not pricing power. Look for margin stability across a downturn (2020 or 2022 depending on sector).

## Workflow

1. Read 10-K "Competition" subsection + Risk Factors related to competition.
2. Pull at least one peer 10-K for triangulation (peer list from manifest).
3. Estimate market-share trend using revenue YoY vs industry growth (from external source).
4. Classify moat into named type(s); test moat durability.
5. Emit Findings.

## Filing-Pattern-Gated Execution Protocol

### Execution Order

1. Locate the 10-K Competition section, Risk Factors, segment-level revenue, and peer 10-K for context.
2. For each checklist item, locate evidence.
3. **HIT** → quantify + classify.
4. **MISS** → mark NOT FOUND.
5. Report only Findings with named, quantified evidence.
6. Include `Filing pre-scan: X/Y items hit, Z confirmed`.

## Industry Checklist (10 Items)

| ID | Item | Source | Trigger |
|---|---|---|---|
| IND-01 | Porter Five Forces quick scan | 10-K Competition + Risk Factors | Flag if any one force is "high" without compensating moat |
| IND-02 | Market-share trend (relative growth) | Company revenue YoY vs industry growth | Flag if company growth < industry growth (losing share) |
| IND-03 | TAM size + 5-year growth trajectory | Investor presentation / industry research | Flag if TAM growth < 5% (mature market — multiple compression risk) |
| IND-04 | Unit economics (LTV/CAC, unit GM) | Investor presentations + 10-K segment | Flag if LTV/CAC < 3 in subscription business |
| IND-05 | Moat classification (named type) | Multi-source synthesis | Flag "no clear moat" if no named type applies |
| IND-06 | Substitute threat (named adjacent products) | 10-K Risk Factors + external scan | Flag if substitute growing > 20% annually |
| IND-07 | New-entrant threat (capital + regulatory barriers) | 10-K Risk Factors | Flag if barriers low AND TAM attractive |
| IND-08 | Pricing-power evidence (cross-cycle margin stability) | 5-year gross margin through last downturn | Flag if gross margin compressed > 5pp in last downturn |
| IND-09 | Supplier/channel concentration risk | 10-K Risk Factors | Flag if > 30% of supply from single vendor (e.g., TSMC dependency) |
| IND-10 | Regulatory exposure (sector-specific) | 10-K Item 1 "Regulation" + Risk Factors | Flag if pending regulation could compress margin or restrict TAM |

### Severity Rubric

- **High**: Threatens the long-term thesis. E.g., losing share for 3 consecutive years; no identifiable moat in a competitive market; key regulatory action pending.
- **Medium**: Caps Bull-scenario probability. E.g., moat is real but narrow (switching cost ~6 months only); supplier concentration material but second-sourcing in progress.
- **Low**: Context for valuation. E.g., TAM growing 8% (not great, not terrible); regulatory exposure passive.

## Evidence Rules

- Market share must cite a number AND the source (whose definition of the market?).
- Moat classification must name the type explicitly; don't write "they have a strong moat".
- TAM citations must include the source (research firm + year) since TAM estimates vary widely.
- Pricing power must reference a specific downturn period.

## Output Format

### Findings

#### [High|Medium|Low] Short Title

- **ID**: `IND-NN`
- **Citation**: 10-K section + peer or external source
- **Evidence**: quantified data + named moat type
- **Implication**: what this means for the multiple / margin sustainability

### Suppressed Items

### Execution Status

```
Filings reviewed: 10-K (FY2024) Item 1 + Item 1A, peer 10-K (<peer ticker>)
External sources: <industry research firm / analyst report>
Filing pre-scan: 10/10 items hit, 4 confirmed as findings
```

### Venture Priors (option-dominated names only — when the orchestrator's dispatch says Optionality Overlay)

When the company is option-dominated (Tesla, pre-profit narrative names), the orchestrator values the unproven engines with a sum-of-the-parts whose `option` legs need priors you are best placed to supply. For **each** value-driving venture (e.g. robotaxi, humanoid robots, an AI/software stream), emit a structured prior — and express every uncertain field as a **range with a source tag**, never a point (a point would be false precision the orchestrator's SOTP engine rejects):

```
Venture: <name>
- TAM at maturity: $<low>–$<high>B (<target year>) — source: <research firm + year> [estimate]
- Company addressable share: <low>–<high>% — basis: <vs named competitor / structural argument> [estimate]
- Take-rate / revenue capture: <low>–<high>% [assumption — state the network/pricing logic]
- Plausible steady-state operating margin: <%> — analog: <named comparable business> [assumption]
- Independent of the company's other ventures? <yes/no — shared tech stack?>  ← feeds the venture probability tree
```

Do NOT assign `P(success)` or a dollar value — that is the orchestrator's synthesis. Your job is the falsifiable, sourced, ranged inputs. If you cannot source even a range for a field, say so; a missing prior is better than a fabricated one.

### Summary

One line: `N High / M Medium / K Low — most material: <IND-NN short title>`.

### Machine-Readable Findings Block (mandatory)

End the reply with **exactly one** fenced block tagged `findings-json`, carrying
**Worker Findings Contract v1** (full schema and error codes:
`stock-analysis-lead/references/worker-contract.md`). The orchestrator synthesizes
the verdict **from this block only** — anything stated in the Markdown above but
omitted here does not reach the report. Everything above the fence is for the
human reader.

```findings-json
{
  "contract_version": "1",
  "worker": "stock-industry-reviewer",
  "prefix": "IND",
  "status": "OK",
  "depth_mode": "<echo the dispatched depth>",
  "archetype_applied": "<echo the dispatched archetype>",
  "archetype_challenge": null,
  "findings": [
    {
      "id": "IND-NN",
      "severity": "High|Medium|Low",
      "title": "<= 80 chars",
      "citation": {"source": "10-K", "locator": "<item/page/note>", "fiscal_period": "FY2025"},
      "evidence": "direct quote <= 60 words, or a computed figure with its inputs",
      "implication": "one sentence on what this means for the thesis",
      "confidence": "first-hand|second-hand"
    }
  ],
  "positives": [],
  "data_gaps": [],
  "checklist_coverage": {"items_total": 10, "items_checked": 0, "items_not_found": 0, "ids_not_checked": []},
  "mandatory_checks_run": []
}
```

Contract rules that fail validation if broken:

- `status` is one of `OK` / `DEGRADED` / `SKIPPED` / `REFUSED`; any value other
  than `OK` **requires** a `status_reason`. The gate returns `SKIPPED (...)` in
  prose *and* `"status": "SKIPPED"` here.
- Every finding ID must start with `IND` — the prefix is the whole segment
  before the first hyphen.
- `citation` is an **object**, never a bare string; `locator` and `fiscal_period`
  must be non-empty. A finding with no real citation is suppressed, not emitted.
- `source: "aggregator"` forces `confidence: "second-hand"` — this is what makes
  the first-hand data rule checkable rather than aspirational.
- `checklist_coverage`: `items_checked + items_not_found` must reach
  `items_total` (10), so "the checklist ran to completion" is verifiable.
- `archetype_challenge`: `null` when the dispatched archetype fits. When the
  evidence says it does not, file `{"proposed", "reason", "evidence"}` instead of
  silently analyzing against thresholds you believe are wrong — this is the only
  sanctioned way to disagree with the orchestrator's classification.
- `mandatory_checks_run`: list the archetype-specific check IDs the dispatch
  marked REQUIRED. Omitting one that was required fails validation.

Self-check before replying:

```bash
python3 <path-to>/stock-analysis-lead/scripts/finlib/worker_contract.py \
  validate --reply <this-reply>.md --expect-worker stock-industry-reviewer
```

## No-Finding Case

```
No industry-position findings — moat real and named, gaining share, pricing power demonstrated through last cycle.
Notable positives: Network-effect moat; share grew from 24% to 31% in 5 years.
```

## Load References Selectively

- `references/moat-typology.md` — load when classifying moat type or stress-testing moat durability; contains the 7-type taxonomy with named exemplars (Visa network, Costco scale, SAP switching, etc.), and the cyclicality test for pricing power.

## Review Discipline

Industry analysis is where retail investors most often hand-wave ("they have AI, they'll win"). Discipline: name the moat type. Quantify the share trend. Cite the TAM source. If you can't, suppress — orchestrator handles a missing IND finding better than a hand-wavy one.
