dsh-data-domain-knowledge 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +360 -0
  3. package/cordis.patch.yml +410 -0
  4. package/eval/README.md +76 -0
  5. package/eval/evaluate-retrieval.mjs +121 -0
  6. package/eval/queries.example.jsonl +2 -0
  7. package/lib/client.js +111415 -0
  8. package/lib/types/config-schema.d.ts +35 -0
  9. package/lib/types/config-schema.d.ts.map +1 -0
  10. package/lib/types/config-schema.js +34 -0
  11. package/lib/types/config-schema.js.map +1 -0
  12. package/lib/types/convert/core-loader.d.ts +32 -0
  13. package/lib/types/convert/core-loader.d.ts.map +1 -0
  14. package/lib/types/convert/core-loader.js +60 -0
  15. package/lib/types/convert/core-loader.js.map +1 -0
  16. package/lib/types/convert/host.d.ts +88 -0
  17. package/lib/types/convert/host.d.ts.map +1 -0
  18. package/lib/types/convert/host.js +479 -0
  19. package/lib/types/convert/host.js.map +1 -0
  20. package/lib/types/convert/ingest.d.ts +125 -0
  21. package/lib/types/convert/ingest.d.ts.map +1 -0
  22. package/lib/types/convert/ingest.js +228 -0
  23. package/lib/types/convert/ingest.js.map +1 -0
  24. package/lib/types/convert/settings-schema.d.ts +18 -0
  25. package/lib/types/convert/settings-schema.d.ts.map +1 -0
  26. package/lib/types/convert/settings-schema.js +26 -0
  27. package/lib/types/convert/settings-schema.js.map +1 -0
  28. package/lib/types/convert/types.d.ts +46 -0
  29. package/lib/types/convert/types.d.ts.map +1 -0
  30. package/lib/types/convert/types.js +41 -0
  31. package/lib/types/convert/types.js.map +1 -0
  32. package/lib/types/diagnosis/cards.d.ts +71 -0
  33. package/lib/types/diagnosis/cards.d.ts.map +1 -0
  34. package/lib/types/diagnosis/cards.js +482 -0
  35. package/lib/types/diagnosis/cards.js.map +1 -0
  36. package/lib/types/diagnosis/problem-classes.d.ts +51 -0
  37. package/lib/types/diagnosis/problem-classes.d.ts.map +1 -0
  38. package/lib/types/diagnosis/problem-classes.js +66 -0
  39. package/lib/types/diagnosis/problem-classes.js.map +1 -0
  40. package/lib/types/diagnosis/schema.d.ts +65 -0
  41. package/lib/types/diagnosis/schema.d.ts.map +1 -0
  42. package/lib/types/diagnosis/schema.js +208 -0
  43. package/lib/types/diagnosis/schema.js.map +1 -0
  44. package/lib/types/diagnosis/seed-source.d.ts +20 -0
  45. package/lib/types/diagnosis/seed-source.d.ts.map +1 -0
  46. package/lib/types/diagnosis/seed-source.js +96 -0
  47. package/lib/types/diagnosis/seed-source.js.map +1 -0
  48. package/lib/types/diagnosis/seed.d.ts +50 -0
  49. package/lib/types/diagnosis/seed.d.ts.map +1 -0
  50. package/lib/types/diagnosis/seed.js +242 -0
  51. package/lib/types/diagnosis/seed.js.map +1 -0
  52. package/lib/types/diagnosis/store.d.ts +81 -0
  53. package/lib/types/diagnosis/store.d.ts.map +1 -0
  54. package/lib/types/diagnosis/store.js +409 -0
  55. package/lib/types/diagnosis/store.js.map +1 -0
  56. package/lib/types/diagnosis/types.d.ts +124 -0
  57. package/lib/types/diagnosis/types.d.ts.map +1 -0
  58. package/lib/types/diagnosis/types.js +13 -0
  59. package/lib/types/diagnosis/types.js.map +1 -0
  60. package/lib/types/directory-picker.d.ts +94 -0
  61. package/lib/types/directory-picker.d.ts.map +1 -0
  62. package/lib/types/directory-picker.js +110 -0
  63. package/lib/types/directory-picker.js.map +1 -0
  64. package/lib/types/extract-model.d.ts +76 -0
  65. package/lib/types/extract-model.d.ts.map +1 -0
  66. package/lib/types/extract-model.js +193 -0
  67. package/lib/types/extract-model.js.map +1 -0
  68. package/lib/types/extract.d.ts +121 -0
  69. package/lib/types/extract.d.ts.map +1 -0
  70. package/lib/types/extract.js +549 -0
  71. package/lib/types/extract.js.map +1 -0
  72. package/lib/types/fts.d.ts +96 -0
  73. package/lib/types/fts.d.ts.map +1 -0
  74. package/lib/types/fts.js +184 -0
  75. package/lib/types/fts.js.map +1 -0
  76. package/lib/types/index.d.ts +39 -0
  77. package/lib/types/index.d.ts.map +1 -0
  78. package/lib/types/index.js +1112 -0
  79. package/lib/types/index.js.map +1 -0
  80. package/lib/types/intent/engine.d.ts +108 -0
  81. package/lib/types/intent/engine.d.ts.map +1 -0
  82. package/lib/types/intent/engine.js +501 -0
  83. package/lib/types/intent/engine.js.map +1 -0
  84. package/lib/types/intent/host.d.ts +88 -0
  85. package/lib/types/intent/host.d.ts.map +1 -0
  86. package/lib/types/intent/host.js +389 -0
  87. package/lib/types/intent/host.js.map +1 -0
  88. package/lib/types/intent/preset-tools.d.ts +37 -0
  89. package/lib/types/intent/preset-tools.d.ts.map +1 -0
  90. package/lib/types/intent/preset-tools.js +45 -0
  91. package/lib/types/intent/preset-tools.js.map +1 -0
  92. package/lib/types/intent/settings-schema.d.ts +59 -0
  93. package/lib/types/intent/settings-schema.d.ts.map +1 -0
  94. package/lib/types/intent/settings-schema.js +57 -0
  95. package/lib/types/intent/settings-schema.js.map +1 -0
  96. package/lib/types/intent/store.d.ts +75 -0
  97. package/lib/types/intent/store.d.ts.map +1 -0
  98. package/lib/types/intent/store.js +139 -0
  99. package/lib/types/intent/store.js.map +1 -0
  100. package/lib/types/intent/tools.d.ts +63 -0
  101. package/lib/types/intent/tools.d.ts.map +1 -0
  102. package/lib/types/intent/tools.js +108 -0
  103. package/lib/types/intent/tools.js.map +1 -0
  104. package/lib/types/intent/types.d.ts +189 -0
  105. package/lib/types/intent/types.d.ts.map +1 -0
  106. package/lib/types/intent/types.js +62 -0
  107. package/lib/types/intent/types.js.map +1 -0
  108. package/lib/types/knowledge-bases.d.ts +266 -0
  109. package/lib/types/knowledge-bases.d.ts.map +1 -0
  110. package/lib/types/knowledge-bases.js +1107 -0
  111. package/lib/types/knowledge-bases.js.map +1 -0
  112. package/lib/types/layout.d.ts +262 -0
  113. package/lib/types/layout.d.ts.map +1 -0
  114. package/lib/types/layout.js +312 -0
  115. package/lib/types/layout.js.map +1 -0
  116. package/lib/types/migrate.d.ts +110 -0
  117. package/lib/types/migrate.d.ts.map +1 -0
  118. package/lib/types/migrate.js +280 -0
  119. package/lib/types/migrate.js.map +1 -0
  120. package/lib/types/recall-rank.d.ts +158 -0
  121. package/lib/types/recall-rank.d.ts.map +1 -0
  122. package/lib/types/recall-rank.js +261 -0
  123. package/lib/types/recall-rank.js.map +1 -0
  124. package/lib/types/runtime.d.ts +568 -0
  125. package/lib/types/runtime.d.ts.map +1 -0
  126. package/lib/types/runtime.js +3045 -0
  127. package/lib/types/runtime.js.map +1 -0
  128. package/lib/types/settings-schema.d.ts +117 -0
  129. package/lib/types/settings-schema.d.ts.map +1 -0
  130. package/lib/types/settings-schema.js +92 -0
  131. package/lib/types/settings-schema.js.map +1 -0
  132. package/lib/types/settings-volatile.d.ts +102 -0
  133. package/lib/types/settings-volatile.d.ts.map +1 -0
  134. package/lib/types/settings-volatile.js +114 -0
  135. package/lib/types/settings-volatile.js.map +1 -0
  136. package/lib/types/types.d.ts +799 -0
  137. package/lib/types/types.d.ts.map +1 -0
  138. package/lib/types/types.js +387 -0
  139. package/lib/types/types.js.map +1 -0
  140. package/lib/types/wiki-types.d.ts +68 -0
  141. package/lib/types/wiki-types.d.ts.map +1 -0
  142. package/lib/types/wiki-types.js +322 -0
  143. package/lib/types/wiki-types.js.map +1 -0
  144. package/package.json +101 -0
  145. package/preset/tita-data-agent/agent.cordis.yml +376 -0
  146. package/preset/tita-data-agent/preset.yml +3 -0
  147. package/python/requirements.txt +8 -0
  148. package/scripts/doctor.mjs +70 -0
  149. package/scripts/e2e-pipeline.mjs +355 -0
  150. package/scripts/install-agent-preset.mjs +92 -0
  151. package/scripts/setup-embedding.sh +34 -0
  152. package/scripts/sync-agent-preset.mjs +188 -0
  153. package/src/client/AgentPresetCard.tsx +247 -0
  154. package/src/client/DirectoryPicker.tsx +357 -0
  155. package/src/client/InfoHint.tsx +65 -0
  156. package/src/client/IntentLogicTab.tsx +185 -0
  157. package/src/client/IntentTab.tsx +715 -0
  158. package/src/client/KnowledgeBaseTab.tsx +1454 -0
  159. package/src/client/KnowledgeGraphView.tsx +306 -0
  160. package/src/client/KnowledgePanel.tsx +381 -0
  161. package/src/client/KnowledgeStepRail.tsx +60 -0
  162. package/src/client/NodeSettings.tsx +392 -0
  163. package/src/client/PreviewSections.tsx +116 -0
  164. package/src/client/RecallPanel.tsx +399 -0
  165. package/src/client/TypeDefinitionDrawer.tsx +215 -0
  166. package/src/client/WikiFlowCard.tsx +226 -0
  167. package/src/client/WikiTypeEditor.tsx +332 -0
  168. package/src/client/agent-preset.ts +121 -0
  169. package/src/client/arch/AgentArchitectureGraph.tsx +219 -0
  170. package/src/client/arch/NodeLogicPanel.tsx +133 -0
  171. package/src/client/arch/ProblemDetailPanel.tsx +88 -0
  172. package/src/client/arch/model.ts +691 -0
  173. package/src/client/architecture.css +191 -0
  174. package/src/client/architecture.tsx +530 -0
  175. package/src/client/attribution/AttributionGraph.tsx +104 -0
  176. package/src/client/attribution/AttributionTab.tsx +332 -0
  177. package/src/client/attribution/CaseView.tsx +102 -0
  178. package/src/client/attribution/GraphStage.tsx +87 -0
  179. package/src/client/attribution/RunView.tsx +184 -0
  180. package/src/client/attribution/StageChrome.tsx +403 -0
  181. package/src/client/attribution/ViewSwitch.tsx +107 -0
  182. package/src/client/attribution/graph-options.ts +381 -0
  183. package/src/client/attribution/model.ts +462 -0
  184. package/src/client/config-scope.ts +119 -0
  185. package/src/client/convert/ConvertPanel.tsx +594 -0
  186. package/src/client/convert/styles.css +138 -0
  187. package/src/client/convert/styles.ts +49 -0
  188. package/src/client/format.ts +39 -0
  189. package/src/client/graph/layout.ts +181 -0
  190. package/src/client/graph.css +113 -0
  191. package/src/client/index.ts +98 -0
  192. package/src/client/problem-domains.ts +114 -0
  193. package/src/client/styles.css +940 -0
  194. package/src/client/styles.ts +11 -0
  195. package/src/client/useFitScale.ts +68 -0
  196. package/src/config-schema.ts +45 -0
  197. package/src/convert/core-loader.ts +68 -0
  198. package/src/convert/host.ts +579 -0
  199. package/src/convert/ingest.ts +367 -0
  200. package/src/convert/settings-schema.ts +27 -0
  201. package/src/convert/types.ts +65 -0
  202. package/src/diagnosis/cards.ts +498 -0
  203. package/src/diagnosis/problem-classes.ts +117 -0
  204. package/src/diagnosis/schema.ts +260 -0
  205. package/src/diagnosis/seed-source.ts +107 -0
  206. package/src/diagnosis/seed.ts +291 -0
  207. package/src/diagnosis/store.ts +432 -0
  208. package/src/diagnosis/types.ts +152 -0
  209. package/src/directory-picker.ts +164 -0
  210. package/src/extract-model.ts +227 -0
  211. package/src/extract.ts +632 -0
  212. package/src/fts.ts +203 -0
  213. package/src/index.ts +1091 -0
  214. package/src/intent/README.md +63 -0
  215. package/src/intent/engine.ts +527 -0
  216. package/src/intent/host.ts +462 -0
  217. package/src/intent/preset-tools.ts +48 -0
  218. package/src/intent/settings-schema.ts +63 -0
  219. package/src/intent/store.ts +143 -0
  220. package/src/intent/tools.ts +139 -0
  221. package/src/intent/types.ts +245 -0
  222. package/src/knowledge-bases.ts +1160 -0
  223. package/src/layout.ts +350 -0
  224. package/src/migrate.ts +262 -0
  225. package/src/python/embedding_worker.py +471 -0
  226. package/src/recall-rank.ts +299 -0
  227. package/src/runtime.ts +3069 -0
  228. package/src/settings-schema.ts +94 -0
  229. package/src/settings-volatile.ts +122 -0
  230. package/src/types.ts +1140 -0
  231. package/src/wiki-types.ts +357 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Seed 图谱:与 0021 §11 的三个案例同源,用来说明「同一现象有多个根因、否定边有用、
3
+ * 误导边昂贵」。
4
+ *
5
+ * 它现在有两重身份:
6
+ * 1. **首次启动的起点** —— `DiagnosisStore.ensure()` 在 `05_diagnosis/` 为空时把它写成
7
+ * 真实的 jsonl,之后用户可以手改,不会被覆盖回去;
8
+ * 2. **回归样本** —— 上面那三条结论需要一个稳定的夹具,所以它不会被删除。
9
+ */
10
+ export const SEED_GRAPH = {
11
+ nodes: [
12
+ // ── 类型层:问题侧(每个现象带问题大类 / 子类,见 0021 §4.5) ───────────
13
+ // 三个**具体**现象,而不是一个「指标报表 T-1 异常」—— 大类是切面,不是节点;
14
+ // 把「T-1 指标异常」这种泛指做成节点,等于让三个不同的故障在图上长得一模一样。
15
+ {
16
+ id: 'S1', kind: 'symptom', layer: 'type', title: '日报 GMV 为 0',
17
+ problemClass: 'missing', problemSubclass: 'missing-zero',
18
+ summary: '观测量:日报 GMV + 单日窗口;精确为 0 而不是偏低。',
19
+ },
20
+ {
21
+ id: 'S2', kind: 'symptom', layer: 'type', title: '订单数只剩昨日 12%',
22
+ problemClass: 'deviation', problemSubclass: 'deviation-drop-sharp',
23
+ summary: '观测量:日报订单数 + 单日窗口;下降 88%,按渠道切开后缺口集中在新增渠道。',
24
+ },
25
+ {
26
+ id: 'S3', kind: 'symptom', layer: 'type', title: 'DAU 突增 3.1 倍',
27
+ problemClass: 'deviation', problemSubclass: 'deviation-rise-sharp',
28
+ summary: '观测量:DAU + 单日窗口;放大 3.1 倍且只有 T-1 单日,相邻日期正常。',
29
+ },
30
+ { id: 'H1', kind: 'hypothesis', layer: 'type', title: '上游分区未产出', failureMode: 'upstream-missing', reuseCount: 12,
31
+ summary: '当日 dwd / ods 分区不存在 → 指标必然为 0。反例:分区在但行数为 0 时不是它。',
32
+ discriminator: '当日 dwd / ods 分区不存在 → 指标必然为 0',
33
+ notWhen: '分区存在但行数为 0(那是 H4);分区正常而指标仍为 0(那是口径或消费侧)' },
34
+ { id: 'H2', kind: 'hypothesis', layer: 'type', title: '口径 / 版本变更', failureMode: 'spec-change', reuseCount: 5,
35
+ summary: '口径版本切换未同步 → 同名词指标在不同版本下口径不同。',
36
+ discriminator: '口径版本切换后,同名词指标在两版定义下口径不一致',
37
+ notWhen: '口径未变更时本假设不成立 —— 不要用「名字一样」当作口径一致的证据' },
38
+ { id: 'H3', kind: 'hypothesis', layer: 'type', title: '维表映射丢失', failureMode: 'data-processing', reuseCount: 4,
39
+ summary: '新渠道未补录维表 → join 落 unknown 后被 where 过滤。',
40
+ discriminator: '维表 join 后 unknown 占比显著升高,且缺口集中在新增维度成员上',
41
+ notWhen: 'unknown 占比正常时本假设不成立;缺口若均匀分布在各维度上,应转 H4 或 H5' },
42
+ { id: 'H4', kind: 'hypothesis', layer: 'type', title: '重复 / 回刷', failureMode: 'data-processing', reuseCount: 6,
43
+ summary: '上游重跑写入重复行 → 计数类指标放大。',
44
+ discriminator: '主键不唯一,或分区行数同比放大',
45
+ notWhen: '主键唯一性检查通过(T4.1)时本假设不成立 —— 这是最常被误判的一条' },
46
+ { id: 'H5', kind: 'hypothesis', layer: 'type', title: '时间窗口 / 时区', failureMode: 'data-processing', reuseCount: 2,
47
+ summary: '跨天事件被补写进 T-1 分区 → 单日指标异常放大。',
48
+ discriminator: '分区内事件时间跨天,且只有 T-1 单日异常',
49
+ notWhen: '相邻日期同时异常时应转 H2;事件时间落在单日内则应转 H4' },
50
+ { id: 'H6', kind: 'hypothesis', layer: 'type', title: '权限 / 过滤条件', failureMode: 'permission', reuseCount: 1,
51
+ summary: '行级权限或 where 条件变更 → 结果集被静默收窄。',
52
+ discriminator: '结果集被行级权限或 where 条件静默收窄',
53
+ notWhen: '权限与过滤条件在本周期未变更时本假设不成立' },
54
+ { id: 'H7', kind: 'hypothesis', layer: 'type', title: '下游 BI 缓存 / 增量', failureMode: 'consumption', reuseCount: 3,
55
+ summary: '缓存或增量刷新未触发 → 展示侧滞后,明细不受影响。',
56
+ discriminator: 'BI 展示侧滞后,但直连明细的数字正常',
57
+ notWhen: '明细对账一致(T7.2)时本假设不成立;注意 T7.1「缓存时间正常」不足以否定它' },
58
+ // `code` 是这张卡片的稳定标识:假设卡片里写的是编码(`failure_mode: data-processing`),
59
+ // 边要连到节点 —— 少了它,「编码 → 节点」就只能靠 F1..F5 的位置去猜。
60
+ { id: 'F1', kind: 'failure-mode', layer: 'type', title: '上游未产出', code: 'upstream-missing' },
61
+ { id: 'F2', kind: 'failure-mode', layer: 'type', title: '口径变更', code: 'spec-change' },
62
+ { id: 'F3', kind: 'failure-mode', layer: 'type', title: '数据处理', code: 'data-processing' },
63
+ { id: 'F4', kind: 'failure-mode', layer: 'type', title: '消费与展示', code: 'consumption' },
64
+ { id: 'F5', kind: 'failure-mode', layer: 'type', title: '权限与过滤', code: 'permission' },
65
+ { id: 'T1.1', kind: 'check', layer: 'type', title: '查分区存在性', costMinutes: 1, automation: 'auto', owner: '@duty',
66
+ summary: '分区 dwd_ord_di/dt 是否存在。不存在 → 支持 H1。',
67
+ verdictTrue: '分区不存在', verdictFalse: '分区存在' },
68
+ { id: 'T1.2', kind: 'check', layer: 'type', title: '查任务实例状态', costMinutes: 1, automation: 'auto', owner: '@duty',
69
+ summary: '上游任务实例是否 failed。failed → 支持 H1。',
70
+ verdictTrue: '实例状态 failed', verdictFalse: '实例状态 success / running' },
71
+ { id: 'T2.1', kind: 'check', layer: 'type', title: '口径版本对比', costMinutes: 15, automation: 'manual', owner: '@metric-owner',
72
+ summary: '对比近两次口径版本定义。口径变化 → 支持 H2。',
73
+ verdictTrue: '近两次口径定义不一致', verdictFalse: '口径定义逐字一致' },
74
+ { id: 'T3.1', kind: 'check', layer: 'type', title: 'unknown 占比', costMinutes: 2, automation: 'auto', owner: '@duty',
75
+ summary: '维表 join 后 unknown 占比。显著升高 → 支持 H3。',
76
+ verdictTrue: 'unknown 占比 > 5%', verdictFalse: 'unknown 占比 ≤ 5%' },
77
+ { id: 'T4.1', kind: 'check', layer: 'type', title: '主键唯一性', costMinutes: 3, automation: 'auto', owner: '@duty',
78
+ summary: '主键唯一性检查。通过 → 否定 H4。这是最常被误判的一条。',
79
+ verdictTrue: '存在重复主键', verdictFalse: '主键唯一 → 否定 H4' },
80
+ { id: 'T5.1', kind: 'check', layer: 'type', title: '事件时间分布', costMinutes: 8, automation: 'auto', owner: '@duty',
81
+ summary: '分区内事件时间分布。跨天 → 支持 H5。',
82
+ verdictTrue: '分区内事件时间跨出 T-1 单日窗口', verdictFalse: '事件时间全部落在 T-1 内' },
83
+ { id: 'T7.1', kind: 'check', layer: 'type', title: '查缓存时间戳', costMinutes: 2, automation: 'auto', owner: '@duty',
84
+ summary: '缓存时间正常并不能否定 H7 —— 便宜检查给不出结论。',
85
+ verdictTrue: '缓存时间戳过期', verdictFalse: '缓存时间正常 —— 注意:这一条**不足以**否定 H7' },
86
+ { id: 'T7.2', kind: 'check', layer: 'type', title: '直连明细对账', costMinutes: 35, automation: 'manual', owner: '@analyst',
87
+ summary: '明细对账一致 → 否定 H7。要否定它必须做这次贵检查。',
88
+ verdictTrue: '明细与报表数字不一致', verdictFalse: '明细与报表一致 → 否定 H7' },
89
+ // ── 引用层 ────────────────────────────────────────────────────────────
90
+ { id: 'dwd_ord_di', kind: 'asset', layer: 'reference', title: 'dwd_ord_di' },
91
+ { id: 'ods_order_sync', kind: 'asset', layer: 'reference', title: 'ods_order_sync' },
92
+ { id: 'dim_channel_df', kind: 'asset', layer: 'reference', title: 'dim_channel_df' },
93
+ // ── 实例层(默认折叠,展开后用于演示「证据与复用」) ────────────────────
94
+ // 案例节点是**图上的桩**:标题必须与 `SEED_CASES[].title` 是同一个字符串,否则同一份
95
+ // 知识会有两份标题(而且还真的不一致过:「只剩」vs「只有」)。画布要在标签前显示案例 id,
96
+ // 那是渲染层的事(见 `nodeStyleFor` 的 labelText)。
97
+ { id: 'CASE-001', kind: 'case', layer: 'instance', title: '日报 GMV 为 0' },
98
+ { id: 'CASE-002', kind: 'case', layer: 'instance', title: '订单数只有昨日 12%' },
99
+ { id: 'CASE-003', kind: 'case', layer: 'instance', title: 'DAU 突增 3.1 倍' },
100
+ { id: 'C1', kind: 'cause', layer: 'instance', title: 'C1 ODS 任务失败' },
101
+ { id: 'C2', kind: 'cause', layer: 'instance', title: 'C2 渠道维表未补录' },
102
+ { id: 'C3', kind: 'cause', layer: 'instance', title: 'C3 跨天事件补写' },
103
+ { id: 'E1', kind: 'evidence', layer: 'instance', title: 'E1 分区不存在' },
104
+ { id: 'E7', kind: 'evidence', layer: 'instance', title: 'E7 明细对账一致' },
105
+ ],
106
+ edges: [
107
+ // 层内:现象 → 假设(含一条僵尸边,用来演示「权重过期」)
108
+ //
109
+ // **三个现象共享同一批假设,这是这张图最重要的性质。** 每条现象只连它真正可能的原因,
110
+ // 于是「同一个假设被几个现象指向」就成了它的复用读数;而「为 0」与「突增」两个看起来
111
+ // 相反的故障,会在 H4(重复 / 回刷)上相遇 —— 这正是案例各长一棵树时永远看不见的东西。
112
+ { id: 'e-s1-h1', source: 'S1', target: 'H1', kind: 'may_be_caused_by' },
113
+ { id: 'e-s1-h2', source: 'S1', target: 'H2', kind: 'may_be_caused_by', staleDays: 94 },
114
+ { id: 'e-s1-h3', source: 'S1', target: 'H3', kind: 'may_be_caused_by' },
115
+ { id: 'e-s1-h4', source: 'S1', target: 'H4', kind: 'may_be_caused_by' },
116
+ { id: 'e-s1-h5', source: 'S1', target: 'H5', kind: 'may_be_caused_by' },
117
+ { id: 'e-s1-h6', source: 'S1', target: 'H6', kind: 'may_be_caused_by' },
118
+ { id: 'e-s1-h7', source: 'S1', target: 'H7', kind: 'may_be_caused_by' },
119
+ // 突降:产出缺失、重复回刷、维表过滤、缓存滞后都能造成下降;口径与权限这次不在列。
120
+ { id: 'e-s2-h1', source: 'S2', target: 'H1', kind: 'may_be_caused_by' },
121
+ { id: 'e-s2-h3', source: 'S2', target: 'H3', kind: 'may_be_caused_by' },
122
+ { id: 'e-s2-h4', source: 'S2', target: 'H4', kind: 'may_be_caused_by' },
123
+ { id: 'e-s2-h7', source: 'S2', target: 'H7', kind: 'may_be_caused_by' },
124
+ // 突增:放大只可能来自重复计数、跨天补写、缓存重复展示 —— 缺口类的原因在这里不成立。
125
+ { id: 'e-s3-h4', source: 'S3', target: 'H4', kind: 'may_be_caused_by' },
126
+ { id: 'e-s3-h5', source: 'S3', target: 'H5', kind: 'may_be_caused_by' },
127
+ { id: 'e-s3-h7', source: 'S3', target: 'H7', kind: 'may_be_caused_by' },
128
+ // 层内:假设 → 检查(H6 故意没有,它就是图上的空区)
129
+ { id: 'e-h1-t11', source: 'H1', target: 'T1.1', kind: 'verified_by' },
130
+ { id: 'e-h1-t12', source: 'H1', target: 'T1.2', kind: 'verified_by' },
131
+ { id: 'e-h2-t21', source: 'H2', target: 'T2.1', kind: 'verified_by' },
132
+ { id: 'e-h3-t31', source: 'H3', target: 'T3.1', kind: 'verified_by' },
133
+ { id: 'e-h4-t41', source: 'H4', target: 'T4.1', kind: 'verified_by' },
134
+ { id: 'e-h5-t51', source: 'H5', target: 'T5.1', kind: 'verified_by' },
135
+ { id: 'e-h7-t71', source: 'H7', target: 'T7.1', kind: 'verified_by' },
136
+ { id: 'e-h7-t72', source: 'H7', target: 'T7.2', kind: 'verified_by' },
137
+ // 层内:假设 → 失败模式(切面)
138
+ { id: 'e-h1-f1', source: 'H1', target: 'F1', kind: 'categorized_as' },
139
+ { id: 'e-h2-f2', source: 'H2', target: 'F2', kind: 'categorized_as' },
140
+ { id: 'e-h3-f3', source: 'H3', target: 'F3', kind: 'categorized_as' },
141
+ { id: 'e-h4-f3', source: 'H4', target: 'F3', kind: 'categorized_as' },
142
+ { id: 'e-h5-f3', source: 'H5', target: 'F3', kind: 'categorized_as' },
143
+ { id: 'e-h6-f5', source: 'H6', target: 'F5', kind: 'categorized_as' },
144
+ { id: 'e-h7-f4', source: 'H7', target: 'F4', kind: 'categorized_as' },
145
+ // 跨层:资产反向索引
146
+ { id: 'e-a-dwd-h1', source: 'dwd_ord_di', target: 'H1', kind: 'indexed_from' },
147
+ { id: 'e-a-ods-h1', source: 'ods_order_sync', target: 'H1', kind: 'indexed_from' },
148
+ { id: 'e-a-dim-h3', source: 'dim_channel_df', target: 'H3', kind: 'indexed_from' },
149
+ // 跨层:检查产出证据、证据支持或否定假设
150
+ { id: 'e-t11-e1', source: 'T1.1', target: 'E1', kind: 'produces' },
151
+ { id: 'e-e1-h1', source: 'E1', target: 'H1', kind: 'supports' },
152
+ { id: 'e-t72-e7', source: 'T7.2', target: 'E7', kind: 'produces' },
153
+ { id: 'e-e7-h7', source: 'E7', target: 'H7', kind: 'refutes' },
154
+ // 跨层:假设确认成根因
155
+ { id: 'e-h1-c1', source: 'H1', target: 'C1', kind: 'confirmed_as' },
156
+ { id: 'e-h3-c2', source: 'H3', target: 'C2', kind: 'confirmed_as' },
157
+ { id: 'e-h5-c3', source: 'H5', target: 'C3', kind: 'confirmed_as' },
158
+ // 跨层:案例实例化(三个案例各归各的现象,但收敛到**同一批假设**)
159
+ { id: 'e-case1-s1', source: 'CASE-001', target: 'S1', kind: 'instance_of', count: 1 },
160
+ { id: 'e-case2-s2', source: 'CASE-002', target: 'S2', kind: 'instance_of', count: 1 },
161
+ { id: 'e-case3-s3', source: 'CASE-003', target: 'S3', kind: 'instance_of', count: 1 },
162
+ ],
163
+ };
164
+ /** 三个 seed 案例,与上面图谱里的节点 id 对齐(0021 §11)。 */
165
+ export const SEED_CASES = [
166
+ {
167
+ id: 'CASE-001',
168
+ title: '日报 GMV 为 0',
169
+ symptomId: 'S1',
170
+ durationMinutes: 65,
171
+ rootCause: 'ODS 任务 ods_order_sync 02:40 失败且未启用重试,dwd_ord_di/dt 分区未产出。',
172
+ sections: [
173
+ { heading: '现象', body: '2026-08-11 日报 GMV = 0,前一日 128.4 万。指标值精确为 0 而不是偏低。' },
174
+ { heading: '影响面', body: '全量受影响,不随维度细分变化 —— 这个特征把「口径类」原因基本排除了。' },
175
+ { heading: '排查过程', body: '先确认分区是否存在(1 分钟),再确认上游任务实例状态;随后被下游缓存方向带走约 40 分钟,最终用明细对账否定它。' },
176
+ { heading: '根因', body: '上游 ODS 任务在 02:40 失败,重试未启用。分区缺失导致下游 dwd 无输入,指标落 0。' },
177
+ { heading: '修复与防复发', body: '补 dwd_ord_di 分区;给 ods_order_sync 加失败告警与自动重试;分区存在性检查加入日报前置校验。' },
178
+ ],
179
+ path: [
180
+ { nodeId: 'S1', label: 'S1', note: '进入:日报 GMV = 0' },
181
+ { nodeId: 'H1', label: 'H1', note: '按优先分 29 排第一' },
182
+ { nodeId: 'T1.1', label: 'T1.1', note: '查分区存在性 → 分区不存在' },
183
+ { nodeId: 'E1', label: 'E1', note: '产出证据,支持 H1' },
184
+ { nodeId: 'C1', label: 'C1', note: '确认根因' },
185
+ ],
186
+ misleading: {
187
+ nodeId: 'H7',
188
+ label: 'H7 下游 BI 缓存',
189
+ wastedMinutes: 40,
190
+ why: 'T7.1 查缓存时间戳只要 2 分钟且返回「正常」,但**这个便宜检查给不出结论**;要否定 H7 必须做 35 分钟的人工明细对账。浪费不发生在笨检查上,而发生在这种「便宜检查无结论、贵检查没人愿意先做」的夹缝里。',
191
+ },
192
+ },
193
+ {
194
+ id: 'CASE-002',
195
+ title: '订单数只有昨日 12%',
196
+ symptomId: 'S2',
197
+ durationMinutes: 22,
198
+ rootCause: '新增渠道未补录维表,dim_channel_df join 落 unknown 后被 where channel is not null 过滤。',
199
+ sections: [
200
+ { heading: '现象', body: '订单数 8,412,前一日 70,110,下降 88%。' },
201
+ { heading: '影响面', body: '按渠道维度切开后,缺口集中在新增的两个渠道 —— 这个线索直接指向维表而不是上游。' },
202
+ { heading: '排查过程', body: '按优先分先做最便宜的分区存在性检查(1 分钟),分区在,H1 被否定;接着做 H4 的主键唯一性检查,通过,H4 也被否定;转查 H3 的 unknown 占比,88%,一击确认。两次否定各花不到 3 分钟。' },
203
+ { heading: '根因', body: '新渠道未补录维表,join 落 unknown,被下游过滤条件静默丢弃。' },
204
+ { heading: '修复与防复发', body: '补录渠道维表;把 unknown 占比纳入日常巡检;下游过滤改为「先报警再过滤」。' },
205
+ ],
206
+ path: [
207
+ { nodeId: 'S2', label: 'S2', note: '进入:订单数下降 88%' },
208
+ { nodeId: 'H1', label: 'H1', note: '优先分第一(1 分钟的分区检查)' },
209
+ { nodeId: 'T1.1', label: 'T1.1✗', note: '分区存在 → 否定 H1', refuted: true },
210
+ { nodeId: 'H4', label: 'H4', note: '剩余先验最高' },
211
+ { nodeId: 'T4.1', label: 'T4.1✗', note: '主键唯一性通过 → 否定 H4', refuted: true },
212
+ { nodeId: 'H3', label: 'H3', note: '转向维表映射' },
213
+ { nodeId: 'T3.1', label: 'T3.1', note: 'unknown 占比 88%' },
214
+ { nodeId: 'C2', label: 'C2', note: '确认根因' },
215
+ ],
216
+ },
217
+ {
218
+ id: 'CASE-003',
219
+ title: 'DAU 突增 3.1 倍',
220
+ symptomId: 'S3',
221
+ durationMinutes: 35,
222
+ rootCause: '上游重跑把跨天事件补写进 T-1 分区,事件时间与处理时间边界被跨越。',
223
+ sections: [
224
+ { heading: '现象', body: 'DAU 112 万 → 347 万,无对应投放或活动。' },
225
+ { heading: '影响面', body: '只有 T-1 单日放大,相邻日期正常 —— 这排除了口径变更(口径类会同时影响多天)。' },
226
+ { heading: '排查过程', body: '主键唯一性通过,H4 被否定;再查缓存时间戳,返回「正常」但**这一条给不出结论**(与 CASE-001 是同一个坑);最后查事件时间分布,发现跨天事件,命中 H5。' },
227
+ { heading: '根因', body: '上游重跑把跨天事件补写进 T-1 分区。' },
228
+ { heading: '修复与防复发', body: '重跑加事件时间边界校验;分区写入前检查事件时间下界。' },
229
+ ],
230
+ path: [
231
+ { nodeId: 'S3', label: 'S3', note: '进入:DAU 突增 3.1×' },
232
+ { nodeId: 'H4', label: 'H4', note: '优先分第一(重复数据会放大计数)' },
233
+ { nodeId: 'T4.1', label: 'T4.1✗', note: '主键唯一性通过 → 否定 H4', refuted: true },
234
+ { nodeId: 'H7', label: 'H7', note: '转向展示侧' },
235
+ { nodeId: 'T7.1', label: 'T7.1~', note: '缓存时间正常 —— 但这一条给不出结论' },
236
+ { nodeId: 'H5', label: 'H5', note: '转向时间窗口' },
237
+ { nodeId: 'T5.1', label: 'T5.1', note: '事件时间跨天' },
238
+ { nodeId: 'C3', label: 'C3', note: '确认根因' },
239
+ ],
240
+ },
241
+ ];
242
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/diagnosis/seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type AttributionCase } from './seed.js';
2
+ import { type DiagnosisIssue } from './schema.js';
3
+ import { cardPathOf, type DiagnosisCard } from './cards.js';
4
+ import type { AttributionGraphData } from './types.js';
5
+ import type { KnowledgeRuntime } from '../runtime.js';
6
+ /** 读取顺序的显式来源,界面据此说明「现在看到的是哪一份」。 */
7
+ export type DiagnosisSource = 'cards' | 'jsonl' | 'seed';
8
+ export interface DiagnosisSnapshot {
9
+ graph: AttributionGraphData;
10
+ cases: AttributionCase[];
11
+ issues: DiagnosisIssue[];
12
+ /** 数据是不是本次 ensure() 从 seed 写进去的。界面据此说明来源。 */
13
+ seeded: boolean;
14
+ /** 旧知识根是否在本次被前向迁移成卡片。 */
15
+ migrated: boolean;
16
+ /** 读的是哪一份真相。 */
17
+ source: DiagnosisSource;
18
+ /** 写卡片 / 迁移过程中发现的问题(写失败、迁移分歧)。必须能显示出来,不能只进日志。 */
19
+ problems: string[];
20
+ }
21
+ /** 只取运行时里真正要用的三件事:读根目录、落 SourceRaw、写卡片。 */
22
+ type DiagnosisHost = Pick<KnowledgeRuntime, 'rootDir' | 'addSource' | 'writeCard'>;
23
+ export declare class DiagnosisStore {
24
+ private readonly host;
25
+ constructor(host: DiagnosisHost);
26
+ private get dir();
27
+ private get cardsDir();
28
+ /**
29
+ * 幂等初始化。三种状态各自处理,互不覆盖:
30
+ *
31
+ * 1. 已有卡片 → 什么都不做(卡片是真相,人可能刚改过);
32
+ * 2. 没有卡片但有旧 jsonl → **前向迁移**:把旧图反推成卡片写出去,并**校验迁移无损**
33
+ * (重新编译一遍与旧图比对,不一致就不认这次迁移,继续按 jsonl 读 —— 宁可留在旧形态,
34
+ * 也不要静默丢知识);
35
+ * 3. 两者都没有 → 首次启动:先落手册与复盘的 SourceRaw,再把 seed 编译成卡片。
36
+ */
37
+ ensure(): Promise<{
38
+ seeded: boolean;
39
+ migrated: boolean;
40
+ problems: string[];
41
+ }>;
42
+ snapshot(): Promise<DiagnosisSnapshot>;
43
+ /**
44
+ * 图。
45
+ *
46
+ * 有卡片:`cardsToGraph(卡片)` + 一次排查的产物;没有卡片:按旧 jsonl 读。
47
+ * 两条路径都返回同一种形状,调用方不需要知道现在是哪一代。
48
+ */
49
+ readGraph(): Promise<AttributionGraphData>;
50
+ readCases(): Promise<AttributionCase[]>;
51
+ /** 读 `02_wiki/diagnosis/**` 下的全部卡片。解析不出来的文件按「不是卡片」跳过。 */
52
+ readCards(): Promise<DiagnosisCard[]>;
53
+ /** 写一批卡片。返回写失败的原因(schema 不认、出处不存在等),由调用方决定怎么显示。 */
54
+ private writeCards;
55
+ private seed;
56
+ private migrate;
57
+ /**
58
+ * 落原始材料。
59
+ *
60
+ * 一个细节:种子手册与三篇复盘在**非首次**运行时可能已经存在(用户的知识根里),
61
+ * `addSource` 用 `externalId` 幂等,所以重复调用不会写出第二份。
62
+ */
63
+ private writeSources;
64
+ private readRunArtifacts;
65
+ private writeRunArtifacts;
66
+ /** 旧版的类型层快照。首次 seed 时也写一份:它让 `05_diagnosis/` 仍是一份可读的完整快照。 */
67
+ private writeLegacySnapshot;
68
+ private readLegacyGraph;
69
+ /**
70
+ * 是否存在**值得迁移的旧知识根**。
71
+ *
72
+ * 只看旧版的**类型层**分片,而且要求它真的有内容:`ensure()` 自己会为一次排查的产物
73
+ * (`evidence.jsonl` 等)建空占位文件 —— 若把空文件也算成「旧知识根」,首次启动会走进
74
+ * 迁移分支,然后在空图上白跑一趟。
75
+ */
76
+ private legacyShardFiles;
77
+ private readLines;
78
+ private writeIfAbsent;
79
+ }
80
+ export { cardPathOf };
81
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/diagnosis/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAExE,OAAO,EAAuD,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACtG,OAAO,EACS,UAAU,EACR,KAAK,aAAa,EACnC,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAmB,oBAAoB,EAAwC,MAAM,YAAY,CAAA;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AA0DrD,mCAAmC;AACnC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB;IAChB,MAAM,EAAE,eAAe,CAAA;IACvB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,2CAA2C;AAC3C,KAAK,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAA;AAElF,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD,OAAO,KAAK,GAAG,GAAkD;IACjE,OAAO,KAAK,QAAQ,GAAqE;IAEzF;;;;;;;;OAQG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiB7E,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoC5C;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAU1C,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAY7C,yDAAyD;IACnD,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAS3C,mDAAmD;YACrC,UAAU;YAoBV,IAAI;YAYJ,OAAO;IA4BrB;;;;;OAKG;YACW,YAAY;YAkBZ,gBAAgB;YAkBhB,iBAAiB;IAW/B,6DAA6D;YAC/C,mBAAmB;YAUnB,eAAe;IAe7B;;;;;;OAMG;YACW,gBAAgB;YAQhB,SAAS;YAMT,aAAa;CAM5B;AAsED,OAAO,EAAE,UAAU,EAAE,CAAA"}