跳到主要内容

M0 ADR 代码事实底图

为 6 条 M0-必锁 ADR 采集的现行代码事实(只述现状,不下决策)。代码仓 data-horizon,schema 在 docs/sql/dn_*.sql,model 在 server/internal/model/,job 在 server/internal/job/,配置在 server/etc/*.yaml

ADR-08 信息资产存储切分

  • dn_raw_newsdocs/sql/dn_raw_news.sql):原始+标准化产物同表。列:news_id(MD5)、source_idsource_type(判别:news|signal|social)、source_timestampcreated_at(入库)、updated_at(标准化完成)、status(0 待处理/1 已标准化/2 已分发/3 失败或重复)、repeat_news_id(去重标记);标准化列 std_content_zhstd_content_ensubjects(JSON)、std_extra(JSON:category/keywords)。
  • dn_source_signaldocs/sql/dn_source_signal.sql):从原始抽取的交易信号,append-only,raw_news_id 1:1 证据锚。列:msg_kind(trade_intent|trade_report|commentary|chatter)、symboldirection(long/short/neutral)、signal_clarityparseabilitypublished_tscreated_at
  • dn_push_log:交付记录(见 ADR-04)。dn_agent_execution:LLM 处理证据(raw_news_idagent_idbatch_idstatusresult JSON、created_atcompleted_at)。
  • 判别设计:单表 dn_raw_news+source_type 枚举;标准化产物=同表列,无独立 dn_event_news_std(旧表已停写/不在现行写路径)。
  • 七维度落表:来源 ✓(source_id/name/author);双时间戳 ✓(source_timestamp+created_at);证据 部分(raw_news_id 锚+agent_execution.result);状态 ✓(status 枚举);质量 ✗ / 授权 ✗ / 反馈 ✗(无列)

ADR-02 私域授权模型

  • dn_crawler_sourcedocs/sql/dn_crawler_source.sql):source_nosource_nameplatform(twitter|telegram|discord|website)、source_type(news|signal|social)、languageexternal_idstatus(1 开/2 关)、category_idkol_idstd_config(JSON)、tags(JSON 业务标签)。无授权/licensing/适用限制/usage-limit 列
  • dn_koldocs/sql/dn_kol.sql):kol_nameorganizationmarket(JSON)、strategy_style(JSON)、remarkstatus无授权列
  • 结论:授权层完全缺位;来源仅 tags 供运营过滤。

ADR-04 输出交付幂等/重试/回放

  • dn_push_logdocs/sql/dn_push_log.sql):from_type(agent_execution|subscriber|direct)、from_ididempotent_key(VARCHAR128 UNIQUE)、target_namepayloadstatus(0 待/1 成/2 败)、retry_count(INT default 0)、last_errorcreated_atupdated_at
  • push jobserver/internal/job/push_message_job.go):FindPending(ctx,50) 扫待推;markLogStatusFull() 更新 status/HttpStatus/LastError/CostMs。
  • retry 死代码push_log_model.go 查询 where status=0 and retry_count<3,但 retry_count 被检查却从不自增consts/push_consts.go MaxRetryCount=3 未被用于自增。→ 失败日志理论上被永久重试。
  • webhookserver/internal/logic/webhook/webhook_logic.go):入站只 info 日志记录字段,返回 {Success:true, Message:"received"}——仅业务 ACK,不落库消费确认

ADR-11 下游反馈 schema/存储

  • NOT FOUND:无消费反馈 / 消费确认 / 运行证据回流表。dn_push_log 只记推送状态;webhook 只 log,不落任何表。

ADR-10 密钥与配置迁移

  • server/etc/config.railway.prod.yaml 明文密钥(值已脱敏):JWT AccessSecret、Telegram BotToken、Google Translate APIKey、HttpProxy(含密码)。
  • 硬编码:MySQL DSN / Redis host·port·password 占位与「override via env」注释矛盾(注释声明走 env,YAML 仍留占位/明文)。

ADR-01 突发事件识别口径与时效

  • 突发标志位 NOT FOUND:dn_raw_news 无 is_breaking/urgency/priority;dn_event_category 不含紧急度;signal_clarity 是信号清晰度非突发。
  • 双时间戳source_timestamp(发布,BIGINT Unix)、created_at(入库,UTC+8)、updated_at(标准化完成)。
  • 去重server/internal/standardize/standardize.go checkDuplicate() ~442-470):查 Weaviate RawNews 集合语义相似;DedupMinCertainty=0.95DedupTimeWindow=1h、键=标准化内容向量;命中则原记录 status=3 + repeat_news_id;标准化后回写 Weaviate 索引。