alphacouncil-agent 1.0.3 → 1.0.13

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 (81) hide show
  1. package/.claude/agents/alphacouncil-insider_sec.md +19 -0
  2. package/.claude/commands/alpha.md +48 -19
  3. package/.claude-plugin/marketplace.json +2 -2
  4. package/.claude-plugin/plugin.json +1 -1
  5. package/.codex-plugin/plugin.json +1 -1
  6. package/.grok/agents/alphacouncil-insider_sec.md +19 -0
  7. package/.grok/commands/alpha.md +48 -19
  8. package/.opencode/agent/alphacouncil-insider_sec.md +19 -0
  9. package/.opencode/command/alpha.md +48 -19
  10. package/CHANGELOG.md +307 -0
  11. package/CLAUDE.md +55 -13
  12. package/README.ja.md +42 -16
  13. package/README.md +70 -27
  14. package/README.zh-CN.md +53 -20
  15. package/SECURITY.md +11 -1
  16. package/commands/alpha.md +48 -19
  17. package/data/build-profile.v1.json +1 -1
  18. package/docs/INSTALL.md +9 -6
  19. package/docs/examples/final_report.SOX.zh.md +442 -0
  20. package/docs/report-contract.md +27 -3
  21. package/knowledge/ai-assisted-solo/experiments/runs/a.json +4 -4
  22. package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
  23. package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
  24. package/knowledge/ai-assisted-solo/experiments/runs/d13.json +16 -16
  25. package/knowledge/ai-assisted-solo/experiments/runs/d26.json +30 -30
  26. package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +19 -19
  27. package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +33 -33
  28. package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +34 -34
  29. package/knowledge/ai-assisted-solo/experiments/simulation-input.json +84 -84
  30. package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +19 -19
  31. package/knowledge/solo-test/masters/master_ackman/manifest.json +8 -8
  32. package/knowledge/solo-test/masters/master_aschenbrenner/manifest.json +8 -8
  33. package/knowledge/solo-test/masters/master_asness/manifest.json +8 -8
  34. package/knowledge/solo-test/masters/master_bogle/manifest.json +8 -8
  35. package/knowledge/solo-test/masters/master_buffett/manifest.json +8 -8
  36. package/knowledge/solo-test/masters/master_burry/manifest.json +8 -8
  37. package/knowledge/solo-test/masters/master_cathie_wood/manifest.json +8 -8
  38. package/knowledge/solo-test/masters/master_dalio/manifest.json +8 -8
  39. package/knowledge/solo-test/masters/master_damodaran/manifest.json +8 -8
  40. package/knowledge/solo-test/masters/master_druckenmiller/manifest.json +8 -8
  41. package/knowledge/solo-test/masters/master_duan_yongping/manifest.json +8 -8
  42. package/knowledge/solo-test/masters/master_fisher/manifest.json +8 -8
  43. package/knowledge/solo-test/masters/master_forensic_short/manifest.json +8 -8
  44. package/knowledge/solo-test/masters/master_graham/manifest.json +8 -8
  45. package/knowledge/solo-test/masters/master_jhunjhunwala/manifest.json +8 -8
  46. package/knowledge/solo-test/masters/master_klarman/manifest.json +8 -8
  47. package/knowledge/solo-test/masters/master_li_lu/manifest.json +8 -8
  48. package/knowledge/solo-test/masters/master_lynch/manifest.json +8 -8
  49. package/knowledge/solo-test/masters/master_marks/manifest.json +8 -8
  50. package/knowledge/solo-test/masters/master_munger/manifest.json +8 -8
  51. package/knowledge/solo-test/masters/master_natenberg/manifest.json +8 -8
  52. package/knowledge/solo-test/masters/master_pabrai/manifest.json +8 -8
  53. package/knowledge/solo-test/masters/master_simons/manifest.json +8 -8
  54. package/knowledge/solo-test/masters/master_sinclair/manifest.json +8 -8
  55. package/knowledge/solo-test/masters/master_soros/manifest.json +8 -8
  56. package/knowledge/solo-test/masters/master_taleb/manifest.json +8 -8
  57. package/knowledge/solo-test/masters/master_thorp/manifest.json +8 -8
  58. package/mcp/lib/constants.mjs +82 -4
  59. package/mcp/lib/council-options.mjs +8 -4
  60. package/mcp/lib/council-selection.mjs +79 -1
  61. package/mcp/lib/fundamentals.mjs +50 -10
  62. package/mcp/lib/gates.mjs +42 -0
  63. package/mcp/lib/grounding.mjs +27 -1
  64. package/mcp/lib/industry.mjs +9 -1
  65. package/mcp/lib/markdown.mjs +25 -1
  66. package/mcp/lib/orchestrator.mjs +187 -24
  67. package/mcp/lib/personas/engine.mjs +57 -12
  68. package/mcp/lib/personas-v3/runtime.mjs +28 -0
  69. package/mcp/lib/prompts.mjs +72 -3
  70. package/mcp/lib/rpc.mjs +93 -7
  71. package/mcp/lib/run-store.mjs +3 -0
  72. package/mcp/lib/screen.mjs +46 -46
  73. package/mcp/lib/sec.mjs +25 -10
  74. package/mcp/lib/voice-from-decision.mjs +13 -5
  75. package/mcp/lib/weights.mjs +9 -2
  76. package/mcp/lib/xbrl-series.mjs +31 -5
  77. package/package.json +2 -1
  78. package/personas/analysts/insider_sec.md +38 -0
  79. package/scripts/lib/persona-v3-solo-test-packs.mjs +14 -8
  80. package/scripts/review-persona-v3-solo-formulas.mjs +5 -3
  81. package/skills/alphacouncil-agent/SKILL.md +80 -19
package/CHANGELOG.md CHANGED
@@ -2,6 +2,313 @@
2
2
 
3
3
  Notable changes per release. Dates are UTC.
4
4
 
5
+ ## [1.0.13] — 2026-07-30
6
+
7
+ ### Fixed
8
+
9
+ - **Screen rules pair both series by fiscal period end, never by array position.** Every
10
+ two-series elimination rule (`roe_10y`, `gross_margin`, `interest_cover`, `fcf_5y`,
11
+ `ocf_over_ni`, `net_margin`) used to slice the last N entries of each series independently
12
+ and divide position-by-position. A gap in one series — a tag the filer stopped using, a
13
+ year reported under an out-of-catalog alias — shifted every later year onto the wrong
14
+ counterpart while the provenance block still showed a clean range: this year's EBIT divided
15
+ by a two-year-old interest figure read as a confident 2.5x cover, and an equity series
16
+ missing one middle year shifted a decade of ROE by one year. Rules now drop a year present
17
+ on only one side, report the pair count as their coverage, and `interest_cover` is
18
+ `skipped` when the latest EBIT year has no same-period interest figure — a stale
19
+ denominator is a gap, not a cover ratio. Four regression tests pin the misalignment
20
+ scenarios.
21
+ - **The SEC universe cache in peer matching expires after six hours** instead of living for
22
+ the whole MCP process. A resident server that never re-read the ticker file silently lost
23
+ every new listing and rename from `industry_peers`, with no gap recorded anywhere.
24
+
25
+ ### Changed
26
+
27
+ - **The three READMEs, CLAUDE.md and INSTALL.md now agree on the counts**: 27 selectable
28
+ lenses (the bench table had listed 26 — Bogle was missing), 31 keyless MCP tools, 54
29
+ solo-test proxy tools. INSTALL.md no longer pins its examples to 1.0.0.
30
+ - **README leads with the recorded demo and a 30-second zero-cost first run** (`/alpha AAPL
31
+ news`), links a complete real full-council report
32
+ (`docs/examples/final_report.SOX.zh.md`), states the Codex CLI prerequisite for headless
33
+ paths next to the install commands instead of below the fold, and compresses the
34
+ governance status into one honest sentence linking the release contract.
35
+ - **SECURITY.md discloses what was already true**: `preflight_permissions` reads host
36
+ configuration files read-only to detect silent web-search downgrades, workers run in a
37
+ read-only sandbox, and the supported-versions line no longer claims the project is
38
+ pre-1.0.
39
+
40
+ ## [1.0.12] — 2026-07-30
41
+
42
+ ### Changed
43
+
44
+ - **The depth tier is asked at the selection gate instead of typed as an argument, and the menu
45
+ publishes the predicted time.** `begin_council_selection` now returns `pace_options`: one row
46
+ per tier carrying `expected_minutes`, `hard_ceiling_minutes`, the per-seat evidence budget and
47
+ the per-round debate budget. Both numbers are published on purpose — a ceiling shown on its own
48
+ reads as the estimate, and then every `fast` run looks like it takes fifteen minutes when the
49
+ serial worst case is twelve.
50
+
51
+ ```
52
+ 本次分析要跑多深?(默认 2)
53
+ 1. 快速 预计 ~12 分钟(上限 15) 每证据席 3.5 分钟,每轮辩论每侧 90 秒
54
+ 2. 标准 预计 ~20 分钟(上限 30) 每证据席 6 分钟,每轮辩论每侧 150 秒 ← 默认
55
+ 3. 深入 预计 ~44 分钟(上限 60) 每证据席 12 分钟,每轮辩论每侧 360 秒
56
+ ```
57
+
58
+ The tier is the gate's second decision, so it is taken in the same interaction as the seat
59
+ catalog and **binds into the receipt**. An execution call may repeat the confirmed tier but
60
+ never change it: a user who approved fifteen minutes cannot end up running an hour, and the
61
+ reverse cannot happen either. `status.json` records which tier produced the run.
62
+
63
+ A speed named in the request (`/alpha NOW slow`) is now a **prefill**, exactly like a named
64
+ master: it highlights the row, the menu is still shown, the answer is still taken. No answer
65
+ means `normal`. Quick returns an empty menu and rejects the field.
66
+
67
+ ### Fixed
68
+
69
+ - **A tier confirmed at the gate was lost at consumption.** `council_pace` reached the receipt
70
+ but not the consumed selection, so a run approved as `slow` silently fell back to the
71
+ 30-minute default with nothing in the record showing the switch — and the execution-time
72
+ mismatch guard could not fire because it had nothing to compare against.
73
+
74
+ ## [1.0.11] — 2026-07-30
75
+
76
+ ### Fixed
77
+
78
+ - **A depth tier was a timeout with no plan behind it, so `fast` bought unfinished work rather
79
+ than faster work.** 1.0.10 shipped three tiers that all sent the identical prompt: `fast` asked
80
+ every worker for exactly the same output with 40% less time, which does not produce a faster
81
+ good packet — it produces one the worker could not finish, arriving `degraded` or not at all.
82
+ There was no pace awareness anywhere in the prompt layer.
83
+
84
+ A tier now shapes the worker's output as well as capping its clock. Because an LLM call's wall
85
+ clock is dominated by the tokens it generates, running faster without losing information means
86
+ asking for the same information in less prose:
87
+
88
+ - `fast` — at most six arguments, one to two sentences each, cite a source ID instead of
89
+ re-quoting the evidence, no opponent recap, no methodology preamble. Every figure, every
90
+ scoped source ID and every required report section stays mandatory; price levels and
91
+ invalidation conditions may not be compressed, because they are the only actionable part of
92
+ the report. Dropping an argument is acceptable; dropping a source ID or filling a number from
93
+ memory never is. A short packet that names its gap beats a complete-looking one built from
94
+ memory.
95
+ - `slow` — write the derivation out step by step with its basis, assumptions and sensitivity;
96
+ handle the opponent's arguments one at a time; state your own falsification conditions.
97
+ Longer is not better, so repetition still gets cut.
98
+ - `normal` — adds nothing at all, so its prompts stay byte-identical to the reviewed golden.
99
+ - Quick keeps its own existing shaping and receives no tier, so no prompt ever carries two
100
+ different length budgets.
101
+
102
+ The shaping reaches the evidence seats, both debaters, the PM and the method voice workers, in
103
+ the run's language.
104
+
105
+ ## [1.0.10] — 2026-07-30
106
+
107
+ ### Added
108
+
109
+ - **Three full-council depth tiers, selected with `council_pace`: `fast` 15 minutes, `normal`
110
+ (default) 30, `slow` 60.** All three are the same `full_v2` contract — eight evidence seats,
111
+ every selected method, three debate rounds, the PM — so a tier changes how long each seat may
112
+ think, never which seats run. Quick rejects the field: it is a smaller contract, not a slower
113
+ one. The tier is recorded in `status.json`, because two runs of one symbol at different paces
114
+ are not the same analysis.
115
+
116
+ A tier moves every per-stage cap together with the total, which is the part that actually buys
117
+ depth. Raising only the total would leave a 60-minute run finishing in twenty minutes with
118
+ forty idle, because what bounds each worker is its per-stage cap; lowering only the total would
119
+ starve the later stages and terminate `incomplete` with the debate missing.
120
+
121
+ | `council_pace` | total | evidence / seat | method / seat | debate / round | PM |
122
+ | --- | --- | --- | --- | --- | --- |
123
+ | `fast` | 15 min | 3.5 min | 1 min | 90 s | 2 min |
124
+ | `normal` | 30 min | 6 min | 2 min | 150 s | 3 min |
125
+ | `slow` | 60 min | 12 min | 4 min | 6 min | 8 min |
126
+
127
+ `/alpha <TICKER> fast` and `/alpha <TICKER> slow` reach it from the command surface. A test
128
+ pins the property that makes a tier coherent: every tier's stages fit inside its own budget
129
+ with headroom, and no stage cap is allowed to stay flat as the tier widens.
130
+
131
+ ### Changed
132
+
133
+ - **The full-council ceiling is now the selected tier's total rather than a single 30-minute
134
+ maximum.** A caller or environment may still only lower the applicable budget; a
135
+ `total_timeout_ms` above the tier's total is rejected and names the tier that would allow it.
136
+ `ALPHACOUNCIL_FULL_TOTAL_MS` becomes an operator cap that only ever lowers a tier, instead of
137
+ doubling as the default budget — as the default it silently held the 60-minute tier to 30.
138
+
139
+ ## [1.0.9] — 2026-07-30
140
+
141
+ Seven fixes found by auditing one real 148-minute visible NOW council against its own
142
+ artifacts. Every one of them was quiet: the run produced a complete report each time.
143
+
144
+ ### Fixed
145
+
146
+ - **A hashed hard veto made two seats guess, in writing, which condition had vetoed them.**
147
+ Condition ids are hashed before a policy runs so the decision layer cannot recognise the seat.
148
+ The voice layer reversed that for scoring conditions but not for vetoes, tool output ids or
149
+ `common_projection.veto_ids`, so a seat published `anon_e41f54d07b56b0ff5` where it meant
150
+ `master_marks.euphoria`. Both vetoed seats on NOW speculated their veto came from a
151
+ 424.67% dilution figure that was a stock-split artefact; the actual veto was a market-level
152
+ reading. Past the freeze the seat is named in the report and in its own worker prompt, so the
153
+ hash protected nothing. Also fixes a latent mis-mapping: the positional fallback assumed the
154
+ executor returns hits, misses and uncomputable rules in declaration order, and would have
155
+ published two condition names swapped for any seat with a mixed split.
156
+ - **`plan_visible_run` returned 311,007 characters and the host rejected the whole plan.**
157
+ Prompts now always land in `<run>/prompts/` with `prompt_file` on every agent spec, and
158
+ `prompts_inline: false` says the bodies were left out on purpose. What drives the size is the
159
+ grounding each prompt embeds, not the seat count.
160
+ - **A portfolio-manager packet with no `report_markdown` was accepted, then failed the report
161
+ gate with 21 missing sections.** The gate could only run after assembly, so the whole PM turn
162
+ was spent first. Submission now rejects a body that cannot pass, before the idempotency lock,
163
+ and names each owed section with the heading to use. System-appended sections are never asked
164
+ of an author. The revision path stays for defects only the assembled report can see.
165
+ - **One absent XBRL alias killed three facts on a company whose debt is on the face of its
166
+ balance sheet.** ServiceNow's FY2020 and FY2025 balance sheets carry no straight debt tag: the
167
+ only debt instant either year is `ConvertibleLongTermNotesPayable`. Total debt therefore read
168
+ as unknown, and because unknown debt is correctly refused rather than treated as zero,
169
+ leverage, downside asset value and incremental return on capital all died — which is why a
170
+ seat requiring incremental return on capital abstained. The convertible aliases are appended
171
+ last, where an earlier alias still wins a year outright, so coverage is strictly additive: a
172
+ filer that resolves its debt today resolves to the identical number. On real ServiceNow
173
+ Company Facts this turns four recorded gaps into one.
174
+ - **A rate-limited filing document was lost where a rate-limited JSON call was retried.** Every
175
+ SEC JSON endpoint backed off on 429/503; `fetchFilingDocument` threw on the first one, so the
176
+ documents carrying the actual disclosure were the easiest evidence in a run to lose, on the
177
+ path SEC throttles hardest.
178
+
179
+ ### Changed
180
+
181
+ - **A seat's statement reaches the handoff instead of its metadata.** The per-seat line led with
182
+ the first 520 characters of background and put the frozen-record tag in the same sentence, so
183
+ the part always cut was the seat's conclusion — seven seats that all spoke read as seven seats
184
+ that had not. Each seat now leads with the reading that decided it and the action it implies,
185
+ quotes its statement at a budget that survives a paragraph, and carries provenance on its own
186
+ line.
187
+ - **A frozen abstention no longer spends a model worker to restate itself.** A seat whose gate
188
+ never opened has no reading to explain, and its deterministic statement now names the
189
+ condition that closed the gate and states that an abstention is not a bearish vote — all an
190
+ `out_of_scope` seat is asked to say. Four such seats took most of the method phase on NOW.
191
+ `ALPHACOUNCIL_VOICE_ABSTAINING_SEATS=1` restores a worker for every seat.
192
+ - `insider_sec` carries an explicit EDGAR retrieval order, a same-URL backoff rule, and a
193
+ mandatory degradation rule. On NOW it tried eight different URLs in a row, was rate-limited on
194
+ all of them, and read no original filing.
195
+
196
+ ## [1.0.8] — 2026-07-30
197
+
198
+ ### Changed
199
+
200
+ - **The catalog stops repeating a review-status warning next to every seat.** The owner
201
+ reviewed and accepted the method attributions, so `operator_label` is now just the method's
202
+ name and the selection identity says what a seat IS — "a method model, not the person's own
203
+ words" — instead of "project-derived and not human reviewed" twenty-seven times. The
204
+ impersonation guard stays; the machine-verified `admission_level` and every fail-closed
205
+ release gate are unchanged. All 27 solo-test packs regenerated; machine simulations re-run
206
+ against the new pack hashes.
207
+
208
+ ## [1.0.7] — 2026-07-29
209
+
210
+ ### Fixed
211
+
212
+ - **A historical cutoff silently discarded the market yardstick and a fund's entire evidence
213
+ base.** Two sibling blocks in grounding skipped their fetch when the cutoff was historical and
214
+ wrote nothing to `unavailable`: the US-subject market-valuation block (so Marks and Damodaran
215
+ declined with `unmet: index.aggregate_earnings_yield` and the reader was never told why) and
216
+ the fund/index holdings block (worse — holdings, look-through aggregates and basket news ARE a
217
+ fund's evidence, so a historical fund run kept only a price). Both now record the gap the way
218
+ their sibling blocks always did. Three network-free regression tests pin the contract,
219
+ including one that walks the market earnings yield through the typed-fact lineage gate to a
220
+ `ready` Damodaran seat.
221
+
222
+ ### Clarified
223
+
224
+ - The LITE council run that motivated 1.0.5 was executed by a cached 1.0.2 server, not by
225
+ current code: on HEAD, `index.aggregate_earnings_yield` resolves from the WSJ keyless
226
+ trailing-P/E source (verified live: 0.0397, dated, https lineage) and Marks, Damodaran and
227
+ Asness are all `ready` on a US equity. The seats were never method-blocked — the host was
228
+ running last week's build. If a seat declines on a fact the catalog says it should have,
229
+ check the plugin cache version before the method.
230
+
231
+ ## [1.0.6] — 2026-07-29
232
+
233
+ First release on which `npm run check` and the full test suite pass together: 995/995.
234
+
235
+ ### Fixed
236
+
237
+ - **The formula-review gate demanded exactly 156 roles after the bench grew to 162.** The
238
+ literal (26 seats × 2 tools × 3 roles) survived the twenty-seventh seat, so
239
+ `review-persona-v3-solo-formulas --check` failed a review tree whose own output line printed
240
+ `roles=162/162`. The gate now derives the count from the planned-tool inventory.
241
+
242
+ ### Repaired (local staging, not shipped in the package)
243
+
244
+ - The private PersonaPack staging tree had been left behind by the v1.0.x sessions, which
245
+ worked in a scratch worktree and never synced back: `staging-index.json` was missing
246
+ `master_bogle` (39 test failures from one integrity error), and all 27 seats' formula
247
+ prototypes still carried pre-rename tool ids. Synced from the authoring worktree; the
248
+ packaged `knowledge/solo-test` tree was already correct and is unchanged.
249
+
250
+ ## [1.0.5] — 2026-07-29
251
+
252
+ Five defects found by running one full visible council end to end on a US operating company.
253
+ Every one of them was silent: the run produced a report and none of these said anything was wrong.
254
+
255
+ ### Fixed
256
+
257
+ - **A plan response could exceed the host's tool-result limit.** `plan_visible_run` echoed the
258
+ entire grounding object, whose macro history and typed-fact lineage are unbounded — 2.33 MB of a
259
+ 2.54 MB payload on a single US equity — so the host truncated the plan to a scratch file and the
260
+ agent could not read the seat specs it had just asked for. Both fields are already in every seat
261
+ prompt and in `evidence.json`; the response now carries the rest of the grounding plus a pointer
262
+ and an entry count. Nothing else about the shape changed.
263
+ - **An English source title failed a Chinese packet's language gate.** `sources[].title` counted
264
+ toward the reader-language ratio, so packets whose every authored sentence was Chinese were
265
+ rejected at ratio 0.49. The only way to pass was to translate the citation, which falsifies the
266
+ source. `title` now joins `url` as machine text.
267
+ - **A portfolio-manager report that failed the structure gate could not be repaired.** The
268
+ idempotency lock was taken before the gate ran, so a thin report left the run permanently at
269
+ `needs_revision`: the corrected submission came back as a conflicting replay and there was no
270
+ other way in. A PM whose `report_quality` is not `passed` is now revisable; one that passed stays
271
+ frozen.
272
+ - **A failed verification down-weighted nothing when the seat was an analyst.** The contract
273
+ promises that a `contradicted` verdict reduces the weight of the seat that made the claim, but
274
+ the seat enumeration covered only debate and master seats. Verdicts against evidence roles were
275
+ recorded and then ignored, and the tool still answered with `verification_factor: 1`.
276
+ - **A missing market yardstick looked like an abstention.** When the broad-market valuation fetch
277
+ succeeded but yielded no market-level fact, it was dropped without a trace; downstream, Marks and
278
+ Damodaran declined with `unmet: index.aggregate_earnings_yield` and the report never said why the
279
+ fact was absent. An unexplained abstention reads as a verdict. It is now recorded as a data gap.
280
+
281
+ ### Changed
282
+
283
+ - `MASTER_SELECTION_INTENT_MISMATCH` now returns the expected and submitted intent hashes, the
284
+ fields the receipt binds, and the remedy. The receipt binds the prompt verbatim by design, but
285
+ the error gave the caller no way to tell a retyped prompt from a wrong symbol.
286
+
287
+ ## [1.0.4] — 2026-07-29
288
+
289
+ ### Fixed
290
+
291
+ - **Total liabilities had one tag and many filers use none of it.** Net current asset value, the
292
+ downside asset value and the downside floor all failed on `Liabilities`, silencing Graham,
293
+ Burry, Klarman and Pabrai. It is now reconstructed where a filer tags the balance-sheet total
294
+ and equity instead — but only against the equity tag that INCLUDES non-controlling interests,
295
+ where the identity is exact. With the parent-only tag minority interest lands inside
296
+ "liabilities" and nothing says so, which is why the previous refusal was right and is kept
297
+ wherever that tag is absent.
298
+ - **Revenue growth insisted the last eight filings were its window.** One restated quarter, one
299
+ stub period or one duplicate at the end discarded a company's entire revenue history. It now
300
+ searches backwards for the most recent clean pair of four-quarter blocks; each window is
301
+ checked exactly as strictly as before, only the search moved.
302
+
303
+ Measured: INTC and WMT go from six of eight derived fundamentals to **eight of eight**, GLW to
304
+ seven.
305
+
306
+ ### Changed
307
+
308
+ - The seat selector labels an `operator_lens` as a method lens rather than leading with
309
+ "provisional". The machine-verified admission level is unchanged and still published as
310
+ `admission_level`.
311
+
5
312
  ## [1.0.3] — 2026-07-29
6
313
 
7
314
  Three real runs are the specification: a GLW run put all eight selected seats at `out_of_scope`
package/CLAUDE.md CHANGED
@@ -15,7 +15,7 @@ The plugin turns `@alphacouncil-agent <ticker/request>` into one of two explicit
15
15
  bounded parse-only repair, persist the failure package, skip method/debate/PM model calls,
16
16
  and terminate `incomplete` before downstream synthesis.
17
17
  - `quick_v1` runs only when explicitly requested and only through plugin-managed headless
18
- `analyze_symbol`: display all 26 methods, confirm 1-4, run four fixed evidence roles and the
18
+ `analyze_symbol`: display all 27 methods, confirm 1-4, run four fixed evidence roles and the
19
19
  selected methods in parallel waves, one parallel Bull/Bear statement round, then a short
20
20
  PM inside a hard ten-minute ceiling.
21
21
 
@@ -25,13 +25,14 @@ non-investment test output.
25
25
 
26
26
  ## Current Build Profile
27
27
 
28
- The declared package/plugin version is `1.0.0`, published to npm as the default install.
28
+ The declared package/plugin version is `1.0.12`, published to npm as the default install.
29
29
  The packaged tree contains 27 physical v3 packs and 54 executable tools.
30
30
  Every seat carries the `operator_lens` admission level: `method_model` = 0,
31
31
  human source approvals = 0, human formula approvals = 0, human approval signatures = 0.
32
32
  Human review of the authored formulas and the live four-host end-to-end run are the
33
33
  outstanding work, so the production assembly path stays fail-closed until both are done.
34
- See `docs/releases/v1.0.0.md` and `docs/report-contract.md`.
34
+ See `docs/releases/v1.0.0.md`, `CHANGELOG.md` for everything since, and
35
+ `docs/report-contract.md`.
35
36
 
36
37
  ## Agent-Skills Governance
37
38
 
@@ -58,10 +59,36 @@ No research, run directory or worker may start before that receipt exists. Data-
58
59
 
59
60
  ## Full v2 Runtime Contract
60
61
 
61
- - Plugin-managed headless `analyze_symbol(council_mode="full")` has a hard 1800000 ms
62
- queue-to-terminal-persistence ceiling. Queueing, grounding, bounded repair, all workers,
63
- synthesis and artifact persistence share that clock. A caller or environment may lower
64
- the limit, never raise it.
62
+ - Plugin-managed headless `analyze_symbol(council_mode="full")` runs at one of three depth
63
+ tiers, selected by `council_pace`: `fast` = 900000 ms, `normal` (default) = 1800000 ms,
64
+ `slow` = 3600000 ms, queue-to-terminal-persistence. Queueing, grounding, bounded repair, all
65
+ workers, synthesis and artifact persistence share that clock. A caller or environment may
66
+ lower the selected tier's budget, never raise it; `total_timeout_ms` above the tier's total is
67
+ rejected and names the tier that would allow it.
68
+ - A tier sets the total AND every per-stage cap together, because the per-stage caps are what
69
+ bound each worker. `slow` gives each evidence seat 12 minutes instead of 6 and each debate
70
+ round 6 minutes per side instead of 150 seconds; `fast` gives 3.5 minutes and 90 seconds. That
71
+ is where the depth difference lives — raising `total_timeout_ms` alone buys idle time, and
72
+ lowering it alone starves the later stages into `incomplete`. Every tier's stages are proven
73
+ to fit inside its own budget with headroom.
74
+ - A tier also shapes the worker's OUTPUT, because a cap alone is a timeout and a timeout is not
75
+ a plan: the same prompt with a shorter fuse buys a packet the worker could not finish, not a
76
+ faster good one. For an LLM call the wall clock is dominated by generated tokens, so `fast`
77
+ asks for the same information in less prose — claims, figures, scoped source IDs, required
78
+ report sections and the decision are never what gets cut; restatement is. `slow` buys room to
79
+ write a derivation out in full. `normal` adds nothing, so its prompts stay byte-identical to
80
+ the reviewed golden. Quick keeps its own shaping and receives no tier.
81
+ - `council_pace` changes depth, never the contract: all three tiers are `full_v2` with eight
82
+ evidence seats, every selected method, three debate rounds and the PM. Quick rejects the field
83
+ — it is a smaller contract, not a slower one. The tier is recorded in `status.json`.
84
+ - The tier is ASKED at the selection gate, not typed as an argument.
85
+ `begin_council_selection` returns `pace_options`, one row per tier carrying both
86
+ `expected_minutes` and `hard_ceiling_minutes` plus what the extra time buys; a ceiling
87
+ published alone reads as the estimate. The answer goes to `confirm_master_selection` as
88
+ `council_pace` and binds into the receipt, so an execution call may repeat the confirmed tier
89
+ but never change it — a user who approved 15 minutes cannot end up running an hour. A speed
90
+ named in the request is a prefill exactly like a named master: it highlights the row, the menu
91
+ is still shown, the answer is still taken. No answer means `normal`.
65
92
  - Start the eight mandatory evidence workers in one parallel wave. A failed mandatory role
66
93
  after its single bounded parse-only repair closes the evidence barrier and terminates
67
94
  `incomplete`; never refill the result from memory.
@@ -78,8 +105,23 @@ No research, run directory or worker may start before that receipt exists. Data-
78
105
  artifact, not that external search/model/data services will let all seats succeed.
79
106
  - The plugin cannot enforce this deadline on `plan_visible_run` host subagents. Visible full
80
107
  runs retain the same evidence/report gates but must not be described as 30-minute bounded.
81
- Run every returned post-evidence v3 explanation worker, including a frozen
82
- `out_of_scope` seat, and record its `acknowledged_stance` before debate.
108
+ Run every returned post-evidence v3 explanation worker and record its `acknowledged_stance`
109
+ before debate. A seat frozen `out_of_scope` is returned as already settled and gets no
110
+ worker: its deterministic statement names the condition that closed the gate and states that
111
+ an abstention is not a bearish vote, which is the whole of what an out_of_scope seat is asked
112
+ to say, so a worker there buys prose rather than information. Set
113
+ `ALPHACOUNCIL_VOICE_ABSTAINING_SEATS=1` to give every seat a worker again. Every selected
114
+ seat still needs a readable statement in the report either way.
115
+ - `plan_visible_run` always writes each planned prompt to `<run>/prompts/` and returns
116
+ `prompt_file` beside every agent. It also returns `prompts_inline`: false means the prompt
117
+ bodies were left out of the result because returning them together would exceed what a host
118
+ accepts, and the host must read them from `prompt_file`. What drives that size is the
119
+ grounding each prompt embeds, not the seat count.
120
+ - `record_visible_decision(role: 'portfolio_manager')` rejects a packet whose
121
+ `report_markdown` does not carry every authored report-contract section, before the packet
122
+ takes the idempotency lock. The rejection lists the missing sections and the heading to use
123
+ for each. The master bench and instrument-structure sections are system-appended and are
124
+ never asked of an author.
83
125
 
84
126
  ## Quick v1 Fixed Contract
85
127
 
@@ -139,8 +181,8 @@ Optional analysts, on the `full` roster rather than the default:
139
181
  Quick evidence roles are the fixed four-seat subset listed above and always launch in one
140
182
  parallel wave.
141
183
 
142
- Master Bench: the complete generated catalog has 26 selectable lenses. Both modes display
143
- all 26. Full accepts any non-empty selection or `all`; quick accepts only 1-4. Selected
184
+ Master Bench: the complete generated catalog has 27 selectable lenses. Both modes display
185
+ all 27. Full accepts any non-empty selection or `all`; quick accepts only 1-4. Selected
144
186
  methods run between evidence and debate. In plugin-managed headless mode, each selected v3
145
187
  seat is a frozen deterministic stance plus its own isolated voice worker; this is a
146
188
  process-isolated worker, not a persistent sidebar agent and not the real person. Quick runs
@@ -148,8 +190,8 @@ its 1-4 seats in one parallel wave. Full/deep
148
190
  verifiers are `source_fidelity`, `rederivation`, and `refuter`; quick does not run this
149
191
  adversarial fan-out. See `skills/alphacouncil-agent/SKILL.md` and `docs/personas.md`.
150
192
 
151
- Do not call the 26 solo-test packs approved method models. The explicit solo-test loader
152
- exposes 26 provisional `operator_lens` packs and 52 executable derived-proxy tools; none is
193
+ Do not call the 27 solo-test packs approved method models. The explicit solo-test loader
194
+ exposes 27 provisional `operator_lens` packs and 54 executable derived-proxy tools; none is
153
195
  operational or `method_model`, and none has human source/formula approval or signature.
154
196
 
155
197
  Debate roles:
package/README.ja.md CHANGED
@@ -35,9 +35,9 @@
35
35
 
36
36
  <div align="center">
37
37
 
38
- <img src="assets/run-example.png" alt="A real AlphaCouncil run: six master lenses reaching the same call for different reasons" width="100%" />
38
+ <img src="assets/demo.gif" alt="AlphaCouncil のライブ実行:アナリスト評議会が調査・討論して評決に至る様子" width="100%" />
39
39
 
40
- <sub><i>実際の実行結果。6つのレンズはいずれも強気ではなく、相違は結論ではなく理由にあります。</i></sub>
40
+ <sub><i>実際の実行の録画。静止画版:<a href="assets/run-example.png">6つのレンズが異なる理由で同じ結論へ</a> · <a href="docs/examples/final_report.SOX.zh.md">完全な実レポート</a>(SOX、full council、中国語)</i></sub>
41
41
 
42
42
  </div>
43
43
 
@@ -47,9 +47,9 @@ AlphaCouncil Agent は、**上場株式のリサーチ委員会**向けの Codex
47
47
 
48
48
  | | |
49
49
  |---|---|
50
- | 🏛️ **一人の意見ではなく、委員会** | フルは既定 8 根拠席(最大 11)、quick は固定 4 根拠席を並列実行。どちらも調査前に 26 メソッド席をすべて表示。 |
50
+ | 🏛️ **一人の意見ではなく、委員会** | フルは既定 8 根拠席(最大 11)、quick は固定 4 根拠席を並列実行。どちらも調査前に 27 メソッド席をすべて表示。 |
51
51
  | 🐂🐻 **設計からして対立的** | フルは 3 ラウンドの強気/弱気クロス審問。quick は強気・弱気を 1 回だけ並列実行して短い PM に渡し、敵対的 verifier を実行したとは主張しません。 |
52
- | ⏱️ **フル headless にハード上限** | プラグイン管理の full は 8 アナリストを同時に開始し、各ラウンドの Bull/Bear も並列実行して、30 分以内に終端状態を保存。外部障害は明示的な `incomplete` となり、席を黙って省略しません。 |
52
+ | ⏱️ **深さは 15 / 30 / 60 分から選択** | 実行前に尋ね、各段階の想定所要時間とハード上限を併記します。速度キーワードの入力は不要です。3 段階はいずれも同一のフル契約(8 アナリスト・3 ラウンド討論・PM)で、変わるのは各席が考えてよい時間です。同じプロンプトに短い導火線を付けても書き終わらない packet しか得られないため、段階は出力の形も調整します。プラグイン管理の full は 8 アナリストを同時に開始し、各ラウンドの Bull/Bear も並列実行して、選択した段階内に終端状態を保存。外部障害は明示的な `incomplete` となり、席を黙って省略しません。 |
53
53
  | 🔍 **監査可能、幻覚なし** | すべての主張が source ID に紐づく。欠落データは「データ欠落」セクションに明示し、決して隠さない。 |
54
54
  | ⏱️ **マルチ期間の判定** | 買い/中立/売りに加え、1〜4週・3〜6か月・12か月の見通しを個別に提示。 |
55
55
  | 🔑 **データベンダー不要・APIキー不要** | 金融データ API・マーケットデータフィード・証券口座ログインは一切不要。アナリストはエージェント自身のウェブ検索(**Codex のウェブ検索** / **Claude Code の WebSearch + WebFetch**)で根拠をリアルタイムに収集 —— 課金は既存の Codex / Claude Code サブスクのみ。MIT ライセンス。 |
@@ -97,6 +97,18 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
97
97
  /reload-plugins
98
98
  ```
99
99
 
100
+ **まず 30 秒・コストゼロで動作確認** —— フル評議会を回す前に、データ層の疎通を確認します:
101
+
102
+ ```text
103
+ /alpha AAPL news
104
+ ```
105
+
106
+ これはキー不要のデータツールのみを呼び、サブエージェントを一切起動しません。日付付きの
107
+ ニュースと開示が返ればインストール成功です。その後 `/alpha AAPL` でフル評議会をどうぞ。
108
+ なお headless のフル/クイック経路には認証済みの **Codex CLI** が別途必要です
109
+ (各アナリストワーカーは `codex exec` として動作)。Claude Code のみの場合は可視
110
+ サブエージェント経路になります。詳細は [docs/INSTALL.md](docs/INSTALL.md)。
111
+
100
112
  ## 🚀 使い方
101
113
 
102
114
  エージェントにそのまま話しかけるだけ。@ でエージェントを呼び、ティッカーや質問を添えます:
@@ -133,7 +145,7 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
133
145
  | 入力 | 実行内容 | モデル消費 |
134
146
  |---|---|---|
135
147
  | `/alpha <ticker>` | 全マスターを個別表示して full を実行;プラグイン管理 headless は ≤30分 | 選択した v3 席ごとに決定論的 stance + 独立 voice worker 1つ |
136
- | `/alpha <ticker> quick` | 全 26 席を表示し、1-4 席を確認(`all` 禁止)後、プラグイン管理の `quick_v1`(≤10分)を実行 | 選択数により変動 |
148
+ | `/alpha <ticker> quick` | 全 27 席を表示し、1-4 席を確認(`all` 禁止)後、プラグイン管理の `quick_v1`(≤10分)を実行 | 選択数により変動 |
137
149
  | `/alpha <ticker> screen` | 機械的スクリーニングのみ | **なし** |
138
150
  | `/alpha <ticker> options` | IV ターム構造、スキュー、建玉分布 | **なし** |
139
151
  | `/alpha <ticker> news` | 日付付きの提出書類とニュース | **なし** |
@@ -145,11 +157,25 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
145
157
  上場銘柄なら何でも:`/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`。
146
158
  提出書類ベースのモードは米国登録企業が必要です。他市場は黙って空を返すのではなく `market_coverage` で対応状況を示します。
147
159
 
148
- ### Full v2 — プラグイン管理の 30 分ハード上限
160
+ ### Full v2 — 3 段階の深さ、開始時の質問で選択
161
+
162
+ 実行はまず「どの深さで走らせるか」を尋ね、その後にどのメソッド席を置くかを尋ねます。速度キーワードを入力する必要はありません。`begin_council_selection` がメニューを返し、各段階の想定所要時間とハード上限を併記します。
163
+
164
+ | 段階 | 想定 | 上限 | 根拠席あたり | 討論 1 ラウンド片側あたり |
165
+ | --- | --- | --- | --- | --- |
166
+ | `fast` | 約 12 分 | 15 分 | 3.5 分 | 90 秒 |
167
+ | `normal`(既定) | 約 20 分 | 30 分 | 6 分 | 150 秒 |
168
+ | `slow` | 約 44 分 | 60 分 | 12 分 | 6 分 |
169
+
170
+ **3 段階はいずれも同一の `full_v2` 契約**です。根拠席 8 件、選択した全メソッド、3 ラウンドの討論、PM のすべてが同じで、変わるのは各席が考えてよい時間だけです。両方の数字を公開するのは、上限だけを示すとそれが想定値として読まれ、fast が常に 15 分かかるように見えてしまうためです。
171
+
172
+ 段階は総額と**各ステージ上限**を同時に引き上げ、さらに worker への出力要求も調整します。後半が重要です。上限だけではそれは単なる timeout であり、同じプロンプトに短い導火線を付けても得られるのは**書き終わらなかった packet** で、速くて良い packet ではありません。LLM 呼び出しの実時間は生成トークン数に支配されるため、`fast` は**同じ情報をより少ない散文で**求めます。主張・数値・スコープ付き source ID・必須レポート章・結論自体は決して削られず、削られるのは言い直しです。`slow` が買うのは、導出を段階的に書き切る余地です。
173
+
174
+ 選択した段階は一度限りの `selection_receipt` に束縛されます。実行呼び出しは同じ段階を繰り返せますが**変更はできません**。15 分として承認された実行が 1 時間になることはなく、どの段階で走ったかは `status.json` に記録されます。quick に段階はありません。より小さい契約であり、遅い契約ではないからです。
149
175
 
150
- プラグイン管理 headless `analyze_symbol(council_mode="full")` は、durable queue から終端成果物の永続化まで **1800000 ms** が上限です。必須 8 根拠席を 1 波で並列開始します。根拠 barrier 通過後、選択した各物理 v3 メソッドは決定論的 policy で stance を凍結し、その stable ID 専用の独立 voice worker を 1 つ起動します。この worker は説明だけを行い、stance の変更や typed fact の捏造はできません。3 ラウンドの各ラウンドで Bull/Bear を並列開始し、両方が終了してから次へ進み、最後に PM を実行します。
176
+ 必須 8 根拠席を 1 波で並列開始します。根拠 barrier 通過後、選択した各物理 v3 メソッドは決定論的 policy で stance を凍結します。**stance に到達した席**はその stable ID 専用の独立 voice worker を 1 つ起動し(説明のみで、stance の変更や typed fact の捏造はできません)、**棄権として凍結された席**は決定論的な記録からそのまま公開され、worker を消費しません。3 ラウンドの各ラウンドで Bull/Bear を並列開始し、両方が終了してから次へ進み、最後に PM を実行します。
151
177
 
152
- 期限に達した場合は `incomplete` の終端状態を保存し、timeout・失敗・skip の全席を明示します。30 分が保証するのは監査可能な終端保存であり、検索・モデル transport・データ提供元の悪化時にも全席成功するという意味ではありません。visible-host の `plan_visible_run` は外部ホストが管理するため、プラグインはそのサブエージェントを強制停止できず、この上限を保証しません。
178
+ 期限に達した場合は `incomplete` の終端状態を保存し、timeout・失敗・skip の全席を明示します。段階の上限が保証するのは監査可能な終端保存であり、検索・モデル transport・データ提供元の悪化時にも全席成功するという意味ではありません。visible-host の `plan_visible_run` は外部ホストが管理するため、プラグインはそのサブエージェントを強制停止できず、**時間の保証を一切持ちません**。
153
179
 
154
180
  full の引き渡しは、選択した stable master ID 全件、必須 8 アナリスト全件、システム価格スナップショットまたは明示的な取得不能を列挙します。メソッド席の voice は provisional lens の記録された説明であり、**本人の発言・支持・現在の見解ではありません**。システム文言は中国語 (`zh-CN`)・英語・日本語・韓国語に対応し、各 worker に実行言語を渡します。
155
181
 
@@ -157,7 +183,7 @@ full の引き渡しは、選択した stable master ID 全件、必須 8 アナ
157
183
 
158
184
  ユーザーが急いでいることやフル実行の失敗を理由に、quick へ自動切替はしません。Quick は
159
185
  プラグイン管理の headless `analyze_symbol(council_mode="quick")` だけで実行され、
160
- `plan_visible_run` は quick を拒否します。26 席を完全表示して 1-4 席を確認した後の実行図は固定です:
186
+ `plan_visible_run` は quick を拒否します。27 席を完全表示して 1-4 席を確認した後の実行図は固定です:
161
187
 
162
188
  1. `market_data`、`earnings_deep_dive`、`valuation_long_short`、
163
189
  `news_industry_management` の 4 席を 1 波で並列実行;
@@ -194,7 +220,7 @@ Claude Code、OpenCode、Grok Build ではインストール後すぐ使えま
194
220
  - ニュース、業界動向、サプライチェーン、経営陣の発言と行動の照合
195
221
  - SEC提出書類、Form 4 インサイダー取引、自社株買い、希薄化、負債と資本配分
196
222
  - M&A、エクイティ/デット・ファイナンス、自社株買いなどのイベント分析
197
- - 個別選択可能な 26 の投資手法レンズが同じ事実を読む
223
+ - 個別選択可能な 27 の投資手法レンズが同じ事実を読む
198
224
  - ブル、ベア、ポートフォリオマネージャーの裁定
199
225
 
200
226
  フルは mandatory evidence barrier で fail-fast します。必須根拠席が 1 回の制限付き
@@ -227,7 +253,7 @@ parse-only 修復後も失敗した場合、失敗と診断の成果物を保存
227
253
  - **解析可能なタイムスタンプを持たないニュースは除外**され、「最新」として表示されません。
228
254
  - **`iv = 0` の建玉は除外。** CBOEは満期到来済みやディープITMで0を返しますが、0が平均に混入すると欠損値ではなく「落ち着いた銘柄」に見えてしまいます。
229
255
 
230
- ## 🏛️ マスター陣 —— 26の投資手法レンズ
256
+ ## 🏛️ マスター陣 —— 27の投資手法レンズ
231
257
 
232
258
  公開された方法論の再構成であり、**本人の発言では一切ありません**。各レンズは自らの思考順序、最初に見るもの、典型的な問いかけ、そして**自身の失敗モード**を明示します —— 自分がどう間違うか言えない席は、間違ったときに手を挙げません。
233
259
 
@@ -239,11 +265,11 @@ parse-only 修復後も失敗した場合、失敗と診断の成果物を保存
239
265
  | クオンツ | サイモンズ · アスネス · ソープ |
240
266
  | オプション | タレブ · ナタンバーグ · シンクレア |
241
267
  | 現代 | アッシェンブレナー |
242
- | v3 拡張 | ダモダラン · アックマン · キャシー・ウッド · パブライ · ジュンジュンワラ |
268
+ | v3 拡張 | ダモダラン · アックマン · キャシー・ウッド · パブライ · ボーグル · ジュンジュンワラ |
243
269
 
244
270
  1.0.0 `solo_test` カタログには 27 個の選択可能な物理 v3 パックがありますが、
245
- **26 パックは 26 個の承認済みメソッドモデルを意味しません**。全 26 席は provisional
246
- `operator_lens` のままです。52 個のツールは実行可能な
271
+ **27 パックは 27 個の承認済みメソッドモデルを意味しません**。全 27 席は provisional
272
+ `operator_lens` のままです。54 個のツールは実行可能な
247
273
  `provisional_derived_proxy` テスト代理であり、人間が承認した数式帰属ではありません。
248
274
  `operational` と `method_model` はともに 0 で、正式な production GA は fail-closed の
249
275
  ままです。
@@ -259,7 +285,7 @@ parse-only 修復後も失敗した場合、失敗と診断の成果物を保存
259
285
  flowchart TD
260
286
  U["@alphacouncil-agent"] --> G[("Established facts<br/>filings · quotes · macro · options")]
261
287
  G --> AG{{"Analyst council"}}
262
- G --> MS{{"Master bench<br/>26 lenses"}}
288
+ G --> MS{{"Master bench<br/>27 lenses"}}
263
289
  AG --> A1["Market data"]
264
290
  AG --> A2["Earnings"]
265
291
  AG --> A3["Valuation"]
@@ -284,7 +310,7 @@ flowchart TD
284
310
  PM --> R[["final_report.md"]]
285
311
  ```
286
312
 
287
- マスターは事実から分岐し、アナリストのパケットからは分岐しません。26のレンズに一人のアナリストの取捨選択を与えれば、全員が同じ盲点を共有します —— 大きく、かつ完全に相関した誤差であり、陣容を持つ理由そのものが失われます。
313
+ マスターは事実から分岐し、アナリストのパケットからは分岐しません。27のレンズに一人のアナリストの取捨選択を与えれば、全員が同じ盲点を共有します —— 大きく、かつ完全に相関した誤差であり、陣容を持つ理由そのものが失われます。
288
314
 
289
315
  主要ファイル:
290
316