Scores the current level, exposure, or structural state at the analysis date.
Packaged agent
A script-first multi-agent framework for identifying durable compounders. Version 2 reduces the research factor list to 40 orthogonal drivers, gathers MCP-backed evidence in parallel, computes the formula-driven parts—including a five-point proven compounding record—and lets LLM subagents adjudicate judgment-heavy factors directly from evidence before the analyst confirm gate.
Overview
Compounder Identifier v2 extends the shipped v1 agent with a larger, more orthogonal factor set and a heavier reliance on skill scripts for calculations. Subagents gather evidence; Python scripts normalize time series, compute peer baselines, and prepare factor inputs; LLM subagents adjudicate qualitative and mixed factors directly against the rubric; scoring scripts apply weights and audit the final scorecard.
Each factor scores on a compact 0 / 1 / 2 rubric. Weights sum to 100. Factual and high-judgment compounder drivers carry more weight. Text-based factors are overlays — they inform judgment but do not override weak fundamentals.
Design
Scores the current level, exposure, or structural state at the analysis date.
Scores demonstrated direction, persistence, stability, or change through time.
Uses both the current level and the time-series trend; neither alone is sufficient.
Realized history, latest reported data, or current observations — no consensus required.
Forward-looking: TAM, guidance, consensus, disruption risk, or policy outlook.
Both realized record and forward evidence; score separates demonstrated record from runway/risk.
Company history, filings, and KPIs are sufficient.
Peer context materially improves calibration.
Needs peer, industry, market-share, or market-structure context.
MCP support
Each factor names one or more data types in its MCP support field. Resolve those data types to concrete MCP slugs by listing market using the matrix below. A dash means there is no reliable structured MCP for that market.
Numeric data types such as Fundamentals, Segment/Geo, Payout, Employees, Prices, and Forecast feed formula and proxy inputs. Text data types such as Filing-text, Transcript, Web/Broker-text, News, and Macro/Reg feed evidence for LLM adjudication.
windChina A-share prices, quotes, trading calendars, macro, and A-share fundamentals such as revenue, net profit, assets, equity, ROE, leverage, and EPS.
defeatbetaPublic equity fundamentals, news, and transcripts, especially US and many global public equities.
stockanalysisGlobal fundamentals, segment/geography KPIs, employees, analyst forecasts, dividends, and transcripts.
sec-edgarUS filings, XBRL company facts, 10-K/10-Q/8-K/proxy, insider filings, and ownership filings.
edgar-13fUS institutional holders, filer portfolios, and quarter-over-quarter holding changes.
yfinancePrices, statements, news, holders, insider transactions, and sector data.
twseTaiwan (TWSE/TPEx) structured data: income statement, balance sheet, cash flow, monthly revenue, valuation ratios (P/E, P/B, ROE, dividend yield), adjusted daily-K and TAIEX/TPEx index history, dividends, and institutional/insider holdings.
firecrawlPublic web research and parsing of PDF, HTML, DOCX, and XLSX sources.
ragIngested broker research reports and papers; key source for market share, moat, runway, and qualitative evidence.
| Data type | US | HK | China A-share | Other ADR / foreign | Taiwan |
|---|---|---|---|---|---|
| Fundamentals | defeatbeta, stockanalysis, yfinance, sec-edgar | stockanalysis | wind | defeatbeta, stockanalysis, yfinance | twse |
| Segment/Geo | sec-edgar, stockanalysis | stockanalysis | wind | stockanalysis, sec-edgar (20-F) | twse (monthly revenue), firecrawl (公開資訊觀測站), rag |
| Filing-text | sec-edgar, rag | firecrawl (HKEX), rag | firecrawl, rag | sec-edgar (20-F), rag | firecrawl (公開資訊觀測站), rag |
| Transcript | defeatbeta, stockanalysis, rag | stockanalysis, rag | stockanalysis, rag | defeatbeta, stockanalysis, rag | firecrawl (法說會), rag |
| Holders | edgar-13f, yfinance | firecrawl (HKEX), rag | wind | yfinance, edgar-13f if CUSIP | twse |
| Insider | sec-edgar (proxy/Form 4), yfinance | firecrawl (HKEX), rag | wind | yfinance, sec-edgar (20-F, limited) | twse |
| Payout | stockanalysis, yfinance, sec-edgar | stockanalysis | wind | stockanalysis, yfinance | twse |
| Employees | stockanalysis, sec-edgar | stockanalysis | stockanalysis, wind | stockanalysis | firecrawl (年報), rag |
| Web/Broker-text | rag, firecrawl | rag, firecrawl | rag, firecrawl | rag, firecrawl | rag, firecrawl |
| News | defeatbeta, yfinance, firecrawl, rag | firecrawl, stockanalysis, rag | wind, firecrawl, rag | defeatbeta, yfinance, firecrawl, rag | firecrawl, rag |
| Prices | yfinance, stockanalysis, defeatbeta | stockanalysis | wind | yfinance, stockanalysis | twse |
| Forecast | stockanalysis | stockanalysis | wind | stockanalysis | — |
| Macro/Reg | sec-edgar, rag, firecrawl | rag, firecrawl | wind, rag, firecrawl | sec-edgar (20-F), rag, firecrawl | twse (index), rag, firecrawl |
Factor model
Factors are grouped by economic mechanism. Each row shows trajectory type, data and peer requirements, weight, scoring rubric, calculation summary, and MCP support.
Return on capital, cash returns, margin quality, and operating leverage.
10%Growth DurabilityRevenue and FCF compounding plus drawdown resilience and growth-engine breadth.
15%Reinvestment RunwayCapital intensity, incremental returns, capacity headroom, white-space, and optionality.
9%Demand Captivity & Pricing PowerRetention, price/mix power, and concentration risk.
24%Moat StructureMarket share, industry structure, economic spread, structural barriers, switching/search costs, counter-positioning, and disruption exposure. Composite scores the best 7 of 8 barriers (drop-lowest-1).
8%Financial Safety & AccountingBalance sheet, cash conversion, accruals, adjustments, and accounting red flags.
10%Capital Allocation & OwnershipPer-share discipline, payouts, M&A, and governance alignment.
2%Operating Quality & ResilienceSupply-chain quality and guidance reliability.
0%Culture & Management OverlayMission coherence and innovation cadence.
5%Proven Compounding RecordLong-horizon per-share fundamentals, benchmark-relative shareholder returns, and continuity through adverse cycles.
17% of framework
Return on capital, cash returns, margin quality, and operating leverage.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 1 | Return on capital levelNormalized profitability of the operating asset base, measured against the cost of capital.Multi-period median ROIC; ROE is primary when invested capital is tiny or negative (net-cash balance sheets mechanically inflate ROIC); ROE is the fallback metric of record for financials; peer percentile as cross-check only; flag latest-period distortions (e.g. a spike from invested-capital shrinkage) rather than letting them drag the median read.MCP data types: Fundamentals | Snapshot + trajectory | Historical / observed | peer | 5 | 0 = sub-WACC or low-single-digit 5y median return (<= ~7% ROIC, or ROE for financials) or negative/cyclically impaired; 1 = comfortably above WACC but not elite (~8-15%), including a peer leader in a structurally low-return, capital-heavy industry; 2 = high AND durable absolute return (>= ~15% 5y median ROIC, or ROE for financials) sustained through a cycle. Peer percentile is a cross-check only, never the basis for a 2. |
| 2 | Return on capital stability and record lengthPersistence of high returns through cycles and length of proven record.Duration above WACC when cited, peak-to-trough drawdown (especially toward WACC), profitable/ROIC year counts, cycle_tested and its basis, coefficient of variation (stdev / median) rather than raw stdev. An upside outlier on a very high base inflates raw stdev without signalling instability; a business too stable to produce a registrable drawdown is cycle-tested by preserved earning power, not unproven.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 3 | 0 short record / volatile — returns dip toward or below WACC (or negative) with no sustained high-return base; 1 adequate — record long enough but returns drift toward WACC under stress, or the base sits only modestly above WACC; 2 long stable high-return record (score 2 requires ~8 annual observations, sustained positive/high returns, and a cycle-tested record — either an adverse episode survived or a long record whose drawdowns stayed shallow). Volatility is judged relative to the return level (stdev / median), not raw dispersion: a wide spread around a very high mean with no sub-WACC year is stable, not volatile. |
| 3 | Cash return on capitalConversion of capital base into owner cash earnings.FCF or owner earnings / invested capital; rolling median; count of positive years. Mark status na for financials — companies whose reported cash flow is dominated by balance-sheet flows (deposit/loan, float, securities inventory) rather than operating cash generation; their owner-cash generation is read through ROE + dividend payout under prof.roic_level.MCP data types: FundamentalsFiling-text | Snapshot + trajectory | Historical / observed | company | 4 | 0 weak; 1 adequate; 2 high recurring owner-cash return (score 2 requires ~5 years of positive owner-cash returns — a shorter history caps at 1 however spectacular the latest year) |
| 4 | Margin quality and peer premiumDurable unit-economics advantage versus peers, including resilience of gross margin under direct-cost pressure when material.Gross and operating margin minus peer median; gross-margin durability through input-cost cycles; margin volatility and record length over history.MCP data types: Fundamentals | Snapshot + trajectory | Historical / observed | peer/industry | 3 | 0 no premium; 1 modest/volatile; 2 clear durable peer premium (score 2 requires ~5 years of history — a shorter record caps at 1 however strong the latest margin) |
| 5 | Operating leverage profileWhether scale improves profitability without fragile cyclicality.Operating margin change vs revenue growth; up/down-cycle behavior; positive operating-income year count.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 2 | 0 scale hurts margins; 1 mixed; 2 margins improve with scale (score 2 requires ≥5 positive operating-income years) |
Normalized profitability of the operating asset base, measured against the cost of capital.
Rubric: 0 = sub-WACC or low-single-digit 5y median return (<= ~7% ROIC, or ROE for financials) or negative/cyclically impaired; 1 = comfortably above WACC but not elite (~8-15%), including a peer leader in a structurally low-return, capital-heavy industry; 2 = high AND durable absolute return (>= ~15% 5y median ROIC, or ROE for financials) sustained through a cycle. Peer percentile is a cross-check only, never the basis for a 2.
Multi-period median ROIC; ROE is primary when invested capital is tiny or negative (net-cash balance sheets mechanically inflate ROIC); ROE is the fallback metric of record for financials; peer percentile as cross-check only; flag latest-period distortions (e.g. a spike from invested-capital shrinkage) rather than letting them drag the median read.
MCP data types: Fundamentals
Persistence of high returns through cycles and length of proven record.
Rubric: 0 short record / volatile — returns dip toward or below WACC (or negative) with no sustained high-return base; 1 adequate — record long enough but returns drift toward WACC under stress, or the base sits only modestly above WACC; 2 long stable high-return record (score 2 requires ~8 annual observations, sustained positive/high returns, and a cycle-tested record — either an adverse episode survived or a long record whose drawdowns stayed shallow). Volatility is judged relative to the return level (stdev / median), not raw dispersion: a wide spread around a very high mean with no sub-WACC year is stable, not volatile.
Duration above WACC when cited, peak-to-trough drawdown (especially toward WACC), profitable/ROIC year counts, cycle_tested and its basis, coefficient of variation (stdev / median) rather than raw stdev. An upside outlier on a very high base inflates raw stdev without signalling instability; a business too stable to produce a registrable drawdown is cycle-tested by preserved earning power, not unproven.
MCP data types: Fundamentals
Conversion of capital base into owner cash earnings.
Rubric: 0 weak; 1 adequate; 2 high recurring owner-cash return (score 2 requires ~5 years of positive owner-cash returns — a shorter history caps at 1 however spectacular the latest year)
FCF or owner earnings / invested capital; rolling median; count of positive years. Mark status na for financials — companies whose reported cash flow is dominated by balance-sheet flows (deposit/loan, float, securities inventory) rather than operating cash generation; their owner-cash generation is read through ROE + dividend payout under prof.roic_level.
MCP data types: FundamentalsFiling-text
Durable unit-economics advantage versus peers, including resilience of gross margin under direct-cost pressure when material.
Rubric: 0 no premium; 1 modest/volatile; 2 clear durable peer premium (score 2 requires ~5 years of history — a shorter record caps at 1 however strong the latest margin)
Gross and operating margin minus peer median; gross-margin durability through input-cost cycles; margin volatility and record length over history.
MCP data types: Fundamentals
Whether scale improves profitability without fragile cyclicality.
Rubric: 0 scale hurts margins; 1 mixed; 2 margins improve with scale (score 2 requires ≥5 positive operating-income years)
Operating margin change vs revenue growth; up/down-cycle behavior; positive operating-income year count.
MCP data types: Fundamentals
10% of framework
Revenue and FCF compounding plus drawdown resilience and growth-engine breadth.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 6 | Revenue growth durabilityPersistence of top-line compounding.Revenue CAGR across available horizons, growth hit rate, rolling CAGR slope, financial history years, cycle_tested and its basis, revenue max drawdown.MCP data types: Fundamentals | Trajectory | Historical / observed | peer | 3 | 0 weak/erratic; 1 mid/slowing; 2 persistent above-peer compounding (score 2 requires ≥8 annual observations and a cycle-tested record — either an adverse period survived or a long record whose revenue drawdown stayed shallow) |
| 7 | Earnings and FCF growth durabilityAbility to compound economic output, not just sales.Operating income CAGR, FCF CAGR, recovery pace after drawdown, positive OI and FCF year counts.MCP data types: Fundamentals | Trajectory | Historical / observed | peer | 3 | 0 weak; 1 adequate; 2 durable economic-output compounding (score 2 requires ≥5 positive operating-income years and ≥5 positive FCF years) |
| 8 | Fundamental downside resilienceSeverity of business drawdowns in adverse periods, including relative resilience versus peers.Max drawdown of revenue, OI, FCF, ROIC; peer-relative drawdown/rank in same windows.MCP data types: FundamentalsPricesWeb/Broker-text | Trajectory | Historical / observed | peer | 3 | 0 severe; 1 recoverable; 2 shallow drawdowns and fast recovery |
| 9 | Independent growth-engine breadthWhether growth comes from multiple independent engines rather than one fading engine.Segment growth dispersion, count of independently growing segments/geographies, contribution of the largest engine, active secondary-engine contribution. Score 2 only when the engines are materially independent and none dominates growth; a dominant engine with extensions is 1, not 0 or 2.MCP data types: Segment/Geo | Trajectory | Historical / observed | company | 1 | 0 narrow/fading — a single engine with no active secondary engines (narrow alone is not enough: the sole engine must also be fading); 1 mixed — a dominant single engine (largest engine still a large majority of revenue) with active secondary engines such as sub-brand/price-tier lines, adjacent categories, or material geo/channel diversification; 2 multiple growing segments/geographies — several materially independent engines, none dominant, each contributing meaningfully to growth |
Persistence of top-line compounding.
Rubric: 0 weak/erratic; 1 mid/slowing; 2 persistent above-peer compounding (score 2 requires ≥8 annual observations and a cycle-tested record — either an adverse period survived or a long record whose revenue drawdown stayed shallow)
Revenue CAGR across available horizons, growth hit rate, rolling CAGR slope, financial history years, cycle_tested and its basis, revenue max drawdown.
MCP data types: Fundamentals
Ability to compound economic output, not just sales.
Rubric: 0 weak; 1 adequate; 2 durable economic-output compounding (score 2 requires ≥5 positive operating-income years and ≥5 positive FCF years)
Operating income CAGR, FCF CAGR, recovery pace after drawdown, positive OI and FCF year counts.
MCP data types: Fundamentals
Severity of business drawdowns in adverse periods, including relative resilience versus peers.
Rubric: 0 severe; 1 recoverable; 2 shallow drawdowns and fast recovery
Max drawdown of revenue, OI, FCF, ROIC; peer-relative drawdown/rank in same windows.
MCP data types: FundamentalsPricesWeb/Broker-text
Whether growth comes from multiple independent engines rather than one fading engine.
Rubric: 0 narrow/fading — a single engine with no active secondary engines (narrow alone is not enough: the sole engine must also be fading); 1 mixed — a dominant single engine (largest engine still a large majority of revenue) with active secondary engines such as sub-brand/price-tier lines, adjacent categories, or material geo/channel diversification; 2 multiple growing segments/geographies — several materially independent engines, none dominant, each contributing meaningfully to growth
Segment growth dispersion, count of independently growing segments/geographies, contribution of the largest engine, active secondary-engine contribution. Score 2 only when the engines are materially independent and none dominates growth; a dominant engine with extensions is 1, not 0 or 2.
MCP data types: Segment/Geo
15% of framework
Capital intensity, incremental returns, capacity headroom, white-space, and optionality.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 10 | Capital intensity and reinvestment burdenHow much capital each unit of growth consumes, and whether growth is capital-light or capital-hungry.Capex/revenue, capex/NOPAT, depreciation/EBITDA, maintenance vs growth capex. Mark status na for financials — companies whose capital metrics are balance-sheet artifacts rather than operating capital deployed.MCP data types: FundamentalsFiling-text | Snapshot + trajectory | Historical + expectation | company | 3 | 0 capital-hungry/rising burden; 1 manageable; 2 capital-light with low reinvestment need |
| 11 | Incremental return on reinvestmentReturn generated by recent capital deployment.Rolling incremental delta NOPAT / delta invested capital; capex/revenue; realized price direction.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 5 | 0 poor; 1 acceptable; 2 high returns on recent reinvestment (score 2 is capped at 1 for a capital-hungry business with no demonstrated pricing power: returns earned deploying capital into a market whose own price is falling are not durable) |
| 12 | Capacity headroomRoom to grow with existing capital and efficiency of converting incremental capital into revenue.Sales-to-capital, PP&E turnover, utilization, planned capex vs sales; delta revenue / delta invested capital. Mark status na for financials whose capacity metrics are balance-sheet artifacts.MCP data types: FundamentalsFiling-textTranscriptWeb/Broker-text | Snapshot + trajectory | Historical + expectation | company | 2 | 0 no headroom / saturated capacity; 1 manageable; 2 ample headroom or high sales per incremental capital |
| 13 | Market white-space runwayRemaining opportunity within the existing market relative to current scale, supported by TAM, penetration, and reference-class evidence.Revenue/users/share vs TAM; underpenetrated / mature / saturated system state; comparable cross-geo precedents. Judge practical headroom against system maturity (e.g. already-high credit/banking penetration) and sector growth momentum, not just the inverse of current share. Mark status na when a credible TAM or reference-class precedent cannot be established.MCP data types: Web/Broker-textSegment/Geo | Snapshot + trajectory | Expectation | peer | 3 | 0 saturated, or runway that rests on raw arithmetic penetration alone; 1 moderate practical runway; 2 large credible runway vs scale, backed by reference-class evidence. Arithmetic penetration multiples are a starting point, never the verdict: a low penetration share in an already-mature system does not create practical runway. |
| 14 | Optionality and second-act playbookExecutable second-act / adjacent-market / cross-geography growth playbook distinct from existing-market runway.Track record entering adjacencies/geographies; platform extensibility; evidence of execution rather than narrative — specifically the second act's scaled revenue share and/or operating profit, not early-stage launches.MCP data types: FundamentalsWeb/Broker-textTranscriptSegment/Geo | Snapshot + trajectory | Expectation | company | 2 | 0 no credible second act; 1 early/unproven optionality; 2 demonstrated repeatable expansion playbook — the second act is already scaled and economically material (a meaningful revenue share and/or operating profit), not just a narrative. A second act that has reached profit-at-scale or a material revenue share is 2, not 1. |
How much capital each unit of growth consumes, and whether growth is capital-light or capital-hungry.
Rubric: 0 capital-hungry/rising burden; 1 manageable; 2 capital-light with low reinvestment need
Capex/revenue, capex/NOPAT, depreciation/EBITDA, maintenance vs growth capex. Mark status na for financials — companies whose capital metrics are balance-sheet artifacts rather than operating capital deployed.
MCP data types: FundamentalsFiling-text
Return generated by recent capital deployment.
Rubric: 0 poor; 1 acceptable; 2 high returns on recent reinvestment (score 2 is capped at 1 for a capital-hungry business with no demonstrated pricing power: returns earned deploying capital into a market whose own price is falling are not durable)
Rolling incremental delta NOPAT / delta invested capital; capex/revenue; realized price direction.
MCP data types: Fundamentals
Room to grow with existing capital and efficiency of converting incremental capital into revenue.
Rubric: 0 no headroom / saturated capacity; 1 manageable; 2 ample headroom or high sales per incremental capital
Sales-to-capital, PP&E turnover, utilization, planned capex vs sales; delta revenue / delta invested capital. Mark status na for financials whose capacity metrics are balance-sheet artifacts.
MCP data types: FundamentalsFiling-textTranscriptWeb/Broker-text
Remaining opportunity within the existing market relative to current scale, supported by TAM, penetration, and reference-class evidence.
Rubric: 0 saturated, or runway that rests on raw arithmetic penetration alone; 1 moderate practical runway; 2 large credible runway vs scale, backed by reference-class evidence. Arithmetic penetration multiples are a starting point, never the verdict: a low penetration share in an already-mature system does not create practical runway.
Revenue/users/share vs TAM; underpenetrated / mature / saturated system state; comparable cross-geo precedents. Judge practical headroom against system maturity (e.g. already-high credit/banking penetration) and sector growth momentum, not just the inverse of current share. Mark status na when a credible TAM or reference-class precedent cannot be established.
MCP data types: Web/Broker-textSegment/Geo
Executable second-act / adjacent-market / cross-geography growth playbook distinct from existing-market runway.
Rubric: 0 no credible second act; 1 early/unproven optionality; 2 demonstrated repeatable expansion playbook — the second act is already scaled and economically material (a meaningful revenue share and/or operating profit), not just a narrative. A second act that has reached profit-at-scale or a material revenue share is 2, not 1.
Track record entering adjacencies/geographies; platform extensibility; evidence of execution rather than narrative — specifically the second act's scaled revenue share and/or operating profit, not early-stage launches.
MCP data types: FundamentalsWeb/Broker-textTranscriptSegment/Geo
9% of framework
Retention, price/mix power, and concentration risk.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 15 | Retention or repeat demandLikelihood customers keep buying without repeated acquisition cost.Disclosed renewal/churn/NRR, persistency, repurchase, rollover or same-store-sales rate; a disclosed engagement-stickiness rate (DAU/MAU, sessions-per-user, time-spent growth, paid-subscription renewal/retention) for consumer platforms; contracted volume under long-term agreements or statutory offtake. Declare inputs.retention_evidence_type as repeat_measure (a disclosed repeat/renewal rate), engagement_stickiness (a disclosed engagement rate — must also declare inputs.engagement_stickiness_rate with the value), contract_volume (contracted/regulated offtake), share_proxy (share/balance/count/MAU/membership/tenure/backlog/concentration), or none. A raw count (MAU, subscriber count, membership) is share_proxy, not engagement_stickiness: the stickiness route needs a ratio/rate, not a level. Mark status: na only when there is genuinely no customer to retain; a commodity or project business still scores via contract_volume or a switching-barrier inference.MCP data types: TranscriptFiling-textWeb/Broker-text | Trajectory | Historical / observed | peer | 3 | 0 = no measured repeat/renewal/persistence rate AND no retention barrier — a share proxy, balance, customer count, MAU, membership, tenure, backlog or concentration figure is not retention (route the switching-barrier inference to moat.switching_cost). 1 = a measured but weak/partial rate (a low repurchase, renewal or persistency rate), or a real retention barrier (design-in/qualification/brand/network effect) where retention is inferred because no strong measured rate is disclosed and the lock is re-won each cycle. 2 = a measured strong repeat/renewal/persistence rate, a disclosed engagement-stickiness rate (DAU/MAU ratio, sessions-per-user, time-spent growth, or paid-subscription renewal/retention), OR contracted volume / statutory offtake covering the majority of output. |
| 16 | Price/mix powerAbility to raise effective price or mix without volume damage, calibrated against peer and cohort trends.Price/mix contribution; ASP/AOV/ARPU CAGR; peer-relative price/take-rate trend; margin recovery after pricing; secondary/resale market-price trend where one exists. Declare inputs.realized_price_trend as rising, flat, falling, or unknown.MCP data types: FundamentalsTranscriptWeb/Broker-text | Trajectory | Historical / observed | peer | 5 | 0 no pricing power; 1 partial; 2 sustained price/mix gains on a realized price that actually rose (score 2 is capped at 1 when realized price is falling — defending unit margin on a falling price is cost control, which the margin factors score) |
| 17 | Business concentration and dependency riskFragility from reliance on few customers, channels, products, geographies, or platforms.Largest exposure share, correlated-shock share, concentration trend.MCP data types: Filing-textSegment/GeoWeb/Broker-text | Snapshot + trajectory | Historical / observed | company | 1 | 0 concentrated fragile exposure; 1 manageable; 2 diversified/resilient |
Likelihood customers keep buying without repeated acquisition cost.
Rubric: 0 = no measured repeat/renewal/persistence rate AND no retention barrier — a share proxy, balance, customer count, MAU, membership, tenure, backlog or concentration figure is not retention (route the switching-barrier inference to moat.switching_cost). 1 = a measured but weak/partial rate (a low repurchase, renewal or persistency rate), or a real retention barrier (design-in/qualification/brand/network effect) where retention is inferred because no strong measured rate is disclosed and the lock is re-won each cycle. 2 = a measured strong repeat/renewal/persistence rate, a disclosed engagement-stickiness rate (DAU/MAU ratio, sessions-per-user, time-spent growth, or paid-subscription renewal/retention), OR contracted volume / statutory offtake covering the majority of output.
Disclosed renewal/churn/NRR, persistency, repurchase, rollover or same-store-sales rate; a disclosed engagement-stickiness rate (DAU/MAU, sessions-per-user, time-spent growth, paid-subscription renewal/retention) for consumer platforms; contracted volume under long-term agreements or statutory offtake. Declare inputs.retention_evidence_type as repeat_measure (a disclosed repeat/renewal rate), engagement_stickiness (a disclosed engagement rate — must also declare inputs.engagement_stickiness_rate with the value), contract_volume (contracted/regulated offtake), share_proxy (share/balance/count/MAU/membership/tenure/backlog/concentration), or none. A raw count (MAU, subscriber count, membership) is share_proxy, not engagement_stickiness: the stickiness route needs a ratio/rate, not a level. Mark status: na only when there is genuinely no customer to retain; a commodity or project business still scores via contract_volume or a switching-barrier inference.
MCP data types: TranscriptFiling-textWeb/Broker-text
Ability to raise effective price or mix without volume damage, calibrated against peer and cohort trends.
Rubric: 0 no pricing power; 1 partial; 2 sustained price/mix gains on a realized price that actually rose (score 2 is capped at 1 when realized price is falling — defending unit margin on a falling price is cost control, which the margin factors score)
Price/mix contribution; ASP/AOV/ARPU CAGR; peer-relative price/take-rate trend; margin recovery after pricing; secondary/resale market-price trend where one exists. Declare inputs.realized_price_trend as rising, flat, falling, or unknown.
MCP data types: FundamentalsTranscriptWeb/Broker-text
Fragility from reliance on few customers, channels, products, geographies, or platforms.
Rubric: 0 concentrated fragile exposure; 1 manageable; 2 diversified/resilient
Largest exposure share, correlated-shock share, concentration trend.
MCP data types: Filing-textSegment/GeoWeb/Broker-text
24% of framework
Market share, industry structure, economic spread, structural barriers, switching/search costs, counter-positioning, and disruption exposure. Composite scores the best 7 of 8 barriers (drop-lowest-1).
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 18 | Market share strength and trendEvidence the company is winning or defending share in its real competitive arena and total market.Arena and total-market share/rank, period change, observation count/span, continuous top-tier years, peer-cohort share trend, expected direction.MCP data types: Web/Broker-textSegment/GeoTranscript | Snapshot + trajectory | Historical + expectation | peer/industry | 3 | 0 weak/losing; 1 stable/niche; 2 leading and gaining share (score 2 requires ≥3 dated observations spanning ≥3 years with top-tier share maintained or gained) |
| 19 | Industry structureAttractiveness of the competitive field independent of company quality.HHI, top-3/top-5 share, competitor count, rationality score.MCP data types: Web/Broker-textMacro/Reg | Snapshot | Historical / observed | peer/industry | 2 | 0 fragmented/irrational; 1 mixed; 2 concentrated/rational attractive structure |
| 20 | Relative economic spread versus rivalsDirect evidence of superior economics.ROIC, gross/EBIT/FCF margin minus peer median/top quartile.MCP data types: Fundamentals | Snapshot + trajectory | Historical / observed | peer/industry | 5 | 0 no spread; 1 modest; 2 clear superior economics vs peers |
| 21 | Structural barrier evidenceEvidence of enforceable structural barriers: regulation, licences, IP/patents, cornered resources, scale/network effects, or arena boundaries.Apply the entry test (does unlimited capital plus 3-5 years suffice?), the licence-sharing test (is the permit/charter held by many peers? then it is the industry's barrier, not the company's), and the through-cycle return test (returns near/below cost of capital through a cycle fail the moat claim). Never credit a barrier the company does not own (a supplier's IP/fab/allocation, a customer's reference design, a parent's asset). Route brand, reputation, relationships, agency forces, and distribution networks to switching/search cost, not this factor. Record barrier type (regulatory/IP/licence/resource/scale/network/arena), boundary mechanism, and durability.MCP data types: Filing-textTranscriptWeb/Broker-textMacro/Reg | Snapshot + trajectory | Historical + expectation | peer | 5 | 0 = no enforceable barrier — contract assembly / ODM with no proprietary process, merchant PCB, commodity manufacturing without demonstrable scale economics, or a large assembler at low-single-digit margins; a moat claim also fails outright when returns have been near or below cost of capital through a cycle (a barrier that does not pay is not a moat). 1 = a real but replicable/contestable barrier — a licence held by many peers (the industry's barrier, not this company's), patents/IP, a certification or qualification regime, accumulated process know-how and yield, a branded consumer position, or most fabless design — clearable by a funded rival within roughly 3-5 years. 2 = a closed or irreplaceable barrier — a statutory monopoly or closed concession, a state-granted exclusive franchise, an irreproducible physical endowment (cornered resource / unique site), or frontier fabrication at the scale frontier. 2 requires that unlimited capital still cannot reproduce the position. |
| 22 | Customer switching costCost, disruption, and risk a customer bears to replace the company with an alternative.Apply the switching test (what must the customer forfeit or re-do — re-certification, re-tooling, re-permitting, contracted volume, surrendered cash value — and does it exceed ~2 quarters?), the re-win test (a lock re-competed each platform/generation/nomination cycle caps at 1), and the margin override (gross margin below ~15% with no pricing power scores 0 on every moat factor regardless of position). A lock that is a category feature shared with every rival earns 1 unless company-specific evidence shows it binding harder (ranked persistency, multi-product retention). Route brand habit, reputation, relationships, agency forces, distribution reach, and membership counts to search_reputation_cost / demand.retention, not this factor. Split books are scored on the revenue-weighted mix of locked vs unlocked business.MCP data types: Filing-textTranscriptWeb/Broker-text | Snapshot + trajectory | Historical + expectation | company | 3 | 0 = trivial to switch — the customer can substitute inside ~2 quarters with nothing to re-certify, re-tool, re-permit or forfeit; brand habit, procurement inertia, membership counts, distribution reach and relationship banking are NOT switching cost (they are scored under search_reputation_cost / demand.retention). 1 = moderate friction — a real cost or delay to switch that does not prevent it: a lock that is a category feature shared with every rival (e.g. a life-insurance cash-value lock), a design-in or qualification that lasts one platform/generation/nomination cycle and is re-won each cycle, or a lock that covers only part of the revenue book. 2 = high switching-cost lock-in — a customer cannot move inside ~2 quarters without forfeiting real value, and the lock is company-specific and durable rather than a category feature: contracted volume with prepayments, statutory offtake, an architectural/instruction-set migration barrier, or company-specific retention that measurably exceeds peers. |
| 23 | Search and reputation costThe work the name does that the product's own observable attributes do not: a first-time buyer defaulting to it to avoid a payment, identity, or authenticity error without trial.Score the captive surface only: the interface a first-time buyer defaults to (payment, identity, gifting), not the triable side SKU — a triable side segment cannot zero a default trust rail. Route away: (1) network effects and installed base — 'everyone is already on it', or an install prompted by someone else, is switching cost or a structural barrier, not search cost; this factor only fires when the name does work the network does not — a stranger choosing it to avoid a payment, identity, or authenticity error without trial. (2) certification, type-test, tape-out, PDK or own-qualification cost is moat.switching_cost, not this factor — an informed buyer who validates the product itself pays no search cost. (3) a trust premium shared by many peers (state backing, deposit insurance, a public procurement catalogue, G-SIB status) is the industry's asset, not the company's, so score 0. (4) a free, public reputation signal (league table, rating, published rank/share, reviews) imposes no search cost, so score 0. (5) a posted-grade or assayed commodity (fuel, coal, metals, panels, JEDEC parts) is verified rather than trusted, so score 0. (6) fame alone — a well-known trademark with nothing unverifiable attached — scores 0. Score 1 only when a first-time buyer defaults to the name to avoid a pre-purchase error and trusted rivals exist; 2 only when consumption is the sole assessment route and this name is the only trusted channel. Record the trust-rail basis (payment / identity / gifting / authenticity / product-quality / none) and the named trusted alternatives.MCP data types: Web/Broker-textTranscriptNews | Snapshot | Historical + expectation | company | 1 | Score the name's trust-rail work, not the easiest SKU to trial. Deciding test: does a first-time buyer default to this name to avoid a payment, identity, or authenticity error without any trial? 0 = quality is observable before purchase — a spec, standard, assay, posted grade, a quick trial, a buyer who already knows the vendor set, or a shelf SKU one position away — OR the name is merely famous (a well-known trademark) with nothing unverifiable attached. 1 = first-time buyers default to this name as the trusted interface for payment, identity, or gifting to avoid an error without trial, AND trusted rivals clear the same bar. 2 = the attribute can only be assessed by consumption, AND this brand or trusted channel is the only route a buyer trusts against an authenticity or outcome error, with no equally-trusted alternative. |
| 24 | Counter-positioningA superior business model incumbents cannot copy without damaging their existing economics.Incumbent margin/channel/cannibalization conflict; evidence of incumbent inaction or failed response; model asymmetry.MCP data types: Web/Broker-textTranscriptNews | Snapshot + trajectory | Historical + expectation | company | 3 | 0 no counter-positioning; 1 partial/contestable; 2 clear incumbent self-harm to respond |
| 25 | Substitution and disruption exposureProbability that the moat is being bypassed by substitutes, new channels, regulation, or AI-enabled value-chain change.Text score from substitution, AI, regulatory, channel-shift, product-cycle, and competitor evidence.MCP data types: Web/Broker-textTranscriptNews | Snapshot + trajectory | Expectation | peer | 2 | 0 high disruption risk; 1 manageable; 2 low risk or company advantaged |
Evidence the company is winning or defending share in its real competitive arena and total market.
Rubric: 0 weak/losing; 1 stable/niche; 2 leading and gaining share (score 2 requires ≥3 dated observations spanning ≥3 years with top-tier share maintained or gained)
Arena and total-market share/rank, period change, observation count/span, continuous top-tier years, peer-cohort share trend, expected direction.
MCP data types: Web/Broker-textSegment/GeoTranscript
Attractiveness of the competitive field independent of company quality.
Rubric: 0 fragmented/irrational; 1 mixed; 2 concentrated/rational attractive structure
HHI, top-3/top-5 share, competitor count, rationality score.
MCP data types: Web/Broker-textMacro/Reg
Direct evidence of superior economics.
Rubric: 0 no spread; 1 modest; 2 clear superior economics vs peers
ROIC, gross/EBIT/FCF margin minus peer median/top quartile.
MCP data types: Fundamentals
Evidence of enforceable structural barriers: regulation, licences, IP/patents, cornered resources, scale/network effects, or arena boundaries.
Rubric: 0 = no enforceable barrier — contract assembly / ODM with no proprietary process, merchant PCB, commodity manufacturing without demonstrable scale economics, or a large assembler at low-single-digit margins; a moat claim also fails outright when returns have been near or below cost of capital through a cycle (a barrier that does not pay is not a moat). 1 = a real but replicable/contestable barrier — a licence held by many peers (the industry's barrier, not this company's), patents/IP, a certification or qualification regime, accumulated process know-how and yield, a branded consumer position, or most fabless design — clearable by a funded rival within roughly 3-5 years. 2 = a closed or irreplaceable barrier — a statutory monopoly or closed concession, a state-granted exclusive franchise, an irreproducible physical endowment (cornered resource / unique site), or frontier fabrication at the scale frontier. 2 requires that unlimited capital still cannot reproduce the position.
Apply the entry test (does unlimited capital plus 3-5 years suffice?), the licence-sharing test (is the permit/charter held by many peers? then it is the industry's barrier, not the company's), and the through-cycle return test (returns near/below cost of capital through a cycle fail the moat claim). Never credit a barrier the company does not own (a supplier's IP/fab/allocation, a customer's reference design, a parent's asset). Route brand, reputation, relationships, agency forces, and distribution networks to switching/search cost, not this factor. Record barrier type (regulatory/IP/licence/resource/scale/network/arena), boundary mechanism, and durability.
MCP data types: Filing-textTranscriptWeb/Broker-textMacro/Reg
Cost, disruption, and risk a customer bears to replace the company with an alternative.
Rubric: 0 = trivial to switch — the customer can substitute inside ~2 quarters with nothing to re-certify, re-tool, re-permit or forfeit; brand habit, procurement inertia, membership counts, distribution reach and relationship banking are NOT switching cost (they are scored under search_reputation_cost / demand.retention). 1 = moderate friction — a real cost or delay to switch that does not prevent it: a lock that is a category feature shared with every rival (e.g. a life-insurance cash-value lock), a design-in or qualification that lasts one platform/generation/nomination cycle and is re-won each cycle, or a lock that covers only part of the revenue book. 2 = high switching-cost lock-in — a customer cannot move inside ~2 quarters without forfeiting real value, and the lock is company-specific and durable rather than a category feature: contracted volume with prepayments, statutory offtake, an architectural/instruction-set migration barrier, or company-specific retention that measurably exceeds peers.
Apply the switching test (what must the customer forfeit or re-do — re-certification, re-tooling, re-permitting, contracted volume, surrendered cash value — and does it exceed ~2 quarters?), the re-win test (a lock re-competed each platform/generation/nomination cycle caps at 1), and the margin override (gross margin below ~15% with no pricing power scores 0 on every moat factor regardless of position). A lock that is a category feature shared with every rival earns 1 unless company-specific evidence shows it binding harder (ranked persistency, multi-product retention). Route brand habit, reputation, relationships, agency forces, distribution reach, and membership counts to search_reputation_cost / demand.retention, not this factor. Split books are scored on the revenue-weighted mix of locked vs unlocked business.
MCP data types: Filing-textTranscriptWeb/Broker-text
The work the name does that the product's own observable attributes do not: a first-time buyer defaulting to it to avoid a payment, identity, or authenticity error without trial.
Rubric: Score the name's trust-rail work, not the easiest SKU to trial. Deciding test: does a first-time buyer default to this name to avoid a payment, identity, or authenticity error without any trial? 0 = quality is observable before purchase — a spec, standard, assay, posted grade, a quick trial, a buyer who already knows the vendor set, or a shelf SKU one position away — OR the name is merely famous (a well-known trademark) with nothing unverifiable attached. 1 = first-time buyers default to this name as the trusted interface for payment, identity, or gifting to avoid an error without trial, AND trusted rivals clear the same bar. 2 = the attribute can only be assessed by consumption, AND this brand or trusted channel is the only route a buyer trusts against an authenticity or outcome error, with no equally-trusted alternative.
Score the captive surface only: the interface a first-time buyer defaults to (payment, identity, gifting), not the triable side SKU — a triable side segment cannot zero a default trust rail. Route away: (1) network effects and installed base — 'everyone is already on it', or an install prompted by someone else, is switching cost or a structural barrier, not search cost; this factor only fires when the name does work the network does not — a stranger choosing it to avoid a payment, identity, or authenticity error without trial. (2) certification, type-test, tape-out, PDK or own-qualification cost is moat.switching_cost, not this factor — an informed buyer who validates the product itself pays no search cost. (3) a trust premium shared by many peers (state backing, deposit insurance, a public procurement catalogue, G-SIB status) is the industry's asset, not the company's, so score 0. (4) a free, public reputation signal (league table, rating, published rank/share, reviews) imposes no search cost, so score 0. (5) a posted-grade or assayed commodity (fuel, coal, metals, panels, JEDEC parts) is verified rather than trusted, so score 0. (6) fame alone — a well-known trademark with nothing unverifiable attached — scores 0. Score 1 only when a first-time buyer defaults to the name to avoid a pre-purchase error and trusted rivals exist; 2 only when consumption is the sole assessment route and this name is the only trusted channel. Record the trust-rail basis (payment / identity / gifting / authenticity / product-quality / none) and the named trusted alternatives.
MCP data types: Web/Broker-textTranscriptNews
A superior business model incumbents cannot copy without damaging their existing economics.
Rubric: 0 no counter-positioning; 1 partial/contestable; 2 clear incumbent self-harm to respond
Incumbent margin/channel/cannibalization conflict; evidence of incumbent inaction or failed response; model asymmetry.
MCP data types: Web/Broker-textTranscriptNews
Probability that the moat is being bypassed by substitutes, new channels, regulation, or AI-enabled value-chain change.
Rubric: 0 high disruption risk; 1 manageable; 2 low risk or company advantaged
Text score from substitution, AI, regulatory, channel-shift, product-cycle, and competitor evidence.
MCP data types: Web/Broker-textTranscriptNews
8% of framework
Balance sheet, cash conversion, accruals, adjustments, and accounting red flags.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 26 | Balance-sheet resilienceAbility to survive shocks without external capital.Net debt/EBITDA, net cash/mcap, debt maturity vs cash + FCF.MCP data types: FundamentalsFiling-text | Snapshot + trajectory | Historical + expectation | company | 3 | 0 fragile; 1 adequate; 2 fortress financial resilience |
| 27 | Cash conversion qualityEarnings-to-cash reliability.FCF/net income, CFO/EBITDA, rolling median and downside periods, cash-conversion cycle days, accruals, capex/revenue.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 2 | 0 poor; 1 acceptable; 2 consistently strong cash conversion earned by the operations (score 2 is capped at 1 when the cash-conversion cycle is negative, since suppliers rather than customers are funding working capital; conversely, conversion depressed only by growth capex with clean accruals still qualifies) |
| 28 | Accrual and working-capital qualityRisk that reported growth is not cash-realized.(Net income − CFO) / assets; receivables/inventory vs sales; CCC trend.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 1 | 0 accrual/WC red flags; 1 manageable; 2 clean cash-realized growth |
| 29 | Adjustment and capitalization dependenceReliance on add-backs or capitalized costs.Adjusted/GAAP EPS gap, recurring restructuring, capitalized R&D/software.MCP data types: Filing-textTranscriptFundamentals | Snapshot + trajectory | Historical / observed | company | 1 | 0 heavy add-backs; 1 manageable; 2 low adjustment dependence |
| 30 | Accounting red flagsRestatements, impairments, controls, related-party or auditor issues.Count/severity of impairments, restatements, MW, auditor changes.MCP data types: FundamentalsFiling-textNews | Snapshot + trajectory | Historical / observed | company | 1 | 0 material red flags; 1 minor; 2 clean accounting record |
Ability to survive shocks without external capital.
Rubric: 0 fragile; 1 adequate; 2 fortress financial resilience
Net debt/EBITDA, net cash/mcap, debt maturity vs cash + FCF.
MCP data types: FundamentalsFiling-text
Earnings-to-cash reliability.
Rubric: 0 poor; 1 acceptable; 2 consistently strong cash conversion earned by the operations (score 2 is capped at 1 when the cash-conversion cycle is negative, since suppliers rather than customers are funding working capital; conversely, conversion depressed only by growth capex with clean accruals still qualifies)
FCF/net income, CFO/EBITDA, rolling median and downside periods, cash-conversion cycle days, accruals, capex/revenue.
MCP data types: Fundamentals
Risk that reported growth is not cash-realized.
Rubric: 0 accrual/WC red flags; 1 manageable; 2 clean cash-realized growth
(Net income − CFO) / assets; receivables/inventory vs sales; CCC trend.
MCP data types: Fundamentals
Reliance on add-backs or capitalized costs.
Rubric: 0 heavy add-backs; 1 manageable; 2 low adjustment dependence
Adjusted/GAAP EPS gap, recurring restructuring, capitalized R&D/software.
MCP data types: Filing-textTranscriptFundamentals
Restatements, impairments, controls, related-party or auditor issues.
Rubric: 0 material red flags; 1 minor; 2 clean accounting record
Count/severity of impairments, restatements, MW, auditor changes.
MCP data types: FundamentalsFiling-textNews
10% of framework
Per-share discipline, payouts, M&A, and governance alignment.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 31 | Per-share compounding disciplineWhether shareholders capture aggregate growth.Per-share revenue/FCF/EPS CAGR minus aggregate; diluted share CAGR.MCP data types: FundamentalsFiling-text | Trajectory | Historical / observed | company | 3 | 0 dilution erodes growth; 1 neutral; 2 per-share tracks/exceeds aggregate |
| 32 | Cash return disciplineQuality of dividends and buybacks — how much cash is actually returned to shareholders, and whether it is sustainable.Total shareholder yield (dividend + net buyback) / market cap; dividend payout ratio vs FCF coverage; buyback yield net of SBC/issuance (net diluted share-count change); idle-cash hoard where no return is made. Zero dividend + zero net buyback is 0, not 1: the factor scores the quality of returning cash, and returning none is poor discipline, however much cash is retained.MCP data types: PayoutFundamentals | Trajectory | Historical / observed | company | 2 | 0 = no net cash return OR value-destructive return. No net cash return means no dividend AND no buyback that reduces the share count — returning zero while retaining an idle cash hoard is poor discipline, not neutral. Value-destructive return means a buyback fully offset by SBC/issuance (no net share-count reduction), a dividend unfunded by FCF, or buybacks at peak valuations. 1 = adequate — a sustainable dividend OR a buyback that materially reduces the diluted share count net of SBC, but not consistently both, or at a low total yield. 2 = shareholder-friendly and sustainable — a growing dividend covered by FCF and/or buybacks that shrink the diluted share count through the cycle, net of SBC. |
| 33 | M&A disciplineWhether acquisitions build or dilute compounder economics.Acquisition spend / FCF; goodwill/assets; post-deal margin/ROIC trend.MCP data types: FundamentalsFiling-textWeb/Broker-text | Snapshot + trajectory | Historical + expectation | peer | 2 | 0 value-destructive; 1 mixed; 2 disciplined value-creating M&A |
| 34 | Owner/operator and governance alignmentIncentives and control structure: whether the people running the company get rich the same way a minority shareholder does.State ownership as a percentage (never 'founder-led' alone); pledge ratio on the control block; diluted share-count CAGR and the per-share vs aggregate spread; dividend/buyback record and payout vs FCF; dual-class/WVR or VIE wedge; dominant-parent-with-thin-float; related-party transactions; recapitalisations and their price-to-book. Three structural rules: (1) a dominant parent with a thin minority float is 0; (2) a WVR/dual-class wedge caps at 1 unless the economic stake is itself large; (3) a heavily pledged control stake, a founder who is selling down, or serial dilution each pull the score down a band. An SOE starts at 0 and is argued up to 1 only on a binding payout that has moved cash plus no value-destroying directive.MCP data types: InsiderHoldersFiling-textNews | Snapshot + trajectory | Historical / observed | company | 3 | Decide on three inputs, then apply the structural rules. Input 1 — skin in the game: does the founder/management hold a large economic stake, stated as a percentage? Input 2 — realised value: did minorities actually receive the compounding (long per-share growth AND cash returned: dividends or buybacks that shrink the count)? Input 3 — extraction and wedge: is there a control-economics wedge (dual class/WVR, a dominant parent with a thin float), a pledged control stake, related-party extraction, or serial dilution? 0 = misaligned — management owns effectively nothing and either (a) there is no per-share value creation (persistent per-share decline, liquidation-financed payouts, serial dilution), or (b) a dominant parent with a thin minority float, or (c) documented extraction (related-party cash removal, below-book issuance to the controlling shareholder); an SOE defaults to 0. 1 = acceptable — real ownership with a short or mixed record (an owner-operator whose listed record is under ~5 years, or whose per-share/payout record is mixed); OR professional management with a genuinely strong per-share record but little ownership; OR a WVR/dual-class structure whose economic stake is not itself large (WVR caps at 1 unless the economics are large); OR an SOE argued up on a binding, disclosed, multi-year payout commitment that has actually transferred cash AND no record of value-destroying policy directives. 2 = owner-oriented aligned governance — large founder/management economic ownership (unpledged or lightly pledged) PLUS a long delivered record (per-share compounding AND cash returned through the cycle) PLUS no wedge or extraction (single class, no dominant parent, no pledged-control encumbrance, no related-party extraction). |
Whether shareholders capture aggregate growth.
Rubric: 0 dilution erodes growth; 1 neutral; 2 per-share tracks/exceeds aggregate
Per-share revenue/FCF/EPS CAGR minus aggregate; diluted share CAGR.
MCP data types: FundamentalsFiling-text
Quality of dividends and buybacks — how much cash is actually returned to shareholders, and whether it is sustainable.
Rubric: 0 = no net cash return OR value-destructive return. No net cash return means no dividend AND no buyback that reduces the share count — returning zero while retaining an idle cash hoard is poor discipline, not neutral. Value-destructive return means a buyback fully offset by SBC/issuance (no net share-count reduction), a dividend unfunded by FCF, or buybacks at peak valuations. 1 = adequate — a sustainable dividend OR a buyback that materially reduces the diluted share count net of SBC, but not consistently both, or at a low total yield. 2 = shareholder-friendly and sustainable — a growing dividend covered by FCF and/or buybacks that shrink the diluted share count through the cycle, net of SBC.
Total shareholder yield (dividend + net buyback) / market cap; dividend payout ratio vs FCF coverage; buyback yield net of SBC/issuance (net diluted share-count change); idle-cash hoard where no return is made. Zero dividend + zero net buyback is 0, not 1: the factor scores the quality of returning cash, and returning none is poor discipline, however much cash is retained.
MCP data types: PayoutFundamentals
Whether acquisitions build or dilute compounder economics.
Rubric: 0 value-destructive; 1 mixed; 2 disciplined value-creating M&A
Acquisition spend / FCF; goodwill/assets; post-deal margin/ROIC trend.
MCP data types: FundamentalsFiling-textWeb/Broker-text
Incentives and control structure: whether the people running the company get rich the same way a minority shareholder does.
Rubric: Decide on three inputs, then apply the structural rules. Input 1 — skin in the game: does the founder/management hold a large economic stake, stated as a percentage? Input 2 — realised value: did minorities actually receive the compounding (long per-share growth AND cash returned: dividends or buybacks that shrink the count)? Input 3 — extraction and wedge: is there a control-economics wedge (dual class/WVR, a dominant parent with a thin float), a pledged control stake, related-party extraction, or serial dilution? 0 = misaligned — management owns effectively nothing and either (a) there is no per-share value creation (persistent per-share decline, liquidation-financed payouts, serial dilution), or (b) a dominant parent with a thin minority float, or (c) documented extraction (related-party cash removal, below-book issuance to the controlling shareholder); an SOE defaults to 0. 1 = acceptable — real ownership with a short or mixed record (an owner-operator whose listed record is under ~5 years, or whose per-share/payout record is mixed); OR professional management with a genuinely strong per-share record but little ownership; OR a WVR/dual-class structure whose economic stake is not itself large (WVR caps at 1 unless the economics are large); OR an SOE argued up on a binding, disclosed, multi-year payout commitment that has actually transferred cash AND no record of value-destroying policy directives. 2 = owner-oriented aligned governance — large founder/management economic ownership (unpledged or lightly pledged) PLUS a long delivered record (per-share compounding AND cash returned through the cycle) PLUS no wedge or extraction (single class, no dominant parent, no pledged-control encumbrance, no related-party extraction).
State ownership as a percentage (never 'founder-led' alone); pledge ratio on the control block; diluted share-count CAGR and the per-share vs aggregate spread; dividend/buyback record and payout vs FCF; dual-class/WVR or VIE wedge; dominant-parent-with-thin-float; related-party transactions; recapitalisations and their price-to-book. Three structural rules: (1) a dominant parent with a thin minority float is 0; (2) a WVR/dual-class wedge caps at 1 unless the economic stake is itself large; (3) a heavily pledged control stake, a founder who is selling down, or serial dilution each pull the score down a band. An SOE starts at 0 and is argued up to 1 only on a binding payout that has moved cash plus no value-destroying directive.
MCP data types: InsiderHoldersFiling-textNews
2% of framework
Supply-chain quality and guidance reliability.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 35 | Supply-chain and quality resilienceOperational fragility outside the income statement.Supplier concentration, redundancy, warranty/recall burden, sole-source components, single-site production, recall/warranty history. Mark status na when there is no physical supply chain or production quality to fail (a bank, insurer, broker, exchange or other financial — its vendors are service providers, not production inputs), and apply that na uniformly across every company in the industry: never na for one peer and scored for a same-business-model peer.MCP data types: Filing-textNewsWeb/Broker-text | Snapshot + trajectory | Historical + expectation | company | 1 | 0 fragile; 1 manageable; 2 resilient supply/quality system |
| 36 | Forecast and guidance reliabilityPredictability of near-term business execution and management promise-keeping.Promise-to-actual ledger, distinct-quarter/history span, controllable matched count, actual vs consensus/guidance misses, guide-down frequency, revision volatility.MCP data types: ForecastTranscript | Trajectory | Historical + expectation | company | 1 | 0 chronic misses; 1 mixed; 2 reliable guidance execution (score 2 requires ≥8 distinct quarters and ≥6 controllable matched promises) |
Operational fragility outside the income statement.
Rubric: 0 fragile; 1 manageable; 2 resilient supply/quality system
Supplier concentration, redundancy, warranty/recall burden, sole-source components, single-site production, recall/warranty history. Mark status na when there is no physical supply chain or production quality to fail (a bank, insurer, broker, exchange or other financial — its vendors are service providers, not production inputs), and apply that na uniformly across every company in the industry: never na for one peer and scored for a same-business-model peer.
MCP data types: Filing-textNewsWeb/Broker-text
Predictability of near-term business execution and management promise-keeping.
Rubric: 0 chronic misses; 1 mixed; 2 reliable guidance execution (score 2 requires ≥8 distinct quarters and ≥6 controllable matched promises)
Promise-to-actual ledger, distinct-quarter/history span, controllable matched count, actual vs consensus/guidance misses, guide-down frequency, revision volatility.
MCP data types: ForecastTranscript
0% of framework
Mission coherence and innovation cadence.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 37 | Mission, strategic coherence, and innovation cadenceWhether purpose, strategy, and new initiatives reinforce the core moat.Mission credibility score; relevant launches; new revenue contribution.MCP data types: Filing-textTranscriptWeb/Broker-text | Trajectory | Historical + expectation | company | 0 | 0 incoherent; 1 plausible; 2 mission and innovation reinforce moat |
Whether purpose, strategy, and new initiatives reinforce the core moat.
Rubric: 0 incoherent; 1 plausible; 2 mission and innovation reinforce moat
Mission credibility score; relevant launches; new revenue contribution.
MCP data types: Filing-textTranscriptWeb/Broker-text
5% of framework
Long-horizon per-share fundamentals, benchmark-relative shareholder returns, and continuity through adverse cycles.
| # | Factor | Type | Data | Peer | Wt | Rubric (0/1/2) |
|---|---|---|---|---|---|---|
| 38 | Long-horizon per-share fundamental compoundingSustained growth in revenue, earnings, and free cash flow per diluted share across a long audited record.Revenue, earnings, and FCF per-share CAGRs across 3/5/8/10-year horizons; median long-window CAGR; diluted-share history; years_listed (integer years since first listing). Tenure is true history, not vendor depth: a company public for ≥8 years satisfies the ≥8-year gate even when the vendor returned fewer periods, and the score is read from the longest available per-share window (5y) with the truncation flagged as a data gap rather than a short-record verdict.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 2 | 0 per-share earning power stagnates or declines; 1 positive but short, mixed, or modest record; 2 broad-based per-share compounding over ≥8 years of true history (years since first listing, not vendor statement depth) |
| 39 | Benchmark-relative shareholder returnLong-run shareholder wealth creation after distributions relative to the primary listing's local market.Dividend/split-adjusted TSR; local benchmark TSR; full-period excess CAGR; median rolling five-year excess CAGR; coverage and benchmark identity. A positive excess below ~3% CAGR is market-like, not wealth creation: it scores 1, never 2 — banks or OEMs that merely track or barely edge the local index do not earn a full score.MCP data types: Prices | Trajectory | Historical / observed | peer | 2 | 0 sustained negative excess total return; 1 mixed, market-like, a <8-year record, or a bare beat under ~3% CAGR; 2 full-period AND median rolling excess ≥ ~3% CAGR over ≥8 years |
| 40 | Cycle-tested compounding continuityPreservation and recovery of per-share earning power through adverse operating episodes.cycle_tested and its basis; revenue and FCF max drawdown; deep_earning_power_impairment; revenue/OI/FCF recovery; per-share FCF and earnings recovery; post-trough high-water marks.MCP data types: Fundamentals | Trajectory | Historical / observed | company | 1 | 0 permanent impairment or recapitalization; 1 limited-cycle evidence, uneven recovery, or a drawdown deep enough to have impaired earning power at the trough; 2 ≥8-year cycle-tested record with per-share earning power preserved or recovered. Depth decides this factor, not episode count: riding a cycle without a deep dip qualifies, and a severe drawdown does not qualify however many times the company has recovered from one. |
Sustained growth in revenue, earnings, and free cash flow per diluted share across a long audited record.
Rubric: 0 per-share earning power stagnates or declines; 1 positive but short, mixed, or modest record; 2 broad-based per-share compounding over ≥8 years of true history (years since first listing, not vendor statement depth)
Revenue, earnings, and FCF per-share CAGRs across 3/5/8/10-year horizons; median long-window CAGR; diluted-share history; years_listed (integer years since first listing). Tenure is true history, not vendor depth: a company public for ≥8 years satisfies the ≥8-year gate even when the vendor returned fewer periods, and the score is read from the longest available per-share window (5y) with the truncation flagged as a data gap rather than a short-record verdict.
MCP data types: Fundamentals
Long-run shareholder wealth creation after distributions relative to the primary listing's local market.
Rubric: 0 sustained negative excess total return; 1 mixed, market-like, a <8-year record, or a bare beat under ~3% CAGR; 2 full-period AND median rolling excess ≥ ~3% CAGR over ≥8 years
Dividend/split-adjusted TSR; local benchmark TSR; full-period excess CAGR; median rolling five-year excess CAGR; coverage and benchmark identity. A positive excess below ~3% CAGR is market-like, not wealth creation: it scores 1, never 2 — banks or OEMs that merely track or barely edge the local index do not earn a full score.
MCP data types: Prices
Preservation and recovery of per-share earning power through adverse operating episodes.
Rubric: 0 permanent impairment or recapitalization; 1 limited-cycle evidence, uneven recovery, or a drawdown deep enough to have impaired earning power at the trough; 2 ≥8-year cycle-tested record with per-share earning power preserved or recovered. Depth decides this factor, not episode count: riding a cycle without a deep dip qualifies, and a severe drawdown does not qualify however many times the company has recovered from one.
cycle_tested and its basis; revenue and FCF max drawdown; deep_earning_power_impairment; revenue/OI/FCF recovery; per-share FCF and earnings recovery; post-trough high-water marks.
MCP data types: Fundamentals
Architecture
The orchestrator owns workflow control but never calls MCPs directly. Seven evidence agents run in parallel after scoping, writing durable JSON and CSV artifacts under /mnt/session/outputs/. Skill scripts compute measurable inputs and build factor matrices; scorer/challenger subagents adjudicate non-formula factors and audit whether the evidence supports each rubric score.
Orchestrator coordinates the run and never calls MCPs directly.
saved scorecardscoper.jsonSeven specialized subagents gather MCP-backed data into session artifacts.
financial_series.csvpeer_baselines.jsonmarket_structure.jsonevidence_disclosures.jsonevidence_research.jsonevidence_web.jsonexpectations.jsonScripts compute formula-driven inputs; scorer adjudicates qualitative and mixed factors against rubrics.
factor_matrix.csv · factor_gaps.jsonscorecard_v2.jsonBear-case review, at most one targeted rescore, then analyst confirmation.
challenge.jsonFinal script merges confirmed scores; auditor validates before the user-facing verdict.
verdict_v2.mdWhen the user asks to save, compounder-archivist writes the finished assessment to Synology NAS — never overwriting prior runs.
Subagents
| Subagent | Role | MCPs | Skills | Output |
|---|---|---|---|---|
compounder-v2-orchestrator | Coordinates workflow, confirm gate, and final summary. Never calls MCPs directly. | — | compounder-scoping, compounder-v2-scoring | User-facing verdict |
compounder-v2-scoper | Resolves issuer, listing, peer cohort, competitive arena, and factor applicability. | yfinance, wind, defeatbeta, stockanalysis, sec-edgar, twse | compounder-scoping, company-scoping | scoper.json |
fundamentals-series-agent | Pulls company financials, per-share history, and company/local-benchmark total returns. | wind, stockanalysis, defeatbeta, yfinance, sec-edgar, twse | compounder-v2-fundamentals | financial_series.json, core_metrics.json, proven_record_returns.json |
peer-cohort-agent | Aligns the same metrics across peers; builds medians, ranks, and percentiles. | wind, stockanalysis, defeatbeta, yfinance, sec-edgar, twse | compounder-v2-peer-cohort, compounder-v2-fundamentals | peer_baselines.json |
segment-market-agent | Segment/geography, market share, industry structure, and TAM runway. | stockanalysis, wind, rag, firecrawl | compounder-v2-market-structure | market_structure.json |
filing-transcript-agent | Pricing power, switching cost, concentration, accounting, and governance text. | sec-edgar, stockanalysis, defeatbeta, edgar-13f | public-disclosure-extraction, moat-source-mapping | evidence_disclosures.json |
broker-research-agent | Broker views on moat, runway, disruption, policy, and reference-class evidence. | rag | broker-research-retrieval, compounder-v2-evidence-checks | evidence_research.json |
web-altdata-agent | Public web evidence: reputation, competitors, demand proxies. | firecrawl | compounder-web-intel, compounder-v2-evidence-checks | evidence_web.json |
guidance-expectations-agent | Guidance promise-to-actual ledger, forecasts, and expectation evidence separated from history. | stockanalysis, wind, defeatbeta, rag | compounder-v2-expectations, compounder-v2-evidence-checks | expectations.json |
compounder-v2-scorer | Applies 0/1/2 rubrics, weights, score caps, and analyst overrides. | — | compounder-v2-factor-calculation, compounder-v2-scoring, compounder-v2-evidence-checks, moat-source-mapping | scorecard_v2.json |
compounder-v2-challenger | Bear-case audit: peer gaming, expectation overreach, double counting. | — | compounder-v2-scoring, compounder-v2-evidence-checks, comment-quality-rubric | challenge.json |
scorecard-v2-auditor | Deterministic validation: factor count, weights, evidence, aggregation. | — | compounder-v2-scoring | audit.json |
compounder-archivist | Fetch/save finished assessments on Synology NAS only. | synology | compounder-archive | NAS artifacts |
compounder-v2-orchestratorCoordinates workflow, confirm gate, and final summary. Never calls MCPs directly.
User-facing verdictcompounder-v2-scoperResolves issuer, listing, peer cohort, competitive arena, and factor applicability.
scoper.jsonfundamentals-series-agentPulls company financials, per-share history, and company/local-benchmark total returns.
financial_series.json, core_metrics.json, proven_record_returns.jsonpeer-cohort-agentAligns the same metrics across peers; builds medians, ranks, and percentiles.
peer_baselines.jsonsegment-market-agentSegment/geography, market share, industry structure, and TAM runway.
market_structure.jsonfiling-transcript-agentPricing power, switching cost, concentration, accounting, and governance text.
evidence_disclosures.jsonbroker-research-agentBroker views on moat, runway, disruption, policy, and reference-class evidence.
evidence_research.jsonweb-altdata-agentPublic web evidence: reputation, competitors, demand proxies.
evidence_web.jsonguidance-expectations-agentGuidance promise-to-actual ledger, forecasts, and expectation evidence separated from history.
expectations.jsoncompounder-v2-scorerApplies 0/1/2 rubrics, weights, score caps, and analyst overrides.
scorecard_v2.jsoncompounder-v2-challengerBear-case audit: peer gaming, expectation overreach, double counting.
challenge.jsonscorecard-v2-auditorDeterministic validation: factor count, weights, evidence, aggregation.
audit.jsoncompounder-archivistFetch/save finished assessments on Synology NAS only.
NAS artifactsScripts & skills
Historical alignment, peer percentiles, factor input preparation, weighted aggregation, sensitivity analysis, and audit checks belong in Python scripts. Qualitative factors and mixed factors still require LLM adjudication directly on filings, transcripts, broker research, and web evidence.
compounder-v2-fundamentalsfundamentals-series-agentbuild_financial_series.pyNormalize raw MCP statement outputs into annual/quarterly financial series.
compute_core_metrics.pyCompute ROIC, ROE, FCF, margins, accruals, working capital, and leverage.
check_series_quality.pyDetect missing years, restatement breaks, currency changes, and negative-base CAGR issues.
compute_proven_record_returns.pyNormalize company and local-benchmark total-return history and compute full-period and rolling five-year excess returns.
compounder-v2-peer-cohortpeer-cohort-agentbuild_peer_metric_matrix.pyAlign company and peer metrics on the same fiscal-period grid.
compute_peer_percentiles.pyCompute peer medians, percentiles, ranks, and relative spreads.
audit_peer_set.pyFlag stale peers, missing data, and suspiciously favorable cohorts.
compounder-v2-market-structuresegment-market-agentnormalize_segments.pyStandardize segment and geography revenue tables across filings and data vendors.
estimate_market_share.pyCompute share, share change, HHI, top-player concentration, and category rank.
structure_runway_claims.pyConvert TAM, penetration, capacity, and market-share claims into comparable fields.
compounder-v2-factor-calculationcompounder-v2-scorercalc_reduced_factors.pyCompute formula-driven factors and prepare structured inputs for judgment-heavy factors.
apply_factor_applicability.pyMark N/A by business model, listing region, disclosure coverage, and source availability.
build_factor_matrix.pyValidate required inputs per data/peer need, then build one row per factor with computed value or adjudication prompt, source quality, data need, peer need, and gaps.
compounder-v2-expectationsguidance-expectations-agentbuild_guidance_ledger.pyExtract past guidance and match each promise to later actuals.
normalize_forecasts.pyNormalize consensus and broker forecasts into comparable expectation fields. Reuses structure_runway_claims.py for TAM/penetration/share-outlook evidence.
compounder-v2-scoringcompounder-v2-scorer / auditorscore_compounder_v2.pyApply confirmed/adjudicated 0/1/2 scores, weights, score caps, headline score, and low-confidence/missing/override sensitivity flags.
audit_scorecard_v2.pyValidate factor count, 100-point weights, evidence links, and aggregation ties; flag evidence double-counted across factors without a direct metric link.
Scoring
Each factor contributes score / 2 × weight to a 0–100 composite score, which is the single output used to rank stocks. There are no non-compensatory pass/fail gates and no Compounder / Not Compounder verdict — a stock is placed by its composite.
Each factor contributes score / 2 × weight to a 0–100 composite. The composite is the single output used to rank stocks — there are no pass/fail gates and no Compounder / Not Compounder verdict.
Moat Structure is scored on its best 7 of 8 factors: the lowest-scoring scored factor leaves the within-category calculation, then the resulting moat percentage is applied back to the full 24-point Moat category weight. Applied identically to every stock.
Coverage (% of applicable weight scored) is reported for transparency. na factors leave the applicable base; low coverage is surfaced but does not gate the composite.
Nine factors carry a score_cap: a ceiling on score-2 eligibility set by how much evidence actually exists, computed deterministically from the data rather than judged. Short evidence caps a factor at 1 rather than forcing a 0, so a young company is scored as unproven, not as bad. The aggregator contributes min(assigned_score, score_cap), so a 2 written by a model or an analyst cannot bypass a factual limit; every applied cap and its reason are disclosed in the computed block. Roughly: eight annual observations for the durability and record factors, five positive operating-income or FCF years for the earnings factors, three dated observations spanning three years for market share, and eight quarters with six matched promises for guidance reliability.
Four points recognize long-horizon per-share compounding, benchmark-relative total return, and continuity through adverse cycles. Short histories remain scoreable but cannot receive a fully proven 2.
Durability caps ask for a cycle-tested record, satisfied either by surviving an adverse episode or by an eight-year record whose drawdowns stayed shallow. Requiring a registrable crash made volatility a precondition for a durability score, penalizing the low-amplitude businesses those factors exist to reward. Symmetrically, cycle continuity is capped at 1 when the trough was deep enough to impair earning power, however often the company has recovered from one.
Three rules cap a 2 that is supported by the wrong observation — one the factor's own rubric does not ask for. Price/mix power requires a realized price that actually rose, since defending unit margin on a falling price is cost control, which the margin factors score. Retention requires a measured repeat or renewal rate, not market share, which the moat category already scores. Reinvestment quality is capped for a capital-hungry business with no demonstrated pricing power, since the capacity being added is what compresses the price. The gates run after scoring, so a 2 entered anyway is still reduced to 1.
Cash conversion is capped at 1 when the cash-conversion cycle is negative, because suppliers rather than customers are then funding working capital — a financing choice, not earnings quality. Conversely, conversion depressed only by growth capex with clean accruals is not marked down; that is reinvestment, which the reinvestment factors judge.
A workflow review step (not a scoring gate): analysts may override individual 0/1/2 factors before final aggregation runs score_compounder_v2.py.
score_compounder_v2.py.