48 lines
5.1 KiB
HTML
48 lines
5.1 KiB
HTML
<!doctype html><html><head><meta charset="utf-8"><title>Sketch 3 – News and insights</title><link rel="stylesheet" href="sketch.css"></head><body>
|
||
<div class="app">
|
||
<div class="topbar sk">
|
||
<div class="brand">Portfolio Intelligence Platform <small>thin dashboard · no business logic · calls the API</small></div>
|
||
<span class="pill ok">Market API: live</span>
|
||
<span class="pill ok">LLM API: closed (healthy)</span>
|
||
<div class="nav"><span>Portfolio</span><span>Market data</span><span class="active">News & Insights</span><span>Advisor</span><span>Optimisation</span><span>System</span></div>
|
||
</div>
|
||
<h1 class="page">News & Insights <span class="small">· last ingestion run 2026-09-07 06:00 · 38 items · 31 insights validated · 4 rejected · 3 pending</span></h1>
|
||
<div class="sub">Raw news stored with provenance by <b>NewsIngestionService</b> · structured <b>Insight</b> extracted by <b>ResearchAgent</b> (schema-validated) · every insight checked against the <b>ontology</b> before it enters the system</div>
|
||
|
||
<div class="grid" style="grid-template-columns: 1.15fr 1fr;">
|
||
<div class="card sk">
|
||
<h3>Ingested news <span class="src">filter: <span class="tag pos">validated</span><span class="tag neg">rejected</span><span class="tag">all</span></span></h3>
|
||
<table class="sk-table">
|
||
<tr><th>ID</th><th>Headline</th><th>Source · time</th><th>Guard</th></tr>
|
||
<tr style="background:#eef3f7"><td class="mono">N-1023</td><td><b>ASML raises full-year 2026 guidance on AI demand</b></td><td class="small">Reuters · 07:12</td><td><span class="pill ok">✓ validated</span></td></tr>
|
||
<tr><td class="mono">N-1021</td><td>Nestlé recalls infant formula batch in three countries</td><td class="small">FT · 06:40</td><td><span class="pill ok">✓ validated</span></td></tr>
|
||
<tr><td class="mono">N-1019</td><td>Roche phase-III trial meets primary endpoint</td><td class="small">SwissInfo · 06:05</td><td><span class="pill ok">✓ validated</span></td></tr>
|
||
<tr><td class="mono">N-1017</td><td>"Acme-X to be acquired", says blog post</td><td class="small">blog · 05:50</td><td><span class="pill err">✗ rejected</span></td></tr>
|
||
<tr><td class="mono">N-1015</td><td>Fed minutes hint at slower cuts</td><td class="small">WSJ · 05:20</td><td><span class="pill neutral">⋯ pending</span></td></tr>
|
||
<tr><td class="mono">N-1012</td><td>Chip export rules: EU opens consultation</td><td class="small">Politico · 04:45</td><td><span class="pill ok">✓ validated</span></td></tr>
|
||
</table>
|
||
<div class="small" style="margin-top:8px">Rejected N-1017: ticker <span class="mono">ACMEX</span> not in ontology · event type "rumour" not allowed → insight <b>discarded</b>, raw text kept with provenance for audit.</div>
|
||
</div>
|
||
<div class="card sk">
|
||
<h3>Insight for N-1023 <span class="src">ResearchAgent → Insight (schema v3)</span></h3>
|
||
<table class="sk-table">
|
||
<tr><td style="width:120px"><b>Sentiment</b></td><td>
|
||
<div class="bar" style="width:220px; display:inline-block; vertical-align:middle"><i style="width:80%"></i></div> <b>+0.6</b> <span class="small">(−1 … +1)</span></td></tr>
|
||
<tr><td><b>Affected tickers</b></td><td><span class="tag">ASML</span><span class="tag">NVDA</span> <span class="small">(resolved against ontology)</span></td></tr>
|
||
<tr><td><b>Event type</b></td><td><span class="tag">guidance</span> <span class="small">∈ {earnings, guidance, M&A, regulatory, product, recall, macro}</span></td></tr>
|
||
<tr><td><b>Summary</b></td><td>ASML lifts 2026 revenue guidance, citing AI-related demand for EUV systems; sees continued order strength into 2027.</td></tr>
|
||
<tr><td><b>Provenance</b></td><td class="mono">news_id=N-1023 · source=Reuters · fetched 2026-09-07T07:12Z · hash 9f3a…</td></tr>
|
||
<tr><td><b>Extraction</b></td><td class="small">model via LLM gateway · 1 412 tokens · 2.1 s · schema valid on first attempt</td></tr>
|
||
<tr><td><b>Guard</b></td><td><span class="pill ok">✓ ticker</span> <span class="pill ok">✓ sector</span> <span class="pill ok">✓ event type</span> <span class="pill ok">✓ citation resolvable</span></td></tr>
|
||
</table>
|
||
<div style="margin-top:10px"><span class="btn">Open source text</span> <span class="btn">Show raw extraction log (audit)</span></div>
|
||
<div class="small" style="margin-top:8px">The rest of the system never sees raw model text — only this validated object (anti-corruption layer, §4.1).</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="note" style="left: 470px; top: 96px;"><b>1</b>Ontology as run-time guard: valid ticker? valid sector? plausible event type? (§3.2, §4.2)</div>
|
||
<div class="note r" style="left: 1060px; top: 560px;"><b>2</b>Strict, schema-validated Insight — reject or repair non-conforming responses (§4.1).</div>
|
||
<div class="note" style="left: 40px; top: 640px;"><b>3</b>News text is untrusted input: a prompt-injection vector — treat it as data, never as instructions (§4 pitfalls).</div>
|
||
<div class="watermark">SKETCH 3/7 · wireframe, not a specification</div>
|
||
</div></body></html>
|