Repository navigation
Expand file tree
/
Copy pathprocess_flow.html
More file actions
165 lines (150 loc) · 9.07 KB
/
Copy pathprocess_flow.html
File metadata and controls
165 lines (150 loc) · 9.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>alpha_harness — the self-tuning research loop</title>
<style>
:root{
--ink:#0f172a; --muted:#64748b; --line:#e2e8f0; --bg:#f8fafc; --card:#ffffff;
}
*{box-sizing:border-box}
body{
margin:0; background:radial-gradient(1200px 600px at 50% -10%, #eef2ff 0%, var(--bg) 55%);
color:var(--ink);
font-family:"Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;
-webkit-font-smoothing:antialiased;
}
.wrap{max-width:1180px; margin:0 auto; padding:40px 28px 56px}
.card{
background:var(--card); border:1px solid var(--line); border-radius:18px;
box-shadow:0 12px 40px rgba(15,23,42,.08); padding:34px 34px 26px;
}
.eyebrow{
display:inline-block; font-size:12.5px; font-weight:700; letter-spacing:.12em;
text-transform:uppercase; color:#4f46e5; background:#eef2ff; border:1px solid #e0e7ff;
padding:5px 11px; border-radius:999px;
}
h1{font-size:30px; line-height:1.15; margin:14px 0 8px; letter-spacing:-.02em}
h1 .mono{font-family:"Cascadia Code", "Consolas", ui-monospace, monospace; color:#4338ca}
.sub{font-size:16px; color:var(--muted); max-width:860px; margin:0 0 6px}
.diagram{margin:18px 0 8px; overflow-x:auto; text-align:center}
.diagram svg{max-width:100%; height:auto}
.legend{display:flex; flex-wrap:wrap; gap:10px 18px; margin:14px 2px 4px; font-size:13px; color:#334155}
.legend span{display:inline-flex; align-items:center; gap:7px}
.chip{width:13px; height:13px; border-radius:4px; display:inline-block; border:1px solid rgba(15,23,42,.18)}
.stats{
display:flex; flex-wrap:wrap; gap:10px; margin-top:22px; padding-top:20px; border-top:1px dashed var(--line);
}
.stat{
flex:1 1 150px; min-width:140px; background:#0f172a; color:#e2e8f0; border-radius:12px; padding:13px 15px;
}
.stat b{display:block; font-size:21px; color:#fff; letter-spacing:-.01em}
.stat small{display:block; font-size:11.5px; color:#94a3b8; margin-top:3px; text-transform:uppercase; letter-spacing:.06em}
.foot{margin-top:18px; font-size:12.5px; color:var(--muted)}
.foot b{color:#334155}
</style>
</head>
<body>
<div class="wrap">
<div class="card">
<span class="eyebrow">Autonomous quant research · integrity-first</span>
<h1><span class="mono">alpha_harness</span> — the self-tuning research loop</h1>
<p class="sub">An always-on, pre-registered, multiple-testing-deflated search for technical×fundamental×macro
alpha. It runs unattended every 3 hours across four tracks and refines itself cycle over cycle.
The audit machinery is the product — it maps what is real, it does not chase a number, and it never trades.</p>
<div class="diagram" id="diagram">Rendering diagram…</div>
<div class="legend">
<span><i class="chip" style="background:#dbeafe;border-color:#2563eb"></i>Scout (ideas)</span>
<span><i class="chip" style="background:#f1f5f9;border-color:#64748b"></i>Triage / decision</span>
<span><i class="chip" style="background:#fef3c7;border-color:#d97706"></i>Data-unlock (new PIT inputs)</span>
<span><i class="chip" style="background:#cffafe;border-color:#0891b2"></i>Pre-register & freeze</span>
<span><i class="chip" style="background:#ede9fe;border-color:#7c3aed"></i>Audit gates / verdict</span>
<span><i class="chip" style="background:#fae8ff;border-color:#a21caf"></i>Adversarial refute</span>
<span><i class="chip" style="background:#dcfce7;border-color:#16a34a"></i>Pass → promote</span>
<span><i class="chip" style="background:#fee2e2;border-color:#dc2626"></i>Reject / archive</span>
<span><i class="chip" style="background:#ffedd5;border-color:#ea580c"></i>Fine-tuning feedback loop</span>
</div>
<div class="stats">
<div class="stat"><b>every 3h</b><small>unattended cycle</small></div>
<div class="stat"><b>4 tracks</b><small>scout · triage · data · validate</small></div>
<div class="stat"><b>116 trials</b><small>cumulative, pre-registered</small></div>
<div class="stat"><b>0 PASS</b><small>by design — NO_PASS is valid</small></div>
<div class="stat"><b>DSR ≥ 0.95</b><small>bar rises every cycle</small></div>
<div class="stat"><b>$0 / never trades</b><small>capital is human-gated</small></div>
</div>
<p class="foot"><b>The fine-tuning loop:</b> every verdict is logged so no idea is ever re-tested, the
Deflated-Sharpe bar rises with the cumulative trial count, and <b>STRATEGY.md</b> opens/closes research
"lanes" and seeds the next backlog — so each cycle searches a harder bar with a better-aimed hypothesis.
Status as of cycle 10 (2026-06-28).</p>
</div>
</div>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
startOnLoad:false, theme:'base', securityLevel:'loose',
flowchart:{ htmlLabels:true, curve:'basis', nodeSpacing:42, rankSpacing:46, padding:8 },
themeVariables:{ fontFamily:'Segoe UI, Helvetica, Arial, sans-serif', fontSize:'14px', lineColor:'#94a3b8' }
});
const graph = `flowchart TD
SCHED([⏱ Scheduled tick · every 3h · headless]):::trigger --> ORCH[orchestrate_tick.py<br/>one tick = one structured record]:::orch
ORCH --> SCOUT
subgraph A[" Track A · SCOUT — cheap model, runs every tick "]
SCOUT[Web search:<br/>papers · practitioner posts · macro news]:::scout --> NORM[Normalize to card schema]:::scout --> DEDUP{New vs<br/>registry?}:::dec
end
DEDUP -- duplicate --> DROP["Drop — "nothing new" is a valid result"]:::dead
DEDUP -- new --> INBOX[(idea_inbox.jsonl)]:::store
INBOX --> TRIAGE
subgraph B[" Track B · TRIAGE — deterministic Python · $0 · every tick "]
TRIAGE{Classify<br/>each card}:::dec
end
TRIAGE -- "vague / not PIT-safe" --> REJ[REJECT_UNTESTABLE]:::dead
TRIAGE -- "exact / fuzzy match" --> REJD[REJECT_DUPLICATE]:::dead
TRIAGE -- "on-panel but below bar" --> WL[(WATCHLIST)]:::store
TRIAGE -- "blocked by missing data" --> CDATA
TRIAGE -- "fresh · on-panel · priority ≥ 6" --> PREREG
subgraph C[" Track C · DATA-UNLOCK — build NEW point-in-time inputs "]
CDATA[Scored backlog ·<br/>ONE active build]:::data --> BUILD[Build PIT panel + unit tests<br/>no paywall / ToS bypass]:::data --> NEWCOL[(New PIT factor column)]:::store
end
NEWCOL -. "unlocks a new research lane" .-> PREREG
subgraph D[" Track D · VALIDATION — full audit · only when a candidate exists "]
PREREG["🧊 Pre-register & FREEZE<br/>prereg.json · sha256 · 3–8 designs"]:::freeze --> BT[Real backtest on PIT panel<br/>L/S spread + long-only book]:::test
BT --> GATES{{"Audit battery — frozen gates<br/>G1 predictive t>2 · G3 beats synthetic null PSR<br/>G4 DSR>0.95 deflated by CUMULATIVE trials<br/>G5 cost survives · G7 not a sector bet<br/>G8 holdable long-only IR>0<br/>IS/OOS split · FF5+Mom residual-α"}}:::gate
end
GATES --> SURV{Survivor?}:::dec
SURV -- yes --> REFUTE["⚔ Adversarial refutation<br/>Opus · default-to-REFUTE"]:::refute
SURV -- no --> VERDICT
REFUTE --> VERDICT{{Verdict}}:::gate
VERDICT -- PASS --> PROMOTE[Auto-promote → truealpha/]:::pass
PROMOTE --> HUMAN[["Human-gated live-readiness<br/>→ paper-deploy — SEPARATE step"]]:::human
VERDICT -- "MARGINAL / NO_PASS" --> ARCHIVE[Archive · honest write-up]:::dead
ARCHIVE --> REG[(tested_ideas.jsonl<br/>NEVER re-test)]:::store
PROMOTE --> REG
REG --> STRAT[/"Update STRATEGY.md<br/>open / close 'lanes' · seed next backlog"/]:::loop
STRAT --> BAR["⬆ DSR bar RISES<br/>n_trials += designs tested"]:::loop
BAR -. "next cycle: harder bar, better-aimed search" .-> ORCH
classDef trigger fill:#1f2937,stroke:#0f172a,color:#ffffff
classDef orch fill:#334155,stroke:#0f172a,color:#ffffff
classDef scout fill:#dbeafe,stroke:#2563eb,color:#0b3a82
classDef data fill:#fef3c7,stroke:#d97706,color:#7c4a03
classDef test fill:#e0e7ff,stroke:#4f46e5,color:#1e1b4b
classDef freeze fill:#cffafe,stroke:#0891b2,color:#083344
classDef gate fill:#ede9fe,stroke:#7c3aed,color:#3b0764
classDef refute fill:#fae8ff,stroke:#a21caf,color:#4a044e
classDef dec fill:#f1f5f9,stroke:#64748b,color:#0f172a
classDef store fill:#f8fafc,stroke:#94a3b8,color:#0f172a
classDef dead fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
classDef pass fill:#dcfce7,stroke:#16a34a,color:#14532d
classDef human fill:#d1fae5,stroke:#059669,color:#064e3b
classDef loop fill:#ffedd5,stroke:#ea580c,color:#7c2d12`;
try{
const { svg } = await mermaid.render('alphaHarnessFlow', graph);
document.getElementById('diagram').innerHTML = svg;
}catch(e){
document.getElementById('diagram').innerHTML =
'<pre style="color:#dc2626;text-align:left;white-space:pre-wrap">Mermaid render error:\n'+ (e && e.message ? e.message : e) +'</pre>';
console.error(e);
}
</script>
</body>
</html>