本页记录 M1 初始实施;后续 schema v2、统计/保留/查询修复与新增回归见
M0/M1 审查,下表 72 测试为初始基线。
元信息
| 项目 |
内容 |
| 日期 |
2026-09-24 |
| 执行环境 |
Windows 11 Pro 26200 x64;Rust 1.98.0;Node v24.21.0 |
| 代码 revision |
工作树未提交改动(desktop/src-tauri 改造为 workspace) |
| 设计依据 |
execution.md M1;data-contract.md(统计规则);validation.md V01–V06/V09/V14/V16 与固定数学样本;scheduling.md 作业语义 |
命令与结果
| # |
命令(cwd) |
退出码 |
结果摘要 |
| 1 |
npm run verify(仓库根) |
0 |
lint:md / assets:check / svelte-check / fmt –check / clippy -D warnings / cargo test / vite build 全绿 |
| 2 |
cargo test --locked --workspace(desktop/src-tauri) |
0 |
72 passed / 0 failed,14 个测试套件,全部真实临时 SQLite 文件库,无 mock |
| 3 |
git diff --check(仓库根) |
0 |
无空白错误 |
实现清单
desktop/src-tauri 改为 workspace(app crate + crates/core,包名 llm-usage-core,纯 Rust 库不依赖 tauri;
default-members 保证根命令覆盖 core)。核心模块:
domain:TokenUsage 8 字段全可空(未知不补零)、RecordKind 六类、FieldQuality、Lifecycle、整数最小单位费用;
token 上限 2^62 超限拒绝;秒/毫秒时间误判拒绝。
metrics:互斥输入求和、cache_input_ratio(分母零/无样本返回无值)、矛盾记录诊断,不调整原值、i128 防溢出。
adapters/usage_map:五种真实口径映射(codex cached⊆input / kimi 四字段互斥 / zcode 双口径相反 /
copilot 三类相加 / kilo 全互斥),各自独立测试。
calendar:jiff IANA 时区;DST 23/25 小时日、ISO 周含跨年、周日起始标签、保留截止 D−1。
storage:设计中的 18 张表 DDL + 按版本事务迁移;foreign_keys=ON/WAL/synchronous=FULL/busy_timeout=5s;
user_version 过新拒绝打开;data_revision 单调递增。
identity:命名空间事件身份;修订号优先、生命周期裁决、同级冲突保留不取 MAX。
ingest:批次单事务(事件+游标+解析上下文+日汇总+诊断+作业进度+修订号),6 个故障注入点。
aggregates:来源区间汇总、累计值观察(重置/回归区分)、覆盖互斥求和、额度不转 token。
query:周/月由日加总、比例重算、跨周期 DISTINCT 会话、部分周期标记、unknown 独立行进总计、
归属排除可按原因列出。
jobs:ingest_runs 状态机、同源合并、重启标 interrupted。
retention:过期日封存(记录时区/字段/来源版本)后删明细、封存日不追加、容量统计含 WAL/备份。
测试覆盖对照
| 验收 |
测试 |
结果 |
| 固定数学样本 11 组 |
fixed_samples.rs 11 个,期望写死 |
通过 |
| V01 缓存包含关系 |
mapping_v01.rs 8 个 |
通过 |
| V02 重复/更正/乱序/冲突 |
dedup_v02.rs 6 个 |
通过 |
| V03 调用/尝试/消息分类 |
classification_v03.rs 3 个 |
通过 |
| V04 跨午夜/闰日/跨年周/周日/DST |
calendar_v04.rs 6 个 |
通过 |
| V05 模型切换/同名跨 provider/unknown |
models_v05.rs 3 个 |
通过 |
| V06 日→周月/加权比例/distinct/部分周期 |
rollup_v06.rs 4 个 |
通过 |
| V09 故障注入恢复 |
faults_v09.rs 3 个(6 注入点逐一验证+重启重放不重复入库) |
通过 |
| V14 保留/封存/容量 |
retention_v14.rs 5 个 |
通过 |
| V16 schema 拒绝/迁移回滚 |
migration_v16.rs 5 个 |
通过 |
| 存储/作业/边界 |
storage_jobs.rs 14 个 + src 内 4 个 |
通过 |
新锁定依赖
| 依赖 |
版本 |
许可证 |
用途 |
| jiff(含 jiff-core/static/tzdb 传递依赖) |
=0.2.37 |
Unlicense OR MIT |
IANA 时区日历与 DST |
| portable-atomic 系(传递) |
1.15.0 / 0.2.8 |
Apache-2.0 OR MIT |
jiff 传递 |
失败与未执行项
| 项 |
状态 |
后续 |
| 性能初值(M1 交付项) |
未执行 |
需 ≥100 万事件基准,随 V20 规模数据一起做 |
| 费用日聚合 |
未实现(仅存储) |
禁止跨币种相加,面板属 M6 |
| aggregate_generations 跨事务 building→published 切换 |
未实现 |
当前重算单事务原子完成;复杂重建需要时再加 |
| 迁移前空间检查与一致备份 |
未实现 |
随 V15/V16 完整验收补 |
| 归属核验实际逻辑(WSL/容器) |
仅实现存储与查询规则 |
V25 阶段 |
| 定时器/防抖/系统任务 |
未实现(仅表结构与作业语义) |
M6 |
| import_manifests 旧库导入逻辑 |
仅状态存储 |
M2 |
验证产物
desktop/src-tauri/crates/core/:核心库源码与测试(tests/ 下 10 个集成测试文件)。
desktop/src-tauri/Cargo.lock:含 jiff 与 llm-usage-core 条目。