Archive ingestion had been dead since 2026-08-02 because nothing in the compose stack actually ran it. Everything downstream starved from there. - add ingest + enrichment services. server.js only starts the scheduler when DURIIN_RUN_SCHEDULER is not "false", and workers/index.js was not running at all, so articles never got event_id/content/has_embedding and the coordinator had nothing to lease. - pass an explicit origin from coordinatorWorker. it was never passed, so acceptProposal defaulted to 'live' and 464 historical backfill predictions were recorded as live. that also meant verifyEvidence got a null cutoff and skipped its date check entirely. - coarsen cohortKey to event families + horizon buckets. 201 free text event types produced 221 cohorts averaging 2.76 samples, so the n>=30 gate could never be reached and everything abstained for the wrong reason. - gate on cohort diversity, not just sample count. one ticker was roughly half of all resolved outcomes, so a pure count gate was measuring one company. unknown diversity abstains rather than passing. - resolve the admin archive db explicitly and probe it. it relied on a Dockerfile symlink, and without it better-sqlite3 quietly creates an empty file and serves a phantom archive. - clamp implausible future publication dates at ingest. - pin the db backend to sqlite by default. compose hardcoded postgres "true", which would have overridden the operator's own .env on the next redeploy and pointed everything at a stale snapshot. scripts/repair-autonomy-labels.js relabels the affected rows. it is dry run by default and has not been applied. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WnNxwxfXSbeNtjvtz5gayb
160 lines
7.9 KiB
HTML
160 lines
7.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="theme-color" content="#090b0a">
|
|
<title>Duriin — Autonomy</title>
|
|
<link rel="stylesheet" href="/admin/assets/css/base.css?v=20260804-3">
|
|
<link rel="stylesheet" href="/admin/assets/css/layout.css?v=20260804-3">
|
|
<link rel="stylesheet" href="/admin/assets/css/components.css?v=20260804-3">
|
|
<link rel="stylesheet" href="/admin/assets/css/autonomy.css?v=20260829-1">
|
|
</head>
|
|
<body class="page-autonomy">
|
|
|
|
<header class="app-header">
|
|
<h1>Duriin</h1>
|
|
<nav class="tabs">
|
|
<a href="/admin/autonomy" class="active">Autonomy</a>
|
|
<a href="/admin/ingest">Ingest</a>
|
|
<a href="/admin/intelligence">Intelligence</a>
|
|
<a href="/admin/stats">Stats</a>
|
|
<a href="/admin/sql">SQL</a>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="autonomy-shell">
|
|
<section class="autonomy-hero">
|
|
<div class="hero-copy">
|
|
<div class="eyebrow"><span class="pulse"></span><span id="runtime-state">Autonomy runtime</span></div>
|
|
<h2 id="hero-title">Duriin is observing.</h2>
|
|
<p id="hero-description">Building evidence-backed hypotheses from the archive and measuring them against the market.</p>
|
|
</div>
|
|
<div class="hero-mode">
|
|
<span class="mode-label">Execution authority</span>
|
|
<strong id="execution-mode">—</strong>
|
|
<span id="broker-state">Connecting to broker state…</span>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="metric-strip" aria-label="Autonomy summary">
|
|
<article class="metric-block">
|
|
<span class="metric-kicker">Open hypotheses</span>
|
|
<strong id="metric-open">—</strong>
|
|
<small id="metric-resolved">— resolved</small>
|
|
</article>
|
|
<article class="metric-block">
|
|
<span class="metric-kicker">Directional accuracy</span>
|
|
<strong id="metric-accuracy">—</strong>
|
|
<small id="metric-sample">Waiting for outcomes</small>
|
|
</article>
|
|
<article class="metric-block">
|
|
<span class="metric-kicker">Average excess return</span>
|
|
<strong id="metric-alpha">—</strong>
|
|
<small>Against SPY benchmark</small>
|
|
</article>
|
|
<article class="metric-block">
|
|
<span class="metric-kicker">Tradable universe</span>
|
|
<strong id="metric-universe">—</strong>
|
|
<small>Verified Alpaca instruments</small>
|
|
</article>
|
|
</section>
|
|
|
|
<section class="pipeline-section panel">
|
|
<div class="section-head">
|
|
<div><span class="section-index">01</span><h3>Learning loop</h3></div>
|
|
<span class="freshness" id="freshness">Updating…</span>
|
|
</div>
|
|
<div class="pipeline" id="pipeline">
|
|
<div class="pipeline-step"><span class="step-number">01</span><strong>Observe</strong><small>Archive events</small><b id="pipe-observe">—</b></div>
|
|
<div class="pipeline-arrow">→</div>
|
|
<div class="pipeline-step"><span class="step-number">02</span><strong>Propose</strong><small>Evidence hypotheses</small><b id="pipe-propose">—</b></div>
|
|
<div class="pipeline-arrow">→</div>
|
|
<div class="pipeline-step"><span class="step-number">03</span><strong>Measure</strong><small>Market outcomes</small><b id="pipe-measure">—</b></div>
|
|
<div class="pipeline-arrow">→</div>
|
|
<div class="pipeline-step"><span class="step-number">04</span><strong>Calibrate</strong><small>Empirical confidence</small><b id="pipe-calibrate">—</b></div>
|
|
<div class="pipeline-arrow">→</div>
|
|
<div class="pipeline-step"><span class="step-number">05</span><strong>Act</strong><small>Policy decisions</small><b id="pipe-act">—</b></div>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="autonomy-grid">
|
|
<section class="panel hypotheses-panel">
|
|
<div class="section-head">
|
|
<div><span class="section-index">02</span><h3>Latest hypotheses</h3></div>
|
|
<a href="/admin/intelligence/predictions" class="text-link">Legacy intelligence ↗</a>
|
|
</div>
|
|
<div id="hypothesis-list" class="hypothesis-list"><div class="loading-line"></div></div>
|
|
</section>
|
|
|
|
<aside class="panel performance-panel">
|
|
<div class="section-head"><div><span class="section-index">03</span><h3>Measured performance</h3></div></div>
|
|
<div class="accuracy-orbit" id="accuracy-orbit">
|
|
<div><strong id="orbit-value">—</strong><span>correct</span></div>
|
|
</div>
|
|
<div class="performance-facts">
|
|
<div><span>Resolved</span><strong id="perf-resolved">0</strong></div>
|
|
<div><span>Correct</span><strong id="perf-correct">0</strong></div>
|
|
<div><span>Calibration cohorts</span><strong id="perf-cohorts">0</strong></div>
|
|
</div>
|
|
<p class="performance-note" id="performance-note">Duriin will only claim an edge after predictions mature and are measured out of sample.</p>
|
|
<div class="performance-facts" id="origin-split"></div>
|
|
<p class="performance-note" id="origin-note">Historical backfill and walk-forward replay are shown separately. Neither is evidence of live edge.</p>
|
|
</aside>
|
|
</div>
|
|
|
|
<div class="autonomy-grid lower-grid">
|
|
<section class="panel ledger-panel">
|
|
<div class="section-head"><div><span class="section-index">04</span><h3>Decision ledger</h3></div><span class="mode-pill" id="ledger-mode">Shadow</span></div>
|
|
<div class="table-wrap ledger-table">
|
|
<table>
|
|
<thead><tr><th>Instrument</th><th>Decision</th><th>Direction</th><th>Calibration</th><th>Horizon</th><th>Created</th></tr></thead>
|
|
<tbody id="decision-ledger"><tr><td colspan="6" class="empty-state">Waiting for calibrated decisions.</td></tr></tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<aside class="panel runtime-panel">
|
|
<div class="section-head"><div><span class="section-index">05</span><h3>Runtime</h3></div></div>
|
|
<div class="runtime-list">
|
|
<div><span><i class="status-light ok"></i>Coordinator</span><strong id="runtime-coordinator">Active</strong></div>
|
|
<div><span><i class="status-light ok"></i>Outcome resolver</span><strong>Active</strong></div>
|
|
<div><span><i class="status-light ok"></i>Calibration</span><strong>Active</strong></div>
|
|
<div><span><i class="status-light ok"></i>Execution</span><strong id="runtime-execution">Shadow</strong></div>
|
|
<div><span><i class="status-light"></i>Historical queue</span><strong id="runtime-queue">—</strong></div>
|
|
</div>
|
|
<div class="account-card" id="account-card">
|
|
<span>Paper account</span>
|
|
<strong id="account-equity">Not sampled in shadow mode</strong>
|
|
<small id="account-meta">Alpaca Paper connected</small>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
|
|
<section class="panel" aria-label="Historical replay">
|
|
<div class="section-head"><div><span class="section-index">06</span><h3>Historical replay</h3></div><span class="mode-pill">Isolated from execution</span></div>
|
|
<div class="performance-facts">
|
|
<div><span>Run state</span><strong id="replay-status">Starting…</strong></div>
|
|
<div><span>Articles replayed</span><strong id="replay-articles">—</strong></div>
|
|
<div><span>Walk-forward evaluations</span><strong id="replay-evaluations">—</strong></div>
|
|
<div><span>Watermark</span><strong id="replay-watermark">—</strong></div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel" aria-label="Calibration cohorts">
|
|
<div class="section-head"><div><span class="section-index">07</span><h3>Calibration cohorts</h3></div><span class="mode-pill">Needs 30 samples · 5 tickers · max 50% in one</span></div>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<thead><tr><th>Cohort</th><th>Source</th><th>Samples</th><th>Distinct tickers</th><th>Top ticker share</th><th>Status</th></tr></thead>
|
|
<tbody id="cohort-list"><tr><td colspan="6" class="empty-state">No calibration snapshots yet.</td></tr></tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
|
|
<script src="/admin/assets/js/app.js?v=20260804-3"></script>
|
|
<script src="/admin/assets/js/autonomy.js?v=20260829-1"></script>
|
|
</body>
|
|
</html>
|