desktop/src-tauri/crates/core/src/ingest.rs
第 1 条注释,第 1 行
desktop/src-tauri/crates/core/src/ingest.rs:1
//! ingest 批次:事件 upsert + 游标 + 解析上下文 + 受影响日汇总在同一事务提交。第 2 条注释,第 2 行
desktop/src-tauri/crates/core/src/ingest.rs:2
//! 中断前未提交的批次可重放;重放幂等(事件按键 upsert、日汇总按日分区重算)。第 3 条注释,第 17 行
desktop/src-tauri/crates/core/src/ingest.rs:17
/// usage_events 中已存在记录的去重判定视图。第 4 条注释,第 28 行
desktop/src-tauri/crates/core/src/ingest.rs:28
/// 游标与版本化解析上下文更新(模型状态、累计基线、未完成请求)。第 5 条注释,第 37 行
desktop/src-tauri/crates/core/src/ingest.rs:37
/// 批次内诊断(脱敏:字段名/错误码/位置,不复制原始行内容)。第 6 条注释,第 47 行
desktop/src-tauri/crates/core/src/ingest.rs:47
/// 单个 ingest 批次,其事件均属于同一来源实例。第 7 条注释,第 51 行
desktop/src-tauri/crates/core/src/ingest.rs:51
/// 本批次来源实例。第 8 条注释,第 53 行
desktop/src-tauri/crates/core/src/ingest.rs:53
/// 分桶用固定 IANA 时区(保存后不随系统变化)。第 9 条注释,第 59 行
desktop/src-tauri/crates/core/src/ingest.rs:59
/// 关联的运行中作业:批次统计与其同事务提交。第 10 条注释,第 61 行
desktop/src-tauri/crates/core/src/ingest.rs:61
/// 保留截止(UTC 毫秒):更早的事件被跳过并记诊断,不允许复活已清理明细。第 11 条注释,第 65 行
desktop/src-tauri/crates/core/src/ingest.rs:65
/// 故障注入点(V09)。在任何定义点失败都必须整体回滚,重放结果相同。第 12 条注释,第 98 行
desktop/src-tauri/crates/core/src/ingest.rs:98
/// 本次重算影响的本地日(YYYY-MM-DD)。第 13 条注释,第 109 行
desktop/src-tauri/crates/core/src/ingest.rs:109
/// 提交批次:单一事务。fault 为测试钩子,注入后整体回滚。第 14 条注释,第 129 行
desktop/src-tauri/crates/core/src/ingest.rs:129
// schema < 3(测试钩子冻结的旧库)没有 parse_basis 列:按旧 schema 降级写入,第 15 条注释,第 130 行
desktop/src-tauri/crates/core/src/ingest.rs:130
// 新字段不持久化(等价历史行为)。正常运行总是先迁移到 SCHEMA_VERSION。第 16 条注释,第 184 行
desktop/src-tauri/crates/core/src/ingest.rs:184
// 1. 事件 upsert。第 17 条注释,第 243 行
desktop/src-tauri/crates/core/src/ingest.rs:243
// v1 的内容摘要包含 observed_at;仅观察时间改变仍视为同一内容。第 18 条注释,第 244 行
desktop/src-tauri/crates/core/src/ingest.rs:244
// 同键同内容的重复 final(仅发生/观察/源时间文本不同)是重报而非冲突,同样视为同一内容。第 19 条注释,第 271 行
desktop/src-tauri/crates/core/src/ingest.rs:271
// 完整旧摘要只允许解析器依据变化;保留原时间、用量和源修订。第 20 条注释,第 272 行
desktop/src-tauri/crates/core/src/ingest.rs:272
// 同批次已观测的实际冲突不能被后续的元数据更新清除。第 21 条注释,第 318 行
desktop/src-tauri/crates/core/src/ingest.rs:318
// 明确的来源修正规则比较完整旧摘要,第 22 条注释,第 319 行
desktop/src-tauri/crates/core/src/ingest.rs:319
// 修正已核对字段时保留首次观察、真实冲突标记第 23 条注释,第 320 行
desktop/src-tauri/crates/core/src/ingest.rs:320
// 和全部变更历史。第 24 条注释,第 386 行
desktop/src-tauri/crates/core/src/ingest.rs:386
// 不任意择大:保留现存,标 conflict 并记诊断;所在日重算以反映冲突计数。第 25 条注释,第 408 行
desktop/src-tauri/crates/core/src/ingest.rs:408
// 数学矛盾进入受限诊断(不用 max(0,…) 隐藏)。第 26 条注释,第 427 行
desktop/src-tauri/crates/core/src/ingest.rs:427
// 2. 游标与解析上下文(同事务;分两段以便故障点语义清晰)。第 27 条注释,第 463 行
desktop/src-tauri/crates/core/src/ingest.rs:463
// 3. 有受影响日期时递增数据修订号;重算的日汇总携带该修订号。第 28 条注释,第 472 行
desktop/src-tauri/crates/core/src/ingest.rs:472
// 4. 受影响日按(时区, 日)分区重算;封存日不追加。小时分桶同事务持久化第 29 条注释,第 473 行
desktop/src-tauri/crates/core/src/ingest.rs:473
// (分级归档:明细删除后小时层仍有数据)。第 30 条注释,第 482 行
desktop/src-tauri/crates/core/src/ingest.rs:482
// 5. 诊断(脱敏)。第 31 条注释,第 492 行
desktop/src-tauri/crates/core/src/ingest.rs:492
// 6. 作业进度同事务提交。第 32 条注释,第 512 行
desktop/src-tauri/crates/core/src/ingest.rs:512
/// 比较完整旧事件摘要,不把解析器更名当作源修订或允许其他字段变化。第 33 条注释,第 520 行
desktop/src-tauri/crates/core/src/ingest.rs:520
// 同键重复 final 的时间兼容与普通冲突处理一致;元数据更新仍保留原时间。第 34 条注释,第 537 行
desktop/src-tauri/crates/core/src/ingest.rs:537
/// 仅为已核对的原生写入器重建完整 doc1 事件。第 35 条注释,第 538 行
desktop/src-tauri/crates/core/src/ingest.rs:538
/// 所有正数计数、标识和归属仍须与旧摘要一致。第 36 条注释,第 588 行
desktop/src-tauri/crates/core/src/ingest.rs:588
/// 仅已核对的 gajae v5/OpenAI-completions 规则允许这些 v2第 37 条注释,第 589 行
desktop/src-tauri/crates/core/src/ingest.rs:589
/// 未知字段和开始时间依据;重建每个旧字段后再比较第 38 条注释,第 590 行
desktop/src-tauri/crates/core/src/ingest.rs:590
/// 完整规范化或历史哈希,其他内容变化仍按常规规则处理。第 39 条注释,第 678 行
desktop/src-tauri/crates/core/src/ingest.rs:678
/// Junie 原生非缓存输入及默认零修正最多比较 128 个候选。第 40 条注释,第 679 行
desktop/src-tauri/crates/core/src/ingest.rs:679
/// 候选仅恢复旧解析器中缺失或默认零的字段;第 41 条注释,第 680 行
desktop/src-tauri/crates/core/src/ingest.rs:680
/// 其他字段须与完整规范化或历史摘要一致。第 42 条注释,第 761 行
desktop/src-tauri/crates/core/src/ingest.rs:761
/// MiMo 必填原始计数和客户端价格默认为零,仅恢复这些第 43 条注释,第 762 行
desktop/src-tauri/crates/core/src/ingest.rs:762
/// 缺失或默认字段及旧派生值;完整旧摘要仍须保留第 44 条注释,第 763 行
desktop/src-tauri/crates/core/src/ingest.rs:763
/// 标识、所有正数、质量和归属。第 45 条注释,第 797 行
desktop/src-tauri/crates/core/src/ingest.rs:797
// 旧解析器要求五个原始计数;重建其完整第 46 条注释,第 798 行
desktop/src-tauri/crates/core/src/ingest.rs:798
// 摘要,不能仅凭未变化的 part ID 允许修正。第 47 条注释,第 1103 行
desktop/src-tauri/crates/core/src/ingest.rs:1103
/// 与 INSERT/UPDATE 共用的参数顺序;?41 为 conflict(仅 INSERT 使用字面 0,占位一致),第 48 条注释,第 1104 行
desktop/src-tauri/crates/core/src/ingest.rs:1104
/// ?48 created_at_ms 仅 INSERT 有意义(UPDATE 不引用)。第 49 条注释,第 1126 行
desktop/src-tauri/crates/core/src/ingest.rs:1126
// 参数 1:event_id第 50 条注释,第 1127 行
desktop/src-tauri/crates/core/src/ingest.rs:1127
// 参数 2:source_instance_id第 51 条注释,第 1128 行
desktop/src-tauri/crates/core/src/ingest.rs:1128
// 参数 3:source_record_key第 52 条注释,第 1129 行
desktop/src-tauri/crates/core/src/ingest.rs:1129
// 参数 4:record_kind第 53 条注释,第 1130 行
desktop/src-tauri/crates/core/src/ingest.rs:1130
// 参数 5:schema_version第 54 条注释,第 1131 行
desktop/src-tauri/crates/core/src/ingest.rs:1131
// 参数 6:parser_version第 55 条注释,第 1132 行
desktop/src-tauri/crates/core/src/ingest.rs:1132
// 参数 7:origin_call_id第 56 条注释,第 1133 行
desktop/src-tauri/crates/core/src/ingest.rs:1133
// 参数 8:attempt_id第 57 条注释,第 1134 行
desktop/src-tauri/crates/core/src/ingest.rs:1134
// 参数 9:session_id第 58 条注释,第 1135 行
desktop/src-tauri/crates/core/src/ingest.rs:1135
// 参数 10:parent_session_id第 59 条注释,第 1136 行
desktop/src-tauri/crates/core/src/ingest.rs:1136
// 参数 11:host_application第 60 条注释,第 1137 行
desktop/src-tauri/crates/core/src/ingest.rs:1137
// 参数 12:agent第 61 条注释,第 1138 行
desktop/src-tauri/crates/core/src/ingest.rs:1138
// 参数 13:call_category第 62 条注释,第 1139 行
desktop/src-tauri/crates/core/src/ingest.rs:1139
// 参数 14:occurred_at_ms第 63 条注释,第 1140 行
desktop/src-tauri/crates/core/src/ingest.rs:1140
// 参数 15:observed_at_ms第 64 条注释,第 1141 行
desktop/src-tauri/crates/core/src/ingest.rs:1141
// 参数 16:source_time第 65 条注释,第 1142 行
desktop/src-tauri/crates/core/src/ingest.rs:1142
// 参数 17:time_basis第 66 条注释,第 1143 行
desktop/src-tauri/crates/core/src/ingest.rs:1143
// 参数 18:interval_start_ms第 67 条注释,第 1144 行
desktop/src-tauri/crates/core/src/ingest.rs:1144
// 参数 19:interval_end_ms第 68 条注释,第 1145 行
desktop/src-tauri/crates/core/src/ingest.rs:1145
// 参数 20:provider_id第 69 条注释,第 1146 行
desktop/src-tauri/crates/core/src/ingest.rs:1146
// 参数 21:model_raw第 70 条注释,第 1147 行
desktop/src-tauri/crates/core/src/ingest.rs:1147
// 参数 22:model_canonical第 71 条注释,第 1148 行
desktop/src-tauri/crates/core/src/ingest.rs:1148
// 参数 23:model_attribution第 72 条注释,第 1149 行
desktop/src-tauri/crates/core/src/ingest.rs:1149
// 参数 24:input_uncached第 73 条注释,第 1150 行
desktop/src-tauri/crates/core/src/ingest.rs:1150
// 参数 25:input_cache_read第 74 条注释,第 1151 行
desktop/src-tauri/crates/core/src/ingest.rs:1151
// 参数 26:input_cache_write第 75 条注释,第 1152 行
desktop/src-tauri/crates/core/src/ingest.rs:1152
// 参数 27:input_total第 76 条注释,第 1153 行
desktop/src-tauri/crates/core/src/ingest.rs:1153
// 参数 28:output_total第 77 条注释,第 1154 行
desktop/src-tauri/crates/core/src/ingest.rs:1154
// 参数 29:output_reasoning第 78 条注释,第 1155 行
desktop/src-tauri/crates/core/src/ingest.rs:1155
// 参数 30:total_tokens第 79 条注释,第 1156 行
desktop/src-tauri/crates/core/src/ingest.rs:1156
// 参数 31:source_total第 80 条注释,第 1157 行
desktop/src-tauri/crates/core/src/ingest.rs:1157
// 参数 32:quality_json第 81 条注释,第 1158 行
desktop/src-tauri/crates/core/src/ingest.rs:1158
// 参数 33:quality_bucket第 82 条注释,第 1159 行
desktop/src-tauri/crates/core/src/ingest.rs:1159
// 参数 34:lifecycle第 83 条注释,第 1160 行
desktop/src-tauri/crates/core/src/ingest.rs:1160
// 参数 35:source_revision第 84 条注释,第 1161 行
desktop/src-tauri/crates/core/src/ingest.rs:1161
// 参数 36:error_status第 85 条注释,第 1162 行
desktop/src-tauri/crates/core/src/ingest.rs:1162
// 参数 37:duration_ms第 86 条注释,第 1163 行
desktop/src-tauri/crates/core/src/ingest.rs:1163
// 参数 38:ttft_ms第 87 条注释,第 1164 行
desktop/src-tauri/crates/core/src/ingest.rs:1164
// 参数 39:attribution_status第 88 条注释,第 1165 行
desktop/src-tauri/crates/core/src/ingest.rs:1165
// 参数 40:exclusion_reason第 89 条注释,第 1166 行
desktop/src-tauri/crates/core/src/ingest.rs:1166
// 参数 41:conflict 占位值。第 90 条注释,第 1167 行
desktop/src-tauri/crates/core/src/ingest.rs:1167
// 参数 42:content_hash第 91 条注释,第 1168 行
desktop/src-tauri/crates/core/src/ingest.rs:1168
// 参数 43:cost_minor第 92 条注释,第 1169 行
desktop/src-tauri/crates/core/src/ingest.rs:1169
// 参数 44:cost_currency第 93 条注释,第 1170 行
desktop/src-tauri/crates/core/src/ingest.rs:1170
// 参数 45:cost_kind第 94 条注释,第 1171 行
desktop/src-tauri/crates/core/src/ingest.rs:1171
// 参数 46:price_version第 95 条注释,第 1172 行
desktop/src-tauri/crates/core/src/ingest.rs:1172
// 参数 47:billing_scope第 96 条注释,第 1173 行
desktop/src-tauri/crates/core/src/ingest.rs:1173
// 参数 48:created_at_ms,仅 INSERT 使用。第 97 条注释,第 1174 行
desktop/src-tauri/crates/core/src/ingest.rs:1174
// 参数 49:updated_at_ms第 98 条注释,第 1175 行
desktop/src-tauri/crates/core/src/ingest.rs:1175
// 参数 50:parse_basis第 99 条注释,第 1193 行
desktop/src-tauri/crates/core/src/ingest.rs:1193
/// 重算单个本地日:删除未封存行后从 usage_events 重建。第 100 条注释,第 1194 行
desktop/src-tauri/crates/core/src/ingest.rs:1194
/// 只有归属已核验的事件进入总计;transport_attempt 只计入 attempt_count。第 101 条注释,第 1207 行
desktop/src-tauri/crates/core/src/ingest.rs:1207
// v4 起 daily_usage 按来源实例分区(M1a:查询跨来源求和,落盘保留每来源贡献)。第 102 条注释,第 1208 行
desktop/src-tauri/crates/core/src/ingest.rs:1208
// v2 迁移的旧库重算发生在 v4 分区之前,按旧形状(无 instance_id 列)写入。第 103 条注释,第 1256 行
desktop/src-tauri/crates/core/src/ingest.rs:1256
// 未知字段计数(input/output/total_unknown_count)排除 quality_bucket='unknown'第 104 条注释,第 1257 行
desktop/src-tauri/crates/core/src/ingest.rs:1257
// 的记录:没有任何已知 token 字段的记录是“无用量调用/观测”(失败调用、第 105 条注释,第 1258 行
desktop/src-tauri/crates/core/src/ingest.rs:1258
// Copilot 工具循环 round 等计调用但用量由 turn observation 承载),计入第 106 条注释,第 1259 行
desktop/src-tauri/crates/core/src/ingest.rs:1259
// call/event,但不算作观测缺字段的未知字段(数据规范「请求、消息与累计值」)。第 107 条注释,第 1311 行
desktop/src-tauri/crates/core/src/ingest.rs:1311
/// 仅修正已核对的 v1/v2 总量遗漏,其他来源字段必须完全一致。第 108 条注释,第 1342 行
desktop/src-tauri/crates/core/src/ingest.rs:1342
/// 按目标时区重算 [from_ms, to_ms] 覆盖的本地日(维护/修复路径:时区分区修复)。第 109 条注释,第 1343 行
desktop/src-tauri/crates/core/src/ingest.rs:1343
/// 事件仍在 ⇒ 重算是推导不是猜测;该时区下已封存的日跳过;单事务 + 修订号。第 110 条注释,第 1344 行
desktop/src-tauri/crates/core/src/ingest.rs:1344
/// 返回本次事务提交的新数据修订号。第 111 条注释,第 1355 行
desktop/src-tauri/crates/core/src/ingest.rs:1355
// 有界防护:最多重算 750 天(超出报错,由调用方分批)。第 112 条注释,第 1377 行
desktop/src-tauri/crates/core/src/ingest.rs:1377
/// 按本地日重建各小时汇总,供小时数据保留层使用。第 113 条注释,第 1378 行
desktop/src-tauri/crates/core/src/ingest.rs:1378
/// 分组字段与日汇总一致:实例、Agent、provider、模型、类别与质量。第 114 条注释,第 1379 行
desktop/src-tauri/crates/core/src/ingest.rs:1379
/// 与 recompute_day 同事务调用;封存日的小时层同样冻结(不重算)。第 115 条注释,第 1380 行
desktop/src-tauri/crates/core/src/ingest.rs:1380
/// 小时换算按事件时刻的本地偏移(DST 日 23/25 小时自然正确)。第 116 条注释,第 1387 行
desktop/src-tauri/crates/core/src/ingest.rs:1387
// schema < 5(测试钩子冻结的旧库)没有 hourly_usage 表:跳过第 117 条注释,第 1388 行
desktop/src-tauri/crates/core/src/ingest.rs:1388
//(迁移到当前版本后自然生效;不影响日/明细层语义)。