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_news(
docs/sql/dn_raw_news.sql):原始+标准化产物同表。列:news_id(MD5)、source_id、source_type(判别:news|signal|social)、source_timestamp、created_at(入库)、updated_at(标准化完成)、status(0 待处理/1 已标准化/2 已分发/3 失败或重复)、repeat_news_id(去重标记);标准化列std_content_zh、std_content_en、subjects(JSON)、std_extra(JSON:category/keywords)。 - dn_source_signal(
docs/sql/dn_source_signal.sql):从原始抽取的交易信号,append-only,raw_news_id1:1 证据锚。列:msg_kind(trade_intent|trade_report|commentary|chatter)、symbol、direction(long/short/neutral)、signal_clarity、parseability、published_ts、created_at。 - dn_push_log:交付记录(见 ADR-04)。dn_agent_execution:LLM 处理证据(
raw_news_id、agent_id、batch_id、status、resultJSON、created_at、completed_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_source(
docs/sql/dn_crawler_source.sql):source_no、source_name、platform(twitter|telegram|discord|website)、source_type(news|signal|social)、language、external_id、status(1 开/2 关)、category_id、kol_id、std_config(JSON)、tags(JSON 业务标签)。无授权/licensing/适用限制/usage-limit 列。 - dn_kol(
docs/sql/dn_kol.sql):kol_name、organization、market(JSON)、strategy_style(JSON)、remark、status。无授权列。 - 结论:授权层完全缺位;来源仅 tags 供运营过滤。
ADR-04 输出交付幂等/重试/回放
- dn_push_log(
docs/sql/dn_push_log.sql):from_type(agent_execution|subscriber|direct)、from_id、idempotent_key(VARCHAR128 UNIQUE)、target_name、payload、status(0 待/1 成/2 败)、retry_count(INT default 0)、last_error、created_at、updated_at。 - push job(
server/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.goMaxRetryCount=3未被用于自增。→ 失败日志理论上被永久重试。 - webhook(
server/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.gocheckDuplicate()~442-470):查 WeaviateRawNews集合语义相似;DedupMinCertainty=0.95、DedupTimeWindow=1h、键=标准化内容向量;命中则原记录 status=3 +repeat_news_id;标准化后回写 Weaviate 索引。