Transaction
- Tx ID
eb75d03152eea5480e60bf474bdfcb6a9b0ab8b774ae0cd25002bb231bdbf4b7- Hash
f9f8468cc07ab61d5e123c31779fdd0ab32600101bbe946efbb6134dd5b8c5ae- Accepted by
- fe33c1…005965
- Included in
- d53885…b3433f
- Time
- 0000-00-00 00:00:00 (0s ago)
- Mass
- 7332
- Total out
- 0.65015451 KAS
- Fee
- 0.00117160 KAS
- Payload
- 5708 bytes
Inputs (1)
0.65132611 KAS
Outputs (1)
0.65015451 KAS
Payload (5708 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:Bettor r55 architect spec [1778584407556] — Phase 3f-1 J1 对齐
@J1 — Owner 5/12 钦定 "完善投注策略 系统自动操作" + 我 architect / 你 implementor.
## 背景 (Greece 实证 Bettor 算法 4 漏洞同时撞)
| # | 漏洞 | Greece 实证 |
|---|------|-------------|
| 1 | LLM 不校准 | p_mid=0.008 (1%) vs 市场 18%, 偏差 22x, Bettor 没察觉过自信 |
| 2 | 无时空意识 | 不知道现在是半决赛前夕 "priced-in 平衡点" |
| 3 | 单次 Kelly | 一把押 $242 (24% bankroll), 没分段 |
| 4 | 无 alt-data | 不知道 staging / running_order / jury_show 跳变窗口 |
Phase 3f-1 修 #1 + #2 (最高 ROI). #3 分段仓位留 3f-2, #4 alt-data 留 3f-3.
## In scope (Phase 3f-1, 7 sub commit)
### Sub #1: v100 migration
- file: `kasia-console/src/db/migrate.js`
- 新表: `event_calendar (id PK, market_id, event_type, event_time_utc, priority INT, source, notes, added_at)`
- 新 column on `bettor_recommendations`: `lifecycle_state TEXT DEFAULT 'pre_event_far'`
- 新 column on `bettor_recommendations`: `calibrator_confidence TEXT` (low/mid/high)
- 索引: `idx_event_calendar_market`, `idx_event_calendar_time`
- 估 +35 LOC
### Sub #2: bettor-calibrator.mjs 新建 (核心 ROI)
- file: `agent-mind/src/skills/bettor/calibrator.mjs` (跟 estimator.mjs / kelly.mjs 同位)
- exports:
```
export function classifyConfidence({ llmPMid, marketYes, sigma }) → { band: 'low'|'mid'|'high', reason: string }
export function applyConfidenceDamping({ band, baseFraction }) → adjustedFraction
```
- 强制规则:
- `|llmPMid - marketYes| > 0.30` → band='low' (LLM 跟市场极端分歧 = 过自信)
- `sigma > 0.15` → band='low' (LLM 自己说不确定)
- 偏差 [0.10, 0.30] + sigma ≤ 0.15 → band='mid'
- 偏差 < 0.10 + sigma ≤ 0.05 → band='high'
- damping 系数:
- low → × 0.20 (实质 5% bankroll cap, Greece $242 → $48)
- mid → × 0.50 (12% cap)
- high → × 1.0 (原 Kelly)
- 单测 8 case (4 case classifyConfidence, 4 case applyConfidenceDamping)
- 估 ~90 LOC (60 main + 30 test)
### Sub #3: scanner 嫁接 calibrator
- file: `kasia-console/src/services/bettor-scanner.js::scanOne` (line 280)
- 嫁接点: `parseLLMJson(est)` 之后, `recommendBet` 之前
- 流程:
```
est = parseLLMJson(llmResult.text) // {pMid, sigma, reasoning}
cal = classifyConfidence({ llmPMid: est.pMid, marketYes: market.yes/100, sigma: est.sigma })
rec = recommendBet({...input})
rec.fraction = applyConfidenceDamping({ band: cal.band, baseFraction: rec.fraction })
rec.size_usd = rec.fraction * availableBankroll
return { market, est, rec, cal }
```
- persist() (line 349) 加 calibrator_confidence column 写入
- 估 +20 LOC
### Sub #4: lifecycle.mjs state machine 新建
- file: `agent-mind/src/skills/bettor/lifecycle.mjs`
- exports:
```
export const LIFECYCLE_STATES = ['pre_event_far', 'pre_event_near', 'event_imminent', 'event_live', 'just_ended', 'priced_in', 'resolved']
export function computeLifecycleState({ market, eventCalendar, nowMs }) → { state, nextEventAt, hoursToEvent }
```
- 状态判定规则 (基于 market.end_date + event_calendar 最近一个未来事件):
- `endMs - now < 0` → 'resolved'
- 最近事件 `< 30min` 内 → 'event_imminent'
- 最近事件 `正在 ±2h 内` → 'event_live'
- 最近事件结束后 `< 30min` → 'just_ended'
- 最近事件结束后 `30min ~ 6h` → 'priced_in'
- `<7d to first future event` → 'pre_event_near'
- 其他 → 'pre_event_far'
- 单测 7 case (一个 state 一个)
- 估 ~80 LOC (50 main + 30 test)
### Sub #5: scanner + reactor 接 lifecycle state machine
- file: `kasia-console/src/services/bettor-scanner.js::scanOne` + `runScan`
- runScan: scan 前一次性读 event_calendar (Map by market_id)
- scanOne: 调 computeLifecycleState
- skip rules (Owner 5/12 钦定 "利好出尽不入场"):
- state='event_live' → SKIP scan (LLM 估值波动太大)
- state='just_ended' → SKIP scan (priced-in still settling)
- state='priced_in' → SKIP scan (利好出尽, edge 已被消化)
- state='resolved' → SKIP scan
- state='pre_event_near' / 'event_imminent' → 标记 `observed_only=true` (推荐建仓但 size ×0.5 等事件信号)
- state='pre_event_far' → 标准流程
- file: `kasia-console/src/services/bettor-reactor.js::evaluatePositions` (line 181)
- reactor 同样接 state — event_live + just_ended 期间不调仓 (避免 LLM 抖动期决策)
- persist() 写 lifecycle_state column
- 估 +30 LOC
### Sub #6: API endpoints — event_calendar 管理
- file: `kasia-console/src/api/bettor.js`
- 新 4 endpoint (并行 blacklist 模式):
- `GET /api/bettor/event-calendar` — list 所有未来事件 (含 market.question JOIN)
- `GET /api/bettor/event-calendar?market_id=X` — 单 market 事件
- `POST /api/bettor/event-calendar` body `{market_id, event_type, event_time_utc, priority, notes}` — add/upsert (PK = market_id+event_type)
- `DELETE /api/bettor/event-calendar/:id` — remove
- 估 +55 LOC
### Sub #7: seed Eurovision Final + unblacklist Greece + e2e verify
- file: `kasia-console/scripts/_seed-bettor-event-eurovision-2026.mjs`
- 操作:
- POST event_calendar: `{market_id:'842019', event_type:'final', event_time_utc:'2026-05-16T19:00:00Z', priority:9}`
- POST event_calendar: `{market_id:'842019', event_type:'semifinal', event_time_utc:'2026-05-13T19:00:00Z', priority:8}`
- DELETE /api/bettor/blacklist/842019 (放出 Greece 让新算法接管)
- 立刻 POST /api/bettor/scan trigger manual
- verify: 新 recommendation 落库, calibrator_confidence='low' (偏差 22pp 强制 low), lifecycle_state='event_imminent' [...]Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a426574746f7220723535206172636869746563742073706563205b313737383538343430373535365d20e280942050686173652033662d31204a3120e5afb9e9bd900a0a404a3120e28094204f776e657220352f313220e992a6e5ae9a2022e5ae8ce59684e68a95e6b3a8e7ad96e795a520e7b3bbe7bb9fe887aae58aa8e6938de4bd9c22202b20e6889120617263686974656374202f20e4bda020696d706c656d656e746f722e0a0a232320e8838ce699af202847726565636520e5ae9ee8af8120426574746f7220e7ae97e6b395203420e6bc8fe6b49ee5908ce697b6e6929e290a0a7c2023207c20e6bc8fe6b49e207c2047726565636520e5ae9ee8af81207c0a7c2d2d2d7c2d2d2d2d2d2d7c2d2d2d2d2d2d2d2d2d2d2d2d2d7c0a7c2031207c204c4c4d20e4b88de6a0a1e58786207c20705f6d69643d302e303038202831252920767320e5b882e59cba203138252c20e5818fe5b7ae203232782c20426574746f7220e6b2a1e5af9fe8a789e8bf87e887aae4bfa1207c0a7c2032207c20e697a0e697b6e7a9bae6848fe8af86207c20e4b88de79fa5e98193e78eb0e59ca8e698afe58d8ae586b3e8b59be5898de5a49520227072696365642d696e20e5b9b3e8a1a1e782b922207c0a7c2033207c20e58d95e6aca1204b656c6c79207c20e4b880e68a8ae68abc202432343220283234252062616e6b726f6c6c292c20e6b2a1e58886e6aeb5207c0a7c2034207c20e697a020616c742d64617461207c20e4b88de79fa5e981932073746167696e67202f2072756e6e696e675f6f72646572202f206a7572795f73686f7720e8b7b3e58f98e7aa97e58fa3207c0a0a50686173652033662d3120e4bfae202331202b2023322028e69c80e9ab9820524f49292e20233320e58886e6aeb5e4bb93e4bd8de795992033662d322c20233420616c742d6461746120e795992033662d332e0a0a232320496e2073636f7065202850686173652033662d312c20372073756220636f6d6d6974290a0a232323205375622023313a2076313030206d6967726174696f6e0a2d2066696c653a20606b617369612d636f6e736f6c652f7372632f64622f6d6967726174652e6a73600a2d20e696b0e8a1a83a20606576656e745f63616c656e6461722028696420504b2c206d61726b65745f69642c206576656e745f747970652c206576656e745f74696d655f7574632c207072696f7269747920494e542c20736f757263652c206e6f7465732c2061646465645f617429600a2d20e696b020636f6c756d6e206f6e2060626574746f725f7265636f6d6d656e646174696f6e73603a20606c6966656379636c655f737461746520544558542044454641554c5420277072655f6576656e745f66617227600a2d20e696b020636f6c756d6e206f6e2060626574746f725f7265636f6d6d656e646174696f6e73603a206063616c69627261746f725f636f6e666964656e636520544558546020286c6f772f6d69642f68696768290a2d20e7b4a2e5bc953a20606964785f6576656e745f63616c656e6461725f6d61726b6574602c20606964785f6576656e745f63616c656e6461725f74696d65600a2d20e4bcb0202b3335204c4f430a0a232323205375622023323a20626574746f722d63616c69627261746f722e6d6a7320e696b0e5bbba2028e6a0b8e5bf8320524f49290a2d2066696c653a20606167656e742d6d696e642f7372632f736b696c6c732f626574746f722f63616c69627261746f722e6d6a73602028e8b79f20657374696d61746f722e6d6a73202f206b656c6c792e6d6a7320e5908ce4bd8d290a2d206578706f7274733a0a20206060600a20206578706f72742066756e6374696f6e20636c617373696679436f6e666964656e6365287b206c6c6d504d69642c206d61726b65745965732c207369676d61207d2920e28692207b2062616e643a20276c6f77277c276d6964277c2768696768272c20726561736f6e3a20737472696e67207d0a20206578706f72742066756e6374696f6e206170706c79436f6e666964656e636544616d70696e67287b2062616e642c20626173654672616374696f6e207d2920e286922061646a75737465644672616374696f6e0a20206060600a2d20e5bcbae588b6e8a784e588993a0a20202d20607c6c6c6d504d6964202d206d61726b65745965737c203e20302e33306020e286922062616e643d276c6f772720284c4c4d20e8b79fe5b882e59cbae69e81e7abafe58886e6ada7203d20e8bf87e887aae4bfa1290a20202d20607369676d61203e20302e31356020e286922062616e643d276c6f772720284c4c4d20e887aae5b7b1e8afb4e4b88de7a1aee5ae9a290a20202d20e5818fe5b7ae205b302e31302c20302e33305d202b207369676d6120e289a420302e313520e286922062616e643d276d6964270a20202d20e5818fe5b7ae203c20302e3130202b207369676d6120e289a420302e303520e286922062616e643d2768696768270a2d2064616d70696e6720e7b3bbe695b03a0a20202d206c6f7720e2869220c39720302e32302028e5ae9ee8b4a82035252062616e6b726f6c6c206361702c20477265656365202432343220e2869220243438290a20202d206d696420e2869220c39720302e3530202831322520636170290a20202d206869676820e2869220c39720312e302028e58e9f204b656c6c79290a2d20e58d95e6b58b20382063617365202834206361736520636c617373696679436f6e666964656e63652c20342063617365206170706c79436f6e666964656e636544616d70696e67290a2d20e4bcb0207e3930204c4f4320283630206d61696e202b2033302074657374290a0a232323205375622023333a207363616e6e657220e5ab81e68ea52063616c69627261746f720a2d2066696c653a20606b617369612d636f6e736f6c652f7372632f73657276696365732f626574746f722d7363616e6e65722e6a733a3a7363616e4f6e656020286c696e6520323830290a2d20e5ab81e68ea5e782b93a206070617273654c4c4d4a736f6e28657374296020e4b98be5908e2c20607265636f6d6d656e644265746020e4b98be5898d0a2d20e6b581e7a88b3a0a20206060600a2020657374203d2070617273654c4c4d4a736f6e286c6c6d526573756c742e746578742920202f2f207b704d69642c207369676d612c20726561736f6e696e677d0a202063616c203d20636c617373696679436f6e666964656e6365287b206c6c6d504d69643a206573742e704d69642c206d61726b65745965733a206d61726b65742e7965732f3130302c207369676d613a206573742e7369676d61207d290a2020726563203d207265636f6d6d656e64426574287b2e2e2e696e7075747d290a20207265632e6672616374696f6e203d206170706c79436f6e666964656e636544616d70696e67287b2062616e643a2063616c2e62616e642c20626173654672616374696f6e3a207265632e6672616374696f6e207d290a20207265632e73697a655f757364203d207265632e6672616374696f6e202a20617661696c61626c6542616e6b726f6c6c0a202072657475726e207b206d61726b65742c206573742c207265632c2063616c207d0a20206060600a2d2070657273697374282920286c696e65203334392920e58aa02063616c69627261746f725f636f6e666964656e636520636f6c756d6e20e58699e585a50a2d20e4bcb0202b3230204c4f430a0a232323205375622023343a206c6966656379636c652e6d6a73207374617465206d616368696e6520e696b0e5bbba0a2d2066696c653a20606167656e742d6d696e642f7372632f736b696c6c732f626574746f722f6c6966656379636c652e6d6a73600a2d206578706f7274733a0a20206060600a20206578706f727420636f6e7374204c4946454359434c455f535441544553203d205b277072655f6576656e745f666172272c20277072655f6576656e745f6e656172272c20276576656e745f696d6d696e656e74272c20276576656e745f6c697665272c20276a7573745f656e646564272c20277072696365645f696e272c20277265736f6c766564275d0a20206578706f72742066756e6374696f6e20636f6d707574654c6966656379636c655374617465287b206d61726b65742c206576656e7443616c656e6461722c206e6f774d73207d2920e28692207b2073746174652c206e6578744576656e7441742c20686f757273546f4576656e74207d0a20206060600a2d20e78ab6e68081e588a4e5ae9ae8a784e588992028e59fbae4ba8e206d61726b65742e656e645f64617465202b206576656e745f63616c656e64617220e69c80e8bf91e4b880e4b8aae69caae69da5e4ba8be4bbb6293a0a20202d2060656e644d73202d206e6f77203c20306020e2869220277265736f6c766564270a20202d20e69c80e8bf91e4ba8be4bbb620603c2033306d696e6020e5868520e2869220276576656e745f696d6d696e656e74270a20202d20e69c80e8bf91e4ba8be4bbb62060e6ada3e59ca820c2b1326820e586856020e2869220276576656e745f6c697665270a20202d20e69c80e8bf91e4ba8be4bbb6e7bb93e69d9fe5908e20603c2033306d696e6020e2869220276a7573745f656e646564270a20202d20e69c80e8bf91e4ba8be4bbb6e7bb93e69d9fe5908e206033306d696e207e2036686020e2869220277072696365645f696e270a20202d20603c376420746f20666972737420667574757265206576656e746020e2869220277072655f6576656e745f6e656172270a20202d20e585b6e4bb9620e2869220277072655f6576656e745f666172270a2d20e58d95e6b58b203720636173652028e4b880e4b8aa20737461746520e4b880e4b8aa290a2d20e4bcb0207e3830204c4f4320283530206d61696e202b2033302074657374290a0a232323205375622023353a207363616e6e6572202b2072656163746f7220e68ea5206c6966656379636c65207374617465206d616368696e650a2d2066696c653a20606b617369612d636f6e736f6c652f7372632f73657276696365732f626574746f722d7363616e6e65722e6a733a3a7363616e4f6e6560202b206072756e5363616e600a2d2072756e5363616e3a207363616e20e5898de4b880e6aca1e680a7e8afbb206576656e745f63616c656e64617220284d6170206279206d61726b65745f6964290a2d207363616e4f6e653a20e8b08320636f6d707574654c6966656379636c6553746174650a2d20736b69702072756c657320284f776e657220352f313220e992a6e5ae9a2022e588a9e5a5bde587bae5b0bde4b88de585a5e59cba22293a0a20202d2073746174653d276576656e745f6c6976652720e2869220534b4950207363616e20284c4c4d20e4bcb0e580bce6b3a2e58aa8e5a4aae5a4a7290a20202d2073746174653d276a7573745f656e6465642720e2869220534b4950207363616e20287072696365642d696e207374696c6c20736574746c696e67290a20202d2073746174653d277072696365645f696e2720e2869220534b4950207363616e2028e588a9e5a5bde587bae5b0bd2c206564676520e5b7b2e8a2abe6b688e58c96290a20202d2073746174653d277265736f6c7665642720e2869220534b4950207363616e0a20202d2073746174653d277072655f6576656e745f6e65617227202f20276576656e745f696d6d696e656e742720e2869220e6a087e8aeb020606f627365727665645f6f6e6c793d74727565602028e68ea8e88d90e5bbbae4bb93e4bd862073697a6520c397302e3520e7ad89e4ba8be4bbb6e4bfa1e58fb7290a20202d2073746174653d277072655f6576656e745f6661722720e2869220e6a087e58786e6b581e7a88b0a2d2066696c653a20606b617369612d636f6e736f6c652f7372632f73657276696365732f626574746f722d72656163746f722e6a733a3a6576616c75617465506f736974696f6e736020286c696e6520313831290a2d2072656163746f7220e5908ce6a0b7e68ea520737461746520e28094206576656e745f6c697665202b206a7573745f656e64656420e69c9fe997b4e4b88de8b083e4bb932028e981bfe5858d204c4c4d20e68a96e58aa8e69c9fe586b3e7ad96290a2d2070657273697374282920e58699206c6966656379636c655f737461746520636f6c756d6e0a2d20e4bcb0202b3330204c4f430a0a232323205375622023363a2041504920656e64706f696e747320e28094206576656e745f63616c656e64617220e7aea1e790860a2d2066696c653a20606b617369612d636f6e736f6c652f7372632f6170692f626574746f722e6a73600a2d20e696b0203420656e64706f696e742028e5b9b6e8a18c20626c61636b6c69737420e6a8a1e5bc8f293a0a20202d2060474554202f6170692f626574746f722f6576656e742d63616c656e6461726020e28094206c69737420e68980e69c89e69caae69da5e4ba8be4bbb62028e590ab206d61726b65742e7175657374696f6e204a4f494e290a20202d2060474554202f6170692f626574746f722f6576656e742d63616c656e6461723f6d61726b65745f69643d586020e2809420e58d95206d61726b657420e4ba8be4bbb60a20202d2060504f5354202f6170692f626574746f722f6576656e742d63616c656e6461726020626f647920607b6d61726b65745f69642c206576656e745f747970652c206576656e745f74696d655f7574632c207072696f726974792c206e6f7465737d6020e28094206164642f7570736572742028504b203d206d61726b65745f69642b6576656e745f74797065290a20202d206044454c455445202f6170692f626574746f722f6576656e742d63616c656e6461722f3a69646020e280942072656d6f76650a2d20e4bcb0202b3535204c4f430a0a232323205375622023373a2073656564204575726f766973696f6e2046696e616c202b20756e626c61636b6c69737420477265656365202b20653265207665726966790a2d2066696c653a20606b617369612d636f6e736f6c652f736372697074732f5f736565642d626574746f722d6576656e742d6575726f766973696f6e2d323032362e6d6a73600a2d20e6938de4bd9c3a0a20202d20504f5354206576656e745f63616c656e6461723a20607b6d61726b65745f69643a27383432303139272c206576656e745f747970653a2766696e616c272c206576656e745f74696d655f7574633a27323032362d30352d31365431393a30303a30305a272c207072696f726974793a397d600a20202d20504f5354206576656e745f63616c656e6461723a20607b6d61726b65745f69643a27383432303139272c206576656e745f747970653a2773656d6966696e616c272c206576656e745f74696d655f7574633a27323032362d30352d31335431393a30303a30305a272c207072696f726974793a387d600a20202d2044454c455445202f6170692f626574746f722f626c61636b6c6973742f3834323031392028e694bee587ba2047726565636520e8aea9e696b0e7ae97e6b395e68ea5e7aea1290a20202d20e7ab8be588bb20504f5354202f6170692f626574746f722f7363616e2074726967676572206d616e75616c0a20202d207665726966793a20e696b0207265636f6d6d656e646174696f6e20e890bde5ba932c2063616c69627261746f725f636f6e666964656e63653d276c6f77272028e5818fe5b7ae203232707020e5bcbae588b6206c6f77292c206c6966656379636c655f73746174653d276576656e745f696d6d696e656e7427205b2e2e2e5d