自动汇总 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: 工作区软链已删除,路径一律写仓库内真身