You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Design candidate / next product module — not an active implementation front.
Current execution authority remains #27. The only active fronts are #579 (deterministic trade consequence / visible decision outcome) and #718 (QA trace and accounting truth). Do not start a competing product PR from this issue until one of those fronts reaches a safe review/merge boundary and the owner explicitly promotes this module.
This issue exists because the accumulated snapshot, market-context, continuity and copy findings now describe one missing product outcome rather than a collection of independent small defects.
User outcome
A user who supplies only a current holdings snapshot or an already-recorded current book receives one compact, route-native Portfolio Risk Brief that answers, in this order:
What is the most important exposure or rule tension now?
How much can that exposure matter in the user's own money?
What dated, published catalyst or standing sensitivity should the user watch next?
What is the nearest concrete decision check or user-owned action?
What would transaction history unlock, and exactly how can the user provide it?
The result is not a transaction-history Review Card with unsupported fields zeroed out. It is the first useful outcome for a holdings-only user.
Current repository truth / evidence
Verified against main@a33f31576bc5284887e0c68943f6eb251e23f2ca and the current #27 execution index.
The route currently reuses the wrong product shape
#771 shows that snapshot_adapter.py disables the transaction-review card wholesale instead of projecting the subset a snapshot supports. The route accepts or computes cash, maximum-position weight, market value, average cost and a concentration diagnosis, but the finished card withholds declared cash, money stress, distance to the position cap, point-in-time unrealized P&L and a useful per-position ranking. It also renders an empty transaction section.
This is not five unrelated omissions. The adapter asks, “which transaction-card fields must be turned off?” rather than, “what decision outcome does a holdings-only user need?”
The card skips the two steps that turn concentration into a decision
How concentrated am I?
→ How much can that hurt in money?
→ What would move or break this exposure / what should I watch?
→ What do I change or check next?
The current snapshot card answers the first and jumps to the last. #771 owns the missing money impact. #772 owns the missing standing / forward-looking watch.
Current structure alone is an incomplete risk answer. Dated forward-looking catalysts are a core concern; history remains a baseline against which the agent judges whether an upcoming event is surprising or already reflected.
The division remains bounded:
deterministic code owns dated facts and current-book facts;
the agent may judge relevance/surprise only as labelled judgment anchored to those facts;
forecasts, targets and event-outcome predictions remain out.
A snapshot card that reports only weights and concentration therefore cannot be described as a complete risk product.
Snapshot-only users have no continuity or conversion path
These defects matter more on snapshot cold start because the visible card has little other differentiated content to offset a wrong or vague headline.
Earlier-value copy is necessary but insufficient
#714 / PR #732 now exposes one engine finding before first-review questions. That improves the bargain of the transaction-review journey, but it does not change the holdings-only route's final outcome. A teaser before the same subtractive card cannot supply the missing money → catalyst → action chain.
Problem and consequence
The product currently treats the Review Card as the universal output and models snapshot_review as a degraded version of it.
Consequences:
The first-time user gives valuable current-book data and receives mostly percentages, limits and empty historical surfaces.
The route can truthfully diagnose concentration but cannot explain its monetary importance or what upcoming fact makes it urgent.
The user is asked to choose a rule before the product has completed the reasoning that would justify that rule.
A snapshot-only user has no natural re-entry loop; every later snapshot is another cold structural check rather than a current-risk update.
More copy fixes increase local correctness but do not change the perceived product value.
README/onboarding can promise a decision partner, while runtime still behaves like a report generator with missing sections.
Without a route-native outcome, the project will continue accumulating field, copy and gate fixes while owner-live value changes only marginally.
Decision candidate
1. Add a route-native PortfolioRiskBrief projection
Use a transient, engine-owned projection name such as PortfolioRiskBrief (exact identifier may change). It is not new canonical memory and not a generic communication framework.
The projection owns the supported content and ordering for the holdings/current-book user moment:
Unsupported sections are omitted. Do not render transaction-history headings with apologies or substitute generic educational prose.
2. Engine owns selection, facts and omission
Deterministic code owns at least:
recorded-book basis and freshness;
maximum position / concentration / driver group used as the focal risk;
rule limit and distance/direction where applicable;
declared cash when present;
one bounded money-stress consequence using already-supported book facts;
the exact holdings contributing to the selected exposure;
dated published catalyst facts when the first approved source supports them;
source, as_of, coverage, stable omission reason and localization-ready semantic state.
The agent does not independently rank the focal risk, calculate a loss amount, infer a driver intersection or invent a catalyst.
3. First catalyst slice stays narrow and deterministic
The first implementation candidate should support at most one deterministic catalyst class for the focal risk, preferably the next scheduled earnings date for the selected holding(s), or another single class justified by provider evidence.
A dated published fact is enough; no outcome forecast is needed.
Missing catalyst coverage omits the line or states one bounded limitation; it never triggers a generic news recap.
A later invocation against the already-recorded book or a newer snapshot may regenerate the brief and, when a prior rule exists, reconcile only the part that the current book can prove.
It must not pretend that a snapshot proves trade motives, averaging behavior, exits or execution history. This is a narrow current-risk continuity loop, not a snapshot-shaped weekly_review clone.
5. Make the next data step explicit
The closing surface names the concrete transaction-history action only when it would unlock a meaningful unanswered question. It must say how to provide the CSV/table in the current host, not merely that “history would help.”
6. Keep consider separate
#579 remains the owner for the proposed-trade decision outcome. This issue does not create a cross-route DecisionCommunicationPlan or reimplement rule_effect.
The two product outcomes may share deterministic facts, but they answer different user moments:
consider: What does this proposed transaction change?
PortfolioRiskBrief: What matters most in my current book now?
Minimum vertical slice
One snapshot/current-book route, one focal risk, one money consequence, at most one deterministic dated catalyst, one concrete next check and one explicit transaction-history unlock.
Do not begin with a dashboard, multiple cards, all catalyst types, a news feed, per-position research packets or a new persistent memory object.
User before / after
Before
Upload holdings
→ see concentration percentages and several unavailable/empty historical surfaces
→ choose a rule
→ no answer to what can hurt in money or what to watch next
→ no periodic snapshot-only continuity
After
Upload holdings / use recorded book
→ see one current-book risk
→ see its bounded money consequence
→ see the next dated fact or standing sensitivity that matters to that risk
→ take one concrete check / choose or skip one rule
→ know exactly what additional transaction data would unlock
Best-practice assessment
This is justified by an observed product-shape failure, not by architectural neatness.
It removes the negative inheritance between two user moments with different evidence:
a transaction-history review diagnoses past behavior and may justify motive questions, preview and commitment;
a holdings-only check diagnoses current structure and near-term exposure, and should not impersonate historical analysis.
The minimum implementation is one route-specific projection and renderer/answer contract. A universal response-plan abstraction, dashboard schema, catalyst ontology, background monitor or research database would be over-design.
These issues remain the evidence and implementation leaves. This issue owns the combined user outcome and prevents them from being fixed as unrelated card patches.
Non-goals
No full investment dashboard or wealth-management surface.
No market-wide news feed, filing warehouse, KOL crawler, scheduler, notifications or email.
No price target, event-outcome forecast, security ranking or buy/sell recommendation.
No full transaction-review card redesign.
No generic DecisionCommunicationPlan framework.
No new durable catalyst/evidence graph or profile object.
No automatic thesis, motive, execution or rule inference from holdings alone.
No M2 rationale/memory merge solely to make this brief look richer.
Acceptance criteria
A finalized production-shaped snapshot_review delivers a route-native brief rather than an empty/degraded transaction-history card.
The first visible result names one engine-selected focal risk and its current-book basis.
The brief renders declared cash, maximum-position/rule distance and one money-stress consequence when their inputs are supported; unsupported facts are omitted with a stable reason.
No transaction-history-only section or behavior claim appears on the snapshot route.
A same-driver statement is emitted only when the contributing holdings actually satisfy the declared classification contract.
The no-tag fallback never asserts a neutral return.
At most one dated catalyst class is supported in the first slice; it carries source and date and makes no prediction.
The agent's relevance/surprise statement is labelled judgment and anchored to engine facts; deterministic/voice gates reject process leakage and unsupported claims.
A later snapshot/current-book invocation can surface and reconcile a prior user-chosen rule only where current-book facts prove it, without requiring transaction history.
The closing instruction tells the user exactly how to supply transaction history when it would unlock a named unanswered question.
Public fixtures and receipts use only fictional/generic holdings and events.
Full Python 3.11/3.12 offline suite, focused mutation evidence and merge-tree CI pass.
Owner-live acceptance: from the first surface, the owner can answer “what matters, how much, what should I watch and what do I do next?” without reading metadata or asking a rescue question.
Implement one vertical slice and stop for owner-live acceptance before expanding catalyst types, per-position packets or persistence.
Privacy boundary
The brief is local-first and may contain sensitive holdings-derived facts. Real holdings, amounts, tickers, rules, catalysts selected for a real book and delivered answers remain local.
Public issues, tests, PRs, QA receipts and external model calls use only fictional, synthetic, generic or de-identified evidence. No private investment-note content is read or copied.
Rollout / compatibility / recovery
Prefer a transient projection over new canonical state. Existing snapshot sessions and recorded books remain readable. Legacy sessions without the projection may render through the current compatibility path; no historical session is rewritten.
A failed catalyst lookup omits only the dependent line and leaves the current-book brief usable. A failed brief render must not mutate the book, rule or session. Removing the module later requires no canonical-state migration.
Stop condition
Stop after one snapshot/current-book vertical slice proves that a holdings-only user receives differentiated decision value in the first interaction. Do not automatically continue into a dashboard, full research capability, M2 memory, multiple catalyst types or a background monitor.
Status
Design candidate / next product module — not an active implementation front.
Current execution authority remains #27. The only active fronts are #579 (deterministic trade consequence / visible decision outcome) and #718 (QA trace and accounting truth). Do not start a competing product PR from this issue until one of those fronts reaches a safe review/merge boundary and the owner explicitly promotes this module.
This issue exists because the accumulated snapshot, market-context, continuity and copy findings now describe one missing product outcome rather than a collection of independent small defects.
User outcome
A user who supplies only a current holdings snapshot or an already-recorded current book receives one compact, route-native Portfolio Risk Brief that answers, in this order:
The result is not a transaction-history Review Card with unsupported fields zeroed out. It is the first useful outcome for a holdings-only user.
Current repository truth / evidence
Verified against
main@a33f31576bc5284887e0c68943f6eb251e23f2caand the current #27 execution index.The route currently reuses the wrong product shape
#771 shows that
snapshot_adapter.pydisables the transaction-review card wholesale instead of projecting the subset a snapshot supports. The route accepts or computes cash, maximum-position weight, market value, average cost and a concentration diagnosis, but the finished card withholds declared cash, money stress, distance to the position cap, point-in-time unrealized P&L and a useful per-position ranking. It also renders an empty transaction section.This is not five unrelated omissions. The adapter asks, “which transaction-card fields must be turned off?” rather than, “what decision outcome does a holdings-only user need?”
The card skips the two steps that turn concentration into a decision
The user chain recorded on #772 is:
The current snapshot card answers the first and jumps to the last. #771 owns the missing money impact. #772 owns the missing standing / forward-looking watch.
The product's definition of risk has changed
The owner ruling on #781 is now explicit:
The division remains bounded:
A snapshot card that reports only weights and concentration therefore cannot be described as a complete risk product.
Snapshot-only users have no continuity or conversion path
weekly_review; a prior user-chosen rule may be stored but is never actively reconciled.Current labels can actively reduce trust
These defects matter more on snapshot cold start because the visible card has little other differentiated content to offset a wrong or vague headline.
Earlier-value copy is necessary but insufficient
#714 / PR #732 now exposes one engine finding before first-review questions. That improves the bargain of the transaction-review journey, but it does not change the holdings-only route's final outcome. A teaser before the same subtractive card cannot supply the missing money → catalyst → action chain.
Problem and consequence
The product currently treats the Review Card as the universal output and models
snapshot_reviewas a degraded version of it.Consequences:
Without a route-native outcome, the project will continue accumulating field, copy and gate fixes while owner-live value changes only marginally.
Decision candidate
1. Add a route-native
PortfolioRiskBriefprojectionUse a transient, engine-owned projection name such as
PortfolioRiskBrief(exact identifier may change). It is not new canonical memory and not a generic communication framework.The projection owns the supported content and ordering for the holdings/current-book user moment:
Unsupported sections are omitted. Do not render transaction-history headings with apologies or substitute generic educational prose.
2. Engine owns selection, facts and omission
Deterministic code owns at least:
as_of, coverage, stable omission reason and localization-ready semantic state.The agent does not independently rank the focal risk, calculate a loss amount, infer a driver intersection or invent a catalyst.
3. First catalyst slice stays narrow and deterministic
The first implementation candidate should support at most one deterministic catalyst class for the focal risk, preferably the next scheduled earnings date for the selected holding(s), or another single class justified by provider evidence.
4. Give snapshot-only users a bounded re-entry
A later invocation against the already-recorded book or a newer snapshot may regenerate the brief and, when a prior rule exists, reconcile only the part that the current book can prove.
It must not pretend that a snapshot proves trade motives, averaging behavior, exits or execution history. This is a narrow current-risk continuity loop, not a snapshot-shaped
weekly_reviewclone.5. Make the next data step explicit
The closing surface names the concrete transaction-history action only when it would unlock a meaningful unanswered question. It must say how to provide the CSV/table in the current host, not merely that “history would help.”
6. Keep
considerseparate#579 remains the owner for the proposed-trade decision outcome. This issue does not create a cross-route
DecisionCommunicationPlanor reimplementrule_effect.The two product outcomes may share deterministic facts, but they answer different user moments:
consider: What does this proposed transaction change?PortfolioRiskBrief: What matters most in my current book now?Minimum vertical slice
One snapshot/current-book route, one focal risk, one money consequence, at most one deterministic dated catalyst, one concrete next check and one explicit transaction-history unlock.
Do not begin with a dashboard, multiple cards, all catalyst types, a news feed, per-position research packets or a new persistent memory object.
User before / after
Before
After
Best-practice assessment
This is justified by an observed product-shape failure, not by architectural neatness.
It removes the negative inheritance between two user moments with different evidence:
The minimum implementation is one route-specific projection and renderer/answer contract. A universal response-plan abstraction, dashboard schema, catalyst ontology, background monitor or research database would be over-design.
Scope
Existing issue map
These issues remain the evidence and implementation leaves. This issue owns the combined user outcome and prevents them from being fixed as unrelated card patches.
Non-goals
DecisionCommunicationPlanframework.Acceptance criteria
snapshot_reviewdelivers a route-native brief rather than an empty/degraded transaction-history card.snapshot_reviewshows fewer empty/limitation beats and materially higher owner-rated decision value.Dependencies / sequencing
Privacy boundary
The brief is local-first and may contain sensitive holdings-derived facts. Real holdings, amounts, tickers, rules, catalysts selected for a real book and delivered answers remain local.
Public issues, tests, PRs, QA receipts and external model calls use only fictional, synthetic, generic or de-identified evidence. No private
investment-notecontent is read or copied.Rollout / compatibility / recovery
Prefer a transient projection over new canonical state. Existing snapshot sessions and recorded books remain readable. Legacy sessions without the projection may render through the current compatibility path; no historical session is rewritten.
A failed catalyst lookup omits only the dependent line and leaves the current-book brief usable. A failed brief render must not mutate the book, rule or session. Removing the module later requires no canonical-state migration.
Stop condition
Stop after one snapshot/current-book vertical slice proves that a holdings-only user receives differentiated decision value in the first interaction. Do not automatically continue into a dashboard, full research capability, M2 memory, multiple catalyst types or a background monitor.