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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/AGENTS.md +5 -6
- package/CHANGELOG.md +49 -0
- package/CLAUDE.md +5 -6
- package/README.ja.md +13 -12
- package/README.md +16 -16
- package/README.zh-CN.md +11 -11
- package/data/build-profile.v1.json +1 -1
- package/docs/INSTALL.md +6 -10
- package/docs/plans/v1.1-basket-native-seats.md +267 -0
- package/knowledge/ai-assisted-solo/experiments/runs/a.json +10 -10
- package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/d13.json +52 -52
- package/knowledge/ai-assisted-solo/experiments/runs/d26.json +68 -68
- package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +55 -55
- package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +71 -71
- package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +72 -72
- package/knowledge/ai-assisted-solo/experiments/simulation-input.json +51 -51
- package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +19 -19
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/owner_earnings_yield.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/price_implied_cash_yield.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/nominal_earnings_yield_gap.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/real_earnings_yield_gap.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/expected_return_over_long_bond.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/fundamental_expected_return.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/owner_earnings_yield.ai-review.json +15 -15
- 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
- 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
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/current_cash_yield.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/policy_real_rate.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/real_curve_slope.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/implied_equity_risk_premium.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/premium_versus_long_run_average.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/liquidity_curve_impulse.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/policy_real_rate.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/five_year_opportunity_cost.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/margin_retention.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/margin_retention.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/reinvestment_spread.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/cash_conversion_gap.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/cash_cover_of_leverage.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/defensive_hurdle_base.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/half_normalised_earnings_yield.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/cash_quality_gap.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/real_structural_growth.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/downside_asset_coverage.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/cash_backed_decade_return.ai-review.json +15 -15
- 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
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/growth_justified_capitalisation.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/credit_cycle_position.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/equity_over_corporate_debt.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/debt_service_cushion.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/reported_earnings_cash_gap.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/normalised_skew.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/round_trip_cost.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/downside_floor_coverage.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/market_capitalisation.ai-review.json +35 -35
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/absolute_session_move.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/session_move_over_implied.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/round_trip_cost.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/volatility_per_unit_of_width.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/credit_cycle_position.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/financing_burden.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/debt_service_cushion.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/normalised_skew.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/edge_per_unit_of_volatility.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/net_edge.ai-review.json +15 -15
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/review-manifest.json +164 -164
- package/knowledge/solo-test/masters/master_ackman/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_ackman/tools.json +6 -6
- package/knowledge/solo-test/masters/master_aschenbrenner/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_aschenbrenner/tools.json +6 -6
- package/knowledge/solo-test/masters/master_asness/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_bogle/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_buffett/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_buffett/tools.json +6 -6
- package/knowledge/solo-test/masters/master_burry/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_burry/tools.json +6 -6
- package/knowledge/solo-test/masters/master_cathie_wood/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_cathie_wood/tools.json +6 -6
- package/knowledge/solo-test/masters/master_dalio/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_damodaran/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_druckenmiller/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_duan_yongping/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_duan_yongping/tools.json +6 -6
- package/knowledge/solo-test/masters/master_fisher/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_forensic_short/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_graham/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_graham/tools.json +6 -6
- package/knowledge/solo-test/masters/master_jhunjhunwala/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_klarman/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_klarman/tools.json +6 -6
- package/knowledge/solo-test/masters/master_li_lu/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_lynch/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_lynch/tools.json +6 -6
- package/knowledge/solo-test/masters/master_marks/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_munger/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_natenberg/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_pabrai/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_pabrai/tools.json +6 -6
- package/knowledge/solo-test/masters/master_simons/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_sinclair/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_soros/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_taleb/provisional-index.json +1 -1
- package/knowledge/solo-test/masters/master_thorp/provisional-index.json +1 -1
- package/knowledge/solo-test/persona-v3-solo-test-formulas/compilation-manifest.json +21 -21
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/components/tools.json +6 -6
- 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
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/five_year_opportunity_cost.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/defensive_hurdle_base.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/components/tools.json +6 -6
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +3 -3
- package/mcp/lib/breadth.mjs +5 -1
- package/mcp/lib/fund-observations.mjs +152 -0
- package/mcp/lib/fundamentals.mjs +6 -1
- package/mcp/lib/funds.mjs +35 -0
- package/mcp/lib/grounding.mjs +21 -0
- package/mcp/lib/index-aggregate.mjs +16 -1
- package/mcp/lib/instrument-facts.mjs +315 -17
- package/mcp/lib/instruments.mjs +25 -0
- package/mcp/lib/xbrl-series.mjs +4 -2
- package/package.json +2 -2
- 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.
|
|
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.
|
|
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.
|
|
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"
|
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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
61
|
+
## 1.0.0 で提供されるもの
|
|
62
62
|
|
|
63
|
-
`1.0.0
|
|
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
|
-
|
|
72
|
-
|
|
65
|
+
27 の手法シートが、それぞれ自分の数式と自分のしきい値で判断します。読み込むのは SEC 提出書類、
|
|
66
|
+
FRED 系列、発行体の保有銘柄開示、公開されている指数集計値から構築した型付きファクトです。
|
|
67
|
+
実行可能ツールは 54。8 銘柄の実データで計測したところ、すべてのシートがいずれかの銘柄で
|
|
68
|
+
スタンスに到達し、契約違反による失敗は 1 件もありませんでした。
|
|
73
69
|
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
##
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
##
|
|
62
|
+
## 1.0.0 交付了什么
|
|
63
63
|
|
|
64
|
-
`1.0.0
|
|
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
|
-
|
|
72
|
-
|
|
66
|
+
27 个方法席,每一席跑自己的公式和自己的阈值,读的是从 SEC 申报、FRED 序列、发行商持仓披露
|
|
67
|
+
和公开指数聚合值构建的类型化事实。54 个可执行工具。在 8 个标的的活体行情上实测:每一席都能
|
|
68
|
+
在某个标的上给出立场,没有任何一席因契约失败而崩掉。
|
|
73
69
|
|
|
74
|
-
|
|
75
|
-
|
|
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
|
## 📜 免责声明
|
package/docs/INSTALL.md
CHANGED
|
@@ -10,24 +10,20 @@ plain MCP server in the Claude desktop app.
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
This acceptance release is GitHub-only:
|
|
13
|
+
## Install
|
|
16
14
|
|
|
17
15
|
```bash
|
|
18
|
-
npm install -g
|
|
16
|
+
npm install -g alphacouncil-agent
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
|
|
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@
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
33
|
-
"deterministic_core_hash": "sha256:
|
|
34
|
-
"fact_pack_hash": "sha256:
|
|
35
|
-
"frozen_decision_hash": "sha256:
|
|
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:
|
|
37
|
+
"pack_hash": "sha256:6d5bb5075b04a3daf7e465e5c9d23c425b5de4bdb770f5ae83c67c3de9c5fb36",
|
|
38
38
|
"persona_id": "master_buffett",
|
|
39
|
-
"policy_execution_hash": "sha256:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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"
|