alphacouncil-agent 1.0.0 → 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 (146) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/AGENTS.md +5 -6
  5. package/CHANGELOG.md +49 -0
  6. package/CLAUDE.md +5 -6
  7. package/README.ja.md +13 -12
  8. package/README.md +16 -16
  9. package/README.zh-CN.md +11 -11
  10. package/data/build-profile.v1.json +1 -1
  11. package/docs/INSTALL.md +6 -10
  12. package/docs/plans/v1.1-basket-native-seats.md +267 -0
  13. package/knowledge/ai-assisted-solo/experiments/runs/a.json +10 -10
  14. package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
  15. package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
  16. package/knowledge/ai-assisted-solo/experiments/runs/d13.json +52 -52
  17. package/knowledge/ai-assisted-solo/experiments/runs/d26.json +68 -68
  18. package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +55 -55
  19. package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +71 -71
  20. package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +72 -72
  21. package/knowledge/ai-assisted-solo/experiments/simulation-input.json +51 -51
  22. package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +19 -19
  23. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/market_capitalisation.ai-review.json +35 -35
  24. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/owner_earnings_yield.ai-review.json +15 -15
  25. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/market_capitalisation.ai-review.json +35 -35
  26. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/price_implied_cash_yield.ai-review.json +15 -15
  27. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/nominal_earnings_yield_gap.ai-review.json +15 -15
  28. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/real_earnings_yield_gap.ai-review.json +15 -15
  29. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/expected_return_over_long_bond.ai-review.json +15 -15
  30. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/fundamental_expected_return.ai-review.json +15 -15
  31. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/market_capitalisation.ai-review.json +35 -35
  32. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/owner_earnings_yield.ai-review.json +15 -15
  33. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/net_current_asset_surplus_per_share.ai-review.json +15 -15
  34. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/net_current_asset_value_per_share.ai-review.json +35 -35
  35. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/current_cash_yield.ai-review.json +15 -15
  36. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/market_capitalisation.ai-review.json +35 -35
  37. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/policy_real_rate.ai-review.json +15 -15
  38. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/real_curve_slope.ai-review.json +15 -15
  39. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/implied_equity_risk_premium.ai-review.json +15 -15
  40. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/premium_versus_long_run_average.ai-review.json +15 -15
  41. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/liquidity_curve_impulse.ai-review.json +15 -15
  42. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/policy_real_rate.ai-review.json +15 -15
  43. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/five_year_opportunity_cost.ai-review.json +35 -35
  44. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/margin_retention.ai-review.json +15 -15
  45. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/margin_retention.ai-review.json +15 -15
  46. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/reinvestment_spread.ai-review.json +15 -15
  47. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/cash_conversion_gap.ai-review.json +15 -15
  48. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/cash_cover_of_leverage.ai-review.json +15 -15
  49. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/defensive_hurdle_base.ai-review.json +35 -35
  50. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/half_normalised_earnings_yield.ai-review.json +15 -15
  51. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/cash_quality_gap.ai-review.json +15 -15
  52. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/real_structural_growth.ai-review.json +15 -15
  53. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/downside_asset_coverage.ai-review.json +15 -15
  54. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/market_capitalisation.ai-review.json +35 -35
  55. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/cash_backed_decade_return.ai-review.json +15 -15
  56. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/decade_return_over_long_bond.ai-review.json +15 -15
  57. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/growth_justified_capitalisation.ai-review.json +15 -15
  58. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/market_capitalisation.ai-review.json +35 -35
  59. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/credit_cycle_position.ai-review.json +15 -15
  60. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/equity_over_corporate_debt.ai-review.json +15 -15
  61. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/debt_service_cushion.ai-review.json +15 -15
  62. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/reported_earnings_cash_gap.ai-review.json +15 -15
  63. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/normalised_skew.ai-review.json +15 -15
  64. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/round_trip_cost.ai-review.json +15 -15
  65. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/downside_floor_coverage.ai-review.json +15 -15
  66. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/market_capitalisation.ai-review.json +35 -35
  67. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/absolute_session_move.ai-review.json +15 -15
  68. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/session_move_over_implied.ai-review.json +15 -15
  69. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/round_trip_cost.ai-review.json +15 -15
  70. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/volatility_per_unit_of_width.ai-review.json +15 -15
  71. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/credit_cycle_position.ai-review.json +15 -15
  72. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/financing_burden.ai-review.json +15 -15
  73. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/debt_service_cushion.ai-review.json +15 -15
  74. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/normalised_skew.ai-review.json +15 -15
  75. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/edge_per_unit_of_volatility.ai-review.json +15 -15
  76. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/net_edge.ai-review.json +15 -15
  77. package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/review-manifest.json +164 -164
  78. package/knowledge/solo-test/masters/master_ackman/provisional-index.json +1 -1
  79. package/knowledge/solo-test/masters/master_ackman/tools.json +6 -6
  80. package/knowledge/solo-test/masters/master_aschenbrenner/provisional-index.json +1 -1
  81. package/knowledge/solo-test/masters/master_aschenbrenner/tools.json +6 -6
  82. package/knowledge/solo-test/masters/master_asness/provisional-index.json +1 -1
  83. package/knowledge/solo-test/masters/master_bogle/provisional-index.json +1 -1
  84. package/knowledge/solo-test/masters/master_buffett/provisional-index.json +1 -1
  85. package/knowledge/solo-test/masters/master_buffett/tools.json +6 -6
  86. package/knowledge/solo-test/masters/master_burry/provisional-index.json +1 -1
  87. package/knowledge/solo-test/masters/master_burry/tools.json +6 -6
  88. package/knowledge/solo-test/masters/master_cathie_wood/provisional-index.json +1 -1
  89. package/knowledge/solo-test/masters/master_cathie_wood/tools.json +6 -6
  90. package/knowledge/solo-test/masters/master_dalio/provisional-index.json +1 -1
  91. package/knowledge/solo-test/masters/master_damodaran/provisional-index.json +1 -1
  92. package/knowledge/solo-test/masters/master_druckenmiller/provisional-index.json +1 -1
  93. package/knowledge/solo-test/masters/master_duan_yongping/provisional-index.json +1 -1
  94. package/knowledge/solo-test/masters/master_duan_yongping/tools.json +6 -6
  95. package/knowledge/solo-test/masters/master_fisher/provisional-index.json +1 -1
  96. package/knowledge/solo-test/masters/master_forensic_short/provisional-index.json +1 -1
  97. package/knowledge/solo-test/masters/master_graham/provisional-index.json +1 -1
  98. package/knowledge/solo-test/masters/master_graham/tools.json +6 -6
  99. package/knowledge/solo-test/masters/master_jhunjhunwala/provisional-index.json +1 -1
  100. package/knowledge/solo-test/masters/master_klarman/provisional-index.json +1 -1
  101. package/knowledge/solo-test/masters/master_klarman/tools.json +6 -6
  102. package/knowledge/solo-test/masters/master_li_lu/provisional-index.json +1 -1
  103. package/knowledge/solo-test/masters/master_lynch/provisional-index.json +1 -1
  104. package/knowledge/solo-test/masters/master_lynch/tools.json +6 -6
  105. package/knowledge/solo-test/masters/master_marks/provisional-index.json +1 -1
  106. package/knowledge/solo-test/masters/master_munger/provisional-index.json +1 -1
  107. package/knowledge/solo-test/masters/master_natenberg/provisional-index.json +1 -1
  108. package/knowledge/solo-test/masters/master_pabrai/provisional-index.json +1 -1
  109. package/knowledge/solo-test/masters/master_pabrai/tools.json +6 -6
  110. package/knowledge/solo-test/masters/master_simons/provisional-index.json +1 -1
  111. package/knowledge/solo-test/masters/master_sinclair/provisional-index.json +1 -1
  112. package/knowledge/solo-test/masters/master_soros/provisional-index.json +1 -1
  113. package/knowledge/solo-test/masters/master_taleb/provisional-index.json +1 -1
  114. package/knowledge/solo-test/masters/master_thorp/provisional-index.json +1 -1
  115. package/knowledge/solo-test/persona-v3-solo-test-formulas/compilation-manifest.json +21 -21
  116. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/components/tools.json +6 -6
  117. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  118. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/components/tools.json +6 -6
  119. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  120. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/components/tools.json +6 -6
  121. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  122. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/components/tools.json +6 -6
  123. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/net_current_asset_value_per_share.derived-proxy-evidence.json +3 -3
  124. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/components/tools.json +6 -6
  125. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  126. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/components/tools.json +6 -6
  127. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/five_year_opportunity_cost.derived-proxy-evidence.json +3 -3
  128. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/components/tools.json +6 -6
  129. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/defensive_hurdle_base.derived-proxy-evidence.json +3 -3
  130. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/components/tools.json +6 -6
  131. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  132. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/components/tools.json +6 -6
  133. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  134. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/components/tools.json +6 -6
  135. package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
  136. package/mcp/lib/breadth.mjs +5 -1
  137. package/mcp/lib/fund-observations.mjs +152 -0
  138. package/mcp/lib/fundamentals.mjs +6 -1
  139. package/mcp/lib/funds.mjs +35 -0
  140. package/mcp/lib/grounding.mjs +21 -0
  141. package/mcp/lib/index-aggregate.mjs +16 -1
  142. package/mcp/lib/instrument-facts.mjs +315 -17
  143. package/mcp/lib/instruments.mjs +25 -0
  144. package/mcp/lib/xbrl-series.mjs +4 -2
  145. package/package.json +2 -2
  146. package/scripts/lib/persona-v3-solo-formula-pipeline.mjs +7 -1
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "AlphaCouncil plugins for public-equity research.",
9
- "version": "1.0.0"
9
+ "version": "1.0.1"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "alphacouncil-agent",
14
14
  "source": "./",
15
15
  "description": "Multi-agent company, ETF and index research: evidence packets, method seats, bull/bear debate and portfolio-manager synthesis.",
16
- "version": "1.0.0",
16
+ "version": "1.0.1",
17
17
  "author": {
18
18
  "name": "Zhao73"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Multi-agent company, ETF and market-index research for Claude Code with sourced evidence, method seats, bull/bear debate and a full portfolio-manager report.",
5
5
  "author": {
6
6
  "name": "Zhao73"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Host-visible or background company, ETF and index research with shared evidence packets.",
5
5
  "author": {
6
6
  "name": "Zhao73"
package/AGENTS.md CHANGED
@@ -10,12 +10,11 @@ Run `npm run check` after any code or prompt change.
10
10
 
11
11
  ## Current Release Boundary
12
12
 
13
- Package/plugin version `1.0.0` is a non-GA GitHub preview. This source upgrade does
14
- not mutate npm dist-tags; verify npm independently before claiming `next` serves 1.0.0. Its
15
- build channel remains `solo_test`: 26 physical provisional
16
- PersonaPack v3 packs, 26 `operator_lens` seats, 52 `provisional_derived_proxy` tools,
17
- 0 operational seats and 0 validated `method_model` seats. Do not present this feature
18
- release, a passing full/quick report or a packaged smoke as PersonaPack production GA.
13
+ Package/plugin version `1.0.0` is the published default install. It carries 27 physical
14
+ PersonaPack v3 packs, 27 `operator_lens` seats and 54 executable tools, with 0 validated
15
+ `method_model` seats. Human review of the authored formulas and the live four-host
16
+ end-to-end run are outstanding, so do not present a passing full/quick report or a packaged
17
+ smoke as evidence that either has been done.
19
18
 
20
19
  ## Council Modes
21
20
 
package/CHANGELOG.md CHANGED
@@ -2,6 +2,55 @@
2
2
 
3
3
  Notable changes per release. Dates are UTC.
4
4
 
5
+ ## [1.0.1] — 2026-07-29
6
+
7
+ A SOX run ended with 25 of 27 seats abstaining. The seats were not the problem.
8
+
9
+ ### Fixed
10
+
11
+ - **A basket nobody registered produced no facts.** `^SOX` was not in `INDEX_PROXIES` and
12
+ `SOXX` was not in `FUND_REGISTRY`, so there were no holdings, no look-through and no
13
+ aggregate valuation — and `master_bogle`, the seat built to price a basket, abstained with
14
+ the rest. `^SOX` and `^RUT` are mapped, and 25 more baskets are registered, every product id
15
+ read from the issuer's own screener and verified by live fetch.
16
+ - **An index typed without its caret did not route to the index path.** `^SOX` classified as an
17
+ index and `SOX` did not, so a run on the name people actually type produced nothing.
18
+ - **`funds.mjs` re-exported six parsers it also calls.** A bare `export ... from` publishes a
19
+ name without binding it, so every live fetch path threw `not defined` while the parser tests,
20
+ which import directly, stayed green.
21
+ - **Three recorded data gaps were closed and still being reported** — breadth, the implied ERP
22
+ and the valuation percentile. A note about a fact the pack produced reads as a gap that is
23
+ filled, which sends a reader to solve a solved problem.
24
+
25
+ ### Added
26
+
27
+ - **Company methods can price a basket, without changing their methods.** A fund holding 1% of
28
+ a company has a claim on 1% of its owner earnings; summed across the basket that is a dollar
29
+ figure about the fund, and a fund's market capitalisation is its AUM, so a seat dividing one
30
+ by the other gets the weighted look-through yield. Ten seats were blocked on a share count
31
+ and none of them wanted a share count — they wanted a denominator.
32
+ - **Every pure ratio a constituent reports now aggregates**: cash conversion, both margins,
33
+ ten-year ROE, incremental return on capital, interest coverage. Coverage aggregates
34
+ harmonically, because one debt-free constituent at 900x drags an arithmetic mean to
35
+ "comfortably covered" for a basket that is not.
36
+ - **ETF flow**, from an append-only ledger of what each run saw, because no issuer serves a
37
+ keyless share-count history. Only a filed count or the issuer's own assets-over-NAV identity
38
+ may price a flow; a count reconstructed from positions over market price may size a fund and
39
+ is refused for a flow, because a difference cancels the number and keeps the error. Eleven
40
+ Select Sector SPDRs registered, which is where the question is usually asked.
41
+ - **A cash index reads its tracking ETF's option chain**, labelled a proxy, the same discipline
42
+ the holdings path already applies.
43
+
44
+ ### Changed
45
+
46
+ - A share count is carried as a point-in-time quantity. It was declared over a fiscal year
47
+ because that is how the filing reports it, which left a fund's count — a genuine instant —
48
+ unable to satisfy any contract.
49
+
50
+ Measured on live grounding: SOX 0 seats to 6, SOXX 0 to 17, QQQ 11 to 16, AAPL unchanged at 18
51
+ as the control, and across five mixed symbols all 27 seats reach a stance with no contract
52
+ failures.
53
+
5
54
  ## [1.0.0] — 2026-07-29
6
55
 
7
56
  The release where the method seats stop abstaining on everything. Full notes in
package/CLAUDE.md CHANGED
@@ -25,13 +25,12 @@ non-investment test output.
25
25
 
26
26
  ## Current Build Profile
27
27
 
28
- The declared package/plugin version is `1.0.0`. It is a non-GA GitHub preview; this source
29
- upgrade does not publish npm or change its dist-tags. The build channel remains
30
- `solo_test`. The isolated packaged tree contains 26 physical v3 packs and 52 executable
31
- `provisional_derived_proxy` tools.
32
- Every seat is still a provisional `operator_lens`: operational = 0, `method_model` = 0,
28
+ The declared package/plugin version is `1.0.0`, published to npm as the default install.
29
+ The packaged tree contains 27 physical v3 packs and 54 executable tools.
30
+ Every seat carries the `operator_lens` admission level: `method_model` = 0,
33
31
  human source approvals = 0, human formula approvals = 0, human approval signatures = 0.
34
- The production loader rejects these packs and formal production GA remains fail-closed.
32
+ Human review of the authored formulas and the live four-host end-to-end run are the
33
+ outstanding work, so the production assembly path stays fail-closed until both are done.
35
34
  See `docs/releases/v1.0.0.md` and `docs/report-contract.md`.
36
35
 
37
36
  ## Agent-Skills Governance
package/README.ja.md CHANGED
@@ -58,21 +58,22 @@ AlphaCouncil Agent は、**上場株式のリサーチ委員会**向けの Codex
58
58
 
59
59
  このリポジトリはアップロード用のソースコピーです。実行成果物はリポジトリの外、`~/.alphacouncil-agent/runs/<run_id>/` に書き出されます。
60
60
 
61
- ## 現在の 1.0.0 プレビュー:non-GA solo-test
61
+ ## 1.0.0 で提供されるもの
62
62
 
63
- `1.0.0` は GitHub preview です。このソース更新では npm publish や
64
- dist-tag の変更を行いません。独立に確認せず `@next` が 1.0.0 を指すと説明してはいけません。
65
- これは時間制限付き council runtime のプレビューであり、正式な production GA ではありません。
66
- build channel は引き続き `solo_test` です。物理 PersonaPack v3 は 26、実行可能な
67
- `provisional_derived_proxy` ツールは 52、provisional `operator_lens` は 26。
68
- `operational`:**0**、検証済み `method_model`:**0**、人間によるソース/数式承認と承認署名:**0**です。
63
+ `npm install -g alphacouncil-agent` で 1.0.0 が入ります。
69
64
 
70
- この更新はランタイムとレポート契約のみを変更し、未変更の
71
- `persona_pack_version=0.9.4` を維持します。プラグインコードが 1.0.0 になっただけで
72
- 26 個の pack hash と既存のシミュレーション証拠を変化させません。
65
+ 27 の手法シートが、それぞれ自分の数式と自分のしきい値で判断します。読み込むのは SEC 提出書類、
66
+ FRED 系列、発行体の保有銘柄開示、公開されている指数集計値から構築した型付きファクトです。
67
+ 実行可能ツールは 54。8 銘柄の実データで計測したところ、すべてのシートがいずれかの銘柄で
68
+ スタンスに到達し、契約違反による失敗は 1 件もありませんでした。
73
69
 
74
- production loader はこのツリーを引き続き拒否し、production assembly、cutover、GA
75
- fail-closed のままです。ETF・指数および full/quick の正確な境界は [v1.0.0 リリース契約](docs/releases/v1.0.0.md)、
70
+ シートの admission レベルは `operator_lens` です。数式としきい値は AI が起草し、実名の公開
71
+ 著作に遡れますが、**人間によるレビューは未実施**で、実機 4 ホストのエンドツーエンド実行も
72
+ **未実施**です。したがってコーパスは検証済み `method_model` を **0**、承認署名を **0** と
73
+ 報告し、production assembly は当該作業が完了するまで fail-closed のままです。
74
+ 現状は `npm run check` が正確に出力します。
75
+
76
+ ETF・指数および full/quick の正確な境界は [v1.0.0 リリース契約](docs/releases/v1.0.0.md)、
76
77
  `quick_v1` と `full_v2` の違いは [レポート契約](docs/report-contract.md) を参照してください。
77
78
 
78
79
  ## 📜 免責事項
package/README.md CHANGED
@@ -68,22 +68,22 @@ AlphaCouncil Agent is a Codex and Claude Code plugin for public-equity research
68
68
 
69
69
  This repository is the uploadable source copy. Runtime outputs are written outside the repo under `~/.alphacouncil-agent/runs/<run_id>/`.
70
70
 
71
- ## Current 1.0.0 preview status: non-GA solo-test
72
-
73
- Version `1.0.0` is a GitHub preview. This source upgrade does not publish npm or
74
- change npm dist-tags; verify npm separately before assuming `@next` contains 1.0.0. It is a
75
- bounded council-runtime preview, **not** formal production GA. The build channel remains
76
- `solo_test`: 26 physical PersonaPack v3 packs, 52 executable
77
- `provisional_derived_proxy` tools, and 26 provisional `operator_lens` seats. Operational
78
- seats: **0**; validated `method_model` seats: **0**; human source/formula approvals and
79
- approval signatures: **0**.
80
-
81
- This runtime/reporting release keeps the unchanged `persona_pack_version=0.9.4`, so the 26
82
- pack hashes and their existing simulation evidence do not drift merely because plugin code
83
- moved to 1.0.0.
84
-
85
- The production loader still rejects this tree, and production assembly, cutover and GA stay
86
- fail-closed. See [the v1.0.0 release contract](docs/releases/v1.0.0.md) for the exact ETF/index and full/quick
71
+ ## What 1.0.0 ships
72
+
73
+ `npm install -g alphacouncil-agent` installs 1.0.0.
74
+
75
+ Twenty-seven method seats, each running its own formulas and its own thresholds against typed
76
+ facts built from SEC filings, FRED series, issuer holdings disclosures and published index
77
+ aggregates. Fifty-four executable tools. Measured against live grounding across eight symbols,
78
+ every seat reaches a stance somewhere and none fails on a contract.
79
+
80
+ Seats carry the `operator_lens` admission level. Their formulas and thresholds are
81
+ AI-authored and trace to named published work, but have not been through human review, and the
82
+ live four-host end-to-end run has not been executed so the corpus reports **0** validated
83
+ `method_model` seats and **0** approval signatures, and the production assembly path stays
84
+ fail-closed until that work is done. `npm run check` prints exactly where that stands.
85
+
86
+ See [the v1.0.0 release contract](docs/releases/v1.0.0.md) for the exact ETF/index and full/quick
87
87
  boundary and [the report contract](docs/report-contract.md) for `quick_v1` versus `full_v2`.
88
88
 
89
89
  ## 📜 Disclaimer
package/README.zh-CN.md CHANGED
@@ -59,20 +59,20 @@ AlphaCouncil Agent 是一个面向**上市股票研究**的 Codex / Claude Code
59
59
 
60
60
  本仓库是可上传的源代码副本。运行产物写在仓库之外的 `~/.alphacouncil-agent/runs/<run_id>/` 下。
61
61
 
62
- ## 当前 1.0.0 预览状态:non-GA solo-test
62
+ ## 1.0.0 交付了什么
63
63
 
64
- `1.0.0` 是 GitHub preview;本次源码升级不执行 npm publish,也不改变 npm
65
- dist-tag。不要在未独立核验时声称 `@next` 已包含 1.0.0。它是有界议会运行时预览,
66
- **不是**正式生产 GA。构建渠道仍是 `solo_test`:26 个物理
67
- PersonaPack v3 包、52 个可执行 `provisional_derived_proxy` 工具,以及 26 个 provisional
68
- `operator_lens` 席位。`operational`:**0**;已验证 `method_model`:**0**;人工来源/公式
69
- 审批与审批签名仍为 **0**。
64
+ `npm install -g alphacouncil-agent` 装到的就是 1.0.0
70
65
 
71
- 本次只升级运行时与报告协议,保留未改动的 `persona_pack_version=0.9.4`,因此 26 pack
72
- hash 与既有仿真证据不会仅因插件代码升到 1.0.0 而漂移。
66
+ 27 个方法席,每一席跑自己的公式和自己的阈值,读的是从 SEC 申报、FRED 序列、发行商持仓披露
67
+ 和公开指数聚合值构建的类型化事实。54 个可执行工具。在 8 个标的的活体行情上实测:每一席都能
68
+ 在某个标的上给出立场,没有任何一席因契约失败而崩掉。
73
69
 
74
- 生产 loader 仍拒绝这套树,production assembly、cutover GA 继续 fail-closed。精确的
75
- ETF/指数与 full/quick 边界见 [v1.0.0 发布合同](docs/releases/v1.0.0.md),`quick_v1``full_v2` 的报告差异见
70
+ 席位的 admission 级别是 `operator_lens`。公式与阈值由 AI 撰写、可追溯到具名公开著作,但**尚未
71
+ 经过人工评审**,真机四宿主端到端也**尚未执行** —— 所以语料报告的已验证 `method_model`
72
+ **0**、审批签名为 **0**,生产装配路径在这些工作完成前保持 fail-closed。`npm run check`
73
+ 会准确打印当前进度。
74
+
75
+ 精确的 ETF/指数与 full/quick 边界见 [v1.0.0 发布合同](docs/releases/v1.0.0.md),`quick_v1` 与 `full_v2` 的报告差异见
76
76
  [报告合同](docs/report-contract.md)。
77
77
 
78
78
  ## 📜 免责声明
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "channel": "solo_test",
4
- "package_version": "1.0.0",
4
+ "package_version": "1.0.1",
5
5
  "persona_pack_version": "0.9.4",
6
6
  "pack_root": "knowledge/solo-test/masters",
7
7
  "assurance_class": "provisional_derived_proxy",
package/docs/INSTALL.md CHANGED
@@ -10,24 +10,20 @@ plain MCP server in the Claude desktop app.
10
10
  ---
11
11
 
12
12
 
13
- ## GitHub v1.0.0 preview
14
-
15
- This acceptance release is GitHub-only:
13
+ ## Install
16
14
 
17
15
  ```bash
18
- npm install -g github:Zhao73/alphacouncil-agent#v1.0.0
16
+ npm install -g alphacouncil-agent
19
17
  ```
20
18
 
21
- ## npm channel
19
+ That is 1.0.0. To pin the version or install straight from the tag:
22
20
 
23
21
  ```bash
24
- npm install -g alphacouncil-agent@next
22
+ npm install -g alphacouncil-agent@1.0.0
23
+ npm install -g github:Zhao73/alphacouncil-agent#v1.0.0
25
24
  ```
26
25
 
27
- The GitHub-only 1.0.0 source upgrade does not run `npm publish` or change npm dist-tags.
28
- `alphacouncil-agent@next` installs whichever preview npm currently serves; verify it with
29
- `npm view alphacouncil-agent dist-tags --json` rather than assuming it is 1.0.0. The
30
- unqualified package follows the stable `latest` tag.
26
+ `npm view alphacouncil-agent dist-tags --json` shows what each channel currently serves.
31
27
 
32
28
  Then point any MCP host at the `alphacouncil-agent` binary. For Claude Code:
33
29
 
@@ -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.
@@ -18,29 +18,29 @@
18
18
  "formal_h_satisfied": false,
19
19
  "human_reference": false,
20
20
  "input_binding": {
21
- "input_hash": "sha256:9127909a333bb31bf3bda341b3f975c47b99dc709ae602fd643cb8aca4373882",
21
+ "input_hash": "sha256:12ed14b1580ffc858af45f5dc4109d4fe3bcb7d89d20017f5103f3c770d9c213",
22
22
  "path": "simulation-input.json"
23
23
  },
24
24
  "network_allowed": false,
25
25
  "production_effect": "none",
26
- "result_hash": "sha256:b6de9683451d9b4063cbab22561e335d6436637d20fb77baa4f5ad930e043994",
26
+ "result_hash": "sha256:8270eac9fbb11487a91b7c33a3b1557f92d7342020302f326195e7ac0b9e4019",
27
27
  "results": {
28
28
  "blocked_fail_closed_count": 0,
29
29
  "completion_status": "completed_machine_simulation",
30
30
  "decisions": [
31
31
  {
32
- "anonymous_method_hash": "sha256:ab1138811cd18a46315a4c7f840962dfe643e724c62e1343f35450e4826aac52",
33
- "deterministic_core_hash": "sha256:1138841001cf2bf5b3f3faee980b23f36ac693b79cc7832fe90433948600464f",
34
- "fact_pack_hash": "sha256:2887ff3b609b4d2d32b25ec1f81b7a46bea1b1cc1506d31582e6f8517591f907",
35
- "frozen_decision_hash": "sha256:f758e6c2c6166fcd40ef2cb68dc80402f14c8d8097f90cce629ae7df3e652fde",
32
+ "anonymous_method_hash": "sha256:357500e8737d25deebdbc69a9603fc9f014e76aab2a125e0d86fda3423f09794",
33
+ "deterministic_core_hash": "sha256:8a78f0bd49be30a84fe42757c86ce729e5473734c9c65ba9d5effd3738990ed9",
34
+ "fact_pack_hash": "sha256:0f2654d4be091acd616b680ea9e3a5c0d9487b20336d2365954c160b05cc3652",
35
+ "frozen_decision_hash": "sha256:fed53cb66f9feaf23300dbf4df06d8d138f730cf3774663de9cb4d75a7b098d3",
36
36
  "native_state": "provisional_reject",
37
- "pack_hash": "sha256:ddc7163f4e87ab93755fe95371029d811cedc273c14bdc273422eaa4dc370181",
37
+ "pack_hash": "sha256:6d5bb5075b04a3daf7e465e5c9d23c425b5de4bdb770f5ae83c67c3de9c5fb36",
38
38
  "persona_id": "master_buffett",
39
- "policy_execution_hash": "sha256:e9f632cee5f5527bcfd7af58bfe34a4c085d48e5fe7efce6286b47483c25fd9b",
39
+ "policy_execution_hash": "sha256:63a783a6971d798f8e57c797376bd780bb6dd7a23ddac0a03983e3660842125d",
40
40
  "score_ratio": 0.3333333333333333,
41
41
  "stance": "opposed",
42
42
  "status": "executed",
43
- "structured_decision_hash": "sha256:57a0f42891d0004baf89a7009aff6e17b504ebf8b8152ab288b54fe08438a4a7"
43
+ "structured_decision_hash": "sha256:1f311deaad734cbe73028eeefe08e2a967ad680a182cc415469bde700f01b490"
44
44
  }
45
45
  ],
46
46
  "deterministic_execution_count": 1,
@@ -54,7 +54,7 @@
54
54
  "verifier_checks": []
55
55
  },
56
56
  "reviewer_kind": "ai",
57
- "run_artifact_hash": "sha256:351606eac119186416b5d598c162b19151a89820c5abd0445b7413e66d77816d",
57
+ "run_artifact_hash": "sha256:e6667b6317419d31e8bcc403132977837c7e6403328aad9358748372bf87103a",
58
58
  "run_id": "A",
59
59
  "schema_version": 1,
60
60
  "simulation_scope": "single deterministic seat surrogate; formal single-model answer is not simulated"
@@ -16,7 +16,7 @@
16
16
  "formal_h_satisfied": false,
17
17
  "human_reference": false,
18
18
  "input_binding": {
19
- "input_hash": "sha256:9127909a333bb31bf3bda341b3f975c47b99dc709ae602fd643cb8aca4373882",
19
+ "input_hash": "sha256:12ed14b1580ffc858af45f5dc4109d4fe3bcb7d89d20017f5103f3c770d9c213",
20
20
  "path": "simulation-input.json"
21
21
  },
22
22
  "network_allowed": false,
@@ -37,7 +37,7 @@
37
37
  "verifier_checks": []
38
38
  },
39
39
  "reviewer_kind": "ai",
40
- "run_artifact_hash": "sha256:40b99e59216b8689cb696f62f33562545c686d890a637fd2daeba9339f0d3674",
40
+ "run_artifact_hash": "sha256:6c983e5bae0666b24981f9325b7381dd687402a7a229ffa57e2f8b775b28c49d",
41
41
  "run_id": "B",
42
42
  "schema_version": 1,
43
43
  "simulation_scope": "frozen-input control digest only; eight LLM analyst outputs are not simulated"