GitHub 提交日报 · 2026-10-21

自动汇总 2026-10-21 当天 hummingg 在 GitHub 上的提交。

hummingg/hummingg-com

  • feat(watch): 商店清单签名、固件页备份恢复、全站 HumminggOS 品牌与圆角规范
    • 站点(watch/src → public/):
    • 商店清单加签名:index.json 配一份 index.sig(ECDSA P-256 / SHA-256,raw r||s,
    • 签的是清单原始字节)。网页用内置的商店公钥验签,验不过只提示不拦渲染;
    • 商店卡片加「HumminggOS 官方」署名与更新日期,页面加最近更新区块
    • 固件页新增第 05 步「从备份恢复」:整片 16 MiB 写回 + 逐块回读比对,
    • 备份按「这块板子的完整镜像」校验,刷机前的原厂系统也能恢复
    • 创作页:补回 OpenAI 服务商、模型名可改;prompt 写入手表四角圆角
    • (约 38 像素)规范,静态检查提醒别把文字画进切角里
    • 全站统一系统名 HumminggOS;五页补 canonical / og / 作者署名与版权声明
    • 商店清单补齐 spectrum / tiltblock 两个应用产物,与线上清单对齐
    • 测试:node –test src//.test.mjs 244 项(243 过、1 项预置跳过)
  • fix(watch): 设备超时的提示按”卡在哪一步”分开给
    • 之前所有失败都是同一句”设备响应超时…请检查数据线”,但实际原因至少三种,
    • 处理办法完全不同:
    • 连接阶段超时:多半是手表没进下载模式,换数据线没用 → 提示改用
    • 「我已手动按 BOOT 进入下载模式」并按住 BOOT 再按 PWR
    • 读备份超时:已知问题(根因未确认)→ 提示把传输速度改成 115200 再读
    • 写入/回读超时:结果未知 → 明确不要重复刷写,改走第 05 步从备份恢复
    • 中途 USB 断开:单独一种说法
    • 实现:esp-device.mjs 的 request/bounded 带上阶段名(连接手表 / 读取备份 /
    • 写入 app0 / 回读校验),firmware-flow 在各调用点标注,explainFailure 据此分流。
  • feat(watch): 商店应用适配 120px 切角安全区
    • 四角玻璃切角经实机标定为 120px,旧的 38px 规范会让内容落进不发光区。
    • 创作页圆角规范 38→120,prompt 与 lua-lint 同步「内收到 x∈[35,375]」
    • 15 个应用重排底部按钮与提示(左起 48、底边 ≤468),版本号各 +1;
    • hello 版本不变
    • 16 个 .wapp 重签,index.json 重新生成并更新 index.sig
    • 固件页与手册不再硬编码版本/ABI,备份恢复改为只声明结构检查
    • 商店补 spectrum、tiltblock 中文说明
    • 线上已发布 version d3345369(2026-10-21T04:14:07Z):64/64 回抓、16/16 验签、
    • r5 六段校验通过。固件 C 侧切角改动不在本次发布范围内。
  • chore(ci): 网站发布前扫描公开目录凭据
    • 新增 watch/tools/check-public-secrets.py:扫描完整 PEM 私钥与常见
    • sk-/GitHub/AWS token 特征,命中只返回失败,不打印命中内容
    • 新增测试:通过/拦截、输出脱敏、空目录、符号链接、CI 顺序
    • deploy-sites.yml 在网页测试前与 sync_web.sh 后各扫一次,且先于 git diff
    • 与 wrangler deploy,避免日志泄露命中内容
    • 特征扫描不保证发现所有编码后的或未知格式的凭据。
  • chore(watch): 应用源码路径改用仓库内真身,去掉工作区软链依赖
    • 工作区里的 apps / tools 软链已删除,路径一律写仓库内的真身:
    • sync_repo.sh 的默认 APPS_ROOT 指向 microapp/apps
    • README 里的加应用步骤同步改路径
  • feat(watch): 发布 r6 固件(120px 切角真机验收)
    • 应用 bdb8e492,ABI 11;bootloader bfc7bd52;六段包
    • 升级来源保留 r5、ABI 10 旧版与之前的开发构建
    • 真机验收:桌面四角、商店末行、设置页提示、返回键均通过
  • fix(watch): 商店清单里 spectrum 的更新日期对齐 10-20
    • 清单与 public/ 里的 .wapp 文件逐个核对过哈希,16 条全部一致;
    • spectrum 是 10-20 晚上 23:48 建好并上线的,日期之前记成了 10-21。
  • fix(watch): 备份与还原的进度条画在各自那一步
    • 进度区原来只有一个,写在第 03 步(刷写用)。备份按钮在第 02 步却复用了
    • 它,于是点「读取完整 16MB 备份」时进度条出现在下一格,看着像点错了按钮;
    • 第 05 步「从备份恢复」同样毛病。
    • 改成三处各一个:第 02 步备份进度区、第 03 步刷写进度区、第 05 步还原进度区,
    • 样式共用。备份/还原不再改写第 03 步那条。
    • 回归:新增用例断言备份完成后自己的进度区可见、且刷写进度区仍未点亮。
  • feat(watch): 发布 ABI 11 固件与新商店清单(weather 1.0.2、清单签名)
    • 固件(脱敏构建,不含私人配网):
    • 版本 local-20261021-abi11-store-sig-r5,ABI 11
    • 相对上一版只变 3 个文件:app.bin / bootloader.bin / manifest.json,
    • partitions / nvs / otadata / appfs 逐字节不变
    • upgrade_from 允许从上一版(ABI 10)与开发版直接保数据升级
    • ABI 11:商店清单必须带商店私钥签名,验不过整份清单拒收;
    • 清单上限从 8 KiB 提到 16 KiB(缓冲在 PSRAM)
    • 商店:
    • weather 升到 1.0.2(新增 LOCATE:按城市名反查经纬度)
    • 全部包重新签名,清单加每应用更新日期;清单 8339 字节并重新签名
    • fftprobe 标为 publish:false:一次性性能探针,不进商店
    • 站点:创作页与手册的固件 ABI 说明同步到 11

hummingg/watch-appstore

  • docs(release): 补记推送后 CI 部署与新的回退点
    • 推送 80719cc 触发 CI run 39548577581,13:16 自动部署为 version
    • b1fe00f0 / deployment 407f1756,内容与 12:14 手工部署逐字节一致
    • 部署后重新回抓 64/64;回退点更新为 b2db4b07(d3345369)
    • 补记 CI 测试口径:249 项 248 通过 + 1 跳过,凭据扫描 64 文件通过;
    • 本地仍是 249/249
    • 待办里的“未提交/未推送”改为已推送与 CI 已生效
  • docs(firmware): 记录 ABI 11 与商店清单签名固件的发布与真机验收
  • feat(apps): 适配 120px 四角玻璃切角
    • Corner Probe 在真机上把玻璃切角半径标定为 120px,旧的 38/111px 规范都会
    • 让元素落进不发光区。
    • 新增 apps/cornerprobe(角点标定应用)
    • 15 个应用重排底部按钮与提示:左起 48、末行底边 ≤468;被挡的柱状图基线、
    • 水平仪、卡片高度相应上提;版本号各 +1,hello 不变
    • 共享设置页新增 SAFE_X/SAFE_W、NAV_Y 常量,齿轮与分页按钮内收上提
    • tiltblock 的 CORNER_MM 9.2→9.93(111→120px)
    • 固件 C 侧:桌面状态栏与磁贴网格、商店清单行、设置密码提示、sys.input
    • 提示、返回键位置按安全区调整;返回键热区常量同步
    • 新增 tools/test-corner-safety.py:按 120px 公式逐帧判定,被切 1px 即失败
    • 交互测试补齐新坐标;两篇返回键文档同步
    • 未包含固件镜像重建与真机复验。
  • chore(release): 记录网页发布并加打包凭据门禁
    • 新增 2026-10-21 站点发布记录:version d3345369、64/64 回抓、16/16 验签、
    • r5 六段通过;同时写明未归因的返回首页连接中断、控制台仅一条 Cloudflare
    • 边缘注入告警,以及未放行项(固件 C 侧未重建、应用未做真机安装验收)
    • 体验审查补修复收口与验证结果
    • 记录闭源边界与许可证初查:自有声明、第三方告知、移植来源、历史分发
    • 记录固件打包与网站 CI 的凭据特征门禁、覆盖边界
    • tools/prepare-web-firmware.py 一并提交:打包前扫描六段镜像,命中完整 PEM
    • 私钥或常见 token 特征即拒绝,且不创建输出目录。
  • chore: 把工作区里散落的源文件纳入版本库
    • 之前有三块源在工作区里没进仓库,等于一次磁盘清理就没了:
    • tools/serial_cmd.py、tools/ble_scan.py(真机串口与 BLE 小工具)
    • 收进 tools/,工作区根的 tools/ 改成指向它的软链,旧命令照旧能跑;
    • 文档里 6 份的路径引用同步改成仓库内路径
    • espruino/ 与 boards/ 收进 experiments/espruino/:这是给 1.28” 圆屏准备的
    • 另一套手表应用方案(Espruino JS,无应用隔离),与 C + Lua 沙箱那条路线
    • 互斥,当前只作历史参考、不维护
    • README 补「仓库与工作区的关系」一节,写清哪个才是仓库、
    • 软链是怎么回事、哪些目录故意不纳管
    • build-artifacts/ 仍然留在仓库外:里面是整片 16 MB 设备备份(含 Wi-Fi 口令、
    • 用户公钥与已装应用数据)和一把一次性测试私钥,进了 git 就等于公开。
    • 已在该目录的 README.txt 里写明原因。
  • docs(release): 记录 r6 固件构建、真机验收与发布
    • r6 app bdb8e492 / bootloader bfc7bd52,ABI 11,六段包与 upgrade_from
    • 真机备份、烧写回读、启动检查与五项屏幕验收全部通过
    • 线上部署 5ea4129d / d59db5bd,发布后 64/64 回抓
    • 更新切角审计的“实机未复验”状态与站点发布记录的固件状态
  • feat(firmware): ABI 11 返回键强制托管 + 商店清单必须带商店签名
    • 固件:
    • ABI 10 → 11:返回键由固件强制托管,应用写 back:false 也删不掉返回键
    • (include/app_manager.h、port/microapp_port_lvgl.c、src/app_api.c)
    • 商店清单必须带商店私钥签名(index.sig):验签只用内置商店公钥,
    • 不回退到已登记的用户钥——那把钥匙谁都能登记,签清单等于没有边界
    • 清单上限从 8 KiB 提到 16 KiB(缓冲在 PSRAM):16 个应用的清单已 8339 字节,
    • 旧上限只剩几百字节余量,再加一个应用整份清单会被设备拒
    • 拉取失败点各有日志(初始化/连接/读/HTTP 状态),串口作业也把诊断记进 store-diag
    • Kconfig 新增 App store → Require signed store index(默认开)
    • 工具:
    • pack_app.py 新增 sign 子命令:给任意文件签 ECDSA P-256 / SHA-256 信封
    • build_repo.py:自动生成 index.sig,支持 –skip-pack(不重打包只重建清单)、
    • 透传 released/changes、尊重 app.json 里的 publish:false
    • 应用:
    • 新增 spectrum(麦克风频谱)与 tiltblock(倾斜方块),fftprobe 标 publish:false
    • weather 1.0.2:新增 LOCATE,按城市名反查经纬度
    • market 改直连腾讯行情接口
    • 文档:手册同步 ABI 11 与恢复流程,新增三份评审/安全记录
  • docs: 工作区软链已删除,路径一律写仓库内真身