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.
Files changed (481) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.codex-plugin/plugin.json +4 -4
  4. package/AGENTS.md +25 -11
  5. package/CHANGELOG.md +146 -0
  6. package/CLAUDE.md +24 -7
  7. package/README.ja.md +15 -10
  8. package/README.md +21 -13
  9. package/README.zh-CN.md +17 -12
  10. package/data/authored/core-seats.mjs +808 -0
  11. package/data/authored/growth-seats.mjs +581 -0
  12. package/data/authored/index.mjs +114 -0
  13. package/data/authored/quant-seats.mjs +564 -0
  14. package/data/authored/value-seats.mjs +663 -0
  15. package/data/build-profile.v1.json +2 -1
  16. package/data/council-evaluation-protocol.v1.json +7 -4
  17. package/data/master-selector-method-locales.v1.mjs +10 -0
  18. package/data/persona-v3-ai-assisted-solo-profile.v1.json +2 -2
  19. package/data/persona-v3-build-specs.v1.mjs +60 -3
  20. package/docs/INSTALL.md +6 -10
  21. package/docs/personas.md +2 -1
  22. package/docs/plans/v1.0-roadmap.md +487 -0
  23. package/docs/plans/v1.1-basket-native-seats.md +267 -0
  24. package/docs/releases/v0.9.5.md +96 -0
  25. package/docs/releases/v1.0.0.md +164 -0
  26. package/docs/report-contract.md +30 -6
  27. package/knowledge/ai-assisted-solo/experiments/runs/a.json +13 -13
  28. package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
  29. package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
  30. package/knowledge/ai-assisted-solo/experiments/runs/d13.json +126 -126
  31. package/knowledge/ai-assisted-solo/experiments/runs/d26.json +274 -254
  32. package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +129 -129
  33. package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +277 -257
  34. package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +278 -258
  35. package/knowledge/ai-assisted-solo/experiments/simulation-input.json +7278 -556
  36. package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +22 -22
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/expected_return_over_long_bond.ai-review.json +277 -0
  44. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/fundamental_expected_return.ai-review.json +277 -0
  45. 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
  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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/reported_earnings_cash_gap.ai-review.json +277 -0
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/review-manifest.json +288 -270
  92. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-adjudications/index.json +2 -2
  93. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-extractions/index.json +2 -2
  94. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-skeptic-reviews/index.json +2 -2
  95. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-source-prereviews/index.json +6 -2
  96. package/knowledge/solo-test/masters/master_ackman/decision_policy.json +122 -11
  97. package/knowledge/solo-test/masters/master_ackman/doctrine.jsonl +2 -2
  98. package/knowledge/solo-test/masters/master_ackman/manifest.json +13 -6
  99. package/knowledge/solo-test/masters/master_ackman/provisional-index.json +3 -3
  100. package/knowledge/solo-test/masters/master_ackman/sources.jsonl +1 -1
  101. package/knowledge/solo-test/masters/master_ackman/tools.json +56 -30
  102. package/knowledge/solo-test/masters/master_aschenbrenner/decision_policy.json +101 -10
  103. package/knowledge/solo-test/masters/master_aschenbrenner/doctrine.jsonl +2 -2
  104. package/knowledge/solo-test/masters/master_aschenbrenner/manifest.json +12 -4
  105. package/knowledge/solo-test/masters/master_aschenbrenner/provisional-index.json +3 -3
  106. package/knowledge/solo-test/masters/master_aschenbrenner/sources.jsonl +1 -1
  107. package/knowledge/solo-test/masters/master_aschenbrenner/tools.json +56 -30
  108. package/knowledge/solo-test/masters/master_asness/decision_policy.json +89 -10
  109. package/knowledge/solo-test/masters/master_asness/doctrine.jsonl +2 -2
  110. package/knowledge/solo-test/masters/master_asness/manifest.json +11 -4
  111. package/knowledge/solo-test/masters/master_asness/provisional-index.json +3 -3
  112. package/knowledge/solo-test/masters/master_asness/sources.jsonl +1 -1
  113. package/knowledge/solo-test/masters/master_asness/tools.json +56 -30
  114. package/knowledge/solo-test/masters/master_bogle/counterfactuals.jsonl +0 -0
  115. package/knowledge/solo-test/masters/master_bogle/decision_cases.jsonl +0 -0
  116. package/knowledge/solo-test/masters/master_bogle/decision_policy.json +170 -0
  117. package/knowledge/solo-test/masters/master_bogle/doctrine.jsonl +14 -0
  118. package/knowledge/solo-test/masters/master_bogle/evaluation/calibration_cases.jsonl +0 -0
  119. package/knowledge/solo-test/masters/master_bogle/evaluation/experiments.json +5 -0
  120. package/knowledge/solo-test/masters/master_bogle/evaluation/golden_cases.jsonl +0 -0
  121. package/knowledge/solo-test/masters/master_bogle/evaluation/pairwise_cases.jsonl +0 -0
  122. package/knowledge/solo-test/masters/master_bogle/failures.jsonl +0 -0
  123. package/knowledge/solo-test/masters/master_bogle/manifest.json +141 -0
  124. package/knowledge/solo-test/masters/master_bogle/memory_policy.json +5 -0
  125. package/knowledge/solo-test/masters/master_bogle/provisional-index.json +41 -0
  126. package/knowledge/solo-test/masters/master_bogle/research_policy.json +11 -0
  127. package/knowledge/solo-test/masters/master_bogle/sources.jsonl +1 -0
  128. package/knowledge/solo-test/masters/master_bogle/tools.json +120 -0
  129. package/knowledge/solo-test/masters/master_bogle/voice.en.md +7 -0
  130. package/knowledge/solo-test/masters/master_bogle/voice.zh.md +7 -0
  131. package/knowledge/solo-test/masters/master_buffett/decision_policy.json +102 -11
  132. package/knowledge/solo-test/masters/master_buffett/doctrine.jsonl +2 -2
  133. package/knowledge/solo-test/masters/master_buffett/manifest.json +10 -4
  134. package/knowledge/solo-test/masters/master_buffett/provisional-index.json +3 -3
  135. package/knowledge/solo-test/masters/master_buffett/sources.jsonl +1 -1
  136. package/knowledge/solo-test/masters/master_buffett/tools.json +55 -29
  137. package/knowledge/solo-test/masters/master_burry/decision_policy.json +102 -12
  138. package/knowledge/solo-test/masters/master_burry/doctrine.jsonl +2 -2
  139. package/knowledge/solo-test/masters/master_burry/manifest.json +12 -6
  140. package/knowledge/solo-test/masters/master_burry/provisional-index.json +3 -3
  141. package/knowledge/solo-test/masters/master_burry/sources.jsonl +1 -1
  142. package/knowledge/solo-test/masters/master_burry/tools.json +56 -30
  143. package/knowledge/solo-test/masters/master_cathie_wood/decision_policy.json +74 -12
  144. package/knowledge/solo-test/masters/master_cathie_wood/doctrine.jsonl +2 -2
  145. package/knowledge/solo-test/masters/master_cathie_wood/manifest.json +12 -6
  146. package/knowledge/solo-test/masters/master_cathie_wood/provisional-index.json +3 -3
  147. package/knowledge/solo-test/masters/master_cathie_wood/sources.jsonl +1 -1
  148. package/knowledge/solo-test/masters/master_cathie_wood/tools.json +56 -30
  149. package/knowledge/solo-test/masters/master_dalio/decision_policy.json +123 -16
  150. package/knowledge/solo-test/masters/master_dalio/doctrine.jsonl +2 -2
  151. package/knowledge/solo-test/masters/master_dalio/manifest.json +10 -4
  152. package/knowledge/solo-test/masters/master_dalio/provisional-index.json +3 -3
  153. package/knowledge/solo-test/masters/master_dalio/sources.jsonl +1 -1
  154. package/knowledge/solo-test/masters/master_dalio/tools.json +56 -30
  155. package/knowledge/solo-test/masters/master_damodaran/decision_policy.json +58 -10
  156. package/knowledge/solo-test/masters/master_damodaran/doctrine.jsonl +2 -2
  157. package/knowledge/solo-test/masters/master_damodaran/manifest.json +9 -4
  158. package/knowledge/solo-test/masters/master_damodaran/provisional-index.json +3 -3
  159. package/knowledge/solo-test/masters/master_damodaran/sources.jsonl +1 -1
  160. package/knowledge/solo-test/masters/master_damodaran/tools.json +54 -28
  161. package/knowledge/solo-test/masters/master_druckenmiller/decision_policy.json +89 -10
  162. package/knowledge/solo-test/masters/master_druckenmiller/doctrine.jsonl +2 -2
  163. package/knowledge/solo-test/masters/master_druckenmiller/manifest.json +11 -4
  164. package/knowledge/solo-test/masters/master_druckenmiller/provisional-index.json +3 -3
  165. package/knowledge/solo-test/masters/master_druckenmiller/sources.jsonl +1 -1
  166. package/knowledge/solo-test/masters/master_druckenmiller/tools.json +55 -29
  167. package/knowledge/solo-test/masters/master_duan_yongping/decision_policy.json +138 -13
  168. package/knowledge/solo-test/masters/master_duan_yongping/doctrine.jsonl +2 -2
  169. package/knowledge/solo-test/masters/master_duan_yongping/manifest.json +17 -7
  170. package/knowledge/solo-test/masters/master_duan_yongping/provisional-index.json +3 -3
  171. package/knowledge/solo-test/masters/master_duan_yongping/sources.jsonl +1 -1
  172. package/knowledge/solo-test/masters/master_duan_yongping/tools.json +82 -30
  173. package/knowledge/solo-test/masters/master_fisher/decision_policy.json +102 -11
  174. package/knowledge/solo-test/masters/master_fisher/doctrine.jsonl +2 -2
  175. package/knowledge/solo-test/masters/master_fisher/manifest.json +13 -6
  176. package/knowledge/solo-test/masters/master_fisher/provisional-index.json +3 -3
  177. package/knowledge/solo-test/masters/master_fisher/sources.jsonl +1 -1
  178. package/knowledge/solo-test/masters/master_fisher/tools.json +58 -32
  179. package/knowledge/solo-test/masters/master_forensic_short/decision_policy.json +93 -14
  180. package/knowledge/solo-test/masters/master_forensic_short/doctrine.jsonl +2 -2
  181. package/knowledge/solo-test/masters/master_forensic_short/manifest.json +6 -4
  182. package/knowledge/solo-test/masters/master_forensic_short/provisional-index.json +3 -3
  183. package/knowledge/solo-test/masters/master_forensic_short/sources.jsonl +1 -1
  184. package/knowledge/solo-test/masters/master_forensic_short/tools.json +53 -27
  185. package/knowledge/solo-test/masters/master_graham/decision_policy.json +103 -12
  186. package/knowledge/solo-test/masters/master_graham/doctrine.jsonl +2 -2
  187. package/knowledge/solo-test/masters/master_graham/manifest.json +12 -4
  188. package/knowledge/solo-test/masters/master_graham/provisional-index.json +3 -3
  189. package/knowledge/solo-test/masters/master_graham/sources.jsonl +1 -1
  190. package/knowledge/solo-test/masters/master_graham/tools.json +67 -28
  191. package/knowledge/solo-test/masters/master_jhunjhunwala/decision_policy.json +77 -12
  192. package/knowledge/solo-test/masters/master_jhunjhunwala/doctrine.jsonl +2 -2
  193. package/knowledge/solo-test/masters/master_jhunjhunwala/manifest.json +11 -6
  194. package/knowledge/solo-test/masters/master_jhunjhunwala/provisional-index.json +3 -3
  195. package/knowledge/solo-test/masters/master_jhunjhunwala/sources.jsonl +1 -1
  196. package/knowledge/solo-test/masters/master_jhunjhunwala/tools.json +54 -28
  197. package/knowledge/solo-test/masters/master_klarman/decision_policy.json +105 -14
  198. package/knowledge/solo-test/masters/master_klarman/doctrine.jsonl +2 -2
  199. package/knowledge/solo-test/masters/master_klarman/manifest.json +8 -2
  200. package/knowledge/solo-test/masters/master_klarman/provisional-index.json +3 -3
  201. package/knowledge/solo-test/masters/master_klarman/sources.jsonl +1 -1
  202. package/knowledge/solo-test/masters/master_klarman/tools.json +55 -29
  203. package/knowledge/solo-test/masters/master_li_lu/decision_policy.json +101 -10
  204. package/knowledge/solo-test/masters/master_li_lu/doctrine.jsonl +2 -2
  205. package/knowledge/solo-test/masters/master_li_lu/manifest.json +13 -6
  206. package/knowledge/solo-test/masters/master_li_lu/provisional-index.json +3 -3
  207. package/knowledge/solo-test/masters/master_li_lu/sources.jsonl +1 -1
  208. package/knowledge/solo-test/masters/master_li_lu/tools.json +58 -32
  209. package/knowledge/solo-test/masters/master_lynch/decision_policy.json +127 -16
  210. package/knowledge/solo-test/masters/master_lynch/doctrine.jsonl +2 -2
  211. package/knowledge/solo-test/masters/master_lynch/manifest.json +14 -6
  212. package/knowledge/solo-test/masters/master_lynch/provisional-index.json +3 -3
  213. package/knowledge/solo-test/masters/master_lynch/sources.jsonl +1 -1
  214. package/knowledge/solo-test/masters/master_lynch/tools.json +67 -28
  215. package/knowledge/solo-test/masters/master_marks/decision_policy.json +71 -9
  216. package/knowledge/solo-test/masters/master_marks/doctrine.jsonl +2 -2
  217. package/knowledge/solo-test/masters/master_marks/manifest.json +11 -6
  218. package/knowledge/solo-test/masters/master_marks/provisional-index.json +3 -3
  219. package/knowledge/solo-test/masters/master_marks/sources.jsonl +1 -1
  220. package/knowledge/solo-test/masters/master_marks/tools.json +54 -28
  221. package/knowledge/solo-test/masters/master_munger/decision_policy.json +141 -16
  222. package/knowledge/solo-test/masters/master_munger/doctrine.jsonl +2 -2
  223. package/knowledge/solo-test/masters/master_munger/manifest.json +10 -6
  224. package/knowledge/solo-test/masters/master_munger/provisional-index.json +3 -3
  225. package/knowledge/solo-test/masters/master_munger/sources.jsonl +1 -1
  226. package/knowledge/solo-test/masters/master_munger/tools.json +52 -26
  227. package/knowledge/solo-test/masters/master_natenberg/decision_policy.json +59 -11
  228. package/knowledge/solo-test/masters/master_natenberg/doctrine.jsonl +2 -2
  229. package/knowledge/solo-test/masters/master_natenberg/manifest.json +9 -6
  230. package/knowledge/solo-test/masters/master_natenberg/provisional-index.json +3 -3
  231. package/knowledge/solo-test/masters/master_natenberg/sources.jsonl +1 -1
  232. package/knowledge/solo-test/masters/master_natenberg/tools.json +50 -24
  233. package/knowledge/solo-test/masters/master_pabrai/decision_policy.json +125 -14
  234. package/knowledge/solo-test/masters/master_pabrai/doctrine.jsonl +2 -2
  235. package/knowledge/solo-test/masters/master_pabrai/manifest.json +8 -2
  236. package/knowledge/solo-test/masters/master_pabrai/provisional-index.json +3 -3
  237. package/knowledge/solo-test/masters/master_pabrai/sources.jsonl +1 -1
  238. package/knowledge/solo-test/masters/master_pabrai/tools.json +55 -29
  239. package/knowledge/solo-test/masters/master_simons/decision_policy.json +59 -11
  240. package/knowledge/solo-test/masters/master_simons/doctrine.jsonl +2 -2
  241. package/knowledge/solo-test/masters/master_simons/manifest.json +8 -4
  242. package/knowledge/solo-test/masters/master_simons/provisional-index.json +3 -3
  243. package/knowledge/solo-test/masters/master_simons/sources.jsonl +1 -1
  244. package/knowledge/solo-test/masters/master_simons/tools.json +43 -30
  245. package/knowledge/solo-test/masters/master_sinclair/decision_policy.json +59 -11
  246. package/knowledge/solo-test/masters/master_sinclair/doctrine.jsonl +2 -2
  247. package/knowledge/solo-test/masters/master_sinclair/manifest.json +8 -6
  248. package/knowledge/solo-test/masters/master_sinclair/provisional-index.json +3 -3
  249. package/knowledge/solo-test/masters/master_sinclair/sources.jsonl +1 -1
  250. package/knowledge/solo-test/masters/master_sinclair/tools.json +54 -28
  251. package/knowledge/solo-test/masters/master_soros/decision_policy.json +98 -10
  252. package/knowledge/solo-test/masters/master_soros/doctrine.jsonl +2 -2
  253. package/knowledge/solo-test/masters/master_soros/manifest.json +10 -7
  254. package/knowledge/solo-test/masters/master_soros/provisional-index.json +3 -3
  255. package/knowledge/solo-test/masters/master_soros/sources.jsonl +1 -1
  256. package/knowledge/solo-test/masters/master_soros/tools.json +54 -28
  257. package/knowledge/solo-test/masters/master_taleb/decision_policy.json +124 -13
  258. package/knowledge/solo-test/masters/master_taleb/doctrine.jsonl +2 -2
  259. package/knowledge/solo-test/masters/master_taleb/manifest.json +9 -5
  260. package/knowledge/solo-test/masters/master_taleb/provisional-index.json +3 -3
  261. package/knowledge/solo-test/masters/master_taleb/sources.jsonl +1 -1
  262. package/knowledge/solo-test/masters/master_taleb/tools.json +50 -24
  263. package/knowledge/solo-test/masters/master_thorp/decision_policy.json +61 -13
  264. package/knowledge/solo-test/masters/master_thorp/doctrine.jsonl +2 -2
  265. package/knowledge/solo-test/masters/master_thorp/manifest.json +11 -6
  266. package/knowledge/solo-test/masters/master_thorp/provisional-index.json +3 -3
  267. package/knowledge/solo-test/masters/master_thorp/sources.jsonl +1 -1
  268. package/knowledge/solo-test/masters/master_thorp/tools.json +56 -30
  269. package/knowledge/solo-test/persona-v3-solo-test-formulas/compilation-manifest.json +290 -264
  270. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/components/tools.json +58 -32
  271. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  272. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
  273. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/components/tools.json +58 -32
  274. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  275. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/price_implied_cash_yield.derived-proxy-evidence.json +76 -0
  276. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/components/tools.json +58 -32
  277. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/nominal_earnings_yield_gap.derived-proxy-evidence.json +76 -0
  278. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/real_earnings_yield_gap.derived-proxy-evidence.json +76 -0
  279. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/components/tools.json +120 -0
  280. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/expected_return_over_long_bond.derived-proxy-evidence.json +77 -0
  281. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/fundamental_expected_return.derived-proxy-evidence.json +76 -0
  282. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/components/tools.json +57 -31
  283. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  284. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
  285. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/components/tools.json +58 -32
  286. 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
  287. 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
  288. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/components/tools.json +58 -32
  289. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/current_cash_yield.derived-proxy-evidence.json +76 -0
  290. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  291. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/components/tools.json +58 -32
  292. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
  293. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/real_curve_slope.derived-proxy-evidence.json +76 -0
  294. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/components/tools.json +56 -30
  295. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/implied_equity_risk_premium.derived-proxy-evidence.json +76 -0
  296. 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
  297. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/components/tools.json +57 -31
  298. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_curve_impulse.derived-proxy-evidence.json +76 -0
  299. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
  300. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/components/tools.json +84 -32
  301. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/five_year_opportunity_cost.derived-proxy-evidence.json +102 -0
  302. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
  303. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/components/tools.json +60 -34
  304. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
  305. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/reinvestment_spread.derived-proxy-evidence.json +76 -0
  306. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/components/tools.json +55 -29
  307. 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
  308. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/cash_cover_of_leverage.derived-proxy-evidence.json +76 -0
  309. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/components/tools.json +69 -30
  310. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/defensive_hurdle_base.derived-proxy-evidence.json +89 -0
  311. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/half_normalised_earnings_yield.derived-proxy-evidence.json +76 -0
  312. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/components/tools.json +56 -30
  313. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/cash_quality_gap.derived-proxy-evidence.json +76 -0
  314. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/real_structural_growth.derived-proxy-evidence.json +76 -0
  315. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/components/tools.json +57 -31
  316. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/downside_asset_coverage.derived-proxy-evidence.json +76 -0
  317. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  318. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/components/tools.json +60 -34
  319. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/cash_backed_decade_return.derived-proxy-evidence.json +76 -0
  320. 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
  321. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/components/tools.json +69 -30
  322. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/growth_justified_capitalisation.derived-proxy-evidence.json +89 -0
  323. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  324. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/components/tools.json +56 -30
  325. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
  326. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/equity_over_corporate_debt.derived-proxy-evidence.json +76 -0
  327. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/components/tools.json +54 -28
  328. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
  329. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/reported_earnings_cash_gap.derived-proxy-evidence.json +76 -0
  330. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/components/tools.json +52 -26
  331. 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
  332. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
  333. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/components/tools.json +57 -31
  334. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor_coverage.derived-proxy-evidence.json +76 -0
  335. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
  336. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/components/tools.json +45 -32
  337. 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
  338. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/session_move_over_implied.derived-proxy-evidence.json +77 -0
  339. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/components/tools.json +56 -30
  340. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
  341. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/volatility_per_unit_of_width.derived-proxy-evidence.json +76 -0
  342. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/components/tools.json +56 -30
  343. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
  344. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/financing_burden.derived-proxy-evidence.json +76 -0
  345. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/components/tools.json +52 -26
  346. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
  347. 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
  348. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/components/tools.json +58 -32
  349. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_per_unit_of_volatility.derived-proxy-evidence.json +77 -0
  350. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/net_edge.derived-proxy-evidence.json +76 -0
  351. package/mcp/lib/breadth.mjs +126 -0
  352. package/mcp/lib/constants.mjs +15 -0
  353. package/mcp/lib/damodaran.mjs +119 -0
  354. package/mcp/lib/fred.mjs +246 -0
  355. package/mcp/lib/fund-holdings-parsers.mjs +297 -0
  356. package/mcp/lib/fund-observations.mjs +152 -0
  357. package/mcp/lib/fundamentals.mjs +806 -0
  358. package/mcp/lib/funds.mjs +785 -0
  359. package/mcp/lib/gates.mjs +71 -4
  360. package/mcp/lib/grounding.mjs +209 -36
  361. package/mcp/lib/index-aggregate.mjs +733 -0
  362. package/mcp/lib/insider-ownership.mjs +149 -0
  363. package/mcp/lib/instrument-facts.mjs +855 -0
  364. package/mcp/lib/instruments.mjs +216 -0
  365. package/mcp/lib/markdown.mjs +216 -43
  366. package/mcp/lib/master-catalog.mjs +4 -0
  367. package/mcp/lib/orchestrator.mjs +173 -29
  368. package/mcp/lib/packets.mjs +59 -6
  369. package/mcp/lib/personas/engine.mjs +23 -10
  370. package/mcp/lib/personas-v3/deterministic-executor.mjs +13 -2
  371. package/mcp/lib/personas-v3/ga-external-evidence.mjs +3 -2
  372. package/mcp/lib/personas-v3/ga-gate.mjs +2 -1
  373. package/mcp/lib/personas-v3/ga-package-evidence.mjs +5 -4
  374. package/mcp/lib/personas-v3/grounding-adapter.mjs +309 -2
  375. package/mcp/lib/personas-v3/production-root.mjs +5 -4
  376. package/mcp/lib/personas-v3/release-formula-evidence.mjs +14 -7
  377. package/mcp/lib/personas-v3/release-source-evidence.mjs +2 -1
  378. package/mcp/lib/personas-v3/releases.mjs +5 -4
  379. package/mcp/lib/personas-v3/runtime-release-integrity.mjs +6 -5
  380. package/mcp/lib/personas-v3/semantic-source-adjudication.mjs +2 -1
  381. package/mcp/lib/personas-v3/semantic-source-extraction.mjs +2 -1
  382. package/mcp/lib/personas-v3/semantic-source-skeptic-review.mjs +2 -1
  383. package/mcp/lib/personas-v3/source-review-operations.mjs +3 -2
  384. package/mcp/lib/personas-v3/staging.mjs +22 -3
  385. package/mcp/lib/prompts.mjs +87 -3
  386. package/mcp/lib/quotes.mjs +5 -0
  387. package/mcp/lib/rpc.mjs +27 -10
  388. package/mcp/lib/run-store.mjs +5 -3
  389. package/mcp/lib/sec.mjs +32 -0
  390. package/mcp/lib/tables.mjs +11 -0
  391. package/mcp/lib/voice.mjs +122 -0
  392. package/mcp/lib/xbrl-aggregates.mjs +153 -0
  393. package/mcp/lib/xbrl-series.mjs +341 -0
  394. package/mcp/lib/xlsx.mjs +155 -0
  395. package/package.json +5 -5
  396. package/personas/masters/masters-value/bogle.md +145 -0
  397. package/schemas/council-evaluation-protocol-v1.schema.json +2 -2
  398. package/schemas/persona-v3-ai-assisted-solo-profile-v1.schema.json +2 -2
  399. package/schemas/persona-v3-ai-machine-simulation-v1.schema.json +1 -1
  400. package/schemas/persona-v3-build-spec-v1.schema.json +3 -3
  401. package/schemas/persona-v3-release-formula-review-evidence-v1.schema.json +3 -3
  402. package/schemas/persona-v3-release-manifest-v1.schema.json +6 -6
  403. package/schemas/persona-v3-release-source-review-evidence-v1.schema.json +3 -3
  404. package/schemas/persona-v3-tool-graph-v1.schema.json +1 -1
  405. package/schemas/source-review-batch-v1.schema.json +9 -9
  406. package/scripts/assemble-persona-v3-release.mjs +3 -2
  407. package/scripts/build-persona-v3-solo-test-packs.mjs +6 -8
  408. package/scripts/check-persona-v3-ga.mjs +1 -1
  409. package/scripts/check-persona-v3-production-candidates.mjs +1 -1
  410. package/scripts/compile-persona-v3-formulas.mjs +19 -18
  411. package/scripts/doctor.mjs +11 -9
  412. package/scripts/export-persona-source-review-batch.mjs +1 -1
  413. package/scripts/generate-persona-v3-drafts.mjs +2 -2
  414. package/scripts/lib/build-profile.mjs +24 -0
  415. package/scripts/lib/council-evaluation-protocol.mjs +7 -6
  416. package/scripts/lib/host-capabilities.mjs +2 -1
  417. package/scripts/lib/packaged-host-parity.mjs +9 -3
  418. package/scripts/lib/persona-v3-ai-assisted-solo-status.mjs +6 -4
  419. package/scripts/lib/persona-v3-ai-formula-review.mjs +6 -5
  420. package/scripts/lib/persona-v3-ai-machine-simulations.mjs +32 -4
  421. package/scripts/lib/persona-v3-build-specs.mjs +3 -2
  422. package/scripts/lib/persona-v3-draft-packs.mjs +2 -2
  423. package/scripts/lib/persona-v3-formula-pipeline.mjs +11 -10
  424. package/scripts/lib/persona-v3-production-candidates.mjs +10 -9
  425. package/scripts/lib/persona-v3-solo-formula-pipeline.mjs +188 -16
  426. package/scripts/lib/persona-v3-solo-test-packs.mjs +112 -11
  427. package/scripts/package-smoke.mjs +2 -1
  428. package/scripts/report-persona-corpus-gaps.mjs +4 -1
  429. package/scripts/review-persona-v3-solo-formulas.mjs +12 -8
  430. package/scripts/scaffold-persona-v3-staging.mjs +1 -1
  431. package/skills/agent-skills-governance/SKILL.md +8 -2
  432. package/skills/alphacouncil-agent/SKILL.md +12 -4
  433. package/skills/public-equity-investing/SKILL.md +17 -0
  434. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/borrow_catalyst.ai-review.json +0 -277
  435. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/change_value_bridge.derived-proxy-evidence.json +0 -64
  436. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/power_map.derived-proxy-evidence.json +0 -64
  437. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/compute_power_bridge.derived-proxy-evidence.json +0 -64
  438. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/timeline_reverse_valuation.derived-proxy-evidence.json +0 -64
  439. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/crowding_cost_stress.derived-proxy-evidence.json +0 -64
  440. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/factor_decomposer.derived-proxy-evidence.json +0 -64
  441. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/incremental_returns.derived-proxy-evidence.json +0 -64
  442. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_rebuilder.derived-proxy-evidence.json +0 -64
  443. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/capital_structure_reader.derived-proxy-evidence.json +0 -64
  444. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/mispricing_carry.derived-proxy-evidence.json +0 -64
  445. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/capture_valuation_bridge.derived-proxy-evidence.json +0 -64
  446. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/cost_adoption_curve.derived-proxy-evidence.json +0 -64
  447. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/debt_driver_stress.derived-proxy-evidence.json +0 -64
  448. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/regime_classifier.derived-proxy-evidence.json +0 -64
  449. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/story_dcf.derived-proxy-evidence.json +0 -64
  450. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/inflection_payoff.derived-proxy-evidence.json +0 -64
  451. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_revision_map.derived-proxy-evidence.json +0 -64
  452. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/opportunity_cost.derived-proxy-evidence.json +0 -64
  453. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/user_value_evidence.derived-proxy-evidence.json +0 -64
  454. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/research_productivity.derived-proxy-evidence.json +0 -64
  455. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/scuttlebutt_graph.derived-proxy-evidence.json +0 -64
  456. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/borrow_catalyst.derived-proxy-evidence.json +0 -64
  457. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/asset_floor.derived-proxy-evidence.json +0 -64
  458. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/normalized_earnings.derived-proxy-evidence.json +0 -64
  459. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/penetration_liquidity.derived-proxy-evidence.json +0 -64
  460. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/promoter_governance.derived-proxy-evidence.json +0 -64
  461. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/cash_catalyst_compare.derived-proxy-evidence.json +0 -64
  462. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/recovery_waterfall.derived-proxy-evidence.json +0 -64
  463. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/promise_integrity_ledger.derived-proxy-evidence.json +0 -64
  464. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/ten_year_return_bridge.derived-proxy-evidence.json +0 -64
  465. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/category_classifier.derived-proxy-evidence.json +0 -64
  466. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/story_numbers_check.derived-proxy-evidence.json +0 -64
  467. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/cycle_temperature.derived-proxy-evidence.json +0 -64
  468. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/implied_expectations.derived-proxy-evidence.json +0 -64
  469. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/failure_path_graph.derived-proxy-evidence.json +0 -64
  470. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/incentive_map.derived-proxy-evidence.json +0 -64
  471. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/discrete_payoff.derived-proxy-evidence.json +0 -64
  472. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor.derived-proxy-evidence.json +0 -64
  473. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/leakage_audit.derived-proxy-evidence.json +0 -64
  474. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/oos_cost_test.derived-proxy-evidence.json +0 -64
  475. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/net_edge_sizer.derived-proxy-evidence.json +0 -64
  476. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/realized_vol_forecast.derived-proxy-evidence.json +0 -64
  477. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reflexivity_graph.derived-proxy-evidence.json +0 -64
  478. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reversal_monitor.derived-proxy-evidence.json +0 -64
  479. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/payoff_ruin.derived-proxy-evidence.json +0 -64
  480. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_recalculator.derived-proxy-evidence.json +0 -64
  481. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/fractional_kelly.derived-proxy-evidence.json +0 -64
@@ -0,0 +1,267 @@
1
+ # v1.1 — Every seat can price a basket
2
+
3
+ ## The complaint, and what is actually wrong
4
+
5
+ A SOX run ended with 25 of 27 seats `out_of_scope`. That reads as "the masters don't answer",
6
+ and the reflex is to blame the seats. The seats are not the problem. Three separate things are.
7
+
8
+ ### 1. SOX has no data path at all
9
+
10
+ `INDEX_PROXIES` covers `^GSPC`, `^NDX` and `^DJI`. `FUND_REGISTRY` covers eleven tickers.
11
+ Neither contains `^SOX`, `SOXX`, `SMH` or `SOXQ`. With no registered holdings source there is no
12
+ look-through, no top-ten weight, no breadth, no aggregate valuation — so even `master_bogle`,
13
+ the seat built specifically to price a basket, had nothing to read and correctly abstained.
14
+
15
+ The run reported this honestly ("缺少同日SOX聚合估值", "SOXQ 只是6月30日滞后代理"), which is
16
+ why it is diagnosable at all. But an honest report of a gap is not a substitute for the data.
17
+
18
+ ### 2. A failed fetch silently halves the answer
19
+
20
+ Two QQQ runs minutes apart, same code:
21
+
22
+ | run | basket facts produced |
23
+ |---|---|
24
+ | A | 13 — top-ten weight, HHI, breadth ×2, AUM, leverage, revenue growth, aggregate P/E ×3, dividend yield, ERP, percentile |
25
+ | B | 6 — the aggregate valuation block only |
26
+
27
+ One failed holdings fetch removes everything downstream of it. Nothing in the report says the
28
+ run was degraded, so the same symbol answers differently on different days and the difference
29
+ looks like the seats changing their minds. **A degraded run must be labelled as degraded.**
30
+
31
+ ### 3. Company facts do not rise to the basket level
32
+
33
+ This is the real one, and it is a design gap rather than a defect. On QQQ — where the data IS
34
+ complete — 18 of 27 seats are still blocked, and the blocking facts fall into three classes:
35
+
36
+ | class | facts | seats blocked |
37
+ |---|---|---|
38
+ | **Absolute currency** | `capital_allocation.share_count`, `financial.free_cash_flow_5y`, `financial.owner_earnings`, `financial.net_current_asset_value`, `valuation.downside_asset_value`, `valuation.downside_floor` | 10, 4, 2, 1, 1, 1 |
39
+ | **Pure ratio, legal but unwired** | `accounting.cash_conversion`, `financial.gross_margin_5y`, `financial.net_margin_5y`, `financial.interest_coverage`, `financial.return_on_equity_10y`, `financial.incremental_return_on_capital` | 4, 2, 2, 2, 1, 1 |
40
+ | **Index-level market data** | `options.implied_volatility`, `options.skew_25d`, `execution.bid_ask` | 5 |
41
+
42
+ `capital_allocation.share_count` alone blocks ten seats — and no seat wants the share count.
43
+ They want it as a **denominator**: owner earnings over market capitalisation, free cash flow
44
+ over market capitalisation, net current assets over price. Summing share counts across a basket
45
+ is meaningless, which is exactly why `LOOK_THROUGH_BLOCKED` refuses it. But converting each
46
+ constituent's absolute figure to a **yield first**, then weighting the yields, is arithmetically
47
+ sound and is what those methods were reaching for anyway. The existing code comment says so:
48
+
49
+ > "…so they become yields first. That is real and worth doing; it is simply not this pass."
50
+
51
+ This is that pass.
52
+
53
+ ## What this is not
54
+
55
+ It is not "make the masters say something about indices". A seat that produces a number because
56
+ the pipeline handed it one, without the number meaning what the method means, is worse than an
57
+ abstention — it is an abstention wearing a verdict. Two rules govern every change below:
58
+
59
+ 1. **A basket reading must be the same question the method asks of a company.** Buffett asks
60
+ what the business earns for its owners against what the market charges. Asked of a basket
61
+ that is a weighted owner-earnings yield. Asked of a basket it is *not* "the ETF's owner
62
+ earnings", and no amount of wanting an answer makes it one.
63
+ 2. **A threshold authored for a company is not automatically valid for a basket.** Graham's
64
+ net-current-asset test on any broad index will fail every time; a seat that always says the
65
+ same thing regardless of input has no information in it. Where a company threshold is
66
+ degenerate on a basket, the seat gets an explicitly authored basket band — or it keeps
67
+ declining, and says why.
68
+
69
+ ## Plan
70
+
71
+ ### Phase A — coverage and honesty (immediate, fixes the reported run)
72
+
73
+ **A1. Register the missing baskets.** `^SOX`, `^RUT`, `^IXIC` in `INDEX_PROXIES`; `SOXX`, `SMH`,
74
+ `SOXQ`, `IWM`, `VTI`, `XLK`, `XLF`, `XLE` and the rest of the sector SPDRs in `FUND_REGISTRY`.
75
+ Each needs a real issuer product id or slug, verified against a live fetch, not guessed.
76
+
77
+ **A2. Fail loudly on an unregistered basket.** Today an unknown index quietly produces nothing.
78
+ It should name itself as unregistered and say which issuer file would fix it, so the next SOX is
79
+ a one-line registry addition rather than a diagnosis.
80
+
81
+ **A3. Label a degraded run.** The instrument block records which sources answered and which did
82
+ not, and the report states it. A run that lost its holdings feed must not present as a run that
83
+ had one. This is the difference between "the seats abstained" and "the data did not arrive".
84
+
85
+ ### Phase B — wire the ratio aggregates that are already legal (unlocks ~8 seats)
86
+
87
+ `LOOK_THROUGH_FACT_RULES` maps two facts today. Every pure ratio in the table above aggregates
88
+ as a weight-weighted mean under the same coverage floor already enforced (refuse below 50%).
89
+ Add: cash conversion, gross margin, net margin, interest coverage, ten-year ROE, incremental
90
+ return on capital.
91
+
92
+ Unblocks munger, fisher, li_lu, forensic_short, taleb, soros, jhunjhunwala, bogle.
93
+
94
+ **Done and measured.** Two things had to be fixed beyond the mapping itself:
95
+
96
+ - The margins, cash conversion, ten-year ROE and interest coverage come from the **mechanical
97
+ screen**, not from the derived fundamentals — and the look-through only ran the latter, so
98
+ those aggregates could never have had inputs. Both readers now run on one Company Facts
99
+ document per constituent, at no extra network cost.
100
+ - An aggregate arrived as a bare `decimal` with the outer envelope of its constituents'
101
+ reporting periods. Interest coverage and cash conversion are `multiple`s, and the union of
102
+ forty five-year spans is five years plus a year of calendar edges — so facts were present and
103
+ rejected by the contract, which reads exactly like being absent. An aggregate now carries the
104
+ same unit as its single-company counterpart, over the **median** constituent span.
105
+
106
+ Result on QQQ: 13 basket facts → 18; blocked seats 18 → 11. The residue is almost entirely the
107
+ absolute-currency class, which is what Phase C exists for — the control group the sequencing
108
+ note asked for.
109
+
110
+ ### Phase C — per-constituent yields (unlocks ~10 seats, the big one)
111
+
112
+ New aggregation kind in `funds.mjs`: `yield_of(absolute_fact, market_capitalisation)`. For each
113
+ resolved constituent, divide the absolute figure by that constituent's own market cap, then
114
+ weight the resulting yields. Produces:
115
+
116
+ | new basket fact | from | unblocks |
117
+ |---|---|---|
118
+ | `valuation.owner_earnings_yield` | owner earnings ÷ mcap | buffett, ackman |
119
+ | `valuation.free_cash_flow_yield` | 5y FCF ÷ mcap | graham, aschenbrenner, cathie_wood, lynch |
120
+ | `valuation.ncav_to_price` | NCAV ÷ mcap | burry |
121
+ | `valuation.downside_floor_ratio` | downside floor ÷ mcap | klarman, pabrai |
122
+
123
+ Each seat's tool then reads the basket yield where it read a company yield. The arithmetic is
124
+ identical; only the input changes. Market capitalisation per constituent is already available —
125
+ the fundamentals path produces share count, and the quote path produces price.
126
+
127
+ **Done and measured — and implemented differently from the sketch above, for the better.**
128
+ Emitting new yield fact ids would have required re-authoring ten seats to read them. It is
129
+ also not what a fund owns. A fund holding 1% of a company has a claim on 1% of its owner
130
+ earnings, and summing that across the basket is a dollar figure ABOUT THE FUND:
131
+
132
+ fund's claim = AUM x SUM over i of ( weight_i / market_cap_i ) x figure_i
133
+
134
+ This is ordinary look-through accounting, not the category error `LOOK_THROUGH_BLOCKED`
135
+ refuses — that one sums constituents as though the fund owned each outright. Because a fund's
136
+ market capitalisation IS its AUM, a seat dividing this claim by market capitalisation gets the
137
+ weighted look-through yield **with no change to its method at all**.
138
+
139
+ Per-constituent market capitalisation costs nothing extra: the share count is already fetched
140
+ by the fundamentals pass and the price by the breadth pass, which fetched a year of closes for
141
+ every constituent and threw the last one away.
142
+
143
+ Two contract corrections fell out of it:
144
+
145
+ - A share count is a point-in-time quantity, not a span. It was declared over a fiscal year
146
+ because that is how the filing reports it, which meant a fund's count — a genuine instant —
147
+ could satisfy no contract. It exists to denominate a market capitalisation, where how many
148
+ shares there are matters and which window they were averaged over does not; the averaging
149
+ basis stays stated in `assumptions`.
150
+ - A claim inherits the reporting window of the figure it is a claim on.
151
+
152
+ **The honest limit, recorded on every such fact:** a weighted mean of yields is not the yield of
153
+ the aggregate, and the difference grows with dispersion. It is the right number for "what does
154
+ the average dollar in this basket earn", which is the question these methods ask, and it is the
155
+ wrong number for "what would this basket earn if it were one company". The fact carries which
156
+ one it is.
157
+
158
+ ### Phase D — the basket's own option surface (unlocks ~4 seats)
159
+
160
+ Volatility seats read `options.implied_volatility`, `options.skew_25d` and `execution.bid_ask`,
161
+ none of which the basket path supplies today. Index options (SPX, NDX, SOX) and liquid ETF
162
+ options both exist on the same chain endpoint the single-stock path already uses; the work is
163
+ routing a basket symbol to its own chain rather than skipping options for non-companies.
164
+
165
+ Unblocks simons, thorp, natenberg, sinclair; strengthens taleb.
166
+
167
+ ### Phase F — fund flow, which is currently a gap for every issuer
168
+
169
+ Flow is the question people actually ask of an ETF — is money going in or out — and today the
170
+ answer is "gap" for all four issuers, for two different reasons.
171
+
172
+ `fundFlow` computes the only honest version: `(shares_now − shares_prior) × NAV`. Shares
173
+ created and redeemed are what a flow IS; an AUM change is a flow plus a market move, and
174
+ reporting the second as the first is the standard way this number gets faked.
175
+
176
+ What is available, verified by live fetch:
177
+
178
+ | issuer | shares outstanding | flow today |
179
+ |---|---|---|
180
+ | iShares | **yes** — in the holdings CSV header (`Shares Outstanding, "82,650,000.00"`) with its own date | no: only today's file is retrievable |
181
+ | SSGA | sometimes — absent from some funds' holdings files | no |
182
+ | Invesco | no — `/nav` and `/profile` both answer HTTP 501 | no |
183
+ | Vanguard | no keyless endpoint | no |
184
+
185
+ So even where the share count is published, only **one** dated observation is reachable, and a
186
+ flow needs two. iShares serves no dated holdings file (`?asOfDate=` is a 404) and its product
187
+ page carries field metadata, not a time series. There is no keyless history to fetch.
188
+
189
+ **F1. An observation ledger.** Every run already retrieves the holdings file. Record what it
190
+ saw — symbol, as-of date, shares outstanding, NAV, AUM — under the run data directory, append
191
+ only, one row per symbol per as-of date. From the second observation of a symbol onward the
192
+ flow is computable exactly, by the arithmetic already implemented.
193
+
194
+ This bootstraps rather than backfills, and that is the honest trade: a user who runs SOXX
195
+ weekly has weekly flows after the second week. It is not a substitute for a vendor flow series
196
+ and the fact says so.
197
+
198
+ **F2. Flow as a typed fact.** `fund.net_flow` (monetary, currency + scale) and
199
+ `fund.net_flow_ratio` (flow ÷ AUM, so a small fund's move is comparable to a large one), each
200
+ carrying the two dated observations it was computed from and the gap in days between them. A
201
+ flow computed across a 40-day gap is not a daily flow and must not be read as one.
202
+
203
+ **F3. Seats that should read it.** Flow is a crowding and reflexivity signal, not a valuation
204
+ one. `master_soros` reads it directly — participant behaviour reinforcing price is his
205
+ mechanism, and creations against a rising price is that loop in its most literal form.
206
+ `master_druckenmiller` reads it as price confirmation. `master_marks` reads persistent inflow
207
+ into an already-expensive basket as where the cycle stands. No valuation seat should read it:
208
+ a flow says nothing about what a business earns.
209
+
210
+ **Done and measured.** The accuracy question turned out to be the whole problem, and the
211
+ answer is which share count is allowed to price a flow.
212
+
213
+ A flow is a DIFFERENCE of two counts, so it cancels the number and keeps the error. Three
214
+ routes to a count exist and only two may be differenced:
215
+
216
+ | route | basis | flow-eligible |
217
+ |---|---|---|
218
+ | the holdings file's own `Shares Outstanding` (iShares) | filed | **yes** |
219
+ | issuer assets ÷ issuer NAV, same source, same date | an identity, not an estimate | **yes** |
220
+ | disclosed positions ÷ market price | reconstruction | **no** |
221
+
222
+ The third is fine for a market capitalisation — the product is the size we already had — and
223
+ unfit for a flow: a 95%-priced position sum and a premium to NAV each carry error that survives
224
+ the subtraction. Half a percent at each end of a $300bn fund manufactures $1.5bn of flow that
225
+ never happened, and it appears as conviction exactly when the market moved.
226
+
227
+ The second route is what makes **sector ETFs** work, which is the case people ask about most.
228
+ The Select Sector SPDRs publish no share count in their holdings file, but do publish assets
229
+ and NAV — and assets over NAV is shares outstanding by definition. Verified live: XLK 654.8M
230
+ shares, SOXX 82.7M from its filed count.
231
+
232
+ **F4. Refuse rather than estimate.** Where only one observation exists, or the issuer publishes
233
+ no share count at all, the fact is absent with a named reason. The failure mode this guards
234
+ against is deriving flow from an AUM change — which would silently report a market rally as an
235
+ inflow, and would be wrong in exactly the direction that makes a momentum story look confirmed.
236
+
237
+ ### Phase E — basket bands where the company threshold is degenerate
238
+
239
+ For each seat unblocked above, decide explicitly whether the authored threshold means the same
240
+ thing on a basket. Graham's NCAV line and Burry's net-net test are the obvious candidates for a
241
+ basket-specific band. This is authoring work, per seat, and it is what stops Phase C from
242
+ producing eighteen confident numbers that all mean "the pipeline handed me a float".
243
+
244
+ ## Expected result
245
+
246
+ | | before | after A+B | after C |
247
+ |---|---|---|---|
248
+ | QQQ | 11/27 | 12/27 | **16/27** |
249
+ | SOXX | 0/27 (unregistered) | 9/27 | **17/27** |
250
+ | SOX | 0/27 (unregistered) | 1/27 | 1/27 |
251
+ | AAPL (company path, control) | 18/27 | 18/27 | **18/27** |
252
+ | union over seven symbols | 26/27 | — | **27/27, none mute** |
253
+
254
+ QQQ trails SOXX because Invesco publishes no share count, so its market capitalisation is
255
+ reconstructed rather than filed, and because more of its constituents fall below the
256
+ look-through coverage floor. SOX itself stays low: it is a cash index with no aggregate P/E
257
+ published by any implemented source, so the valuation seats have nothing to read even now.
258
+
259
+ Measured the same way as v1.0.0: live grounding, no fixtures, contract failures counted
260
+ separately from abstentions.
261
+
262
+ ## Sequencing note
263
+
264
+ A and B are mechanical and independently verifiable. C is where the judgment is, and it should
265
+ not start until B is measured — if wiring the legal ratios moves QQQ from 11 to 19, that is the
266
+ control group that tells us the yield conversion is doing what it claims rather than the
267
+ coverage improving underneath it.
@@ -0,0 +1,96 @@
1
+ # AlphaCouncil Agent v0.9.5 — ETF/Index Routing and Complete Method Handoff (Non-GA)
2
+
3
+ `v0.9.5` is a non-GA GitHub preview that fixes the QQQ acceptance defects found after the
4
+ `v0.9.4` locale release. It does not publish npm, change npm dist-tags, promote a PersonaPack
5
+ maturity level, or claim a new investment conclusion for QQQ.
6
+
7
+ This is a runtime/reporting release, not a method-pack revision. The build profile therefore
8
+ pins `persona_pack_version=0.9.4`: all 26 reviewed solo-test pack hashes and their existing
9
+ machine-simulation evidence remain unchanged while the package/plugin version moves to
10
+ `0.9.5`. Runtime version bumps must not manufacture pack-hash drift and then rerun research
11
+ merely to recover a green check.
12
+
13
+ ## Why 0.9.5 exists
14
+
15
+ The failed QQQ experience exposed four separate defects:
16
+
17
+ 1. Yahoo's chart response identified QQQ as an ETF, but the quote adapter discarded
18
+ `instrumentType`. Grounding then used the operating-company path and could report the
19
+ predictable SEC Company Facts 404 as a research failure.
20
+ 2. Deterministic v3 methods correctly returned `out_of_scope` when their typed facts were
21
+ absent, but the visible handoff did not turn every abstention into a readable per-seat
22
+ statement.
23
+ 3. The PM completion path wrote `user_response.md`, then returned only a compact ACK to the
24
+ host. A host could therefore answer with a short recap and hide the selected-seat output
25
+ that existed in artifacts.
26
+ 4. `report_quality` required a Master Bench section but did not prove that every selected
27
+ stable method ID and readable final statement appeared in that section.
28
+
29
+ These were runtime and delivery defects, not evidence that twenty-five methods were bearish.
30
+
31
+ ## Instrument routing
32
+
33
+ - Quote parsing now preserves Yahoo `instrumentType`, names and exchange timezone.
34
+ - A deterministic classifier distinguishes operating companies, ETFs, mutual funds, cash
35
+ indices, futures, FX and crypto. Yahoo metadata is primary; symbol conventions, quote names
36
+ and SEC ticker/registrant names provide bounded fallbacks.
37
+ - The SEC ticker title and filer profile are resolved before Company Facts is scheduled.
38
+ ETF/fund/index routes explicitly mark operating-company Company Facts and structured issuer
39
+ financials as not applicable instead of recording a false failure.
40
+ - ETF/fund runs use `fund_lookthrough`; cash indices use `index_aggregate`; operating companies
41
+ retain `operating_company`. The type, model and classification source are persisted in
42
+ `status.json`, grounding output and the research dashboard.
43
+ - All eight evidence roles receive a role-specific fund/index assignment. The contract covers
44
+ dated holdings or constituents and weights, concentration, methodology, fees or index rules,
45
+ liquidity, premium/discount or tracking difference, flows, rebalances, lending/derivatives,
46
+ look-through earnings and same-date aggregate valuation with explicit coverage weight.
47
+ - Fund/index prompts forbid fund revenue, company EPS, management guidance and fund-insider
48
+ Form 4 fabrication. A few constituent financial statements may never be added into a
49
+ portfolio financial statement.
50
+
51
+ The classifier does not invent holdings, flows, aggregate EPS or valuation. Those remain
52
+ dated evidence requirements, and missing fields remain report gaps.
53
+
54
+ ## Complete selected-seat handoff
55
+
56
+ - Every deterministically completed or declined physical v3 seat now has a readable fallback
57
+ statement in the run language. An ETF/index abstention explains that the method needs dated
58
+ holdings look-through or aggregate-index evidence and that `out_of_scope` is not a bearish
59
+ vote.
60
+ - `plan_visible_run` returns one explanation worker for every non-blocked selected physical
61
+ v3 seat, including a deterministically declined seat. The worker receives the finished
62
+ evidence, acknowledges the frozen stance, and may improve the explanation but cannot vote
63
+ again. PM completion checks `master_status`, not merely the presence of a fallback record.
64
+ - The full chat handoff ends with the exact selected-seat count and one statement for every
65
+ selected stable ID. A full `all` selection therefore ends with 26 lines; quick mode reports
66
+ its actual 1–4 seats rather than claiming 26.
67
+ - Labels state that these are project-derived provisional method-seat outputs, not quotations,
68
+ endorsements or current statements from the named people.
69
+ - Visible PM completion returns `handoff_contract=inline_user_response_v1` and the saved
70
+ `user_response_markdown`. Host instructions require that body to be delivered instead of
71
+ replacing it with a shorter recap. Idempotent PM replays return the same handoff.
72
+ - The final report owns an idempotent fund/index structure section and the recorded Master
73
+ Bench. PM narrative is retained as non-authoritative commentary where it conflicts with a
74
+ system-owned section.
75
+
76
+ ## Quality gates and regression coverage
77
+
78
+ - `report_quality.json` records selected/readable/rendered method-statement counts and stable
79
+ IDs. Missing opinions, statements shorter than the readability floor, or an ID absent from
80
+ the published Master Bench force `needs_revision`.
81
+ - Fund/index reports require the structure/look-through section; ordinary-equity reports do
82
+ not.
83
+ - Offline unit and integration coverage includes QQQ/SPY ETF classification, SEC-name fallback,
84
+ cash-index routing, all eight ETF role overrides, fund/index report assembly, a 26-seat final
85
+ handoff, inline visible-PM handoff and replay, and unchanged equity behavior.
86
+
87
+ ## Assurance boundary
88
+
89
+ - Build channel: `solo_test`.
90
+ - Runtime/package version: `0.9.5`; unchanged PersonaPack snapshot: `0.9.4`.
91
+ - Physical provisional packs: 26.
92
+ - Persona tools: 52 `provisional_derived_proxy` tools.
93
+ - Operational seats: 0.
94
+ - Validated `method_model` seats: 0.
95
+ - `production_eligible=false`; `method_model_eligible=false`.
96
+ - Formal production GA remains fail-closed.
@@ -0,0 +1,164 @@
1
+ # AlphaCouncil Agent v1.0.0 — Seats That Can Answer
2
+
3
+ `1.0.0` is the release where the method seats stop abstaining on everything.
4
+
5
+ > **Status: released.** All twenty-seven seats are authored, the trees regenerate from committed
6
+ > sources alone, and `npm test` is green at 961 tests. Measured against live grounding across
7
+ > eight symbols, every one of the twenty-seven seats reaches a stance somewhere, with no
8
+ > contract failures anywhere.
9
+
10
+ ## What was actually wrong
11
+
12
+ A council of twenty-six method seats produced one usable opinion, and only on a narrow class
13
+ of symbol. The QQQ run that prompted this release ended with twenty-five `out_of_scope`
14
+ statements and one cautious note about implied volatility. That looked like an ETF problem.
15
+ It was not.
16
+
17
+ Three layers were empty, and each one hid the next:
18
+
19
+ 1. **Facts.** `grounding-adapter.mjs` is the only thing in the repo that produces typed facts,
20
+ and it could produce thirteen fact ids. Twenty-five seats required facts that nothing
21
+ generated. The same run against an operating company abstained identically — QQQ was not a
22
+ special case.
23
+ 2. **Method.** All twenty-six decision policies were the same generated template: empty
24
+ eligibility, empty vetoes, and two rules scoring an `identity` transform against zero.
25
+ Supplying the missing facts would have bought "owner earnings are positive, therefore
26
+ cautious" — true, and empty.
27
+ 3. **Expression.** An abstention rendered as `no_required_fact_types_present`, which reads as
28
+ a broken system rather than as a method declining.
29
+
30
+ ## Facts
31
+
32
+ Four feeds, all keyless, each one refusing rather than approximating when a source is absent.
33
+
34
+ **Dated official series.** The macro block already fetched rates, credit and breadth but had
35
+ no publication date of its own, so the adapter skipped the family entirely. A point snapshot
36
+ could not have fixed the seats that needed it: an impulse and a regime are directions, and a
37
+ direction computed from one day of quotes is fabricated precision. FRED's CSV endpoint is
38
+ keyless where its API is not, and every observation publishes its own date — which gives net
39
+ liquidity, its change over a stated window, and the growth/inflation quadrant, each returning
40
+ null rather than a guess when an axis lacks the history to have a direction.
41
+
42
+ **Company fundamentals.** Owner earnings, NCAV, downside asset value and floor, revenue
43
+ growth, incremental return on capital, leverage, share count — derived from XBRL with the
44
+ filing date as `public_at`, never the clock. Owner earnings is labelled `estimated` rather than
45
+ `rederived`: the maintenance/growth capex split is an assumption, and the proxy travels with
46
+ the fact rather than living in a comment.
47
+
48
+ **Fund holdings.** Four issuers' published daily files. Each has a trap that produces wrong
49
+ data rather than an error, so each is checked: the retired iShares path returns HTTP 200 with
50
+ an HTML body for every user agent, so the first line is validated instead of the status; the
51
+ Invesco endpoint truncates to ten holdings under one parameter while still reporting the full
52
+ count, so the count is the checked invariant; a guessed CUSIP resolves to a different fund
53
+ entirely, so only verified identifiers are registered.
54
+
55
+ **Index aggregates.** Valuation, breadth, put/call and volatility. Index P/E is quoted on
56
+ incompatible bases — three sources disagreed by 4.6 turns on the same day — so every valuation
57
+ fact names its basis and sources are never blended for one metric. Constituent lists are
58
+ licensed assets, so constituents come from the tracking fund's published holdings, labelled a
59
+ proxy in the provenance rather than presented as the index.
60
+
61
+ **Look-through.** A basket has no income statement, which is why an operating-company method
62
+ had nothing to read. Buffett defined look-through earnings in the 1990 shareholder letter for
63
+ exactly this situation, so aggregating constituent ratios by weight is the method's own
64
+ answer rather than a workaround. It stays honest by refusing: absolute-currency facts have no
65
+ aggregation path at all — "the fund's owner earnings" is unrepresentable, not discouraged —
66
+ and every aggregate carries the weight it was computed over, because a portfolio ratio
67
+ measured across 8% of a basket is a different claim from one measured across 95%.
68
+
69
+ ## Method
70
+
71
+ A seat may now carry its real formula and its real decision policy instead of the generated
72
+ identity proxy. Authored inputs may only reference facts the build spec already declares, so
73
+ the authoring layer cannot quietly widen a seat's contract.
74
+
75
+ One distinction matters more than it looks: `min_coverage` is 1, so a single uncomputable
76
+ *scoring* rule collapses an entire seat to `out_of_scope`. That is the mechanism that produced
77
+ twenty-five abstentions. A "can this method speak at all" test belongs in eligibility, which
78
+ has its own exit and its own explanation, and authored policies are written that way.
79
+
80
+ **Assurance is unchanged and still fail-closed.** These formulas are AI-authored and unreviewed.
81
+ An authored tool records `ai_authored_candidate_formula_not_human_reviewed` in place of the
82
+ `mechanical_identity_proxy` claim, which would otherwise be false. Admission stays
83
+ `operator_lens`, `production_eligible` stays false, and no human has reviewed either kind.
84
+
85
+ ## Expression
86
+
87
+ Seats answer five questions in the first person — what I see, how my standard reads it, would
88
+ I act, what changes my mind, where I disagree — and carry a `position_intent`. Intent narrows
89
+ the frozen stance and never reopens it: each stance admits only intents meaning the same thing,
90
+ enforced server-side exactly as a changed stance is, so a worker cannot turn `opposed` into
91
+ `would_buy` by choosing a label.
92
+
93
+ First person is what makes the output readable and is also exactly what could be mistaken for a
94
+ quotation. The prompt requires the method's voice — "this standard asks for X" — never a claim
95
+ about what a living person currently thinks, and the section says so.
96
+
97
+ The bench separates seats that reached a decision from seats that could not. The old layout
98
+ gave both equal weight, so a run where twenty-five seats abstained printed twenty-five
99
+ near-identical rows and buried the one seat with a view. Abstentions now collapse into a single
100
+ paragraph that still names every stable ID — both what the publication gate checks and the
101
+ honest requirement that no seat quietly vanishes.
102
+
103
+ ## Fixed
104
+
105
+ - The classifier failed open. With no exchange metadata — the fallback quote path, which
106
+ returns a null instrument type — common fund tickers matched a bare ticker shape and were
107
+ asserted to be operating companies, reproducing the exact defect 0.9.5 set out to fix. A
108
+ filed SIC was documented as evidence of an operating company, but the codes in question are
109
+ what fund registrants file. A fund named after an index matched the bare `index` token and
110
+ was routed as a cash index, which silently disabled its option chain.
111
+ - Reports in Japanese and Korean could never publish. A relabelled commentary section legally
112
+ contains a section alias, heading assignment keeps the richest body, and the per-seat gate
113
+ then failed against PM prose — permanently, since more prose only made the commentary win
114
+ harder. The gate now locates the system section by its content anchor.
115
+ - Worker statements were interpolated raw into a system-owned section, so a statement
116
+ containing a heading captured the section the quality gate validates.
117
+ - The status snapshot and the blocking gates disagreed about a seat with no status entry, so a
118
+ recovered run reported complete while being hard-rejected.
119
+ - Declined seats no longer schedule an explanation worker. The stance is frozen and the
120
+ deterministic record is already readable, so the worker could change nothing while costing
121
+ one sequential model turn per seat on a host with no fan-out.
122
+ - The fundamentals path re-registered filing records under the consuming metric's period,
123
+ which silently dropped every fact sharing a record with the mechanical screen.
124
+ - The look-through aggregator reads one number per ticker and was handed a nested object, so
125
+ every aggregate reported "no constituent supplied this metric" while the constituents sat
126
+ resolved in memory.
127
+ - `not_applicable` strings and the fund/index research contract were English-only inside
128
+ localized reports.
129
+
130
+ - The typed-fact period contract was wrong in three ways at once, and together they were why a
131
+ live run stayed near-silent even after the facts and the methods were in place. The adapter
132
+ stamped an observation date into `period_end` with no start, a shape that satisfies no
133
+ contract basis at all — rejected as an instant because the interval is non-null, and as a
134
+ duration because a window needs both ends — so those facts were unusable by any tool.
135
+ Multi-year aggregates were declared as instants, which the executor rejects against a fact
136
+ that carries a reporting interval. And the one-year window demanded 365 days, while a fiscal
137
+ year measured between two year-end dates is routinely 363. Facts that cover a span now
138
+ declare a duration; coverage set by filing availability rather than by the method declares
139
+ `ANY`; and look-through aggregates carry the interval their constituents reported. Measured
140
+ across eight symbols before and after: from four seats reaching a stance to twenty-six, with
141
+ no contract failures left.
142
+ - Every seat-count and tool-count invariant is derived from the canonical roster instead of
143
+ restated as a literal. Adding the twenty-seventh seat previously meant editing sixty
144
+ assertions across tests, schemas and reports, which is the kind of cost that keeps a bench
145
+ frozen at whatever size it was first written at.
146
+ - The twenty-seventh seat could not speak on this universe at all. `master_jhunjhunwala` puts
147
+ the ownership record first, before any growth arithmetic, and the US has no promoter as a
148
+ filing concept — so the seat was authored to decline by construction, which is honest and
149
+ also useless. Section 16 is the filed analogue: officers, directors and holders of more than
150
+ ten percent file Forms 3, 4 and 5 stating what they hold afterwards.
151
+ `governance.insider_ownership` sums the newest such filing per reporting owner over shares
152
+ outstanding, reading filings newest-first and taking each owner once, so the cost is one
153
+ fetch per insider rather than one per filing. The fact is `estimated`, not `reported` — no
154
+ document states it — and where Section 16 differs from an Indian promoter disclosure is
155
+ written on the seat rather than adjusted away.
156
+
157
+ ## Assurance boundary
158
+
159
+ Unchanged from 0.9.5 and deliberately so:
160
+
161
+ - Build channel: `solo_test`; `production_eligible=false`; `method_model_eligible=false`.
162
+ - Admission level: `operator_lens`. Formal production GA remains fail-closed.
163
+ - Method-seat outputs are project-derived provisional lenses. They are not quotations,
164
+ endorsements, or current views of the named people.
@@ -22,6 +22,13 @@ writes the mode-appropriate versions of:
22
22
  The report and handoff must call a named master result a recorded method-seat or lens result.
23
23
  It is not a quote from, endorsement by, or current statement of the named person.
24
24
 
25
+ The run classifies its instrument before selecting financial-data routes. Operating-company
26
+ Company Facts and issuer financials are not applicable to ETFs, funds or indices. ETF/fund
27
+ runs use holdings look-through; index runs use aggregate-index evidence. Missing dated
28
+ holdings, constituents, weights, methodology, fees/rules, liquidity/tracking/flows or
29
+ aggregate-valuation coverage remain explicit gaps and are never replaced with invented fund
30
+ revenue, EPS, guidance, insider activity or summed constituent financial statements.
31
+
25
32
  System-owned selector, report and handoff labels are localized for `zh-CN`, `en`, `ja` and
26
33
  `ko`. Each worker receives the canonical run language, while stable IDs and JSON field names
27
34
  remain English. Reader-facing evidence, method, debate and PM fields are checked against the
@@ -40,6 +47,7 @@ Full remains the default. Its `final_report.md` visibly covers:
40
47
  - analyst work log for every planned evidence role
41
48
  - bull/bear debate record, including three rounds and exact round-3 Q&A
42
49
  - recorded Master Bench when methods were selected
50
+ - fund/index structure and look-through when the instrument is an ETF, fund or index
43
51
  - long thesis and short thesis
44
52
  - market expectations and implied beat/miss thresholds
45
53
  - analyst rating and target-price revisions
@@ -62,10 +70,17 @@ Its `user_response.md` must also visibly carry:
62
70
 
63
71
  - a system-owned price snapshot with price, currency, quote timestamp, exchange/feed and
64
72
  source when available, or an explicit statement that the quote is unavailable;
65
- - every selected stable master ID, its frozen deterministic stance, its isolated voice-worker
73
+ - every selected stable master ID, its frozen deterministic stance, its readable
66
74
  explanation/status and a clear `not a quote` attribution boundary;
67
75
  - all eight mandatory analyst task IDs, statuses and summaries, including failures or gaps;
68
76
  - terminal status, contract, report quality, elapsed time, deadline state and artifact paths.
77
+ - a final section with the exact selected-seat count and one readable statement per selected
78
+ stable ID. Full `all` therefore ends with 26 statements; quick reports its actual 1–4.
79
+
80
+ Visible PM completion returns `handoff_contract=inline_user_response_v1` plus the persisted
81
+ `user_response_markdown`. The host uses that body for the final reply instead of reducing it
82
+ to a compact ACK and hiding the method-seat tail. An idempotent PM replay returns the same
83
+ handoff.
69
84
 
70
85
  All mandatory full evidence roles must be completed. If one still fails after the one bounded
71
86
  parse-only repair, full fails closed at the evidence barrier: no master, bull/bear or PM model
@@ -95,8 +110,11 @@ those subagents and the plugin cannot force-stop them.
95
110
  Visible full runs use the same six role-by-round audit records and exact Q&A gate. Each
96
111
  Bull/Bear call declares round 1, 2 or 3; the server rejects out-of-order calls, altered replay
97
112
  content and a PM submitted before both Round-3 records pass. Identical role/round retries are
98
- idempotent. This preserves workflow completeness but does not give host-owned subagents the
99
- plugin-managed 30-minute deadline.
113
+ idempotent. Every non-blocked selected physical v3 seat also returns a visible post-evidence
114
+ explanation worker, including a deterministic `out_of_scope` seat. Its
115
+ `acknowledged_stance` must match the frozen stance, and PM checks the worker's completed
116
+ status rather than accepting the fallback record alone. This preserves workflow completeness
117
+ but does not give host-owned subagents the plugin-managed 30-minute deadline.
100
118
 
101
119
  ## quick_v1 Contract
102
120
 
@@ -201,7 +219,7 @@ one judgment paragraph, valuation/position, material gaps and file locations.
201
219
  A full handoff additionally carries the key earnings result, forward setup, news/voice
202
220
  signals and top invalidation conditions. It lists every selected method seat and all eight
203
221
  mandatory analysts rather than sampling a subset, and includes the system-owned price
204
- snapshot or an explicit quote-data gap.
222
+ snapshot or an explicit quote-data gap. The method-seat list is the final handoff section.
205
223
 
206
224
  A quick handoff instead names:
207
225
 
@@ -227,7 +245,9 @@ Both handoffs list `final_report.md`, `artifact_index.md`, `all_agents.md`, and
227
245
  | "The source table mentions the news, so the news section can be skipped." | News findings need their own visible section; quick recent news must also pass its date window. |
228
246
  | "The final report exists, so chat can hide file locations." | The handoff lists the saved report, index, trace and quality file. |
229
247
  | "The master said this." | Call it a recorded method-seat result, never a quote from the named person. |
230
- | "The full report has a bench table, so the handoff can hide the individual seats." | Full handoff lists every selected stable ID, stance and isolated-worker result/status. |
248
+ | "The full report has a bench table, so the handoff can hide the individual seats." | Full handoff ends with every selected stable ID, stance and readable result/status. |
249
+ | "The PM tool returned success, so its small ACK is enough." | Deliver `user_response_markdown`; success metadata is not the user-facing report. |
250
+ | "QQQ has a ticker and SEC CIK, so run the company screen." | Classify first. ETF/fund/index company financial routes are not applicable; use look-through or aggregate evidence. |
231
251
 
232
252
  ## How the Quality Gate Checks Reports
233
253
 
@@ -246,4 +266,8 @@ at least 1600 non-space characters, quick reports 700, and dry reports 600.
246
266
 
247
267
  The system-owned recorded Master Bench and degraded ledger are checked independently of PM
248
268
  prose so a generic, stale or duplicate heading cannot satisfy the contract. The authoritative
249
- lists are `REPORT_SECTIONS` and `QUICK_REPORT_SECTIONS` in `mcp/lib/constants.mjs`.
269
+ Master Bench must contain the exact stable ID and a readable statement for every selected
270
+ seat; `report_quality.json.method_statement_coverage` records selected/readable/rendered
271
+ counts and IDs. A missing statement or ID forces `needs_revision`. Fund/index runs also
272
+ require the system-owned instrument-structure section. The authoritative lists are
273
+ `REPORT_SECTIONS` and `QUICK_REPORT_SECTIONS` in `mcp/lib/constants.mjs`.