alphacouncil-agent 1.0.2 → 1.0.4
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/CHANGELOG.md +70 -0
- package/README.md +24 -15
- package/README.zh-CN.md +18 -10
- package/data/authored/core-seats.mjs +8 -4
- package/data/build-profile.v1.json +1 -1
- package/data/persona-v3-build-specs.v1.mjs +1 -1
- package/docs/plans/v1.1-say-something-worth-reading.md +116 -0
- package/knowledge/ai-assisted-solo/experiments/runs/a.json +2 -2
- 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 +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/d26.json +9 -9
- package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +4 -4
- package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +12 -12
- package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +13 -13
- package/knowledge/ai-assisted-solo/experiments/simulation-input.json +6 -6
- package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +19 -19
- package/knowledge/solo-test/masters/master_bogle/decision_policy.json +4 -3
- package/knowledge/solo-test/masters/master_bogle/provisional-index.json +3 -0
- package/knowledge/solo-test/masters/master_bogle/sources.jsonl +1 -1
- package/mcp/lib/constants.mjs +3 -0
- package/mcp/lib/council-options.mjs +8 -4
- package/mcp/lib/fundamentals.mjs +61 -10
- package/mcp/lib/grounding.mjs +67 -1
- package/mcp/lib/insider-ownership.mjs +23 -12
- package/mcp/lib/orchestrator.mjs +10 -2
- package/mcp/lib/personas/engine.mjs +66 -9
- package/mcp/lib/personas-v3/deterministic-executor.mjs +39 -2
- package/mcp/lib/personas-v3/grounding-adapter.mjs +4 -0
- package/mcp/lib/personas-v3/runtime.mjs +9 -2
- package/mcp/lib/screen.mjs +27 -1
- package/mcp/lib/sec.mjs +80 -17
- package/mcp/lib/voice-from-decision.mjs +211 -0
- package/mcp/lib/xbrl-series.mjs +10 -3
- package/package.json +1 -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.4"
|
|
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.4",
|
|
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.4",
|
|
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes per release. Dates are UTC.
|
|
4
4
|
|
|
5
|
+
## [1.0.4] — 2026-07-29
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Total liabilities had one tag and many filers use none of it.** Net current asset value, the
|
|
10
|
+
downside asset value and the downside floor all failed on `Liabilities`, silencing Graham,
|
|
11
|
+
Burry, Klarman and Pabrai. It is now reconstructed where a filer tags the balance-sheet total
|
|
12
|
+
and equity instead — but only against the equity tag that INCLUDES non-controlling interests,
|
|
13
|
+
where the identity is exact. With the parent-only tag minority interest lands inside
|
|
14
|
+
"liabilities" and nothing says so, which is why the previous refusal was right and is kept
|
|
15
|
+
wherever that tag is absent.
|
|
16
|
+
- **Revenue growth insisted the last eight filings were its window.** One restated quarter, one
|
|
17
|
+
stub period or one duplicate at the end discarded a company's entire revenue history. It now
|
|
18
|
+
searches backwards for the most recent clean pair of four-quarter blocks; each window is
|
|
19
|
+
checked exactly as strictly as before, only the search moved.
|
|
20
|
+
|
|
21
|
+
Measured: INTC and WMT go from six of eight derived fundamentals to **eight of eight**, GLW to
|
|
22
|
+
seven.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- The seat selector labels an `operator_lens` as a method lens rather than leading with
|
|
27
|
+
"provisional". The machine-verified admission level is unchanged and still published as
|
|
28
|
+
`admission_level`.
|
|
29
|
+
|
|
30
|
+
## [1.0.3] — 2026-07-29
|
|
31
|
+
|
|
32
|
+
Three real runs are the specification: a GLW run put all eight selected seats at `out_of_scope`
|
|
33
|
+
with weight zero, an INTC run sent six to the deterministic fallback, and a LITE run reported
|
|
34
|
+
"no ticker was provided" for a ticker that had been provided. The filings contained the data
|
|
35
|
+
every one of them said was missing.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- **The missing facts were mostly missing tag aliases.** `grossProfit` resolved for five of
|
|
40
|
+
fifteen large caps, because most filers publish revenue and cost of revenue separately rather
|
|
41
|
+
than tagging it; it is now derived from those two, matched by period end, with a tagged value
|
|
42
|
+
always winning. `capex` missed Corning entirely, which files `PaymentsForCapitalImprovements`
|
|
43
|
+
— that one absent alias removed owner earnings, and with it Buffett and Ackman, for every
|
|
44
|
+
issuer tagging it that way. Gross margin now resolves for all fourteen testable filers.
|
|
45
|
+
- **Market facts were fetched only for baskets.** Asness, Marks and Damodaran require
|
|
46
|
+
`index.aggregate_earnings_yield` and reported it missing on every single-company run. The
|
|
47
|
+
market's aggregate earnings yield is not a property of the subject; it is the yardstick the
|
|
48
|
+
subject is measured against.
|
|
49
|
+
- **A seat could not reach its own answer about an absent fact.** Pabrai is authored with a veto
|
|
50
|
+
that says no downside floor means pass. That fact is also a tool input, and a tool declaring
|
|
51
|
+
`on_missing: "fail"` aborted the policy before any veto ran. A veto that reads only facts
|
|
52
|
+
needs nothing a tool produces, so when one has already decided the seat, the tools it would
|
|
53
|
+
have fed no longer abort the run.
|
|
54
|
+
- **A grounding timeout discarded everything.** The caller threw away a completed quote, screen
|
|
55
|
+
and filing set because one feed was slow, and the analysts described the empty result as a
|
|
56
|
+
missing ticker. Grounding settles at its own budget and returns what arrived. Section 16
|
|
57
|
+
ownership was reading filings one at a time — up to sixty throttled round trips on the
|
|
58
|
+
critical path — and is now batched: LITE completes in seven seconds.
|
|
59
|
+
- **SEC rate limiting collapsed a run.** A 429 is now retried with a bounded backoff instead of
|
|
60
|
+
being indistinguishable in the report from the data not existing.
|
|
61
|
+
- **A registrant with no filings is one diagnosis, not eight.** `XOM` resolves through SEC's own
|
|
62
|
+
ticker file to a newly formed holding company with zero us-gaap tags.
|
|
63
|
+
- **The maturity suffix stopped leaking into sentences.** Statements read "using the X
|
|
64
|
+
provisional operator lens method".
|
|
65
|
+
|
|
66
|
+
### Added
|
|
67
|
+
|
|
68
|
+
- **Seats say what they looked at.** The five-field voice — what I see, how my method reads it,
|
|
69
|
+
would I act, what changes my mind, where I disagree — is composed from the frozen decision:
|
|
70
|
+
the facts read and their values, what the tools produced, which scoring conditions held and
|
|
71
|
+
which did not, and what would move the verdict. Because it is derived from the decision it
|
|
72
|
+
cannot drift from it, and anonymous rule ids are mapped back to the seat's readable names.
|
|
73
|
+
Abstentions get the same structure.
|
|
74
|
+
|
|
5
75
|
## [1.0.2] — 2026-07-29
|
|
6
76
|
|
|
7
77
|
### Added
|
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
<a href="docs/INSTALL.md"><b>Install</b></a> ·
|
|
33
33
|
<a href="#-usage"><b>Usage</b></a> ·
|
|
34
34
|
<a href="#-tools--27-all-keyless"><b>Tools</b></a> ·
|
|
35
|
-
<a href="#-the-bench--
|
|
35
|
+
<a href="#-the-bench--27-investor-method-lenses"><b>The bench</b></a> ·
|
|
36
36
|
<a href="#-architecture"><b>Architecture</b></a> ·
|
|
37
37
|
<a href="CHANGELOG.md"><b>Changelog</b></a> ·
|
|
38
38
|
<a href="#-disclaimer"><b>Disclaimer</b></a>
|
|
@@ -57,7 +57,11 @@ AlphaCouncil Agent is a Codex and Claude Code plugin for public-equity research
|
|
|
57
57
|
| | |
|
|
58
58
|
|---|---|
|
|
59
59
|
| 🏛️ **A council, not one opinion** | Eight specialist analysts by default, eleven available — market data, earnings, forward expectations, quant, valuation, news and supply chain, insider/SEC, IB events, macro, narrative, crowding. |
|
|
60
|
-
| 🎭 **
|
|
60
|
+
| 🎭 **27 selectable investor lenses** | Buffett, Munger, Graham, Lynch, Marks, Damodaran, Ackman, Cathie Wood, Pabrai, Bogle and more read the **same facts** through different stated research priorities. Every council run shows all 27 with actual maturity before research. Full accepts any non-empty selection or `all`; quick requires 1-4 and rejects `all`. |
|
|
61
|
+
| 🧺 **A basket is not a company, and the bench knows it** | An ETF or index is priced by look-through: a fund owning 1% of a business has a claim on 1% of its owner earnings, so a company method reads a basket **without changing its method**. Ratios aggregate by weight; absolute figures become the fund's own dollar claim; a share count is refused because it has no portfolio meaning. |
|
|
62
|
+
| 📰 **A basket gets its own industry news** | `SOX` has no press office. Its industry is derived from the weighted SIC groups of its holdings, so SOXX resolves to semiconductors and survives a rebalance. Where no group dominates, the basket is queried as the several industries it actually is. |
|
|
63
|
+
| 🌏 **What else you are betting on** | Correlation to the broad market, to KOSPI, to KOSDAQ and to the semiconductor cycle, plus dispersion across the eleven sector SPDRs. Sessions pair by date, because Korea and the United States keep different holidays. |
|
|
64
|
+
| 💵 **Fund flow that refuses to be faked** | Creations minus redemptions, priced. Only a filed share count or the issuer's own assets-over-NAV identity may price a flow; a count reconstructed from positions is refused, because a difference cancels the number and keeps the error. |
|
|
61
65
|
| 🐂🐻 **Adversarial by design** | Full runs a three-round bull/bear cross-exam and the visible/deep path can add three adversarial verifiers. Quick runs one parallel bull/bear statement round and a short PM; it checks scoped source IDs but explicitly does not claim adversarial verification. |
|
|
62
66
|
| ⏱️ **Bounded full headless run** | Plugin-managed full starts all eight analysts together, runs Bull/Bear together inside each round, and persists a terminal run within 30 minutes. Provider failures produce an explicit `incomplete` result, never silently missing seats. |
|
|
63
67
|
| 🔍 **Auditable, never hallucinated** | Every claim maps to a source ID. A screen rule with missing inputs is `skipped`, never a pass. An undated headline is excluded, not shown as recent. Gaps are a section, not an omission. |
|
|
@@ -68,14 +72,19 @@ AlphaCouncil Agent is a Codex and Claude Code plugin for public-equity research
|
|
|
68
72
|
|
|
69
73
|
This repository is the uploadable source copy. Runtime outputs are written outside the repo under `~/.alphacouncil-agent/runs/<run_id>/`.
|
|
70
74
|
|
|
71
|
-
## What
|
|
75
|
+
## What this ships
|
|
72
76
|
|
|
73
|
-
`npm install -g alphacouncil-agent` installs
|
|
77
|
+
`npm install -g alphacouncil-agent` installs the current release.
|
|
74
78
|
|
|
75
79
|
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
|
|
77
|
-
aggregates
|
|
78
|
-
|
|
80
|
+
facts built from SEC filings, FRED series, issuer holdings disclosures, published index
|
|
81
|
+
aggregates, Section 16 ownership, cross-market price history and dated industry news.
|
|
82
|
+
Fifty-four executable tools.
|
|
83
|
+
|
|
84
|
+
Measured against live grounding, with no fixtures: every one of the 27 seats reaches a stance
|
|
85
|
+
somewhere across a mixed set of symbols, with no contract failures. A basket that had **no data
|
|
86
|
+
path at all** — `SOX` was in neither registry — now produces 40-plus typed facts, and the seats
|
|
87
|
+
that read them are running the same methods they run on a company.
|
|
79
88
|
|
|
80
89
|
Seats carry the `operator_lens` admission level. Their formulas and thresholds are
|
|
81
90
|
AI-authored and trace to named published work, but have not been through human review, and the
|
|
@@ -145,7 +154,7 @@ with analyst Markdown files and `artifact_index.md` in the same run directory. F
|
|
|
145
154
|
shows the system quote (or an explicit quote-data gap), all eight analyst statuses/summaries,
|
|
146
155
|
and every selected method seat's frozen stance plus readable explanation/status. Its final
|
|
147
156
|
section contains the exact selected-seat count and one statement per stable ID; `all` ends
|
|
148
|
-
with all
|
|
157
|
+
with all 27 statements. These are provisional method-seat outputs, never quotes from the
|
|
149
158
|
named people.
|
|
150
159
|
|
|
151
160
|
### Slash commands
|
|
@@ -156,7 +165,7 @@ rather than four in a menu of a hundred.
|
|
|
156
165
|
| Invocation | What runs | Model spend |
|
|
157
166
|
|---|---|---|
|
|
158
167
|
| `/alpha <ticker>` | Shows every master, confirms `1..N`/ranges/`all`, then full; plugin-managed headless is ≤30m | deterministic stance + one isolated voice worker per selected v3 seat |
|
|
159
|
-
| `/alpha <ticker> quick` | Shows all
|
|
168
|
+
| `/alpha <ticker> quick` | Shows all 27, confirms 1-4 (no `all`), then plugin-managed `quick_v1` (≤10m) | varies with selection |
|
|
160
169
|
| `/alpha <ticker> screen` | Mechanical filings screen only | **none** |
|
|
161
170
|
| `/alpha <ticker> options` | IV term structure, skew, positioning | **none** |
|
|
162
171
|
| `/alpha <ticker> news` | Dated filings and headlines | **none** |
|
|
@@ -197,7 +206,7 @@ Japanese and Korean; each worker receives the run language.
|
|
|
197
206
|
|
|
198
207
|
Quick is never inferred from impatience or a full-run failure. It runs only through the
|
|
199
208
|
plugin-managed headless `analyze_symbol(council_mode="quick")`; `plan_visible_run` rejects
|
|
200
|
-
quick. After the complete
|
|
209
|
+
quick. After the complete 27-seat display and a 1-4-seat confirmation, it executes:
|
|
201
210
|
|
|
202
211
|
1. `market_data`, `earnings_deep_dive`, `valuation_long_short` and
|
|
203
212
|
`news_industry_management` in one parallel wave;
|
|
@@ -234,7 +243,7 @@ Default stock-analysis runs are full runs, not lite summaries:
|
|
|
234
243
|
- News, industry context, supply chain, and management's words checked against their actions
|
|
235
244
|
- SEC filings, Form 4 insider transactions, buybacks, dilution, debt and capital allocation
|
|
236
245
|
- Investment-banking event analysis for M&A, ECM, debt, buybacks and strategic transactions
|
|
237
|
-
- A selectable bench of
|
|
246
|
+
- A selectable bench of 27 investor method lenses reading the same facts
|
|
238
247
|
- Bull researcher, bear researcher and portfolio-manager synthesis
|
|
239
248
|
|
|
240
249
|
Full is fail-fast at its mandatory evidence barrier. If a required evidence role still
|
|
@@ -275,7 +284,7 @@ not only in the docs, because the payload is what gets quoted downstream:
|
|
|
275
284
|
contracts — is dropped rather than averaged in, because a zero does not look like a gap,
|
|
276
285
|
it looks like a calm stock.
|
|
277
286
|
|
|
278
|
-
## 🏛️ The bench —
|
|
287
|
+
## 🏛️ The bench — 27 investor method lenses
|
|
279
288
|
|
|
280
289
|
Reconstructions of publicly documented methods, not anything the named people said. Each
|
|
281
290
|
states how it thinks, what it notices first, its characteristic challenge, and **its own
|
|
@@ -291,8 +300,8 @@ failure mode** — a seat that cannot name how it goes wrong will not flag it wh
|
|
|
291
300
|
| Modern | Aschenbrenner |
|
|
292
301
|
| v3 expansion | Damodaran · Ackman · Cathie Wood · Pabrai · Jhunjhunwala |
|
|
293
302
|
|
|
294
|
-
The
|
|
295
|
-
not
|
|
303
|
+
The `solo_test` catalog has 27 selectable physical v3 packs, but **27 physical packs is
|
|
304
|
+
not 27 approved method models**. Every seat is a provisional `operator_lens` backed by
|
|
296
305
|
project-derived proxy material; the 52 tools are executable test proxies, not human-approved
|
|
297
306
|
formula attribution. Operational and `method_model` counts are both zero, and production GA
|
|
298
307
|
remains fail-closed.
|
|
@@ -312,7 +321,7 @@ the verifier node shown here.
|
|
|
312
321
|
flowchart TD
|
|
313
322
|
U["@alphacouncil-agent<br/>ticker / question"] --> G[("Established facts<br/>filings · quotes · macro · options")]
|
|
314
323
|
G --> AG{{"Analyst council"}}
|
|
315
|
-
G --> MS{{"Master bench<br/>
|
|
324
|
+
G --> MS{{"Master bench<br/>27 lenses"}}
|
|
316
325
|
AG --> A1["📈 Market data"]
|
|
317
326
|
AG --> A2["💰 Earnings"]
|
|
318
327
|
AG --> A3["⚖️ Valuation"]
|
package/README.zh-CN.md
CHANGED
|
@@ -47,7 +47,7 @@ AlphaCouncil Agent 是一个面向**上市股票研究**的 Codex / Claude Code
|
|
|
47
47
|
|
|
48
48
|
| | |
|
|
49
49
|
|---|---|
|
|
50
|
-
| 🏛️ **是委员会,不是一家之言** | 完整模式默认 8 个证据席、最多 11 个;quick 固定 4 个并行证据席。两者都在研究前完整展示
|
|
50
|
+
| 🏛️ **是委员会,不是一家之言** | 完整模式默认 8 个证据席、最多 11 个;quick 固定 4 个并行证据席。两者都在研究前完整展示 27 个方法席。 |
|
|
51
51
|
| 🐂🐻 **天生对抗式** | 完整模式跑三轮多空交叉质询;quick 只跑一轮并行 Bull/Bear 陈述和短 PM,且明确不声称完成对抗 verifier。 |
|
|
52
52
|
| ⏱️ **完整 headless 有硬时限** | 插件托管 full 将 8 个分析师同波启动、每轮 Bull/Bear 同时启动,并在 30 分钟内保存终态;外部服务故障会明确 `incomplete`,不会静默漏席。 |
|
|
53
53
|
| 🔍 **可审计,不瞎编** | 每条结论都映射到 source ID;缺失数据写进「数据缺口」章节,绝不隐藏。 |
|
|
@@ -61,11 +61,15 @@ AlphaCouncil Agent 是一个面向**上市股票研究**的 Codex / Claude Code
|
|
|
61
61
|
|
|
62
62
|
## 1.0.0 交付了什么
|
|
63
63
|
|
|
64
|
-
`npm install -g alphacouncil-agent`
|
|
64
|
+
`npm install -g alphacouncil-agent` 装到的就是最新正式版。
|
|
65
65
|
|
|
66
|
-
27 个方法席,每一席跑自己的公式和自己的阈值,读的是从 SEC 申报、FRED
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
27 个方法席,每一席跑自己的公式和自己的阈值,读的是从 SEC 申报、FRED 序列、发行商持仓披露、
|
|
67
|
+
公开指数聚合值、Section 16 持股、跨市场价格历史和带日期的行业新闻构建的类型化事实。
|
|
68
|
+
54 个可执行工具。
|
|
69
|
+
|
|
70
|
+
活体行情实测、不用任何 fixture:27 席全部能在混合标的集合中的某个标的上给出立场,零契约失败。
|
|
71
|
+
一个此前**根本没有数据路径**的篮子(`SOX` 两个注册表里都没有)现在能产出 40 多个类型化事实,
|
|
72
|
+
而读它们的席位跑的是和分析个股时**同一套方法**。
|
|
69
73
|
|
|
70
74
|
席位的 admission 级别是 `operator_lens`。公式与阈值由 AI 撰写、可追溯到具名公开著作,但**尚未
|
|
71
75
|
经过人工评审**,真机四宿主端到端也**尚未执行** —— 所以语料报告的已验证 `method_model` 为
|
|
@@ -126,7 +130,7 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
|
|
|
126
130
|
同一目录还会写入每个分析师的 Markdown 文件和 `artifact_index.md` 文件索引。完整模式的摘要
|
|
127
131
|
会显示系统价格(或明确的行情缺口)、8 个分析师的状态/摘要,以及每个所选方法席冻结的立场
|
|
128
132
|
和可读解释/状态。摘要最后一节给出准确的所选席位数,并逐席输出一个陈词;选择 `all` 时
|
|
129
|
-
结尾就是完整
|
|
133
|
+
结尾就是完整 27 席。它们是项目派生的临时方法席输出,不是本人引语。
|
|
130
134
|
|
|
131
135
|
### 斜杠命令
|
|
132
136
|
|
|
@@ -135,7 +139,7 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
|
|
|
135
139
|
| 输入 | 跑什么 | 额度消耗 |
|
|
136
140
|
|---|---|---|
|
|
137
141
|
| `/alpha <ticker>` | 逐人展示全部大师,确认后运行 full;插件托管 headless ≤30 分钟 | 每个所选 v3 席为确定性立场 + 一个独立 voice worker |
|
|
138
|
-
| `/alpha <ticker> quick` | 展示全部
|
|
142
|
+
| `/alpha <ticker> quick` | 展示全部 27 席,确认 1-4 席(禁用 `all`),再跑插件托管 `quick_v1`(≤10 分钟) | 随选择数量变化 |
|
|
139
143
|
| `/alpha <ticker> screen` | 只跑机械筛选 | **零** |
|
|
140
144
|
| `/alpha <ticker> options` | 隐含波动率期限结构、偏斜、持仓分布 | **零** |
|
|
141
145
|
| `/alpha <ticker> news` | 带日期的申报与新闻 | **零** |
|
|
@@ -166,7 +170,7 @@ full 的交付摘要必须列出全部所选 stable master ID、全部 8 个分
|
|
|
166
170
|
### Quick v1 —— 有界,但不等于完整议会
|
|
167
171
|
|
|
168
172
|
不会因为用户着急或完整运行失败就自动切换 quick。Quick 只能通过插件托管的 headless
|
|
169
|
-
`analyze_symbol(council_mode="quick")` 运行;`plan_visible_run` 会拒绝 quick。完整展示
|
|
173
|
+
`analyze_symbol(council_mode="quick")` 运行;`plan_visible_run` 会拒绝 quick。完整展示 27 席并
|
|
170
174
|
确认 1-4 席后,执行图固定为:
|
|
171
175
|
|
|
172
176
|
1. `market_data`、`earnings_deep_dive`、`valuation_long_short`、
|
|
@@ -203,7 +207,7 @@ Claude Code、OpenCode、Grok Build 装完即可用。Codex 的 prompts 是用
|
|
|
203
207
|
- 新闻、行业背景、产业链,以及管理层言行核对
|
|
204
208
|
- SEC 申报、Form 4 内部人交易、回购、稀释、债务与资本配置
|
|
205
209
|
- 并购、股权与债务融资、回购等事件分析
|
|
206
|
-
- 可逐席选择的
|
|
210
|
+
- 可逐席选择的 27 个投资方法视角读取同一批事实
|
|
207
211
|
- 多头、空头与 PM 裁决
|
|
208
212
|
|
|
209
213
|
完整模式在 mandatory evidence barrier 上 fail-fast。任何必需证据席在一次有界 parse-only
|
|
@@ -250,7 +254,7 @@ Claude Code、OpenCode、Grok Build 装完即可用。Codex 的 prompts 是用
|
|
|
250
254
|
| v3 扩展 | 达莫达兰 · 阿克曼 · 凯茜·伍德 · Pabrai · 琼琼瓦拉 |
|
|
251
255
|
|
|
252
256
|
1.0.0 `solo_test` 目录已有 27 个可选的物理 v3 包,但 **27 个物理包不等于 27 个已获批的
|
|
253
|
-
方法模型**。所有
|
|
257
|
+
方法模型**。所有 27 席都只是 provisional `operator_lens`;52 个工具是可执行的
|
|
254
258
|
`provisional_derived_proxy` 测试代理,不是经过人工审批的公式归因。`operational` 与
|
|
255
259
|
`method_model` 数量均为 0,正式生产 GA 继续 fail-closed。
|
|
256
260
|
|
|
@@ -377,3 +381,7 @@ npm run check
|
|
|
377
381
|
<a href="#readme-top">↑ 回到顶部</a>
|
|
378
382
|
|
|
379
383
|
</div>
|
|
384
|
+
| 🧺 **一篮子不是一家公司,而且这套系统知道** | ETF 和指数走穿透定价:持有某公司 1% 的基金,对它 1% 的所有者收益有真实索取权 —— 所以公司方法**不改一个字**就能读一篮子。比率按权重聚合,绝对量变成基金自己的美元索取权,股本被拒绝因为它在组合层面没有意义。 |
|
|
385
|
+
| 📰 **一篮子有自己的行业新闻** | `SOX` 没有新闻发言人。它的行业由持仓的加权 SIC 组推出,所以 SOXX 自动解析成半导体,而且指数调仓后依然成立。没有单一行业占优时,按它**实际横跨的几个行业**分别查。 |
|
|
386
|
+
| 🌏 **你到底在赌什么** | 对大盘、对 KOSPI、对 KOSDAQ、对费城半导体的相关性,以及 11 个板块 SPDR 的离散度。交易日**按日期配对** —— 韩美假期不同,按数组位置压缩会拿周二比周三。 |
|
|
387
|
+
| 💵 **不允许被做假的资金流** | 申购减赎回、按 NAV 计价。只有申报份额或发行商自己的 AUM÷NAV 恒等式可以参与计算;由持仓反推的份额被拒绝,因为相减会把数字消掉、把误差留下。 |
|
|
@@ -238,7 +238,7 @@ export const coreSeats = Object.freeze({
|
|
|
238
238
|
proposed_native_decision_contract: {
|
|
239
239
|
schema_id: "expected_market_return_v1",
|
|
240
240
|
eligibility_facts: ["basket dividend yield", "basket earnings growth", "long bond yield", "holdings concentration"],
|
|
241
|
-
states: ["insufficient_return_inputs", "overpriced_market", "fair_expected_return", "low_cost_index_candidate"],
|
|
241
|
+
states: ["not_a_basket", "insufficient_return_inputs", "overpriced_market", "fair_expected_return", "low_cost_index_candidate"],
|
|
242
242
|
required_outputs: ["fundamental expected return", "expected return over the long bond", "valuation component", "breadth of the holding"],
|
|
243
243
|
fail_closed_reasons: ["no basket-level yield", "no earnings growth input", "no holdings breakdown"],
|
|
244
244
|
},
|
|
@@ -269,10 +269,14 @@ export const coreSeats = Object.freeze({
|
|
|
269
269
|
// The method is about owning the whole market. Without a holdings breakdown you cannot
|
|
270
270
|
// tell whether the fund is the market or a concentrated bet dressed as an index.
|
|
271
271
|
{
|
|
272
|
-
condition_id: "master_bogle.
|
|
272
|
+
condition_id: "master_bogle.subject_is_a_basket",
|
|
273
273
|
condition: { op: "exists", value: { fact_id: "fund.top_ten_weight" } },
|
|
274
|
-
|
|
275
|
-
|
|
274
|
+
// A holdings breakdown exists for a basket and cannot exist for a single company, so
|
|
275
|
+
// this is the seat's scope test rather than a data check. Bogle's method prices what
|
|
276
|
+
// a whole market earns; asked about one business it declines by construction, and the
|
|
277
|
+
// state says that rather than naming a fact the subject was never going to have.
|
|
278
|
+
on_false: { native_state: "not_a_basket", common_stance: "out_of_scope" },
|
|
279
|
+
on_uncomputable: { native_state: "not_a_basket", common_stance: "out_of_scope" },
|
|
276
280
|
},
|
|
277
281
|
],
|
|
278
282
|
},
|
|
@@ -1072,7 +1072,7 @@ const seats = [
|
|
|
1072
1072
|
decision: {
|
|
1073
1073
|
schemaId: "expected_market_return_v1",
|
|
1074
1074
|
eligibility: ["basket dividend yield", "basket earnings growth", "long bond yield", "holdings concentration"],
|
|
1075
|
-
states: ["insufficient_return_inputs", "overpriced_market", "fair_expected_return", "low_cost_index_candidate"],
|
|
1075
|
+
states: ["not_a_basket", "insufficient_return_inputs", "overpriced_market", "fair_expected_return", "low_cost_index_candidate"],
|
|
1076
1076
|
outputs: ["fundamental expected return", "expected return over the long bond", "valuation component", "breadth of the holding"],
|
|
1077
1077
|
failClosed: ["no basket-level yield", "no earnings growth input", "no holdings breakdown"],
|
|
1078
1078
|
},
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# v1.1 — Every seat reaches a verdict, and says something worth reading
|
|
2
|
+
|
|
3
|
+
Two real runs are the specification for this plan. An INTC run put six seats into the
|
|
4
|
+
deterministic fallback and a GLW run put **all eight** selected seats at `out_of_scope` with
|
|
5
|
+
weight zero — and the filings contained the data every one of them said was missing.
|
|
6
|
+
|
|
7
|
+
Everything below is either a defect those runs exposed or the reason a seat that did speak said
|
|
8
|
+
one sentence.
|
|
9
|
+
|
|
10
|
+
## What is already fixed
|
|
11
|
+
|
|
12
|
+
Landed on `main` before this plan, and the measurements below are after it:
|
|
13
|
+
|
|
14
|
+
- **Tag aliases.** `grossProfit` resolved for five of fifteen large caps, because most filers
|
|
15
|
+
never tag it and publish revenue and cost of revenue separately. It is now derived from those.
|
|
16
|
+
`capex` missed Corning entirely, which files `PaymentsForCapitalImprovements` — that single
|
|
17
|
+
absent alias removed owner earnings, and with it Buffett and Ackman, for every issuer tagging
|
|
18
|
+
it that way. `interestExpense` and `operatingIncome` gained the aliases four more filers use.
|
|
19
|
+
Gross margin now resolves for all fourteen testable filers; GLW went from missing owner
|
|
20
|
+
earnings to 7/7 screen rules and 7/8 derived facts.
|
|
21
|
+
- **The maturity suffix stopped leaking into sentences.** Statements read "using the X
|
|
22
|
+
provisional operator lens method". The stripper existed and was not applied on that path.
|
|
23
|
+
|
|
24
|
+
## The five defects that remain
|
|
25
|
+
|
|
26
|
+
### 1. A seat cannot reach its own answer about an absent fact
|
|
27
|
+
|
|
28
|
+
`master_pabrai` is authored with a veto that says: no reconstructable downside floor means
|
|
29
|
+
pass. On INTC the floor was absent, so the **eligibility gate failed first** and the seat
|
|
30
|
+
reported "missing `valuation.downside_floor`". The veto the author wrote for exactly this case
|
|
31
|
+
never ran. Same shape for `graham.no_asset_floor`, `klarman.no_reconstructable_downside`,
|
|
32
|
+
`burry.cannot_survive_the_wait`, `fisher.no_worthwhile_margin`.
|
|
33
|
+
|
|
34
|
+
The cause is mechanical: those facts are **tool inputs**, so `authoredFactUse` marks them
|
|
35
|
+
required, and a missing required fact ends the run before any veto is evaluated.
|
|
36
|
+
|
|
37
|
+
**Fix.** A hard veto whose condition references a fact is the seat's declared handling of that
|
|
38
|
+
fact. Before failing a seat for a missing required fact, evaluate the vetoes that reference it;
|
|
39
|
+
if one fires on absence, that veto's `on_trigger` is the decision. This is not a new policy — it
|
|
40
|
+
is running the policy the author already wrote, in the case it was written for.
|
|
41
|
+
|
|
42
|
+
### 2. Market-level facts are fetched only for baskets
|
|
43
|
+
|
|
44
|
+
`master_asness`, `master_marks` and `master_damodaran` require
|
|
45
|
+
`index.aggregate_earnings_yield`. On INTC — a company — the pipeline never fetched it, so three
|
|
46
|
+
seats reported a missing fact on every single-company run in the product's history.
|
|
47
|
+
|
|
48
|
+
This is a category error in the plumbing, not in the seats. The market's aggregate earnings
|
|
49
|
+
yield is not a property of the subject; it is the yardstick the subject is measured against.
|
|
50
|
+
Damodaran's implied-ERP method needs it, Asness's Fed-model critique **is about it**, and Marks
|
|
51
|
+
reads it as where the cycle stands. All three are asking about the market, correctly.
|
|
52
|
+
|
|
53
|
+
**Fix.** Fetch the broad-market index aggregate for every US subject, company or basket. The
|
|
54
|
+
subject decides whose *holdings* are read; it does not decide whether the market has a P/E.
|
|
55
|
+
|
|
56
|
+
### 3. Bogle has no way to decline a company
|
|
57
|
+
|
|
58
|
+
`master_bogle` prices a basket. Asked about INTC it reported "missing `index.dividend_yield`",
|
|
59
|
+
which reads as a data gap and is really a scope statement. Its build spec plans a
|
|
60
|
+
`single_business` veto that was never authored.
|
|
61
|
+
|
|
62
|
+
**Fix.** Author it. The seat declines a single operating company by construction and says so in
|
|
63
|
+
its own words, the way `li_lu` and `forensic_short` already do.
|
|
64
|
+
|
|
65
|
+
### 4. A subject can resolve to a registrant with no filings
|
|
66
|
+
|
|
67
|
+
`XOM` resolves through SEC's own ticker file to **ExxonMobil Holdings Corp**, CIK 0002115436, a
|
|
68
|
+
newly formed entity with **zero** us-gaap tags. The operating history — 438 tags — sits under
|
|
69
|
+
CIK 0000034088. Every fact then reports as missing, individually, with no line saying the
|
|
70
|
+
registrant itself is empty.
|
|
71
|
+
|
|
72
|
+
**Fix.** Detect an empty Company Facts document and say so as one diagnosis rather than eight.
|
|
73
|
+
Then attempt recovery: the submissions record carries former names, and a former name that
|
|
74
|
+
resolves to a registrant with facts is the predecessor. Where recovery fails, the run states
|
|
75
|
+
which registrant it read and that it has no XBRL history — actionable, rather than a mystery.
|
|
76
|
+
|
|
77
|
+
### 5. Seats say one sentence
|
|
78
|
+
|
|
79
|
+
The five-field voice contract exists — `what_i_see`, `how_my_method_reads_it`, `would_i_act`,
|
|
80
|
+
`what_changes_my_mind`, `where_i_disagree` — and the paths that actually run fill a single
|
|
81
|
+
`voice_statement` instead. So a seat that computed a real verdict from real facts reports it in
|
|
82
|
+
one line, and the reader cannot see what it looked at.
|
|
83
|
+
|
|
84
|
+
**Fix.** The deterministic record already contains everything the fields need: which facts were
|
|
85
|
+
read and their values, which scoring rules hit and missed, which vetoes fired, the band the
|
|
86
|
+
score landed in, and the conditions that would change it. Compose the five fields **from the
|
|
87
|
+
frozen decision** rather than asking a model to restate a sentence. This is the honest version:
|
|
88
|
+
the seat's explanation becomes a rendering of what it actually computed, and it cannot drift
|
|
89
|
+
from the verdict because it is derived from it.
|
|
90
|
+
|
|
91
|
+
Declined seats get the same structure: what was looked for, why the method needs it, what would
|
|
92
|
+
change the answer.
|
|
93
|
+
|
|
94
|
+
## Order of work
|
|
95
|
+
|
|
96
|
+
Each step is independently verifiable, and the measurement after each is the same one: how many
|
|
97
|
+
seats reach a stance on a mixed symbol set, with contract failures counted separately.
|
|
98
|
+
|
|
99
|
+
| step | defect | expected effect |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| 1 | market-level facts for companies (#2) | 3 seats on every company run |
|
|
102
|
+
| 2 | absence-handling vetoes reachable (#1) | 4–5 seats, converted from "missing" to a verdict |
|
|
103
|
+
| 3 | bogle declines a company (#3) | 1 seat, and it stops reading as a data gap |
|
|
104
|
+
| 4 | empty registrant (#4) | whole-run failures become one named diagnosis |
|
|
105
|
+
| 5 | five-field voice from the frozen decision (#5) | every speaking seat, which is the point |
|
|
106
|
+
|
|
107
|
+
Steps 1–3 are what turn "缺少数据" into an answer. Step 5 is what makes the answer worth
|
|
108
|
+
reading. Step 4 is small and prevents the worst failure mode, which is a run where everything is
|
|
109
|
+
missing and nothing says why.
|
|
110
|
+
|
|
111
|
+
## What this plan does not do
|
|
112
|
+
|
|
113
|
+
It does not make a seat speak by lowering a threshold or by substituting a proxy for a fact the
|
|
114
|
+
method actually needs. A seat that declines after reading the evidence is a result; the defect
|
|
115
|
+
was never that seats declined, it was that they could not tell the reader whether they had
|
|
116
|
+
declined or had simply not been given anything to read.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"formal_h_satisfied": false,
|
|
19
19
|
"human_reference": false,
|
|
20
20
|
"input_binding": {
|
|
21
|
-
"input_hash": "sha256:
|
|
21
|
+
"input_hash": "sha256:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
22
22
|
"path": "simulation-input.json"
|
|
23
23
|
},
|
|
24
24
|
"network_allowed": false,
|
|
@@ -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:699e79ff212ba32d287d8847828b46e6bd46076519c6dc8dca5e9ac09f6d769f",
|
|
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:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
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:423ac48286f88cd5e95942dce855507559d54fe7fd3a5481327424c4e6966f85",
|
|
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"
|
|
@@ -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:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
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:9a10ff578582c9476676ac454577d40e71aeb83dea128275e76d1d7e1d566f6c",
|
|
41
41
|
"run_id": "C",
|
|
42
42
|
"schema_version": 1,
|
|
43
43
|
"simulation_scope": "prompt-catalog binding only; prompt-only LLM outputs are not simulated"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"formal_h_satisfied": false,
|
|
31
31
|
"human_reference": false,
|
|
32
32
|
"input_binding": {
|
|
33
|
-
"input_hash": "sha256:
|
|
33
|
+
"input_hash": "sha256:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
34
34
|
"path": "simulation-input.json"
|
|
35
35
|
},
|
|
36
36
|
"network_allowed": false,
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
"verifier_checks": []
|
|
235
235
|
},
|
|
236
236
|
"reviewer_kind": "ai",
|
|
237
|
-
"run_artifact_hash": "sha256:
|
|
237
|
+
"run_artifact_hash": "sha256:4ea0207eb1f9090b7a841585a268d8bef366a61d23b22bdeee0295bb52d47610",
|
|
238
238
|
"run_id": "D13",
|
|
239
239
|
"schema_version": 1,
|
|
240
240
|
"simulation_scope": "13 physical provisional deterministic seats on frozen synthetic typed facts"
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"formal_h_satisfied": false,
|
|
45
45
|
"human_reference": false,
|
|
46
46
|
"input_binding": {
|
|
47
|
-
"input_hash": "sha256:
|
|
47
|
+
"input_hash": "sha256:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
48
48
|
"path": "simulation-input.json"
|
|
49
49
|
},
|
|
50
50
|
"network_allowed": false,
|
|
51
51
|
"production_effect": "none",
|
|
52
|
-
"result_hash": "sha256:
|
|
52
|
+
"result_hash": "sha256:a02104172ac2dac35447f40aa9e0a075fffdedad67111b08055be4fe108e3bc6",
|
|
53
53
|
"results": {
|
|
54
54
|
"blocked_fail_closed_count": 1,
|
|
55
55
|
"completion_status": "completed_machine_simulation",
|
|
@@ -417,18 +417,18 @@
|
|
|
417
417
|
"structured_decision_hash": "sha256:c7a93f8c67eb3c423fc94ef0d51bb868ab5444d75aba2d17455e9ce0a20965d1"
|
|
418
418
|
},
|
|
419
419
|
{
|
|
420
|
-
"anonymous_method_hash": "sha256:
|
|
421
|
-
"deterministic_core_hash": "sha256:
|
|
420
|
+
"anonymous_method_hash": "sha256:7e72f0c819a737e9e2c95938807bd1f856427fefbff42cc6a52dad7c4b9648b9",
|
|
421
|
+
"deterministic_core_hash": "sha256:aedc8b29c59176e6cf5994b51682a2fb1cfe2cb62f0f5882f4de16c220ce00f6",
|
|
422
422
|
"fact_pack_hash": "sha256:d035c7f7cbace9a80cce787b1ea3204f7b85437e4552dec34681765f0ab3af26",
|
|
423
|
-
"frozen_decision_hash": "sha256:
|
|
423
|
+
"frozen_decision_hash": "sha256:f82a1fb3c31d68ae5c1ce9e93fa6d1f61f3f373c14a999d7ac52bc398b8f1ca4",
|
|
424
424
|
"native_state": "provisional_fair_expected_return",
|
|
425
|
-
"pack_hash": "sha256:
|
|
425
|
+
"pack_hash": "sha256:cbc29f36bcf214b24045d582bf954d06cda6cec3aab06c41f650f7410df510f0",
|
|
426
426
|
"persona_id": "master_bogle",
|
|
427
|
-
"policy_execution_hash": "sha256:
|
|
427
|
+
"policy_execution_hash": "sha256:3f4dfca52772b1f9ad7adec925acdba1d45bdabcd9a5d1272646d86601e20c4c",
|
|
428
428
|
"score_ratio": 0.6666666666666666,
|
|
429
429
|
"stance": "cautious",
|
|
430
430
|
"status": "executed",
|
|
431
|
-
"structured_decision_hash": "sha256:
|
|
431
|
+
"structured_decision_hash": "sha256:71b52271b65d7229fe95524d953262eb175380066709f7bf50e4ee9386083a0e"
|
|
432
432
|
}
|
|
433
433
|
],
|
|
434
434
|
"deterministic_execution_count": 27,
|
|
@@ -449,7 +449,7 @@
|
|
|
449
449
|
"verifier_checks": []
|
|
450
450
|
},
|
|
451
451
|
"reviewer_kind": "ai",
|
|
452
|
-
"run_artifact_hash": "sha256:
|
|
452
|
+
"run_artifact_hash": "sha256:eb5d0df7917c119e07f82f7d7b84b4d4e84c6423753462ca7a26f9be16ebfef8",
|
|
453
453
|
"run_id": "D26",
|
|
454
454
|
"schema_version": 1,
|
|
455
455
|
"simulation_scope": "27 physical provisional deterministic seats on frozen synthetic typed facts"
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"formal_h_satisfied": false,
|
|
31
31
|
"human_reference": false,
|
|
32
32
|
"input_binding": {
|
|
33
|
-
"input_hash": "sha256:
|
|
33
|
+
"input_hash": "sha256:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
34
34
|
"path": "simulation-input.json"
|
|
35
35
|
},
|
|
36
36
|
"network_allowed": false,
|
|
37
37
|
"production_effect": "none",
|
|
38
|
-
"result_hash": "sha256:
|
|
38
|
+
"result_hash": "sha256:cae640f5823d7fb27090bf7591d444917cc7f5bfe339cf57151f2fae3669fdcd",
|
|
39
39
|
"results": {
|
|
40
40
|
"blocked_fail_closed_count": 0,
|
|
41
41
|
"completion_status": "completed_machine_simulation",
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
"verifier_checks": [
|
|
235
235
|
{
|
|
236
236
|
"check_id": "physical_input_hash_binding",
|
|
237
|
-
"input_hash": "sha256:
|
|
237
|
+
"input_hash": "sha256:cc4ffaa54c9477000383adc82ba43800c3725c331638f2f8f63cad15582a128f",
|
|
238
238
|
"status": "pass"
|
|
239
239
|
},
|
|
240
240
|
{
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
]
|
|
252
252
|
},
|
|
253
253
|
"reviewer_kind": "ai",
|
|
254
|
-
"run_artifact_hash": "sha256:
|
|
254
|
+
"run_artifact_hash": "sha256:3817bcac7b4ce7d1d0ddf06381b31b463b05790461f38de6b17e26ae2250f297",
|
|
255
255
|
"run_id": "E:D13",
|
|
256
256
|
"schema_version": 1,
|
|
257
257
|
"simulation_scope": "D13 deterministic seats plus machine-only hash, rederivation and fail-closed checks"
|