feat: dealer flow, mirror portfolio (M21), options convexity, FINRA short interest, alert producers, vendor gate
CI / Test & Type-Check (push) Canceled after 0s

Snapshot of in-progress module work across multiple slices:

- Dealer Flow: dealerExposureEngine, dealerMapService, dealerMapExplain,
  dealerMapIntegrity, dealerMapReplay, dealerStudyEngine, hanStyleLevels
- Mirror Portfolio (M21): fundRepository, captureIngest, mirrorAlertProducers,
  fund holdings strip, live book, position capture ingest
- Options: BSM, NormalizedOptionSurface types, OptionsChainRouter,
  ConvexityGate, option legs panel
- Alert producers: vixLevel, rotation, thesis, unlock, portfolioRisk,
  mirror (fund_capture, fund_13f, mirror_diff)
- FINRA short interest adapter + queue integration
- SEC company tickers adapter + ingest (symbol search index seed)
- Vendor gate (rate-limit-first data plane, ADR-0009)
- CUSIP registry, reverse 13F refresh, stock float service
- LRU cache, portfolio backtest engine
- Frontend: dealer-flow, funds, journal, lab, monitor, plan, portfolio,
  reports, screener, strategies, theses, guided-start, exits, more pages
- Volume profile, workspace profile, visibility-aware poll
- ADRs 0010 (mirror math not advice), 0011 (symbol search index)
- VENDOR_INTEGRATIONS.md, END_USER_TEST.md
- .gitignore: exclude DBs, .DS_Store, local config, agent scratch
This commit is contained in:
Investor Flow Build
2026-08-10 13:36:26 -04:00
parent 04fc11b2fd
commit ac94acf9e3
229 changed files with 32617 additions and 3934 deletions
+30 -2
View File
@@ -20,7 +20,11 @@ export type AlertType =
| 'thesis_weakening'
| 'cluster_breach'
| 'drawdown_halt'
| 'asymmetry_warning';
| 'asymmetry_warning'
| 'fund_capture'
| 'fund_13f'
| 'mirror_diff'
| 'vix_level';
// ─── Alert Severity ──────────────────────────────────────────────────────────
@@ -77,6 +81,10 @@ export function defaultSeverity(type: AlertType): AlertSeverity {
case 'regime_shift':
case 'conviction_unlock':
case 'thesis_weakening':
case 'fund_capture':
case 'fund_13f':
case 'mirror_diff':
case 'vix_level':
return 'info';
}
}
@@ -111,6 +119,14 @@ export function alertTitle(type: AlertType, symbol?: string): string {
return `Drawdown tolerance breached`;
case 'asymmetry_warning':
return `Portfolio asymmetry below threshold`;
case 'fund_capture':
return `New position update from tracked fund${symbolTag(symbol)}`;
case 'fund_13f':
return `New 13F from tracked fund`;
case 'mirror_diff':
return `Mirror target changed${symbolTag(symbol)}`;
case 'vix_level':
return `Volatility index level changed`;
}
}
@@ -122,7 +138,7 @@ export function alertDescription(type: AlertType, details?: string, symbol?: str
case 'informed_sell':
return `A company insider sold shares${symbolTag(symbol)}. This filing was not part of a 10b5-1 trading plan.`;
case 'new_13da':
return `An institutional investor reported a new position${symbolTag(symbol)} in a 13F filing.`;
return `An institutional investor reported a new position${symbolTag(symbol)}.`;
case 'rotation_incipient':
return `The sector rotation detector identified an incipient rotation signal. Capital may be moving between sectors.`;
case 'regime_shift':
@@ -139,6 +155,14 @@ export function alertDescription(type: AlertType, details?: string, symbol?: str
return `Your portfolio drawdown has exceeded the tolerance threshold. The circuit breaker has paused new entries for 24 hours. Existing positions continue unaffected.`;
case 'asymmetry_warning':
return `Your portfolio's reward-to-risk ratio has fallen below 1.0, meaning risk outweighs expected reward across your positions.`;
case 'fund_capture':
return `A tracked fund posted a position update${symbolTag(symbol)}. This is a disclosure, not advice.`;
case 'fund_13f':
return `A tracked fund filed a new 13F. This is a disclosure, not advice.`;
case 'mirror_diff':
return `The mirror target changed${symbolTag(symbol)}. Showing the arithmetic delta; it is not advice.`;
case 'vix_level':
return `The VIX, a market-wide measure of expected near-term volatility, has moved into a new level that historically mattered to market participants.`;
}
})();
@@ -280,4 +304,8 @@ export const ALERT_THROTTLE: Record<AlertType, { maxPerHour: number }> = {
cluster_breach: { maxPerHour: 2 },
drawdown_halt: { maxPerHour: 1 },
asymmetry_warning: { maxPerHour: 2 },
fund_capture: { maxPerHour: 3 },
fund_13f: { maxPerHour: 3 },
mirror_diff: { maxPerHour: 3 },
vix_level: { maxPerHour: 1 },
};