2026-10-09 校注:文中部署目录、服务、版本和验收计数为各段标注日期的历史记录;当前可验证状态见 current-status-2026-10-09,本次未复跑历史测试或读取私有健康/对话数据。
Humon 前台内容最小化 v1
问题
窗口标题不是聊天正文,但常含邮件主题、文档名、网页主题或对话标题。只为判断活动类别、锁屏和窗口切换而长期保留标题,不符合最小必要原则。
无内容审计确认:历史 states 有 3472 条非空 title,activity_detail 又复制 3472 条;daily_activity 有 246 条;v3 signals_json 有 52 条标题副本。大多含中文形状,少量含 email 形状。审计从未输出任何具体标题。
新边界
标题只允许在当前采样进程内短暂存在,用于:
- broad activity classification;
- lock-screen recognition;
- 当前/上次窗口是否相同的比较。
随后必须丢弃:
signal_to_dict排除active_window_title、aw_current_window、aw_buckets;- process 只保留 path-free executable label;
fuse_state.activity_detail只保存固定 activity_type;record_to_dict、/api/latest、history 不返回标题字段或 raw JSON columns;- 可选 Hermes inference prompt 只接 derived activity hint,不接标题;
- AppUsage 在 legacy window_title 列只写
category:<fixed-category>,仍能按类别/进程聚合时长。
跨 cron 切换计数
为了保留“同一窗口/已切换”的连续性,同时不存标题或可字典攻击的裸 hash:
- 首次运行生成随机 32-byte key;
data/runtime_title_key.binmode 600;- title 用 keyed HMAC-SHA256,只保留 24 hex equality token;
runtime_state.jsonversion=2,只含last_window_token,mode 600;- key 缺失、owner/mode 不安全或长度错误时,within-app switch detection fail closed,不回退明文或 unkeyed hash。
历史迁移
privacy_window_content_v1:
- SQLite
secure_delete=ON; - 清空 states.active_window_title;
- activity_detail 改为固定 activity_type;
- signals_json 删除 3 个窗口内容字段;
- process 去路径;
- daily_activity 按 user/date/hour/process/category 重聚合,title 改为 category token;
- checkpoint/TRUNCATE WAL;
- VACUUM,freelist=0。
迁移前数据库回滚点:
${HOME}/.hermes/backups/humon-v3-pre-window-privacy-20260717-001840,directory 700 / DB 600。其他 Humon backup 目录与数据库权限也已收紧。
审计门槛
Humon quality v2 检查:
- state title 非空;
- activity_detail 不是空或 activity_type;
- signals_json 出现 title/AW content fields;
- daily_activity title 不是 category token。
任一出现即 privacy_shape_violation,使 operational/delivery readiness 失败。
正式证据
- 42 项最终全量测试;privacy 阶段首次 40 项测试通过。
- active DB:state titles=0、unsafe details=0、forbidden signal rows=0、unsafe usage titles=0。
- runtime version=2;plaintext title key absent;HMAC token present;runtime/key mode 600。
- DB integrity=ok、freelist=0。
record_to_dict、/api/latest、/api/perception均无标题内容;latest API 也不返回兼容空字段或 raw JSON columns。- 下一条自然 cron 保存 derived activity detail,signal forbidden keys=0。
- privacy_events=0、delivered=0、delivery_eligible=0,quality operational=true。
- 开发/正式相关 19 个文件 SHA-256 一致。