alphacouncil-agent 0.9.4 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +4 -4
- package/AGENTS.md +25 -11
- package/CHANGELOG.md +146 -0
- package/CLAUDE.md +24 -7
- package/README.ja.md +15 -10
- package/README.md +21 -13
- package/README.zh-CN.md +17 -12
- package/data/authored/core-seats.mjs +808 -0
- package/data/authored/growth-seats.mjs +581 -0
- package/data/authored/index.mjs +114 -0
- package/data/authored/quant-seats.mjs +564 -0
- package/data/authored/value-seats.mjs +663 -0
- package/data/build-profile.v1.json +2 -1
- package/data/council-evaluation-protocol.v1.json +7 -4
- package/data/master-selector-method-locales.v1.mjs +10 -0
- package/data/persona-v3-ai-assisted-solo-profile.v1.json +2 -2
- package/data/persona-v3-build-specs.v1.mjs +60 -3
- package/docs/INSTALL.md +6 -10
- package/docs/personas.md +2 -1
- package/docs/plans/v1.0-roadmap.md +487 -0
- package/docs/plans/v1.1-basket-native-seats.md +267 -0
- package/docs/releases/v0.9.5.md +96 -0
- package/docs/releases/v1.0.0.md +164 -0
- package/docs/report-contract.md +30 -6
- package/knowledge/ai-assisted-solo/experiments/runs/a.json +13 -13
- package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/d13.json +126 -126
- package/knowledge/ai-assisted-solo/experiments/runs/d26.json +274 -254
- package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +129 -129
- package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +277 -257
- package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +278 -258
- package/knowledge/ai-assisted-solo/experiments/simulation-input.json +7278 -556
- package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +22 -22
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/{change_value_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/{power_map.ai-review.json → owner_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/{compute_power_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/{timeline_reverse_valuation.ai-review.json → price_implied_cash_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/{crowding_cost_stress.ai-review.json → nominal_earnings_yield_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/{factor_decomposer.ai-review.json → real_earnings_yield_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/expected_return_over_long_bond.ai-review.json +277 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/fundamental_expected_return.ai-review.json +277 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/{incremental_returns.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/{owner_earnings_rebuilder.ai-review.json → owner_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/{mispricing_carry.ai-review.json → net_current_asset_surplus_per_share.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/{capital_structure_reader.ai-review.json → net_current_asset_value_per_share.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/{cost_adoption_curve.ai-review.json → current_cash_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/{capture_valuation_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/{regime_classifier.ai-review.json → policy_real_rate.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/{master_munger/reviews/incentive_map.ai-review.json → master_dalio/reviews/real_curve_slope.ai-review.json} +51 -51
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/{reverse_valuation.ai-review.json → implied_equity_risk_premium.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/{story_dcf.ai-review.json → premium_versus_long_run_average.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/{liquidity_revision_map.ai-review.json → liquidity_curve_impulse.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/{inflection_payoff.ai-review.json → policy_real_rate.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/{user_value_evidence.ai-review.json → five_year_opportunity_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/{opportunity_cost.ai-review.json → margin_retention.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/{research_productivity.ai-review.json → margin_retention.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/{scuttlebutt_graph.ai-review.json → reinvestment_spread.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/{master_dalio/reviews/debt_driver_stress.ai-review.json → master_forensic_short/reviews/cash_conversion_gap.ai-review.json} +51 -51
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/{accounting_rebuilder.ai-review.json → cash_cover_of_leverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/{asset_floor.ai-review.json → defensive_hurdle_base.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/{normalized_earnings.ai-review.json → half_normalised_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/{penetration_liquidity.ai-review.json → cash_quality_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/{promoter_governance.ai-review.json → real_structural_growth.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/{recovery_waterfall.ai-review.json → downside_asset_coverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/{cash_catalyst_compare.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/{promise_integrity_ledger.ai-review.json → cash_backed_decade_return.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/{ten_year_return_bridge.ai-review.json → decade_return_over_long_bond.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/{story_numbers_check.ai-review.json → growth_justified_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/{category_classifier.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/{cycle_temperature.ai-review.json → credit_cycle_position.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/{implied_expectations.ai-review.json → equity_over_corporate_debt.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/{failure_path_graph.ai-review.json → debt_service_cushion.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/reported_earnings_cash_gap.ai-review.json +277 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/{surface_builder.ai-review.json → normalised_skew.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/{greeks_payoff.ai-review.json → round_trip_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/{downside_floor.ai-review.json → downside_floor_coverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/{discrete_payoff.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/{leakage_audit.ai-review.json → absolute_session_move.ai-review.json} +42 -42
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/{oos_cost_test.ai-review.json → session_move_over_implied.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/{realized_vol_forecast.ai-review.json → round_trip_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/{net_edge_sizer.ai-review.json → volatility_per_unit_of_width.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/{reflexivity_graph.ai-review.json → credit_cycle_position.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/{reversal_monitor.ai-review.json → financing_burden.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/{tail_friction.ai-review.json → debt_service_cushion.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/{payoff_ruin.ai-review.json → normalised_skew.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/{fractional_kelly.ai-review.json → edge_per_unit_of_volatility.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/{edge_recalculator.ai-review.json → net_edge.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/review-manifest.json +288 -270
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-adjudications/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-extractions/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-skeptic-reviews/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-source-prereviews/index.json +6 -2
- package/knowledge/solo-test/masters/master_ackman/decision_policy.json +122 -11
- package/knowledge/solo-test/masters/master_ackman/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_ackman/manifest.json +13 -6
- package/knowledge/solo-test/masters/master_ackman/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_ackman/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_ackman/tools.json +56 -30
- package/knowledge/solo-test/masters/master_aschenbrenner/decision_policy.json +101 -10
- package/knowledge/solo-test/masters/master_aschenbrenner/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_aschenbrenner/manifest.json +12 -4
- package/knowledge/solo-test/masters/master_aschenbrenner/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_aschenbrenner/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_aschenbrenner/tools.json +56 -30
- package/knowledge/solo-test/masters/master_asness/decision_policy.json +89 -10
- package/knowledge/solo-test/masters/master_asness/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_asness/manifest.json +11 -4
- package/knowledge/solo-test/masters/master_asness/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_asness/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_asness/tools.json +56 -30
- package/knowledge/solo-test/masters/master_bogle/counterfactuals.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/decision_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/decision_policy.json +170 -0
- package/knowledge/solo-test/masters/master_bogle/doctrine.jsonl +14 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/calibration_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/experiments.json +5 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/golden_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/pairwise_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/failures.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/manifest.json +141 -0
- package/knowledge/solo-test/masters/master_bogle/memory_policy.json +5 -0
- package/knowledge/solo-test/masters/master_bogle/provisional-index.json +41 -0
- package/knowledge/solo-test/masters/master_bogle/research_policy.json +11 -0
- package/knowledge/solo-test/masters/master_bogle/sources.jsonl +1 -0
- package/knowledge/solo-test/masters/master_bogle/tools.json +120 -0
- package/knowledge/solo-test/masters/master_bogle/voice.en.md +7 -0
- package/knowledge/solo-test/masters/master_bogle/voice.zh.md +7 -0
- package/knowledge/solo-test/masters/master_buffett/decision_policy.json +102 -11
- package/knowledge/solo-test/masters/master_buffett/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_buffett/manifest.json +10 -4
- package/knowledge/solo-test/masters/master_buffett/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_buffett/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_buffett/tools.json +55 -29
- package/knowledge/solo-test/masters/master_burry/decision_policy.json +102 -12
- package/knowledge/solo-test/masters/master_burry/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_burry/manifest.json +12 -6
- package/knowledge/solo-test/masters/master_burry/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_burry/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_burry/tools.json +56 -30
- package/knowledge/solo-test/masters/master_cathie_wood/decision_policy.json +74 -12
- package/knowledge/solo-test/masters/master_cathie_wood/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_cathie_wood/manifest.json +12 -6
- package/knowledge/solo-test/masters/master_cathie_wood/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_cathie_wood/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_cathie_wood/tools.json +56 -30
- package/knowledge/solo-test/masters/master_dalio/decision_policy.json +123 -16
- package/knowledge/solo-test/masters/master_dalio/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_dalio/manifest.json +10 -4
- package/knowledge/solo-test/masters/master_dalio/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_dalio/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_dalio/tools.json +56 -30
- package/knowledge/solo-test/masters/master_damodaran/decision_policy.json +58 -10
- package/knowledge/solo-test/masters/master_damodaran/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_damodaran/manifest.json +9 -4
- package/knowledge/solo-test/masters/master_damodaran/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_damodaran/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_damodaran/tools.json +54 -28
- package/knowledge/solo-test/masters/master_druckenmiller/decision_policy.json +89 -10
- package/knowledge/solo-test/masters/master_druckenmiller/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_druckenmiller/manifest.json +11 -4
- package/knowledge/solo-test/masters/master_druckenmiller/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_druckenmiller/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_druckenmiller/tools.json +55 -29
- package/knowledge/solo-test/masters/master_duan_yongping/decision_policy.json +138 -13
- package/knowledge/solo-test/masters/master_duan_yongping/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_duan_yongping/manifest.json +17 -7
- package/knowledge/solo-test/masters/master_duan_yongping/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_duan_yongping/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_duan_yongping/tools.json +82 -30
- package/knowledge/solo-test/masters/master_fisher/decision_policy.json +102 -11
- package/knowledge/solo-test/masters/master_fisher/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_fisher/manifest.json +13 -6
- package/knowledge/solo-test/masters/master_fisher/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_fisher/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_fisher/tools.json +58 -32
- package/knowledge/solo-test/masters/master_forensic_short/decision_policy.json +93 -14
- package/knowledge/solo-test/masters/master_forensic_short/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_forensic_short/manifest.json +6 -4
- package/knowledge/solo-test/masters/master_forensic_short/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_forensic_short/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_forensic_short/tools.json +53 -27
- package/knowledge/solo-test/masters/master_graham/decision_policy.json +103 -12
- package/knowledge/solo-test/masters/master_graham/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_graham/manifest.json +12 -4
- package/knowledge/solo-test/masters/master_graham/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_graham/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_graham/tools.json +67 -28
- package/knowledge/solo-test/masters/master_jhunjhunwala/decision_policy.json +77 -12
- package/knowledge/solo-test/masters/master_jhunjhunwala/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_jhunjhunwala/manifest.json +11 -6
- package/knowledge/solo-test/masters/master_jhunjhunwala/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_jhunjhunwala/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_jhunjhunwala/tools.json +54 -28
- package/knowledge/solo-test/masters/master_klarman/decision_policy.json +105 -14
- package/knowledge/solo-test/masters/master_klarman/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_klarman/manifest.json +8 -2
- package/knowledge/solo-test/masters/master_klarman/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_klarman/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_klarman/tools.json +55 -29
- package/knowledge/solo-test/masters/master_li_lu/decision_policy.json +101 -10
- package/knowledge/solo-test/masters/master_li_lu/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_li_lu/manifest.json +13 -6
- package/knowledge/solo-test/masters/master_li_lu/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_li_lu/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_li_lu/tools.json +58 -32
- package/knowledge/solo-test/masters/master_lynch/decision_policy.json +127 -16
- package/knowledge/solo-test/masters/master_lynch/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_lynch/manifest.json +14 -6
- package/knowledge/solo-test/masters/master_lynch/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_lynch/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_lynch/tools.json +67 -28
- package/knowledge/solo-test/masters/master_marks/decision_policy.json +71 -9
- package/knowledge/solo-test/masters/master_marks/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_marks/manifest.json +11 -6
- package/knowledge/solo-test/masters/master_marks/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_marks/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_marks/tools.json +54 -28
- package/knowledge/solo-test/masters/master_munger/decision_policy.json +141 -16
- package/knowledge/solo-test/masters/master_munger/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_munger/manifest.json +10 -6
- package/knowledge/solo-test/masters/master_munger/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_munger/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_munger/tools.json +52 -26
- package/knowledge/solo-test/masters/master_natenberg/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_natenberg/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_natenberg/manifest.json +9 -6
- package/knowledge/solo-test/masters/master_natenberg/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_natenberg/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_natenberg/tools.json +50 -24
- package/knowledge/solo-test/masters/master_pabrai/decision_policy.json +125 -14
- package/knowledge/solo-test/masters/master_pabrai/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_pabrai/manifest.json +8 -2
- package/knowledge/solo-test/masters/master_pabrai/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_pabrai/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_pabrai/tools.json +55 -29
- package/knowledge/solo-test/masters/master_simons/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_simons/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_simons/manifest.json +8 -4
- package/knowledge/solo-test/masters/master_simons/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_simons/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_simons/tools.json +43 -30
- package/knowledge/solo-test/masters/master_sinclair/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_sinclair/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_sinclair/manifest.json +8 -6
- package/knowledge/solo-test/masters/master_sinclair/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_sinclair/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_sinclair/tools.json +54 -28
- package/knowledge/solo-test/masters/master_soros/decision_policy.json +98 -10
- package/knowledge/solo-test/masters/master_soros/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_soros/manifest.json +10 -7
- package/knowledge/solo-test/masters/master_soros/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_soros/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_soros/tools.json +54 -28
- package/knowledge/solo-test/masters/master_taleb/decision_policy.json +124 -13
- package/knowledge/solo-test/masters/master_taleb/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_taleb/manifest.json +9 -5
- package/knowledge/solo-test/masters/master_taleb/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_taleb/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_taleb/tools.json +50 -24
- package/knowledge/solo-test/masters/master_thorp/decision_policy.json +61 -13
- package/knowledge/solo-test/masters/master_thorp/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_thorp/manifest.json +11 -6
- package/knowledge/solo-test/masters/master_thorp/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_thorp/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_thorp/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/compilation-manifest.json +290 -264
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/price_implied_cash_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/nominal_earnings_yield_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/real_earnings_yield_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/components/tools.json +120 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/expected_return_over_long_bond.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/fundamental_expected_return.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/net_current_asset_surplus_per_share.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/net_current_asset_value_per_share.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/current_cash_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/real_curve_slope.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/implied_equity_risk_premium.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/{reverse_valuation.derived-proxy-evidence.json → premium_versus_long_run_average.derived-proxy-evidence.json} +29 -16
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_curve_impulse.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/components/tools.json +84 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/five_year_opportunity_cost.derived-proxy-evidence.json +102 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/components/tools.json +60 -34
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/reinvestment_spread.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/components/tools.json +55 -29
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/{accounting_rebuilder.derived-proxy-evidence.json → cash_conversion_gap.derived-proxy-evidence.json} +28 -15
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/cash_cover_of_leverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/components/tools.json +69 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/defensive_hurdle_base.derived-proxy-evidence.json +89 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/half_normalised_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/cash_quality_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/real_structural_growth.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/downside_asset_coverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/components/tools.json +60 -34
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/cash_backed_decade_return.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/decade_return_over_long_bond.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/components/tools.json +69 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/growth_justified_capitalisation.derived-proxy-evidence.json +89 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/equity_over_corporate_debt.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/components/tools.json +54 -28
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/reported_earnings_cash_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/components/tools.json +52 -26
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/provisional-derivations/{surface_builder.derived-proxy-evidence.json → normalised_skew.derived-proxy-evidence.json} +27 -14
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor_coverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/components/tools.json +45 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/{master_natenberg/provisional-derivations/greeks_payoff.derived-proxy-evidence.json → master_simons/provisional-derivations/absolute_session_move.derived-proxy-evidence.json} +17 -17
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/session_move_over_implied.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/volatility_per_unit_of_width.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/financing_burden.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/components/tools.json +52 -26
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/{tail_friction.derived-proxy-evidence.json → normalised_skew.derived-proxy-evidence.json} +27 -14
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_per_unit_of_volatility.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/net_edge.derived-proxy-evidence.json +76 -0
- package/mcp/lib/breadth.mjs +126 -0
- package/mcp/lib/constants.mjs +15 -0
- package/mcp/lib/damodaran.mjs +119 -0
- package/mcp/lib/fred.mjs +246 -0
- package/mcp/lib/fund-holdings-parsers.mjs +297 -0
- package/mcp/lib/fund-observations.mjs +152 -0
- package/mcp/lib/fundamentals.mjs +806 -0
- package/mcp/lib/funds.mjs +785 -0
- package/mcp/lib/gates.mjs +71 -4
- package/mcp/lib/grounding.mjs +209 -36
- package/mcp/lib/index-aggregate.mjs +733 -0
- package/mcp/lib/insider-ownership.mjs +149 -0
- package/mcp/lib/instrument-facts.mjs +855 -0
- package/mcp/lib/instruments.mjs +216 -0
- package/mcp/lib/markdown.mjs +216 -43
- package/mcp/lib/master-catalog.mjs +4 -0
- package/mcp/lib/orchestrator.mjs +173 -29
- package/mcp/lib/packets.mjs +59 -6
- package/mcp/lib/personas/engine.mjs +23 -10
- package/mcp/lib/personas-v3/deterministic-executor.mjs +13 -2
- package/mcp/lib/personas-v3/ga-external-evidence.mjs +3 -2
- package/mcp/lib/personas-v3/ga-gate.mjs +2 -1
- package/mcp/lib/personas-v3/ga-package-evidence.mjs +5 -4
- package/mcp/lib/personas-v3/grounding-adapter.mjs +309 -2
- package/mcp/lib/personas-v3/production-root.mjs +5 -4
- package/mcp/lib/personas-v3/release-formula-evidence.mjs +14 -7
- package/mcp/lib/personas-v3/release-source-evidence.mjs +2 -1
- package/mcp/lib/personas-v3/releases.mjs +5 -4
- package/mcp/lib/personas-v3/runtime-release-integrity.mjs +6 -5
- package/mcp/lib/personas-v3/semantic-source-adjudication.mjs +2 -1
- package/mcp/lib/personas-v3/semantic-source-extraction.mjs +2 -1
- package/mcp/lib/personas-v3/semantic-source-skeptic-review.mjs +2 -1
- package/mcp/lib/personas-v3/source-review-operations.mjs +3 -2
- package/mcp/lib/personas-v3/staging.mjs +22 -3
- package/mcp/lib/prompts.mjs +87 -3
- package/mcp/lib/quotes.mjs +5 -0
- package/mcp/lib/rpc.mjs +27 -10
- package/mcp/lib/run-store.mjs +5 -3
- package/mcp/lib/sec.mjs +32 -0
- package/mcp/lib/tables.mjs +11 -0
- package/mcp/lib/voice.mjs +122 -0
- package/mcp/lib/xbrl-aggregates.mjs +153 -0
- package/mcp/lib/xbrl-series.mjs +341 -0
- package/mcp/lib/xlsx.mjs +155 -0
- package/package.json +5 -5
- package/personas/masters/masters-value/bogle.md +145 -0
- package/schemas/council-evaluation-protocol-v1.schema.json +2 -2
- package/schemas/persona-v3-ai-assisted-solo-profile-v1.schema.json +2 -2
- package/schemas/persona-v3-ai-machine-simulation-v1.schema.json +1 -1
- package/schemas/persona-v3-build-spec-v1.schema.json +3 -3
- package/schemas/persona-v3-release-formula-review-evidence-v1.schema.json +3 -3
- package/schemas/persona-v3-release-manifest-v1.schema.json +6 -6
- package/schemas/persona-v3-release-source-review-evidence-v1.schema.json +3 -3
- package/schemas/persona-v3-tool-graph-v1.schema.json +1 -1
- package/schemas/source-review-batch-v1.schema.json +9 -9
- package/scripts/assemble-persona-v3-release.mjs +3 -2
- package/scripts/build-persona-v3-solo-test-packs.mjs +6 -8
- package/scripts/check-persona-v3-ga.mjs +1 -1
- package/scripts/check-persona-v3-production-candidates.mjs +1 -1
- package/scripts/compile-persona-v3-formulas.mjs +19 -18
- package/scripts/doctor.mjs +11 -9
- package/scripts/export-persona-source-review-batch.mjs +1 -1
- package/scripts/generate-persona-v3-drafts.mjs +2 -2
- package/scripts/lib/build-profile.mjs +24 -0
- package/scripts/lib/council-evaluation-protocol.mjs +7 -6
- package/scripts/lib/host-capabilities.mjs +2 -1
- package/scripts/lib/packaged-host-parity.mjs +9 -3
- package/scripts/lib/persona-v3-ai-assisted-solo-status.mjs +6 -4
- package/scripts/lib/persona-v3-ai-formula-review.mjs +6 -5
- package/scripts/lib/persona-v3-ai-machine-simulations.mjs +32 -4
- package/scripts/lib/persona-v3-build-specs.mjs +3 -2
- package/scripts/lib/persona-v3-draft-packs.mjs +2 -2
- package/scripts/lib/persona-v3-formula-pipeline.mjs +11 -10
- package/scripts/lib/persona-v3-production-candidates.mjs +10 -9
- package/scripts/lib/persona-v3-solo-formula-pipeline.mjs +188 -16
- package/scripts/lib/persona-v3-solo-test-packs.mjs +112 -11
- package/scripts/package-smoke.mjs +2 -1
- package/scripts/report-persona-corpus-gaps.mjs +4 -1
- package/scripts/review-persona-v3-solo-formulas.mjs +12 -8
- package/scripts/scaffold-persona-v3-staging.mjs +1 -1
- package/skills/agent-skills-governance/SKILL.md +8 -2
- package/skills/alphacouncil-agent/SKILL.md +12 -4
- package/skills/public-equity-investing/SKILL.md +17 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/borrow_catalyst.ai-review.json +0 -277
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/change_value_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/power_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/compute_power_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/timeline_reverse_valuation.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/crowding_cost_stress.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/factor_decomposer.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/incremental_returns.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_rebuilder.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/capital_structure_reader.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/mispricing_carry.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/capture_valuation_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/cost_adoption_curve.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/debt_driver_stress.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/regime_classifier.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/story_dcf.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/inflection_payoff.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_revision_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/opportunity_cost.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/user_value_evidence.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/research_productivity.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/scuttlebutt_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/borrow_catalyst.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/asset_floor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/normalized_earnings.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/penetration_liquidity.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/promoter_governance.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/cash_catalyst_compare.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/recovery_waterfall.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/promise_integrity_ledger.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/ten_year_return_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/category_classifier.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/story_numbers_check.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/cycle_temperature.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/implied_expectations.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/failure_path_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/incentive_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/discrete_payoff.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/leakage_audit.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/oos_cost_test.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/net_edge_sizer.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/realized_vol_forecast.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reflexivity_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reversal_monitor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/payoff_ruin.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_recalculator.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/fractional_kelly.derived-proxy-evidence.json +0 -64
|
@@ -0,0 +1,663 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authored method logic for the six remaining value seats, keyed by persona id.
|
|
3
|
+
*
|
|
4
|
+
* Same contract and same discipline as the other authored seat files,
|
|
5
|
+
* which authored buffett, graham, bogle, marks, damodaran, dalio, druckenmiller, asness and
|
|
6
|
+
* natenberg. This file finishes the value bench: munger, klarman, pabrai, li_lu, duan_yongping
|
|
7
|
+
* and lynch.
|
|
8
|
+
*
|
|
9
|
+
* Everything here is AI-authored and unreviewed. It is barred from production admission by the
|
|
10
|
+
* same gates that bar the mechanical proxies; what changes is only that the arithmetic is now
|
|
11
|
+
* the method's own rather than a placeholder. Each seat names its published source in
|
|
12
|
+
* `provenance`, and every veto and scoring rule says in `rationale` what the person actually
|
|
13
|
+
* claimed. Where a published method gives a direction but no number, the rationale says so and
|
|
14
|
+
* labels the cut-off as this project's reading rather than the author's. Where the method needs
|
|
15
|
+
* something this pack carries no fact for -- Munger's incentive audit, Klarman's catalyst,
|
|
16
|
+
* Pabrai's outcome tree, Li Lu's promise ledger, Duan's culture evidence, Lynch's category --
|
|
17
|
+
* the provenance says so and names the substitute rather than inventing a threshold for it.
|
|
18
|
+
*
|
|
19
|
+
* ---------------------------------------------------------------------------------------
|
|
20
|
+
* Contract notes for the pipeline that consumes this file
|
|
21
|
+
* ---------------------------------------------------------------------------------------
|
|
22
|
+
*
|
|
23
|
+
* 1. `native_state` values are the RAW state names from each seat's
|
|
24
|
+
* `native_decision_contract.states` in `data/persona-v3-build-specs.v1.mjs`. They are mapped
|
|
25
|
+
* through `executableNativeState()`, which adds the `provisional_` prefix. Do not pre-prefix
|
|
26
|
+
* them here or they double-prefix and stop matching the declared state set. Note that
|
|
27
|
+
* `master_munger` legitimately declares a state literally named `out_of_scope`; it is a raw
|
|
28
|
+
* state name like any other and becomes `provisional_out_of_scope`.
|
|
29
|
+
*
|
|
30
|
+
* 2. `eligibility.all[]` entries carry the executor's own record shape
|
|
31
|
+
* (`condition_id` / `condition` / `on_false` / `on_uncomputable`) but omit `source_ids`,
|
|
32
|
+
* because the source id is minted at build time. The pipeline must inject `source_ids` the
|
|
33
|
+
* way it already does for hard vetoes and scoring rules, and must map both mapping states
|
|
34
|
+
* through `executableNativeState()`.
|
|
35
|
+
*
|
|
36
|
+
* 3. `purpose` on tools and `rationale` on vetoes and rules are authoring metadata. The
|
|
37
|
+
* executor rejects unknown fields, so neither may be copied into the physical policy or tool
|
|
38
|
+
* records. Nor may `max_score` be written here: `authoredDecisionPolicy` computes it as the
|
|
39
|
+
* sum of `points`, and the band `min_ratio` values are fractions of that sum.
|
|
40
|
+
*
|
|
41
|
+
* 4. Chained tools: a tool that consumes another tool's `output_id` must take the PRODUCER's
|
|
42
|
+
* `value_kind` and `unit` as its input contract, not its own. Klarman and Pabrai both divide
|
|
43
|
+
* a monetary balance-sheet floor by a monetary market capitalisation to produce a ratio, so a
|
|
44
|
+
* consumer-derived input contract fails `does not match producer ... output contract`.
|
|
45
|
+
*
|
|
46
|
+
* 5. Shared `output_id`s across seats are deliberate and denote the same number built the same
|
|
47
|
+
* way. `valuation.market_capitalisation` here is the same price-times-share-count product
|
|
48
|
+
* Buffett and Graham build, and Klarman, Pabrai and Lynch all take it as a denominator.
|
|
49
|
+
*
|
|
50
|
+
* 6. Period arithmetic that is easy to get wrong twice. `financial.free_cash_flow_5y` is the
|
|
51
|
+
* FIVE-YEAR CUMULATIVE figure, not an annual average, and `valuation.revenue_growth` is a
|
|
52
|
+
* five-year compound annual rate. Duan's seat compares five years of cash against five years
|
|
53
|
+
* of forgone interest, so both sides span the same window and no annualisation is needed.
|
|
54
|
+
* Lynch's seat needs an annual earnings figure, so the literal 20 in his second tool carries
|
|
55
|
+
* the division by five AND the conversion of a decimal growth rate into the percentage points
|
|
56
|
+
* his rule is written in (one fifth of the cumulative figure, times one hundred g).
|
|
57
|
+
*
|
|
58
|
+
* 7. Four seats declare two eligibility conditions rather than one. `min_coverage` is 1, so a
|
|
59
|
+
* single uncomputable scoring rule collapses a seat to out_of_scope with no explanation at
|
|
60
|
+
* all. Where a scoring fact is a genuine prerequisite of the method AND can be absent while
|
|
61
|
+
* the seat's tools still compute, the seat says so in eligibility instead, where the
|
|
62
|
+
* abstention has its own exit and its own reason: Munger's and Lynch's leverage, which the
|
|
63
|
+
* fundamentals layer returns as null rather than a number when book equity is not positive;
|
|
64
|
+
* Pabrai's implied volatility, which comes from an options chain a name may not have; and
|
|
65
|
+
* Duan's cash-flow record, without which his one definition of value has no input. Facts that
|
|
66
|
+
* travel with the rest of the filing bundle and are one axis of a verdict rather than a
|
|
67
|
+
* precondition for it -- Li Lu's five-year share count change -- are left in scoring, which is
|
|
68
|
+
* where the authored Buffett seat leaves the same fact.
|
|
69
|
+
*/
|
|
70
|
+
export const valueSeats = Object.freeze({
|
|
71
|
+
master_munger: {
|
|
72
|
+
provenance:
|
|
73
|
+
"Charlie Munger, \"A Lesson on Elementary, Worldly Wisdom as it Relates to Investment Management and Business\" (USC Marshall School of Business, 1994) and \"The Psychology of Human Misjudgment\" (Harvard Law School, June 1995), both collected in Poor Charlie's Almanack (2005): the method is inversion -- \"invert, always invert\", and \"all I want to know is where I'm going to die so I'll never go there\" -- together with the three-basket rule that sends anything he cannot explain to the too-hard pile, his repeated line that liquor, ladies and leverage are what ruin people, and his standing objection to accounting that flatters, of which EBITDA is his own named example. Of his stated failure paths this pack can measure three: borrowed money, the interest bill against operating earnings, and whether reported profit arrives as cash. It cannot measure the fourth and, on his own account, the most important -- the incentive structure -- because no governance fact exists here; the seat is therefore a partial inversion and says so. Every cut-off below is this project's reading. Munger published a direction on each of these and a number on none of them.",
|
|
74
|
+
tools: [
|
|
75
|
+
{
|
|
76
|
+
tool_id: "master_munger.reported_earnings_cash_gap",
|
|
77
|
+
operation: "subtract",
|
|
78
|
+
inputs: [{ fact_id: "accounting.cash_conversion" }, { literal: 1 }],
|
|
79
|
+
output_id: "accounting.reported_earnings_cash_gap",
|
|
80
|
+
value_kind: "ratio",
|
|
81
|
+
unit: "multiple",
|
|
82
|
+
purpose:
|
|
83
|
+
"The accounting failure path, measured as a distance rather than a level. Operating cash flow equal to reported net income is a gap of zero; everything below that is the part of the earnings that exists only on the income statement.",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
tool_id: "master_munger.debt_service_cushion",
|
|
87
|
+
operation: "subtract",
|
|
88
|
+
inputs: [{ fact_id: "financial.interest_coverage" }, { literal: 1 }],
|
|
89
|
+
output_id: "risk.debt_service_cushion",
|
|
90
|
+
value_kind: "ratio",
|
|
91
|
+
unit: "multiple",
|
|
92
|
+
purpose:
|
|
93
|
+
"The debt failure path, measured the same way. One times coverage is not a safety threshold, it is the point of failure itself -- the interest bill consuming the operating earnings whole -- so the useful number is the distance from it.",
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
eligibility: {
|
|
97
|
+
all: [
|
|
98
|
+
// The too-hard pile. If you cannot say what a marginal dollar earns inside the business,
|
|
99
|
+
// you cannot describe the machine, and describing the machine is the price of an opinion.
|
|
100
|
+
{
|
|
101
|
+
condition_id: "master_munger.economics_can_be_stated",
|
|
102
|
+
condition: { op: "exists", value: { fact_id: "financial.incremental_return_on_capital" } },
|
|
103
|
+
on_false: { native_state: "out_of_scope", common_stance: "out_of_scope" },
|
|
104
|
+
on_uncomputable: { native_state: "out_of_scope", common_stance: "out_of_scope" },
|
|
105
|
+
},
|
|
106
|
+
// Inversion needs the fastest route to zero to be visible. Debt over book equity is that
|
|
107
|
+
// route, and it is absent precisely when book equity is not positive -- which is a fact
|
|
108
|
+
// about the company, not a gap, and deserves to be said rather than scored around.
|
|
109
|
+
{
|
|
110
|
+
condition_id: "master_munger.capital_structure_readable",
|
|
111
|
+
condition: { op: "exists", value: { fact_id: "financial.leverage" } },
|
|
112
|
+
on_false: { native_state: "out_of_scope", common_stance: "out_of_scope" },
|
|
113
|
+
on_uncomputable: { native_state: "out_of_scope", common_stance: "out_of_scope" },
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
hard_vetoes: [
|
|
118
|
+
{
|
|
119
|
+
veto_id: "master_munger.coupled_debt_failure",
|
|
120
|
+
rationale:
|
|
121
|
+
"The coupled-failure family in his own words: several required assumptions failing through one shared cause. Debt above book equity is survivable and thin interest cover is survivable, but together they are one condition, not two, because the same borrowing produces both. Debt above one turn of equity with coverage below three times operating earnings is this project's reading of where the two stop being independent; Munger named the mechanism and no ratio.",
|
|
122
|
+
condition: {
|
|
123
|
+
op: "all",
|
|
124
|
+
conditions: [
|
|
125
|
+
{ op: "gt", left: { fact_id: "financial.leverage" }, right: { literal: 1 } },
|
|
126
|
+
{ op: "lt", left: { output_id: "risk.debt_service_cushion" }, right: { literal: 2 } },
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
on_trigger: { common_stance: "opposed", native_state: "fatal_path" },
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
veto_id: "master_munger.reported_earnings_are_not_cash",
|
|
133
|
+
rationale:
|
|
134
|
+
"Munger's standing objection to accounting that flatters, of which his EBITDA remark is the best known instance. When barely half of reported net income arrives as operating cash, the income statement is describing a different company from the one the cash flow statement describes, and there is nothing left to value. Half is this project's reading of where a gap becomes a fabrication rather than a timing difference.",
|
|
135
|
+
condition: { op: "lt", left: { output_id: "accounting.reported_earnings_cash_gap" }, right: { literal: -0.5 } },
|
|
136
|
+
on_trigger: { common_stance: "opposed", native_state: "fatal_path" },
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
scoring: [
|
|
140
|
+
{
|
|
141
|
+
rule_id: "munger_earnings_arrive_as_cash",
|
|
142
|
+
points: 1,
|
|
143
|
+
coverage_weight: 1,
|
|
144
|
+
rationale:
|
|
145
|
+
"Inversion applied to the income statement: not \"are the earnings good\" but \"is there a path by which the earnings are not real\". Operating cash flow at or above net income closes that path. The line needs no invented threshold because parity is the definition of the fact.",
|
|
146
|
+
condition: { op: "gte", left: { output_id: "accounting.reported_earnings_cash_gap" }, right: { literal: 0 } },
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
rule_id: "munger_debt_service_has_a_cushion",
|
|
150
|
+
points: 1,
|
|
151
|
+
coverage_weight: 1,
|
|
152
|
+
rationale:
|
|
153
|
+
"The interest bill is the failure path that runs on a schedule and does not wait for the business to recover. A cushion of four turns above the break-even -- operating earnings five times the interest -- is the fixed-charge discipline of the Graham tradition Munger and Buffett came out of, applied here as this project's reading; Munger himself published no coverage ratio.",
|
|
154
|
+
condition: { op: "gte", left: { output_id: "risk.debt_service_cushion" }, right: { literal: 4 } },
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
rule_id: "munger_no_leverage_dependency",
|
|
158
|
+
points: 1,
|
|
159
|
+
coverage_weight: 1,
|
|
160
|
+
rationale:
|
|
161
|
+
"The third L. Munger ran Wesco and the Daily Journal with almost no borrowing and repeated that leverage is one of the things that ruins people who would otherwise have been fine. Debt no larger than book equity is this project's reading of \"almost none\"; the claim is his, the number is not.",
|
|
162
|
+
condition: { op: "lte", left: { fact_id: "financial.leverage" }, right: { literal: 1 } },
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
bands: [
|
|
166
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "fatal_path" },
|
|
167
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "monitor" },
|
|
168
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "no_fatal_path_found" },
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
master_klarman: {
|
|
173
|
+
provenance:
|
|
174
|
+
"Seth Klarman, Margin of Safety: Risk-Averse Value Investing Strategies for the Thoughtful Investor (HarperBusiness, 1991), whose central instruction is that the margin of safety is measured against a conservatively reconstructed value -- and preferably against what the assets are actually worth -- rather than against a forecast of what the business might earn; together with his preface to the sixth edition of Security Analysis (2008) and his repeated statement that Baupost would rather hold cash than own something at an inadequate margin, which is why absolute return and not relative performance is the yardstick. `valuation.downside_asset_value` is this pack's Klarman-style floor and is built as tangible book plus cash less total debt, so it is a balance-sheet reconstruction with no forecast in it, which is exactly the quantity his method wants. The two things his method needs that this pack cannot supply are the catalyst and the security's own position in the capital structure; interest coverage stands in for the second, and the first is simply absent -- a catalyst-free reading of Klarman is an incomplete one and the seat does not pretend otherwise. The half-coverage line in the second scoring rule is this project's reading; the one-times line and the two-thirds lineage are not.",
|
|
175
|
+
tools: [
|
|
176
|
+
{
|
|
177
|
+
tool_id: "master_klarman.market_capitalisation",
|
|
178
|
+
operation: "multiply",
|
|
179
|
+
inputs: [{ fact_id: "market.price" }, { fact_id: "capital_allocation.share_count" }],
|
|
180
|
+
output_id: "valuation.market_capitalisation",
|
|
181
|
+
value_kind: "monetary",
|
|
182
|
+
unit: "currency_units",
|
|
183
|
+
purpose:
|
|
184
|
+
"The downside asset value is an absolute currency amount and says nothing until it is set against what the whole company costs. Price times share count is that denominator, built the same way Buffett's and Graham's seats build it.",
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
tool_id: "master_klarman.downside_asset_coverage",
|
|
188
|
+
operation: "divide",
|
|
189
|
+
inputs: [{ fact_id: "valuation.downside_asset_value" }, { output_id: "valuation.market_capitalisation" }],
|
|
190
|
+
output_id: "valuation.downside_asset_coverage",
|
|
191
|
+
value_kind: "ratio",
|
|
192
|
+
unit: "decimal",
|
|
193
|
+
purpose:
|
|
194
|
+
"How much conservatively assessed asset value each unit of purchase price is already backed by. Coverage of one means the price is fully covered by tangible assets net of debt, and the buyer is paying nothing for the forecast.",
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
eligibility: {
|
|
198
|
+
all: [
|
|
199
|
+
// The recovery waterfall is the method. Without a leverage figure the claims standing
|
|
200
|
+
// ahead of the common are unknown, and an asset value the equity cannot reach is not a
|
|
201
|
+
// floor -- so the downside is genuinely unknown rather than merely unattractive.
|
|
202
|
+
{
|
|
203
|
+
condition_id: "master_klarman.senior_claims_resolvable",
|
|
204
|
+
condition: { op: "exists", value: { fact_id: "financial.leverage" } },
|
|
205
|
+
on_false: { native_state: "downside_unknown", common_stance: "out_of_scope" },
|
|
206
|
+
on_uncomputable: { native_state: "downside_unknown", common_stance: "out_of_scope" },
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
},
|
|
210
|
+
hard_vetoes: [
|
|
211
|
+
{
|
|
212
|
+
veto_id: "master_klarman.no_reconstructable_downside",
|
|
213
|
+
rationale:
|
|
214
|
+
"Margin of Safety begins from what an asset is worth on conservative assumptions, and the whole method is the distance between that figure and the price. When tangible book plus cash less debt is zero or negative there is no conservatively assessed value to be safe below, and the correct answer is that the downside cannot be reconstructed -- not that the security is expensive.",
|
|
215
|
+
condition: { op: "lte", left: { fact_id: "valuation.downside_asset_value" }, right: { literal: 0 } },
|
|
216
|
+
on_trigger: { common_stance: "out_of_scope", native_state: "downside_unknown" },
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
veto_id: "master_klarman.senior_claims_consume_the_assets",
|
|
220
|
+
rationale:
|
|
221
|
+
"The recovery waterfall inverts at exactly one times. When operating earnings do not cover the interest, the lenders are being paid out of the assets rather than out of the business, and the asset value the common is nominally behind is already being consumed by the claim in front of it. One times is not a chosen threshold; it is the arithmetic point where the waterfall stops reaching the equity.",
|
|
222
|
+
condition: { op: "lt", left: { fact_id: "financial.interest_coverage" }, right: { literal: 1 } },
|
|
223
|
+
on_trigger: { common_stance: "opposed", native_state: "reject" },
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
scoring: [
|
|
227
|
+
{
|
|
228
|
+
rule_id: "klarman_price_at_or_below_downside_assets",
|
|
229
|
+
points: 1,
|
|
230
|
+
coverage_weight: 1,
|
|
231
|
+
rationale:
|
|
232
|
+
"The strong form of the margin of safety and the thing the book is named for: the price is covered in full by a value that assumes nothing about the future. At coverage of one the buyer is paying for the assets and receiving the business for nothing.",
|
|
233
|
+
condition: { op: "gte", left: { output_id: "valuation.downside_asset_coverage" }, right: { literal: 1 } },
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
rule_id: "klarman_downside_covers_half_the_price",
|
|
237
|
+
points: 1,
|
|
238
|
+
coverage_weight: 1,
|
|
239
|
+
rationale:
|
|
240
|
+
"The weaker form, and the one that separates a merely cheap security from a rich one. When conservatively assessed assets cover half the price, the forecast is being asked to carry the other half rather than all of it. One half is this project's reading of where a margin of safety begins; Klarman insists the margin be substantial and declines to name a fraction, saying it depends on the asset.",
|
|
241
|
+
condition: { op: "gte", left: { output_id: "valuation.downside_asset_coverage" }, right: { literal: 0.5 } },
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
rule_id: "klarman_debt_leaves_the_common_a_claim",
|
|
245
|
+
points: 1,
|
|
246
|
+
coverage_weight: 1,
|
|
247
|
+
rationale:
|
|
248
|
+
"Capital preservation before return. The asset floor belongs to the holders of the senior claims first, and the more borrowing sits ahead of the common the less of that floor is actually the common's. Debt no larger than book equity is this project's reading of a structure in which the equity still owns its own downside.",
|
|
249
|
+
condition: { op: "lte", left: { fact_id: "financial.leverage" }, right: { literal: 1 } },
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
bands: [
|
|
253
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "reject" },
|
|
254
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "wait_in_cash" },
|
|
255
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "absolute_return_candidate" },
|
|
256
|
+
],
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
master_pabrai: {
|
|
260
|
+
provenance:
|
|
261
|
+
"Mohnish Pabrai, The Dhandho Investor: The Low-Risk Value Method to High Returns (Wiley, 2007): the nine Dhandho principles, the framing sentence \"heads, I win; tails, I don't lose much\", the chapter that takes Graham's margin of safety over unchanged, and the distinction he returns to in talks and in the book between risk and uncertainty -- the method looks for low risk paired with high uncertainty, because the market discounts the two as though they were the same thing. `valuation.downside_floor` is this pack's Pabrai-style floor and is built as the lower of net current asset value and tangible book, reporting which term bound it, so it is deliberately the more conservative of two conservative numbers. Uncertainty has no direct fact here; the twenty-five-delta implied volatility of the listed options is the only place in this pack where the market states how uncertain it thinks the outcome is, and it is used as the substitute. Pabrai does not trade options and never mentions them, so both the substitution and the forty-per-cent line are this project's reading. The outcome tree and the concentration limit that complete his method have no facts here at all and are absent rather than approximated.",
|
|
262
|
+
tools: [
|
|
263
|
+
{
|
|
264
|
+
tool_id: "master_pabrai.market_capitalisation",
|
|
265
|
+
operation: "multiply",
|
|
266
|
+
inputs: [{ fact_id: "market.price" }, { fact_id: "capital_allocation.share_count" }],
|
|
267
|
+
output_id: "valuation.market_capitalisation",
|
|
268
|
+
value_kind: "monetary",
|
|
269
|
+
unit: "currency_units",
|
|
270
|
+
purpose:
|
|
271
|
+
"What the whole business costs today, so that an absolute floor can be compared with an absolute price. Same construction as the other seats that need a denominator.",
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
tool_id: "master_pabrai.downside_floor_coverage",
|
|
275
|
+
operation: "divide",
|
|
276
|
+
inputs: [{ fact_id: "valuation.downside_floor" }, { output_id: "valuation.market_capitalisation" }],
|
|
277
|
+
output_id: "valuation.downside_floor_coverage",
|
|
278
|
+
value_kind: "ratio",
|
|
279
|
+
unit: "decimal",
|
|
280
|
+
purpose:
|
|
281
|
+
"The tails half of the sentence, as a number: how much of what you paid is already covered by the more conservative of net current assets and tangible book. This is the quantity that decides whether the downside is small, and it is computed before anything is said about the upside.",
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
eligibility: {
|
|
285
|
+
all: [
|
|
286
|
+
// The floor is only worth anything if the business survives long enough to realise it,
|
|
287
|
+
// which is the financing-runway half of his own eligibility list. Interest cover is the
|
|
288
|
+
// nearest thing this pack carries to a runway.
|
|
289
|
+
{
|
|
290
|
+
condition_id: "master_pabrai.financing_runway_readable",
|
|
291
|
+
condition: { op: "exists", value: { fact_id: "financial.interest_coverage" } },
|
|
292
|
+
on_false: { native_state: "no_floor", common_stance: "out_of_scope" },
|
|
293
|
+
on_uncomputable: { native_state: "no_floor", common_stance: "out_of_scope" },
|
|
294
|
+
},
|
|
295
|
+
// The whole method turns on separating uncertainty from risk. With no reading of what
|
|
296
|
+
// the market thinks the uncertainty is, there is no Dhandho judgement to make, and the
|
|
297
|
+
// seat should say that here rather than collapse silently on an uncomputable score.
|
|
298
|
+
{
|
|
299
|
+
condition_id: "master_pabrai.uncertainty_is_observable",
|
|
300
|
+
condition: { op: "exists", value: { fact_id: "options.implied_volatility" } },
|
|
301
|
+
on_false: { native_state: "no_floor", common_stance: "out_of_scope" },
|
|
302
|
+
on_uncomputable: { native_state: "no_floor", common_stance: "out_of_scope" },
|
|
303
|
+
},
|
|
304
|
+
],
|
|
305
|
+
},
|
|
306
|
+
hard_vetoes: [
|
|
307
|
+
{
|
|
308
|
+
veto_id: "master_pabrai.no_downside_floor",
|
|
309
|
+
rationale:
|
|
310
|
+
"The first Dhandho question is what the downside is, and the method has no second question until that one is answered. A floor of zero or below means neither net current assets nor tangible book leaves anything recoverable, so \"tails, I don't lose much\" is not a claim the facts support at any price.",
|
|
311
|
+
condition: { op: "lte", left: { fact_id: "valuation.downside_floor" }, right: { literal: 0 } },
|
|
312
|
+
on_trigger: { common_stance: "out_of_scope", native_state: "no_floor" },
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
veto_id: "master_pabrai.financing_fails_before_resolution",
|
|
316
|
+
rationale:
|
|
317
|
+
"His own fail-closed reason, that the financing must survive to the resolution. Operating earnings below the interest bill mean the lenders decide the timetable, and a floor that is only reachable after a restructuring is not a floor the buyer of the common owns. One times is the arithmetic break-even, not a chosen line.",
|
|
318
|
+
condition: { op: "lt", left: { fact_id: "financial.interest_coverage" }, right: { literal: 1 } },
|
|
319
|
+
on_trigger: { common_stance: "opposed", native_state: "reject" },
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
scoring: [
|
|
323
|
+
{
|
|
324
|
+
rule_id: "pabrai_floor_covers_the_price",
|
|
325
|
+
points: 1,
|
|
326
|
+
coverage_weight: 1,
|
|
327
|
+
rationale:
|
|
328
|
+
"Tails, I don't lose much -- in its strongest available form. Coverage of one means the conservative floor already accounts for the entire purchase price, so the outcome tree only has to decide how much is won, not whether capital is lost.",
|
|
329
|
+
condition: { op: "gte", left: { output_id: "valuation.downside_floor_coverage" }, right: { literal: 1 } },
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
rule_id: "pabrai_uncertainty_is_high_where_risk_is_not",
|
|
333
|
+
points: 1,
|
|
334
|
+
coverage_weight: 1,
|
|
335
|
+
rationale:
|
|
336
|
+
"The distinction the whole method rests on. Pabrai's claim is that the market prices high uncertainty as though it were high risk, so a wide range of outcomes sitting on top of a floor is where the mispricing lives -- a quiet, certain, fully priced business offers him nothing. Forty per cent annualised implied volatility is this project's reading of \"high uncertainty\", and the use of an options quote to measure it is this project's substitution, not his.",
|
|
337
|
+
condition: { op: "gte", left: { fact_id: "options.implied_volatility" }, right: { literal: 0.4 } },
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
rule_id: "pabrai_financing_survives_to_resolution",
|
|
341
|
+
points: 1,
|
|
342
|
+
coverage_weight: 1,
|
|
343
|
+
rationale:
|
|
344
|
+
"Few bets and big bets are only survivable if the individual bet cannot be forced to close early. Operating earnings at three times the interest bill leave the timetable with the owner rather than the lender; three is this project's reading of a runway, and the number is not one Pabrai published.",
|
|
345
|
+
condition: { op: "gte", left: { fact_id: "financial.interest_coverage" }, right: { literal: 3 } },
|
|
346
|
+
},
|
|
347
|
+
],
|
|
348
|
+
bands: [
|
|
349
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "reject" },
|
|
350
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "watch" },
|
|
351
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "asymmetric_candidate" },
|
|
352
|
+
],
|
|
353
|
+
},
|
|
354
|
+
|
|
355
|
+
master_li_lu: {
|
|
356
|
+
provenance:
|
|
357
|
+
"Li Lu's 2015 lecture at the Guanghua School of Management, Peking University, on the prospects for value investing in China; his 2006 talk at Columbia Business School; and his foreword to the Chinese edition of Poor Charlie's Almanack. The recurring claims are that the horizon is ten years and not one, that over that horizon the market weighs rather than votes, that only a small minority of businesses compound at all, that the buyer of a share is an owner of a business and should behave as one, and that intellectual honesty about what one does and does not know is the discipline the rest depends on. He states all of this as a standard and none of it as a ratio. The two facts here that span a full cycle are the ten-year return on equity and the five-year revenue path; the honesty check is whether the reported return survives being restated in cash, which is the closest public substitute for the promise-versus-action ledger his method actually calls for. Management's dated commitments, the ledger's real content, are not in this pack at all -- the five-year change in share count stands in for it as the one management action toward existing owners that is always observable. The contract gives this seat exactly one opposed state, `integrity_reject`, so both the accounting veto and the zero-score band land there.",
|
|
358
|
+
tools: [
|
|
359
|
+
{
|
|
360
|
+
tool_id: "master_li_lu.decade_return_over_long_bond",
|
|
361
|
+
operation: "subtract",
|
|
362
|
+
inputs: [{ fact_id: "financial.return_on_equity_10y" }, { fact_id: "macro.long_bond_yield" }],
|
|
363
|
+
output_id: "valuation.decade_return_over_long_bond",
|
|
364
|
+
value_kind: "ratio",
|
|
365
|
+
unit: "decimal",
|
|
366
|
+
purpose:
|
|
367
|
+
"The ten-year return bridge in its simplest form. Over a holding period that long the owner's return converges on what the business earns on its own capital, so the comparison that matters is against what a government bond paid for taking no business risk at all.",
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
tool_id: "master_li_lu.cash_backed_decade_return",
|
|
371
|
+
operation: "multiply",
|
|
372
|
+
inputs: [{ fact_id: "financial.return_on_equity_10y" }, { fact_id: "accounting.cash_conversion" }],
|
|
373
|
+
output_id: "valuation.cash_backed_decade_return",
|
|
374
|
+
value_kind: "ratio",
|
|
375
|
+
unit: "decimal",
|
|
376
|
+
purpose:
|
|
377
|
+
"The decade's return on equity restated in cash. A return on equity that the cash flow statement does not support is a return the owner never receives, and ten years is long enough that the difference compounds into the whole answer.",
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
eligibility: {
|
|
381
|
+
all: [
|
|
382
|
+
// A ten-year judgement is a judgement about durability, and durability is a multi-year
|
|
383
|
+
// observation. Without a five-year margin history there is no evidence the business held
|
|
384
|
+
// anything, and the honest answer is that the seat does not understand it yet.
|
|
385
|
+
{
|
|
386
|
+
condition_id: "master_li_lu.durability_evidence_available",
|
|
387
|
+
condition: { op: "exists", value: { fact_id: "financial.gross_margin_5y" } },
|
|
388
|
+
on_false: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
389
|
+
on_uncomputable: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
390
|
+
},
|
|
391
|
+
],
|
|
392
|
+
},
|
|
393
|
+
hard_vetoes: [
|
|
394
|
+
{
|
|
395
|
+
veto_id: "master_li_lu.reported_return_is_not_cash",
|
|
396
|
+
rationale:
|
|
397
|
+
"The integrity ledger, in the one form that is public for every company. What management reports and what the business actually collected are two statements about the same year, and a persistent gap between them is a statement about management, not about accounting policy. Operating cash flow below half of reported net income is this project's reading of where the gap becomes an integrity question rather than a timing one; Li Lu describes the standard and publishes no ratio.",
|
|
398
|
+
condition: { op: "lt", left: { fact_id: "accounting.cash_conversion" }, right: { literal: 0.5 } },
|
|
399
|
+
on_trigger: { common_stance: "opposed", native_state: "integrity_reject" },
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
veto_id: "master_li_lu.decline_not_a_cycle",
|
|
403
|
+
rationale:
|
|
404
|
+
"His own warning that a low price on a structurally declining business is not a bargain, and that the work is to separate decline from a cycle. Five years is long enough to span most cycles, so a five-year compound revenue rate of minus five per cent or worse is a business shrinking rather than a business between peaks. This pack carries nothing that can make the separation he asks for, so the seat declines rather than pricing a decline it cannot classify; both the five-year window and the five-per-cent line are this project's reading.",
|
|
405
|
+
condition: { op: "lt", left: { fact_id: "valuation.revenue_growth" }, right: { literal: -0.05 } },
|
|
406
|
+
on_trigger: { common_stance: "out_of_scope", native_state: "do_not_understand" },
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
scoring: [
|
|
410
|
+
{
|
|
411
|
+
rule_id: "li_lu_decade_return_beats_the_long_bond",
|
|
412
|
+
points: 1,
|
|
413
|
+
coverage_weight: 1,
|
|
414
|
+
rationale:
|
|
415
|
+
"The weighing-machine claim made testable. A decade of return on equity below what the long government bond paid is a decade in which the owner was not compensated for owning a business instead of lending to a state, and no entry price repairs a decade. Zero needs no invented threshold.",
|
|
416
|
+
condition: { op: "gt", left: { output_id: "valuation.decade_return_over_long_bond" }, right: { literal: 0 } },
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
rule_id: "li_lu_decade_return_survives_restatement_in_cash",
|
|
420
|
+
points: 1,
|
|
421
|
+
coverage_weight: 1,
|
|
422
|
+
rationale:
|
|
423
|
+
"Intellectual honesty applied to the seat's own headline number. Comparing the cash-backed decade return with the reported one asks whether the business collected more than it booked; the comparison is between two computed quantities, so it holds whatever the level of the return happens to be and imports no threshold.",
|
|
424
|
+
condition: {
|
|
425
|
+
op: "gt",
|
|
426
|
+
left: { output_id: "valuation.cash_backed_decade_return" },
|
|
427
|
+
right: { fact_id: "financial.return_on_equity_10y" },
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
rule_id: "li_lu_owner_slice_not_diluted",
|
|
432
|
+
points: 1,
|
|
433
|
+
coverage_weight: 1,
|
|
434
|
+
rationale:
|
|
435
|
+
"Owner mentality read from the register rather than from what management says about itself. A share count that has not grown over five years means the existing owners' slice of the ten-year compounding is still theirs. This is a substitute for the promise-versus-action ledger the method wants and this pack cannot supply.",
|
|
436
|
+
condition: { op: "lte", left: { fact_id: "capital_allocation.share_count_change_5y" }, right: { literal: 0 } },
|
|
437
|
+
},
|
|
438
|
+
],
|
|
439
|
+
bands: [
|
|
440
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "integrity_reject" },
|
|
441
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "watch" },
|
|
442
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "long_duration_owner" },
|
|
443
|
+
],
|
|
444
|
+
},
|
|
445
|
+
|
|
446
|
+
master_duan_yongping: {
|
|
447
|
+
provenance:
|
|
448
|
+
"Duan Yongping's signed posts on Xueqiu and Sina Weibo under the handle 大道无形我有型, and his university talks and interviews: the yardstick is opportunity cost -- what else the same money could have been doing -- and he applies it by comparing any candidate against the best thing he already owns rather than against a benchmark; value is the discounted future cash the business produces and nothing else; buying a share is buying the company; and the culture test is 本分, which he glosses as doing the right things and then doing them right, with the stop-doing list as its operational half. Two substitutions are unavoidable here and neither is his. First, the alternative: he compares against a specific holding, and this pack carries no such asset, so the seat uses the seasoned high-grade corporate yield as the nearest liquid alternative an owner could actually have chosen instead. Second, user value: he judges it from the product and its users, and no such fact exists here, so the five-year gross margin stands in as the only public trace of customers paying a premium for something differentiated. Both margin lines and the growth line in the second veto are this project's reading. `financial.free_cash_flow_5y` is a five-year cumulative figure, which is why the first tool multiplies the alternative's annual yield by five: both sides of the comparison then span the same five years.",
|
|
449
|
+
tools: [
|
|
450
|
+
{
|
|
451
|
+
tool_id: "master_duan_yongping.five_year_opportunity_cost",
|
|
452
|
+
operation: "multiply",
|
|
453
|
+
inputs: [
|
|
454
|
+
{ fact_id: "market.price" },
|
|
455
|
+
{ fact_id: "capital_allocation.share_count" },
|
|
456
|
+
{ fact_id: "macro.aaa_corporate_yield" },
|
|
457
|
+
{ literal: 5 },
|
|
458
|
+
],
|
|
459
|
+
output_id: "valuation.five_year_opportunity_cost",
|
|
460
|
+
value_kind: "monetary",
|
|
461
|
+
unit: "currency_units",
|
|
462
|
+
purpose:
|
|
463
|
+
"Opportunity cost expressed as an amount of money rather than a rate: the interest the whole purchase price would have earned in high-grade corporate bonds over the same five years the cash-flow fact covers. Stating it in currency lets the comparison be made against the cash the business actually produced, with no annualisation on either side.",
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
tool_id: "master_duan_yongping.margin_retention",
|
|
467
|
+
operation: "divide",
|
|
468
|
+
inputs: [{ fact_id: "financial.net_margin_5y" }, { fact_id: "financial.gross_margin_5y" }],
|
|
469
|
+
output_id: "business.margin_retention",
|
|
470
|
+
value_kind: "ratio",
|
|
471
|
+
unit: "decimal",
|
|
472
|
+
purpose:
|
|
473
|
+
"The share of the gross margin that survives everything the company does with it. Gross margin is evidence that the right thing was made; how much of it reaches the owner is evidence about whether it was then done well.",
|
|
474
|
+
},
|
|
475
|
+
],
|
|
476
|
+
eligibility: {
|
|
477
|
+
all: [
|
|
478
|
+
// 不懂不做. His first question is how the business makes money over the long run. Without
|
|
479
|
+
// even a revenue trajectory there is no long-run mechanism to state, and the seat should
|
|
480
|
+
// say it does not understand the business rather than price something it cannot describe.
|
|
481
|
+
{
|
|
482
|
+
condition_id: "master_duan_yongping.business_trajectory_stateable",
|
|
483
|
+
condition: { op: "exists", value: { fact_id: "valuation.revenue_growth" } },
|
|
484
|
+
on_false: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
485
|
+
on_uncomputable: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
486
|
+
},
|
|
487
|
+
// His one definition of value is the discounted future cash. With no cash-flow record
|
|
488
|
+
// there is no value to compare against any alternative, so the opportunity-cost question
|
|
489
|
+
// cannot be asked at all -- which is an abstention, not a low score.
|
|
490
|
+
{
|
|
491
|
+
condition_id: "master_duan_yongping.cash_record_exists",
|
|
492
|
+
condition: { op: "exists", value: { fact_id: "financial.free_cash_flow_5y" } },
|
|
493
|
+
on_false: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
494
|
+
on_uncomputable: { native_state: "do_not_understand", common_stance: "out_of_scope" },
|
|
495
|
+
},
|
|
496
|
+
],
|
|
497
|
+
},
|
|
498
|
+
hard_vetoes: [
|
|
499
|
+
{
|
|
500
|
+
veto_id: "master_duan_yongping.nothing_to_discount",
|
|
501
|
+
rationale:
|
|
502
|
+
"His only definition of value is the discounted future cash the business will produce. Five years of cumulative free cash flow at or below zero means the business has produced none over the period the pack can observe, so there is nothing to discount and no price is the right price. This is a statement about the definition, not a threshold.",
|
|
503
|
+
condition: { op: "lte", left: { fact_id: "financial.free_cash_flow_5y" }, right: { literal: 0 } },
|
|
504
|
+
on_trigger: { common_stance: "opposed", native_state: "reject" },
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
veto_id: "master_duan_yongping.growth_without_user_value",
|
|
508
|
+
rationale:
|
|
509
|
+
"The case he is most consistently scathing about: revenue bought with price rather than earned with product, which he treats as the opposite of 本分 because it wins the quarter and destroys the business. Revenue compounding above twenty per cent while the gross margin sits below twenty is growth being purchased, and the seat rejects it however good the growth looks. Both numbers are this project's reading of a pattern he describes without quantifying.",
|
|
510
|
+
condition: {
|
|
511
|
+
op: "all",
|
|
512
|
+
conditions: [
|
|
513
|
+
{ op: "gt", left: { fact_id: "valuation.revenue_growth" }, right: { literal: 0.2 } },
|
|
514
|
+
{ op: "lt", left: { fact_id: "financial.gross_margin_5y" }, right: { literal: 0.2 } },
|
|
515
|
+
],
|
|
516
|
+
},
|
|
517
|
+
on_trigger: { common_stance: "opposed", native_state: "reject" },
|
|
518
|
+
},
|
|
519
|
+
],
|
|
520
|
+
scoring: [
|
|
521
|
+
{
|
|
522
|
+
rule_id: "duan_five_year_cash_beats_the_alternative",
|
|
523
|
+
points: 1,
|
|
524
|
+
coverage_weight: 1,
|
|
525
|
+
rationale:
|
|
526
|
+
"Opportunity cost as the yardstick, and the only rule here with no invented number in it: the cash the business actually produced over five years, against the interest the same purchase price would have collected from high-grade corporate bonds over the same five years. He would run this against the best business he already owns; the bond is this pack's nearest available stand-in for that.",
|
|
527
|
+
condition: {
|
|
528
|
+
op: "gt",
|
|
529
|
+
left: { fact_id: "financial.free_cash_flow_5y" },
|
|
530
|
+
right: { output_id: "valuation.five_year_opportunity_cost" },
|
|
531
|
+
},
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
rule_id: "duan_product_carries_a_premium",
|
|
535
|
+
points: 1,
|
|
536
|
+
coverage_weight: 1,
|
|
537
|
+
rationale:
|
|
538
|
+
"Doing the right thing, in the only form the filings show it. Duan reads a durable gross margin as customers voluntarily paying more for something they prefer, which is what he means by user value; a business that must match the cheapest competitor has no such evidence. Forty per cent is this project's reading, and the substitution of margin for users is this project's, not his.",
|
|
539
|
+
condition: { op: "gte", left: { fact_id: "financial.gross_margin_5y" }, right: { literal: 0.4 } },
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
rule_id: "duan_margin_reaches_the_owner",
|
|
543
|
+
points: 1,
|
|
544
|
+
coverage_weight: 1,
|
|
545
|
+
rationale:
|
|
546
|
+
"Then doing it right. A premium product spent entirely on the cost of selling it leaves the owner with nothing, which is the failure the stop-doing list exists to prevent. A quarter of the gross margin surviving to net income is this project's reading of an organisation that converts its advantage rather than consuming it.",
|
|
547
|
+
condition: { op: "gte", left: { output_id: "business.margin_retention" }, right: { literal: 0.25 } },
|
|
548
|
+
},
|
|
549
|
+
],
|
|
550
|
+
bands: [
|
|
551
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "reject" },
|
|
552
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "wait" },
|
|
553
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "act_at_price" },
|
|
554
|
+
],
|
|
555
|
+
},
|
|
556
|
+
|
|
557
|
+
master_lynch: {
|
|
558
|
+
provenance:
|
|
559
|
+
"Peter Lynch, One Up on Wall Street (1989): the six company categories in chapter 5, which fix the order of operations -- classify first, value second, because the same multiple means different things to a slow grower and a fast grower; the two-minute drill in chapter 9; and chapter 13, \"Some Famous Numbers\", which supplies both published thresholds used here. The first is his statement that the price-earnings ratio of a fairly priced company will equal its growth rate, with a ratio below the growth rate marking a possible bargain. The second is his description of a normal corporate balance sheet as seventy-five per cent equity and twenty-five per cent debt, which is a debt-to-equity ratio of one third and is exactly what `financial.leverage` measures. The category itself is the one thing this pack cannot supply -- there is no category fact and no two-minute story -- so the seat substitutes the five-year compound revenue rate, which places a company on the growth axis only and cannot distinguish a cyclical from a turnaround from an asset play. The rate is a revenue rate rather than the earnings rate Lynch's rule is written against, which is a further substitution. `financial.free_cash_flow_5y` is a five-year cumulative figure, so the literal 20 in the second tool is one fifth of it -- a year's cash -- times the hundred that turns a decimal growth rate into the percentage points the rule compares a multiple against. The leverage line in the second veto is this project's reading; the two scoring thresholds are Lynch's own.",
|
|
560
|
+
tools: [
|
|
561
|
+
{
|
|
562
|
+
tool_id: "master_lynch.market_capitalisation",
|
|
563
|
+
operation: "multiply",
|
|
564
|
+
inputs: [{ fact_id: "market.price" }, { fact_id: "capital_allocation.share_count" }],
|
|
565
|
+
output_id: "valuation.market_capitalisation",
|
|
566
|
+
value_kind: "monetary",
|
|
567
|
+
unit: "currency_units",
|
|
568
|
+
purpose:
|
|
569
|
+
"What the market is asking for the whole company, which is the left-hand side of Lynch's comparison once the multiple is restated as an amount of money rather than a ratio.",
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
tool_id: "master_lynch.growth_justified_capitalisation",
|
|
573
|
+
operation: "multiply",
|
|
574
|
+
inputs: [
|
|
575
|
+
{ fact_id: "financial.free_cash_flow_5y" },
|
|
576
|
+
{ fact_id: "valuation.revenue_growth" },
|
|
577
|
+
{ literal: 20 },
|
|
578
|
+
],
|
|
579
|
+
output_id: "valuation.lynch_growth_justified_capitalisation",
|
|
580
|
+
value_kind: "monetary",
|
|
581
|
+
unit: "currency_units",
|
|
582
|
+
purpose:
|
|
583
|
+
"Lynch's fair price, computed as an amount rather than a ratio so that no arithmetic has to happen inside a condition. A year's cash flow -- one fifth of the cumulative five-year fact -- multiplied by the growth rate in percentage points is the capitalisation at which the multiple exactly equals the growth rate. Twenty carries both conversions: the division by five and the hundred that turns a decimal into percentage points.",
|
|
584
|
+
},
|
|
585
|
+
],
|
|
586
|
+
eligibility: {
|
|
587
|
+
all: [
|
|
588
|
+
// Classify before valuing. The pack has no category fact, so the weakest usable proxy for
|
|
589
|
+
// a category-specific financial series is a multi-year profitability record: with no such
|
|
590
|
+
// series there is nothing to test a story against and no category to place the company in.
|
|
591
|
+
{
|
|
592
|
+
condition_id: "master_lynch.category_series_available",
|
|
593
|
+
condition: { op: "exists", value: { fact_id: "financial.net_margin_5y" } },
|
|
594
|
+
on_false: { native_state: "category_mismatch", common_stance: "out_of_scope" },
|
|
595
|
+
on_uncomputable: { native_state: "category_mismatch", common_stance: "out_of_scope" },
|
|
596
|
+
},
|
|
597
|
+
// The balance-sheet half of the two-minute drill runs before the valuation half. Debt to
|
|
598
|
+
// book equity is what chapter 13 measures, and the fundamentals layer returns it as null
|
|
599
|
+
// rather than a number when book equity is not positive -- a case Lynch would call a
|
|
600
|
+
// turnaround and this pack cannot classify.
|
|
601
|
+
{
|
|
602
|
+
condition_id: "master_lynch.balance_sheet_readable",
|
|
603
|
+
condition: { op: "exists", value: { fact_id: "financial.leverage" } },
|
|
604
|
+
on_false: { native_state: "category_mismatch", common_stance: "out_of_scope" },
|
|
605
|
+
on_uncomputable: { native_state: "category_mismatch", common_stance: "out_of_scope" },
|
|
606
|
+
},
|
|
607
|
+
],
|
|
608
|
+
},
|
|
609
|
+
hard_vetoes: [
|
|
610
|
+
{
|
|
611
|
+
veto_id: "master_lynch.story_without_earnings",
|
|
612
|
+
rationale:
|
|
613
|
+
"His standing warning about the company whose story has outrun its earnings, and the reason he insists on knowing what the company earns before hearing why it is exciting. Five years of cumulative free cash flow at or below zero also makes the growth-justified capitalisation zero or negative, so the chapter 13 rule has nothing to compare and the story is all there is.",
|
|
614
|
+
condition: { op: "lte", left: { fact_id: "financial.free_cash_flow_5y" }, right: { literal: 0 } },
|
|
615
|
+
on_trigger: { common_stance: "opposed", native_state: "story_invalid" },
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
veto_id: "master_lynch.balance_sheet_break",
|
|
619
|
+
rationale:
|
|
620
|
+
"The balance-sheet check that comes before the valuation in his own order of operations, on the argument that companies without debt cannot go bankrupt and companies with a great deal of it are a different investment from the one the story describes. Debt at twice book equity is six times the seventy-five-twenty-five structure he calls normal; the multiple of his own normal is this project's reading, since he names the normal and no rejection line.",
|
|
621
|
+
condition: { op: "gt", left: { fact_id: "financial.leverage" }, right: { literal: 2 } },
|
|
622
|
+
on_trigger: { common_stance: "opposed", native_state: "story_invalid" },
|
|
623
|
+
},
|
|
624
|
+
],
|
|
625
|
+
scoring: [
|
|
626
|
+
{
|
|
627
|
+
rule_id: "lynch_multiple_at_or_below_growth_rate",
|
|
628
|
+
points: 1,
|
|
629
|
+
coverage_weight: 1,
|
|
630
|
+
rationale:
|
|
631
|
+
"Chapter 13 stated as a comparison between two amounts of money: the company costs no more than the capitalisation at which its multiple would equal its growth rate. Lynch's own gloss is that a fairly priced company trades at a multiple equal to its growth rate and that anything below it may be a bargain. Revenue growth stands in for the earnings growth his rule is written against.",
|
|
632
|
+
condition: {
|
|
633
|
+
op: "lte",
|
|
634
|
+
left: { output_id: "valuation.market_capitalisation" },
|
|
635
|
+
right: { output_id: "valuation.lynch_growth_justified_capitalisation" },
|
|
636
|
+
},
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
rule_id: "lynch_normal_balance_sheet",
|
|
640
|
+
points: 1,
|
|
641
|
+
coverage_weight: 1,
|
|
642
|
+
rationale:
|
|
643
|
+
"The other published number in chapter 13: a normal corporate balance sheet is seventy-five per cent equity and twenty-five per cent debt. That is a debt-to-equity ratio of one third, which is what this fact measures directly, so the threshold is his rather than this project's.",
|
|
644
|
+
condition: { op: "lte", left: { fact_id: "financial.leverage" }, right: { literal: 0.33 } },
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
rule_id: "lynch_fast_grower_growth_rate",
|
|
648
|
+
points: 1,
|
|
649
|
+
coverage_weight: 1,
|
|
650
|
+
rationale:
|
|
651
|
+
"The classification step, reduced to the only axis this pack can observe. Lynch puts fast growers at twenty to twenty-five per cent a year and says that is where the large winners are found; below it a company is a stalwart or a slow grower and the same multiple should be paid differently. This places the company on the growth axis and does not attempt the cyclical, turnaround or asset-play distinctions, which need facts that are absent.",
|
|
652
|
+
condition: { op: "gte", left: { fact_id: "valuation.revenue_growth" }, right: { literal: 0.2 } },
|
|
653
|
+
},
|
|
654
|
+
],
|
|
655
|
+
bands: [
|
|
656
|
+
{ min_ratio: 0, common_stance: "opposed", native_state: "story_invalid" },
|
|
657
|
+
{ min_ratio: 0.5, common_stance: "cautious", native_state: "watch" },
|
|
658
|
+
{ min_ratio: 1, common_stance: "constructive", native_state: "category_opportunity" },
|
|
659
|
+
],
|
|
660
|
+
},
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
export default valueSeats;
|