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.bin mode 600;
  • title 用 keyed HMAC-SHA256,只保留 24 hex equality token;
  • runtime_state.json version=2,只含 last_window_token,mode 600;
  • key 缺失、owner/mode 不安全或长度错误时,within-app switch detection fail closed,不回退明文或 unkeyed hash。

历史迁移

privacy_window_content_v1:

  1. SQLite secure_delete=ON;
  2. 清空 states.active_window_title;
  3. activity_detail 改为固定 activity_type;
  4. signals_json 删除 3 个窗口内容字段;
  5. process 去路径;
  6. daily_activity 按 user/date/hour/process/category 重聚合,title 改为 category token;
  7. checkpoint/TRUNCATE WAL;
  8. 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 一致。

关联