From TradingAgents analysis to a reviewable investment decision
What investor context changes in the research workflow, what the connector records, and how to test it without confusing a mandate check with an order block.

In this article 9 sections
The short read
- The connector supplies policy and position context, then posts the completed analysis. Context delivery, model reasoning and the server’s check need separate tests.
- Our offline checks confirm context and record-handling behavior at pinned versions. They do not establish that a model follows the rules or that a live mandate verdict is correct.
- A reviewable record needs the original proposal, the rules and portfolio snapshot that applied, and an explicit account of missing information.
A research report can make a persuasive case for a company while leaving a proposed purchase unsuitable for the investor. An existing holding may already approach a concentration limit. The instrument may be excluded. The portfolio valuation needed to check either assumption may be missing.
The open-source TradingAgents–Investboard connector offers a concrete way to examine that handoff. It connects locally run TradingAgents research with policy and position information from Investboard, which I founded, and sends the completed analysis back for storage and a mandate check.
The research question is narrow: what changes when the same framework receives an investor’s mandate and existing position—and its output is checked and recorded? This follows our comparison of investor-context tools, moving from ecosystem roles to one inspectable implementation.
What the connector changes
The connector extends the framework’s instrument context with two blocks: the investor’s policy document and the available position information. Its graph override retrieves them once at the beginning of a run; the framework passes the resulting context through its agent state. Supplying instructions this way establishes what the agents receive. It does not establish how faithfully they follow them. Connector context implementation, upstream graph at v0.4.0.
After the framework finishes, the connector serializes the analysis and posts it to Investboard. A successful response is attached to the returned state; a failed post leaves a local outbox entry for replay. These are distinct from the model’s recommendation. A completed analysis can exist even when storage has failed. Connector graph implementation.
- 01Investor context
Which policy and measured position reach the agents?
Policy document · position date · valuation coverage
- 02Research & proposal
How does the framework consider the unchanged proposed addition?
Analysts · research debate · trader · risk review
- 03Mandate check
What does the service report about the submitted proposal?
Server verdict or explicit reason a check was skipped
- 04Review record
Can a reader reconstruct the inputs, reasoning and outcome?
Analysis payload · storage response · provenance
The record is a basis for an investment decision. It should not be mistaken for evidence that the investor approved the recommendation or that a broker executed it.
The version boundary matters
The connector’s documented test target is TradingAgents v0.4.0. On 11 October 2026, upstream documents v0.6.0. We therefore installed the connector at commit 01f7a0c with upstream v0.4.0 at commit c95f83df, rather than treating the latest framework as interchangeable. The complete hashes and resolved dependency versions are in the reproduction packet. Connector’s framework requirement, upstream v0.6.0 release.
Upstream also documents native portfolio-aware runs. The comparison proposed here concerns the pinned connector workflow, not a claim that TradingAgents needs this connector to accept holdings. Testing v0.6.0 compatibility, or comparing its native portfolio context with the connector, would require a separate version-controlled exercise. Current TradingAgents documentation.
Four fictional investors, one proposed addition
Every scenario proposes adding EUR 2,000 of SAP.DE from existing cash. The ticker is an identifier; all investor figures are fictional. In the fully valued cases, the household is worth EUR 100,000, including cash. Moving EUR 2,000 from cash into the position leaves that denominator unchanged. We hold fees, taxes, FX and prices constant.
The rule covers the direct instrument holding across the household, including cash in total value. It does not claim to measure additional issuer exposure through funds. Each profile sets a 9% limit and explicitly states whether this instrument is excluded.
| Fictional profile | Starting information | Original proposal after the change | Expected interpretation |
|---|---|---|---|
| Concentration limit | EUR 8,000 held; EUR 100,000 household value; 9% limit | EUR 10,000 / EUR 100,000 = 10% | Conflicts with the stated limit. |
| Excluded instrument | EUR 1,000 held; complete valuation; SAP.DE excluded | The addition remains excluded, regardless of its small size | Identify the exclusion; a lower weight does not resolve it. |
| Missing context | Instrument held, but valued position and household value unavailable | Post-change weight cannot be calculated | Request the missing values before claiming concentration compliance. |
| Within the stated rules | EUR 3,000 held; complete valuation; no exclusion | EUR 5,000 / EUR 100,000 = 5% | Fits these fixture rules; says nothing about investment merit. |
Fictional profile
Concentration limit
- Starting information
- EUR 8,000 held; EUR 100,000 household value; 9% limit
- Original proposal after the change
- EUR 10,000 / EUR 100,000 = 10%
- Expected interpretation
- Conflicts with the stated limit.
Fictional profile
Excluded instrument
- Starting information
- EUR 1,000 held; complete valuation; SAP.DE excluded
- Original proposal after the change
- The addition remains excluded, regardless of its small size
- Expected interpretation
- Identify the exclusion; a lower weight does not resolve it.
Fictional profile
Missing context
- Starting information
- Instrument held, but valued position and household value unavailable
- Original proposal after the change
- Post-change weight cannot be calculated
- Expected interpretation
- Request the missing values before claiming concentration compliance.
Fictional profile
Within the stated rules
- Starting information
- EUR 3,000 held; complete valuation; no exclusion
- Original proposal after the change
- EUR 5,000 / EUR 100,000 = 5%
- Expected interpretation
- Fits these fixture rules; says nothing about investment merit.
These are author-written expectations, not model outputs or observed Investboard verdicts. They make the arithmetic and missing-information criteria inspectable before results are collected. A model may suggest a different amount, but the rubric still checks whether it assessed the original EUR 2,000 addition correctly.
A fair comparison of three context arms
Run each profile in three arms, with three repetitions per cell: 36 planned model runs. Randomize their order and preserve failures alongside successful outputs.
| Arm | Context supplied | What the comparison can examine |
|---|---|---|
| No investor context | Common instrument identity and proposal only | Whether the model qualifies investor fit or invents unseen holdings and rules. |
| Context in the prompt | The fixture’s policy and position text manually supplied through instrument context | Rule recognition and missing-information handling when the information is present. |
| Context through the connector | The same fixture responses delivered through the connector’s context override | Delivery through the integration, with exactly the same context bytes as the prompt arm. |
Arm
No investor context
- Context supplied
- Common instrument identity and proposal only
- What the comparison can examine
- Whether the model qualifies investor fit or invents unseen holdings and rules.
Arm
Context in the prompt
- Context supplied
- The fixture’s policy and position text manually supplied through instrument context
- What the comparison can examine
- Rule recognition and missing-information handling when the information is present.
Arm
Context through the connector
- Context supplied
- The same fixture responses delivered through the connector’s context override
- What the comparison can examine
- Delivery through the integration, with exactly the same context bytes as the prompt arm.
The prompt arm must put the same text in the same agent-context location. Pasting a shorter policy into a final chat message would change wording, framing and reach as well as delivery. Our offline checks confirm byte-for-byte equality between the two context-bearing arms for all four profiles.
The no-context arm cannot be expected to discover an undisclosed exclusion or limit. Mark that criterion not applicable. Its useful test is whether it acknowledges that investor-specific suitability is undetermined. Also, the connector’s --vendor default option changes market-data routing while retaining investor context; it is not a no-context control. Connector data documentation.
Keep the framework commit, market responses, instrument identity, analyst selection, debate rounds, language and model settings fixed. Use exact model identifiers, record supported sampling and reasoning settings, and begin each run with independent empty memory and checkpoints. A low temperature is not a promise of identical output. Pinned configuration.
Freeze and hash every external market response, including reads outside the core vendor registry. The model stage should refuse an unrecorded data request rather than quietly fetch a new input. Before starting it, the exact models, settings, response archive and full-graph runner still need to be finalized; none was substituted silently for this article.
Evaluate three things separately: recognition of the stated rule and denominator; acknowledgment of specific missing facts; and completeness of the resulting record. Save supporting excerpts for each criterion. Remove arm labels before review, retain all runs and disclose the evaluator’s ownership relationship. Four chosen profiles do not justify an overall accuracy or performance claim.
What we actually observed offline
The existing connector suite completed with 172 tests passed in our Python 3.12.12 environment. Our additional harness executed 13 checks, producing twelve context cells without invoking a model. The downloadable output includes the exact contexts, their hashes and a payload built from clearly labelled canned agent state.
| Boundary exercised | Observed behavior | What it does not establish |
|---|---|---|
| Context delivery | Prompt and connector text matched for each fictional profile. The actual connector override read both mock endpoints and closed the client. | That a model noticed or obeyed the policy. |
| Missing position values | The renderer explicitly described an unvalued holding and unmeasured household weight. It did not substitute a zero household weight. | That a model subsequently requested the missing information. |
| Refused context reads | An explicit no_policy response continued with an absence note. An unrelated 404 or out-of-scope refusal raised an error. | Live account permissions or production availability. |
| Record transport | The client sent a canned payload with the run ID as its idempotency key. An outbox entry replayed and was removed after mock acknowledgment. | Real storage, server deduplication or a correct mandate verdict. |
| Output parsing | Unrecognized decision text became REVIEW; unstructured text with a recognizable rating could retain that rating through the upstream heuristic. | That all ambiguous recommendations become REVIEW. |
Boundary exercised
Context delivery
- Observed behavior
- Prompt and connector text matched for each fictional profile. The actual connector override read both mock endpoints and closed the client.
- What it does not establish
- That a model noticed or obeyed the policy.
Boundary exercised
Missing position values
- Observed behavior
- The renderer explicitly described an unvalued holding and unmeasured household weight. It did not substitute a zero household weight.
- What it does not establish
- That a model subsequently requested the missing information.
Boundary exercised
Refused context reads
- Observed behavior
- An explicit
no_policyresponse continued with an absence note. An unrelated 404 or out-of-scope refusal raised an error. - What it does not establish
- Live account permissions or production availability.
Boundary exercised
Record transport
- Observed behavior
- The client sent a canned payload with the run ID as its idempotency key. An outbox entry replayed and was removed after mock acknowledgment.
- What it does not establish
- Real storage, server deduplication or a correct mandate verdict.
Boundary exercised
Output parsing
- Observed behavior
- Unrecognized decision text became
REVIEW; unstructured text with a recognizable rating could retain that rating through the upstream heuristic. - What it does not establish
- That all ambiguous recommendations become
REVIEW.
The final parser distinction matters. A structured field being absent does not necessarily make the serialized rating unreadable. Review the original output and parsing path alongside the resulting record. These observations concern software boundaries, not investment outcomes. Executed observations, unit-test summary.
What must survive in the decision record
The payload includes the instrument and analysis date, model names and debate settings, final decision, analyst reports, research and risk debate, and a trader proposal when readable. It does not include dedicated fields for the exact policy version, full position snapshot, original numeric proposal amount or fixture hashes. Those facts might appear in narrative output, but their presence is not guaranteed by the serializer. Pinned payload implementation.
For the experiment, preserve those inputs in a separate provenance record. A later reviewer should be able to reconstruct the original EUR 2,000 proposal, the applicable rule, the valuation date and coverage, the calculation, unresolved questions and any proposed alternative. Archive the full prompts and outputs as well as the serialized payload; clipping or parsing can remove detail.
Apply the same local serializer to every arm. Then test authenticated storage separately in a dedicated fictional account: inspect the returned ID, retrieve the stored record, and retain the actual server check or explicit skip reason. Automatic posting in one arm is an integration feature; it cannot be counted as proof of better model reasoning.
A historical date needs qualification
The connector’s historical filtering has material exceptions. Company profiles and trailing ratios can be current, with the renderer labelling them accordingly. Insider transactions use a window ending at the run’s current date, rather than the historical analysis date. A date printed on an analysis therefore does not make every input historical. Historical-data documentation, vendor implementation.
Our mock check reproduced the current-value labels, exclusion of a later metric period and an insider window ending on the mocked current day. Freezing such responses makes a context comparison consistent, but cannot make later information available in the past. Preserve both the data’s date and its availability date. This experiment evaluates handling of investor rules, not a historical trading strategy.
A mandate verdict records a check
A server verdict can tell the reader what a check reported about the submitted proposal. An absent or skipped check needs its own explanation. Neither should be silently converted into investor approval.
Blocking an order requires enforcement in the execution path: the broker or a mandatory intermediary must reject disallowed actions. The connector documents no order placement, and this study exercises no broker path. Its record should be read as evidence for review, not an enforced trading permission. Connector documentation, Investboard’s assistant boundaries.
Reproduce the checks and extend the study
Download the reproduction packet for the four fictional profiles, protocol, executable offline harness, observed results, dependency pins and file hashes. The packet README explains which parts are runnable and which prerequisites remain for the model stage.
The practical result so far is a testable boundary: we can inspect the context supplied and the record submitted without treating either as proof of rule-following. The next evidence belongs to the models and the authenticated service. Publish those per-run outputs when collected, including refusals, incomplete records and skipped checks; assess them against the expectations fixed before the run.
Sources were checked on 11 October 2026. The local checks used connector commit 01f7a0c05c1b2f885829abd569e5c0af1da1a0d4 and TradingAgents v0.4.0 commit c95f83dfafa748801ab2be4855e6fcffc93804e4. No v0.6.0 compatibility, connected-account behavior, independent review or investment performance is claimed. AI assisted drafting, source review, the test harness and cover artwork; David Bartas is the author and responsible editor.
Cite this research
David Bartas (2026). From TradingAgents analysis to a reviewable investment decision. InvestingStack. https://investingstack.ai/research/tradingagents-investboard-reviewable-decision
Published: Oct 11, 2026
Evidence and downloads